yuque-ai-mcp 2.13.3 → 2.14.0
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 +40 -69
- package/README_CN.md +41 -67
- package/SKILL.md +15 -59
- package/config/config.example.json +7 -0
- 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/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 +12 -14
- 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 +3 -3
- 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.0-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,13 +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
|
-
| **mine** |
|
|
76
|
-
| **
|
|
77
|
-
| **
|
|
78
|
-
| **kv** | 4 | Get, set, delete, list — incremental sharding, 250KB/doc limit |
|
|
79
|
-
| **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** | |
|
|
80
78
|
|
|
81
|
-
|
|
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
|
|
82
82
|
|
|
83
83
|
| Tool | Domain | Description |
|
|
84
84
|
|------|--------|-------------|
|
|
@@ -88,8 +88,6 @@ npm run dev:http # HTTP SSE mode (http://localhost:3099)
|
|
|
88
88
|
| `yuque_search` | search | 通用搜索文档/知识库 |
|
|
89
89
|
| `yuque_rag_search` | search | RAG 检索增强搜索 + 自动获取文档内容 |
|
|
90
90
|
| `yuque_web_search` | search | Cookie 态 Web 搜索,返回完整文档对象 + 精确总数 + 高亮摘要 |
|
|
91
|
-
| `yuque_web_delete_doc` | doc | Cookie 态删除文档(v2 被限流时的备用通道,移入回收站) |
|
|
92
|
-
| `yuque_web_copy_catalog_node` | doc | Cookie 态跨库复制目录节点(服务端重传附件,保留文件卡片) |
|
|
93
91
|
| `yuque_get_group_users` | group | 获取团队成员列表 |
|
|
94
92
|
| `yuque_update_group_user` | group | 变更团队成员角色 |
|
|
95
93
|
| `yuque_delete_group_user` | group | 删除团队成员 |
|
|
@@ -127,27 +125,25 @@ npm run dev:http # HTTP SSE mode (http://localhost:3099)
|
|
|
127
125
|
| `yuque_get_note` | note | 获取小记详情 |
|
|
128
126
|
| `yuque_create_note` | note | 创建小记 |
|
|
129
127
|
| `yuque_update_note` | note | 更新小记 |
|
|
130
|
-
| `yuque_list_recycles` | recycle |
|
|
131
|
-
| `yuque_restore_recycle` | recycle |
|
|
132
|
-
| `yuque_destroy_recycle` | recycle |
|
|
133
|
-
| `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) |
|
|
134
132
|
| `yuque_get_board` | board | 获取文档中的画板资源 |
|
|
135
133
|
| `yuque_create_board` | board | 在文档中创建画板资源 |
|
|
136
134
|
| `yuque_update_board` | board | 更新文档中的画板资源 |
|
|
137
|
-
| `
|
|
138
|
-
| `
|
|
139
|
-
| `
|
|
140
|
-
| `
|
|
141
|
-
| `
|
|
142
|
-
| `
|
|
143
|
-
| `
|
|
144
|
-
| `
|
|
145
|
-
| `
|
|
146
|
-
| `
|
|
147
|
-
| `
|
|
148
|
-
| `
|
|
149
|
-
| `yuque_kv_delete` | kv | 遍历分片查找并删除 key |
|
|
150
|
-
| `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 态批量移动目录节点 |
|
|
151
147
|
|
|
152
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.
|
|
153
149
|
|
|
@@ -155,7 +151,7 @@ See [SKILL.md](SKILL.md) or [yuque-ai-skills](https://github.com/yehuoshun/yuque
|
|
|
155
151
|
|
|
156
152
|
| Feature | Official yuque-mcp-server | yuque-ai-mcp |
|
|
157
153
|
|---------|--------------------------|--------------|
|
|
158
|
-
| Tools | 19 | **
|
|
154
|
+
| Tools | 19 | **62** |
|
|
159
155
|
| Granularity | Coarse | **Fine-grained** (1 tool / endpoint) |
|
|
160
156
|
| Group, Recycle, Upload, Statistics | ❌ | ✅ |
|
|
161
157
|
| Versions, Diff, Cross-book Copy | ❌ | ✅ |
|
|
@@ -168,10 +164,10 @@ See [SKILL.md](SKILL.md) or [yuque-ai-skills](https://github.com/yehuoshun/yuque
|
|
|
168
164
|
```
|
|
169
165
|
server/src/
|
|
170
166
|
├── common/ # Shared: config, errors, types, format, validate,
|
|
171
|
-
│ # api-client, web-request, register-tools, copy/export
|
|
172
|
-
│ #
|
|
167
|
+
│ # api-client, web-request, register-tools, copy/export common,
|
|
168
|
+
│ # toc-cache (configurable TTL), text-utils
|
|
173
169
|
├── user/ search/ group/ doc/ toc/ repo/ statistic/
|
|
174
|
-
├── note/ recycle/ upload/ board/
|
|
170
|
+
├── note/ recycle/ upload/ board/ mine/ web-doc/
|
|
175
171
|
├── index.ts # stdio entry
|
|
176
172
|
└── http.ts # HTTP SSE entry (port 3099)
|
|
177
173
|
```
|
|
@@ -183,43 +179,10 @@ server/src/
|
|
|
183
179
|
"token": "Your Yuque API Token",
|
|
184
180
|
"api_base": "https://www.yuque.com/api/v2",
|
|
185
181
|
"cookie": "Optional, for recycle/upload features",
|
|
186
|
-
"ctoken": "Optional, extracted from Cookie"
|
|
187
|
-
"kv": { "enabled": true },
|
|
188
|
-
"rss": {
|
|
189
|
-
"enabled": true,
|
|
190
|
-
"sources": {
|
|
191
|
-
"cnblogs": {
|
|
192
|
-
"name": "博客园",
|
|
193
|
-
"slug_pattern": "/p/(\\d+)",
|
|
194
|
-
"feeds": {
|
|
195
|
-
"sitehome": { "label": "首页", "url": "https://feed.cnblogs.com/blog/sitehome/rss" }
|
|
196
|
-
}
|
|
197
|
-
}
|
|
198
|
-
},
|
|
199
|
-
"namespaces": {
|
|
200
|
-
"cnblogs": {
|
|
201
|
-
"book_id": [0],
|
|
202
|
-
"kv_slugs": [],
|
|
203
|
-
"schedule_slugs": []
|
|
204
|
-
}
|
|
205
|
-
}
|
|
206
|
-
},
|
|
207
|
-
"crawler": {
|
|
208
|
-
"enabled": true,
|
|
209
|
-
"namespaces": {
|
|
210
|
-
"my-source": {
|
|
211
|
-
"book_id": [0],
|
|
212
|
-
"kv_slugs": [],
|
|
213
|
-
"schedule_slugs": []
|
|
214
|
-
}
|
|
215
|
-
}
|
|
216
|
-
}
|
|
182
|
+
"ctoken": "Optional, extracted from Cookie"
|
|
217
183
|
}
|
|
218
184
|
```
|
|
219
185
|
|
|
220
|
-
- `book_id`: Target repo ID array — last element is the active repo. Auto-expands when full (5000 docs).
|
|
221
|
-
- `kv_slugs`: KV dedup shard docs (`{book_id}/{doc_id}` format)
|
|
222
|
-
- `schedule_slugs`: Schedule config docs
|
|
223
186
|
- `toc_cache_ttl_minutes`: TOC cache TTL in minutes (default 60). Set higher to reduce API calls, lower for fresher data.
|
|
224
187
|
|
|
225
188
|
## Error Handling
|
|
@@ -248,10 +211,18 @@ npm run build
|
|
|
248
211
|
# 4. Restart HTTP server + curl health
|
|
249
212
|
# 5. Sync yuque-ai-skills
|
|
250
213
|
# 6. Update README
|
|
214
|
+
# 7. Sync awesome-list entries when tool/domain count changes
|
|
251
215
|
```
|
|
252
216
|
|
|
253
217
|
Both [yuque-ai-mcp](https://github.com/yehuoshun/yuque-ai-mcp) and [yuque-ai-skills](https://github.com/yehuoshun/yuque-ai-skills) are kept in sync.
|
|
254
218
|
|
|
219
|
+
## Maintenance
|
|
220
|
+
|
|
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"):
|
|
222
|
+
|
|
223
|
+
- [punkpeye/awesome-mcp-servers](https://github.com/punkpeye/awesome-mcp-servers)
|
|
224
|
+
- [zackchewa/awesome-china-mcp](https://github.com/zackchewa/awesome-china-mcp)
|
|
225
|
+
|
|
255
226
|
## Tech Stack
|
|
256
227
|
|
|
257
228
|
- TypeScript + Node.js
|
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.0-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,13 +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
|
-
| **mine** |
|
|
79
|
-
| **
|
|
80
|
-
|
|
|
81
|
-
| **kv** | 4 | 增删查列——增量分片,单文档 250KB 上限 |
|
|
82
|
-
| **合计** | **67** | |
|
|
78
|
+
| **mine** | 4 | 书架列表、编辑中心、更新/排序书架(Cookie 认证) |
|
|
79
|
+
| **web_doc** | 8 | Web API:获取/列出文档、知识库、目录,移动/复制/删除目录节点(Cookie 认证) |
|
|
80
|
+
| **合计** | **62** | |
|
|
83
81
|
|
|
84
|
-
|
|
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 个工具
|
|
85
85
|
|
|
86
86
|
| 工具 | 域 | 说明 |
|
|
87
87
|
|------|--------|-------------|
|
|
@@ -128,26 +128,25 @@ npm run dev:http # HTTP SSE 模式 (http://localhost:3099)
|
|
|
128
128
|
| `yuque_get_note` | note | 获取小记详情 |
|
|
129
129
|
| `yuque_create_note` | note | 创建小记 |
|
|
130
130
|
| `yuque_update_note` | note | 更新小记 |
|
|
131
|
-
| `yuque_list_recycles` | recycle |
|
|
132
|
-
| `yuque_restore_recycle` | recycle |
|
|
133
|
-
| `yuque_destroy_recycle` | recycle |
|
|
134
|
-
| `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) |
|
|
135
135
|
| `yuque_get_board` | board | 获取文档中的画板资源 |
|
|
136
136
|
| `yuque_create_board` | board | 在文档中创建画板资源 |
|
|
137
137
|
| `yuque_update_board` | board | 更新文档中的画板资源 |
|
|
138
|
-
| `
|
|
139
|
-
| `
|
|
140
|
-
| `
|
|
141
|
-
| `
|
|
142
|
-
| `
|
|
143
|
-
| `
|
|
144
|
-
| `
|
|
145
|
-
| `
|
|
146
|
-
| `
|
|
147
|
-
| `
|
|
148
|
-
| `
|
|
149
|
-
| `
|
|
150
|
-
| `yuque_kv_list` | kv | 列出已配置的 KV 命名空间 |
|
|
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) |
|
|
142
|
+
| `yuque_web_get_doc` | web_doc | Cookie 态读文档正文(含 body/content),不受会员过期限流 |
|
|
143
|
+
| `yuque_web_list_docs` | web_doc | Cookie 态列文档列表,更丰富的字段 |
|
|
144
|
+
| `yuque_web_list_repos` | web_doc | Cookie 态列知识库列表,含权限信息 |
|
|
145
|
+
| `yuque_web_get_toc` | web_doc | Cookie 态获取知识库目录 TOC |
|
|
146
|
+
| `yuque_web_delete_doc` | web_doc | Cookie 态删除文档(移入回收站,v2 被限流时的备用通道) |
|
|
147
|
+
| `yuque_web_move_catalog_node` | web_doc | Cookie 态移动目录节点 |
|
|
148
|
+
| `yuque_web_copy_catalog_node` | web_doc | Cookie 态复制目录节点 |
|
|
149
|
+
| `yuque_web_batch_move_catalog_nodes` | web_doc | Cookie 态批量移动目录节点 |
|
|
151
150
|
|
|
152
151
|
完整工具文档(含参数和示例)见 [SKILL.md](SKILL.md) 或 [yuque-ai-skills](https://github.com/yehuoshun/yuque-ai-skills)。
|
|
153
152
|
|
|
@@ -155,7 +154,7 @@ npm run dev:http # HTTP SSE 模式 (http://localhost:3099)
|
|
|
155
154
|
|
|
156
155
|
| 功能 | 官方 yuque-mcp-server | yuque-ai-mcp |
|
|
157
156
|
|---------|--------------------------|--------------|
|
|
158
|
-
| 工具数 | 19 | **
|
|
157
|
+
| 工具数 | 19 | **62** |
|
|
159
158
|
| 粒度 | 粗粒度 | **细粒度**(1 端点 = 1 工具) |
|
|
160
159
|
| 团队、回收站、上传、统计 | ❌ | ✅ |
|
|
161
160
|
| 版本、Diff、跨库复制 | ❌ | ✅ |
|
|
@@ -168,10 +167,10 @@ npm run dev:http # HTTP SSE 模式 (http://localhost:3099)
|
|
|
168
167
|
```
|
|
169
168
|
server/src/
|
|
170
169
|
├── common/ # 公共:config, errors, types, format, validate,
|
|
171
|
-
│ # api-client, web-request, register-tools, copy/export
|
|
172
|
-
│ #
|
|
170
|
+
│ # api-client, web-request, register-tools, copy/export,
|
|
171
|
+
│ # toc-cache(可配置 TTL), text-utils
|
|
173
172
|
├── user/ search/ group/ doc/ toc/ repo/ statistic/
|
|
174
|
-
├── note/ recycle/ upload/ board/
|
|
173
|
+
├── note/ recycle/ upload/ board/ mine/ web-doc/
|
|
175
174
|
├── index.ts # stdio 入口
|
|
176
175
|
└── http.ts # HTTP SSE 入口(端口 3099)
|
|
177
176
|
```
|
|
@@ -183,43 +182,10 @@ server/src/
|
|
|
183
182
|
"token": "你的语雀 API Token",
|
|
184
183
|
"api_base": "https://www.yuque.com/api/v2",
|
|
185
184
|
"cookie": "可选,回收站/上传功能需要",
|
|
186
|
-
"ctoken": "可选,从 Cookie 中提取"
|
|
187
|
-
"kv": { "enabled": true },
|
|
188
|
-
"rss": {
|
|
189
|
-
"enabled": true,
|
|
190
|
-
"sources": {
|
|
191
|
-
"cnblogs": {
|
|
192
|
-
"name": "博客园",
|
|
193
|
-
"slug_pattern": "/p/(\\d+)",
|
|
194
|
-
"feeds": {
|
|
195
|
-
"sitehome": { "label": "首页", "url": "https://feed.cnblogs.com/blog/sitehome/rss" }
|
|
196
|
-
}
|
|
197
|
-
}
|
|
198
|
-
},
|
|
199
|
-
"namespaces": {
|
|
200
|
-
"cnblogs": {
|
|
201
|
-
"book_id": [0],
|
|
202
|
-
"kv_slugs": [],
|
|
203
|
-
"schedule_slugs": []
|
|
204
|
-
}
|
|
205
|
-
}
|
|
206
|
-
},
|
|
207
|
-
"crawler": {
|
|
208
|
-
"enabled": true,
|
|
209
|
-
"namespaces": {
|
|
210
|
-
"my-source": {
|
|
211
|
-
"book_id": [0],
|
|
212
|
-
"kv_slugs": [],
|
|
213
|
-
"schedule_slugs": []
|
|
214
|
-
}
|
|
215
|
-
}
|
|
216
|
-
}
|
|
185
|
+
"ctoken": "可选,从 Cookie 中提取"
|
|
217
186
|
}
|
|
218
187
|
```
|
|
219
188
|
|
|
220
|
-
- `book_id`:目标知识库 ID 数组,最后一个为当前活跃仓库。满 5000 篇自动扩容追加。
|
|
221
|
-
- `kv_slugs`:KV 去重分片文档(`{book_id}/{doc_id}` 格式)
|
|
222
|
-
- `schedule_slugs`:定时策略配置文档
|
|
223
189
|
- `toc_cache_ttl_minutes`:TOC 缓存 TTL(分钟),默认 60。调大可减少 API 调用,调小可获取更新鲜的数据。
|
|
224
190
|
|
|
225
191
|
## 错误处理
|
|
@@ -227,7 +193,7 @@ server/src/
|
|
|
227
193
|
统一错误处理,返回结构化错误(HTTP 状态码 + 消息 + 响应摘要)。所有工具共用同一错误管道。
|
|
228
194
|
|
|
229
195
|
关键错误:
|
|
230
|
-
- `book_full` — 知识库超 5000
|
|
196
|
+
- `book_full` — 知识库超 5000 篇(语雀 API 对超 5000 节点的知识库不可用)
|
|
231
197
|
- `401` / `403` — Token/权限问题
|
|
232
198
|
- `429` — 限流,自动重试
|
|
233
199
|
|
|
@@ -248,10 +214,18 @@ npm run build
|
|
|
248
214
|
# 4. 重启 HTTP Server + curl health
|
|
249
215
|
# 5. 同步 yuque-ai-skills
|
|
250
216
|
# 6. 更新 README
|
|
217
|
+
# 7. 工具/域数量变化时,同步 awesome 榜单条目
|
|
251
218
|
```
|
|
252
219
|
|
|
253
220
|
[yuque-ai-mcp](https://github.com/yehuoshun/yuque-ai-mcp) 和 [yuque-ai-skills](https://github.com/yehuoshun/yuque-ai-skills) 保持同步更新。
|
|
254
221
|
|
|
222
|
+
## 维护
|
|
223
|
+
|
|
224
|
+
本项目已收录到以下目录。当工具数或域数变化时,需同步对应条目(条目中写了「62 个工具」/「13 个域」):
|
|
225
|
+
|
|
226
|
+
- [punkpeye/awesome-mcp-servers](https://github.com/punkpeye/awesome-mcp-servers)
|
|
227
|
+
- [zackchewa/awesome-china-mcp](https://github.com/zackchewa/awesome-china-mcp)
|
|
228
|
+
|
|
255
229
|
## 技术栈
|
|
256
230
|
|
|
257
231
|
- TypeScript + Node.js
|
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,15 @@
|
|
|
112
109
|
| `yuque_create_board` | 在文档中创建画板资源 |
|
|
113
110
|
| `yuque_update_board` | 更新文档中的画板资源 |
|
|
114
111
|
|
|
115
|
-
###
|
|
112
|
+
### mine(4 工具)
|
|
116
113
|
| 工具 | 说明 |
|
|
117
114
|
|------|------|
|
|
118
|
-
| `
|
|
119
|
-
| `
|
|
120
|
-
| `
|
|
115
|
+
| `yuque_get_book_stacks` | 获取知识库分组(书架)列表(Cookie) |
|
|
116
|
+
| `yuque_get_editor_center` | 获取个人编辑中心全景数据(Cookie) |
|
|
117
|
+
| `yuque_update_book_stack` | 移动知识库到指定分组(书架)(Cookie) |
|
|
118
|
+
| `yuque_sort_book_stack` | 排序知识库分组(书架)(Cookie) |
|
|
121
119
|
|
|
122
|
-
###
|
|
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
|
-
### mine(2 工具)
|
|
133
|
-
| 工具 | 说明 |
|
|
134
|
-
|------|------|
|
|
135
|
-
| `yuque_get_book_stacks` | 获取知识库分组(书架)列表 |
|
|
136
|
-
| `yuque_get_editor_center` | 获取个人编辑中心全景数据 |
|
|
137
|
-
|
|
138
|
-
### web_doc(5 工具,Cookie 态)
|
|
120
|
+
### web_doc(8 工具,Cookie 态)
|
|
139
121
|
| 工具 | 说明 |
|
|
140
122
|
|------|------|
|
|
141
123
|
| `yuque_web_get_doc` | Cookie 态读文档正文(含 body/content),不受会员过期限流 |
|
|
@@ -143,14 +125,9 @@
|
|
|
143
125
|
| `yuque_web_list_repos` | Cookie 态列知识库列表,含权限信息 |
|
|
144
126
|
| `yuque_web_get_toc` | Cookie 态获取知识库目录 TOC |
|
|
145
127
|
| `yuque_web_delete_doc` | Cookie 态删除文档(移入回收站,v2 被限流时的备用通道) |
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
|
149
|
-
|------|------|
|
|
150
|
-
| `yuque_kv_get` | 读取 KV 命名空间的完整 JSON map(分片合并) |
|
|
151
|
-
| `yuque_kv_set` | 增量设置 key-value,超 250KB 自动分片 |
|
|
152
|
-
| `yuque_kv_delete` | 遍历分片查找并删除 key |
|
|
153
|
-
| `yuque_kv_list` | 列出已配置的 KV 命名空间 |
|
|
128
|
+
| `yuque_web_move_catalog_node` | Cookie 态移动目录节点 |
|
|
129
|
+
| `yuque_web_copy_catalog_node` | Cookie 态复制目录节点 |
|
|
130
|
+
| `yuque_web_batch_move_catalog_nodes` | Cookie 态批量移动目录节点 |
|
|
154
131
|
|
|
155
132
|
## 错误码
|
|
156
133
|
|
|
@@ -177,27 +154,6 @@ yuque_get_doc ──(失败)──→ yuque_export_doc → 读本地文件 →
|
|
|
177
154
|
"token": "语雀 API Token",
|
|
178
155
|
"api_base": "https://www.yuque.com/api/v2",
|
|
179
156
|
"cookie": "可选,回收站/上传/mine 功能需要",
|
|
180
|
-
"ctoken": "可选,从 Cookie 中提取"
|
|
181
|
-
"kv": { "enabled": true },
|
|
182
|
-
"rss": {
|
|
183
|
-
"enabled": true,
|
|
184
|
-
"namespaces": {
|
|
185
|
-
"cnblogs": {
|
|
186
|
-
"book_id": 0,
|
|
187
|
-
"kv_slugs": [],
|
|
188
|
-
"schedule_slugs": []
|
|
189
|
-
}
|
|
190
|
-
}
|
|
191
|
-
},
|
|
192
|
-
"crawler": {
|
|
193
|
-
"enabled": true,
|
|
194
|
-
"namespaces": {
|
|
195
|
-
"my-source": {
|
|
196
|
-
"book_id": 0,
|
|
197
|
-
"kv_slugs": [],
|
|
198
|
-
"schedule_slugs": []
|
|
199
|
-
}
|
|
200
|
-
}
|
|
201
|
-
}
|
|
157
|
+
"ctoken": "可选,从 Cookie 中提取"
|
|
202
158
|
}
|
|
203
159
|
```
|
|
@@ -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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"}
|
package/dist/common/config.d.ts
CHANGED
|
@@ -4,70 +4,15 @@
|
|
|
4
4
|
* 所有工具模块通过此文件获取配置,不再依赖环境变量。
|
|
5
5
|
*
|
|
6
6
|
* slug 格式:`{book_id}/{doc_id}`,用 / 分割解析。
|
|
7
|
-
* kv_slugs / schedule_slugs 均为数组,支持多文档。
|
|
8
|
-
*
|
|
9
|
-
* RSS 源定义在 config.json 的 rss.sources 中,不硬编码在代码里。
|
|
10
7
|
*/
|
|
11
|
-
interface NamespaceConfig {
|
|
12
|
-
book_id: number[];
|
|
13
|
-
kv_slugs?: string[];
|
|
14
|
-
schedule_slugs?: string[];
|
|
15
|
-
}
|
|
16
|
-
/** RSS Feed 定义(config.json 中配置) */
|
|
17
|
-
export interface RssFeedDef {
|
|
18
|
-
label: string;
|
|
19
|
-
description?: string;
|
|
20
|
-
url?: string;
|
|
21
|
-
url_template?: string;
|
|
22
|
-
params_schema?: Record<string, {
|
|
23
|
-
type: "string" | "number";
|
|
24
|
-
description: string;
|
|
25
|
-
required?: boolean;
|
|
26
|
-
default?: string | number;
|
|
27
|
-
}>;
|
|
28
|
-
}
|
|
29
|
-
/** RSS 源定义(config.json 中配置) */
|
|
30
|
-
export interface RssSourceDef {
|
|
31
|
-
name: string;
|
|
32
|
-
description?: string;
|
|
33
|
-
feeds: Record<string, RssFeedDef>;
|
|
34
|
-
/** 从文章链接提取站点文章 ID 的正则,capture group 1 即为 slug。不配则 fallback 到 md5 */
|
|
35
|
-
slug_pattern?: string;
|
|
36
|
-
}
|
|
37
|
-
interface RssConfig {
|
|
38
|
-
enabled: boolean;
|
|
39
|
-
sources?: Record<string, RssSourceDef>;
|
|
40
|
-
namespaces?: Record<string, NamespaceConfig>;
|
|
41
|
-
}
|
|
42
|
-
interface KvConfig {
|
|
43
|
-
enabled: boolean;
|
|
44
|
-
}
|
|
45
|
-
interface CrawlerConfig {
|
|
46
|
-
enabled: boolean;
|
|
47
|
-
namespaces?: Record<string, NamespaceConfig>;
|
|
48
|
-
}
|
|
49
8
|
interface Config {
|
|
50
9
|
token: string;
|
|
51
10
|
api_base: string;
|
|
52
11
|
cookie?: string;
|
|
53
12
|
ctoken?: string;
|
|
54
13
|
toc_cache_ttl_minutes?: number;
|
|
55
|
-
rss?: RssConfig;
|
|
56
|
-
kv?: KvConfig;
|
|
57
|
-
crawler?: CrawlerConfig;
|
|
58
14
|
}
|
|
59
15
|
export declare function loadConfig(): Config;
|
|
60
|
-
/** 从 config 加载 RSS 源定义 */
|
|
61
|
-
export declare function loadRssSources(): Record<string, RssSourceDef>;
|
|
62
|
-
/** 持久化 config 到文件(记住首次加载路径,避免写到不同文件) */
|
|
63
|
-
export declare function saveConfig(): void;
|
|
64
|
-
/** 解析 slug:`{book_id}/{doc_id}` → { bookId, docId } */
|
|
65
|
-
export declare function parseSlug(slug: string): {
|
|
66
|
-
bookId: number;
|
|
67
|
-
docId: number;
|
|
68
|
-
} | null;
|
|
69
|
-
/** 组装 slug:bookId/docId */
|
|
70
|
-
export declare function buildSlugStr(bookId: number, docId: number): string;
|
|
71
16
|
/** 自动生成 slug:英文/拼音 + 时间戳,中文名兜底纯时间戳 */
|
|
72
17
|
export declare function autoSlug(name: string): string;
|
|
73
18
|
export {};
|