yuque-mcp 0.1.3 → 0.1.5

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/CHANGELOG.md CHANGED
@@ -7,6 +7,10 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
7
7
 
8
8
  ## [Unreleased]
9
9
 
10
+ ### Changed
11
+ - Support `YUQUE_PERSONAL_TOKEN` and `YUQUE_GROUP_TOKEN` as primary environment variables (with `YUQUE_TOKEN` as fallback for backward compatibility)
12
+ - Update error messages to reflect new environment variable naming
13
+
10
14
  ## [0.1.0] - 2025-02-15
11
15
 
12
16
  ### Added
@@ -23,5 +27,5 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
23
27
  - Docker support
24
28
  - Documentation in English and Chinese
25
29
 
26
- [Unreleased]: https://github.com/chen201724/yuque-mcp-server/compare/v0.1.0...HEAD
27
- [0.1.0]: https://github.com/chen201724/yuque-mcp-server/releases/tag/v0.1.0
30
+ [Unreleased]: https://github.com/yuque/yuque-mcp-server/compare/v0.1.0...HEAD
31
+ [0.1.0]: https://github.com/yuque/yuque-mcp-server/releases/tag/v0.1.0
package/README.md CHANGED
@@ -1,30 +1,209 @@
1
1
  # Yuque MCP Server
2
2
 
