yuque-mcp 0.1.4 → 0.1.6

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
@@ -6,40 +6,204 @@
6
6
 
7
7
  MCP server for [Yuque (语雀)](https://www.yuque.com/) — expose your knowledge base to AI assistants through the [Model Context Protocol](https://modelcontextprotocol.io/).
8
8
 
9
- 🌐 **[Website](https://yuque.github.io/yuque-ecosystem/)** · [中文文档](./README.zh-CN.md)
9
+ 🌐 **[Website](https://yuque.github.io/yuque-ecosystem/)** · 📖 [API Docs](https://www.yuque.com/yuque/developer/api) · [中文文档](./README.zh-CN.md)
10
+
11
+ ---
10
12
 
11
13
  ## Quick Start
12
14
 
13
15
  ### 1. Get Your Yuque API Token
14
16
 
15
- Visit [Yuque Developer Settings](https://www.yuque.com/settings/tokens) to create a personal token.
17
+ Visit [Yuque Developer Settings](https://www.yuque.com/settings/tokens) to create a personal access token.
18
+
19
+ ### 2. Quick Install (Recommended)
20
+
21
+ Use the built-in CLI to auto-configure your MCP client in one command:
22
+
23
+ ```bash
24
+ npx yuque-mcp install --token=YOUR_TOKEN --client=cursor
25
+ ```
26
+
27
+ Supported clients: `claude-desktop`, `vscode`, `cursor`, `windsurf`, `cline`, `trae`
28
+
29
+ Or use the interactive setup wizard:
16
30
 
17
- ### 2. Add to Your MCP Client
31
+ ```bash
32
+ npx yuque-mcp setup
33
+ ```
34
+
35
+ The CLI will automatically find the correct config file for your OS, merge with any existing configuration (without overwriting other servers), and print a success message.
36
+
37
+ ### 3. Manual Configuration
18
38
 
19
- #### Claude Code
39
+ <details>
40
+ <summary>Prefer to configure manually? Click to expand all client configs.</summary>
41
+
42
+ Choose your preferred client below:
43
+
44
+ <details open>
45
+ <summary><b>Claude Code</b></summary>
20
46
 
21
47
  ```bash
22
48
  claude mcp add yuque-mcp -- npx -y yuque-mcp --token=YOUR_TOKEN
23
49
  ```
24
50
 
25
- Or set environment variable (choose one):
51
+ Or using environment variables:
26
52
 
27
53
  ```bash
28
- # For personal token
29
54
  export YUQUE_PERSONAL_TOKEN=YOUR_TOKEN
55
+ claude mcp add yuque-mcp -- npx -y yuque-mcp
56
+ ```
30
57
 
31
- # For group/team token
32
- export YUQUE_GROUP_TOKEN=YOUR_TOKEN
58
+ </details>
33
59
 
34
- # Legacy (still supported)
35
- export YUQUE_TOKEN=YOUR_TOKEN
60
+ <details>
61
+ <summary><b>Claude Desktop</b></summary>
36
62
 
37
- claude mcp add yuque-mcp -- npx -y yuque-mcp
63
+ Add to your `claude_desktop_config.json`:
64
+
65
+ - macOS: `~/Library/Application Support/Claude/claude_desktop_config.json`
66
+ - Windows: `%APPDATA%\Claude\claude_desktop_config.json`
67
+
68
+ ```json
69
+ {
70
+ "mcpServers": {
71
+ "yuque": {
72
+ "command": "npx",
73
+ "args": ["-y", "yuque-mcp"],
74
+ "env": {
75
+ "YUQUE_PERSONAL_TOKEN": "YOUR_TOKEN"
76
+ }
77
+ }
78
+ }
79
+ }
80
+ ```
81
+
82
+ </details>
83
+
84
+ <details>
85
+ <summary><b>VS Code (GitHub Copilot)</b></summary>
86
+
87
+ Add to `.vscode/mcp.json` in your workspace:
88
+
89
+ ```json
90
+ {
91
+ "servers": {
92
+ "yuque": {
93
+ "command": "npx",
94
+ "args": ["-y", "yuque-mcp"],
95
+ "env": {
96
+ "YUQUE_PERSONAL_TOKEN": "YOUR_TOKEN"
97
+ }
98
+ }
99
+ }
100
+ }
38
101
  ```
39
102
 
40
- ### 3. Done!
103
+ Then enable Agent mode in GitHub Copilot Chat.
41
104
 
42
- Ask your AI assistant to search your Yuque docs, create documents, or manage repos.
105
+ </details>
106
+
107
+ <details>
108
+ <summary><b>Cursor</b></summary>
109
+
110
+ Add to your Cursor MCP configuration (`~/.cursor/mcp.json`):
111
+
112
+ ```json
113
+ {
114
+ "mcpServers": {
115
+ "yuque": {
116
+ "command": "npx",
117
+ "args": ["-y", "yuque-mcp"],
118
+ "env": {
119
+ "YUQUE_PERSONAL_TOKEN": "YOUR_TOKEN"
120
+ }
121
+ }
122
+ }
123
+ }
124
+ ```
125
+
126
+ </details>
127
+
128
+ <details>
129
+ <summary><b>Windsurf</b></summary>
130
+
131
+ Add to your Windsurf MCP configuration (`~/.windsurf/mcp.json`):
132
+
133
+ ```json
134
+ {
135
+ "mcpServers": {
136
+ "yuque": {
137
+ "command": "npx",
138
+ "args": ["-y", "yuque-mcp"],
139
+ "env": {
140
+ "YUQUE_PERSONAL_TOKEN": "YOUR_TOKEN"
141
+ }
142
+ }
143
+ }
144
+ }
145
+ ```
146
+
147
+ </details>
148
+
149
+ <details>
150
+ <summary><b>Cline (VS Code)</b></summary>
151
+
152
+ Add to your Cline MCP settings (`~/Library/Application Support/Code/User/globalStorage/saoudrizwan.claude-dev/settings/cline_mcp_settings.json`):
153
+
154
+ ```json
155
+ {
156
+ "mcpServers": {
157
+ "yuque": {
158
+ "command": "npx",
159
+ "args": ["-y", "yuque-mcp"],
160
+ "env": {
161
+ "YUQUE_PERSONAL_TOKEN": "YOUR_TOKEN"
162
+ }
163
+ }
164
+ }
165
+ }
166
+ ```
167
+
168
+ </details>
169
+
170
+ <details>
171
+ <summary><b>Trae</b></summary>
172
+
173
+ In Trae, open **Settings** and navigate to the **MCP** section, then add a new stdio-type MCP Server with the following configuration:
174
+
175
+ - **Command:** `npx`
176
+ - **Args:** `-y yuque-mcp`
177
+ - **Env:** `YUQUE_PERSONAL_TOKEN=YOUR_TOKEN`
178
+
179
+ See [Trae MCP documentation](https://docs.trae.ai/ide/model-context-protocol) for detailed instructions.
180
+
181
+ </details>
182
+
183
+ > **More clients:** Any MCP-compatible client that supports stdio transport can use yuque-mcp. The general pattern is: command = `npx`, args = `["-y", "yuque-mcp"]`, env = `YUQUE_PERSONAL_TOKEN`.
184
+
185
+ </details>
186
+
187
+ ### 4. Done!
188
+
189
+ Ask your AI assistant to search your Yuque docs, create documents, or manage books.
190
+
191
+ ---
192
+
193
+ ## Authentication
194
+
195
+ The server supports multiple ways to provide your Yuque API token:
196
+
197
+ | Method | Environment Variable / Flag | Description |
198
+ |--------|---------------------------|-------------|
199
+ | **Personal Token** (recommended) | `YUQUE_PERSONAL_TOKEN` | For accessing your personal Yuque account |
200
+ | **Group Token** | `YUQUE_GROUP_TOKEN` | For accessing a Yuque group |
201
+ | **Legacy Token** | `YUQUE_TOKEN` | Backward-compatible, works the same |
202
+ | **CLI Argument** | `--token=YOUR_TOKEN` | Pass directly as a command-line argument |
203
+
204
+ **Priority order:** `YUQUE_PERSONAL_TOKEN` > `YUQUE_GROUP_TOKEN` > `YUQUE_TOKEN` > `--token`
205
+
206
+ ---
43
207
 
44
208
  ## Available Tools (25)
45
209
 
@@ -47,7 +211,7 @@ Ask your AI assistant to search your Yuque docs, create documents, or manage rep
47
211
  |----------|-------|
48
212
  | **User** | `yuque_get_user`, `yuque_list_groups` |
49
213
  | **Search** | `yuque_search` |
50
- | **Repos** | `yuque_list_repos`, `yuque_get_repo`, `yuque_create_repo`, `yuque_update_repo`, `yuque_delete_repo` |
214
+ | **Books** | `yuque_list_repos`, `yuque_get_repo`, `yuque_create_repo`, `yuque_update_repo`, `yuque_delete_repo` |
51
215
  | **Docs** | `yuque_list_docs`, `yuque_get_doc`, `yuque_create_doc`, `yuque_update_doc`, `yuque_delete_doc` |
52
216
  | **TOC** | `yuque_get_toc`, `yuque_update_toc` |
53
217
  | **Versions** | `yuque_list_doc_versions`, `yuque_get_doc_version` |
@@ -55,14 +219,19 @@ Ask your AI assistant to search your Yuque docs, create documents, or manage rep
55
219
  | **Stats** | `yuque_group_stats`, `yuque_group_member_stats`, `yuque_group_book_stats`, `yuque_group_doc_stats` |
56
220
  | **Utility** | `yuque_hello` |
57
221
 
222
+ ---
223
+
58
224
  ## Troubleshooting
59
225
 
60
226
  | Error | Solution |
61
227
  |-------|----------|
62
- | `YUQUE_PERSONAL_TOKEN is required` | Pass `--token=YOUR_TOKEN` or set one of: `YUQUE_PERSONAL_TOKEN`, `YUQUE_GROUP_TOKEN`, or `YUQUE_TOKEN` |
228
+ | `YUQUE_PERSONAL_TOKEN is required` | Set one of the environment variables (`YUQUE_PERSONAL_TOKEN`, `YUQUE_GROUP_TOKEN`, or `YUQUE_TOKEN`) or pass `--token=YOUR_TOKEN` |
63
229
  | `401 Unauthorized` | Token is invalid or expired — regenerate at [Yuque Settings](https://www.yuque.com/settings/tokens) |
64
- | `429 Rate Limited` | Wait a moment and retry |
65
- | Tool not found | Update to latest: `npx -y yuque-mcp@latest` |
230
+ | `429 Rate Limited` | Too many requests — wait a moment and retry |
231
+ | Tool not found | Update to the latest version: `npx -y yuque-mcp@latest` |
232
+ | `npx` command not found | Install [Node.js](https://nodejs.org/) (v18 or later) |
233
+
234
+ ---
66
235
 
67
236
  ## Development
68
237
 
@@ -70,15 +239,21 @@ Ask your AI assistant to search your Yuque docs, create documents, or manage rep
70
239
  git clone https://github.com/yuque/yuque-mcp-server.git
71
240
  cd yuque-mcp-server
72
241
  npm install
73
- npm test # run tests (57 tests)
242
+ npm test # run tests
74
243
  npm run build # compile TypeScript
75
244
  npm run dev # dev mode with hot reload
76
245
  ```
77
246
 
78
- ## License
79
-
80
- [MIT](./LICENSE)
247
+ ---
81
248
 
82
249
  ## Links
83
250
 
84
- - [Website](https://yuque.github.io/yuque-ecosystem/) · [Yuque API Docs](https://www.yuque.com/yuque/developer/api) · [MCP Protocol](https://modelcontextprotocol.io/) · [Contributing](./CONTRIBUTING.md)
251
+ - [Website](https://yuque.github.io/yuque-ecosystem/)
252
+ - [Yuque API Docs](https://www.yuque.com/yuque/developer/api)
253
+ - [MCP Protocol](https://modelcontextprotocol.io/)
254
+ - [MCP Registry](https://github.com/modelcontextprotocol/servers)
255
+ - [Contributing](./CONTRIBUTING.md)
256
+
257
+ ## License
258
+
259
+ [MIT](./LICENSE)
package/README.zh-CN.md CHANGED
@@ -6,41 +6,205 @@
6
6
 
7
7
  [语雀](https://www.yuque.com/) MCP Server — 通过 [Model Context Protocol](https://modelcontextprotocol.io/) 让 AI 助手访问你的语雀知识库。
8
8
 
9
- 🌐 **[官网](https://yuque.github.io/yuque-ecosystem/)** · [English](./README.md)
9
+ 🌐 **[官网](https://yuque.github.io/yuque-ecosystem/)** · 📖 [API 文档](https://www.yuque.com/yuque/developer/api) · [English](./README.md)
10
+
11
+ ---
10
12
 
11
13
  ## 快速开始
12
14
 
13
15
  ### 1. 获取语雀 API Token
14
16
 
15
- 前往 [语雀开发者设置](https://www.yuque.com/settings/tokens) 创建个人 Token。
17
+ 前往 [语雀开发者设置](https://www.yuque.com/settings/tokens) 创建个人访问令牌。
18
+
19
+ ### 2. 快速安装(推荐)
20
+
21
+ 使用内置 CLI 命令一键配置 MCP 客户端:
22
+
23
+ ```bash
24
+ npx yuque-mcp install --token=YOUR_TOKEN --client=cursor
25
+ ```
26
+
27
+ 支持的客户端:`claude-desktop`、`vscode`、`cursor`、`windsurf`、`cline`、`trae`
28
+
29
+ 或使用交互式安装向导:
16
30
 
17
- ### 2. 添加到 MCP 客户端
31
+ ```bash
32
+ npx yuque-mcp setup
33
+ ```
34
+
35
+ CLI 会自动找到对应操作系统的配置文件路径,与已有配置合并(不会覆盖其他服务器),并打印成功信息。
36
+
37
+ ### 3. 手动配置
18
38
 
19
- #### Claude Code
39
+ <details>
40
+ <summary>偏好手动配置?点击展开所有客户端配置。</summary>
41
+
42
+ 选择你使用的客户端:
43
+
44
+ <details open>
45
+ <summary><b>Claude Code</b></summary>
20
46
 
21
47
  ```bash
22
48
  claude mcp add yuque-mcp -- npx -y yuque-mcp --token=YOUR_TOKEN
23
49
  ```
24
50
 
25
- 或设置环境变量(三选一):
51
+ 或使用环境变量:
26
52
 
27
53
  ```bash
28
- # 个人 Token
29
54
  export YUQUE_PERSONAL_TOKEN=YOUR_TOKEN
55
+ claude mcp add yuque-mcp -- npx -y yuque-mcp
56
+ ```
30
57
 
31
- # 团队 Token
32
- export YUQUE_GROUP_TOKEN=YOUR_TOKEN
58
+ </details>
33
59
 
34
- # 旧版(仍支持)
35
- export YUQUE_TOKEN=YOUR_TOKEN
60
+ <details>
61
+ <summary><b>Claude Desktop</b></summary>
36
62
 
37
- claude mcp add yuque-mcp -- npx -y yuque-mcp
63
+ 添加到 `claude_desktop_config.json`:
64
+
65
+ - macOS:`~/Library/Application Support/Claude/claude_desktop_config.json`
66
+ - Windows:`%APPDATA%\Claude\claude_desktop_config.json`
67
+
68
+ ```json
69
+ {
70
+ "mcpServers": {
71
+ "yuque": {
72
+ "command": "npx",
73
+ "args": ["-y", "yuque-mcp"],
74
+ "env": {
75
+ "YUQUE_PERSONAL_TOKEN": "YOUR_TOKEN"
76
+ }
77
+ }
78
+ }
79
+ }
80
+ ```
81
+
82
+ </details>
83
+
84
+ <details>
85
+ <summary><b>VS Code (GitHub Copilot)</b></summary>
86
+
87
+ 添加到工作区的 `.vscode/mcp.json`:
88
+
89
+ ```json
90
+ {
91
+ "servers": {
92
+ "yuque": {
93
+ "command": "npx",
94
+ "args": ["-y", "yuque-mcp"],
95
+ "env": {
96
+ "YUQUE_PERSONAL_TOKEN": "YOUR_TOKEN"
97
+ }
98
+ }
99
+ }
100
+ }
38
101
  ```
39
102
 
40
- ### 3. 开始使用!
103
+ 然后在 GitHub Copilot Chat 中启用 Agent 模式。
104
+
105
+ </details>
106
+
107
+ <details>
108
+ <summary><b>Cursor</b></summary>
109
+
110
+ 添加到 Cursor MCP 配置(`~/.cursor/mcp.json`):
111
+
112
+ ```json
113
+ {
114
+ "mcpServers": {
115
+ "yuque": {
116
+ "command": "npx",
117
+ "args": ["-y", "yuque-mcp"],
118
+ "env": {
119
+ "YUQUE_PERSONAL_TOKEN": "YOUR_TOKEN"
120
+ }
121
+ }
122
+ }
123
+ }
124
+ ```
125
+
126
+ </details>
127
+
128
+ <details>
129
+ <summary><b>Windsurf</b></summary>
130
+
131
+ 添加到 Windsurf MCP 配置(`~/.windsurf/mcp.json`):
132
+
133
+ ```json
134
+ {
135
+ "mcpServers": {
136
+ "yuque": {
137
+ "command": "npx",
138
+ "args": ["-y", "yuque-mcp"],
139
+ "env": {
140
+ "YUQUE_PERSONAL_TOKEN": "YOUR_TOKEN"
141
+ }
142
+ }
143
+ }
144
+ }
145
+ ```
146
+
147
+ </details>
148
+
149
+ <details>
150
+ <summary><b>Cline (VS Code)</b></summary>
151
+
152
+ 添加到 Cline MCP 配置(`~/Library/Application Support/Code/User/globalStorage/saoudrizwan.claude-dev/settings/cline_mcp_settings.json`):
153
+
154
+ ```json
155
+ {
156
+ "mcpServers": {
157
+ "yuque": {
158
+ "command": "npx",
159
+ "args": ["-y", "yuque-mcp"],
160
+ "env": {
161
+ "YUQUE_PERSONAL_TOKEN": "YOUR_TOKEN"
162
+ }
163
+ }
164
+ }
165
+ }
166
+ ```
167
+
168
+ </details>
169
+
170
+ <details>
171
+ <summary><b>Trae</b></summary>
172
+
173
+ 在 Trae 中,打开 **设置**,进入 **MCP** 部分,添加一个 stdio 类型的 MCP Server,配置如下:
174
+
175
+ - **Command:** `npx`
176
+ - **Args:** `-y yuque-mcp`
177
+ - **Env:** `YUQUE_PERSONAL_TOKEN=YOUR_TOKEN`
178
+
179
+ 详见 [Trae MCP 文档](https://docs.trae.ai/ide/model-context-protocol)。
180
+
181
+ </details>
182
+
183
+ > **更多客户端:** 任何支持 stdio 传输的 MCP 客户端均可使用 yuque-mcp。通用配置:command = `npx`,args = `["-y", "yuque-mcp"]`,env = `YUQUE_PERSONAL_TOKEN`。
184
+
185
+ </details>
186
+
187
+ ### 4. 开始使用!
41
188
 
42
189
  让 AI 助手搜索语雀文档、创建文档、管理知识库。
43
190
 
191
+ ---
192
+
193
+ ## 认证方式
194
+
195
+ 服务器支持多种方式提供语雀 API Token:
196
+
197
+ | 方式 | 环境变量 / 参数 | 说明 |
198
+ |------|----------------|------|
199
+ | **个人 Token**(推荐) | `YUQUE_PERSONAL_TOKEN` | 访问个人语雀账号 |
200
+ | **团队 Token** | `YUQUE_GROUP_TOKEN` | 访问语雀团队 |
201
+ | **旧版 Token** | `YUQUE_TOKEN` | 向后兼容 |
202
+ | **CLI 参数** | `--token=YOUR_TOKEN` | 通过命令行参数传入 |
203
+
204
+ **优先级:** `YUQUE_PERSONAL_TOKEN` > `YUQUE_GROUP_TOKEN` > `YUQUE_TOKEN` > `--token`
205
+
206
+ ---
207
+
44
208
  ## 可用工具(25 个)
45
209
 
46
210
  | 分类 | 工具 |
@@ -55,13 +219,19 @@ claude mcp add yuque-mcp -- npx -y yuque-mcp
55
219
  | **统计** | `yuque_group_stats`、`yuque_group_member_stats`、`yuque_group_book_stats`、`yuque_group_doc_stats` |
56
220
  | **工具** | `yuque_hello` |
57
221
 
222
+ ---
223
+
58
224
  ## 常见问题
59
225
 
60
226
  | 错误 | 解决方案 |
61
227
  |------|----------|
62
- | `YUQUE_PERSONAL_TOKEN is required` | 传入 `--token=YOUR_TOKEN` 或设置以下环境变量之一:`YUQUE_PERSONAL_TOKEN`、`YUQUE_GROUP_TOKEN` 或 `YUQUE_TOKEN` |
63
- | `401 Unauthorized` | Token 无效或过期 — 到[语雀设置](https://www.yuque.com/settings/tokens)重新生成 |
228
+ | `YUQUE_PERSONAL_TOKEN is required` | 设置环境变量(`YUQUE_PERSONAL_TOKEN`、`YUQUE_GROUP_TOKEN` 或 `YUQUE_TOKEN`)或传入 `--token=YOUR_TOKEN` |
229
+ | `401 Unauthorized` | Token 无效或已过期 — 到[语雀设置](https://www.yuque.com/settings/tokens)重新生成 |
64
230
  | `429 Rate Limited` | 请求过于频繁,等待后重试 |
231
+ | 找不到工具 | 更新到最新版本:`npx -y yuque-mcp@latest` |
232
+ | 找不到 `npx` 命令 | 安装 [Node.js](https://nodejs.org/)(v18 或更高版本) |
233
+
234
+ ---
65
235
 
66
236
  ## 开发
67
237
 
@@ -69,15 +239,21 @@ claude mcp add yuque-mcp -- npx -y yuque-mcp
69
239
  git clone https://github.com/yuque/yuque-mcp-server.git
70
240
  cd yuque-mcp-server
71
241
  npm install
72
- npm test # 运行测试(57 个测试用例)
242
+ npm test # 运行测试
73
243
  npm run build # 编译 TypeScript
74
- npm run dev # 开发模式
244
+ npm run dev # 开发模式(热重载)
75
245
  ```
76
246
 
77
- ## 许可证
78
-
79
- [MIT](./LICENSE)
247
+ ---
80
248
 
81
249
  ## 链接
82
250
 
83
- - [官网](https://yuque.github.io/yuque-ecosystem/) · [语雀 API 文档](https://www.yuque.com/yuque/developer/api) · [MCP 协议](https://modelcontextprotocol.io/) · [贡献指南](./CONTRIBUTING.md)
251
+ - [官网](https://yuque.github.io/yuque-ecosystem/)
252
+ - [语雀 API 文档](https://www.yuque.com/yuque/developer/api)
253
+ - [MCP 协议](https://modelcontextprotocol.io/)
254
+ - [MCP Registry](https://github.com/modelcontextprotocol/servers)
255
+ - [贡献指南](./CONTRIBUTING.md)
256
+
257
+ ## 许可证
258
+
259
+ [MIT](./LICENSE)
@@ -0,0 +1,26 @@
1
+ type ClientId = 'claude-desktop' | 'vscode' | 'cursor' | 'windsurf' | 'cline' | 'trae';
2
+ interface ClientConfig {
3
+ name: string;
4
+ configKey: 'mcpServers' | 'servers';
5
+ getConfigPath: () => string;
6
+ }
7
+ export interface InstallOptions {
8
+ token: string;
9
+ client: ClientId;
10
+ }
11
+ export declare function getSupportedClients(): ClientId[];
12
+ export declare function getClientConfig(client: ClientId): ClientConfig | undefined;
13
+ /**
14
+ * Install yuque-mcp config into the specified client's config file.
15
+ * Returns the path that was written to.
16
+ */
17
+ export declare function installToClient(options: InstallOptions): string;
18
+ export declare function runInstall(args: string[]): void;
19
+ export declare function runSetup(): Promise<void>;
20
+ /**
21
+ * Check if the CLI was invoked with install or setup subcommand.
22
+ * Returns true if handled (caller should exit), false otherwise.
23
+ */
24
+ export declare function handleCliSubcommands(argv: string[]): boolean;
25
+ export {};
26
+ //# sourceMappingURL=cli-install.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli-install.d.ts","sourceRoot":"","sources":["../src/cli-install.ts"],"names":[],"mappings":"AAOA,KAAK,QAAQ,GAAG,gBAAgB,GAAG,QAAQ,GAAG,QAAQ,GAAG,UAAU,GAAG,OAAO,GAAG,MAAM,CAAC;AAEvF,UAAU,YAAY;IACpB,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,YAAY,GAAG,SAAS,CAAC;IACpC,aAAa,EAAE,MAAM,MAAM,CAAC;CAC7B;AAkID,MAAM,WAAW,cAAc;IAC7B,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,QAAQ,CAAC;CAClB;AAED,wBAAgB,mBAAmB,IAAI,QAAQ,EAAE,CAEhD;AAED,wBAAgB,eAAe,CAAC,MAAM,EAAE,QAAQ,GAAG,YAAY,GAAG,SAAS,CAE1E;AAED;;;GAGG;AACH,wBAAgB,eAAe,CAAC,OAAO,EAAE,cAAc,GAAG,MAAM,CA2C/D;AAID,wBAAgB,UAAU,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,IAAI,CAwC/C;AAYD,wBAAsB,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC,CA8C9C;AAID;;;GAGG;AACH,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAiB5D"}
@@ -0,0 +1,247 @@
1
+ import * as fs from 'node:fs';
2
+ import * as path from 'node:path';
3
+ import * as os from 'node:os';
4
+ import * as readline from 'node:readline';
5
+ function getAppDataPath() {
6
+ if (process.platform === 'win32') {
7
+ return process.env.APPDATA || path.join(os.homedir(), 'AppData', 'Roaming');
8
+ }
9
+ return '';
10
+ }
11
+ function getConfigHome() {
12
+ if (process.platform === 'linux') {
13
+ return process.env.XDG_CONFIG_HOME || path.join(os.homedir(), '.config');
14
+ }
15
+ return '';
16
+ }
17
+ const CLIENT_CONFIGS = {
18
+ 'claude-desktop': {
19
+ name: 'Claude Desktop',
20
+ configKey: 'mcpServers',
21
+ getConfigPath() {
22
+ switch (process.platform) {
23
+ case 'darwin':
24
+ return path.join(os.homedir(), 'Library', 'Application Support', 'Claude', 'claude_desktop_config.json');
25
+ case 'win32':
26
+ return path.join(getAppDataPath(), 'Claude', 'claude_desktop_config.json');
27
+ default:
28
+ return path.join(getConfigHome() || path.join(os.homedir(), '.config'), 'Claude', 'claude_desktop_config.json');
29
+ }
30
+ },
31
+ },
32
+ vscode: {
33
+ name: 'VS Code',
34
+ configKey: 'servers',
35
+ getConfigPath() {
36
+ return path.join(process.cwd(), '.vscode', 'mcp.json');
37
+ },
38
+ },
39
+ cursor: {
40
+ name: 'Cursor',
41
+ configKey: 'mcpServers',
42
+ getConfigPath() {
43
+ return path.join(os.homedir(), '.cursor', 'mcp.json');
44
+ },
45
+ },
46
+ windsurf: {
47
+ name: 'Windsurf',
48
+ configKey: 'mcpServers',
49
+ getConfigPath() {
50
+ return path.join(os.homedir(), '.windsurf', 'mcp.json');
51
+ },
52
+ },
53
+ cline: {
54
+ name: 'Cline',
55
+ configKey: 'mcpServers',
56
+ getConfigPath() {
57
+ switch (process.platform) {
58
+ case 'darwin':
59
+ return path.join(os.homedir(), 'Library', 'Application Support', 'Code', 'User', 'globalStorage', 'saoudrizwan.claude-dev', 'settings', 'cline_mcp_settings.json');
60
+ case 'win32':
61
+ return path.join(getAppDataPath(), 'Code', 'User', 'globalStorage', 'saoudrizwan.claude-dev', 'settings', 'cline_mcp_settings.json');
62
+ default:
63
+ return path.join(getConfigHome() || path.join(os.homedir(), '.config'), 'Code', 'User', 'globalStorage', 'saoudrizwan.claude-dev', 'settings', 'cline_mcp_settings.json');
64
+ }
65
+ },
66
+ },
67
+ trae: {
68
+ name: 'Trae',
69
+ configKey: 'mcpServers',
70
+ getConfigPath() {
71
+ switch (process.platform) {
72
+ case 'darwin':
73
+ return path.join(os.homedir(), 'Library', 'Application Support', 'Trae', 'User', 'globalStorage', 'trae-ai.trae-core', 'settings', 'cline_mcp_settings.json');
74
+ case 'win32':
75
+ return path.join(getAppDataPath(), 'Trae', 'User', 'globalStorage', 'trae-ai.trae-core', 'settings', 'cline_mcp_settings.json');
76
+ default:
77
+ return path.join(getConfigHome() || path.join(os.homedir(), '.config'), 'Trae', 'User', 'globalStorage', 'trae-ai.trae-core', 'settings', 'cline_mcp_settings.json');
78
+ }
79
+ },
80
+ },
81
+ };
82
+ // ─── Config Generation ────────────────────────────────────────────────
83
+ function buildServerEntry(token) {
84
+ return {
85
+ command: 'npx',
86
+ args: ['-y', 'yuque-mcp'],
87
+ env: {
88
+ YUQUE_PERSONAL_TOKEN: token,
89
+ },
90
+ };
91
+ }
92
+ export function getSupportedClients() {
93
+ return Object.keys(CLIENT_CONFIGS);
94
+ }
95
+ export function getClientConfig(client) {
96
+ return CLIENT_CONFIGS[client];
97
+ }
98
+ /**
99
+ * Install yuque-mcp config into the specified client's config file.
100
+ * Returns the path that was written to.
101
+ */
102
+ export function installToClient(options) {
103
+ const clientConfig = CLIENT_CONFIGS[options.client];
104
+ if (!clientConfig) {
105
+ throw new Error(`Unknown client: "${options.client}". Supported clients: ${getSupportedClients().join(', ')}`);
106
+ }
107
+ const configPath = clientConfig.getConfigPath();
108
+ const configKey = clientConfig.configKey;
109
+ // Read existing config or start fresh
110
+ let config = {};
111
+ if (fs.existsSync(configPath)) {
112
+ try {
113
+ const raw = fs.readFileSync(configPath, 'utf-8');
114
+ config = JSON.parse(raw);
115
+ }
116
+ catch {
117
+ // If the file exists but is invalid JSON, back it up and start fresh
118
+ const backupPath = configPath + '.backup';
119
+ fs.copyFileSync(configPath, backupPath);
120
+ console.log(`⚠️ Existing config was invalid JSON. Backed up to: ${backupPath}`);
121
+ config = {};
122
+ }
123
+ }
124
+ // Ensure the servers/mcpServers key exists
125
+ if (!config[configKey] || typeof config[configKey] !== 'object') {
126
+ config[configKey] = {};
127
+ }
128
+ // Inject/update the yuque entry
129
+ const serversObj = config[configKey];
130
+ serversObj['yuque'] = buildServerEntry(options.token);
131
+ // Create parent directories if needed
132
+ const dir = path.dirname(configPath);
133
+ fs.mkdirSync(dir, { recursive: true });
134
+ // Write the config file
135
+ fs.writeFileSync(configPath, JSON.stringify(config, null, 2) + '\n', 'utf-8');
136
+ return configPath;
137
+ }
138
+ // ─── CLI: install subcommand ──────────────────────────────────────────
139
+ export function runInstall(args) {
140
+ const tokenArg = args.find((a) => a.startsWith('--token='));
141
+ const clientArg = args.find((a) => a.startsWith('--client='));
142
+ if (!tokenArg) {
143
+ console.error('Error: --token=YOUR_TOKEN is required.');
144
+ console.error('Usage: npx yuque-mcp install --token=YOUR_TOKEN --client=CLIENT');
145
+ console.error(`Supported clients: ${getSupportedClients().join(', ')}`);
146
+ process.exit(1);
147
+ }
148
+ if (!clientArg) {
149
+ console.error('Error: --client=CLIENT is required.');
150
+ console.error('Usage: npx yuque-mcp install --token=YOUR_TOKEN --client=CLIENT');
151
+ console.error(`Supported clients: ${getSupportedClients().join(', ')}`);
152
+ process.exit(1);
153
+ }
154
+ const token = tokenArg.split('=').slice(1).join('=');
155
+ const client = clientArg.split('=').slice(1).join('=');
156
+ if (!token) {
157
+ console.error('Error: Token value cannot be empty.');
158
+ process.exit(1);
159
+ }
160
+ try {
161
+ const configPath = installToClient({ token, client });
162
+ const clientName = CLIENT_CONFIGS[client]?.name ?? client;
163
+ console.log(`\n✅ Successfully configured yuque-mcp for ${clientName}!`);
164
+ console.log(` Config file: ${configPath}`);
165
+ console.log(`\n Restart ${clientName} to activate the MCP server.\n`);
166
+ }
167
+ catch (error) {
168
+ if (error instanceof Error) {
169
+ console.error(`\n❌ ${error.message}\n`);
170
+ }
171
+ else {
172
+ console.error('\n❌ An unexpected error occurred.\n');
173
+ }
174
+ process.exit(1);
175
+ }
176
+ }
177
+ // ─── CLI: setup subcommand (interactive) ──────────────────────────────
178
+ function askQuestion(rl, question) {
179
+ return new Promise((resolve) => {
180
+ rl.question(question, (answer) => {
181
+ resolve(answer.trim());
182
+ });
183
+ });
184
+ }
185
+ export async function runSetup() {
186
+ const rl = readline.createInterface({
187
+ input: process.stdin,
188
+ output: process.stdout,
189
+ });
190
+ try {
191
+ console.log('\n🚀 Yuque MCP Server — Quick Setup\n');
192
+ // Step 1: Ask for token
193
+ console.log('Step 1: Enter your Yuque API token');
194
+ console.log(' (Get one at https://www.yuque.com/settings/tokens)\n');
195
+ const token = await askQuestion(rl, ' Token: ');
196
+ if (!token) {
197
+ console.error('\n❌ Token cannot be empty.\n');
198
+ process.exit(1);
199
+ }
200
+ // Step 2: Select client
201
+ const clients = getSupportedClients();
202
+ console.log('\nStep 2: Select your MCP client\n');
203
+ clients.forEach((id, i) => {
204
+ const config = CLIENT_CONFIGS[id];
205
+ console.log(` ${i + 1}) ${config.name} (${id})`);
206
+ });
207
+ console.log('');
208
+ const choice = await askQuestion(rl, ' Enter number (1-' + clients.length + '): ');
209
+ const idx = parseInt(choice, 10) - 1;
210
+ if (isNaN(idx) || idx < 0 || idx >= clients.length) {
211
+ console.error('\n❌ Invalid selection.\n');
212
+ process.exit(1);
213
+ }
214
+ const client = clients[idx];
215
+ // Step 3: Install
216
+ console.log('');
217
+ const configPath = installToClient({ token, client });
218
+ const clientName = CLIENT_CONFIGS[client].name;
219
+ console.log(`✅ Successfully configured yuque-mcp for ${clientName}!`);
220
+ console.log(` Config file: ${configPath}`);
221
+ console.log(`\n Restart ${clientName} to activate the MCP server.\n`);
222
+ }
223
+ finally {
224
+ rl.close();
225
+ }
226
+ }
227
+ // ─── Entry: detect subcommands ────────────────────────────────────────
228
+ /**
229
+ * Check if the CLI was invoked with install or setup subcommand.
230
+ * Returns true if handled (caller should exit), false otherwise.
231
+ */
232
+ export function handleCliSubcommands(argv) {
233
+ const subcommand = argv[2]; // argv[0] = node, argv[1] = script
234
+ if (subcommand === 'install') {
235
+ runInstall(argv.slice(3));
236
+ return true;
237
+ }
238
+ if (subcommand === 'setup') {
239
+ runSetup().catch((error) => {
240
+ console.error('Setup failed:', error);
241
+ process.exit(1);
242
+ });
243
+ return true;
244
+ }
245
+ return false;
246
+ }
247
+ //# sourceMappingURL=cli-install.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli-install.js","sourceRoot":"","sources":["../src/cli-install.ts"],"names":[],"mappings":"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"}
package/dist/cli.js CHANGED
@@ -1,15 +1,52 @@
1
1
  #!/usr/bin/env node
2
+ import { createRequire } from 'node:module';
3
+ import { handleCliSubcommands } from './cli-install.js';
2
4
  import { runStdioServer } from './server.js';
3
- const token = process.env.YUQUE_PERSONAL_TOKEN ||
4
- process.env.YUQUE_GROUP_TOKEN ||
5
- process.env.YUQUE_TOKEN ||
6
- process.argv.find((arg) => arg.startsWith('--token='))?.split('=')[1];
7
- if (!token) {
8
- console.error('Error: YUQUE_PERSONAL_TOKEN, YUQUE_GROUP_TOKEN, or YUQUE_TOKEN environment variable (or --token argument) is required');
9
- process.exit(1);
5
+ // Handle install/setup subcommands before starting the MCP server
6
+ if (handleCliSubcommands(process.argv)) {
7
+ // Subcommand was handled — do not start the server.
8
+ // For async subcommands (setup), the process will exit when done.
9
+ }
10
+ else {
11
+ // Normal MCP server startup
12
+ const token = process.env.YUQUE_PERSONAL_TOKEN ||
13
+ process.env.YUQUE_GROUP_TOKEN ||
14
+ process.env.YUQUE_TOKEN ||
15
+ process.argv.find((arg) => arg.startsWith('--token='))?.split('=')[1];
16
+ if (!token) {
17
+ console.error('Error: YUQUE_PERSONAL_TOKEN, YUQUE_GROUP_TOKEN, or YUQUE_TOKEN environment variable (or --token argument) is required');
18
+ process.exit(1);
19
+ }
20
+ // If running directly in a terminal (not piped by an MCP client),
21
+ // show a helpful guide instead of silently waiting on stdio.
22
+ if (process.stdin.isTTY) {
23
+ const require = createRequire(import.meta.url);
24
+ const { version } = require('../package.json');
25
+ console.log(`
26
+ ╔══════════════════════════════════════════════════════════════╗
27
+ ║ 🍃 Yuque MCP Server v${version.padEnd(39)}║
28
+ ╚══════════════════════════════════════════════════════════════╝
29
+
30
+ ⚠️ MCP Server 需要通过 MCP 客户端启动,不能直接在终端运行。
31
+
32
+ 🚀 快速安装到你的编辑器:
33
+
34
+ npx yuque-mcp install --client=vscode --token=YOUR_TOKEN
35
+ npx yuque-mcp install --client=cursor --token=YOUR_TOKEN
36
+
37
+ 🔧 交互式引导安装:
38
+
39
+ npx yuque-mcp setup
40
+
41
+ 📖 支持的客户端: vscode, cursor, windsurf, claude-desktop, trae, cline
42
+
43
+ 🔗 更多信息: https://github.com/yuque/yuque-mcp-server
44
+ `);
45
+ process.exit(0);
46
+ }
47
+ runStdioServer(token).catch((error) => {
48
+ console.error('Fatal error:', error);
49
+ process.exit(1);
50
+ });
10
51
  }
11
- runStdioServer(token).catch((error) => {
12
- console.error('Fatal error:', error);
13
- process.exit(1);
14
- });
15
52
  //# sourceMappingURL=cli.js.map
package/dist/cli.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":";AACA,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAE7C,MAAM,KAAK,GACT,OAAO,CAAC,GAAG,CAAC,oBAAoB;IAChC,OAAO,CAAC,GAAG,CAAC,iBAAiB;IAC7B,OAAO,CAAC,GAAG,CAAC,WAAW;IACvB,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,UAAU,CAAC,UAAU,CAAC,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;AAExE,IAAI,CAAC,KAAK,EAAE,CAAC;IACX,OAAO,CAAC,KAAK,CAAC,uHAAuH,CAAC,CAAC;IACvI,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC;AAED,cAAc,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE,EAAE;IACpC,OAAO,CAAC,KAAK,CAAC,cAAc,EAAE,KAAK,CAAC,CAAC;IACrC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC,CAAC,CAAC"}
1
+ {"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":";AACA,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,EAAE,oBAAoB,EAAE,MAAM,kBAAkB,CAAC;AACxD,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAE7C,kEAAkE;AAClE,IAAI,oBAAoB,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC;IACvC,oDAAoD;IACpD,kEAAkE;AACpE,CAAC;KAAM,CAAC;IACN,4BAA4B;IAC5B,MAAM,KAAK,GACT,OAAO,CAAC,GAAG,CAAC,oBAAoB;QAChC,OAAO,CAAC,GAAG,CAAC,iBAAiB;QAC7B,OAAO,CAAC,GAAG,CAAC,WAAW;QACvB,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,UAAU,CAAC,UAAU,CAAC,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;IAExE,IAAI,CAAC,KAAK,EAAE,CAAC;QACX,OAAO,CAAC,KAAK,CAAC,uHAAuH,CAAC,CAAC;QACvI,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,kEAAkE;IAClE,6DAA6D;IAC7D,IAAI,OAAO,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC;QACxB,MAAM,OAAO,GAAG,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QAC/C,MAAM,EAAE,OAAO,EAAE,GAAG,OAAO,CAAC,iBAAiB,CAAC,CAAC;QAC/C,OAAO,CAAC,GAAG,CAAC;;0BAEU,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;;;;;;;;;;;;;;;;;CAiB3C,CAAC,CAAC;QACC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,cAAc,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE,EAAE;QACpC,OAAO,CAAC,KAAK,CAAC,cAAc,EAAE,KAAK,CAAC,CAAC;QACrC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC,CAAC,CAAC;AACL,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"doc.d.ts","sourceRoot":"","sources":["../../src/tools/doc.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,6BAA6B,CAAC;AAG/D,eAAO,MAAM,QAAQ;;;;;;;;;;0BAQO,WAAW,QAAQ;YAAE,OAAO,EAAE,MAAM,GAAG,MAAM,CAAA;SAAE;;;;;;;;;;;;;;;;;;;0BAwB7D,WAAW,QACb;YAAE,OAAO,EAAE,MAAM,GAAG,MAAM,CAAC;YAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAAA;SAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;0BA2BnD,WAAW,QACb;YACJ,OAAO,EAAE,MAAM,GAAG,MAAM,CAAC;YACzB,KAAK,EAAE,MAAM,CAAC;YACd,IAAI,CAAC,EAAE,MAAM,CAAC;YACd,IAAI,CAAC,EAAE,MAAM,CAAC;YACd,MAAM,CAAC,EAAE,MAAM,CAAC;YAChB,MAAM,CAAC,EAAE,MAAM,CAAC;SACjB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;0BAoCO,WAAW,QACb;YACJ,OAAO,EAAE,MAAM,GAAG,MAAM,CAAC;YACzB,MAAM,EAAE,MAAM,GAAG,MAAM,CAAC;YACxB,KAAK,CAAC,EAAE,MAAM,CAAC;YACf,IAAI,CAAC,EAAE,MAAM,CAAC;YACd,IAAI,CAAC,EAAE,MAAM,CAAC;YACd,MAAM,CAAC,EAAE,MAAM,CAAC;SACjB;;;;;;;;;;;;;;;;;;;0BA+BO,WAAW,QACb;YAAE,OAAO,EAAE,MAAM,GAAG,MAAM,CAAC;YAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAAA;SAAE;;;;;;;CAahE,CAAC"}
1
+ {"version":3,"file":"doc.d.ts","sourceRoot":"","sources":["../../src/tools/doc.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,6BAA6B,CAAC;AAuB/D,eAAO,MAAM,QAAQ;;;;;;;;;;0BAQO,WAAW,QAAQ;YAAE,OAAO,EAAE,MAAM,GAAG,MAAM,CAAA;SAAE;;;;;;;;;;;;;;;;;;;0BAwB7D,WAAW,QACb;YAAE,OAAO,EAAE,MAAM,GAAG,MAAM,CAAC;YAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAAA;SAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;0BA2BnD,WAAW,QACb;YACJ,OAAO,EAAE,MAAM,GAAG,MAAM,CAAC;YACzB,KAAK,EAAE,MAAM,CAAC;YACd,IAAI,CAAC,EAAE,MAAM,CAAC;YACd,IAAI,CAAC,EAAE,MAAM,CAAC;YACd,MAAM,CAAC,EAAE,MAAM,CAAC;YAChB,MAAM,CAAC,EAAE,MAAM,CAAC;SACjB;;sBAcqB,MAAM;sBAAQ,MAAM;;;;;;;;;;;;;;;;;;;;;;;;;;;;0BAyBlC,WAAW,QACb;YACJ,OAAO,EAAE,MAAM,GAAG,MAAM,CAAC;YACzB,MAAM,EAAE,MAAM,GAAG,MAAM,CAAC;YACxB,KAAK,CAAC,EAAE,MAAM,CAAC;YACf,IAAI,CAAC,EAAE,MAAM,CAAC;YACd,IAAI,CAAC,EAAE,MAAM,CAAC;YACd,MAAM,CAAC,EAAE,MAAM,CAAC;SACjB;;;;;;;;;;;;;;;;;;;0BA+BO,WAAW,QACb;YAAE,OAAO,EAAE,MAAM,GAAG,MAAM,CAAC;YAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAAA;SAAE;;;;;;;CAahE,CAAC"}
package/dist/tools/doc.js CHANGED
@@ -1,5 +1,21 @@
1
1
  import { z } from 'zod';
2
2
  import { formatDocSummary, formatDoc } from '../utils/format.js';
3
+ async function appendDocToToc(client, repoId, docId) {
4
+ try {
5
+ const tocData = JSON.stringify({
6
+ action: 'appendNode',
7
+ action_mode: 'child',
8
+ target_uuid: '',
9
+ type: 'DOC',
10
+ doc_id: docId,
11
+ });
12
+ await client.updateToc(repoId, tocData);
13
+ return null; // success
14
+ }
15
+ catch {
16
+ return 'Document created successfully but failed to auto-append to TOC. Use yuque_update_toc to add it manually.';
17
+ }
18
+ }
3
19
  export const docTools = {
4
20
  yuque_list_docs: {
5
21
  description: 'List all documents in a repo/book',
@@ -63,14 +79,15 @@ export const docTools = {
63
79
  public: args.public,
64
80
  };
65
81
  const doc = await client.createDoc(args.repo_id, data);
66
- return {
67
- content: [
68
- {
69
- type: 'text',
70
- text: JSON.stringify(formatDoc(doc), null, 2),
71
- },
72
- ],
73
- };
82
+ // Auto-append to TOC
83
+ const tocWarning = await appendDocToToc(client, args.repo_id, doc.id);
84
+ const result = [
85
+ { type: 'text', text: JSON.stringify(formatDoc(doc), null, 2) },
86
+ ];
87
+ if (tocWarning) {
88
+ result.push({ type: 'text', text: tocWarning });
89
+ }
90
+ return { content: result };
74
91
  },
75
92
  },
76
93
  yuque_update_doc: {
@@ -1 +1 @@
1
- {"version":3,"file":"doc.js","sourceRoot":"","sources":["../../src/tools/doc.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"doc.js","sourceRoot":"","sources":["../../src/tools/doc.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EAAE,gBAAgB,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAEjE,KAAK,UAAU,cAAc,CAC3B,MAAmB,EACnB,MAAuB,EACvB,KAAa;IAEb,IAAI,CAAC;QACH,MAAM,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC;YAC7B,MAAM,EAAE,YAAY;YACpB,WAAW,EAAE,OAAO;YACpB,WAAW,EAAE,EAAE;YACf,IAAI,EAAE,KAAK;YACX,MAAM,EAAE,KAAK;SACd,CAAC,CAAC;QACH,MAAM,MAAM,CAAC,SAAS,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;QACxC,OAAO,IAAI,CAAC,CAAC,UAAU;IACzB,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,0GAA0G,CAAC;IACpH,CAAC;AACH,CAAC;AAED,MAAM,CAAC,MAAM,QAAQ,GAAG;IACtB,eAAe,EAAE;QACf,WAAW,EAAE,mCAAmC;QAChD,WAAW,EAAE,CAAC,CAAC,MAAM,CAAC;YACpB,OAAO,EAAE,CAAC;iBACP,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC;iBAC/B,QAAQ,CAAC,+CAA+C,CAAC;SAC7D,CAAC;QACF,OAAO,EAAE,KAAK,EAAE,MAAmB,EAAE,IAAkC,EAAE,EAAE;YACzE,MAAM,IAAI,GAAG,MAAM,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;YACjD,OAAO;gBACL,OAAO,EAAE;oBACP;wBACE,IAAI,EAAE,MAAe;wBACrB,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,GAAG,CAAC,gBAAgB,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC;qBAC1D;iBACF;aACF,CAAC;QACJ,CAAC;KACF;IAED,aAAa,EAAE;QACb,WAAW,EAAE,2CAA2C;QACxD,WAAW,EAAE,CAAC,CAAC,MAAM,CAAC;YACpB,OAAO,EAAE,CAAC;iBACP,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC;iBAC/B,QAAQ,CAAC,+CAA+C,CAAC;YAC5D,MAAM,EAAE,CAAC;iBACN,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC;iBAC/B,QAAQ,CAAC,qBAAqB,CAAC;SACnC,CAAC;QACF,OAAO,EAAE,KAAK,EACZ,MAAmB,EACnB,IAA2D,EAC3D,EAAE;YACF,MAAM,GAAG,GAAG,MAAM,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;YAC3D,OAAO;gBACL,OAAO,EAAE;oBACP;wBACE,IAAI,EAAE,MAAe;wBACrB,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,GAAG,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC;qBAC9C;iBACF;aACF,CAAC;QACJ,CAAC;KACF;IAED,gBAAgB,EAAE;QAChB,WAAW,EAAE,sCAAsC;QACnD,WAAW,EAAE,CAAC,CAAC,MAAM,CAAC;YACpB,OAAO,EAAE,CAAC;iBACP,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC;iBAC/B,QAAQ,CAAC,+CAA+C,CAAC;YAC5D,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,gBAAgB,CAAC;YAC5C,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,yCAAyC,CAAC;YAC/E,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,4CAA4C,CAAC;YAClF,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,sCAAsC,CAAC;YAC9E,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,8CAA8C,CAAC;SACvF,CAAC;QACF,OAAO,EAAE,KAAK,EACZ,MAAmB,EACnB,IAOC,EACD,EAAE;YACF,MAAM,IAAI,GAAG;gBACX,KAAK,EAAE,IAAI,CAAC,KAAK;gBACjB,IAAI,EAAE,IAAI,CAAC,IAAI;gBACf,IAAI,EAAE,IAAI,CAAC,IAAI;gBACf,MAAM,EAAE,IAAI,CAAC,MAAM;gBACnB,MAAM,EAAE,IAAI,CAAC,MAAM;aACpB,CAAC;YACF,MAAM,GAAG,GAAG,MAAM,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;YAEvD,qBAAqB;YACrB,MAAM,UAAU,GAAG,MAAM,cAAc,CAAC,MAAM,EAAE,IAAI,CAAC,OAAO,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC;YAEtE,MAAM,MAAM,GAAqC;gBAC/C,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,GAAG,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE;aACzE,CAAC;YACF,IAAI,UAAU,EAAE,CAAC;gBACf,MAAM,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,UAAU,EAAE,CAAC,CAAC;YAC3D,CAAC;YACD,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,CAAC;QAC7B,CAAC;KACF;IAED,gBAAgB,EAAE;QAChB,WAAW,EAAE,6BAA6B;QAC1C,WAAW,EAAE,CAAC,CAAC,MAAM,CAAC;YACpB,OAAO,EAAE,CAAC;iBACP,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC;iBAC/B,QAAQ,CAAC,+CAA+C,CAAC;YAC5D,MAAM,EAAE,CAAC;iBACN,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC;iBAC/B,QAAQ,CAAC,qBAAqB,CAAC;YAClC,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,oBAAoB,CAAC;YAC3D,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,mBAAmB,CAAC;YACzD,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,sBAAsB,CAAC;YAC5D,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,8CAA8C,CAAC;SACvF,CAAC;QACF,OAAO,EAAE,KAAK,EACZ,MAAmB,EACnB,IAOC,EACD,EAAE;YACF,MAAM,IAAI,GAAG;gBACX,KAAK,EAAE,IAAI,CAAC,KAAK;gBACjB,IAAI,EAAE,IAAI,CAAC,IAAI;gBACf,IAAI,EAAE,IAAI,CAAC,IAAI;gBACf,MAAM,EAAE,IAAI,CAAC,MAAM;aACpB,CAAC;YACF,MAAM,GAAG,GAAG,MAAM,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;YACpE,OAAO;gBACL,OAAO,EAAE;oBACP;wBACE,IAAI,EAAE,MAAe;wBACrB,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,GAAG,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC;qBAC9C;iBACF;aACF,CAAC;QACJ,CAAC;KACF;IAED,gBAAgB,EAAE;QAChB,WAAW,EAAE,mBAAmB;QAChC,WAAW,EAAE,CAAC,CAAC,MAAM,CAAC;YACpB,OAAO,EAAE,CAAC;iBACP,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC;iBAC/B,QAAQ,CAAC,+CAA+C,CAAC;YAC5D,MAAM,EAAE,CAAC;iBACN,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC;iBAC/B,QAAQ,CAAC,qBAAqB,CAAC;SACnC,CAAC;QACF,OAAO,EAAE,KAAK,EACZ,MAAmB,EACnB,IAA2D,EAC3D,EAAE;YACF,MAAM,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;YAClD,OAAO;gBACL,OAAO,EAAE;oBACP;wBACE,IAAI,EAAE,MAAe;wBACrB,IAAI,EAAE,+BAA+B;qBACtC;iBACF;aACF,CAAC;QACJ,CAAC;KACF;CACF,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"toc.d.ts","sourceRoot":"","sources":["../../src/tools/toc.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,6BAA6B,CAAC;AAG/D,eAAO,MAAM,QAAQ;;;;;;;;;;0BAQO,WAAW,QAAQ;YAAE,OAAO,EAAE,MAAM,GAAG,MAAM,CAAA;SAAE;;;;;;;;;;;;;;;;;;;0BAqB/C,WAAW,QAAQ;YAAE,OAAO,EAAE,MAAM,GAAG,MAAM,CAAC;YAAC,QAAQ,EAAE,MAAM,CAAA;SAAE;;;;;;;CAY5F,CAAC"}
1
+ {"version":3,"file":"toc.d.ts","sourceRoot":"","sources":["../../src/tools/toc.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,6BAA6B,CAAC;AAG/D,eAAO,MAAM,QAAQ;;;;;;;;;;0BAQO,WAAW,QAAQ;YAAE,OAAO,EAAE,MAAM,GAAG,MAAM,CAAA;SAAE;;;;;;;;;;;;;;;;;;;0BA0B/C,WAAW,QAAQ;YAAE,OAAO,EAAE,MAAM,GAAG,MAAM,CAAC;YAAC,QAAQ,EAAE,MAAM,CAAA;SAAE;;;;;;;CAY5F,CAAC"}
package/dist/tools/toc.js CHANGED
@@ -21,12 +21,14 @@ export const tocTools = {
21
21
  },
22
22
  },
23
23
  yuque_update_toc: {
24
- description: 'Update the table of contents (TOC) for a repo/book',
24
+ description: 'Update the table of contents (TOC) for a repo/book. The toc_data must be a single-operation JSON object (not an array). Required fields: "action" (e.g. "appendNode"), "action_mode" ("child" or "sibling"), "target_uuid" (empty string for root level). For new nodes: include "type" ("TITLE" or "DOC") and "title". To move existing nodes: use "node_uuid" instead. Example: {"action":"appendNode","action_mode":"child","target_uuid":"","type":"TITLE","title":"New Section"}',
25
25
  inputSchema: z.object({
26
26
  repo_id: z
27
27
  .union([z.string(), z.number()])
28
28
  .describe('Repo ID or namespace (e.g., "mygroup/mybook")'),
29
- toc_data: z.string().describe('TOC data as JSON string'),
29
+ toc_data: z
30
+ .string()
31
+ .describe('Single-operation JSON object. Must include "action" (e.g. "appendNode"), "action_mode" ("child"|"sibling"), "target_uuid" (empty string = root). For new nodes add "type"+"title"; to move existing nodes use "node_uuid".'),
30
32
  }),
31
33
  handler: async (client, args) => {
32
34
  const toc = await client.updateToc(args.repo_id, args.toc_data);
@@ -1 +1 @@
1
- {"version":3,"file":"toc.js","sourceRoot":"","sources":["../../src/tools/toc.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAE/C,MAAM,CAAC,MAAM,QAAQ,GAAG;IACtB,aAAa,EAAE;QACb,WAAW,EAAE,iDAAiD;QAC9D,WAAW,EAAE,CAAC,CAAC,MAAM,CAAC;YACpB,OAAO,EAAE,CAAC;iBACP,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC;iBAC/B,QAAQ,CAAC,+CAA+C,CAAC;SAC7D,CAAC;QACF,OAAO,EAAE,KAAK,EAAE,MAAmB,EAAE,IAAkC,EAAE,EAAE;YACzE,MAAM,GAAG,GAAG,MAAM,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;YAC9C,OAAO;gBACL,OAAO,EAAE;oBACP;wBACE,IAAI,EAAE,MAAe;wBACrB,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,GAAG,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC;qBAC9C;iBACF;aACF,CAAC;QACJ,CAAC;KACF;IAED,gBAAgB,EAAE;QAChB,WAAW,EAAE,oDAAoD;QACjE,WAAW,EAAE,CAAC,CAAC,MAAM,CAAC;YACpB,OAAO,EAAE,CAAC;iBACP,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC;iBAC/B,QAAQ,CAAC,+CAA+C,CAAC;YAC5D,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,yBAAyB,CAAC;SACzD,CAAC;QACF,OAAO,EAAE,KAAK,EAAE,MAAmB,EAAE,IAAoD,EAAE,EAAE;YAC3F,MAAM,GAAG,GAAG,MAAM,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC;YAChE,OAAO;gBACL,OAAO,EAAE;oBACP;wBACE,IAAI,EAAE,MAAe;wBACrB,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,GAAG,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC;qBAC9C;iBACF;aACF,CAAC;QACJ,CAAC;KACF;CACF,CAAC"}
1
+ {"version":3,"file":"toc.js","sourceRoot":"","sources":["../../src/tools/toc.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAE/C,MAAM,CAAC,MAAM,QAAQ,GAAG;IACtB,aAAa,EAAE;QACb,WAAW,EAAE,iDAAiD;QAC9D,WAAW,EAAE,CAAC,CAAC,MAAM,CAAC;YACpB,OAAO,EAAE,CAAC;iBACP,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC;iBAC/B,QAAQ,CAAC,+CAA+C,CAAC;SAC7D,CAAC;QACF,OAAO,EAAE,KAAK,EAAE,MAAmB,EAAE,IAAkC,EAAE,EAAE;YACzE,MAAM,GAAG,GAAG,MAAM,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;YAC9C,OAAO;gBACL,OAAO,EAAE;oBACP;wBACE,IAAI,EAAE,MAAe;wBACrB,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,GAAG,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC;qBAC9C;iBACF;aACF,CAAC;QACJ,CAAC;KACF;IAED,gBAAgB,EAAE;QAChB,WAAW,EACT,udAAud;QACzd,WAAW,EAAE,CAAC,CAAC,MAAM,CAAC;YACpB,OAAO,EAAE,CAAC;iBACP,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC;iBAC/B,QAAQ,CAAC,+CAA+C,CAAC;YAC5D,QAAQ,EAAE,CAAC;iBACR,MAAM,EAAE;iBACR,QAAQ,CACP,4NAA4N,CAC7N;SACJ,CAAC;QACF,OAAO,EAAE,KAAK,EAAE,MAAmB,EAAE,IAAoD,EAAE,EAAE;YAC3F,MAAM,GAAG,GAAG,MAAM,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC;YAChE,OAAO;gBACL,OAAO,EAAE;oBACP;wBACE,IAAI,EAAE,MAAe;wBACrB,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,GAAG,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC;qBAC9C;iBACF;aACF,CAAC;QACJ,CAAC;KACF;CACF,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "yuque-mcp",
3
- "version": "0.1.4",
3
+ "version": "0.1.6",
4
4
  "description": "MCP server for Yuque (语雀) — expose Yuque knowledge base to AI assistants via Model Context Protocol",
5
5
  "mcpName": "io.github.yuque/yuque-mcp",
6
6
  "type": "module",