loading…
Search for a command to run...
loading…
An enhanced MCP server for the Yuque knowledge base that provides advanced document management, directory tree navigation, and structural adjustment capabilitie
An enhanced MCP server for the Yuque knowledge base that provides advanced document management, directory tree navigation, and structural adjustment capabilities. It enables AI assistants to manage complex content hierarchies, move nodes, and execute general OpenAPI requests within the Yuque platform.
语雀 MCP 服务。
它在现有 yuque-mcp-server 的基础上补了几类关键能力:
parentUuid 的文档创建yuque_requestyuque_multipart_request英文文档见 README.en.md。
适合这些语雀自动化需求:
已经完成并验证:
yuque_get_default_repositoryyuque_get_repository_toc_treeyuque_create_doc + parentUuidyuque_move_documentyuque_create_toc_nodeyuque_delete_toc_node真实联调已通过的能力:
必填:
YUQUE_TOKEN可选:
YUQUE_API_BASE_URLYUQUE_TIMEOUT_MSYUQUE_RETRIESYUQUE_DEFAULT_REPO_IDYUQUE_DEFAULT_REPO_NAMESPACE说明:
YUQUE_DEFAULT_REPO_ID 优先级高于 YUQUE_DEFAULT_REPO_NAMESPACE通过 npm 直接运行:
npx yuque-mcp-plus
如果要带环境变量:
YUQUE_TOKEN="your-token" npx yuque-mcp-plus
直接启动:
node ./src/index.js
本地检查:
npm run check
本地测试:
npm test
版本变更记录:
发布步骤:
如果你想在本地源码和 npm 已发布包之间切换,可以直接替换 command + args。
源码模式:
[mcp_servers.yuque]
command = "node"
args = [ "/Users/program/code/code_mcp/yuque-mcp-plus/src/index.js" ]
[mcp_servers.yuque.env]
YUQUE_TOKEN = "your-token"
npm 模式:
[mcp_servers.yuque]
command = "npx"
args = [ "-y", "yuque-mcp-plus" ]
[mcp_servers.yuque.env]
YUQUE_TOKEN = "your-token"
下面这些示例基于 2026-03-04 当天可查到的客户端文档整理。不同版本的 UI 或配置文件位置可能会变,但本地 stdio 启动方式基本一致。
官方文档当前推荐直接用命令注册本地 stdio MCP:
源码模式:
claude mcp add --transport stdio yuque -- node /Users/program/code/code_mcp/yuque-mcp-plus/src/index.js
npm 模式:
claude mcp add --transport stdio yuque -- npx -y yuque-mcp-plus
如果要带环境变量:
claude mcp add --transport stdio --env YUQUE_TOKEN=your-token yuque -- node /Users/program/code/code_mcp/yuque-mcp-plus/src/index.js
claude mcp add --transport stdio --env YUQUE_TOKEN=your-token yuque -- npx -y yuque-mcp-plus
常用管理命令:
claude mcp list
claude mcp get yuque
如果你使用项目共享配置,也可以把它写进项目根目录的 .mcp.json:
源码模式:
{
"mcpServers": {
"yuque": {
"command": "node",
"args": [
"/Users/program/code/code_mcp/yuque-mcp-plus/src/index.js"
],
"env": {
"YUQUE_TOKEN": "${YUQUE_TOKEN}"
}
}
}
}
npm 模式:
{
"mcpServers": {
"yuque": {
"command": "npx",
"args": [
"-y",
"yuque-mcp-plus"
],
"env": {
"YUQUE_TOKEN": "${YUQUE_TOKEN}"
}
}
}
}
Qoder 当前支持在设置页里直接添加 MCP。
操作路径:
MCPMy Servers 里点击 + Add本项目可直接使用:
源码模式:
{
"mcpServers": {
"yuque": {
"command": "node",
"args": [
"/Users/program/code/code_mcp/yuque-mcp-plus/src/index.js"
],
"env": {
"YUQUE_TOKEN": "your-token"
}
}
}
}
npm 模式:
{
"mcpServers": {
"yuque": {
"command": "npx",
"args": [
"-y",
"yuque-mcp-plus"
],
"env": {
"YUQUE_TOKEN": "your-token"
}
}
}
}
保存后如果能看到连接图标,说明服务已成功连上。使用时要切到 Agent mode,这样 Qoder 才会调用 MCP 工具。
OpenCode 当前在 opencode.jsonc 里配置 MCP。本地 MCP 要放在 mcp 字段下,并声明为 type: "local"。
示例:
源码模式:
{
"$schema": "https://opencode.ai/config.json",
"mcp": {
"yuque": {
"type": "local",
"command": [
"node",
"/Users/program/code/code_mcp/yuque-mcp-plus/src/index.js"
],
"enabled": true,
"environment": {
"YUQUE_TOKEN": "your-token"
}
}
}
}
npm 模式:
{
"$schema": "https://opencode.ai/config.json",
"mcp": {
"yuque": {
"type": "local",
"command": [
"npx",
"-y",
"yuque-mcp-plus"
],
"enabled": true,
"environment": {
"YUQUE_TOKEN": "your-token"
}
}
}
}
使用时可以在提示词里直接点名,例如:
use the yuque tool to list my repositories
Trae 已经支持 MCP,但我当前没查到和 Qoder/OpenCode 一样完整公开的本地配置文件格式文档。所以这里按目前公开的接入方式写最稳的 UI 配置步骤。
常见操作路径:
MCPSTDIO 服务建议填写:
源码模式:
yuquenode/Users/program/code/code_mcp/yuque-mcp-plus/src/index.jsYUQUE_TOKEN=your-tokennpm 模式:
yuquenpx-y yuque-mcp-plusYUQUE_TOKEN=your-token说明:
mcpServers 配置command + args + env| 工具 | 用途 | 常用关键参数 |
|---|---|---|
yuque_hello |
检查服务和 token 是否可用 | 无 |
yuque_request |
通用 OpenAPI 透传 | method, path, params, body |
yuque_multipart_request |
通用 multipart 上传请求,适合附件类接口 | method, path, params, fields, files |
yuque_get_user |
获取当前用户信息 | 无 |
yuque_get_repos |
获取知识库列表 | ownerLogin, ownerType, userId |
yuque_list_groups |
获取当前用户或指定用户的团队列表 | userId |
yuque_get_repo |
获取单个知识库详情 | repoId, repoNamespace |
yuque_get_default_repository |
解析默认知识库 | 无 |
yuque_search |
搜索文档或知识库内容 | query, type, repoId, page |
| 工具 | 用途 | 常用关键参数 |
|---|---|---|
yuque_get_docs |
列出知识库文档 | repoId, repoNamespace, limit, offset |
yuque_get_doc |
获取单篇文档详情 | docId, repoId, repoNamespace |
yuque_create_doc |
创建文档,可挂到目录节点下 | repoId, title, body, format, parentUuid |
yuque_update_doc |
更新文档标题或正文 | docId, title, body, format |
yuque_delete_doc |
删除文档 | docId, repoId, repoNamespace |
yuque_create_repo |
创建知识库 | name, slug, description, ownerLogin, ownerType |
yuque_update_repo |
更新知识库配置 | repoId, repoNamespace, name, slug, description, isPublic |
yuque_delete_repo |
删除知识库 | repoId, repoNamespace |
| 工具 | 用途 | 常用关键参数 |
|---|---|---|
yuque_get_repository_toc_tree |
获取完整目录树 | repoId, repoNamespace |
yuque_create_toc_node |
创建目录或链接节点 | repoId, title, nodeType, parentUuid, actionMode, position |
yuque_delete_toc_node |
删除目录节点,支持根节点自动推导 | repoId, nodeUuid, parentUuid |
yuque_move_document |
移动文档或目录节点 | repoId, docId 或 nodeUuid, parentUuid, actionMode, position |
yuque_update_repository_toc |
直接透传底层 TOC 更新 | repoId, repoNamespace, payload |
| 工具 | 用途 | 常用关键参数 |
|---|---|---|
yuque_list_doc_versions |
获取文档版本列表 | docId |
yuque_get_doc_version |
获取某个文档版本详情 | versionId |
yuque_list_group_members |
获取团队成员列表 | login |
yuque_update_group_member |
更新团队成员角色 | login, userId, role |
yuque_remove_group_member |
移除团队成员 | login, userId |
yuque_group_stats |
获取团队总统计 | login |
yuque_group_member_stats |
获取团队成员统计 | login |
yuque_group_book_stats |
获取团队知识库统计 | login |
yuque_group_doc_stats |
获取团队文档统计 | login |
| 别名 | 实际工具 |
|---|---|
yuque_list_repos |
yuque_get_repos |
yuque_list_docs |
yuque_get_docs |
yuque_get_toc |
yuque_get_repository_toc_tree |
yuque_update_toc |
yuque_update_repository_toc |
{}
对应工具:
yuque_get_default_repository{
"repoId": 63978478
}
对应工具:
yuque_get_repository_toc_tree{
"repoId": 63978478,
"title": "新文档",
"body": "# 标题\n\n正文",
"format": "markdown",
"parentUuid": "-W39TNJu_tufwcVm"
}
对应工具:
yuque_create_doc{
"repoId": 63978478,
"title": "新目录",
"nodeType": "TITLE",
"parentUuid": "-W39TNJu_tufwcVm",
"actionMode": "child",
"position": "append"
}
如果不传 parentUuid,则创建在根层级。
对应工具:
yuque_create_toc_node最简单的调用方式:
{
"repoId": 63978478,
"nodeUuid": "CxEXaBKTPFRKaopb"
}
说明:
parent_uuidparentUuid 覆盖自动推导对应工具:
yuque_delete_toc_node{
"repoId": 63978478,
"nodeUuid": "Mir36kbfs2f4g130",
"parentUuid": "-W39TNJu_tufwcVm",
"actionMode": "child",
"position": "append"
}
如果是移动文档,也可以传:
{
"repoId": 63978478,
"docId": 259413650,
"parentUuid": "-W39TNJu_tufwcVm",
"actionMode": "child",
"position": "append"
}
对应工具:
yuque_move_document{
"method": "GET",
"path": "/user"
}
或:
{
"method": "GET",
"path": "/search",
"params": {
"q": "联商客",
"type": "doc"
}
}
对应工具:
yuque_request下面这部分按工具拆开,适合复制后直接改参数。
yuque_get_default_repository{}
yuque_get_repos{}
按用户或团队过滤:
{
"ownerLogin": "your-team",
"ownerType": "groups"
}
yuque_get_repo{
"repoId": 63978478
}
yuque_get_repository_toc_tree{
"repoId": 63978478
}
yuque_create_toc_node创建根目录:
{
"repoId": 63978478,
"title": "一级目录",
"nodeType": "TITLE"
}
创建子目录:
{
"repoId": 63978478,
"title": "二级目录",
"nodeType": "TITLE",
"parentUuid": "-W39TNJu_tufwcVm",
"actionMode": "child",
"position": "append"
}
yuque_delete_toc_node自动删除目录节点:
{
"repoId": 63978478,
"nodeUuid": "CxEXaBKTPFRKaopb"
}
yuque_create_doc创建根层级文档:
{
"repoId": 63978478,
"title": "根文档",
"body": "# 标题\n\n正文",
"format": "markdown"
}
创建到目录下:
{
"repoId": 63978478,
"title": "目录文档",
"body": "# 标题\n\n正文",
"format": "markdown",
"parentUuid": "-W39TNJu_tufwcVm"
}
yuque_update_doc{
"docId": 259413650,
"title": "更新后的标题",
"body": "# 新标题\n\n新正文",
"format": "markdown"
}
yuque_delete_doc{
"docId": 259413650
}
yuque_move_document按文档移动:
{
"repoId": 63978478,
"docId": 259413650,
"parentUuid": "-W39TNJu_tufwcVm",
"actionMode": "child",
"position": "append"
}
按目录节点移动:
{
"repoId": 63978478,
"nodeUuid": "Mir36kbfs2f4g130",
"parentUuid": "-W39TNJu_tufwcVm",
"actionMode": "child",
"position": "append"
}
yuque_search{
"query": "联商客",
"type": "doc",
"repoId": 63978478
}
yuque_list_doc_versions{
"docId": 259413650
}
yuque_get_doc_version{
"versionId": 123456789
}
yuque_list_group_members{
"login": "your-team"
}
yuque_update_group_member{
"login": "your-team",
"userId": 123456,
"role": 1
}
yuque_remove_group_member{
"login": "your-team",
"userId": 123456
}
yuque_group_stats{
"login": "your-team"
}
yuque_request查询当前用户:
{
"method": "GET",
"path": "/user"
}
评论类请求示例:
{
"method": "POST",
"path": "/repos/63978478/docs/259413650/comments",
"body": {
"body": "这是一条评论"
}
}
yuque_multipart_request附件上传类请求示例:
{
"method": "POST",
"path": "/repos/63978478/attachments",
"fields": {
"type": "file"
},
"files": [
{
"fieldName": "file",
"filePath": "/absolute/path/to/example.png",
"contentType": "image/png"
}
]
}
底层 TOC 更新:
{
"path": "/repos/63978478/toc",
"method": "PUT",
"body": {
"action": "removeNode",
"action_mode": "child",
"target_uuid": "-W39TNJu_tufwcVm",
"node_uuid": "Mir36kbfs2f4g130"
}
}
为了兼容官方 yuque/yuque-mcp-server 的命名习惯,项目提供了这些别名:
yuque_list_repos -> yuque_get_reposyuque_list_docs -> yuque_get_docsyuque_get_toc -> yuque_get_repository_toc_treeyuque_update_toc -> yuque_update_repository_tocyuque_request 访问yuque_multipart_request 处理上传类接口yuque_update_repository_toc 属于底层透传工具,适合高级场景说明:
openapi-metadata 和 sdk以下场景已经在真实语雀知识库里跑通过:
yuque_get_default_repository 可以正常返回默认知识库_defaultSourceyuque_get_repository_toc_tree 可以正确返回 TITLE、DOC 和层级关系uuid、parent_uuid、prev_uuid、sibling_uuidyuque_create_doc 传入 parentUuid 后,可以先创建文档,再正确挂载到指定目录下parent_uuid 正确yuque_move_document 已验证支持:docId 移动文档nodeUuid 移动 TOC 节点yuque_create_toc_node 已验证可创建根层级 TITLEyuque_delete_toc_node 已验证可删除:Missing YUQUE_TOKEN原因:
YUQUE_TOKEN处理:
config.toml 里的 [mcp_servers.yuque.env]YUQUE_TOKEN="your-token" node ./src/index.js
doc not found原因:
处理:
yuque_get_docs 或 yuque_get_doc 确认 docIdrepoId 或 repoNamespace 正确action invalid原因:
yuque_update_repository_toc 的底层 action 不符合语雀实际支持的值处理:
yuque_create_toc_nodeyuque_delete_toc_nodeyuque_move_documentyuque_update_repository_tocmissing action_mode原因:
action_mode处理:
yuque_delete_toc_nodeaction_mode invalid原因:
action_mode 与当前操作不匹配处理:
childsiblingyuque_delete_toc_node 中getaddrinfo ENOTFOUND www.yuque.com原因:
处理:
原因:
处理:
src/
config.js
index.js
server.js
tools.js
yuque-client.js
tests/
tools.test.js
yuque-client.test.js
核心实现位置:
测试文件:
Добавь это в claude_desktop_config.json и перезапусти Claude Desktop.
{
"mcpServers": {
"yuque-mcp-plus": {
"command": "npx",
"args": []
}
}
}