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 CHANGED
@@ -4,7 +4,7 @@
4
4
 
5
5
  <h1 align="center">yuque-ai-mcp</h1>
6
6
  <p align="center">
7
- <b>68 fine-grained MCP tools for the full Yuque OpenAPI</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 68 fine-grained tools across 16 domains — every Yuque OpenAPI endpoint as a dedicated tool.
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 → 68 tools** — 3x more coverage than the official [yuque-mcp-server](https://github.com/yuque/yuque-mcp-server)
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** | 2 | Book stacks, editor center (Cookie auth) |
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** | **68** | |
79
+ | **Total** | **69** | |
80
80
 
81
- ### All 68 Tools
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 | **68** |
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,OAAyF,EAAE;IAE3F,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"}
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"}
@@ -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[];
@@ -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
- export const mineTools = [mineBookStacks, mineEditorCenter];
6
+ import { mineUpdateBookStack } from "./update-book-stack.js";
7
+ export const mineTools = [mineBookStacks, mineEditorCenter, mineUpdateBookStack];
6
8
  //# sourceMappingURL=index.js.map
@@ -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;AAEtD,MAAM,CAAC,MAAM,SAAS,GAAc,CAAC,cAAc,EAAE,gBAAgB,CAAC,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,8 @@
1
+ /**
2
+ * mine/update-book-stack — 移动知识库到指定分组(书架)
3
+ *
4
+ * 端点:PATCH /api/books/:book_id(Web API,Cookie 认证)
5
+ * 职责:将指定知识库移动到目标分组(书架)下
6
+ */
7
+ import type { McpTool } from "../common/types.js";
8
+ export declare const mineUpdateBookStack: McpTool;
@@ -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.10.0",
4
- "description": "Full-featured Yuque MCP Server — 62 fine-grained tools covering the entire Yuque OpenAPI",
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",