yuque-ai-mcp 2.9.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>67 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 67 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 → 67 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** | **67** | |
79
+ | **Total** | **69** | |
80
80
 
81
- ### All 67 Tools
81
+ ### All 69 Tools
82
82
 
83
83
  | Tool | Domain | Description |
84
84
  |------|--------|-------------|
@@ -88,6 +88,7 @@ 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 被限流时的备用通道,移入回收站) |
91
92
  | `yuque_get_group_users` | group | 获取团队成员列表 |
92
93
  | `yuque_update_group_user` | group | 变更团队成员角色 |
93
94
  | `yuque_delete_group_user` | group | 删除团队成员 |
@@ -141,6 +142,7 @@ npm run dev:http # HTTP SSE mode (http://localhost:3099)
141
142
  | `yuque_crawl_schedule` | crawler | 分析爬虫抓取频率,生成推荐抓取时间 |
142
143
  | `yuque_get_book_stacks` | mine | 获取知识库分组(书架)列表 |
143
144
  | `yuque_get_editor_center` | mine | 获取个人编辑中心全景数据 |
145
+ | `yuque_update_book_stack` | mine | 移动知识库到指定分组(书架) |
144
146
  | `yuque_kv_get` | kv | 读取 KV 命名空间的完整 JSON map(分片合并) |
145
147
  | `yuque_kv_set` | kv | 增量设置 key-value,超 250KB 自动分片 |
146
148
  | `yuque_kv_delete` | kv | 遍历分片查找并删除 key |
