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 +197 -22
- package/README.zh-CN.md +196 -20
- package/dist/cli-install.d.ts +26 -0
- package/dist/cli-install.d.ts.map +1 -0
- package/dist/cli-install.js +247 -0
- package/dist/cli-install.js.map +1 -0
- package/dist/cli.js +48 -11
- package/dist/cli.js.map +1 -1
- package/dist/tools/doc.d.ts.map +1 -1
- package/dist/tools/doc.js +25 -8
- package/dist/tools/doc.js.map +1 -1
- package/dist/tools/toc.d.ts.map +1 -1
- package/dist/tools/toc.js +4 -2
- package/dist/tools/toc.js.map +1 -1
- package/package.json +1 -1
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
|
-
|
|
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
|
-
|
|
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
|
|
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
|
-
|
|
32
|
-
export YUQUE_GROUP_TOKEN=YOUR_TOKEN
|
|
58
|
+
</details>
|
|
33
59
|
|
|
34
|
-
|
|
35
|
-
|
|
60
|
+
<details>
|
|
61
|
+
<summary><b>Claude Desktop</b></summary>
|
|
36
62
|
|
|
37
|
-
|
|
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
|
-
|
|
103
|
+
Then enable Agent mode in GitHub Copilot Chat.
|
|
41
104
|
|
|
42
|
-
|
|
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
|
-
| **
|
|
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` |
|
|
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` |
|
|
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
|
|
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
|
-
|
|
79
|
-
|
|
80
|
-
[MIT](./LICENSE)
|
|
247
|
+
---
|
|
81
248
|
|
|
82
249
|
## Links
|
|
83
250
|
|
|
84
|
-
- [Website](https://yuque.github.io/yuque-ecosystem/)
|
|
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)
|
|
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
|
-
|
|
31
|
+
```bash
|
|
32
|
+
npx yuque-mcp setup
|
|
33
|
+
```
|
|
34
|
+
|
|
35
|
+
CLI 会自动找到对应操作系统的配置文件路径,与已有配置合并(不会覆盖其他服务器),并打印成功信息。
|
|
36
|
+
|
|
37
|
+
### 3. 手动配置
|
|
18
38
|
|
|
19
|
-
|
|
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
|
-
|
|
32
|
-
export YUQUE_GROUP_TOKEN=YOUR_TOKEN
|
|
58
|
+
</details>
|
|
33
59
|
|
|
34
|
-
|
|
35
|
-
|
|
60
|
+
<details>
|
|
61
|
+
<summary><b>Claude Desktop</b></summary>
|
|
36
62
|
|
|
37
|
-
|
|
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
|
-
|
|
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` |
|
|
63
|
-
| `401 Unauthorized` | Token
|
|
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 #
|
|
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/)
|
|
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
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
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;
|
|
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"}
|
package/dist/tools/doc.d.ts.map
CHANGED
|
@@ -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;
|
|
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
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
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: {
|
package/dist/tools/doc.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
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,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;
|
|
1
|
+
{"version":3,"file":"doc.js","sourceRoot":"","sources":["../../src/tools/doc.ts"],"names":[],"mappings":"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"}
|
package/dist/tools/toc.d.ts.map
CHANGED
|
@@ -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;;;;;;;;;;;;;;;;;;;
|
|
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
|
|
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);
|
package/dist/tools/toc.js.map
CHANGED
|
@@ -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,
|
|
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