yuque-ai-mcp 2.10.0 → 2.11.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 +8 -7
- package/dist/common/web-request.d.ts +1 -1
- package/dist/common/web-request.js.map +1 -1
- package/dist/mine/index.d.ts +1 -0
- package/dist/mine/index.js +3 -1
- package/dist/mine/index.js.map +1 -1
- package/dist/mine/update-book-stack.d.ts +8 -0
- package/dist/mine/update-book-stack.js +62 -0
- package/dist/mine/update-book-stack.js.map +1 -0
- package/package.json +3 -3
package/README.md
CHANGED
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
|
|
5
5
|
<h1 align="center">yuque-ai-mcp</h1>
|
|
6
6
|
<p align="center">
|
|
7
|
-
<b>
|
|
7
|
+
<b>69 fine-grained MCP tools for the full Yuque OpenAPI</b>
|
|
8
8
|
</p>
|
|
9
9
|
|
|
10
10
|
<p align="center">
|
|
@@ -19,11 +19,11 @@
|
|
|
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 69 fine-grained tools across 16 domains — every Yuque OpenAPI endpoint as a dedicated tool.
|
|
23
23
|
|
|
24
24
|
## Why
|
|
25
25
|
|
|
26
|
-
- **19 →
|
|
26
|
+
- **19 → 69 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
28
|
- **Modular architecture** — 15 domains, barrel exports, single source of truth registry
|
|
29
29
|
- **Full API coverage** — group, recycle, upload, statistics, versions, boards — all the missing pieces
|
|
@@ -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** |
|
|
75
|
+
| **mine** | 3 | Book stacks, editor center, update book stack (Cookie auth) |
|
|
76
76
|
| **rss** | 3 | Source list, fetch + dedup + save, schedule analysis |
|
|
77
77
|
| **crawler** | 4 | Fetch, CSS extract, dedup save, schedule analysis |
|
|
78
78
|
| **kv** | 4 | Get, set, delete, list — incremental sharding, 250KB/doc limit |
|
|
79
|
-
| **Total** | **
|
|
79
|
+
| **Total** | **69** | |
|
|
80
80
|
|
|
81
|
-
### All
|
|
81
|
+
### All 69 Tools
|
|
82
82
|
|
|
83
83
|
| Tool | Domain | Description |
|
|
84
84
|
|------|--------|-------------|
|
|
@@ -142,6 +142,7 @@ npm run dev:http # HTTP SSE mode (http://localhost:3099)
|
|
|
142
142
|
| `yuque_crawl_schedule` | crawler | 分析爬虫抓取频率,生成推荐抓取时间 |
|
|
143
143
|
| `yuque_get_book_stacks` | mine | 获取知识库分组(书架)列表 |
|
|
144
144
|
| `yuque_get_editor_center` | mine | 获取个人编辑中心全景数据 |
|
|
145
|
+
| `yuque_update_book_stack` | mine | 移动知识库到指定分组(书架) |
|
|
145
146
|
| `yuque_kv_get` | kv | 读取 KV 命名空间的完整 JSON map(分片合并) |
|
|
146
147
|
| `yuque_kv_set` | kv | 增量设置 key-value,超 250KB 自动分片 |
|
|
147
148
|
| `yuque_kv_delete` | kv | 遍历分片查找并删除 key |
|
|
@@ -153,7 +154,7 @@ See [SKILL.md](SKILL.md) or [yuque-ai-skills](https://github.com/yehuoshun/yuque
|
|
|
153
154
|
|
|
154
155
|
| Feature | Official yuque-mcp-server | yuque-ai-mcp |
|
|
155
156
|
|---------|--------------------------|--------------|
|
|
156
|
-
| Tools | 19 | **
|
|
157
|
+
| Tools | 19 | **69** |
|
|
157
158
|
| Granularity | Coarse | **Fine-grained** (1 tool / endpoint) |
|
|
158
159
|
| Group, Recycle, Upload, Statistics | ❌ | ✅ |
|
|
159
160
|
| Versions, Diff, Cross-book Copy | ❌ | ✅ |
|
|
@@ -7,7 +7,7 @@
|
|
|
7
7
|
* 统一 mine 和 recycle 域共用的请求层,消除重复代码。
|
|
8
8
|
*/
|
|
9
9
|
export declare function webRequest(url: string, opts?: {
|
|
10
|
-
method?: "GET" | "POST" | "PUT" | "DELETE";
|
|
10
|
+
method?: "GET" | "POST" | "PUT" | "PATCH" | "DELETE";
|
|
11
11
|
body?: unknown;
|
|
12
12
|
referer?: string;
|
|
13
13
|
}): Promise<unknown>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"web-request.js","sourceRoot":"","sources":["../../src/common/web-request.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAEzC,SAAS,QAAQ,CAAC,GAAW;IAC3B,OAAO;QACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,GAAG,EAAE,CAAC;QAC/C,OAAO,EAAE,IAAI;KACd,CAAC;AACJ,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,UAAU,CAC9B,GAAW,EACX,
|
|
1
|
+
{"version":3,"file":"web-request.js","sourceRoot":"","sources":["../../src/common/web-request.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAEzC,SAAS,QAAQ,CAAC,GAAW;IAC3B,OAAO;QACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,GAAG,EAAE,CAAC;QAC/C,OAAO,EAAE,IAAI;KACd,CAAC;AACJ,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,UAAU,CAC9B,GAAW,EACX,OAAmG,EAAE;IAErG,MAAM,GAAG,GAAG,UAAU,EAAE,CAAC;IACzB,MAAM,MAAM,GAAG,GAAG,CAAC,MAAM,IAAI,EAAE,CAAC;IAChC,MAAM,MAAM,GAAG,GAAG,CAAC,MAAM,IAAI,EAAE,CAAC;IAEhC,IAAI,CAAC,MAAM,IAAI,CAAC,MAAM,EAAE,CAAC;QACvB,OAAO,QAAQ,CACb,mEAAmE;YACnE,0FAA0F,CAC3F,CAAC;IACJ,CAAC;IAED,MAAM,OAAO,GAA2B;QACtC,QAAQ,EAAE,kBAAkB;QAC5B,cAAc,EAAE,kBAAkB;QAClC,QAAQ,EAAE,MAAM;QAChB,cAAc,EAAE,MAAM;QACtB,SAAS,EAAE,IAAI,CAAC,OAAO,IAAI,uCAAuC;QAClE,YAAY,EAAE,aAAa;KAC5B,CAAC;IAEF,MAAM,UAAU,GAAG,IAAI,eAAe,EAAE,CAAC;IACzC,MAAM,KAAK,GAAG,UAAU,CAAC,GAAG,EAAE,CAAC,UAAU,CAAC,KAAK,EAAE,EAAE,MAAM,CAAC,CAAC;IAE3D,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,MAAM,KAAK,CAAC,GAAG,EAAE;YAC3B,MAAM,EAAE,IAAI,CAAC,MAAM,IAAI,KAAK;YAC5B,OAAO;YACP,IAAI,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,SAAS;YACvD,MAAM,EAAE,UAAU,CAAC,MAAM;SAC1B,CAAC,CAAC;QAEH,MAAM,IAAI,GAAG,MAAM,GAAG,CAAC,IAAI,EAAE,CAAC;QAC9B,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC;YACZ,IAAI,GAAG,GAAG,kBAAkB,GAAG,CAAC,MAAM,GAAG,CAAC;YAC1C,IAAI,CAAC;gBACH,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;gBAC7B,GAAG,IAAI,KAAK,GAAG,CAAC,OAAO,IAAI,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC;YAClD,CAAC;YAAC,MAAM,CAAC;gBACP,GAAG,IAAI,KAAK,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC;YACnC,CAAC;YACD,OAAO,QAAQ,CAAC,GAAG,CAAC,CAAC;QACvB,CAAC;QAED,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IAC1B,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,OAAO,QAAQ,CACb,WAAW,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE;YAC7D,2BAA2B,CAC5B,CAAC;IACJ,CAAC;YAAS,CAAC;QACT,YAAY,CAAC,KAAK,CAAC,CAAC;IACtB,CAAC;AACH,CAAC"}
|
package/dist/mine/index.d.ts
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
export { mineBookStacks } from "./get-book-stacks.js";
|
|
2
2
|
export { mineEditorCenter } from "./editor-center.js";
|
|
3
|
+
export { mineUpdateBookStack } from "./update-book-stack.js";
|
|
3
4
|
import type { McpTool } from "../common/types.js";
|
|
4
5
|
export declare const mineTools: McpTool[];
|
package/dist/mine/index.js
CHANGED
|
@@ -1,6 +1,8 @@
|
|
|
1
1
|
export { mineBookStacks } from "./get-book-stacks.js";
|
|
2
2
|
export { mineEditorCenter } from "./editor-center.js";
|
|
3
|
+
export { mineUpdateBookStack } from "./update-book-stack.js";
|
|
3
4
|
import { mineBookStacks } from "./get-book-stacks.js";
|
|
4
5
|
import { mineEditorCenter } from "./editor-center.js";
|
|
5
|
-
|
|
6
|
+
import { mineUpdateBookStack } from "./update-book-stack.js";
|
|
7
|
+
export const mineTools = [mineBookStacks, mineEditorCenter, mineUpdateBookStack];
|
|
6
8
|
//# sourceMappingURL=index.js.map
|
package/dist/mine/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/mine/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AACtD,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AACtD,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AACtD,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/mine/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AACtD,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AACtD,OAAO,EAAE,mBAAmB,EAAE,MAAM,wBAAwB,CAAC;AAC7D,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AACtD,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AACtD,OAAO,EAAE,mBAAmB,EAAE,MAAM,wBAAwB,CAAC;AAE7D,MAAM,CAAC,MAAM,SAAS,GAAc,CAAC,cAAc,EAAE,gBAAgB,EAAE,mBAAmB,CAAC,CAAC"}
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* mine/update-book-stack — 移动知识库到指定分组(书架)
|
|
3
|
+
*
|
|
4
|
+
* 端点:PATCH /api/books/:book_id(Web API,Cookie 认证)
|
|
5
|
+
* 职责:将指定知识库移动到目标分组(书架)下
|
|
6
|
+
*/
|
|
7
|
+
import { isErrorResult } from "../common/api-client.js";
|
|
8
|
+
import { webRequest } from "../common/web-request.js";
|
|
9
|
+
const BOOK_BASE = "https://www.yuque.com/api/books";
|
|
10
|
+
export const mineUpdateBookStack = {
|
|
11
|
+
name: "yuque_update_book_stack",
|
|
12
|
+
description: "移动知识库到指定分组(书架)。需要 cookie+ctoken 认证。PATCH /api/books/:book_id。常用于将知识库从一个分组(如预废弃)移到另一个分组(如废弃)。",
|
|
13
|
+
inputSchema: {
|
|
14
|
+
type: "object",
|
|
15
|
+
properties: {
|
|
16
|
+
book_id: {
|
|
17
|
+
type: "number",
|
|
18
|
+
description: "知识库 ID(数字,必填)",
|
|
19
|
+
},
|
|
20
|
+
stack_id: {
|
|
21
|
+
type: "number",
|
|
22
|
+
description: "目标分组 ID(书架 ID,必填)",
|
|
23
|
+
},
|
|
24
|
+
},
|
|
25
|
+
required: ["book_id", "stack_id"],
|
|
26
|
+
},
|
|
27
|
+
async handler(args) {
|
|
28
|
+
const bookId = args?.book_id;
|
|
29
|
+
const stackId = args?.stack_id;
|
|
30
|
+
if (!bookId) {
|
|
31
|
+
return {
|
|
32
|
+
content: [{ type: "text", text: "错误:book_id 是必填参数" }],
|
|
33
|
+
isError: true,
|
|
34
|
+
};
|
|
35
|
+
}
|
|
36
|
+
if (!stackId) {
|
|
37
|
+
return {
|
|
38
|
+
content: [{ type: "text", text: "错误:stack_id 是必填参数" }],
|
|
39
|
+
isError: true,
|
|
40
|
+
};
|
|
41
|
+
}
|
|
42
|
+
const result = await webRequest(`${BOOK_BASE}/${bookId}`, {
|
|
43
|
+
method: "PATCH",
|
|
44
|
+
body: { stack_id: stackId },
|
|
45
|
+
});
|
|
46
|
+
if (isErrorResult(result))
|
|
47
|
+
return result;
|
|
48
|
+
const data = result;
|
|
49
|
+
return {
|
|
50
|
+
content: [
|
|
51
|
+
{
|
|
52
|
+
type: "text",
|
|
53
|
+
text: JSON.stringify({
|
|
54
|
+
success: true,
|
|
55
|
+
message: `知识库 ${bookId} 已移动到分组 ${stackId}`,
|
|
56
|
+
}, null, 2),
|
|
57
|
+
},
|
|
58
|
+
],
|
|
59
|
+
};
|
|
60
|
+
},
|
|
61
|
+
};
|
|
62
|
+
//# sourceMappingURL=update-book-stack.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"update-book-stack.js","sourceRoot":"","sources":["../../src/mine/update-book-stack.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAC;AACxD,OAAO,EAAE,UAAU,EAAE,MAAM,0BAA0B,CAAC;AAEtD,MAAM,SAAS,GAAG,iCAAiC,CAAC;AAEpD,MAAM,CAAC,MAAM,mBAAmB,GAAY;IAC1C,IAAI,EAAE,yBAAyB;IAC/B,WAAW,EACT,8FAA8F;IAEhG,WAAW,EAAE;QACX,IAAI,EAAE,QAAQ;QACd,UAAU,EAAE;YACV,OAAO,EAAE;gBACP,IAAI,EAAE,QAAQ;gBACd,WAAW,EAAE,eAAe;aAC7B;YACD,QAAQ,EAAE;gBACR,IAAI,EAAE,QAAQ;gBACd,WAAW,EAAE,mBAAmB;aACjC;SACF;QACD,QAAQ,EAAE,CAAC,SAAS,EAAE,UAAU,CAAC;KAClC;IAED,KAAK,CAAC,OAAO,CAAC,IAA8B;QAC1C,MAAM,MAAM,GAAG,IAAI,EAAE,OAA6B,CAAC;QACnD,MAAM,OAAO,GAAG,IAAI,EAAE,QAA8B,CAAC;QAErD,IAAI,CAAC,MAAM,EAAE,CAAC;YACZ,OAAO;gBACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,kBAAkB,EAAE,CAAC;gBAC9D,OAAO,EAAE,IAAI;aACd,CAAC;QACJ,CAAC;QACD,IAAI,CAAC,OAAO,EAAE,CAAC;YACb,OAAO;gBACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,mBAAmB,EAAE,CAAC;gBAC/D,OAAO,EAAE,IAAI;aACd,CAAC;QACJ,CAAC;QAED,MAAM,MAAM,GAAG,MAAM,UAAU,CAAC,GAAG,SAAS,IAAI,MAAM,EAAE,EAAE;YACxD,MAAM,EAAE,OAAgB;YACxB,IAAI,EAAE,EAAE,QAAQ,EAAE,OAAO,EAAE;SAC5B,CAAC,CAAC;QAEH,IAAI,aAAa,CAAC,MAAM,CAAC;YAAE,OAAO,MAAM,CAAC;QAEzC,MAAM,IAAI,GAAG,MAA4C,CAAC;QAE1D,OAAO;YACL,OAAO,EAAE;gBACP;oBACE,IAAI,EAAE,MAAe;oBACrB,IAAI,EAAE,IAAI,CAAC,SAAS,CAClB;wBACE,OAAO,EAAE,IAAI;wBACb,OAAO,EAAE,OAAO,MAAM,WAAW,OAAO,EAAE;qBAC3C,EACD,IAAI,EACJ,CAAC,CACF;iBACF;aACF;SACF,CAAC;IACJ,CAAC;CACF,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "yuque-ai-mcp",
|
|
3
|
-
"version": "2.
|
|
4
|
-
"description": "Full-featured Yuque MCP Server
|
|
3
|
+
"version": "2.11.0",
|
|
4
|
+
"description": "Full-featured Yuque MCP Server \u2014 62 fine-grained tools covering the entire Yuque OpenAPI",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "dist/index.js",
|
|
7
7
|
"bin": {
|
|
@@ -23,7 +23,7 @@
|
|
|
23
23
|
"ai",
|
|
24
24
|
"llm",
|
|
25
25
|
"claude",
|
|
26
|
-
"
|
|
26
|
+
"\u8bed\u96c0"
|
|
27
27
|
],
|
|
28
28
|
"scripts": {
|
|
29
29
|
"build": "tsc",
|