@@ -152,7 +154,7 @@ See [SKILL.md](SKILL.md) or [yuque-ai-skills](https://github.com/yehuoshun/yuque
152
154
 
153
155
  | Feature | Official yuque-mcp-server | yuque-ai-mcp |
154
156
  |---------|--------------------------|--------------|
155
- | Tools | 19 | **67** |
157
+ | Tools | 19 | **69** |
156
158
  | Granularity | Coarse | **Fine-grained** (1 tool / endpoint) |
157
159
  | Group, Recycle, Upload, Statistics | ❌ | ✅ |
158
160
  | Versions, Diff, Cross-book Copy | ❌ | ✅ |
package/SKILL.md CHANGED
@@ -1,6 +1,6 @@
1
1
  # yuque-ai-mcp
2
2
 
3
- 语雀全功能 MCP Server,67 个工具 / 16 个域。当用户提到「语雀」「yuque」「知识库」「文档」「团队」等关键词时触发。
3
+ 语雀全功能 MCP Server,68 个工具 / 16 个域。当用户提到「语雀」「yuque」「知识库」「文档」「团队」等关键词时触发。
4
4
 
5
5
  ## 触发场景
6
6
 
@@ -135,13 +135,14 @@
135
135
  | `yuque_get_book_stacks` | 获取知识库分组(书架)列表 |
136
136
  | `yuque_get_editor_center` | 获取个人编辑中心全景数据 |
137
137
 
138
- ### web_doc(4 工具,Cookie 态)
138
+ ### web_doc(5 工具,Cookie 态)
139
139
  | 工具 | 说明 |
140
140
  |------|------|
141
141
  | `yuque_web_get_doc` | Cookie 态读文档正文(含 body/content),不受会员过期限流 |
142
142
  | `yuque_web_list_docs` | Cookie 态列文档列表,更丰富的字段 |
143
143
  | `yuque_web_list_repos` | Cookie 态列知识库列表,含权限信息 |
144
144
  | `yuque_web_get_toc` | Cookie 态获取知识库目录 TOC |
145
+ | `yuque_web_delete_doc` | Cookie 态删除文档(移入回收站,v2 被限流时的备用通道) |
145
146
 
146
147
  ### kv(4 工具)
147
148
  | 工具 | 说明 |
@@ -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"}
@@ -0,0 +1,14 @@
1
+ /**
2
+ * web-doc/delete-doc — Cookie 态删除文档
3
+ *
4
+ * 端点:DELETE /api/docs/{id}?book_id={book_id}(Web API,Cookie 认证)
5
+ * 职责:删除指定文档(移入回收站),v2 删除被限流时作为替代通道
6
+ *
7
+ * 相比 v2 delete_doc 的优势:
8
+ * - 不走 Token,不受会员过期限流(429)
9
+ * - 与 web get/list 同一认证体系,v2 挂掉时仍可删
10
+ *
11
+ * ⚠️ 删除不可逆(移入回收站,可恢复)。
12
+ */
13
+ import type { McpTool } from "../common/types.js";
14
+ export declare const webDocDelete: McpTool;
@@ -0,0 +1,79 @@
1
+ /**
2
+ * web-doc/delete-doc — Cookie 态删除文档
3
+ *
4
+ * 端点:DELETE /api/docs/{id}?book_id={book_id}(Web API,Cookie 认证)
5
+ * 职责:删除指定文档(移入回收站),v2 删除被限流时作为替代通道
6
+ *
7
+ * 相比 v2 delete_doc 的优势:
8
+ * - 不走 Token,不受会员过期限流(429)
9
+ * - 与 web get/list 同一认证体系,v2 挂掉时仍可删
10
+ *
11
+ * ⚠️ 删除不可逆(移入回收站,可恢复)。
12
+ */
13
+ import { isErrorResult } from "../common/api-client.js";
14
+ import { webRequest } from "../common/web-request.js";
15
+ import { check, requiredString, optionalBoolean } from "../common/validate.js";
16
+ import { confirmationParam, checkConfirmation } from "../common/errors.js";
17
+ const DOC_REFERER = "https://www.yuque.com/";
18
+ export const webDocDelete = {
19
+ name: "yuque_web_delete_doc",
20
+ description: "Cookie-based: Delete a document (moves to recycle bin). " +
21
+ "DELETE /api/docs/{id}?book_id={book_id}. " +
22
+ "No membership required, alternative to v2 delete_doc when Token is rate-limited/expired. " +
23
+ "⚠️ Requires confirm='DELETE'. " +
24
+ "详见 references/api/doc_api.md",
25
+ inputSchema: {
26
+ type: "object",
27
+ properties: {
28
+ id: { type: "string", description: "Document ID (numeric, required)" },
29
+ book_id: { type: "string", description: "Repository ID (numeric, required)" },
30
+ confirm: confirmationParam.confirm,
31
+ raw: { type: "boolean", description: "Return raw full JSON (default false, returns trimmed fields)" },
32
+ },
33
+ required: ["id", "book_id", "confirm"],
34
+ },
35
+ async handler(args) {
36
+ // @validate
37
+ const __v = check(requiredString(args?.id, "id"), requiredString(args?.book_id, "book_id"), optionalBoolean(args?.raw, "raw"));
38
+ if (__v)
39
+ return __v;
40
+ const confirmed = checkConfirmation(args);
41
+ if (confirmed)
42
+ return confirmed;
43
+ const id = Number(args?.id);
44
+ const bookId = Number(args?.book_id);
45
+ if (!id || !bookId) {
46
+ return {
47
+ content: [{ type: "text", text: JSON.stringify({ error: "id 和 book_id 必须为有效数字 / id and book_id must be valid numbers" }, null, 2) }],
48
+ isError: true,
49
+ };
50
+ }
51
+ const raw = args?.raw;
52
+ const url = `https://www.yuque.com/api/docs/${id}?book_id=${bookId}`;
53
+ const result = await webRequest(url, { method: "DELETE", referer: DOC_REFERER });
54
+ if (isErrorResult(result))
55
+ return result;
56
+ const data = result?.data;
57
+ if (!data) {
58
+ return {
59
+ content: [{ type: "text", text: JSON.stringify({ error: "NO_DATA" }, null, 2) }],
60
+ isError: true,
61
+ };
62
+ }
63
+ if (raw) {
64
+ return {
65
+ content: [{ type: "text", text: JSON.stringify(data, null, 2) }],
66
+ };
67
+ }
68
+ return {
69
+ content: [{ type: "text", text: JSON.stringify({
70
+ id: data.id,
71
+ title: data.title,
72
+ slug: data.slug,
73
+ deleted: true,
74
+ note: "移入回收站,可通过 yuque_list_recycles 查看 / yuque_restore_recycle 恢复",
75
+ }, null, 2) }],
76
+ };
77
+ },
78
+ };
79
+ //# sourceMappingURL=delete-doc.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"delete-doc.js","sourceRoot":"","sources":["../../src/web-doc/delete-doc.ts"],"names":[],"mappings":"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"}
@@ -2,5 +2,6 @@ export { webDocGet } from "./get-doc.js";
2
2
  export { webDocList } from "./list-docs.js";
3
3
  export { webRepoList } from "./list-repos.js";
4
4
  export { webTocGet } from "./get-toc.js";
5
+ export { webDocDelete } from "./delete-doc.js";
5
6
  import type { McpTool } from "../common/types.js";
6
7
  export declare const webDocTools: McpTool[];
@@ -2,9 +2,11 @@ export { webDocGet } from "./get-doc.js";
2
2
  export { webDocList } from "./list-docs.js";
3
3
  export { webRepoList } from "./list-repos.js";
4
4
  export { webTocGet } from "./get-toc.js";
5
+ export { webDocDelete } from "./delete-doc.js";
5
6
  import { webDocGet } from "./get-doc.js";
6
7
  import { webDocList } from "./list-docs.js";
7
8
  import { webRepoList } from "./list-repos.js";
8
9
  import { webTocGet } from "./get-toc.js";
9
- export const webDocTools = [webDocGet, webDocList, webRepoList, webTocGet];
10
+ import { webDocDelete } from "./delete-doc.js";
11
+ export const webDocTools = [webDocGet, webDocList, webRepoList, webTocGet, webDocDelete];
10
12
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/web-doc/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AACzC,OAAO,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAC5C,OAAO,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAC9C,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AACzC,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AACzC,OAAO,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAC5C,OAAO,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAC9C,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAEzC,MAAM,CAAC,MAAM,WAAW,GAAc,CAAC,SAAS,EAAE,UAAU,EAAE,WAAW,EAAE,SAAS,CAAC,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/web-doc/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AACzC,OAAO,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAC5C,OAAO,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAC9C,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AACzC,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAC/C,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AACzC,OAAO,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAC5C,OAAO,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAC9C,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AACzC,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAE/C,MAAM,CAAC,MAAM,WAAW,GAAc,CAAC,SAAS,EAAE,UAAU,EAAE,WAAW,EAAE,SAAS,EAAE,YAAY,CAAC,CAAC"}
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "yuque-ai-mcp",
3
- "version": "2.9.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",