@page.su/ai-blog-cli 0.1.0-beta.1 → 0.1.0-beta.10

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.
Files changed (107) hide show
  1. package/dist/cli.js +14 -5
  2. package/dist/cli.js.map +1 -1
  3. package/dist/commands/comments.js +1 -1
  4. package/dist/commands/comments.js.map +1 -1
  5. package/dist/commands/config.d.ts +12 -0
  6. package/dist/commands/config.d.ts.map +1 -0
  7. package/dist/commands/config.js +128 -0
  8. package/dist/commands/config.js.map +1 -0
  9. package/dist/commands/demo.js +2 -2
  10. package/dist/commands/demo.js.map +1 -1
  11. package/dist/commands/post.d.ts.map +1 -1
  12. package/dist/commands/post.js +30 -3
  13. package/dist/commands/post.js.map +1 -1
  14. package/dist/commands/render-errors.d.ts +4 -0
  15. package/dist/commands/render-errors.d.ts.map +1 -0
  16. package/dist/commands/render-errors.js +22 -0
  17. package/dist/commands/render-errors.js.map +1 -0
  18. package/dist/commands/skills.d.ts.map +1 -1
  19. package/dist/commands/skills.js +67 -19
  20. package/dist/commands/skills.js.map +1 -1
  21. package/dist/commands/syntax.d.ts +4 -0
  22. package/dist/commands/syntax.d.ts.map +1 -0
  23. package/dist/commands/syntax.js +29 -0
  24. package/dist/commands/syntax.js.map +1 -0
  25. package/dist/config.d.ts +84 -8
  26. package/dist/config.d.ts.map +1 -1
  27. package/dist/config.js +196 -29
  28. package/dist/config.js.map +1 -1
  29. package/dist/config.test.js +150 -19
  30. package/dist/config.test.js.map +1 -1
  31. package/package.json +12 -6
  32. package/dist/index.d.ts +0 -3
  33. package/dist/index.d.ts.map +0 -1
  34. package/dist/index.js +0 -100
  35. package/dist/index.js.map +0 -1
  36. package/dist/prompts/index.d.ts +0 -9
  37. package/dist/prompts/index.d.ts.map +0 -1
  38. package/dist/prompts/index.js +0 -178
  39. package/dist/prompts/index.js.map +0 -1
  40. package/dist/resources/syntax-spec.d.ts +0 -23
  41. package/dist/resources/syntax-spec.d.ts.map +0 -1
  42. package/dist/resources/syntax-spec.js +0 -105
  43. package/dist/resources/syntax-spec.js.map +0 -1
  44. package/dist/resources/syntax-spec.test.d.ts +0 -2
  45. package/dist/resources/syntax-spec.test.d.ts.map +0 -1
  46. package/dist/resources/syntax-spec.test.js +0 -47
  47. package/dist/resources/syntax-spec.test.js.map +0 -1
  48. package/dist/tools/build.d.ts +0 -13
  49. package/dist/tools/build.d.ts.map +0 -1
  50. package/dist/tools/build.js +0 -181
  51. package/dist/tools/build.js.map +0 -1
  52. package/dist/tools/code-repos.d.ts +0 -5
  53. package/dist/tools/code-repos.d.ts.map +0 -1
  54. package/dist/tools/code-repos.js +0 -149
  55. package/dist/tools/code-repos.js.map +0 -1
  56. package/dist/tools/comments.d.ts +0 -12
  57. package/dist/tools/comments.d.ts.map +0 -1
  58. package/dist/tools/comments.js +0 -87
  59. package/dist/tools/comments.js.map +0 -1
  60. package/dist/tools/demos.d.ts +0 -5
  61. package/dist/tools/demos.d.ts.map +0 -1
  62. package/dist/tools/demos.js +0 -98
  63. package/dist/tools/demos.js.map +0 -1
  64. package/dist/tools/glossary.d.ts +0 -4
  65. package/dist/tools/glossary.d.ts.map +0 -1
  66. package/dist/tools/glossary.js +0 -139
  67. package/dist/tools/glossary.js.map +0 -1
  68. package/dist/tools/helpers.d.ts +0 -44
  69. package/dist/tools/helpers.d.ts.map +0 -1
  70. package/dist/tools/helpers.js +0 -65
  71. package/dist/tools/helpers.js.map +0 -1
  72. package/dist/tools/knowledge.d.ts +0 -4
  73. package/dist/tools/knowledge.d.ts.map +0 -1
  74. package/dist/tools/knowledge.js +0 -140
  75. package/dist/tools/knowledge.js.map +0 -1
  76. package/dist/tools/math-concepts.d.ts +0 -4
  77. package/dist/tools/math-concepts.d.ts.map +0 -1
  78. package/dist/tools/math-concepts.js +0 -158
  79. package/dist/tools/math-concepts.js.map +0 -1
  80. package/dist/tools/posts.d.ts +0 -35
  81. package/dist/tools/posts.d.ts.map +0 -1
  82. package/dist/tools/posts.js +0 -278
  83. package/dist/tools/posts.js.map +0 -1
  84. package/dist/tools/scout.d.ts +0 -10
  85. package/dist/tools/scout.d.ts.map +0 -1
  86. package/dist/tools/scout.js +0 -111
  87. package/dist/tools/scout.js.map +0 -1
  88. package/dist/tools/series.d.ts +0 -12
  89. package/dist/tools/series.d.ts.map +0 -1
  90. package/dist/tools/series.js +0 -120
  91. package/dist/tools/series.js.map +0 -1
  92. package/dist/tools/syntax-capabilities.d.ts +0 -15
  93. package/dist/tools/syntax-capabilities.d.ts.map +0 -1
  94. package/dist/tools/syntax-capabilities.js +0 -859
  95. package/dist/tools/syntax-capabilities.js.map +0 -1
  96. package/dist/tools/taxonomy.d.ts +0 -4
  97. package/dist/tools/taxonomy.d.ts.map +0 -1
  98. package/dist/tools/taxonomy.js +0 -73
  99. package/dist/tools/taxonomy.js.map +0 -1
  100. package/dist/tools/uploads.d.ts +0 -15
  101. package/dist/tools/uploads.d.ts.map +0 -1
  102. package/dist/tools/uploads.js +0 -56
  103. package/dist/tools/uploads.js.map +0 -1
  104. package/dist/tools/workflows.d.ts +0 -9
  105. package/dist/tools/workflows.d.ts.map +0 -1
  106. package/dist/tools/workflows.js +0 -249
  107. package/dist/tools/workflows.js.map +0 -1
