yuque-ai-mcp 2.7.4 → 2.7.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 +192 -0
- package/README_CN.md +191 -0
- package/SKILL.md +180 -0
- package/dist/common/config.d.ts +26 -0
- package/dist/common/config.js +6 -5
- package/dist/common/config.js.map +1 -1
- package/dist/crawler/save.js +1 -1
- package/dist/crawler/save.js.map +1 -1
- package/dist/crawler/schedule.js +1 -1
- package/dist/crawler/schedule.js.map +1 -1
- package/dist/kv/common.d.ts +1 -1
- package/dist/kv/common.js +1 -1
- package/dist/kv/delete.js +1 -1
- package/dist/kv/delete.js.map +1 -1
- package/dist/kv/get.js +1 -1
- package/dist/kv/get.js.map +1 -1
- package/dist/kv/set.js +1 -1
- package/dist/kv/set.js.map +1 -1
- package/dist/rss/dedup.d.ts +1 -1
- package/dist/rss/dedup.js +11 -8
- package/dist/rss/dedup.js.map +1 -1
- package/dist/rss/fetch-feed.js +6 -6
- package/dist/rss/fetch-feed.js.map +1 -1
- package/dist/rss/list-sources.js +2 -2
- package/dist/rss/list-sources.js.map +1 -1
- package/dist/rss/schedule.js +3 -3
- package/dist/rss/schedule.js.map +1 -1
- package/dist/rss/sources.d.ts +9 -17
- package/dist/rss/sources.js +8 -50
- package/dist/rss/sources.js.map +1 -1
- package/package.json +2 -2
package/README.md
ADDED
|
@@ -0,0 +1,192 @@
|
|
|
1
|
+
<p align="center">
|
|
2
|
+
<img src="https://cdn.nlark.com/yuque/0/2025/png/25689388/1749661212345-avatar/8a3b5c7d-1e2f-4a5b-9c7d-8e1f2a3b4c5d.png" width="120" alt="yuque-ai-mcp" />
|
|
3
|
+
</p>
|
|
4
|
+
|
|
5
|
+
<h1 align="center">yuque-ai-mcp</h1>
|
|
6
|
+
<p align="center">
|
|
7
|
+
<b>61 fine-grained MCP tools for the full Yuque OpenAPI</b>
|
|
8
|
+
</p>
|
|
9
|
+
|
|
10
|
+
<p align="center">
|
|
11
|
+
<a href="https://github.com/yehuoshun/yuque-ai-mcp"><img src="https://img.shields.io/badge/version-2.7.4-blue" alt="version" /></a>
|
|
12
|
+
<a href="LICENSE"><img src="https://img.shields.io/badge/license-MIT-green" alt="license" /></a>
|
|
13
|
+
<a href="https://github.com/yehuoshun/yuque-ai-skills"><img src="https://img.shields.io/badge/skills-61%20guides-orange" alt="skills" /></a>
|
|
14
|
+
</p>
|
|
15
|
+
|
|
16
|
+
<p align="center">
|
|
17
|
+
<a href="README_CN.md">中文文档</a>
|
|
18
|
+
</p>
|
|
19
|
+
|
|
20
|
+
---
|
|
21
|
+
|
|
22
|
+
A full-featured Yuque (语雀) MCP Server built on the [Model Context Protocol](https://modelcontextprotocol.io/). Provides 61 fine-grained tools across 15 domains — every Yuque OpenAPI endpoint as a dedicated tool.
|
|
23
|
+
|
|
24
|
+
## Why
|
|
25
|
+
|
|
26
|
+
- **19 → 61 tools** — 3x more coverage than the official [yuque-mcp-server](https://github.com/yuque/yuque-mcp-server)
|
|
27
|
+
- **Dual transport** — stdio + HTTP SSE, shared registry, zero downtime on reload
|
|
28
|
+
- **Modular architecture** — 15 domains, barrel exports, single source of truth registry
|
|
29
|
+
- **Full API coverage** — group, recycle, upload, statistics, versions, boards — all the missing pieces
|
|
30
|
+
- **[Skill layer](https://github.com/yehuoshun/yuque-ai-skills)** — 61 usage guides for AI agents
|
|
31
|
+
|
|
32
|
+
## Table of Contents
|
|
33
|
+
|
|
34
|
+
- [Quick Start](#quick-start)
|
|
35
|
+
- [Tool Overview](#tool-overview)
|
|
36
|
+
- [Architecture](#architecture)
|
|
37
|
+
- [Configuration](#configuration)
|
|
38
|
+
- [Error Handling](#error-handling)
|
|
39
|
+
- [Contributing](#contributing)
|
|
40
|
+
- [License](#license)
|
|
41
|
+
|
|
42
|
+
## Quick Start
|
|
43
|
+
|
|
44
|
+
```bash
|
|
45
|
+
cd server
|
|
46
|
+
npm install
|
|
47
|
+
npm run build
|
|
48
|
+
|
|
49
|
+
# Copy config template
|
|
50
|
+
cp config/config.example.json config/config.json
|
|
51
|
+
# Edit config.json with your Yuque API token
|
|
52
|
+
|
|
53
|
+
# Run
|
|
54
|
+
npm start # stdio mode
|
|
55
|
+
npm run dev:http # HTTP SSE mode (http://localhost:3099)
|
|
56
|
+
```
|
|
57
|
+
|
|
58
|
+
> **Note**: `npm run dev:http` uses `tsx` for hot-reload during development.
|
|
59
|
+
|
|
60
|
+
## Tool Overview
|
|
61
|
+
|
|
62
|
+
| Domain | Tools | Highlights |
|
|
63
|
+
|--------|-------|------------|
|
|
64
|
+
| **doc** | 14 | CRUD, versions, diff, batch get, import URL/file, cross-book copy, export |
|
|
65
|
+
| **repo** | 8 | CRUD, batch get, cross-book copy, full export (TOC-structure + INDEX/GRAPH) |
|
|
66
|
+
| **toc** | 3 | Get, update, batch update (createTitle/appendNode/removeNode/moveNode) |
|
|
67
|
+
| **search** | 2 | General search + RAG-enhanced search |
|
|
68
|
+
| **user** | 3 | User info, heartbeat, group list |
|
|
69
|
+
| **group** | 3 | Member list, role change, delete member |
|
|
70
|
+
| **statistic** | 4 | Group/member/repo/doc statistics |
|
|
71
|
+
| **note** | 4 | CRUD + soft-delete/restore |
|
|
72
|
+
| **recycle** | 3 | List, restore, destroy (Cookie auth) |
|
|
73
|
+
| **upload** | 1 | File upload to Yuque CDN (Cookie auth) |
|
|
74
|
+
| **board** | 3 | Mindmap, flowchart, architecture diagram |
|
|
75
|
+
| **mine** | 2 | Book stacks, editor center (Cookie auth) |
|
|
76
|
+
| **rss** | 3 | Source list, fetch + dedup + save, schedule analysis |
|
|
77
|
+
| **crawler** | 4 | Fetch, CSS extract, dedup save, schedule analysis |
|
|
78
|
+
| **kv** | 4 | Get, set, delete, list — incremental sharding, 250KB/doc limit |
|
|
79
|
+
| **Total** | **61** | |
|
|
80
|
+
|
|
81
|
+
See [SKILL.md](SKILL.md) or [yuque-ai-skills](https://github.com/yehuoshun/yuque-ai-skills) for full tool documentation.
|
|
82
|
+
|
|
83
|
+
## vs Official
|
|
84
|
+
|
|
85
|
+
| Feature | Official yuque-mcp-server | yuque-ai-mcp |
|
|
86
|
+
|---------|--------------------------|--------------|
|
|
87
|
+
| Tools | 19 | **61** |
|
|
88
|
+
| Granularity | Coarse | **Fine-grained** (1 tool / endpoint) |
|
|
89
|
+
| Group, Recycle, Upload, Statistics | ❌ | ✅ |
|
|
90
|
+
| Versions, Diff, Cross-book Copy | ❌ | ✅ |
|
|
91
|
+
| Transport | stdio only | **stdio + HTTP SSE** |
|
|
92
|
+
| Config | Env var | **config.json** (token + cookie) |
|
|
93
|
+
| Skill Layer | ❌ | ✅ 61 guides |
|
|
94
|
+
|
|
95
|
+
## Architecture
|
|
96
|
+
|
|
97
|
+
```
|
|
98
|
+
server/src/
|
|
99
|
+
├── common/ # Shared: config, errors, types, format, validate,
|
|
100
|
+
│ # api-client, web-request, register-tools, copy/export/schedule common,
|
|
101
|
+
│ # repo-capacity (auto-expand), toc-cache (24h TTL), text-utils
|
|
102
|
+
├── user/ search/ group/ doc/ toc/ repo/ statistic/
|
|
103
|
+
├── note/ recycle/ upload/ board/ rss/ crawler/ mine/ kv/
|
|
104
|
+
├── index.ts # stdio entry
|
|
105
|
+
└── http.ts # HTTP SSE entry (port 3099)
|
|
106
|
+
```
|
|
107
|
+
|
|
108
|
+
## Configuration
|
|
109
|
+
|
|
110
|
+
```json
|
|
111
|
+
{
|
|
112
|
+
"token": "Your Yuque API Token",
|
|
113
|
+
"api_base": "https://www.yuque.com/api/v2",
|
|
114
|
+
"cookie": "Optional, for recycle/upload features",
|
|
115
|
+
"ctoken": "Optional, extracted from Cookie",
|
|
116
|
+
"kv": { "enabled": true },
|
|
117
|
+
"rss": {
|
|
118
|
+
"enabled": true,
|
|
119
|
+
"sources": {
|
|
120
|
+
"cnblogs": {
|
|
121
|
+
"name": "博客园",
|
|
122
|
+
"slug_pattern": "/p/(\\d+)",
|
|
123
|
+
"feeds": {
|
|
124
|
+
"sitehome": { "label": "首页", "url": "https://feed.cnblogs.com/blog/sitehome/rss" }
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
},
|
|
128
|
+
"namespaces": {
|
|
129
|
+
"cnblogs": {
|
|
130
|
+
"book_id": [80197497],
|
|
131
|
+
"kv_slugs": ["80197550/274164064"],
|
|
132
|
+
"schedule_slugs": []
|
|
133
|
+
}
|
|
134
|
+
}
|
|
135
|
+
},
|
|
136
|
+
"crawler": {
|
|
137
|
+
"enabled": true,
|
|
138
|
+
"namespaces": {
|
|
139
|
+
"my-source": {
|
|
140
|
+
"book_id": [80197497],
|
|
141
|
+
"kv_slugs": ["80197550/274164064"],
|
|
142
|
+
"schedule_slugs": []
|
|
143
|
+
}
|
|
144
|
+
}
|
|
145
|
+
}
|
|
146
|
+
}
|
|
147
|
+
```
|
|
148
|
+
|
|
149
|
+
- `book_id`: Target repo ID array — last element is the active repo. Auto-expands when full (5000 docs).
|
|
150
|
+
- `kv_slugs`: KV dedup shard docs (`{book_id}/{doc_id}` format)
|
|
151
|
+
- `schedule_slugs`: Schedule config docs
|
|
152
|
+
|
|
153
|
+
## Error Handling
|
|
154
|
+
|
|
155
|
+
Unified error handling with structured responses (HTTP status + message + response summary). All tools share the same error pipeline.
|
|
156
|
+
|
|
157
|
+
Key errors:
|
|
158
|
+
- `book_full` — Auto-expands by creating a new repo and appending to the `book_id` array
|
|
159
|
+
- `401` / `403` — Token/permission issues
|
|
160
|
+
- `429` — Rate limit with automatic retry
|
|
161
|
+
|
|
162
|
+
See [references/api/errors.md](references/api/errors.md) for the full error code reference.
|
|
163
|
+
|
|
164
|
+
## Contributing
|
|
165
|
+
|
|
166
|
+
```bash
|
|
167
|
+
git clone https://github.com/yehuoshun/yuque-ai-mcp.git
|
|
168
|
+
cd yuque-ai-mcp/server
|
|
169
|
+
npm install
|
|
170
|
+
npm run build
|
|
171
|
+
|
|
172
|
+
# New tool checklist:
|
|
173
|
+
# 1. Create server/src/{domain}/{tool}.ts
|
|
174
|
+
# 2. Export in {domain}/index.ts + append to tools array
|
|
175
|
+
# 3. npx tsc
|
|
176
|
+
# 4. Restart HTTP server + curl health
|
|
177
|
+
# 5. Sync yuque-ai-skills
|
|
178
|
+
# 6. Update README
|
|
179
|
+
```
|
|
180
|
+
|
|
181
|
+
Both [yuque-ai-mcp](https://github.com/yehuoshun/yuque-ai-mcp) and [yuque-ai-skills](https://github.com/yehuoshun/yuque-ai-skills) are kept in sync.
|
|
182
|
+
|
|
183
|
+
## Tech Stack
|
|
184
|
+
|
|
185
|
+
- TypeScript + Node.js
|
|
186
|
+
- @modelcontextprotocol/sdk v1.x
|
|
187
|
+
- Zod (validation)
|
|
188
|
+
- Yuque OpenAPI v2 / Web API
|
|
189
|
+
|
|
190
|
+
## License
|
|
191
|
+
|
|
192
|
+
MIT
|
package/README_CN.md
ADDED
|
@@ -0,0 +1,191 @@
|
|
|
1
|
+
<p align="center">
|
|
2
|
+
<h1 align="center">yuque-ai-mcp</h1>
|
|
3
|
+
<p align="center">
|
|
4
|
+
<b>61 个细粒度 MCP 工具,覆盖语雀 OpenAPI 全部能力</b>
|
|
5
|
+
</p>
|
|
6
|
+
</p>
|
|
7
|
+
|
|
8
|
+
<p align="center">
|
|
9
|
+
<a href="https://github.com/yehuoshun/yuque-ai-mcp"><img src="https://img.shields.io/badge/版本-2.7.4-blue" alt="version" /></a>
|
|
10
|
+
<a href="LICENSE"><img src="https://img.shields.io/badge/许可-MIT-green" alt="license" /></a>
|
|
11
|
+
<a href="https://github.com/yehuoshun/yuque-ai-skills"><img src="https://img.shields.io/badge/skills-61%20指导-orange" alt="skills" /></a>
|
|
12
|
+
</p>
|
|
13
|
+
|
|
14
|
+
<p align="center">
|
|
15
|
+
<a href="README.md">English</a>
|
|
16
|
+
</p>
|
|
17
|
+
|
|
18
|
+
---
|
|
19
|
+
|
|
20
|
+
基于 [Model Context Protocol](https://modelcontextprotocol.io/) 的语雀全功能 MCP Server。61 个工具,15 个域——每个语雀 OpenAPI 端点一个专用工具。
|
|
21
|
+
|
|
22
|
+
## 为什么选这个
|
|
23
|
+
|
|
24
|
+
- **19 → 61 工具** — 比官方 [yuque-mcp-server](https://github.com/yuque/yuque-mcp-server) 多 3 倍覆盖
|
|
25
|
+
- **双传输模式** — stdio + HTTP SSE,共享注册中心,修改无需重启
|
|
26
|
+
- **模块化架构** — 15 个域,barrel export,唯一注册中心
|
|
27
|
+
- **完整 API 覆盖** — 团队、回收站、上传、统计、版本、画板——补全官方缺失
|
|
28
|
+
- **[Skill 层](https://github.com/yehuoshun/yuque-ai-skills)** — 61 个 AI Agent 使用指导
|
|
29
|
+
|
|
30
|
+
## 目录
|
|
31
|
+
|
|
32
|
+
- [快速开始](#快速开始)
|
|
33
|
+
- [工具概览](#工具概览)
|
|
34
|
+
- [与官方对比](#与官方对比)
|
|
35
|
+
- [架构](#架构)
|
|
36
|
+
- [配置](#配置)
|
|
37
|
+
- [错误处理](#错误处理)
|
|
38
|
+
- [贡献](#贡献)
|
|
39
|
+
- [许可](#许可)
|
|
40
|
+
|
|
41
|
+
## 快速开始
|
|
42
|
+
|
|
43
|
+
```bash
|
|
44
|
+
cd server
|
|
45
|
+
npm install
|
|
46
|
+
npm run build
|
|
47
|
+
|
|
48
|
+
# 复制配置模板
|
|
49
|
+
cp config/config.example.json config/config.json
|
|
50
|
+
# 编辑 config.json 填入你的语雀 API Token
|
|
51
|
+
|
|
52
|
+
# 运行
|
|
53
|
+
npm start # stdio 模式
|
|
54
|
+
npm run dev:http # HTTP SSE 模式 (http://localhost:3099)
|
|
55
|
+
```
|
|
56
|
+
|
|
57
|
+
> 开发时用 `npm run dev:http` 启动 `tsx` 热重载。
|
|
58
|
+
|
|
59
|
+
## 工具概览
|
|
60
|
+
|
|
61
|
+
| 域 | 工具数 | 亮点 |
|
|
62
|
+
|--------|-------|------------|
|
|
63
|
+
| **doc** | 14 | CRUD、版本管理、Diff、批量获取、URL/文件导入、跨库复制、导出 |
|
|
64
|
+
| **repo** | 8 | CRUD、批量获取、跨库复制、全量导出(TOC 结构 + INDEX/GRAPH) |
|
|
65
|
+
| **toc** | 3 | 获取、更新、批量更新(createTitle/appendNode/removeNode/moveNode) |
|
|
66
|
+
| **search** | 2 | 通用搜索 + RAG 增强搜索 |
|
|
67
|
+
| **user** | 3 | 用户信息、心跳、团队列表 |
|
|
68
|
+
| **group** | 3 | 成员列表、角色变更、删除成员 |
|
|
69
|
+
| **statistic** | 4 | 团队/成员/知识库/文档统计 |
|
|
70
|
+
| **note** | 4 | CRUD + 软删除/恢复 |
|
|
71
|
+
| **recycle** | 3 | 列表、恢复、彻底删除(Cookie 认证) |
|
|
72
|
+
| **upload** | 1 | 文件上传到语雀 CDN(Cookie 认证) |
|
|
73
|
+
| **board** | 3 | 思维导图、流程图、架构图 |
|
|
74
|
+
| **mine** | 2 | 书架列表、编辑中心(Cookie 认证) |
|
|
75
|
+
| **rss** | 3 | 数据源列表、抓取+去重+写入、定时策略分析 |
|
|
76
|
+
| **crawler** | 4 | 抓取、CSS 提取、去重写入、定时策略分析 |
|
|
77
|
+
| **kv** | 4 | 增删查列——增量分片,单文档 250KB 上限 |
|
|
78
|
+
| **合计** | **61** | |
|
|
79
|
+
|
|
80
|
+
完整工具文档见 [SKILL.md](SKILL.md) 或 [yuque-ai-skills](https://github.com/yehuoshun/yuque-ai-skills)。
|
|
81
|
+
|
|
82
|
+
## 与官方对比
|
|
83
|
+
|
|
84
|
+
| 功能 | 官方 yuque-mcp-server | yuque-ai-mcp |
|
|
85
|
+
|---------|--------------------------|--------------|
|
|
86
|
+
| 工具数 | 19 | **61** |
|
|
87
|
+
| 粒度 | 粗粒度 | **细粒度**(1 端点 = 1 工具) |
|
|
88
|
+
| 团队、回收站、上传、统计 | ❌ | ✅ |
|
|
89
|
+
| 版本、Diff、跨库复制 | ❌ | ✅ |
|
|
90
|
+
| 传输模式 | 仅 stdio | **stdio + HTTP SSE** |
|
|
91
|
+
| 配置 | 环境变量 | **config.json**(token + cookie) |
|
|
92
|
+
| Skill 层 | ❌ | ✅ 61 指导 |
|
|
93
|
+
|
|
94
|
+
## 架构
|
|
95
|
+
|
|
96
|
+
```
|
|
97
|
+
server/src/
|
|
98
|
+
├── common/ # 公共:config, errors, types, format, validate,
|
|
99
|
+
│ # api-client, web-request, register-tools, copy/export/schedule,
|
|
100
|
+
│ # repo-capacity(自动扩容), toc-cache(24h TTL), text-utils
|
|
101
|
+
├── user/ search/ group/ doc/ toc/ repo/ statistic/
|
|
102
|
+
├── note/ recycle/ upload/ board/ rss/ crawler/ mine/ kv/
|
|
103
|
+
├── index.ts # stdio 入口
|
|
104
|
+
└── http.ts # HTTP SSE 入口(端口 3099)
|
|
105
|
+
```
|
|
106
|
+
|
|
107
|
+
## 配置
|
|
108
|
+
|
|
109
|
+
```json
|
|
110
|
+
{
|
|
111
|
+
"token": "你的语雀 API Token",
|
|
112
|
+
"api_base": "https://www.yuque.com/api/v2",
|
|
113
|
+
"cookie": "可选,回收站/上传功能需要",
|
|
114
|
+
"ctoken": "可选,从 Cookie 中提取",
|
|
115
|
+
"kv": { "enabled": true },
|
|
116
|
+
"rss": {
|
|
117
|
+
"enabled": true,
|
|
118
|
+
"sources": {
|
|
119
|
+
"cnblogs": {
|
|
120
|
+
"name": "博客园",
|
|
121
|
+
"slug_pattern": "/p/(\\d+)",
|
|
122
|
+
"feeds": {
|
|
123
|
+
"sitehome": { "label": "首页", "url": "https://feed.cnblogs.com/blog/sitehome/rss" }
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
},
|
|
127
|
+
"namespaces": {
|
|
128
|
+
"cnblogs": {
|
|
129
|
+
"book_id": [80197497],
|
|
130
|
+
"kv_slugs": ["80197550/274164064"],
|
|
131
|
+
"schedule_slugs": []
|
|
132
|
+
}
|
|
133
|
+
}
|
|
134
|
+
},
|
|
135
|
+
"crawler": {
|
|
136
|
+
"enabled": true,
|
|
137
|
+
"namespaces": {
|
|
138
|
+
"my-source": {
|
|
139
|
+
"book_id": [80197497],
|
|
140
|
+
"kv_slugs": ["80197550/274164064"],
|
|
141
|
+
"schedule_slugs": []
|
|
142
|
+
}
|
|
143
|
+
}
|
|
144
|
+
}
|
|
145
|
+
}
|
|
146
|
+
```
|
|
147
|
+
|
|
148
|
+
- `book_id`:目标知识库 ID 数组,最后一个为当前活跃仓库。满 5000 篇自动扩容追加。
|
|
149
|
+
- `kv_slugs`:KV 去重分片文档(`{book_id}/{doc_id}` 格式)
|
|
150
|
+
- `schedule_slugs`:定时策略配置文档
|
|
151
|
+
|
|
152
|
+
## 错误处理
|
|
153
|
+
|
|
154
|
+
统一错误处理,返回结构化错误(HTTP 状态码 + 消息 + 响应摘要)。所有工具共用同一错误管道。
|
|
155
|
+
|
|
156
|
+
关键错误:
|
|
157
|
+
- `book_full` — 知识库超 5000 篇,自动创建新仓库并追加到 `book_id` 数组
|
|
158
|
+
- `401` / `403` — Token/权限问题
|
|
159
|
+
- `429` — 限流,自动重试
|
|
160
|
+
|
|
161
|
+
完整错误码见 [references/api/errors.md](references/api/errors.md)。
|
|
162
|
+
|
|
163
|
+
## 贡献
|
|
164
|
+
|
|
165
|
+
```bash
|
|
166
|
+
git clone https://github.com/yehuoshun/yuque-ai-mcp.git
|
|
167
|
+
cd yuque-ai-mcp/server
|
|
168
|
+
npm install
|
|
169
|
+
npm run build
|
|
170
|
+
|
|
171
|
+
# 新增工具清单:
|
|
172
|
+
# 1. 创建 server/src/{域}/{工具}.ts
|
|
173
|
+
# 2. 在 {域}/index.ts 中 export + 追加到工具数组
|
|
174
|
+
# 3. npx tsc
|
|
175
|
+
# 4. 重启 HTTP Server + curl health
|
|
176
|
+
# 5. 同步 yuque-ai-skills
|
|
177
|
+
# 6. 更新 README
|
|
178
|
+
```
|
|
179
|
+
|
|
180
|
+
[yuque-ai-mcp](https://github.com/yehuoshun/yuque-ai-mcp) 和 [yuque-ai-skills](https://github.com/yehuoshun/yuque-ai-skills) 保持同步更新。
|
|
181
|
+
|
|
182
|
+
## 技术栈
|
|
183
|
+
|
|
184
|
+
- TypeScript + Node.js
|
|
185
|
+
- @modelcontextprotocol/sdk v1.x
|
|
186
|
+
- Zod(参数校验)
|
|
187
|
+
- 语雀 OpenAPI v2 / Web API
|
|
188
|
+
|
|
189
|
+
## 许可
|
|
190
|
+
|
|
191
|
+
MIT
|
package/SKILL.md
ADDED
|
@@ -0,0 +1,180 @@
|
|
|
1
|
+
# yuque-ai-mcp
|
|
2
|
+
|
|
3
|
+
语雀全功能 MCP Server,61 个工具 / 15 个域。当用户提到「语雀」「yuque」「知识库」「文档」「团队」等关键词时触发。
|
|
4
|
+
|
|
5
|
+
## 触发场景
|
|
6
|
+
|
|
7
|
+
- 语雀知识库管理(创建、删除、列表、复制、导出)
|
|
8
|
+
- 文档操作(读写、搜索、导入导出、版本对比)
|
|
9
|
+
- 用户/团队信息查询
|
|
10
|
+
- 回收站管理
|
|
11
|
+
- 目录 TOC 导航
|
|
12
|
+
- 画板(思维导图/流程图)
|
|
13
|
+
- 统计数据
|
|
14
|
+
- 小记
|
|
15
|
+
- RSS 抓取
|
|
16
|
+
- 网页爬虫
|
|
17
|
+
- KV 存储
|
|
18
|
+
|
|
19
|
+
## API 端点索引
|
|
20
|
+
|
|
21
|
+
### user(3 工具)
|
|
22
|
+
| 工具 | 说明 |
|
|
23
|
+
|------|------|
|
|
24
|
+
| `yuque_hello` | 心跳检测,验证 Token 有效性 |
|
|
25
|
+
| `yuque_get_user` | 获取当前 Token 的用户详情 |
|
|
26
|
+
| `yuque_get_user_groups` | 获取用户所属的团队列表 |
|
|
27
|
+
|
|
28
|
+
### search(2 工具)
|
|
29
|
+
| 工具 | 说明 |
|
|
30
|
+
|------|------|
|
|
31
|
+
| `yuque_search` | 通用搜索文档/知识库 |
|
|
32
|
+
| `yuque_rag_search` | RAG 检索增强搜索 + 自动获取文档内容 |
|
|
33
|
+
|
|
34
|
+
### group(3 工具)
|
|
35
|
+
| 工具 | 说明 |
|
|
36
|
+
|------|------|
|
|
37
|
+
| `yuque_get_group_users` | 获取团队成员列表 |
|
|
38
|
+
| `yuque_update_group_user` | 变更团队成员角色 |
|
|
39
|
+
| `yuque_delete_group_user` | 删除团队成员 |
|
|
40
|
+
|
|
41
|
+
### doc(14 工具)
|
|
42
|
+
| 工具 | 说明 |
|
|
43
|
+
|------|------|
|
|
44
|
+
| `yuque_list_docs` | 获取知识库文档列表 |
|
|
45
|
+
| `yuque_create_doc` | 创建文档 |
|
|
46
|
+
| `yuque_get_doc` | 获取文档详情(支持 ID 或 slug) |
|
|
47
|
+
| `yuque_update_doc` | 更新文档 |
|
|
48
|
+
| `yuque_delete_doc` | 删除文档 |
|
|
49
|
+
| `yuque_batch_get_docs` | 批量获取文档详情(max 20) |
|
|
50
|
+
| `yuque_get_doc_versions` | 获取文档历史版本列表 |
|
|
51
|
+
| `yuque_get_doc_version_detail` | 获取文档历史版本详情 |
|
|
52
|
+
| `yuque_diff_doc_versions` | 对比两个版本的行级差异 |
|
|
53
|
+
| `yuque_copy_doc` | 单文档跨库复制 |
|
|
54
|
+
| `yuque_export_doc` | 导出单篇文档为 Markdown(含图片下载) |
|
|
55
|
+
| `yuque_import_url` | 从网页 URL 导入文档 |
|
|
56
|
+
| `yuque_import_file` | 从本地文件导入文档(direct/upload_assets/embed_assets) |
|
|
57
|
+
| `yuque_embed_url` | 生成文档嵌入阅读器 URL |
|
|
58
|
+
|
|
59
|
+
### toc(3 工具)
|
|
60
|
+
| 工具 | 说明 |
|
|
61
|
+
|------|------|
|
|
62
|
+
| `yuque_get_toc` | 获取知识库目录 |
|
|
63
|
+
| `yuque_update_toc` | 更新知识库目录 |
|
|
64
|
+
| `yuque_batch_update_toc` | 批量更新目录(Agent 出计划,Tool 执行) |
|
|
65
|
+
|
|
66
|
+
### repo(8 工具)
|
|
67
|
+
| 工具 | 说明 |
|
|
68
|
+
|------|------|
|
|
69
|
+
| `yuque_list_repos` | 获取知识库列表(用户/团队) |
|
|
70
|
+
| `yuque_create_repo` | 创建知识库 |
|
|
71
|
+
| `yuque_get_repo` | 获取知识库详情 |
|
|
72
|
+
| `yuque_update_repo` | 更新知识库 |
|
|
73
|
+
| `yuque_delete_repo` | 删除知识库 |
|
|
74
|
+
| `yuque_batch_get_repos` | 批量获取知识库详情(max 20) |
|
|
75
|
+
| `yuque_copy_repo` | 批量跨库复制(LLM 分类 + 目录重建) |
|
|
76
|
+
| `yuque_export_repo` | 批量导出知识库为 Markdown(按 TOC 目录结构) |
|
|
77
|
+
|
|
78
|
+
### statistic(4 工具)
|
|
79
|
+
| 工具 | 说明 |
|
|
80
|
+
|------|------|
|
|
81
|
+
| `yuque_get_group_statistics` | 获取团队汇总统计数据 |
|
|
82
|
+
| `yuque_get_member_statistics` | 获取团队成员统计数据 |
|
|
83
|
+
| `yuque_get_book_statistics` | 获取团队知识库统计数据 |
|
|
84
|
+
| `yuque_get_doc_statistics` | 获取团队文档统计数据 |
|
|
85
|
+
|
|
86
|
+
### note(4 工具)
|
|
87
|
+
| 工具 | 说明 |
|
|
88
|
+
|------|------|
|
|
89
|
+
| `yuque_list_notes` | 获取小记列表 |
|
|
90
|
+
| `yuque_get_note` | 获取小记详情 |
|
|
91
|
+
| `yuque_create_note` | 创建小记 |
|
|
92
|
+
| `yuque_update_note` | 更新小记 |
|
|
93
|
+
|
|
94
|
+
### recycle(3 工具)
|
|
95
|
+
| 工具 | 说明 |
|
|
96
|
+
|------|------|
|
|
97
|
+
| `yuque_list_recycles` | 列出回收站项目 |
|
|
98
|
+
| `yuque_restore_recycle` | 恢复回收站项目 |
|
|
99
|
+
| `yuque_destroy_recycle` | 彻底删除回收站项目 |
|
|
100
|
+
|
|
101
|
+
### upload(1 工具)
|
|
102
|
+
| 工具 | 说明 |
|
|
103
|
+
|------|------|
|
|
104
|
+
| `yuque_upload_attachment` | 上传文件到语雀 CDN |
|
|
105
|
+
|
|
106
|
+
### board(3 工具)
|
|
107
|
+
| 工具 | 说明 |
|
|
108
|
+
|------|------|
|
|
109
|
+
| `yuque_get_board` | 获取文档中的画板资源 |
|
|
110
|
+
| `yuque_create_board` | 在文档中创建画板资源 |
|
|
111
|
+
| `yuque_update_board` | 更新文档中的画板资源 |
|
|
112
|
+
|
|
113
|
+
### rss(3 工具)
|
|
114
|
+
| 工具 | 说明 |
|
|
115
|
+
|------|------|
|
|
116
|
+
| `yuque_rss_list_sources` | 列出所有可用 RSS 数据源及 feed 类型 |
|
|
117
|
+
| `yuque_rss_fetch` | 抓取 RSS/Atom Feed,解析后去重写入语雀 |
|
|
118
|
+
| `yuque_rss_schedule` | 分析更新频率,生成推荐抓取时间并写入配置 |
|
|
119
|
+
|
|
120
|
+
### crawler(4 工具)
|
|
121
|
+
| 工具 | 说明 |
|
|
122
|
+
|------|------|
|
|
123
|
+
| `yuque_crawl_fetch` | 抓取网页原始 HTML |
|
|
124
|
+
| `yuque_crawl_extract` | CSS 选择器从 HTML 提取内容 |
|
|
125
|
+
| `yuque_crawl_save` | 去重 + 写入语雀(接收 Agent 清洗后的内容) |
|
|
126
|
+
| `yuque_crawl_schedule` | 分析爬虫抓取频率,生成推荐抓取时间 |
|
|
127
|
+
|
|
128
|
+
> **清洗规范**:Agent 负责 fetch → 提取正文 → HTML→Markdown → 传干净 body 给 `crawl_save`。详见 `references/api/crawler_api.md`。
|
|
129
|
+
|
|
130
|
+
### mine(2 工具)
|
|
131
|
+
| 工具 | 说明 |
|
|
132
|
+
|------|------|
|
|
133
|
+
| `yuque_get_book_stacks` | 获取知识库分组(书架)列表 |
|
|
134
|
+
| `yuque_get_editor_center` | 获取个人编辑中心全景数据 |
|
|
135
|
+
|
|
136
|
+
### kv(4 工具)
|
|
137
|
+
| 工具 | 说明 |
|
|
138
|
+
|------|------|
|
|
139
|
+
| `yuque_kv_get` | 读取 KV 命名空间的完整 JSON map(分片合并) |
|
|
140
|
+
| `yuque_kv_set` | 增量设置 key-value,超 250KB 自动分片 |
|
|
141
|
+
| `yuque_kv_delete` | 遍历分片查找并删除 key |
|
|
142
|
+
| `yuque_kv_list` | 列出已配置的 KV 命名空间 |
|
|
143
|
+
|
|
144
|
+
## 错误码
|
|
145
|
+
|
|
146
|
+
所有工具共用统一错误处理。API 失败时返回结构化错误信息(含状态码、中文描述、响应摘要)。
|
|
147
|
+
|
|
148
|
+
完整错误码及处理策略见 `references/api/errors.md`。
|
|
149
|
+
|
|
150
|
+
## 配置
|
|
151
|
+
|
|
152
|
+
```json
|
|
153
|
+
{
|
|
154
|
+
"token": "语雀 API Token",
|
|
155
|
+
"api_base": "https://www.yuque.com/api/v2",
|
|
156
|
+
"cookie": "可选,回收站/上传/mine 功能需要",
|
|
157
|
+
"ctoken": "可选,从 Cookie 中提取",
|
|
158
|
+
"kv": { "enabled": true },
|
|
159
|
+
"rss": {
|
|
160
|
+
"enabled": true,
|
|
161
|
+
"namespaces": {
|
|
162
|
+
"cnblogs": {
|
|
163
|
+
"book_id": 80197497,
|
|
164
|
+
"kv_slugs": ["80197550/274164064"],
|
|
165
|
+
"schedule_slugs": ["80278170/274357940"]
|
|
166
|
+
}
|
|
167
|
+
}
|
|
168
|
+
},
|
|
169
|
+
"crawler": {
|
|
170
|
+
"enabled": true,
|
|
171
|
+
"namespaces": {
|
|
172
|
+
"cnblogs": {
|
|
173
|
+
"book_id": 80197497,
|
|
174
|
+
"kv_slugs": ["80197550/274164064"],
|
|
175
|
+
"schedule_slugs": ["80278170/274358465"]
|
|
176
|
+
}
|
|
177
|
+
}
|
|
178
|
+
}
|
|
179
|
+
}
|
|
180
|
+
```
|
package/dist/common/config.d.ts
CHANGED
|
@@ -5,14 +5,38 @@
|
|
|
5
5
|
*
|
|
6
6
|
* slug 格式:`{book_id}/{doc_id}`,用 / 分割解析。
|
|
7
7
|
* kv_slugs / schedule_slugs 均为数组,支持多文档。
|
|
8
|
+
*
|
|
9
|
+
* RSS 源定义在 config.json 的 rss.sources 中,不硬编码在代码里。
|
|
8
10
|
*/
|
|
9
11
|
interface NamespaceConfig {
|
|
10
12
|
book_id: number[];
|
|
11
13
|
kv_slugs?: string[];
|
|
12
14
|
schedule_slugs?: string[];
|
|
13
15
|
}
|
|
16
|
+
/** RSS Feed 定义(config.json 中配置) */
|
|
17
|
+
export interface RssFeedDef {
|
|
18
|
+
label: string;
|
|
19
|
+
description?: string;
|
|
20
|
+
url?: string;
|
|
21
|
+
url_template?: string;
|
|
22
|
+
params_schema?: Record<string, {
|
|
23
|
+
type: "string" | "number";
|
|
24
|
+
description: string;
|
|
25
|
+
required?: boolean;
|
|
26
|
+
default?: string | number;
|
|
27
|
+
}>;
|
|
28
|
+
}
|
|
29
|
+
/** RSS 源定义(config.json 中配置) */
|
|
30
|
+
export interface RssSourceDef {
|
|
31
|
+
name: string;
|
|
32
|
+
description?: string;
|
|
33
|
+
feeds: Record<string, RssFeedDef>;
|
|
34
|
+
/** 从文章链接提取站点文章 ID 的正则,capture group 1 即为 slug。不配则 fallback 到 md5 */
|
|
35
|
+
slug_pattern?: string;
|
|
36
|
+
}
|
|
14
37
|
interface RssConfig {
|
|
15
38
|
enabled: boolean;
|
|
39
|
+
sources?: Record<string, RssSourceDef>;
|
|
16
40
|
namespaces?: Record<string, NamespaceConfig>;
|
|
17
41
|
}
|
|
18
42
|
interface KvConfig {
|
|
@@ -32,6 +56,8 @@ interface Config {
|
|
|
32
56
|
crawler?: CrawlerConfig;
|
|
33
57
|
}
|
|
34
58
|
export declare function loadConfig(): Config;
|
|
59
|
+
/** 从 config 加载 RSS 源定义 */
|
|
60
|
+
export declare function loadRssSources(): Record<string, RssSourceDef>;
|
|
35
61
|
/** 持久化 config 到文件 */
|
|
36
62
|
export declare function saveConfig(): void;
|
|
37
63
|
/** 解析 slug:`{book_id}/{doc_id}` → { bookId, docId } */
|
package/dist/common/config.js
CHANGED
|
@@ -5,6 +5,8 @@
|
|
|
5
5
|
*
|
|
6
6
|
* slug 格式:`{book_id}/{doc_id}`,用 / 分割解析。
|
|
7
7
|
* kv_slugs / schedule_slugs 均为数组,支持多文档。
|
|
8
|
+
*
|
|
9
|
+
* RSS 源定义在 config.json 的 rss.sources 中,不硬编码在代码里。
|
|
8
10
|
*/
|
|
9
11
|
import { readFileSync, writeFileSync, existsSync } from "fs";
|
|
10
12
|
import { resolve, dirname } from "path";
|
|
@@ -13,24 +15,19 @@ import { homedir } from "os";
|
|
|
13
15
|
const __dirname = dirname(fileURLToPath(import.meta.url));
|
|
14
16
|
/** 查找 config 文件:--config 参数 → cwd → ~/.yuque-mcp → 开发路径 */
|
|
15
17
|
function findConfigPath() {
|
|
16
|
-
// 1. 命令行参数 --config /path/to/config.json
|
|
17
18
|
const cliArg = process.argv.findIndex(a => a === "--config" || a === "-c");
|
|
18
19
|
if (cliArg !== -1 && process.argv[cliArg + 1]) {
|
|
19
20
|
return process.argv[cliArg + 1];
|
|
20
21
|
}
|
|
21
|
-
// 2. 当前工作目录
|
|
22
22
|
const cwdPath = resolve(process.cwd(), "yuque-config.json");
|
|
23
23
|
if (existsSync(cwdPath))
|
|
24
24
|
return cwdPath;
|
|
25
|
-
// 3. 用户目录
|
|
26
25
|
const homePath = resolve(homedir(), ".yuque-mcp", "config.json");
|
|
27
26
|
if (existsSync(homePath))
|
|
28
27
|
return homePath;
|
|
29
|
-
// 4. 开发模式(相对 dist/ 的路径)
|
|
30
28
|
const devPath = resolve(__dirname, "../../../config/config.json");
|
|
31
29
|
if (existsSync(devPath))
|
|
32
30
|
return devPath;
|
|
33
|
-
// 5. 包内默认
|
|
34
31
|
return resolve(homedir(), ".yuque-mcp", "config.json");
|
|
35
32
|
}
|
|
36
33
|
let _config = null;
|
|
@@ -52,6 +49,10 @@ export function loadConfig() {
|
|
|
52
49
|
_config.api_base = _config.api_base || "https://www.yuque.com/api/v2";
|
|
53
50
|
return _config;
|
|
54
51
|
}
|
|
52
|
+
/** 从 config 加载 RSS 源定义 */
|
|
53
|
+
export function loadRssSources() {
|
|
54
|
+
return loadConfig().rss?.sources ?? {};
|
|
55
|
+
}
|
|
55
56
|
/** 持久化 config 到文件 */
|
|
56
57
|
export function saveConfig() {
|
|
57
58
|
if (!_config)
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/common/config.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/common/config.ts"],"names":[],"mappings":"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"}
|
package/dist/crawler/save.js
CHANGED
|
@@ -36,7 +36,7 @@ export const crawlSave = {
|
|
|
36
36
|
url: { type: "string", description: "Source URL (for dedup slug + source footer)" },
|
|
37
37
|
title: { type: "string", description: "Document title (required)" },
|
|
38
38
|
body: { type: "string", description: "HTML body content to save (required)" },
|
|
39
|
-
source: { type: "string", description: "Source key for repo routing and KV namespace
|
|
39
|
+
source: { type: "string", description: "Source key for repo routing and KV namespace. Matches config.json crawler.namespaces.{source}.book_id." },
|
|
40
40
|
target_repo: { type: "string", description: "Target repo ID. Falls back to config crawler.namespaces.{source}.book_id." },
|
|
41
41
|
kv_namespace: { type: "string", description: "KV namespace for dedup. Defaults to source if set, otherwise 'crawler'." },
|
|
42
42
|
format: { type: "string", description: "Content format: html (default) | markdown | lake" },
|
package/dist/crawler/save.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"save.js","sourceRoot":"","sources":["../../src/crawler/save.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,EAAE,UAAU,EAAE,MAAM,QAAQ,CAAC;AAEpC,OAAO,EAAiB,MAAM,EAAE,MAAM,yBAAyB,CAAC;AAChE,OAAO,EAAE,KAAK,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAC9D,OAAO,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AACjD,OAAO,EAAE,SAAS,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AAC9D,OAAO,EAAE,uBAAuB,EAAE,MAAM,4BAA4B,CAAC;AAErE,cAAc;AACd,SAAS,WAAW,CAAC,MAAe,EAAE,SAAkB;IACtD,IAAI,SAAS;QAAE,OAAO,QAAQ,CAAC,SAAS,EAAE,EAAE,CAAC,IAAI,IAAI,CAAC;IACtD,MAAM,GAAG,GAAG,UAAU,EAAE,CAAC;IACzB,MAAM,GAAG,GAAG,GAAG,CAAC,OAAO,EAAE,UAAU,EAAE,CAAC,MAAM,IAAI,EAAE,CAAC,EAAE,OAAO,CAAC;IAC7D,IAAI,GAAG,IAAI,GAAG,CAAC,MAAM,GAAG,CAAC;QAAE,OAAO,GAAG,CAAC,GAAG,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;IACtD,OAAO,IAAI,CAAC;AACd,CAAC;AAED,kCAAkC;AAClC,SAAS,SAAS,CAAC,GAAW;IAC5B,OAAO,UAAU,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;AAClE,CAAC;AAED,MAAM,CAAC,MAAM,SAAS,GAAY;IAChC,IAAI,EAAE,kBAAkB;IACxB,WAAW,EAAE,0IAA0I;IAEvJ,WAAW,EAAE;QACX,IAAI,EAAE,QAAQ;QACd,UAAU,EAAE;YACV,GAAG,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,6CAA6C,EAAE;YACnF,KAAK,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,2BAA2B,EAAE;YACnE,IAAI,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,sCAAsC,EAAE;YAC7E,MAAM,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,
|
|
1
|
+
{"version":3,"file":"save.js","sourceRoot":"","sources":["../../src/crawler/save.ts"],"names":[],"mappings":"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"}
|
package/dist/crawler/schedule.js
CHANGED
|
@@ -36,7 +36,7 @@ export const crawlSchedule = {
|
|
|
36
36
|
inputSchema: {
|
|
37
37
|
type: "object",
|
|
38
38
|
properties: {
|
|
39
|
-
source: { type: "string", description: "Source key
|
|
39
|
+
source: { type: "string", description: "Source key. Matches config.json crawler.namespaces.{source}.book_id." },
|
|
40
40
|
kv_namespace: { type: "string", description: "KV namespace for dedup data. Defaults to source." },
|
|
41
41
|
mode: { type: "string", description: "Mode: 'analyze' (analyze + write back, default) | 'dry_run' (analyze only, no write)" },
|
|
42
42
|
raw: { type: "boolean", description: "Return raw full JSON (default false)" },
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"schedule.js","sourceRoot":"","sources":["../../src/crawler/schedule.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAGH,OAAO,EAAE,KAAK,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAC9D,OAAO,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AACjD,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAC5C,OAAO,EAEL,YAAY,EACZ,aAAa,EACb,WAAW,EACX,gBAAgB,EAChB,eAAe,EACf,iBAAiB,GAClB,MAAM,8BAA8B,CAAC;AAEtC,MAAM,qBAAqB,GAAG,kBAAkB,CAAC;AAEjD,oCAAoC;AAEpC,SAAS,sBAAsB,CAC7B,MAAc,EACd,SAAwB,EACxB,SAAiB,EACjB,IAA6C,EAC7C,QAAgB,EAChB,SAAiB,EACjB,SAAiB;IAEjB,MAAM,KAAK,GAAa,EAAE,CAAC;IAC3B,KAAK,CAAC,IAAI,CAAC,QAAQ,MAAM,EAAE,CAAC,CAAC;IAC7B,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACf,KAAK,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;IAC5B,KAAK,CAAC,IAAI,CAAC,UAAU,MAAM,EAAE,CAAC,CAAC;IAC/B,KAAK,CAAC,IAAI,CAAC,WAAW,SAAS,IAAI,KAAK,EAAE,CAAC,CAAC;IAC5C,KAAK,CAAC,IAAI,CAAC,aAAa,SAAS,EAAE,CAAC,CAAC;IACrC,KAAK,CAAC,IAAI,CAAC,WAAW,IAAI,CAAC,YAAY,GAAG,CAAC,CAAC;IAC5C,KAAK,CAAC,IAAI,CAAC,WAAW,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC;IACpC,KAAK,CAAC,IAAI,CAAC,aAAa,QAAQ,EAAE,CAAC,CAAC;IACpC,KAAK,CAAC,IAAI,CAAC,cAAc,SAAS,EAAE,CAAC,CAAC;IACtC,KAAK,CAAC,IAAI,CAAC,cAAc,SAAS,EAAE,CAAC,CAAC;IACtC,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC1B,CAAC;AAED,aAAa;AAEb,MAAM,CAAC,MAAM,aAAa,GAAY;IACpC,IAAI,EAAE,sBAAsB;IAC5B,WAAW,EAAE,gKAAgK;IAE7K,WAAW,EAAE;QACX,IAAI,EAAE,QAAQ;QACd,UAAU,EAAE;YACV,MAAM,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,
|
|
1
|
+
{"version":3,"file":"schedule.js","sourceRoot":"","sources":["../../src/crawler/schedule.ts"],"names":[],"mappings":"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"}
|
package/dist/kv/common.d.ts
CHANGED
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
* slug 格式:`{book_id}/{doc_id}`,config.json 中存为数组。
|
|
6
6
|
*
|
|
7
7
|
* config 结构:
|
|
8
|
-
* { "rss": { "namespaces": { "
|
|
8
|
+
* { "rss": { "namespaces": { "my-source": { "book_id": ..., "kv_slugs": ["12345/67890"], ... } } } }
|
|
9
9
|
*
|
|
10
10
|
* set 流程:取最后一个 slug → GET 读 body → 判断大小 → PUT 更新或 POST 创建新分片 → push 新 slug 到 config
|
|
11
11
|
* get 流程:遍历 kv_slugs 数组 → 逐个读 → 合并返回
|
package/dist/kv/common.js
CHANGED
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
* slug 格式:`{book_id}/{doc_id}`,config.json 中存为数组。
|
|
6
6
|
*
|
|
7
7
|
* config 结构:
|
|
8
|
-
* { "rss": { "namespaces": { "
|
|
8
|
+
* { "rss": { "namespaces": { "my-source": { "book_id": ..., "kv_slugs": ["12345/67890"], ... } } } }
|
|
9
9
|
*
|
|
10
10
|
* set 流程:取最后一个 slug → GET 读 body → 判断大小 → PUT 更新或 POST 创建新分片 → push 新 slug 到 config
|
|
11
11
|
* get 流程:遍历 kv_slugs 数组 → 逐个读 → 合并返回
|
package/dist/kv/delete.js
CHANGED
|
@@ -12,7 +12,7 @@ export const kvDelete = {
|
|
|
12
12
|
type: "object",
|
|
13
13
|
properties: {
|
|
14
14
|
domain: { type: "string", description: "Domain: 'rss' or 'crawler'. Locates kv_slugs in config." },
|
|
15
|
-
namespace: { type: "string", description: "KV namespace
|
|
15
|
+
namespace: { type: "string", description: "KV namespace key. Matches config.json rss/crawler namespaces." },
|
|
16
16
|
key: { type: "string", description: "Key to delete" },
|
|
17
17
|
raw: { type: "boolean", description: "Return raw full JSON (default false, returns summary)" },
|
|
18
18
|
},
|
package/dist/kv/delete.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"delete.js","sourceRoot":"","sources":["../../src/kv/delete.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,EAAE,KAAK,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAC9D,OAAO,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAC;AAElD,MAAM,CAAC,MAAM,QAAQ,GAAY;IAC/B,IAAI,EAAE,iBAAiB;IACvB,WAAW,EAAE,wGAAwG;IAErH,WAAW,EAAE;QACX,IAAI,EAAE,QAAQ;QACd,UAAU,EAAE;YACV,MAAM,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,yDAAyD,EAAE;YAClG,SAAS,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,+
|
|
1
|
+
{"version":3,"file":"delete.js","sourceRoot":"","sources":["../../src/kv/delete.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,EAAE,KAAK,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAC9D,OAAO,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAC;AAElD,MAAM,CAAC,MAAM,QAAQ,GAAY;IAC/B,IAAI,EAAE,iBAAiB;IACvB,WAAW,EAAE,wGAAwG;IAErH,WAAW,EAAE;QACX,IAAI,EAAE,QAAQ;QACd,UAAU,EAAE;YACV,MAAM,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,yDAAyD,EAAE;YAClG,SAAS,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,+DAA+D,EAAE;YAC3G,GAAG,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,eAAe,EAAE;YACrD,GAAG,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,WAAW,EAAE,uDAAuD,EAAE;SAC/F;QACD,QAAQ,EAAE,CAAC,QAAQ,EAAE,WAAW,EAAE,KAAK,CAAC;KACzC;IAED,KAAK,CAAC,OAAO,CAAC,IAAI;QAChB,MAAM,GAAG,GAAG,KAAK,CACf,cAAc,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,CAAC,EACtC,cAAc,CAAC,IAAI,EAAE,SAAS,EAAE,WAAW,CAAC,EAC5C,cAAc,CAAC,IAAI,EAAE,GAAG,EAAE,KAAK,CAAC,CACjC,CAAC;QACF,IAAI,GAAG;YAAE,OAAO,GAAG,CAAC;QAEpB,MAAM,MAAM,GAAG,IAAI,EAAE,MAA2B,CAAC;QACjD,MAAM,SAAS,GAAG,IAAI,EAAE,SAAmB,CAAC;QAC5C,MAAM,GAAG,GAAG,IAAI,EAAE,GAAa,CAAC;QAEhC,MAAM,MAAM,GAAG,MAAM,mBAAmB,CAAC,MAAM,EAAE,SAAS,EAAE,GAAG,CAAC,CAAC;QACjE,IAAI,CAAC,MAAM,CAAC,EAAE,EAAE,CAAC;YACf,OAAO;gBACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC;4BACtD,KAAK,EAAE,kBAAkB;4BACzB,OAAO,EAAE,MAAM,CAAC,KAAK;yBACtB,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC;gBACd,OAAO,EAAE,IAAI;aACd,CAAC;QACJ,CAAC;QAED,OAAO;YACL,OAAO,EAAE,CAAC;oBACR,IAAI,EAAE,MAAe;oBACrB,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC;wBACnB,MAAM;wBACN,SAAS;wBACT,GAAG;wBACH,MAAM,EAAE,SAAS;wBACjB,MAAM,EAAE,MAAM,CAAC,MAAM;qBACtB,EAAE,IAAI,EAAE,CAAC,CAAC;iBACZ,CAAC;SACH,CAAC;IACJ,CAAC;CACF,CAAC"}
|
package/dist/kv/get.js
CHANGED
|
@@ -13,7 +13,7 @@ export const kvGet = {
|
|
|
13
13
|
type: "object",
|
|
14
14
|
properties: {
|
|
15
15
|
domain: { type: "string", description: "Domain: 'rss' or 'crawler'. Locates kv_slugs in config." },
|
|
16
|
-
namespace: { type: "string", description: "KV namespace
|
|
16
|
+
namespace: { type: "string", description: "KV namespace key. Matches config.json rss/crawler namespaces." },
|
|
17
17
|
raw: { type: "boolean", description: "Return raw full JSON (default false, returns summary)" },
|
|
18
18
|
},
|
|
19
19
|
required: ["domain", "namespace"],
|
package/dist/kv/get.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"get.js","sourceRoot":"","sources":["../../src/kv/get.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,EAAE,KAAK,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAC9D,OAAO,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AACjD,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAExC,MAAM,CAAC,MAAM,KAAK,GAAY;IAC5B,IAAI,EAAE,cAAc;IACpB,WAAW,EAAE,uHAAuH;IAEpI,WAAW,EAAE;QACX,IAAI,EAAE,QAAQ;QACd,UAAU,EAAE;YACV,MAAM,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,yDAAyD,EAAE;YAClG,SAAS,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,+
|
|
1
|
+
{"version":3,"file":"get.js","sourceRoot":"","sources":["../../src/kv/get.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,EAAE,KAAK,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAC9D,OAAO,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AACjD,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAExC,MAAM,CAAC,MAAM,KAAK,GAAY;IAC5B,IAAI,EAAE,cAAc;IACpB,WAAW,EAAE,uHAAuH;IAEpI,WAAW,EAAE;QACX,IAAI,EAAE,QAAQ;QACd,UAAU,EAAE;YACV,MAAM,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,yDAAyD,EAAE;YAClG,SAAS,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,+DAA+D,EAAE;YAC3G,GAAG,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,WAAW,EAAE,uDAAuD,EAAE;SAC/F;QACD,QAAQ,EAAE,CAAC,QAAQ,EAAE,WAAW,CAAC;KAClC;IAED,KAAK,CAAC,OAAO,CAAC,IAAI;QAChB,MAAM,GAAG,GAAG,KAAK,CACf,cAAc,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,CAAC,EACtC,cAAc,CAAC,IAAI,EAAE,SAAS,EAAE,WAAW,CAAC,CAC7C,CAAC;QACF,IAAI,GAAG;YAAE,OAAO,GAAG,CAAC;QAEpB,MAAM,MAAM,GAAG,IAAI,EAAE,MAA2B,CAAC;QACjD,MAAM,SAAS,GAAG,IAAI,EAAE,SAAmB,CAAC;QAE5C,MAAM,KAAK,GAAG,UAAU,EAAE,CAAC,MAAM,CAAC,EAAE,UAAU,EAAE,CAAC,SAAS,CAAC,EAAE,QAAQ,IAAI,EAAE,CAAC;QAE5E,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACvB,OAAO;gBACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC;4BACtD,KAAK,EAAE,qBAAqB;4BAC5B,OAAO,EAAE,cAAc,SAAS,oCAAoC,MAAM,eAAe,SAAS,MAAM;yBACzG,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC;gBACd,OAAO,EAAE,IAAI;aACd,CAAC;QACJ,CAAC;QAED,MAAM,GAAG,GAAG,MAAM,SAAS,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC;QAE/C,OAAO;YACL,OAAO,EAAE,CAAC;oBACR,IAAI,EAAE,MAAe;oBACrB,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC;wBACnB,MAAM;wBACN,SAAS;wBACT,MAAM,EAAE,KAAK,CAAC,MAAM;wBACpB,KAAK,EAAE,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,MAAM;wBAC9B,IAAI,EAAE,GAAG;qBACV,EAAE,IAAI,EAAE,CAAC,CAAC;iBACZ,CAAC;SACH,CAAC;IACJ,CAAC;CACF,CAAC"}
|
package/dist/kv/set.js
CHANGED
|
@@ -12,7 +12,7 @@ export const kvSet = {
|
|
|
12
12
|
type: "object",
|
|
13
13
|
properties: {
|
|
14
14
|
domain: { type: "string", description: "Domain: 'rss' or 'crawler'. Locates kv_slugs in config." },
|
|
15
|
-
namespace: { type: "string", description: "KV namespace
|
|
15
|
+
namespace: { type: "string", description: "KV namespace key. Matches config.json rss/crawler namespaces." },
|
|
16
16
|
key: { type: "string", description: "Key to set" },
|
|
17
17
|
value: { type: "string", description: "Value to store" },
|
|
18
18
|
raw: { type: "boolean", description: "Return raw full JSON (default false, returns summary)" },
|
package/dist/kv/set.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"set.js","sourceRoot":"","sources":["../../src/kv/set.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,EAAE,KAAK,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAC9D,OAAO,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAE/C,MAAM,CAAC,MAAM,KAAK,GAAY;IAC5B,IAAI,EAAE,cAAc;IACpB,WAAW,EAAE,8GAA8G;IAE3H,WAAW,EAAE;QACX,IAAI,EAAE,QAAQ;QACd,UAAU,EAAE;YACV,MAAM,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,yDAAyD,EAAE;YAClG,SAAS,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,+
|
|
1
|
+
{"version":3,"file":"set.js","sourceRoot":"","sources":["../../src/kv/set.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,EAAE,KAAK,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAC9D,OAAO,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAE/C,MAAM,CAAC,MAAM,KAAK,GAAY;IAC5B,IAAI,EAAE,cAAc;IACpB,WAAW,EAAE,8GAA8G;IAE3H,WAAW,EAAE;QACX,IAAI,EAAE,QAAQ;QACd,UAAU,EAAE;YACV,MAAM,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,yDAAyD,EAAE;YAClG,SAAS,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,+DAA+D,EAAE;YAC3G,GAAG,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,YAAY,EAAE;YAClD,KAAK,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,gBAAgB,EAAE;YACxD,GAAG,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,WAAW,EAAE,uDAAuD,EAAE;SAC/F;QACD,QAAQ,EAAE,CAAC,QAAQ,EAAE,WAAW,EAAE,KAAK,EAAE,OAAO,CAAC;KAClD;IAED,KAAK,CAAC,OAAO,CAAC,IAAI;QAChB,MAAM,GAAG,GAAG,KAAK,CACf,cAAc,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,CAAC,EACtC,cAAc,CAAC,IAAI,EAAE,SAAS,EAAE,WAAW,CAAC,EAC5C,cAAc,CAAC,IAAI,EAAE,GAAG,EAAE,KAAK,CAAC,EAChC,cAAc,CAAC,IAAI,EAAE,KAAK,EAAE,OAAO,CAAC,CACrC,CAAC;QACF,IAAI,GAAG;YAAE,OAAO,GAAG,CAAC;QAEpB,MAAM,MAAM,GAAG,IAAI,EAAE,MAA2B,CAAC;QACjD,MAAM,SAAS,GAAG,IAAI,EAAE,SAAmB,CAAC;QAC5C,MAAM,GAAG,GAAG,IAAI,EAAE,GAAa,CAAC;QAChC,MAAM,KAAK,GAAG,IAAI,EAAE,KAAe,CAAC;QAEpC,MAAM,MAAM,GAAG,MAAM,gBAAgB,CAAC,MAAM,EAAE,SAAS,EAAE,GAAG,EAAE,KAAK,CAAC,CAAC;QACrE,IAAI,CAAC,MAAM,CAAC,EAAE,EAAE,CAAC;YACf,OAAO;gBACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC;4BACtD,KAAK,EAAE,eAAe;4BACtB,OAAO,EAAE,MAAM,CAAC,KAAK;yBACtB,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC;gBACd,OAAO,EAAE,IAAI;aACd,CAAC;QACJ,CAAC;QAED,OAAO;YACL,OAAO,EAAE,CAAC;oBACR,IAAI,EAAE,MAAe;oBACrB,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC;wBACnB,MAAM;wBACN,SAAS;wBACT,GAAG;wBACH,KAAK;wBACL,MAAM,EAAE,MAAM,CAAC,MAAM;qBACtB,EAAE,IAAI,EAAE,CAAC,CAAC;iBACZ,CAAC;SACH,CAAC;IACJ,CAAC;CACF,CAAC"}
|
package/dist/rss/dedup.d.ts
CHANGED
package/dist/rss/dedup.js
CHANGED
|
@@ -2,20 +2,23 @@
|
|
|
2
2
|
* rss/dedup — slug 生成逻辑
|
|
3
3
|
*
|
|
4
4
|
* slug 生成优先级:
|
|
5
|
-
* 1. sources.
|
|
5
|
+
* 1. config.json 中 rss.sources.{source}.slug_pattern — 正则提取站点文章 ID
|
|
6
6
|
* 2. fallback: md5(link).slice(0, 12)
|
|
7
7
|
*/
|
|
8
8
|
import { createHash } from "crypto";
|
|
9
|
-
import {
|
|
9
|
+
import { getRssSources } from "./sources.js";
|
|
10
10
|
/** 生成去重 slug */
|
|
11
11
|
export function buildSlug(source, link) {
|
|
12
|
-
const
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
12
|
+
const sources = getRssSources();
|
|
13
|
+
const src = sources[source];
|
|
14
|
+
if (src?.slug_pattern) {
|
|
15
|
+
try {
|
|
16
|
+
const m = link.match(new RegExp(src.slug_pattern));
|
|
17
|
+
if (m?.[1])
|
|
18
|
+
return `${source}-${m[1]}`;
|
|
19
|
+
}
|
|
20
|
+
catch { /* regex 无效则 fallback */ }
|
|
17
21
|
}
|
|
18
|
-
// fallback: md5 前 12 位
|
|
19
22
|
return createHash("md5").update(link).digest("hex").slice(0, 12);
|
|
20
23
|
}
|
|
21
24
|
//# sourceMappingURL=dedup.js.map
|
package/dist/rss/dedup.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dedup.js","sourceRoot":"","sources":["../../src/rss/dedup.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAE,UAAU,EAAE,MAAM,QAAQ,CAAC;AACpC,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"dedup.js","sourceRoot":"","sources":["../../src/rss/dedup.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAE,UAAU,EAAE,MAAM,QAAQ,CAAC;AACpC,OAAO,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAE7C,gBAAgB;AAChB,MAAM,UAAU,SAAS,CAAC,MAAc,EAAE,IAAY;IACpD,MAAM,OAAO,GAAG,aAAa,EAAE,CAAC;IAChC,MAAM,GAAG,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;IAC5B,IAAI,GAAG,EAAE,YAAY,EAAE,CAAC;QACtB,IAAI,CAAC;YACH,MAAM,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,MAAM,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC,CAAC;YACnD,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC;gBAAE,OAAO,GAAG,MAAM,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;QACzC,CAAC;QAAC,MAAM,CAAC,CAAC,wBAAwB,CAAC,CAAC;IACtC,CAAC;IACD,OAAO,UAAU,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;AACnE,CAAC"}
|
package/dist/rss/fetch-feed.js
CHANGED
|
@@ -7,14 +7,14 @@
|
|
|
7
7
|
import { apiPut } from "../common/api-client.js";
|
|
8
8
|
import { check, requiredString } from "../common/validate.js";
|
|
9
9
|
import { loadConfig } from "../common/config.js";
|
|
10
|
-
import {
|
|
10
|
+
import { getRssSources } from "./sources.js";
|
|
11
11
|
import { parseFeed } from "./parser.js";
|
|
12
12
|
import { buildSlug } from "./dedup.js";
|
|
13
13
|
import { loadKvMap, kvIncrementalSet } from "../kv/common.js";
|
|
14
14
|
import { createDocWithAutoExpand } from "../common/repo-capacity.js";
|
|
15
15
|
/** 构建 feed URL */
|
|
16
16
|
function buildFeedUrl(source, feedType, params) {
|
|
17
|
-
const src =
|
|
17
|
+
const src = getRssSources()[source];
|
|
18
18
|
if (!src)
|
|
19
19
|
return null;
|
|
20
20
|
const feed = src.feeds[feedType];
|
|
@@ -94,14 +94,14 @@ export const rssFetch = {
|
|
|
94
94
|
inputSchema: {
|
|
95
95
|
type: "object",
|
|
96
96
|
properties: {
|
|
97
|
-
source: { type: "string", description: "Source key
|
|
97
|
+
source: { type: "string", description: "Source key. Use yuque_rss_list_sources to list available sources." },
|
|
98
98
|
feed_type: { type: "string", description: "Feed type key, e.g. 'sitehome', 'picked', 'user'. Use yuque_rss_list_sources to see available feed types." },
|
|
99
99
|
feed_params: { type: "string", description: "Template params for feeds with url_template. JSON string, e.g. '{\"username\":\"hsewr333\"}'" },
|
|
100
100
|
target_repo: { type: "string", description: "RSS target repo ID. Optional — falls back to config.json rss.namespaces.{source}.book_id." },
|
|
101
|
-
kv_namespace: { type: "string", description: "KV namespace for dedup
|
|
101
|
+
kv_namespace: { type: "string", description: "KV namespace for dedup. Defaults to source key." },
|
|
102
102
|
max_items: { type: "number", description: "Max items to fetch and save (default 10, max 50)" },
|
|
103
103
|
mode: { type: "string", description: "Mode: 'append' (save new docs, default) | 'dry_run' (preview only, no save)" },
|
|
104
|
-
title_prefix: { type: "string", description: "Optional prefix for doc titles, e.g. '[
|
|
104
|
+
title_prefix: { type: "string", description: "Optional prefix for doc titles, e.g. '[SourceName] '" },
|
|
105
105
|
raw: { type: "boolean", description: "Return raw full JSON (default false, returns summary)" },
|
|
106
106
|
},
|
|
107
107
|
required: ["source", "feed_type"],
|
|
@@ -129,7 +129,7 @@ export const rssFetch = {
|
|
|
129
129
|
const cfg = loadConfig();
|
|
130
130
|
const enableKv = !!(cfg.kv?.enabled);
|
|
131
131
|
// 1. 查数据源配置
|
|
132
|
-
const src =
|
|
132
|
+
const src = getRssSources()[source];
|
|
133
133
|
if (!src) {
|
|
134
134
|
return {
|
|
135
135
|
content: [{ type: "text", text: JSON.stringify({
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"fetch-feed.js","sourceRoot":"","sources":["../../src/rss/fetch-feed.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,EAA0B,MAAM,EAAE,MAAM,yBAAyB,CAAC;AACzE,OAAO,EAAE,KAAK,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAC9D,OAAO,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AACjD,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"fetch-feed.js","sourceRoot":"","sources":["../../src/rss/fetch-feed.ts"],"names":[],"mappings":"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"}
|
package/dist/rss/list-sources.js
CHANGED
|
@@ -4,12 +4,12 @@
|
|
|
4
4
|
* 无参数,直接返回 sources.ts 中的配置。
|
|
5
5
|
* Agent 调用 fetch 前先调这个了解有哪些源可用。
|
|
6
6
|
*/
|
|
7
|
-
import {
|
|
7
|
+
import { getRssSources } from "./sources.js";
|
|
8
8
|
export const rssListSources = {
|
|
9
9
|
name: "yuque_rss_list_sources",
|
|
10
10
|
description: "List all available RSS sources and their feed types. Call before yuque_rss_fetch. 详见 references/api/extended_api.md",
|
|
11
11
|
async handler() {
|
|
12
|
-
const sources = Object.entries(
|
|
12
|
+
const sources = Object.entries(getRssSources()).map(([key, src]) => ({
|
|
13
13
|
key,
|
|
14
14
|
name: src.name,
|
|
15
15
|
description: src.description,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"list-sources.js","sourceRoot":"","sources":["../../src/rss/list-sources.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"list-sources.js","sourceRoot":"","sources":["../../src/rss/list-sources.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAE7C,MAAM,CAAC,MAAM,cAAc,GAAY;IACrC,IAAI,EAAE,wBAAwB;IAC9B,WAAW,EAAE,qHAAqH;IAElI,KAAK,CAAC,OAAO;QACX,MAAM,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC,aAAa,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,EAAE,GAAG,CAAC,EAAE,EAAE,CAAC,CAAC;YACnE,GAAG;YACH,IAAI,EAAE,GAAG,CAAC,IAAI;YACd,WAAW,EAAE,GAAG,CAAC,WAAW;YAC5B,KAAK,EAAE,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,OAAO,EAAE,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC;gBACzD,GAAG,EAAE,OAAO;gBACZ,KAAK,EAAE,IAAI,CAAC,KAAK;gBACjB,WAAW,EAAE,IAAI,CAAC,WAAW;gBAC7B,YAAY,EAAE,CAAC,CAAC,IAAI,CAAC,YAAY;gBACjC,MAAM,EAAE,IAAI,CAAC,aAAa;oBACxB,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;wBAClD,IAAI,EAAE,CAAC;wBACP,IAAI,EAAE,CAAC,CAAC,IAAI;wBACZ,WAAW,EAAE,CAAC,CAAC,WAAW;wBAC1B,QAAQ,EAAE,CAAC,CAAC,QAAQ;qBACrB,CAAC,CAAC;oBACL,CAAC,CAAC,EAAE;aACP,CAAC,CAAC;SACJ,CAAC,CAAC,CAAC;QAEJ,OAAO;YACL,OAAO,EAAE,CAAC;oBACR,IAAI,EAAE,MAAe;oBACrB,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,CAAC,MAAM,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC;iBAClE,CAAC;SACH,CAAC;IACJ,CAAC;CACF,CAAC"}
|
package/dist/rss/schedule.js
CHANGED
|
@@ -12,7 +12,7 @@
|
|
|
12
12
|
*/
|
|
13
13
|
import { check, requiredString } from "../common/validate.js";
|
|
14
14
|
import { loadConfig } from "../common/config.js";
|
|
15
|
-
import {
|
|
15
|
+
import { getRssSources } from "./sources.js";
|
|
16
16
|
import { loadKvMap } from "../kv/common.js";
|
|
17
17
|
import { classifyBand, parseArticles, countRecentWithAuthors, getScheduleSlugs, findScheduleDoc, upsertScheduleDoc, } from "../common/schedule-common.js";
|
|
18
18
|
// ── RSS 专用:schedule body 构建 ──
|
|
@@ -41,7 +41,7 @@ export const rssSchedule = {
|
|
|
41
41
|
inputSchema: {
|
|
42
42
|
type: "object",
|
|
43
43
|
properties: {
|
|
44
|
-
source: { type: "string", description: "Source key
|
|
44
|
+
source: { type: "string", description: "Source key. Use yuque_rss_list_sources to list available sources." },
|
|
45
45
|
kv_namespace: { type: "string", description: "KV namespace for dedup data. Defaults to source key." },
|
|
46
46
|
mode: { type: "string", description: "Mode: 'analyze' (analyze + write back, default) | 'dry_run' (analyze only, no write)" },
|
|
47
47
|
raw: { type: "boolean", description: "Return raw full JSON (default false)" },
|
|
@@ -57,7 +57,7 @@ export const rssSchedule = {
|
|
|
57
57
|
const mode = args?.mode ?? "analyze";
|
|
58
58
|
const cfg = loadConfig();
|
|
59
59
|
const enableKv = !!(cfg.kv?.enabled);
|
|
60
|
-
const src =
|
|
60
|
+
const src = getRssSources()[source];
|
|
61
61
|
if (!src) {
|
|
62
62
|
return {
|
|
63
63
|
content: [{ type: "text", text: JSON.stringify({
|
package/dist/rss/schedule.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"schedule.js","sourceRoot":"","sources":["../../src/rss/schedule.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAGH,OAAO,EAAE,KAAK,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAC9D,OAAO,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AACjD,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"schedule.js","sourceRoot":"","sources":["../../src/rss/schedule.ts"],"names":[],"mappings":"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"}
|
package/dist/rss/sources.d.ts
CHANGED
|
@@ -1,26 +1,18 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* rss/sources —
|
|
2
|
+
* rss/sources — RSS 源类型定义 + 加载器
|
|
3
3
|
*
|
|
4
|
-
*
|
|
4
|
+
* 源定义在 config.json 的 rss.sources 中,不硬编码在代码里。
|
|
5
|
+
* 新增数据源只需改 config,无需改代码。
|
|
5
6
|
*/
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
url_template?: string;
|
|
11
|
-
params_schema?: Record<string, ParamDef>;
|
|
12
|
-
}
|
|
7
|
+
import { type RssFeedDef, type RssSourceDef } from "../common/config.js";
|
|
8
|
+
export type { RssFeedDef, RssSourceDef };
|
|
9
|
+
export type RssFeed = RssFeedDef;
|
|
10
|
+
export type RssSource = RssSourceDef;
|
|
13
11
|
export interface ParamDef {
|
|
14
12
|
type: "string" | "number";
|
|
15
13
|
description: string;
|
|
16
14
|
required?: boolean;
|
|
17
15
|
default?: string | number;
|
|
18
16
|
}
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
description?: string;
|
|
22
|
-
feeds: Record<string, RssFeed>;
|
|
23
|
-
/** 从文章链接提取站点文章 ID,生成 slug 用于去重。返回 null 则 fallback 到 md5(link) */
|
|
24
|
-
slugResolver?: (link: string) => string | null;
|
|
25
|
-
}
|
|
26
|
-
export declare const RSS_SOURCES: Record<string, RssSource>;
|
|
17
|
+
/** 获取所有 RSS 源(从 config.json 读取) */
|
|
18
|
+
export declare function getRssSources(): Record<string, RssSourceDef>;
|
package/dist/rss/sources.js
CHANGED
|
@@ -1,54 +1,12 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* rss/sources —
|
|
2
|
+
* rss/sources — RSS 源类型定义 + 加载器
|
|
3
3
|
*
|
|
4
|
-
*
|
|
4
|
+
* 源定义在 config.json 的 rss.sources 中,不硬编码在代码里。
|
|
5
|
+
* 新增数据源只需改 config,无需改代码。
|
|
5
6
|
*/
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
const m = link.match(/\/p\/(\d+)/);
|
|
12
|
-
return m ? `cnblogs-${m[1]}` : null;
|
|
13
|
-
},
|
|
14
|
-
feeds: {
|
|
15
|
-
sitehome: {
|
|
16
|
-
label: "首页最新",
|
|
17
|
-
description: "博客园首页最新发布的文章",
|
|
18
|
-
url: "https://feed.cnblogs.com/blog/sitehome/rss",
|
|
19
|
-
},
|
|
20
|
-
picked: {
|
|
21
|
-
label: "编辑推荐",
|
|
22
|
-
description: "博客园编辑精选推荐",
|
|
23
|
-
url: "https://feed.cnblogs.com/blog/sitehome/picked",
|
|
24
|
-
},
|
|
25
|
-
"48h": {
|
|
26
|
-
label: "48小时阅读排行",
|
|
27
|
-
description: "博客园48小时内阅读量最高的文章",
|
|
28
|
-
url: "https://feed.cnblogs.com/blog/sitehome/48h",
|
|
29
|
-
},
|
|
30
|
-
"10d": {
|
|
31
|
-
label: "10天推荐排行",
|
|
32
|
-
description: "博客园10天内推荐最多的文章",
|
|
33
|
-
url: "https://feed.cnblogs.com/blog/sitehome/10d",
|
|
34
|
-
},
|
|
35
|
-
user: {
|
|
36
|
-
label: "用户博客",
|
|
37
|
-
description: "指定用户的博客文章",
|
|
38
|
-
url_template: "https://feed.cnblogs.com/blog/u/{username}/rss",
|
|
39
|
-
params_schema: {
|
|
40
|
-
username: { type: "string", description: "博客园用户名,如 hsewr333", required: true },
|
|
41
|
-
},
|
|
42
|
-
},
|
|
43
|
-
category: {
|
|
44
|
-
label: "分类",
|
|
45
|
-
description: "指定分类的文章",
|
|
46
|
-
url_template: "https://feed.cnblogs.com/blog/category/{category}/rss",
|
|
47
|
-
params_schema: {
|
|
48
|
-
category: { type: "string", description: "分类名,如 dotnet, python, web", required: true },
|
|
49
|
-
},
|
|
50
|
-
},
|
|
51
|
-
},
|
|
52
|
-
},
|
|
53
|
-
};
|
|
7
|
+
import { loadRssSources } from "../common/config.js";
|
|
8
|
+
/** 获取所有 RSS 源(从 config.json 读取) */
|
|
9
|
+
export function getRssSources() {
|
|
10
|
+
return loadRssSources();
|
|
11
|
+
}
|
|
54
12
|
//# sourceMappingURL=sources.js.map
|
package/dist/rss/sources.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sources.js","sourceRoot":"","sources":["../../src/rss/sources.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"sources.js","sourceRoot":"","sources":["../../src/rss/sources.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,cAAc,EAAsC,MAAM,qBAAqB,CAAC;AAczF,mCAAmC;AACnC,MAAM,UAAU,aAAa;IAC3B,OAAO,cAAc,EAAE,CAAC;AAC1B,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "yuque-ai-mcp",
|
|
3
|
-
"version": "2.7.
|
|
3
|
+
"version": "2.7.6",
|
|
4
4
|
"description": "Full-featured Yuque MCP Server — 61 fine-grained tools covering the entire Yuque OpenAPI",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "dist/index.js",
|
|
@@ -31,7 +31,7 @@
|
|
|
31
31
|
"dev:http": "tsx watch src/http.ts",
|
|
32
32
|
"start": "node dist/index.js",
|
|
33
33
|
"start:http": "node dist/http.js",
|
|
34
|
-
"prepublishOnly": "npm run build"
|
|
34
|
+
"prepublishOnly": "npm run build && cp ../README.md ../README_CN.md ../SKILL.md . 2>/dev/null; true"
|
|
35
35
|
},
|
|
36
36
|
"repository": {
|
|
37
37
|
"type": "git",
|