3
- [![CI](https://github.com/chen201724/yuque-mcp-server/actions/workflows/ci.yml/badge.svg)](https://github.com/chen201724/yuque-mcp-server/actions/workflows/ci.yml)
3
+ [![CI](https://github.com/yuque/yuque-mcp-server/actions/workflows/ci.yml/badge.svg)](https://github.com/yuque/yuque-mcp-server/actions/workflows/ci.yml)
4
4
  [![npm version](https://img.shields.io/npm/v/yuque-mcp)](https://www.npmjs.com/package/yuque-mcp)
5
5
  [![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)
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://chen201724.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.
16
18
 
17
- ### 2. Add to Your MCP Client
19
+ ### 2. Quick Install (Recommended)
18
20
 
19
- #### Claude Code
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:
30
+
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
38
+
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
- ### 3. Done!
51
+ Or using environment variables:
52
+
53
+ ```bash
54
+ export YUQUE_PERSONAL_TOKEN=YOUR_TOKEN
55
+ claude mcp add yuque-mcp -- npx -y yuque-mcp
56
+ ```
57
+
58
+ </details>
59
+
60
+ <details>
61
+ <summary><b>Claude Desktop</b></summary>
62
+
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
+ }
101
+ ```
102
+
103
+ Then enable Agent mode in GitHub Copilot Chat.
104
+
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`.
26
184
 
27
- Ask your AI assistant to search your Yuque docs, create documents, or manage repos.
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
+ ---
28
207
 
29
208
  ## Available Tools (25)
30
209
 
@@ -32,7 +211,7 @@ Ask your AI assistant to search your Yuque docs, create documents, or manage rep
32
211
  |----------|-------|
33
212
  | **User** | `yuque_get_user`, `yuque_list_groups` |
34
213
  | **Search** | `yuque_search` |
35
- | **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` |
36
215
  | **Docs** | `yuque_list_docs`, `yuque_get_doc`, `yuque_create_doc`, `yuque_update_doc`, `yuque_delete_doc` |
37
216
  | **TOC** | `yuque_get_toc`, `yuque_update_toc` |
38
217
  | **Versions** | `yuque_list_doc_versions`, `yuque_get_doc_version` |
@@ -40,30 +219,41 @@ Ask your AI assistant to search your Yuque docs, create documents, or manage rep
40
219
  | **Stats** | `yuque_group_stats`, `yuque_group_member_stats`, `yuque_group_book_stats`, `yuque_group_doc_stats` |
41
220
  | **Utility** | `yuque_hello` |
42
221
 
222
+ ---
223
+
43
224
  ## Troubleshooting
44
225
 
45
226
  | Error | Solution |
46
227
  |-------|----------|
47
- | `YUQUE_TOKEN is required` | Pass `--token=YOUR_TOKEN` or set `YUQUE_TOKEN` env var |
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` |
48
229
  | `401 Unauthorized` | Token is invalid or expired — regenerate at [Yuque Settings](https://www.yuque.com/settings/tokens) |
49
- | `429 Rate Limited` | Wait a moment and retry |
50
- | 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
+ ---
51
235
 
52
236
  ## Development
53
237
 
54
238
  ```bash
55
- git clone https://github.com/chen201724/yuque-mcp-server.git
239
+ git clone https://github.com/yuque/yuque-mcp-server.git
56
240
  cd yuque-mcp-server
57
241
  npm install
58
- npm test # run tests (57 tests)
242
+ npm test # run tests
59
243
  npm run build # compile TypeScript
60
244
  npm run dev # dev mode with hot reload
61
245
  ```
62
246
 
63
- ## License
64
-
65
- [MIT](./LICENSE)
247
+ ---
66
248
 
67
249
  ## Links
68
250
 
69
- - [Website](https://chen201724.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
@@ -1,31 +1,210 @@
1
1
  # Yuque MCP Server
2
2
 
3
- [![CI](https://github.com/chen201724/yuque-mcp-server/actions/workflows/ci.yml/badge.svg)](https://github.com/chen201724/yuque-mcp-server/actions/workflows/ci.yml)
3
+ [![CI](https://github.com/yuque/yuque-mcp-server/actions/workflows/ci.yml/badge.svg)](https://github.com/yuque/yuque-mcp-server/actions/workflows/ci.yml)
4
4
  [![npm version](https://img.shields.io/npm/v/yuque-mcp)](https://www.npmjs.com/package/yuque-mcp)
5
5
  [![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)
6
6
 
7
7
  [语雀](https://www.yuque.com/) MCP Server — 通过 [Model Context Protocol](https://modelcontextprotocol.io/) 让 AI 助手访问你的语雀知识库。
8
8
 
9
- 🌐 **[官网](https://chen201724.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) 创建个人访问令牌。
16
18
 
17
- ### 2. 添加到 MCP 客户端
19
+ ### 2. 快速安装(推荐)
18
20
 
19
- #### Claude Code
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
+ 或使用交互式安装向导:
30
+
31
+ ```bash
32
+ npx yuque-mcp setup
33
+ ```
34
+
35
+ CLI 会自动找到对应操作系统的配置文件路径,与已有配置合并(不会覆盖其他服务器),并打印成功信息。
36
+
37
+ ### 3. 手动配置
38
+
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
- ### 3. 开始使用!
51
+ 或使用环境变量:
52
+
53
+ ```bash
54
+ export YUQUE_PERSONAL_TOKEN=YOUR_TOKEN
55
+ claude mcp add yuque-mcp -- npx -y yuque-mcp
56
+ ```
57
+
58
+ </details>
59
+
60
+ <details>
61
+ <summary><b>Claude Desktop</b></summary>
62
+
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
+ }
101
+ ```
102
+
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. 开始使用!
26
188
 
27
189
  让 AI 助手搜索语雀文档、创建文档、管理知识库。
28
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
+
29
208
  ## 可用工具(25 个)
30
209
 
31
210
  | 分类 | 工具 |
@@ -40,29 +219,41 @@ claude mcp add yuque-mcp -- npx -y yuque-mcp --token=YOUR_TOKEN
40
219
  | **统计** | `yuque_group_stats`、`yuque_group_member_stats`、`yuque_group_book_stats`、`yuque_group_doc_stats` |
41
220
  | **工具** | `yuque_hello` |
42
221
 
222
+ ---
223
+
43
224
  ## 常见问题
44
225
 
45
226
  | 错误 | 解决方案 |
46
227
  |------|----------|
47
- | `YUQUE_TOKEN is required` | 传入 `--token=YOUR_TOKEN` 或设置 `YUQUE_TOKEN` 环境变量 |
48
- | `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)重新生成 |
49
230
  | `429 Rate Limited` | 请求过于频繁,等待后重试 |
231
+ | 找不到工具 | 更新到最新版本:`npx -y yuque-mcp@latest` |
232
+ | 找不到 `npx` 命令 | 安装 [Node.js](https://nodejs.org/)(v18 或更高版本) |
233
+
234
+ ---
50
235
 
51
236
  ## 开发
52
237
 
53
238
  ```bash
54
- git clone https://github.com/chen201724/yuque-mcp-server.git
239
+ git clone https://github.com/yuque/yuque-mcp-server.git
55
240
  cd yuque-mcp-server
56
241
  npm install
57
- npm test # 运行测试(57 个测试用例)
242
+ npm test # 运行测试
58
243
  npm run build # 编译 TypeScript
59
- npm run dev # 开发模式
244
+ npm run dev # 开发模式(热重载)
60
245
  ```
61
246
 
62
- ## 许可证
63
-
64
- [MIT](./LICENSE)
247
+ ---
65
248
 
66
249
  ## 链接
67
250
 
68
- - [官网](https://chen201724.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,12 +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_TOKEN || process.argv.find((arg) => arg.startsWith('--token='))?.split('=')[1];
4
- if (!token) {
5
- console.error('Error: YUQUE_TOKEN environment variable or --token argument is required');
6
- 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
+ });
7
51
  }
8
- runStdioServer(token).catch((error) => {
9
- console.error('Fatal error:', error);
10
- process.exit(1);
11
- });
12
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,GAAG,OAAO,CAAC,GAAG,CAAC,WAAW,IAAI,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;AAE/G,IAAI,CAAC,KAAK,EAAE,CAAC;IACX,OAAO,CAAC,KAAK,CAAC,yEAAyE,CAAC,CAAC;IACzF,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"}
package/dist/index.js CHANGED
@@ -2,9 +2,9 @@ import { createServer as createMCPServer } from './server.js';
2
2
  import { StreamableHTTPServerTransport } from '@modelcontextprotocol/sdk/server/streamableHttp.js';
3
3
  import { createServer } from 'node:http';
4
4
  import { randomUUID } from 'node:crypto';
5
- const token = process.env.YUQUE_TOKEN;
5
+ const token = process.env.YUQUE_PERSONAL_TOKEN || process.env.YUQUE_GROUP_TOKEN || process.env.YUQUE_TOKEN;
6
6
  if (!token) {
7
- console.error('Error: YUQUE_TOKEN environment variable is required');
7
+ console.error('Error: YUQUE_PERSONAL_TOKEN, YUQUE_GROUP_TOKEN, or YUQUE_TOKEN environment variable is required');
8
8
  process.exit(1);
9
9
  }
10
10
  const mcpServer = createMCPServer(token);
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,IAAI,eAAe,EAAE,MAAM,aAAa,CAAC;AAC9D,OAAO,EAAE,6BAA6B,EAAE,MAAM,oDAAoD,CAAC;AACnG,OAAO,EAAE,YAAY,EAAE,MAAM,WAAW,CAAC;AACzC,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAEzC,MAAM,KAAK,GAAG,OAAO,CAAC,GAAG,CAAC,WAAW,CAAC;AAEtC,IAAI,CAAC,KAAK,EAAE,CAAC;IACX,OAAO,CAAC,KAAK,CAAC,qDAAqD,CAAC,CAAC;IACrE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC;AAED,MAAM,SAAS,GAAG,eAAe,CAAC,KAAK,CAAC,CAAC;AACzC,MAAM,SAAS,GAAG,IAAI,6BAA6B,CAAC;IAClD,kBAAkB,EAAE,GAAG,EAAE,CAAC,UAAU,EAAE;CACvC,CAAC,CAAC;AAEH,SAAS,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE;IACrC,MAAM,IAAI,GAAG,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC;IAC9C,MAAM,UAAU,GAAG,YAAY,CAAC,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE;QAC3C,SAAS,CAAC,aAAa,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE,EAAE;YAChD,OAAO,CAAC,KAAK,CAAC,yBAAyB,EAAE,KAAK,CAAC,CAAC;YAChD,GAAG,CAAC,UAAU,GAAG,GAAG,CAAC;YACrB,GAAG,CAAC,GAAG,CAAC,uBAAuB,CAAC,CAAC;QACnC,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,UAAU,CAAC,MAAM,CAAC,IAAI,EAAE,GAAG,EAAE;QAC3B,OAAO,CAAC,GAAG,CAAC,gDAAgD,IAAI,EAAE,CAAC,CAAC;IACtE,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE,EAAE;IACjB,OAAO,CAAC,KAAK,CAAC,yBAAyB,EAAE,KAAK,CAAC,CAAC;IAChD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC,CAAC,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,IAAI,eAAe,EAAE,MAAM,aAAa,CAAC;AAC9D,OAAO,EAAE,6BAA6B,EAAE,MAAM,oDAAoD,CAAC;AACnG,OAAO,EAAE,YAAY,EAAE,MAAM,WAAW,CAAC;AACzC,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAEzC,MAAM,KAAK,GAAG,OAAO,CAAC,GAAG,CAAC,oBAAoB,IAAI,OAAO,CAAC,GAAG,CAAC,iBAAiB,IAAI,OAAO,CAAC,GAAG,CAAC,WAAW,CAAC;AAE3G,IAAI,CAAC,KAAK,EAAE,CAAC;IACX,OAAO,CAAC,KAAK,CAAC,iGAAiG,CAAC,CAAC;IACjH,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC;AAED,MAAM,SAAS,GAAG,eAAe,CAAC,KAAK,CAAC,CAAC;AACzC,MAAM,SAAS,GAAG,IAAI,6BAA6B,CAAC;IAClD,kBAAkB,EAAE,GAAG,EAAE,CAAC,UAAU,EAAE;CACvC,CAAC,CAAC;AAEH,SAAS,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE;IACrC,MAAM,IAAI,GAAG,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC;IAC9C,MAAM,UAAU,GAAG,YAAY,CAAC,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE;QAC3C,SAAS,CAAC,aAAa,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE,EAAE;YAChD,OAAO,CAAC,KAAK,CAAC,yBAAyB,EAAE,KAAK,CAAC,CAAC;YAChD,GAAG,CAAC,UAAU,GAAG,GAAG,CAAC;YACrB,GAAG,CAAC,GAAG,CAAC,uBAAuB,CAAC,CAAC;QACnC,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,UAAU,CAAC,MAAM,CAAC,IAAI,EAAE,GAAG,EAAE;QAC3B,OAAO,CAAC,GAAG,CAAC,gDAAgD,IAAI,EAAE,CAAC,CAAC;IACtE,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE,EAAE;IACjB,OAAO,CAAC,KAAK,CAAC,yBAAyB,EAAE,KAAK,CAAC,CAAC;IAChD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC,CAAC,CAAC"}
@@ -12,7 +12,7 @@ export class YuqueError extends Error {
12
12
  function statusHint(status) {
13
13
  switch (status) {
14
14
  case 400: return 'Bad request — check the parameters';
15
- case 401: return 'Unauthorized — the YUQUE_TOKEN may be invalid or expired';
15
+ case 401: return 'Unauthorized — the API token (YUQUE_PERSONAL_TOKEN, YUQUE_GROUP_TOKEN, or YUQUE_TOKEN) may be invalid or expired';
16
16
  case 403: return 'Forbidden — insufficient permissions for this resource';
17
17
  case 404: return 'Not found — the resource does not exist or is not accessible';
18
18
  case 429: return 'Rate limited — too many requests, try again later';
@@ -1 +1 @@
1
- {"version":3,"file":"error.js","sourceRoot":"","sources":["../../src/utils/error.ts"],"names":[],"mappings":"AAAA,MAAM,OAAO,UAAW,SAAQ,KAAK;IAG1B;IACA;IAHT,YACE,OAAe,EACR,UAAmB,EACnB,aAAuB;QAE9B,KAAK,CAAC,OAAO,CAAC,CAAC;QAHR,eAAU,GAAV,UAAU,CAAS;QACnB,kBAAa,GAAb,aAAa,CAAU;QAG9B,IAAI,CAAC,IAAI,GAAG,YAAY,CAAC;IAC3B,CAAC;CACF;AAED,sFAAsF;AACtF,SAAS,UAAU,CAAC,MAAc;IAChC,QAAQ,MAAM,EAAE,CAAC;QACf,KAAK,GAAG,CAAC,CAAC,OAAO,oCAAoC,CAAC;QACtD,KAAK,GAAG,CAAC,CAAC,OAAO,0DAA0D,CAAC;QAC5E,KAAK,GAAG,CAAC,CAAC,OAAO,wDAAwD,CAAC;QAC1E,KAAK,GAAG,CAAC,CAAC,OAAO,8DAA8D,CAAC;QAChF,KAAK,GAAG,CAAC,CAAC,OAAO,mDAAmD,CAAC;QACrE,OAAO,CAAC,CAAE,OAAO,MAAM,IAAI,GAAG,CAAC,CAAC,CAAC,sCAAsC,CAAC,CAAC,CAAC,EAAE,CAAC;IAC/E,CAAC;AACH,CAAC;AAED,MAAM,UAAU,gBAAgB,CAAC,KAAc;IAC7C,IAAI,KAAK,YAAY,UAAU,EAAE,CAAC;QAChC,MAAM,KAAK,CAAC;IACd,CAAC;IAED,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,EAAE,CAAC;QAChD,MAAM,GAAG,GAAG,KAA0F,CAAC;QAEvG,IAAI,GAAG,CAAC,QAAQ,EAAE,CAAC;YACjB,MAAM,MAAM,GAAG,GAAG,CAAC,QAAQ,CAAC,MAAM,CAAC;YACnC,MAAM,UAAU,GAAG,GAAG,CAAC,QAAQ,CAAC,IAAI,EAAE,OAAO,IAAI,GAAG,CAAC,OAAO,IAAI,yBAAyB,CAAC;YAC1F,MAAM,IAAI,GAAG,MAAM,CAAC,CAAC,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;YAC9C,MAAM,OAAO,GAAG,IAAI,CAAC,CAAC,CAAC,GAAG,UAAU,KAAK,IAAI,GAAG,CAAC,CAAC,CAAC,UAAU,CAAC;YAC9D,MAAM,IAAI,UAAU,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,CAAC,CAAC;QAC/C,CAAC;QAED,IAAI,GAAG,CAAC,OAAO,EAAE,CAAC;YAChB,MAAM,IAAI,UAAU,CAAC,GAAG,CAAC,OAAO,EAAE,SAAS,EAAE,KAAK,CAAC,CAAC;QACtD,CAAC;IACH,CAAC;IAED,MAAM,IAAI,UAAU,CAAC,wBAAwB,EAAE,SAAS,EAAE,KAAK,CAAC,CAAC;AACnE,CAAC"}
1
+ {"version":3,"file":"error.js","sourceRoot":"","sources":["../../src/utils/error.ts"],"names":[],"mappings":"AAAA,MAAM,OAAO,UAAW,SAAQ,KAAK;IAG1B;IACA;IAHT,YACE,OAAe,EACR,UAAmB,EACnB,aAAuB;QAE9B,KAAK,CAAC,OAAO,CAAC,CAAC;QAHR,eAAU,GAAV,UAAU,CAAS;QACnB,kBAAa,GAAb,aAAa,CAAU;QAG9B,IAAI,CAAC,IAAI,GAAG,YAAY,CAAC;IAC3B,CAAC;CACF;AAED,sFAAsF;AACtF,SAAS,UAAU,CAAC,MAAc;IAChC,QAAQ,MAAM,EAAE,CAAC;QACf,KAAK,GAAG,CAAC,CAAC,OAAO,oCAAoC,CAAC;QACtD,KAAK,GAAG,CAAC,CAAC,OAAO,kHAAkH,CAAC;QACpI,KAAK,GAAG,CAAC,CAAC,OAAO,wDAAwD,CAAC;QAC1E,KAAK,GAAG,CAAC,CAAC,OAAO,8DAA8D,CAAC;QAChF,KAAK,GAAG,CAAC,CAAC,OAAO,mDAAmD,CAAC;QACrE,OAAO,CAAC,CAAE,OAAO,MAAM,IAAI,GAAG,CAAC,CAAC,CAAC,sCAAsC,CAAC,CAAC,CAAC,EAAE,CAAC;IAC/E,CAAC;AACH,CAAC;AAED,MAAM,UAAU,gBAAgB,CAAC,KAAc;IAC7C,IAAI,KAAK,YAAY,UAAU,EAAE,CAAC;QAChC,MAAM,KAAK,CAAC;IACd,CAAC;IAED,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,EAAE,CAAC;QAChD,MAAM,GAAG,GAAG,KAA0F,CAAC;QAEvG,IAAI,GAAG,CAAC,QAAQ,EAAE,CAAC;YACjB,MAAM,MAAM,GAAG,GAAG,CAAC,QAAQ,CAAC,MAAM,CAAC;YACnC,MAAM,UAAU,GAAG,GAAG,CAAC,QAAQ,CAAC,IAAI,EAAE,OAAO,IAAI,GAAG,CAAC,OAAO,IAAI,yBAAyB,CAAC;YAC1F,MAAM,IAAI,GAAG,MAAM,CAAC,CAAC,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;YAC9C,MAAM,OAAO,GAAG,IAAI,CAAC,CAAC,CAAC,GAAG,UAAU,KAAK,IAAI,GAAG,CAAC,CAAC,CAAC,UAAU,CAAC;YAC9D,MAAM,IAAI,UAAU,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,CAAC,CAAC;QAC/C,CAAC;QAED,IAAI,GAAG,CAAC,OAAO,EAAE,CAAC;YAChB,MAAM,IAAI,UAAU,CAAC,GAAG,CAAC,OAAO,EAAE,SAAS,EAAE,KAAK,CAAC,CAAC;QACtD,CAAC;IACH,CAAC;IAED,MAAM,IAAI,UAAU,CAAC,wBAAwB,EAAE,SAAS,EAAE,KAAK,CAAC,CAAC;AACnE,CAAC"}
package/package.json CHANGED
@@ -1,7 +1,8 @@
1
1
  {
2
2
  "name": "yuque-mcp",
3
- "version": "0.1.3",
3
+ "version": "0.1.5",
4
4
  "description": "MCP server for Yuque (语雀) — expose Yuque knowledge base to AI assistants via Model Context Protocol",
5
+ "mcpName": "io.github.yuque/yuque-mcp",
5
6
  "type": "module",
6
7
  "main": "dist/cli.js",
7
8
  "bin": {
@@ -36,16 +37,16 @@
36
37
  "claude",
37
38
  "cursor"
38
39
  ],
39
- "author": "chen201724",
40
+ "author": "yuque",
40
41
  "license": "MIT",
41
42
  "repository": {
42
43
  "type": "git",
43
- "url": "https://github.com/chen201724/yuque-mcp-server.git"
44
+ "url": "https://github.com/yuque/yuque-mcp-server.git"
44
45
  },
45
46
  "bugs": {
46
- "url": "https://github.com/chen201724/yuque-mcp-server/issues"
47
+ "url": "https://github.com/yuque/yuque-mcp-server/issues"
47
48
  },
48
- "homepage": "https://github.com/chen201724/yuque-mcp-server#readme",
49
+ "homepage": "https://github.com/yuque/yuque-mcp-server#readme",
49
50
  "engines": {
50
51
  "node": ">=18.0.0"
51
52
  },