重新搜索wiki mcp
MCP服务器 Wiki.js 实例,让代理将其用作知识库。
特征:
- 29工具 (19读+10写)涵盖页面、评论、标签、资产、用户、导航和系统信息。
- 搜索、列出和浏览检索工作流程的页面(类似RAG的用法)。
- 按路径或页面ID获取页面内容,查看版本历史记录并还原以前的版本。
- 使用页面树、页面链接图和导航结构浏览网站层次结构。
- 完整的评论系统:列出、阅读、创建、更新和删除页面上的评论。
- 用于媒体文件发现的资产和文件夹浏览。
- 用户上下文:当前用户配置文件和用户搜索。
- 系统诊断:版本信息、站点配置和导航树。
- 标签管理:列出、搜索、更新和删除标签。
- 可选页面创建/更新/删除/移动/还原工具,带有明确的安全门。
- 内置资源:markdown语法指南、Mermaid图指南和API权限指南。
- 使用LLM友好的错误消息键入错误分类。
- GraphQL客户端,具有超时、指数回退重试和请求相关性。
- 安全强化:敏感字段过滤、URL验证、输入长度限制。
需求
- Node.js 20+
- 可访问的Wiki.js主机名
- 具有适当权限的Wiki.js API密钥(JWT)
设置
cp .env.example .env
npm install配置 .env:
WIKI_BASE_URL=https://your-wiki-hostname
WIKI_API_TOKEN=your_wikijs_api_key_jwt
WIKI_GRAPHQL_PATH=/graphql
WIKI_DEFAULT_LOCALE=en
WIKI_DEFAULT_EDITOR=markdown
# Mutating operations are disabled by default
WIKI_MUTATIONS_ENABLED=false
# Optional extra safety gate for writes. If set, write tools must pass matching confirm.
WIKI_MUTATION_CONFIRM_TOKEN=
WIKI_MUTATION_DRY_RUN=true
# Comma-separated path prefixes without leading slash (empty = no prefix restriction)
WIKI_ALLOWED_MUTATION_PATH_PREFIXES=
# HTTP resilience
WIKI_HTTP_TIMEOUT_MS=15000
WIKI_HTTP_MAX_RETRIES=2环境变量引用:
| 变量 | 必填 | 默认 | 描述 | ||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
WIKI_BASE_URL | 是 | - | 基本Wiki.js URL(例如, https://wiki.example.com). | ||||||||||
WIKI_API_TOKEN | 是 | - | Wiki.js API密钥JWT用于 Authorization: Bearer .... | ||||||||||
WIKI_GRAPHQL_PATH | 没有 | /graphql | GraphQL端点路径附加到 WIKI_BASE_URL. | ||||||||||
WIKI_DEFAULT_LOCALE | 没有 | en | 当工具输入不提供区域设置时使用的默认区域设置。 | ||||||||||
WIKI_DEFAULT_EDITOR | 没有 | markdown | 未指定时用于页面创建的默认编辑器。 | ||||||||||
WIKI_MUTATIONS_ENABLED | 没有 | false | 设置为时启用所有写入工具(页面、注释和标记突变) true. | ||||||||||
WIKI_MUTATION_CONFIRM_TOKEN | 没有 | `` (empty) | Optional extra safety gate. When set, write tool calls must provide matching confirm. | WIKI_MUTATION_DRY_RUN | No | true | When true, mutation tools return preview only and do not write to Wiki.js. | WIKI_ALLOWED_MUTATION_PATH_PREFIXES | No | `` (空) | 允许使用逗号分隔的路径前缀(不带前导斜线)进行突变。空表示没有前缀限制。 | ||
WIKI_HTTP_TIMEOUT_MS | 没有 | 15000 | HTTP请求超时(毫秒)(包括正文读取)。最低1。 | ||||||||||
WIKI_HTTP_MAX_RETRIES | 没有 | 2 | 瞬时读取失败的最大重试次数(408、502-504)。突变永远不会被再次尝试。最小值0。 |
Wiki.js先决条件(GraphQL+neneneba API密钥):
- 此MCP内部使用Wiki.js GraphQL。
- 在Wiki.js管理中,转到
Administration -> API并启用API访问。 - 创建API密钥并将其设置为
WIKI_API_TOKEN.
MCP客户端配置示例(~/.mcp.json)
{
"mcpServers": {
"requarks-wiki": {
"command": "npx",
"args": ["-y", "@yowu-dev/requarks-wiki-mcp@latest"],
"env": {
"WIKI_BASE_URL": "https://wiki.your-domain.dev",
"WIKI_API_TOKEN": "your_wikijs_api_key_jwt",
"WIKI_GRAPHQL_PATH": "/graphql",
"WIKI_DEFAULT_LOCALE": "en",
"WIKI_DEFAULT_EDITOR": "markdown",
"WIKI_MUTATIONS_ENABLED": "true",
"WIKI_MUTATION_CONFIRM_TOKEN": "CONFIRM_UPDATE",
"WIKI_MUTATION_DRY_RUN": "false",
"WIKI_ALLOWED_MUTATION_PATH_PREFIXES": "",
"WIKI_HTTP_TIMEOUT_MS": "15000",
"WIKI_HTTP_MAX_RETRIES": "2"
}
}
}
}通过本地路径注册MCP(无需npm Publish)
您可以直接从本地项目路径注册此MCP服务器,而无需从npm发布/安装。
- 在此存储库中构建
npm install
npm run build- 在中注册本地绝对路径
~/.mcp.json
{
"mcpServers": {
"requarks-wiki-local": {
"command": "node",
"args": ["/absolute/path/to/requarks-wiki-mcp/dist/index.js"],
"env": {
"WIKI_BASE_URL": "https://wiki.your-domain.dev",
"WIKI_API_TOKEN": "your_wikijs_api_key_jwt",
"WIKI_GRAPHQL_PATH": "/graphql",
"WIKI_DEFAULT_LOCALE": "en",
"WIKI_DEFAULT_EDITOR": "markdown",
"WIKI_MUTATIONS_ENABLED": "true",
"WIKI_MUTATION_CONFIRM_TOKEN": "",
"WIKI_MUTATION_DRY_RUN": "false",
"WIKI_ALLOWED_MUTATION_PATH_PREFIXES": "",
"WIKI_HTTP_TIMEOUT_MS": "15000",
"WIKI_HTTP_MAX_RETRIES": "2"
}
}
}
}笔记:
- 始终使用绝对路径。
- 重新运行
npm run build代码更改后dist/index.js保持最新状态。
跑
发展:
npm run dev构建+运行:
npm run build
npm startMCP工具
阅读工具(19)
页:
| 工具 | 说明 |
|---|---|
wikijs_search_pages | 跨wiki页面的全文搜索。 |
wikijs_list_pages | 列出具有可选区域设置筛选器和限制的页面。 |
wikijs_get_page_by_path | 按路径+区域设置获取整页内容。 |
wikijs_get_page_by_id | 通过数字ID获取整页内容 |
wikijs_get_page_tree | 浏览网站层次结构(文件夹、页面或两者)。 |
wikijs_get_page_history | 查看页面的编辑历史记录。 |
wikijs_get_page_version | 获取特定版本的完整内容。 |
wikijs_get_page_links | 获取页面链接关系(知识图)。 |
标签:
| 工具 | 说明 |
|---|---|
wikijs_list_tags | 列出内容分类发现的所有标签。 |
wikijs_search_tags | 搜索与查询字符串匹配的标签 |
评论:
| 工具 | 说明 |
|---|---|
wikijs_list_comments | 按路径和区域设置列出页面的所有注释。 |
wikijs_get_comment | 按ID获取单个评论 |
系统和导航:
| 工具 | 说明 |
|---|---|
wikijs_get_system_info | Wiki.js版本、数据库类型和使用统计信息。 |
wikijs_get_navigation | 导航树结构。 |
wikijs_get_site_config | 站点配置(非敏感字段)。 |
资产:
| 工具 | 说明 |
|---|---|
wikijs_list_assets | 列出带有可选文件夹和类型过滤器的资产。 |
wikijs_list_asset_folders | 列出资产文件夹。 |
用户:
| 工具 | 说明 |
|---|---|
wikijs_get_current_user | 获取当前已通过身份验证的API用户的配置文件。 |
wikijs_search_users | 按姓名或电子邮件搜索用户。 |
写入工具(10,禁用,除非 WIKI_MUTATIONS_ENABLED=true)
页面突变:
| 工具 | 说明 |
|---|---|
wikijs_create_page | 创建一个包含内容、标签和元数据的新页面。 |
wikijs_update_page | 按ID更新现有页面 |
wikijs_delete_page | 按ID删除页面。可能需要 manage:pages 或 delete:pages. |
wikijs_move_page | 将页面移动/重命名到新路径或区域设置。 |
wikijs_restore_page | 将页面还原到以前的版本。 |
评论突变:
| 工具 | 说明 |
|---|---|
wikijs_create_comment | 在页面上创建评论。 |
wikijs_update_comment | 按ID更新现有评论 |
wikijs_delete_comment | 按ID删除评论 |
标签突变:
| 工具 | 说明 |
|---|---|
wikijs_update_tag | 更新标签的slug和标题。 |
wikijs_delete_tag | 从所有页面中删除标记。 |
突变安全性
- 当
WIKI_MUTATION_CONFIRM_TOKEN已设置,变异工具需要匹配confirm争论。 - 当
WIKI_MUTATION_DRY_RUN=true,编写工具返回预览,不要修改Wiki.js。 - 如果
WIKI_ALLOWED_MUTATION_PATH_PREFIXES设置后,页面和注释创建突变仅限于这些路径前缀。 - 所有突变尝试都会向stderr写入结构化审计行。
MCP资源
| 资源URI | 描述 |
|---|---|
wikijs://markdown-guide | Wiki.js markdown语法指南(CommonMark/GFM+Wiki.js特定扩展),用于页面创作和更新。 |
wikijs://mermaid-guide | Wiki.js的Mermaid 8.8.2图表语法指南(9种支持的图表类型,不支持的功能警告,版本限制)。 |
wikijs://api-permissions-guide | Wiki.js API权限模型、错误代码和API密钥配置指南,用于自我诊断权限错误。 |
权限说明(Wiki.js)
对于API密钥来说,Wiki.js的权限行为可能令人惊讶。特别地:
- 某些操作可能需要
manage:pages/delete:pages页面规则级别的规则。 - 阅读
content可能需要read:source这取决于模式/字段级别的检查。 - 评论操作需要
read:comments,write:comments,或manage:comments. - 系统信息和导航需要管理员级别的API密钥权限。
常见错误代码:
| 代码 | 含义 |
|---|---|
| 6013 | PageViewForbidden --检查组权限+页面规则 read:pages/read:source |
| 6003 | 页面不存在 |
| 8002 | CommentPostForbidden |
| 8003 | CommentNotFound |
| 8004 | CommentViewForbidden |
| 8005 | CommentManageForbidden |
有关更多详细信息,请阅读 wikijs://api-permissions-guide 资源。
建议的最低API密钥权限
对于读取量大的KB使用:
read:pages,read:sourceread:comments(用于评论浏览)- 允许对预期路径/区域设置进行这些权限的页面规则
对于写入工作流:
write:pages(创建和更新)manage:pages或delete:pages(用于删除/移动操作)write:comments,manage:comments(用于评论突变)manage:system(用于标签管理)
安全指导
- 仅保留API令牌服务器端。
- 从只读权限开始。
- 保持
WIKI_MUTATIONS_ENABLED=false除非需要更新。 - 可选硬化:设置强随机
WIKI_MUTATION_CONFIRM_TOKEN并通过匹配confirm用于写电话。 - 保持
WIKI_MUTATION_DRY_RUN=true直到你准备好进行真正的写作。 - 使用
WIKI_ALLOWED_MUTATION_PATH_PREFIXES以限制写入范围。 wikijs_get_system_info默认情况下过滤敏感的基础结构字段(dbHost、configFile等)。scriptJs/scriptCss页面创建/更新中的字段长度有限(10000个字符),并包含浏览器执行警告。