@@ -1 +0,0 @@
1
- {"version":3,"file":"posts.d.ts","sourceRoot":"","sources":["../../src/tools/posts.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACzE,OAAO,EAAkB,KAAK,SAAS,EAAE,MAAM,kBAAkB,CAAC;AA6ClE,wCAAwC;AACxC,iBAAS,UAAU,CAAC,KAAK,EAAE,OAAO,GAAG;IAAE,OAAO,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC,CAAA;CAAE,CAStF;AAED,8DAA8D;AAC9D,iBAAS,WAAW,CAAC,KAAK,EAAE,OAAO,GAAG;IACpC,OAAO,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAC/C,OAAO,EAAE,IAAI,CAAC;CACf,CAkBA;AAED,2DAA2D;AAC3D,iBAAe,IAAI,CAAC,CAAC,EACnB,EAAE,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,GACnB,OAAO,CAAC;IAAE,OAAO,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAAC,OAAO,CAAC,EAAE,IAAI,CAAA;CAAE,CAAC,CAO7E;AAED,qBAAqB;AACrB,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,SAAS,EAAE,GAAG,EAAE,SAAS,GAAG,IAAI,CAwRzE;AAED,mEAAmE;AACnE,eAAO,MAAM,gBAAgB;;;;CAAoC,CAAC"}
@@ -1,278 +0,0 @@
1
- import { z } from "zod";
2
- import { ApiClientError } from "../api-client.js";
3
- /**
4
- * 文章相关 MCP 工具:post.list / get / list_for_reference / create / update / update_status / delete。
5
- *
6
- * 设计原则:
7
- * - 工具的入参 schema 用 zod raw shape 形态(McpServer 要求),尽量与
8
- * ai-blog 端的 `postEditorSchema` 字段对齐
9
- * - 不在 mcp-server 端校验业务规则;服务端 zod 报错会通过 ApiClientError
10
- * 携带 issues 透传给 AI 客户端,由 AI 自行修正后重试
11
- * - tool 的返回统一打包为 `{ content: [{ type: "text", text: <json> }] }`
12
- * (MCP 规范的 tool result 形态)
13
- */
14
- /** post.create / post.update 共用的字段 schema(raw shape) */
15
- const postFieldsShape = {
16
- title: z.string().min(1).describe("文章标题,必填,1-255 字符").optional(),
17
- slug: z.string().describe("文章 slug;为空时由后端基于标题自动生成").optional(),
18
- coverImage: z
19
- .string()
20
- .describe("封面图:必须是 /api/assets/oss/... 站内 URL,或合规 https 外链")
21
- .optional(),
22
- status: z.enum(["draft", "published"]).describe("文章状态").optional(),
23
- publishedAt: z
24
- .string()
25
- .describe("ISO 时间字符串;status=published 且未传时由后端置为当前时间")
26
- .optional(),
27
- categoryIds: z
28
- .array(z.string().uuid())
29
- .describe("分类 id 列表(uuid),从 taxonomy.list 工具获取")
30
- .optional(),
31
- tagIds: z
32
- .array(z.string().uuid())
33
- .describe("标签 id 列表(uuid),从 taxonomy.list 工具获取")
34
- .optional(),
35
- excerpt: z.string().describe("摘要,最长 400 字符").optional(),
36
- content: z
37
- .string()
38
- .describe("Markdown 正文;可包含 frontmatter、callout、live-demo 等 14 类高级语法"),
39
- seoTitle: z.string().describe("SEO 标题,最长 255 字符").optional(),
40
- seoDescription: z.string().describe("SEO 描述,最长 320 字符").optional(),
41
- canonicalUrl: z.string().describe("规范链接 URL").optional(),
42
- commentsEnabled: z.boolean().describe("是否开启评论").optional(),
43
- };
44
- /** 把任意值序列化为可读 JSON 文本,用于 tool result */
45
- function toToolText(value) {
46
- return {
47
- content: [
48
- {
49
- type: "text",
50
- text: typeof value === "string" ? value : JSON.stringify(value, null, 2),
51
- },
52
- ],
53
- };
54
- }
55
- /** 把 ApiClientError 转成可读的 tool error result,让 AI 能在对话里看到原因 */
56
- function toToolError(error) {
57
- let text;
58
- if (error instanceof ApiClientError) {
59
- const lines = [`HTTP ${error.status}: ${error.message}`];
60
- if (error.issues !== undefined) {
61
- lines.push("Validation issues:");
62
- lines.push(JSON.stringify(error.issues, null, 2));
63
- }
64
- text = lines.join("\n");
65
- }
66
- else if (error instanceof Error) {
67
- text = error.message;
68
- }
69
- else {
70
- text = String(error);
71
- }
72
- return {
73
- content: [{ type: "text", text }],
74
- isError: true,
75
- };
76
- }
77
- /** 在 tool 的 callback 内统一接住异常,避免抛出去后 SDK 给客户端 generic 错误 */
78
- async function safe(fn) {
79
- try {
80
- const result = await fn();
81
- return toToolText(result);
82
- }
83
- catch (error) {
84
- return toToolError(error);
85
- }
86
- }
87
- /** 注册全部 post.* 工具 */
88
- export function registerPostTools(server, api) {
89
- // ─── post.list ─────────────────────────────────────────────────────────
90
- server.registerTool("post.list", {
91
- title: "List posts",
92
- description: "列出博客中的所有文章(管理员视图,含 draft 与 published)。支持按 status 筛选 / 关键词模糊匹配 / 限制返回数量。",
93
- inputSchema: {
94
- status: z.enum(["draft", "published"]).optional(),
95
- q: z.string().describe("title/slug 模糊匹配关键词").optional(),
96
- limit: z.number().int().positive().max(100).optional(),
97
- },
98
- }, async ({ status, q, limit }) => safe(() => api.get("/api/mcp/posts", {
99
- status,
100
- q,
101
- limit,
102
- })));
103
- // ─── post.get ──────────────────────────────────────────────────────────
104
- server.registerTool("post.get", {
105
- title: "Get post detail",
106
- description: "根据 id 获取一篇文章的完整可编辑视图(含 markdown 原文与 categoryIds / tagIds)。" +
107
- "⚠️ 文章超过 5000 字时,推荐改用 post.get_outline + post.get_section 按需读取,节省 token。",
108
- inputSchema: {
109
- id: z.string().describe("文章 id (uuid)"),
110
- },
111
- }, async ({ id }) => safe(() => api.get(`/api/mcp/posts/${encodeURIComponent(id)}`)));
112
- // ─── post.list_for_reference ───────────────────────────────────────────
113
- server.registerTool("post.list_for_reference", {
114
- title: "List posts for site reference",
115
- description: "为站内引用 [标题](../posts/<slug>) 提供候选列表,返回 id/title/slug/status。MCP 客户端在生成站内引用前应先调用本工具校验 slug。",
116
- inputSchema: {
117
- q: z.string().optional(),
118
- },
119
- }, async ({ q }) => safe(() => api.get("/api/mcp/posts", {
120
- mode: "reference",
121
- q,
122
- })));
123
- // ─── post.create ───────────────────────────────────────────────────────
124
- server.registerTool("post.create", {
125
- title: "Create post",
126
- description: "创建一篇文章。content 必填,且必须满足 ai-blog 的 markdown 规范(参见 mcp://syntax-spec/* 资源)。" +
127
- "⚠️ 创建前先调 taxonomy.list 获取合法的 categoryIds/tagIds。" +
128
- "超长文章(>10000字)建议先创建骨架,再用 post.append_content 分片追加。" +
129
- "首次写文章前调 describe_workflows 获取完整工作流。",
130
- inputSchema: postFieldsShape,
131
- }, async (args) => safe(() => api.post("/api/mcp/posts", args)));
132
- // ─── post.update ───────────────────────────────────────────────────────
133
- server.registerTool("post.update", {
134
- title: "Update post",
135
- description: "全量更新一篇文章。需要传入完整字段(与 create 一致),后端会按 postEditorSchema 整体校验。" +
136
- "⚠️ 仅适用于短文章(<5000字)或需要全面重写的场景。" +
137
- "大文章局部修改请改用 post.get_outline → post.get_section → post.replace_section 工作流。",
138
- inputSchema: {
139
- id: z.string().describe("文章 id (uuid)"),
140
- ...postFieldsShape,
141
- },
142
- }, async (args) => {
143
- const { id, ...rest } = args;
144
- return safe(() => api.patch(`/api/mcp/posts/${encodeURIComponent(id)}`, rest));
145
- });
146
- // ─── post.update_status ────────────────────────────────────────────────
147
- server.registerTool("post.update_status", {
148
- title: "Publish or unpublish a post",
149
- description: "轻量更新发布状态(不修改其他字段)。",
150
- inputSchema: {
151
- id: z.string().describe("文章 id (uuid)"),
152
- status: z.enum(["draft", "published"]),
153
- },
154
- }, async ({ id, status }) => safe(() => api.patch(`/api/mcp/posts/${encodeURIComponent(id)}/status`, { status })));
155
- // ─── post.delete ───────────────────────────────────────────────────────
156
- server.registerTool("post.delete", {
157
- title: "Delete post",
158
- description: "永久删除文章。请慎重使用。",
159
- inputSchema: {
160
- id: z.string().describe("文章 id (uuid)"),
161
- },
162
- }, async ({ id }) => safe(() => api.delete(`/api/mcp/posts/${encodeURIComponent(id)}`)));
163
- // ─── post.append_content ────────────────────────────────────────────────
164
- server.registerTool("post.append_content", {
165
- title: "Append content to a post",
166
- description: "向已有文章末尾追加 Markdown 内容片段。" +
167
- "⚠️ 仅用于超长文章的分片写入场景(先 post.create 骨架,再多次 append 追加章节)。" +
168
- "修改已有内容请用 post.replace_section,不要用 append。" +
169
- "每次追加建议 3000-8000 字,全文写完后用 post.validate_markdown 校验。",
170
- inputSchema: {
171
- id: z.string().describe("文章 id (uuid)"),
172
- content: z
173
- .string()
174
- .min(1)
175
- .describe("要追加的 Markdown 片段,建议单次 3000-8000 字,不超过 10000 字"),
176
- },
177
- }, async ({ id, content }) => safe(() => api.patch(`/api/mcp/posts/${encodeURIComponent(id)}/append`, { content })));
178
- // ─── post.get_outline ───────────────────────────────────────────────────
179
- server.registerTool("post.get_outline", {
180
- title: "Get post outline",
181
- description: "返回文章的章节大纲,含每节的序号(index)、标题、级别、字符数、内容预览(前100字符)。" +
182
- "用于了解文章结构而不需要读取全文,大幅减少 token 消耗。" +
183
- "配合 post.get_section 读取特定章节,配合 post.replace_section(传 sectionIndex)精准替换。",
184
- inputSchema: {
185
- id: z.string().describe("文章 id (uuid)"),
186
- },
187
- }, async ({ id }) => safe(() => api.get(`/api/mcp/posts/${encodeURIComponent(id)}/outline`)));
188
- // ─── post.get_section ─────────────────────────────────────────────────
189
- server.registerTool("post.get_section", {
190
- title: "Get a section's content",
191
- description: "读取文章中某个章节的完整 markdown 内容。" +
192
- "支持通过 index(从 post.get_outline 获取)或 heading 文本定位。" +
193
- "用于精准读取特定章节,避免读取全文的 token 消耗。",
194
- inputSchema: {
195
- id: z.string().describe("文章 id (uuid)"),
196
- index: z
197
- .number()
198
- .int()
199
- .min(0)
200
- .describe("章节序号(从 post.get_outline 获取,0 起始)")
201
- .optional(),
202
- heading: z
203
- .string()
204
- .describe("章节标题文本(含 # 前缀如 '## 标题',或不含前缀如 '标题')")
205
- .optional(),
206
- },
207
- }, async ({ id, index, heading }) => safe(() => api.get(`/api/mcp/posts/${encodeURIComponent(id)}/sections`, {
208
- index,
209
- heading,
210
- })));
211
- // ─── post.replace_section ──────────────────────────────────────────────
212
- server.registerTool("post.replace_section", {
213
- title: "Replace a section in a post",
214
- description: "按 Markdown 标题定位并替换文章中的某个章节。适用于超长文章的局部修改:" +
215
- "通过章节标题或序号(从 post.get_outline 获取)精确定位,只传入该章节的新内容。" +
216
- "替换范围:从目标标题行到下一个同级或更高级标题之间的全部内容。" +
217
- "sectionHeading 和 sectionIndex 二选一,推荐使用 sectionIndex(更精准)。",
218
- inputSchema: {
219
- id: z.string().describe("文章 id (uuid)"),
220
- sectionHeading: z
221
- .string()
222
- .min(1)
223
- .describe("目标章节的完整标题文本(含 # 前缀),如 '## 第三章 初入江湖'。与 sectionIndex 二选一")
224
- .optional(),
225
- sectionIndex: z
226
- .number()
227
- .int()
228
- .min(0)
229
- .describe("目标章节序号(从 post.get_outline 获取,0 起始)。与 sectionHeading 二选一,推荐优先使用")
230
- .optional(),
231
- newContent: z
232
- .string()
233
- .min(1)
234
- .describe("替换后的章节完整内容(必须含标题行本身)"),
235
- },
236
- }, async ({ id, sectionHeading, sectionIndex, newContent }) => safe(() => api.patch(`/api/mcp/posts/${encodeURIComponent(id)}/replace-section`, {
237
- ...(sectionHeading !== undefined ? { sectionHeading } : {}),
238
- ...(sectionIndex !== undefined ? { sectionIndex } : {}),
239
- newContent,
240
- })));
241
- // ─── post.insert_section ───────────────────────────────────────────────
242
- server.registerTool("post.insert_section", {
243
- title: "Insert a new section into a post",
244
- description: "在文章的指定章节后面插入新章节。" +
245
- "afterIndex 从 post.get_outline 获取:传目标章节的 index,新内容会插入到该章节之后。" +
246
- "传 -1 则插入到文章最开头。" +
247
- "⚠️ 与 post.append_content(只能追加到末尾)不同,此工具可以在任意位置插入。",
248
- inputSchema: {
249
- id: z.string().describe("文章 id (uuid)"),
250
- afterIndex: z
251
- .number()
252
- .int()
253
- .min(-1)
254
- .describe("在哪个章节后面插入(-1=最开头,0=第一个章节后,以此类推)。从 post.get_outline 获取 index"),
255
- content: z
256
- .string()
257
- .min(1)
258
- .describe("要插入的章节完整内容(应包含标题行)"),
259
- },
260
- }, async ({ id, afterIndex, content }) => safe(() => api.post(`/api/mcp/posts/${encodeURIComponent(id)}/insert-section`, {
261
- afterIndex,
262
- content,
263
- })));
264
- // ─── post.validate_markdown ────────────────────────────────────────────
265
- // 让 AI 在写库前先跑一遍编辑器同款 9 条 diagnostic 规则,结合 mcp://syntax-spec/* 自检
266
- server.registerTool("post.validate_markdown", {
267
- title: "Validate markdown content",
268
- description: "对一段 markdown 跑编辑器同款的 9 条 diagnostic 规则,返回 issues。" +
269
- "⚠️ 在 post.create / post.update 之前必须先跑一次;errors 级别问题必须修复后再提交。" +
270
- "发布文章前也应跑一次最终校验。",
271
- inputSchema: {
272
- content: z.string().describe("含 frontmatter 的 markdown 原文"),
273
- },
274
- }, async ({ content }) => safe(() => api.post("/api/mcp/validate", { content })));
275
- }
276
- /** 工具内部辅助:暴露给 build.ts / validate.ts 等共享 toToolText/toToolError */
277
- export const toolReplyHelpers = { toToolText, toToolError, safe };
278
- //# sourceMappingURL=posts.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"posts.js","sourceRoot":"","sources":["../../src/tools/posts.ts"],"names":[],"mappings":"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"}
@@ -1,10 +0,0 @@
1
- import type { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
2
- import type { ApiClient } from "../api-client.js";
3
- /**
4
- * Scout 相关 MCP 工具:scout.search_items
5
- *
6
- * 允许 AI 在写博客文章时搜索 Scout 系统采集的高质量素材,
7
- * 将全网技术资讯作为参考资料融入文章内容。
8
- */
9
- export declare function registerScoutTools(server: McpServer, api: ApiClient): void;
10
- //# sourceMappingURL=scout.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"scout.d.ts","sourceRoot":"","sources":["../../src/tools/scout.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACzE,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAGlD;;;;;GAKG;AAEH,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,SAAS,EAAE,GAAG,EAAE,SAAS,GAAG,IAAI,CAgJ1E"}
@@ -1,111 +0,0 @@
1
- import { z } from "zod";
2
- import { toToolText, toToolError } from "./helpers.js";
3
- /**
4
- * Scout 相关 MCP 工具:scout.search_items
5
- *
6
- * 允许 AI 在写博客文章时搜索 Scout 系统采集的高质量素材,
7
- * 将全网技术资讯作为参考资料融入文章内容。
8
- */
9
- export function registerScoutTools(server, api) {
10
- /**
11
- * scout.search_items - 搜索 Scout 采集的高质量素材
12
- *
13
- * 在写文章前调用此工具,可获取全网 AI 技术资讯作为参考资料,
14
- * 丰富文章内容并自动生成参考资料链接。
15
- */
16
- server.tool("scout.search_items", "搜索 Scout 采集的高质量技术素材。" +
17
- "⚠️ 写文章时推荐调用此工具获取参考资料,丰富文章内容。" +
18
- "找到合适素材后,用 scout.add_references 将引用关联到文章。", {
19
- keyword: z
20
- .string()
21
- .optional()
22
- .describe("搜索关键词,匹配标题和摘要内容"),
23
- category: z
24
- .string()
25
- .optional()
26
- .describe("分类标签筛选,如 'AI'、'LLM'、'Web Development' 等"),
27
- minScore: z
28
- .number()
29
- .min(0)
30
- .max(10)
31
- .optional()
32
- .describe("最低综合评分(0-10),默认 6。提高此值可获取更高质量的素材"),
33
- limit: z
34
- .number()
35
- .int()
36
- .positive()
37
- .max(30)
38
- .optional()
39
- .describe("返回数量限制,默认 10,最大 30"),
40
- since: z
41
- .string()
42
- .optional()
43
- .describe("最早采集时间(ISO 日期字符串),如 '2026-01-01'。用于获取近期素材"),
44
- }, async (params) => {
45
- try {
46
- const query = {};
47
- if (params.keyword)
48
- query.keyword = params.keyword;
49
- if (params.category)
50
- query.category = params.category;
51
- if (params.minScore !== undefined)
52
- query.minScore = params.minScore;
53
- if (params.limit !== undefined)
54
- query.limit = params.limit;
55
- if (params.since)
56
- query.since = params.since;
57
- const result = await api.get("/api/mcp/scout/items", query);
58
- return toToolText(result);
59
- }
60
- catch (error) {
61
- return toToolError(error);
62
- }
63
- });
64
- /**
65
- * scout.add_references - 为文章添加引用来源
66
- *
67
- * 将 Scout 素材或外部链接作为参考资料关联到文章。
68
- * 通常在写完文章后调用,自动将文中引用的 Scout 素材记录为结构化引用。
69
- */
70
- server.tool("scout.add_references", "为博客文章添加引用来源。将 Scout 素材或外部链接作为参考资料关联到文章,支持批量添加。" +
71
- "⚠️ 通常在 scout.search_items 获取素材并写入文章后调用。", {
72
- postId: z.string().uuid().describe("文章 ID(uuid)"),
73
- references: z
74
- .array(z.object({
75
- title: z.string().min(1).max(500).describe("引用标题"),
76
- url: z.string().url().describe("引用 URL"),
77
- summary: z.string().optional().describe("引用摘要/描述"),
78
- sourceName: z.string().max(255).optional().describe("来源名称,如 'HackerNews'、'Arxiv'"),
79
- scoutItemId: z.string().uuid().optional().describe("关联的 Scout 条目 ID(从 search_items 结果中获取)"),
80
- }))
81
- .min(1)
82
- .max(20)
83
- .describe("引用列表,最多 20 条"),
84
- }, async (params) => {
85
- try {
86
- const result = await api.post("/api/mcp/scout/references", {
87
- postId: params.postId,
88
- references: params.references,
89
- });
90
- return toToolText(result);
91
- }
92
- catch (error) {
93
- return toToolError(error);
94
- }
95
- });
96
- /**
97
- * scout.get_references - 获取文章的引用列表
98
- */
99
- server.tool("scout.get_references", "获取指定文章的所有引用来源列表。", {
100
- postId: z.string().uuid().describe("文章 ID(uuid)"),
101
- }, async (params) => {
102
- try {
103
- const result = await api.get("/api/mcp/scout/references", { postId: params.postId });
104
- return toToolText(result);
105
- }
106
- catch (error) {
107
- return toToolError(error);
108
- }
109
- });
110
- }
111
- //# sourceMappingURL=scout.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"scout.js","sourceRoot":"","sources":["../../src/tools/scout.ts"],"names":[],"mappings":"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"}
@@ -1,12 +0,0 @@
1
- import type { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
2
- import type { ApiClient } from "../api-client.js";
3
- /**
4
- * 系列管理 MCP 工具:series.list / get / create / update / delete / add_post / remove_post / reorder_posts
5
- *
6
- * 设计原则:
7
- * - 与 /api/mcp/series/** 路由一一对应
8
- * - 工具命名空间统一用 series.* 前缀
9
- * - 一篇文章可属于多个系列,系列内文章通过 orderIndex 排序
10
- */
11
- export declare function registerSeriesTools(server: McpServer, api: ApiClient): void;
12
- //# sourceMappingURL=series.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"series.d.ts","sourceRoot":"","sources":["../../src/tools/series.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACzE,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAKlD;;;;;;;GAOG;AACH,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,SAAS,EAAE,GAAG,EAAE,SAAS,GAAG,IAAI,CAmL3E"}
@@ -1,120 +0,0 @@
1
- import { z } from "zod";
2
- import { toolReplyHelpers } from "./posts.js";
3
- const { safe } = toolReplyHelpers;
4
- /**
5
- * 系列管理 MCP 工具:series.list / get / create / update / delete / add_post / remove_post / reorder_posts
6
- *
7
- * 设计原则:
8
- * - 与 /api/mcp/series/** 路由一一对应
9
- * - 工具命名空间统一用 series.* 前缀
10
- * - 一篇文章可属于多个系列,系列内文章通过 orderIndex 排序
11
- */
12
- export function registerSeriesTools(server, api) {
13
- // ─── series.list ──────────────────────────────────────────────────────
14
- server.registerTool("series.list", {
15
- title: "List series",
16
- description: "列出所有系列。传 published=true 时仅返回已发布系列(含文章计数);" +
17
- "不传则返回全部系列(管理视图,含草稿)。",
18
- inputSchema: {
19
- published: z
20
- .boolean()
21
- .describe("为 true 时仅返回已发布系列")
22
- .optional(),
23
- },
24
- }, async ({ published }) => safe(() => api.get("/api/mcp/series", {
25
- ...(published ? { published: "true" } : {}),
26
- })));
27
- // ─── series.get ───────────────────────────────────────────────────────
28
- server.registerTool("series.get", {
29
- title: "Get series detail",
30
- description: "获取单个系列的详情(含关联文章列表及顺序)。",
31
- inputSchema: {
32
- id: z.string().describe("系列 id (uuid)"),
33
- },
34
- }, async ({ id }) => safe(() => api.get(`/api/mcp/series/${encodeURIComponent(id)}`)));
35
- // ─── series.create ────────────────────────────────────────────────────
36
- server.registerTool("series.create", {
37
- title: "Create series",
38
- description: "创建一个新的文章系列。slug 必须是小写字母、数字和连字符组成。",
39
- inputSchema: {
40
- slug: z
41
- .string()
42
- .min(1)
43
- .max(255)
44
- .describe("URL 标识,如 'llm-to-agent-guide'"),
45
- title: z.string().min(1).max(255).describe("系列标题"),
46
- description: z
47
- .string()
48
- .max(5000)
49
- .describe("系列简介")
50
- .optional(),
51
- coverImage: z
52
- .string()
53
- .max(2048)
54
- .describe("封面图 URL")
55
- .optional(),
56
- isPublished: z
57
- .boolean()
58
- .describe("是否立即发布,默认 false")
59
- .optional(),
60
- },
61
- }, async (args) => safe(() => api.post("/api/mcp/series", args)));
62
- // ─── series.update ────────────────────────────────────────────────────
63
- server.registerTool("series.update", {
64
- title: "Update series",
65
- description: "更新系列元信息(标题、描述、封面、发布状态)。只传需要修改的字段。",
66
- inputSchema: {
67
- id: z.string().describe("系列 id (uuid)"),
68
- title: z.string().min(1).max(255).describe("系列标题").optional(),
69
- description: z.string().max(5000).describe("系列简介").optional(),
70
- coverImage: z.string().max(2048).describe("封面图 URL").optional(),
71
- isPublished: z.boolean().describe("发布状态").optional(),
72
- },
73
- }, async ({ id, ...rest }) => safe(() => api.patch(`/api/mcp/series/${encodeURIComponent(id)}`, rest)));
74
- // ─── series.delete ────────────────────────────────────────────────────
75
- server.registerTool("series.delete", {
76
- title: "Delete series",
77
- description: "删除系列。关联关系会被级联删除,但文章本身不会被删除。请慎重使用。",
78
- inputSchema: {
79
- id: z.string().describe("系列 id (uuid)"),
80
- },
81
- }, async ({ id }) => safe(() => api.delete(`/api/mcp/series/${encodeURIComponent(id)}`)));
82
- // ─── series.add_post ──────────────────────────────────────────────────
83
- server.registerTool("series.add_post", {
84
- title: "Add post to series",
85
- description: "将一篇文章添加到系列中。可选 orderIndex 指定位置," +
86
- "不传则自动追加到末尾。如果文章已在系列中,会更新其位置。",
87
- inputSchema: {
88
- seriesId: z.string().describe("系列 id (uuid)"),
89
- postId: z.string().describe("文章 id (uuid)"),
90
- orderIndex: z
91
- .number()
92
- .int()
93
- .min(0)
94
- .describe("在系列中的位置(从 0 开始)")
95
- .optional(),
96
- },
97
- }, async ({ seriesId, postId, orderIndex }) => safe(() => api.post(`/api/mcp/series/${encodeURIComponent(seriesId)}/posts`, { postId, orderIndex })));
98
- // ─── series.remove_post ───────────────────────────────────────────────
99
- server.registerTool("series.remove_post", {
100
- title: "Remove post from series",
101
- description: "将一篇文章从系列中移除。",
102
- inputSchema: {
103
- seriesId: z.string().describe("系列 id (uuid)"),
104
- postId: z.string().describe("文章 id (uuid)"),
105
- },
106
- }, async ({ seriesId, postId }) => safe(() => api.post(`/api/mcp/series/${encodeURIComponent(seriesId)}/posts/remove`, { postId })));
107
- // ─── series.reorder_posts ─────────────────────────────────────────────
108
- server.registerTool("series.reorder_posts", {
109
- title: "Reorder posts in series",
110
- description: "重新排序系列中的文章。传入按新顺序排列的文章 ID 数组。",
111
- inputSchema: {
112
- seriesId: z.string().describe("系列 id (uuid)"),
113
- postIds: z
114
- .array(z.string())
115
- .min(1)
116
- .describe("按新顺序排列的文章 ID 数组"),
117
- },
118
- }, async ({ seriesId, postIds }) => safe(() => api.post(`/api/mcp/series/${encodeURIComponent(seriesId)}/reorder`, { postIds })));
119
- }
120
- //# sourceMappingURL=series.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"series.js","sourceRoot":"","sources":["../../src/tools/series.ts"],"names":[],"mappings":"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"}
@@ -1,15 +0,0 @@
1
- import type { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
2
- /**
3
- * 语法能力描述工具:post.describe_syntax_capabilities
4
- *
5
- * 设计目的:
6
- * - 让 Agent 在一次调用中获取 ai-blog 全部 12 类高级 Markdown 语法的精确描述
7
- * - 包含每种语法的:功能说明、精确格式、参数约束、完整示例
8
- * - Agent 读完此输出即可正确生成任意高级 Markdown 内容,无需再逐个读取 resource
9
- *
10
- * 与 syntax-spec resource 的关系:
11
- * - resource 是按章节拆分的详细规范文档(需逐个读取,适合深入查阅)
12
- * - 本 tool 是一份"一次获取全景"的结构化速查表(适合 Agent 快速上手)
13
- */
14
- export declare function registerSyntaxCapabilitiesTools(server: McpServer): void;
15
- //# sourceMappingURL=syntax-capabilities.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"syntax-capabilities.d.ts","sourceRoot":"","sources":["../../src/tools/syntax-capabilities.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAGzE;;;;;;;;;;;GAWG;AACH,wBAAgB,+BAA+B,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CAgBvE"}