yuque-mcp
by k187401
README.md
# 语雀 MCP Server(本地版 · 双认证模式)
一个用 Python 编写的本地 MCP server,让 AI 客户端(ZCode)可以直接读写你的语雀文档。
## 认证方式(按优先级自动选择)
| 模式 | 环境变量 | 要求 | 接口 |
|------|---------|------|------|
| 官方 OpenAPI | `YUQUE_TOKEN` | **需超级会员** | `/api/v2/...` |
| 网页端 Cookie | `YUQUE_COOKIE` | **免费,任何用户可用** | `/api/...`(内部接口) |
## 它能做什么(6 个工具)
| 工具 | 功能 |
|------|------|
| `get_user` | 获取当前账号信息(验证凭证是否有效) |
| `list_repos` | 列出当前账号的知识库 |
| `list_docs` | 列出知识库里的文档 |
| `create_doc` | 创建文档(Markdown 正文) |
| `get_doc` | 获取文档内容 |
| `update_doc` | 更新文档标题/正文 |
## 一、免费方式:获取 Cookie(不需要超级会员)
1. 用 Chrome/Edge **登录**语雀网页版(https://www.yuque.com)
2. 按 **F12** 打开开发者工具 → 切到 **Network(网络)** 标签
3. **刷新页面**,点击任意一个请求
4. 在右侧 **Request Headers** 里找到 `Cookie:` 开头的整段内容(很长的一串)
5. **整段复制**(含 `_yuque_session=...` 和 `yuque_ctoken=...`)
> ⚠️ 一定包含 `yuque_ctoken`,它是写操作(创建/更新文档)要用的 CSRF 令牌。
> Cookie 有效期约 2 周,过期后在 Settings → MCP 里重新粘贴即可。
## 二、把凭证填进 ZCode
ZCode → **Settings → MCP** → 找到 `yuque` → 在环境变量里粘贴:
- `YUQUE_COOKIE`:粘贴上一步复制的整段 Cookie 值(免费路线,推荐)
> ⚠️ Cookie 等于你的登录态,别贴到聊天框、别提交进 git、别发给任何人。
## 三、重启 ZCode
配置修改后**重启 ZCode**(新会话自动连接),在 **Settings → MCP** 确认 `yuque` 已连接。
之后说一句「把 XXX 写成语雀文档」即可。
## 手动验证(可选)
```bash
pip install "mcp>=1.2.0,<2" # mcp 2.x 移除了 FastMCP,必须锁 1.x
python test_client.py # 协议自测:握手 → 列工具 → 两种认证模式链路
```
## 文件说明
- `server.py` — MCP server 本体(双认证模式,`@mcp.tool()` 注册工具,stdio 传输)
- `test_client.py` — 模拟 MCP 客户端的自测脚本(3 组用例)
- `requirements.txt` — 依赖(mcp 1.x)
## 踩坑记录(学习笔记)
1. **mcp 2.0.0 移除了 FastMCP**:`pip install mcp` 默认装 2.x 会报
`ModuleNotFoundError: No module named 'mcp.server.fastmcp'`,必须锁 `mcp>=1.2,<2`。
2. **Windows 下 spawn 进程要用绝对路径**:`command` 填 `python.exe` 完整路径,别写 `python`。
3. **语雀 OpenAPI 令牌是超级会员专享**(2022 年后的策略):免费用户改用网页端内部接口
+ cookie 认证。**实测可用的端点**(cookie 模式):
- `GET /api/mine`(用户)、`GET /api/mine/books`(知识库)、
`GET /api/docs/{slug}?book_id=...&mode=markdown`(文档,正文在 `sourcecode` 字段)
- **创建文档:`POST /api/docs`**(JSON 体:`book_id/title/format/body/body_draft/public`)
- **更新文档:`PUT /api/docs/{id}/content` 再 `PUT /api/docs/{id}/publish`**(先写草稿后发布)
4. **cookie 模式写操作三要素**:`yuque_ctoken` 同时作为 cookie 和 `X-CSRF-Token` 请求头;
请求头必须带 `X-Requested-With: XMLHttpRequest`;请求体是 **JSON**(不是表单),
且要带 `Referer: https://www.yuque.com/{login}/{book_slug}`。
5. **网页端接口是非公开的**:语雀改版可能需要适配;这是社区方案(elog、
yuque-cookie-plugin 等)都在用的路线。第一次写 404 很正常——先抓真实源码,
别猜端点。
This server cannot be deployed
Maintenance
ActivitySlowing
ResponsivenessNo issues