Skip to main content
Glama
README.md
# Yuque MCP Server

语雀(Yuque)文档 Model Context Protocol (MCP) 服务器,提供文档搜索、目录浏览、内容获取和文档创建功能。

## 功能

- **search**: 搜索语雀文档
- **get_doc**: 获取文档详细内容
- **get_toc**: 获取知识库目录结构
- **create_doc**: 创建新文档
- **update_doc**: 更新现有文档

## 安装

```bash
npm install
```

## 构建

```bash
git clone https://github.com/wangx-wx/yuque-mcp.git
cd yuque-mcp
npm install
npm run build
```

## MCP 配置

在 Claude Desktop 配置文件中添加:

### macOS
`~/Library/Application Support/Claude/claude_desktop_config.json`

### Windows
`%APPDATA%\Claude\claude_desktop_config.json`

配置内容:

```json
{
  "mcpServers": {
    "yuque": {
      "command": "node",
      "args": ["E:\\node\\yuque-mcp\\dist\\index.js"],
      "env": {
        "YUQUE_AUTH_TOKEN": "your-auth-token-here",
        "YUQUE_BASE_URL": "https://www.yuque.com",
        "YUQUE_GROUP_LOGIN": "your-group-login",
        "YUQUE_BOOK_SLUG": "your-book-slug"
      }
    }
  }
}
```


### CLI 配置
```sh
claude mcp add yuque-mcp-asd \
		--scope project \
		--transport stdio \
		-- node "/path/yuque-mcp/dist/index.js" \
		--env YUQUE_AUTH_TOKEN=your-auth-token-here \
		--env YUQUE_BASE_URL=https://www.leyaoyao.yuque.com \
		--env YUQUE_GROUP_LOGIN=your-group-login \
		--env YUQUE_BOOK_SLUG=your-book-slug
```

```powershell
claude mcp add yuque-mcp-asd `
		--scope project `
		--transport stdio `
		-- node "D:/yuque-mcp/dist/index.js" `
		--env YUQUE_AUTH_TOKEN=your-auth-token-here `
		--env YUQUE_BASE_URL=https://www.leyaoyao.yuque.com `
		--env YUQUE_GROUP_LOGIN=your-group-login `
		--env YUQUE_BOOK_SLUG=your-book-slug
```
## 工具说明

### search

搜索语雀文档。

**参数:**

| 参数 | 类型 | 必填 | 说明 |
|------|------|------|------|
| q | string | 是 | 搜索关键词 |

**使用场景:** 用户想查找特定内容的文档

**示例:**
```
搜索关键词 "TypeScript" 的文档
```

### get_toc

获取知识库目录结构。

**参数:** 无(从环境变量读取知识库配置)

**使用场景:** 用户想浏览目录或导航文件夹结构

**返回:** 扁平化的目录项列表,包含 uuid 和 title

**示例:**
```
查看知识库的目录结构
```

### get_doc

获取指定文档的详细内容。

**参数:**

| 参数 | 类型 | 必填 | 说明 |
|------|------|------|------|
| doc_id | number | 是 | 文档 ID |

**使用场景:** 已有文档 ID,需要读取完整文档内容

**示例:**
```
获取文档 123456 的详细内容
```

### create_doc

创建新文档并添加到目录结构中。

**参数:**

| 参数 | 类型 | 必填 | 说明 |
|------|------|------|------|
| title | string | 是 | 文档标题 |
| content | string | 是 | 文档内容(Markdown 格式) |
| target_uuid | string | 否 | 目标节点 UUID(通过 get_toc 获取)。不填则添加到根节点 |
| action_mode | string | 否 | 插入模式:`child`(子级,默认)或 `sibling`(同级) |

**使用场景:** 用户想创建新文档

**返回:** 文档 ID、标题和访问 URL

**示例:**
```
创建标题为 "部署指南" 的文档,内容为 "# 部署\n\n..."
```

### update_doc

更新现有文档的标题、内容或路径。

**参数:**

| 参数 | 类型 | 必填 | 说明 |
|------|------|------|------|
| doc_id | string | 是 | 文档 ID 或路径 |
| title | string | 否 | 新文档标题 |
| content | string | 否 | 文档内容(Markdown 格式)|
| slug | string | 否 | 新文档路径 |

**使用场景:** 修改已有文档的内容或标题

**返回:** 文档 ID、标题、路径、访问 URL 和更新时间

**示例:**
```
更新文档 abc123,将标题改为 "新标题",内容改为 "# 新内容"
```

## 项目结构

```
yuque-mcp/
├── src/
│   ├── config/
│   │   └── env.ts          # 环境变量配置
│   ├── models/
│   │   ├── types.ts        # TypeScript 类型定义
│   │   └── responses.ts    # 响应转换器
│   ├── api/
│   │   ├── client.ts       # HTTP 客户端
│   │   └── yuque-api.ts    # 语雀 API 封装
│   ├── tools/
│   │   ├── search.ts       # search 工具实现
│   │   ├── get-doc.ts      # get_doc 工具实现
│   │   ├── get-toc.ts      # get_toc 工具实现
│   │   ├── create-doc.ts   # create_doc 工具实现
│   │   └── update-doc.ts   # update_doc 工具实现
│   ├── server.ts           # MCP 服务器配置
│   └── index.ts            # 入口文件
├── package.json
├── tsconfig.json
└── README.md
```

## 使用示例

### 搜索文档

```
帮我搜索关于 "TypeScript" 的语雀文档
```

### 浏览目录

```
查看知识库的目录结构
```


### 创建文档

```
创建一个新文档,标题是 "部署指南",内容如下:
# 部署指南

## 环境准备
- Node.js 18+
- MySQL 8.0

## 部署步骤
...
```

### 更新文档

```
更新文档 123456,标题改为 "部署指南 v2",内容添加 "## 更新日志\n\n- 2024-01-01: 初始版本"
```

### 组合使用

```
先查看目录,找到 "技术文档" 分类的 uuid,然后在该分类下创建一个新文档
```

## 许可证

MIT

## 参考文档

- [语雀 API 文档](https://www.yuque.com/yuque/developer/api)
- [Model Context Protocol](https://modelcontextprotocol.io/)
- [MCP TypeScript SDK](https://github.com/modelcontextprotocol/typescript-sdk)

TDQS

B3.1/5.0

Scored across 2 tools

Disambiguation5/5

The two tools have clearly distinct purposes: get_doc retrieves a specific document by ID, while search finds documents by keywords. There is no overlap or ambiguity between these operations.

Naming Consistency5/5

Both tools follow a consistent verb_noun pattern (get_doc, search). The naming is straightforward and predictable, with no deviations in style.

Tool Count2/5

With only 2 tools, the server feels thin for a document management domain. While get and search are essential, there are obvious gaps like create, update, delete, or list operations that would be expected for a complete Yuque integration.

Completeness2/5

The tool surface is severely incomplete for a Yuque document server. It lacks basic CRUD operations (create, update, delete), listing capabilities, and other domain-specific functions like managing repositories or users, leaving agents unable to perform full document workflows.

Maintenance

ActivityInactive
ResponsivenessNo issues