yuque-ai-mcp 2.13.4 → 2.14.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +33 -78
- package/README_CN.md +27 -72
- package/SKILL.md +11 -60
- package/config/config.example.json +2 -48
- package/dist/common/api-client.d.ts +1 -1
- package/dist/common/api-client.js +1 -1
- package/dist/common/api-client.js.map +1 -1
- package/dist/common/config.d.ts +0 -55
- package/dist/common/config.js +1 -32
- package/dist/common/config.js.map +1 -1
- package/dist/common/register-tools.d.ts +0 -3
- package/dist/common/register-tools.js +0 -9
- package/dist/common/register-tools.js.map +1 -1
- package/dist/common/validate.d.ts +5 -0
- package/dist/common/validate.js +20 -0
- package/dist/common/validate.js.map +1 -1
- package/dist/doc/batch-get-docs.js +10 -18
- package/dist/doc/batch-get-docs.js.map +1 -1
- package/dist/doc/copy-doc.js +13 -17
- package/dist/doc/copy-doc.js.map +1 -1
- package/dist/doc/import-file.js +14 -17
- package/dist/doc/import-file.js.map +1 -1
- package/dist/doc/import-url.js +13 -17
- package/dist/doc/import-url.js.map +1 -1
- package/dist/mine/sort-book-stack.js +29 -4
- package/dist/mine/sort-book-stack.js.map +1 -1
- package/dist/mine/update-book-stack.js +26 -4
- package/dist/mine/update-book-stack.js.map +1 -1
- package/dist/note/update-note.js +6 -0
- package/dist/note/update-note.js.map +1 -1
- package/dist/repo/batch-get-repos.js +9 -20
- package/dist/repo/batch-get-repos.js.map +1 -1
- package/dist/repo/copy-repo.js +7 -16
- package/dist/repo/copy-repo.js.map +1 -1
- package/dist/toc/batch-update.js +10 -12
- package/dist/toc/batch-update.js.map +1 -1
- package/dist/toc/update-toc.js +6 -7
- package/dist/toc/update-toc.js.map +1 -1
- package/dist/web-doc/batch-move-catalog-nodes.js +1 -1
- package/dist/web-doc/copy-catalog-node.js +1 -1
- package/dist/web-doc/move-catalog-node.js +1 -1
- package/package.json +2 -2
- package/dist/common/repo-capacity.d.ts +0 -26
- package/dist/common/repo-capacity.js +0 -105
- package/dist/common/repo-capacity.js.map +0 -1
- package/dist/common/schedule-common.d.ts +0 -38
- package/dist/common/schedule-common.js +0 -111
- package/dist/common/schedule-common.js.map +0 -1
- package/dist/crawler/extract.d.ts +0 -19
- package/dist/crawler/extract.js +0 -220
- package/dist/crawler/extract.js.map +0 -1
- package/dist/crawler/fetch.d.ts +0 -8
- package/dist/crawler/fetch.js +0 -85
- package/dist/crawler/fetch.js.map +0 -1
- package/dist/crawler/index.d.ts +0 -6
- package/dist/crawler/index.js +0 -10
- package/dist/crawler/index.js.map +0 -1
- package/dist/crawler/save.d.ts +0 -11
- package/dist/crawler/save.js +0 -160
- package/dist/crawler/save.js.map +0 -1
- package/dist/crawler/schedule.d.ts +0 -12
- package/dist/crawler/schedule.js +0 -132
- package/dist/crawler/schedule.js.map +0 -1
- package/dist/kv/common.d.ts +0 -34
- package/dist/kv/common.js +0 -191
- package/dist/kv/common.js.map +0 -1
- package/dist/kv/delete.d.ts +0 -7
- package/dist/kv/delete.js +0 -52
- package/dist/kv/delete.js.map +0 -1
- package/dist/kv/get.d.ts +0 -7
- package/dist/kv/get.js +0 -52
- package/dist/kv/get.js.map +0 -1
- package/dist/kv/index.d.ts +0 -6
- package/dist/kv/index.js +0 -10
- package/dist/kv/index.js.map +0 -1
- package/dist/kv/list.d.ts +0 -5
- package/dist/kv/list.js +0 -42
- package/dist/kv/list.js.map +0 -1
- package/dist/kv/set.d.ts +0 -7
- package/dist/kv/set.js +0 -54
- package/dist/kv/set.js.map +0 -1
- package/dist/rss/dedup.d.ts +0 -9
- package/dist/rss/dedup.js +0 -24
- package/dist/rss/dedup.js.map +0 -1
- package/dist/rss/fetch-feed.d.ts +0 -8
- package/dist/rss/fetch-feed.js +0 -290
- package/dist/rss/fetch-feed.js.map +0 -1
- package/dist/rss/index.d.ts +0 -5
- package/dist/rss/index.js +0 -8
- package/dist/rss/index.js.map +0 -1
- package/dist/rss/list-sources.d.ts +0 -8
- package/dist/rss/list-sources.js +0 -39
- package/dist/rss/list-sources.js.map +0 -1
- package/dist/rss/parser.d.ts +0 -27
- package/dist/rss/parser.js +0 -87
- package/dist/rss/parser.js.map +0 -1
- package/dist/rss/schedule.d.ts +0 -14
- package/dist/rss/schedule.js +0 -171
- package/dist/rss/schedule.js.map +0 -1
- package/dist/rss/sources.d.ts +0 -18
- package/dist/rss/sources.js +0 -12
- package/dist/rss/sources.js.map +0 -1
package/README.md
CHANGED
|
@@ -4,11 +4,11 @@
|
|
|
4
4
|
|
|
5
5
|
<h1 align="center">yuque-ai-mcp</h1>
|
|
6
6
|
<p align="center">
|
|
7
|
-
<b>
|
|
7
|
+
<b>62 MCP tools (45 OpenAPI + 17 web-API)</b>
|
|
8
8
|
</p>
|
|
9
9
|
|
|
10
10
|
<p align="center">
|
|
11
|
-
<a href="https://github.com/yehuoshun/yuque-ai-mcp"><img src="https://img.shields.io/badge/version-2.
|
|
11
|
+
<a href="https://github.com/yehuoshun/yuque-ai-mcp"><img src="https://img.shields.io/badge/version-2.14.1-blue" alt="version" /></a>
|
|
12
12
|
<a href="LICENSE"><img src="https://img.shields.io/badge/license-MIT-green" alt="license" /></a>
|
|
13
13
|
<a href="https://github.com/yehuoshun/yuque-ai-skills"><img src="https://img.shields.io/badge/skills-67%20guides-orange" alt="skills" /></a>
|
|
14
14
|
</p>
|
|
@@ -19,13 +19,13 @@
|
|
|
19
19
|
|
|
20
20
|
---
|
|
21
21
|
|
|
22
|
-
A full-featured Yuque (语雀) MCP Server built on the [Model Context Protocol](https://modelcontextprotocol.io/). Provides
|
|
22
|
+
A full-featured Yuque (语雀) MCP Server built on the [Model Context Protocol](https://modelcontextprotocol.io/). Provides 62 fine-grained tools across 13 domains — 45 Yuque OpenAPI endpoints plus 17 web-API tools requiring a browser session cookie.
|
|
23
23
|
|
|
24
24
|
## Why
|
|
25
25
|
|
|
26
|
-
- **19 →
|
|
26
|
+
- **19 → 62 tools** — 3x more coverage than the official [yuque-mcp-server](https://github.com/yuque/yuque-mcp-server)
|
|
27
27
|
- **Dual transport** — stdio + HTTP SSE, shared registry, zero downtime on reload
|
|
28
|
-
- **Modular architecture** —
|
|
28
|
+
- **Modular architecture** — 13 domains, barrel exports, single source of truth registry
|
|
29
29
|
- **Full API coverage** — group, recycle, upload, statistics, versions, boards — all the missing pieces
|
|
30
30
|
- **[Skill layer](https://github.com/yehuoshun/yuque-ai-skills)** — 67 usage guides for AI agents
|
|
31
31
|
|
|
@@ -72,14 +72,13 @@ npm run dev:http # HTTP SSE mode (http://localhost:3099)
|
|
|
72
72
|
| **recycle** | 3 | List, restore, destroy (Cookie auth) |
|
|
73
73
|
| **upload** | 1 | File upload to Yuque CDN (Cookie auth) |
|
|
74
74
|
| **board** | 3 | Mindmap, flowchart, architecture diagram |
|
|
75
|
-
| **
|
|
76
|
-
| **
|
|
77
|
-
| **
|
|
78
|
-
| **crawler** | 4 | Fetch, CSS extract, dedup save, schedule analysis |
|
|
79
|
-
| **kv** | 4 | Get, set, delete, list — incremental sharding, 250KB/doc limit |
|
|
80
|
-
| **Total** | **73** | |
|
|
75
|
+
| **mine** | 4 | Book stacks, editor center, update/sort book stack (Cookie auth) |
|
|
76
|
+
| **web_doc** | 8 | Web API: get/list docs, repos, TOC, move/copy/delete catalog nodes (Cookie auth) |
|
|
77
|
+
| **Total** | **62** | |
|
|
81
78
|
|
|
82
|
-
|
|
79
|
+
**Auth split**: 45 tools use the OpenAPI (`X-Auth-Token`); 17 are Web API requiring Cookie + `x-csrf-token` — `web_doc` (8), `mine` (4), `recycle` (3), `upload` (1), `web_search` (1).
|
|
80
|
+
|
|
81
|
+
### All 62 Tools
|
|
83
82
|
|
|
84
83
|
| Tool | Domain | Description |
|
|
85
84
|
|------|--------|-------------|
|
|
@@ -89,14 +88,6 @@ npm run dev:http # HTTP SSE mode (http://localhost:3099)
|
|
|
89
88
|
| `yuque_search` | search | 通用搜索文档/知识库 |
|
|
90
89
|
| `yuque_rag_search` | search | RAG 检索增强搜索 + 自动获取文档内容 |
|
|
91
90
|
| `yuque_web_search` | search | Cookie 态 Web 搜索,返回完整文档对象 + 精确总数 + 高亮摘要 |
|
|
92
|
-
| `yuque_web_get_doc` | web_doc | Cookie 态读文档正文(含 body/content),不受会员过期限流 |
|
|
93
|
-
| `yuque_web_list_docs` | web_doc | Cookie 态列文档列表,更丰富的字段 |
|
|
94
|
-
| `yuque_web_list_repos` | web_doc | Cookie 态列知识库列表,含权限信息 |
|
|
95
|
-
| `yuque_web_get_toc` | web_doc | Cookie 态获取知识库目录 TOC |
|
|
96
|
-
| `yuque_web_delete_doc` | web_doc | Cookie 态删除文档(v2 被限流时的备用通道,移入回收站) |
|
|
97
|
-
| `yuque_web_copy_catalog_node` | web_doc | Cookie 态跨库复制目录节点(服务端重传附件,保留文件卡片) |
|
|
98
|
-
| `yuque_web_move_catalog_node` | web_doc | Cookie 态移动目录节点 |
|
|
99
|
-
| `yuque_web_batch_move_catalog_nodes` | web_doc | Cookie 态批量移动目录节点 |
|
|
100
91
|
| `yuque_get_group_users` | group | 获取团队成员列表 |
|
|
101
92
|
| `yuque_update_group_user` | group | 变更团队成员角色 |
|
|
102
93
|
| `yuque_delete_group_user` | group | 删除团队成员 |
|
|
@@ -134,28 +125,25 @@ npm run dev:http # HTTP SSE mode (http://localhost:3099)
|
|
|
134
125
|
| `yuque_get_note` | note | 获取小记详情 |
|
|
135
126
|
| `yuque_create_note` | note | 创建小记 |
|
|
136
127
|
| `yuque_update_note` | note | 更新小记 |
|
|
137
|
-
| `yuque_list_recycles` | recycle |
|
|
138
|
-
| `yuque_restore_recycle` | recycle |
|
|
139
|
-
| `yuque_destroy_recycle` | recycle |
|
|
140
|
-
| `yuque_upload_attachment` | upload | 上传文件到语雀 CDN |
|
|
128
|
+
| `yuque_list_recycles` | recycle | 列出回收站项目(Cookie) |
|
|
129
|
+
| `yuque_restore_recycle` | recycle | 恢复回收站项目(Cookie) |
|
|
130
|
+
| `yuque_destroy_recycle` | recycle | 彻底删除回收站项目(Cookie) |
|
|
131
|
+
| `yuque_upload_attachment` | upload | 上传文件到语雀 CDN(Cookie) |
|
|
141
132
|
| `yuque_get_board` | board | 获取文档中的画板资源 |
|
|
142
133
|
| `yuque_create_board` | board | 在文档中创建画板资源 |
|
|
143
134
|
| `yuque_update_board` | board | 更新文档中的画板资源 |
|
|
144
|
-
| `
|
|
145
|
-
| `
|
|
146
|
-
| `
|
|
147
|
-
| `
|
|
148
|
-
| `
|
|
149
|
-
| `
|
|
150
|
-
| `
|
|
151
|
-
| `
|
|
152
|
-
| `
|
|
153
|
-
| `
|
|
154
|
-
| `
|
|
155
|
-
| `
|
|
156
|
-
| `yuque_kv_set` | kv | 增量设置 key-value,超 250KB 自动分片 |
|
|
157
|
-
| `yuque_kv_delete` | kv | 遍历分片查找并删除 key |
|
|
158
|
-
| `yuque_kv_list` | kv | 列出已配置的 KV 命名空间 |
|
|
135
|
+
| `yuque_get_book_stacks` | mine | 获取知识库分组(书架)列表(Cookie) |
|
|
136
|
+
| `yuque_get_editor_center` | mine | 获取个人编辑中心全景数据(Cookie) |
|
|
137
|
+
| `yuque_update_book_stack` | mine | 移动知识库到指定分组(书架)(Cookie) |
|
|
138
|
+
| `yuque_sort_book_stack` | mine | 排序知识库分组(书架)(Cookie) |
|
|
139
|
+
| `yuque_web_get_doc` | web_doc | Cookie 态读文档正文(含 body/content),不受会员过期限流 |
|
|
140
|
+
| `yuque_web_list_docs` | web_doc | Cookie 态列文档列表,更丰富的字段 |
|
|
141
|
+
| `yuque_web_list_repos` | web_doc | Cookie 态列知识库列表,含权限信息 |
|
|
142
|
+
| `yuque_web_get_toc` | web_doc | Cookie 态获取知识库目录 TOC |
|
|
143
|
+
| `yuque_web_delete_doc` | web_doc | Cookie 态删除文档(移入回收站,v2 被限流时的备用通道) |
|
|
144
|
+
| `yuque_web_move_catalog_node` | web_doc | Cookie 态移动目录节点 |
|
|
145
|
+
| `yuque_web_copy_catalog_node` | web_doc | Cookie 态复制目录节点 |
|
|
146
|
+
| `yuque_web_batch_move_catalog_nodes` | web_doc | Cookie 态批量移动目录节点 |
|
|
159
147
|
|
|
160
148
|
See [SKILL.md](SKILL.md) or [yuque-ai-skills](https://github.com/yehuoshun/yuque-ai-skills) for full tool documentation with parameters and examples.
|
|
161
149
|
|
|
@@ -163,7 +151,7 @@ See [SKILL.md](SKILL.md) or [yuque-ai-skills](https://github.com/yehuoshun/yuque
|
|
|
163
151
|
|
|
164
152
|
| Feature | Official yuque-mcp-server | yuque-ai-mcp |
|
|
165
153
|
|---------|--------------------------|--------------|
|
|
166
|
-
| Tools | 19 | **
|
|
154
|
+
| Tools | 19 | **62** |
|
|
167
155
|
| Granularity | Coarse | **Fine-grained** (1 tool / endpoint) |
|
|
168
156
|
| Group, Recycle, Upload, Statistics | ❌ | ✅ |
|
|
169
157
|
| Versions, Diff, Cross-book Copy | ❌ | ✅ |
|
|
@@ -176,10 +164,10 @@ See [SKILL.md](SKILL.md) or [yuque-ai-skills](https://github.com/yehuoshun/yuque
|
|
|
176
164
|
```
|
|
177
165
|
server/src/
|
|
178
166
|
├── common/ # Shared: config, errors, types, format, validate,
|
|
179
|
-
│ # api-client, web-request, register-tools, copy/export
|
|
180
|
-
│ #
|
|
167
|
+
│ # api-client, web-request, register-tools, copy/export common,
|
|
168
|
+
│ # toc-cache (configurable TTL), text-utils
|
|
181
169
|
├── user/ search/ group/ doc/ toc/ repo/ statistic/
|
|
182
|
-
├── note/ recycle/ upload/ board/
|
|
170
|
+
├── note/ recycle/ upload/ board/ mine/ web-doc/
|
|
183
171
|
├── index.ts # stdio entry
|
|
184
172
|
└── http.ts # HTTP SSE entry (port 3099)
|
|
185
173
|
```
|
|
@@ -191,43 +179,10 @@ server/src/
|
|
|
191
179
|
"token": "Your Yuque API Token",
|
|
192
180
|
"api_base": "https://www.yuque.com/api/v2",
|
|
193
181
|
"cookie": "Optional, for recycle/upload features",
|
|
194
|
-
"ctoken": "Optional, extracted from Cookie"
|
|
195
|
-
"kv": { "enabled": true },
|
|
196
|
-
"rss": {
|
|
197
|
-
"enabled": true,
|
|
198
|
-
"sources": {
|
|
199
|
-
"cnblogs": {
|
|
200
|
-
"name": "博客园",
|
|
201
|
-
"slug_pattern": "/p/(\\d+)",
|
|
202
|
-
"feeds": {
|
|
203
|
-
"sitehome": { "label": "首页", "url": "https://feed.cnblogs.com/blog/sitehome/rss" }
|
|
204
|
-
}
|
|
205
|
-
}
|
|
206
|
-
},
|
|
207
|
-
"namespaces": {
|
|
208
|
-
"cnblogs": {
|
|
209
|
-
"book_id": [0],
|
|
210
|
-
"kv_slugs": [],
|
|
211
|
-
"schedule_slugs": []
|
|
212
|
-
}
|
|
213
|
-
}
|
|
214
|
-
},
|
|
215
|
-
"crawler": {
|
|
216
|
-
"enabled": true,
|
|
217
|
-
"namespaces": {
|
|
218
|
-
"my-source": {
|
|
219
|
-
"book_id": [0],
|
|
220
|
-
"kv_slugs": [],
|
|
221
|
-
"schedule_slugs": []
|
|
222
|
-
}
|
|
223
|
-
}
|
|
224
|
-
}
|
|
182
|
+
"ctoken": "Optional, extracted from Cookie"
|
|
225
183
|
}
|
|
226
184
|
```
|
|
227
185
|
|
|
228
|
-
- `book_id`: Target repo ID array — last element is the active repo. Auto-expands when full (5000 docs).
|
|
229
|
-
- `kv_slugs`: KV dedup shard docs (`{book_id}/{doc_id}` format)
|
|
230
|
-
- `schedule_slugs`: Schedule config docs
|
|
231
186
|
- `toc_cache_ttl_minutes`: TOC cache TTL in minutes (default 60). Set higher to reduce API calls, lower for fresher data.
|
|
232
187
|
|
|
233
188
|
## Error Handling
|
|
@@ -263,7 +218,7 @@ Both [yuque-ai-mcp](https://github.com/yehuoshun/yuque-ai-mcp) and [yuque-ai-ski
|
|
|
263
218
|
|
|
264
219
|
## Maintenance
|
|
265
220
|
|
|
266
|
-
This project is listed in these directories. When the tool count or domain count changes, sync the entries (they mention "
|
|
221
|
+
This project is listed in these directories. When the tool count or domain count changes, sync the entries (they mention "62 tools" / "13 domains"):
|
|
267
222
|
|
|
268
223
|
- [punkpeye/awesome-mcp-servers](https://github.com/punkpeye/awesome-mcp-servers)
|
|
269
224
|
- [zackchewa/awesome-china-mcp](https://github.com/zackchewa/awesome-china-mcp)
|
package/README_CN.md
CHANGED
|
@@ -5,12 +5,12 @@
|
|
|
5
5
|
<p align="center">
|
|
6
6
|
<h1 align="center">yuque-ai-mcp</h1>
|
|
7
7
|
<p align="center">
|
|
8
|
-
<b>
|
|
8
|
+
<b>62 个 MCP 工具(45 OpenAPI + 17 Web API)</b>
|
|
9
9
|
</p>
|
|
10
10
|
</p>
|
|
11
11
|
|
|
12
12
|
<p align="center">
|
|
13
|
-
<a href="https://github.com/yehuoshun/yuque-ai-mcp"><img src="https://img.shields.io/badge/版本-2.
|
|
13
|
+
<a href="https://github.com/yehuoshun/yuque-ai-mcp"><img src="https://img.shields.io/badge/版本-2.14.1-blue" alt="version" /></a>
|
|
14
14
|
<a href="LICENSE"><img src="https://img.shields.io/badge/许可-MIT-green" alt="license" /></a>
|
|
15
15
|
<a href="https://github.com/yehuoshun/yuque-ai-skills"><img src="https://img.shields.io/badge/skills-67%20指导-orange" alt="skills" /></a>
|
|
16
16
|
</p>
|
|
@@ -21,13 +21,13 @@
|
|
|
21
21
|
|
|
22
22
|
---
|
|
23
23
|
|
|
24
|
-
基于 [Model Context Protocol](https://modelcontextprotocol.io/) 的语雀全功能 MCP Server。
|
|
24
|
+
基于 [Model Context Protocol](https://modelcontextprotocol.io/) 的语雀全功能 MCP Server。62 个工具,13 个域——45 个语雀 OpenAPI 端点 + 17 个需要浏览器会话 Cookie 的 Web API 工具。
|
|
25
25
|
|
|
26
26
|
## 为什么选这个
|
|
27
27
|
|
|
28
|
-
- **19 →
|
|
28
|
+
- **19 → 62 工具** — 比官方 [yuque-mcp-server](https://github.com/yuque/yuque-mcp-server) 多 3 倍覆盖
|
|
29
29
|
- **双传输模式** — stdio + HTTP SSE,共享注册中心,修改无需重启
|
|
30
|
-
- **模块化架构** —
|
|
30
|
+
- **模块化架构** — 13 个域,barrel export,唯一注册中心
|
|
31
31
|
- **完整 API 覆盖** — 团队、回收站、上传、统计、版本、画板——补全官方缺失
|
|
32
32
|
- **[Skill 层](https://github.com/yehuoshun/yuque-ai-skills)** — 67 个 AI Agent 使用指导
|
|
33
33
|
|
|
@@ -75,14 +75,13 @@ npm run dev:http # HTTP SSE 模式 (http://localhost:3099)
|
|
|
75
75
|
| **recycle** | 3 | 列表、恢复、彻底删除(Cookie 认证) |
|
|
76
76
|
| **upload** | 1 | 文件上传到语雀 CDN(Cookie 认证) |
|
|
77
77
|
| **board** | 3 | 思维导图、流程图、架构图 |
|
|
78
|
-
| **
|
|
79
|
-
| **
|
|
80
|
-
|
|
|
81
|
-
| **crawler** | 4 | 抓取、CSS 提取、去重写入、定时策略分析 |
|
|
82
|
-
| **kv** | 4 | 增删查列——增量分片,单文档 250KB 上限 |
|
|
83
|
-
| **合计** | **73** | |
|
|
78
|
+
| **mine** | 4 | 书架列表、编辑中心、更新/排序书架(Cookie 认证) |
|
|
79
|
+
| **web_doc** | 8 | Web API:获取/列出文档、知识库、目录,移动/复制/删除目录节点(Cookie 认证) |
|
|
80
|
+
| **合计** | **62** | |
|
|
84
81
|
|
|
85
|
-
|
|
82
|
+
**认证方式**:45 个走 OpenAPI(`X-Auth-Token`);17 个走 Web API,需 Cookie + `x-csrf-token` —— `web_doc`(8)、`mine`(4)、`recycle`(3)、`upload`(1)、`web_search`(1)。
|
|
83
|
+
|
|
84
|
+
### 全部 62 个工具
|
|
86
85
|
|
|
87
86
|
| 工具 | 域 | 说明 |
|
|
88
87
|
|------|--------|-------------|
|
|
@@ -129,36 +128,25 @@ npm run dev:http # HTTP SSE 模式 (http://localhost:3099)
|
|
|
129
128
|
| `yuque_get_note` | note | 获取小记详情 |
|
|
130
129
|
| `yuque_create_note` | note | 创建小记 |
|
|
131
130
|
| `yuque_update_note` | note | 更新小记 |
|
|
132
|
-
| `yuque_list_recycles` | recycle |
|
|
133
|
-
| `yuque_restore_recycle` | recycle |
|
|
134
|
-
| `yuque_destroy_recycle` | recycle |
|
|
135
|
-
| `yuque_upload_attachment` | upload | 上传文件到语雀 CDN |
|
|
131
|
+
| `yuque_list_recycles` | recycle | 列出回收站项目(Cookie) |
|
|
132
|
+
| `yuque_restore_recycle` | recycle | 恢复回收站项目(Cookie) |
|
|
133
|
+
| `yuque_destroy_recycle` | recycle | 彻底删除回收站项目(Cookie) |
|
|
134
|
+
| `yuque_upload_attachment` | upload | 上传文件到语雀 CDN(Cookie) |
|
|
136
135
|
| `yuque_get_board` | board | 获取文档中的画板资源 |
|
|
137
136
|
| `yuque_create_board` | board | 在文档中创建画板资源 |
|
|
138
137
|
| `yuque_update_board` | board | 更新文档中的画板资源 |
|
|
138
|
+
| `yuque_get_book_stacks` | mine | 获取知识库分组(书架)列表(Cookie) |
|
|
139
|
+
| `yuque_get_editor_center` | mine | 获取个人编辑中心全景数据(Cookie) |
|
|
140
|
+
| `yuque_update_book_stack` | mine | 移动知识库到指定分组(书架)(Cookie) |
|
|
141
|
+
| `yuque_sort_book_stack` | mine | 排序知识库分组(书架)(Cookie) |
|
|
139
142
|
| `yuque_web_get_doc` | web_doc | Cookie 态读文档正文(含 body/content),不受会员过期限流 |
|
|
140
143
|
| `yuque_web_list_docs` | web_doc | Cookie 态列文档列表,更丰富的字段 |
|
|
141
144
|
| `yuque_web_list_repos` | web_doc | Cookie 态列知识库列表,含权限信息 |
|
|
142
145
|
| `yuque_web_get_toc` | web_doc | Cookie 态获取知识库目录 TOC |
|
|
143
146
|
| `yuque_web_delete_doc` | web_doc | Cookie 态删除文档(移入回收站,v2 被限流时的备用通道) |
|
|
144
|
-
| `yuque_web_copy_catalog_node` | web_doc | Cookie 态跨库复制目录节点(服务端重传附件,保留文件卡片) |
|
|
145
147
|
| `yuque_web_move_catalog_node` | web_doc | Cookie 态移动目录节点 |
|
|
148
|
+
| `yuque_web_copy_catalog_node` | web_doc | Cookie 态复制目录节点 |
|
|
146
149
|
| `yuque_web_batch_move_catalog_nodes` | web_doc | Cookie 态批量移动目录节点 |
|
|
147
|
-
| `yuque_rss_list_sources` | rss | 列出所有可用 RSS 数据源及 feed 类型 |
|
|
148
|
-
| `yuque_rss_fetch` | rss | 抓取 RSS/Atom Feed,解析后去重写入语雀 |
|
|
149
|
-
| `yuque_rss_schedule` | rss | 分析更新频率,生成推荐抓取时间 |
|
|
150
|
-
| `yuque_crawl_fetch` | crawler | 抓取网页原始 HTML |
|
|
151
|
-
| `yuque_crawl_extract` | crawler | CSS 选择器从 HTML 提取内容 |
|
|
152
|
-
| `yuque_crawl_save` | crawler | 去重 + 写入语雀 |
|
|
153
|
-
| `yuque_crawl_schedule` | crawler | 分析爬虫抓取频率,生成推荐抓取时间 |
|
|
154
|
-
| `yuque_get_book_stacks` | mine | 获取知识库分组(书架)列表 |
|
|
155
|
-
| `yuque_get_editor_center` | mine | 获取个人编辑中心全景数据 |
|
|
156
|
-
| `yuque_update_book_stack` | mine | 移动知识库到指定分组(书架) |
|
|
157
|
-
| `yuque_sort_book_stack` | mine | 对知识库分组内的知识库进行排序 |
|
|
158
|
-
| `yuque_kv_get` | kv | 读取 KV 命名空间的完整 JSON map(分片合并) |
|
|
159
|
-
| `yuque_kv_set` | kv | 增量设置 key-value,超 250KB 自动分片 |
|
|
160
|
-
| `yuque_kv_delete` | kv | 遍历分片查找并删除 key |
|
|
161
|
-
| `yuque_kv_list` | kv | 列出已配置的 KV 命名空间 |
|
|
162
150
|
|
|
163
151
|
完整工具文档(含参数和示例)见 [SKILL.md](SKILL.md) 或 [yuque-ai-skills](https://github.com/yehuoshun/yuque-ai-skills)。
|
|
164
152
|
|
|
@@ -166,7 +154,7 @@ npm run dev:http # HTTP SSE 模式 (http://localhost:3099)
|
|
|
166
154
|
|
|
167
155
|
| 功能 | 官方 yuque-mcp-server | yuque-ai-mcp |
|
|
168
156
|
|---------|--------------------------|--------------|
|
|
169
|
-
| 工具数 | 19 | **
|
|
157
|
+
| 工具数 | 19 | **62** |
|
|
170
158
|
| 粒度 | 粗粒度 | **细粒度**(1 端点 = 1 工具) |
|
|
171
159
|
| 团队、回收站、上传、统计 | ❌ | ✅ |
|
|
172
160
|
| 版本、Diff、跨库复制 | ❌ | ✅ |
|
|
@@ -179,10 +167,10 @@ npm run dev:http # HTTP SSE 模式 (http://localhost:3099)
|
|
|
179
167
|
```
|
|
180
168
|
server/src/
|
|
181
169
|
├── common/ # 公共:config, errors, types, format, validate,
|
|
182
|
-
│ # api-client, web-request, register-tools, copy/export
|
|
183
|
-
│ #
|
|
170
|
+
│ # api-client, web-request, register-tools, copy/export,
|
|
171
|
+
│ # toc-cache(可配置 TTL), text-utils
|
|
184
172
|
├── user/ search/ group/ doc/ toc/ repo/ statistic/
|
|
185
|
-
├── note/ recycle/ upload/ board/
|
|
173
|
+
├── note/ recycle/ upload/ board/ mine/ web-doc/
|
|
186
174
|
├── index.ts # stdio 入口
|
|
187
175
|
└── http.ts # HTTP SSE 入口(端口 3099)
|
|
188
176
|
```
|
|
@@ -194,43 +182,10 @@ server/src/
|
|
|
194
182
|
"token": "你的语雀 API Token",
|
|
195
183
|
"api_base": "https://www.yuque.com/api/v2",
|
|
196
184
|
"cookie": "可选,回收站/上传功能需要",
|
|
197
|
-
"ctoken": "可选,从 Cookie 中提取"
|
|
198
|
-
"kv": { "enabled": true },
|
|
199
|
-
"rss": {
|
|
200
|
-
"enabled": true,
|
|
201
|
-
"sources": {
|
|
202
|
-
"cnblogs": {
|
|
203
|
-
"name": "博客园",
|
|
204
|
-
"slug_pattern": "/p/(\\d+)",
|
|
205
|
-
"feeds": {
|
|
206
|
-
"sitehome": { "label": "首页", "url": "https://feed.cnblogs.com/blog/sitehome/rss" }
|
|
207
|
-
}
|
|
208
|
-
}
|
|
209
|
-
},
|
|
210
|
-
"namespaces": {
|
|
211
|
-
"cnblogs": {
|
|
212
|
-
"book_id": [0],
|
|
213
|
-
"kv_slugs": [],
|
|
214
|
-
"schedule_slugs": []
|
|
215
|
-
}
|
|
216
|
-
}
|
|
217
|
-
},
|
|
218
|
-
"crawler": {
|
|
219
|
-
"enabled": true,
|
|
220
|
-
"namespaces": {
|
|
221
|
-
"my-source": {
|
|
222
|
-
"book_id": [0],
|
|
223
|
-
"kv_slugs": [],
|
|
224
|
-
"schedule_slugs": []
|
|
225
|
-
}
|
|
226
|
-
}
|
|
227
|
-
}
|
|
185
|
+
"ctoken": "可选,从 Cookie 中提取"
|
|
228
186
|
}
|
|
229
187
|
```
|
|
230
188
|
|
|
231
|
-
- `book_id`:目标知识库 ID 数组,最后一个为当前活跃仓库。满 5000 篇自动扩容追加。
|
|
232
|
-
- `kv_slugs`:KV 去重分片文档(`{book_id}/{doc_id}` 格式)
|
|
233
|
-
- `schedule_slugs`:定时策略配置文档
|
|
234
189
|
- `toc_cache_ttl_minutes`:TOC 缓存 TTL(分钟),默认 60。调大可减少 API 调用,调小可获取更新鲜的数据。
|
|
235
190
|
|
|
236
191
|
## 错误处理
|
|
@@ -238,7 +193,7 @@ server/src/
|
|
|
238
193
|
统一错误处理,返回结构化错误(HTTP 状态码 + 消息 + 响应摘要)。所有工具共用同一错误管道。
|
|
239
194
|
|
|
240
195
|
关键错误:
|
|
241
|
-
- `book_full` — 知识库超 5000
|
|
196
|
+
- `book_full` — 知识库超 5000 篇(语雀 API 对超 5000 节点的知识库不可用)
|
|
242
197
|
- `401` / `403` — Token/权限问题
|
|
243
198
|
- `429` — 限流,自动重试
|
|
244
199
|
|
|
@@ -266,7 +221,7 @@ npm run build
|
|
|
266
221
|
|
|
267
222
|
## 维护
|
|
268
223
|
|
|
269
|
-
本项目已收录到以下目录。当工具数或域数变化时,需同步对应条目(条目中写了「
|
|
224
|
+
本项目已收录到以下目录。当工具数或域数变化时,需同步对应条目(条目中写了「62 个工具」/「13 个域」):
|
|
270
225
|
|
|
271
226
|
- [punkpeye/awesome-mcp-servers](https://github.com/punkpeye/awesome-mcp-servers)
|
|
272
227
|
- [zackchewa/awesome-china-mcp](https://github.com/zackchewa/awesome-china-mcp)
|
package/SKILL.md
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# yuque-ai-mcp
|
|
2
2
|
|
|
3
|
-
语雀全功能 MCP Server,
|
|
3
|
+
语雀全功能 MCP Server,62 个工具 / 13 个域。当用户提到「语雀」「yuque」「知识库」「文档」「团队」等关键词时触发。
|
|
4
4
|
|
|
5
5
|
## 触发场景
|
|
6
6
|
|
|
@@ -12,9 +12,6 @@
|
|
|
12
12
|
- 画板(思维导图/流程图)
|
|
13
13
|
- 统计数据
|
|
14
14
|
- 小记
|
|
15
|
-
- RSS 抓取
|
|
16
|
-
- 网页爬虫
|
|
17
|
-
- KV 存储
|
|
18
15
|
|
|
19
16
|
## API 端点索引
|
|
20
17
|
|
|
@@ -96,14 +93,14 @@
|
|
|
96
93
|
### recycle(3 工具)
|
|
97
94
|
| 工具 | 说明 |
|
|
98
95
|
|------|------|
|
|
99
|
-
| `yuque_list_recycles` |
|
|
100
|
-
| `yuque_restore_recycle` |
|
|
101
|
-
| `yuque_destroy_recycle` |
|
|
96
|
+
| `yuque_list_recycles` | 列出回收站项目(Cookie) |
|
|
97
|
+
| `yuque_restore_recycle` | 恢复回收站项目(Cookie) |
|
|
98
|
+
| `yuque_destroy_recycle` | 彻底删除回收站项目(Cookie) |
|
|
102
99
|
|
|
103
100
|
### upload(1 工具)
|
|
104
101
|
| 工具 | 说明 |
|
|
105
102
|
|------|------|
|
|
106
|
-
| `yuque_upload_attachment` | 上传文件到语雀 CDN |
|
|
103
|
+
| `yuque_upload_attachment` | 上传文件到语雀 CDN(Cookie) |
|
|
107
104
|
|
|
108
105
|
### board(3 工具)
|
|
109
106
|
| 工具 | 说明 |
|
|
@@ -112,30 +109,13 @@
|
|
|
112
109
|
| `yuque_create_board` | 在文档中创建画板资源 |
|
|
113
110
|
| `yuque_update_board` | 更新文档中的画板资源 |
|
|
114
111
|
|
|
115
|
-
### rss(3 工具)
|
|
116
|
-
| 工具 | 说明 |
|
|
117
|
-
|------|------|
|
|
118
|
-
| `yuque_rss_list_sources` | 列出所有可用 RSS 数据源及 feed 类型 |
|
|
119
|
-
| `yuque_rss_fetch` | 抓取 RSS/Atom Feed,解析后去重写入语雀 |
|
|
120
|
-
| `yuque_rss_schedule` | 分析更新频率,生成推荐抓取时间并写入配置 |
|
|
121
|
-
|
|
122
|
-
### crawler(4 工具)
|
|
123
|
-
| 工具 | 说明 |
|
|
124
|
-
|------|------|
|
|
125
|
-
| `yuque_crawl_fetch` | 抓取网页原始 HTML |
|
|
126
|
-
| `yuque_crawl_extract` | CSS 选择器从 HTML 提取内容 |
|
|
127
|
-
| `yuque_crawl_save` | 去重 + 写入语雀(接收 Agent 清洗后的内容) |
|
|
128
|
-
| `yuque_crawl_schedule` | 分析爬虫抓取频率,生成推荐抓取时间 |
|
|
129
|
-
|
|
130
|
-
> **清洗规范**:Agent 负责 fetch → 提取正文 → HTML→Markdown → 传干净 body 给 `crawl_save`。详见 `references/api/crawler_api.md`。
|
|
131
|
-
|
|
132
112
|
### mine(4 工具)
|
|
133
113
|
| 工具 | 说明 |
|
|
134
114
|
|------|------|
|
|
135
|
-
| `yuque_get_book_stacks` |
|
|
136
|
-
| `yuque_get_editor_center` |
|
|
137
|
-
| `yuque_update_book_stack` |
|
|
138
|
-
| `yuque_sort_book_stack` |
|
|
115
|
+
| `yuque_get_book_stacks` | 获取知识库分组(书架)列表(Cookie) |
|
|
116
|
+
| `yuque_get_editor_center` | 获取个人编辑中心全景数据(Cookie) |
|
|
117
|
+
| `yuque_update_book_stack` | 移动知识库到指定分组(书架)(Cookie) |
|
|
118
|
+
| `yuque_sort_book_stack` | 排序知识库分组(书架)(Cookie) |
|
|
139
119
|
|
|
140
120
|
### web_doc(8 工具,Cookie 态)
|
|
141
121
|
| 工具 | 说明 |
|
|
@@ -145,18 +125,10 @@
|
|
|
145
125
|
| `yuque_web_list_repos` | Cookie 态列知识库列表,含权限信息 |
|
|
146
126
|
| `yuque_web_get_toc` | Cookie 态获取知识库目录 TOC |
|
|
147
127
|
| `yuque_web_delete_doc` | Cookie 态删除文档(移入回收站,v2 被限流时的备用通道) |
|
|
148
|
-
| `yuque_web_copy_catalog_node` | Cookie 态跨库复制目录节点(服务端重传附件,保留文件卡片) |
|
|
149
128
|
| `yuque_web_move_catalog_node` | Cookie 态移动目录节点 |
|
|
129
|
+
| `yuque_web_copy_catalog_node` | Cookie 态复制目录节点 |
|
|
150
130
|
| `yuque_web_batch_move_catalog_nodes` | Cookie 态批量移动目录节点 |
|
|
151
131
|
|
|
152
|
-
### kv(4 工具)
|
|
153
|
-
| 工具 | 说明 |
|
|
154
|
-
|------|------|
|
|
155
|
-
| `yuque_kv_get` | 读取 KV 命名空间的完整 JSON map(分片合并) |
|
|
156
|
-
| `yuque_kv_set` | 增量设置 key-value,超 250KB 自动分片 |
|
|
157
|
-
| `yuque_kv_delete` | 遍历分片查找并删除 key |
|
|
158
|
-
| `yuque_kv_list` | 列出已配置的 KV 命名空间 |
|
|
159
|
-
|
|
160
132
|
## 错误码
|
|
161
133
|
|
|
162
134
|
所有工具共用统一错误处理。API 失败时返回结构化错误信息(含状态码、中文描述、响应摘要)。
|
|
@@ -182,27 +154,6 @@ yuque_get_doc ──(失败)──→ yuque_export_doc → 读本地文件 →
|
|
|
182
154
|
"token": "语雀 API Token",
|
|
183
155
|
"api_base": "https://www.yuque.com/api/v2",
|
|
184
156
|
"cookie": "可选,回收站/上传/mine 功能需要",
|
|
185
|
-
"ctoken": "可选,从 Cookie 中提取"
|
|
186
|
-
"kv": { "enabled": true },
|
|
187
|
-
"rss": {
|
|
188
|
-
"enabled": true,
|
|
189
|
-
"namespaces": {
|
|
190
|
-
"cnblogs": {
|
|
191
|
-
"book_id": [0],
|
|
192
|
-
"kv_slugs": [],
|
|
193
|
-
"schedule_slugs": []
|
|
194
|
-
}
|
|
195
|
-
}
|
|
196
|
-
},
|
|
197
|
-
"crawler": {
|
|
198
|
-
"enabled": true,
|
|
199
|
-
"namespaces": {
|
|
200
|
-
"my-source": {
|
|
201
|
-
"book_id": [0],
|
|
202
|
-
"kv_slugs": [],
|
|
203
|
-
"schedule_slugs": []
|
|
204
|
-
}
|
|
205
|
-
}
|
|
206
|
-
}
|
|
157
|
+
"ctoken": "可选,从 Cookie 中提取"
|
|
207
158
|
}
|
|
208
159
|
```
|
|
@@ -3,51 +3,5 @@
|
|
|
3
3
|
"api_base": "https://www.yuque.com/api/v2",
|
|
4
4
|
"toc_cache_ttl_minutes": 60,
|
|
5
5
|
"cookie": "可选,回收站/上传功能需要。浏览器登录后 F12 → Application → Cookies → 复制完整 Cookie 字符串",
|
|
6
|
-
"ctoken": "可选,从 Cookie 中提取 yuque_ctoken 的值"
|
|
7
|
-
|
|
8
|
-
"enabled": true,
|
|
9
|
-
"sources": {
|
|
10
|
-
"cnblogs": {
|
|
11
|
-
"name": "博客园",
|
|
12
|
-
"description": "开发者的网上家园,技术博客聚合平台",
|
|
13
|
-
"slug_pattern": "/p/(\\d+)",
|
|
14
|
-
"feeds": {
|
|
15
|
-
"sitehome": { "label": "首页最新", "url": "https://feed.cnblogs.com/blog/sitehome/rss" },
|
|
16
|
-
"picked": { "label": "编辑推荐", "url": "https://feed.cnblogs.com/blog/sitehome/picked" },
|
|
17
|
-
"48h": { "label": "48小时阅读排行", "url": "https://feed.cnblogs.com/blog/sitehome/48h" },
|
|
18
|
-
"10d": { "label": "10天推荐排行", "url": "https://feed.cnblogs.com/blog/sitehome/10d" },
|
|
19
|
-
"user": {
|
|
20
|
-
"label": "用户博客",
|
|
21
|
-
"url_template": "https://feed.cnblogs.com/blog/u/{username}/rss",
|
|
22
|
-
"params_schema": { "username": { "type": "string", "description": "博客园用户名", "required": true } }
|
|
23
|
-
},
|
|
24
|
-
"category": {
|
|
25
|
-
"label": "分类",
|
|
26
|
-
"url_template": "https://feed.cnblogs.com/blog/category/{category}/rss",
|
|
27
|
-
"params_schema": { "category": { "type": "string", "description": "分类名", "required": true } }
|
|
28
|
-
}
|
|
29
|
-
}
|
|
30
|
-
}
|
|
31
|
-
},
|
|
32
|
-
"namespaces": {
|
|
33
|
-
"cnblogs": {
|
|
34
|
-
"book_id": [0],
|
|
35
|
-
"kv_slugs": [],
|
|
36
|
-
"schedule_slugs": []
|
|
37
|
-
}
|
|
38
|
-
}
|
|
39
|
-
},
|
|
40
|
-
"kv": {
|
|
41
|
-
"enabled": true
|
|
42
|
-
},
|
|
43
|
-
"crawler": {
|
|
44
|
-
"enabled": true,
|
|
45
|
-
"namespaces": {
|
|
46
|
-
"my-source": {
|
|
47
|
-
"book_id": [0],
|
|
48
|
-
"kv_slugs": [],
|
|
49
|
-
"schedule_slugs": []
|
|
50
|
-
}
|
|
51
|
-
}
|
|
52
|
-
}
|
|
53
|
-
}
|
|
6
|
+
"ctoken": "可选,从 Cookie 中提取 yuque_ctoken 的值"
|
|
7
|
+
}
|
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
* 减少工具文件中的重复代码。
|
|
6
6
|
* 重试策略:指数退避 1s → 2s → 4s,最多 3 次。
|
|
7
7
|
*/
|
|
8
|
-
/** 执行 fetch 并自动重试。导出供外部 URL 请求(
|
|
8
|
+
/** 执行 fetch 并自动重试。导出供外部 URL 请求(import-url)复用 */
|
|
9
9
|
export declare function fetchWithRetry(url: string, options: RequestInit, context: string, attempt?: number, timeoutMs?: number): Promise<Response>;
|
|
10
10
|
/** API 调用结果的类型 guard:检查是否是 MCP error */
|
|
11
11
|
export declare function isErrorResult(result: unknown): result is {
|
|
@@ -23,7 +23,7 @@ function shouldRetry(res) {
|
|
|
23
23
|
function sleep(ms) {
|
|
24
24
|
return new Promise((r) => setTimeout(r, ms));
|
|
25
25
|
}
|
|
26
|
-
/** 执行 fetch 并自动重试。导出供外部 URL 请求(
|
|
26
|
+
/** 执行 fetch 并自动重试。导出供外部 URL 请求(import-url)复用 */
|
|
27
27
|
export async function fetchWithRetry(url, options, context, attempt = 1, timeoutMs = REQUEST_TIMEOUT) {
|
|
28
28
|
const controller = new AbortController();
|
|
29
29
|
const timer = setTimeout(() => controller.abort(), timeoutMs);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"api-client.js","sourceRoot":"","sources":["../../src/common/api-client.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAE7C,aAAa;AACb,MAAM,WAAW,GAAG,CAAC,CAAC;AAEtB,cAAc;AACd,MAAM,UAAU,GAAG,IAAI,CAAC;AAExB,iBAAiB;AACjB,MAAM,eAAe,GAAG,MAAM,CAAC;AAE/B,0BAA0B;AAC1B,SAAS,WAAW,CAAC,GAAoB;IACvC,IAAI,CAAC,GAAG;QAAE,OAAO,IAAI,CAAC,CAAC,OAAO;IAC9B,OAAO,GAAG,CAAC,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,IAAI,GAAG,IAAI,GAAG,CAAC,MAAM,GAAG,GAAG,CAAC,CAAC;AACvE,CAAC;AAED,cAAc;AACd,SAAS,KAAK,CAAC,EAAU;IACvB,OAAO,IAAI,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,UAAU,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;AAC/C,CAAC;AAED,
|
|
1
|
+
{"version":3,"file":"api-client.js","sourceRoot":"","sources":["../../src/common/api-client.ts"],"names":[],"mappings":"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"}
|