mcp-probe-kit 1.15.0 → 2.0.0

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 (165) hide show
  1. package/README.md +113 -1642
  2. package/build/index.js +75 -42
  3. package/build/lib/elicitation-helper.d.ts +73 -0
  4. package/build/lib/elicitation-helper.js +130 -0
  5. package/build/lib/response.d.ts +32 -0
  6. package/build/lib/response.js +28 -0
  7. package/build/lib/tasks-manager.d.ts +116 -0
  8. package/build/lib/tasks-manager.js +217 -0
  9. package/build/lib/toolset-manager.d.ts +48 -0
  10. package/build/lib/toolset-manager.js +112 -0
  11. package/build/schemas/basic-tools.d.ts +0 -32
  12. package/build/schemas/basic-tools.js +0 -34
  13. package/build/schemas/code-analysis-tools.d.ts +0 -36
  14. package/build/schemas/code-analysis-tools.js +0 -38
  15. package/build/schemas/code-gen-tools.d.ts +0 -44
  16. package/build/schemas/code-gen-tools.js +0 -46
  17. package/build/schemas/doc-util-tools.d.ts +0 -54
  18. package/build/schemas/doc-util-tools.js +0 -58
  19. package/build/schemas/index.d.ts +0 -188
  20. package/build/schemas/orchestration-tools.d.ts +0 -22
  21. package/build/schemas/orchestration-tools.js +0 -23
  22. package/build/schemas/output/core-tools.d.ts +817 -0
  23. package/build/schemas/output/core-tools.js +421 -0
  24. package/build/schemas/output/generation-tools.d.ts +936 -0
  25. package/build/schemas/output/generation-tools.js +446 -0
  26. package/build/schemas/output/helper-tools.d.ts +243 -0
  27. package/build/schemas/output/helper-tools.js +138 -0
  28. package/build/schemas/output/index.d.ts +76 -0
  29. package/build/schemas/output/index.js +96 -0
  30. package/build/schemas/output/project-tools.d.ts +702 -0
  31. package/build/schemas/output/project-tools.js +339 -0
  32. package/build/schemas/output/ui-ux-tools.d.ts +469 -0
  33. package/build/schemas/output/ui-ux-tools.js +218 -0
  34. package/build/schemas/output/workflow-tools.d.ts +267 -0
  35. package/build/schemas/output/workflow-tools.js +179 -0
  36. package/build/schemas/structured-output.d.ts +1317 -0
  37. package/build/schemas/structured-output.js +1017 -0
  38. package/build/tools/__tests__/start_ui.integration.test.js +5 -5
  39. package/build/tools/__tests__/start_ui.property.test.js +11 -11
  40. package/build/tools/add_feature.d.ts +1 -13
  41. package/build/tools/add_feature.js +48 -13
  42. package/build/tools/analyze_project.js +57 -18
  43. package/build/tools/check_deps.d.ts +1 -13
  44. package/build/tools/check_deps.js +24 -15
  45. package/build/tools/code_review.d.ts +1 -13
  46. package/build/tools/code_review.js +19 -16
  47. package/build/tools/css_order.js +55 -55
  48. package/build/tools/debug.d.ts +1 -13
  49. package/build/tools/debug.js +18 -16
  50. package/build/tools/estimate.d.ts +1 -19
  51. package/build/tools/estimate.js +36 -6
  52. package/build/tools/fix_bug.d.ts +1 -13
  53. package/build/tools/fix_bug.js +24 -6
  54. package/build/tools/gen_mock.d.ts +1 -19
  55. package/build/tools/gen_mock.js +42 -227
  56. package/build/tools/genapi.d.ts +1 -13
  57. package/build/tools/genapi.js +18 -15
  58. package/build/tools/genchangelog.d.ts +1 -13
  59. package/build/tools/genchangelog.js +36 -212
  60. package/build/tools/gencommit.d.ts +1 -7
  61. package/build/tools/gencommit.js +21 -13
  62. package/build/tools/gendoc.d.ts +1 -13
  63. package/build/tools/gendoc.js +18 -15
  64. package/build/tools/genpr.d.ts +1 -13
  65. package/build/tools/genpr.js +28 -157
  66. package/build/tools/genreadme.d.ts +1 -13
  67. package/build/tools/genreadme.js +22 -587
  68. package/build/tools/gensql.d.ts +1 -13
  69. package/build/tools/gensql.js +24 -283
  70. package/build/tools/gentest.d.ts +1 -13
  71. package/build/tools/gentest.js +49 -16
  72. package/build/tools/index.d.ts +0 -10
  73. package/build/tools/index.js +0 -10
  74. package/build/tools/init_component_catalog.d.ts +3 -20
  75. package/build/tools/init_component_catalog.js +141 -786
  76. package/build/tools/init_project.d.ts +7 -13
  77. package/build/tools/init_project.js +54 -16
  78. package/build/tools/init_project_context.d.ts +1 -13
  79. package/build/tools/init_project_context.js +41 -14
  80. package/build/tools/perf.d.ts +1 -13
  81. package/build/tools/perf.js +18 -15
  82. package/build/tools/refactor.d.ts +1 -13
  83. package/build/tools/refactor.js +54 -15
  84. package/build/tools/render_ui.d.ts +2 -19
  85. package/build/tools/render_ui.js +201 -347
  86. package/build/tools/resolve_conflict.d.ts +1 -13
  87. package/build/tools/resolve_conflict.js +18 -15
  88. package/build/tools/security_scan.d.ts +1 -13
  89. package/build/tools/security_scan.js +16 -5
  90. package/build/tools/start_api.d.ts +7 -13
  91. package/build/tools/start_api.js +69 -157
  92. package/build/tools/start_bugfix.d.ts +1 -7
  93. package/build/tools/start_bugfix.js +38 -2
  94. package/build/tools/start_doc.d.ts +7 -13
  95. package/build/tools/start_doc.js +76 -169
  96. package/build/tools/start_feature.d.ts +1 -7
  97. package/build/tools/start_feature.js +54 -2
  98. package/build/tools/start_onboard.d.ts +1 -7
  99. package/build/tools/start_onboard.js +40 -2
  100. package/build/tools/start_ralph.d.ts +1 -7
  101. package/build/tools/start_ralph.js +88 -2
  102. package/build/tools/start_refactor.d.ts +7 -13
  103. package/build/tools/start_refactor.js +75 -148
  104. package/build/tools/start_release.d.ts +7 -13
  105. package/build/tools/start_release.js +56 -131
  106. package/build/tools/start_review.d.ts +7 -13
  107. package/build/tools/start_review.js +70 -142
  108. package/build/tools/start_ui.d.ts +1 -7
  109. package/build/tools/start_ui.js +98 -8
  110. package/build/tools/ui-ux-tools.d.ts +3 -39
  111. package/build/tools/ui-ux-tools.js +201 -125
  112. package/docs/data/tools.js +864 -0
  113. package/docs/index.html +594 -0
  114. package/docs/pages/all-tools.html +649 -0
  115. package/docs/pages/examples.html +564 -0
  116. package/docs/pages/getting-started.html +529 -0
  117. package/docs/pages/migration.html +308 -0
  118. package/docs/specs/algorithm-enhancement/roadmap.md +619 -0
  119. package/docs/specs/vnext-upgrade/00-OVERVIEW.md +258 -0
  120. package/docs/specs/vnext-upgrade/BETA_RELEASE_GUIDE.md +328 -0
  121. package/docs/specs/vnext-upgrade/GITHUB_DISCUSSION_TEMPLATE.md +236 -0
  122. package/docs/specs/vnext-upgrade/M8.9-PROGRESS-UPDATE.md +248 -0
  123. package/docs/specs/vnext-upgrade/PROGRESS-SUMMARY.md +195 -0
  124. package/docs/specs/vnext-upgrade/QUICK_REFERENCE.md +338 -0
  125. package/docs/specs/vnext-upgrade/README.md +125 -0
  126. package/docs/specs/vnext-upgrade/STATUS-UPDATE-2026-01-26.md +230 -0
  127. package/docs/specs/vnext-upgrade/TOOL_CLEANUP.md +343 -0
  128. package/docs/specs/vnext-upgrade/completed/M1-M2-SUMMARY.md +27 -0
  129. package/docs/specs/vnext-upgrade/completed/M3_COMPLETION_SUMMARY.md +273 -0
  130. package/docs/specs/vnext-upgrade/completed/M4-SUMMARY.md +19 -0
  131. package/docs/specs/vnext-upgrade/completed/M5_COMPLETION_SUMMARY.md +0 -0
  132. package/docs/specs/vnext-upgrade/completed/M8.1-SUMMARY.md +247 -0
  133. package/docs/specs/vnext-upgrade/completed/M8.2-SUMMARY.md +296 -0
  134. package/docs/specs/vnext-upgrade/completed/M8.3-SUMMARY.md +241 -0
  135. package/docs/specs/vnext-upgrade/completed/M8.3-TEST-SUMMARY.md +216 -0
  136. package/docs/specs/vnext-upgrade/completed/M8.4-SUMMARY.md +217 -0
  137. package/docs/specs/vnext-upgrade/completed/M8.4-TEST-SUMMARY.md +198 -0
  138. package/docs/specs/vnext-upgrade/completed/M8.5-SUMMARY.md +202 -0
  139. package/docs/specs/vnext-upgrade/completed/M8.5-TEST-SUMMARY.md +223 -0
  140. package/docs/specs/vnext-upgrade/completed/M8.6-SUMMARY.md +299 -0
  141. package/docs/specs/vnext-upgrade/completed/M8.8-TEST-SUMMARY.md +216 -0
  142. package/docs/specs/vnext-upgrade/completed/TOOL-CLEANUP-SUMMARY.md +210 -0
  143. package/docs/specs/vnext-upgrade/design.md +848 -0
  144. package/docs/specs/vnext-upgrade/requirements.md +221 -0
  145. package/docs/specs/vnext-upgrade/tasks/00-INDEX.md +335 -0
  146. package/docs/specs/vnext-upgrade/tasks/M8.1-SCHEMA-DEFINITION.md +300 -0
  147. package/docs/specs/vnext-upgrade/tasks/M8.2-P1-TOOLS.md +249 -0
  148. package/docs/specs/vnext-upgrade/tasks/M8.3-GENERATION-TOOLS.md +49 -0
  149. package/docs/specs/vnext-upgrade/tasks/M8.4-ORCHESTRATION-TOOLS.md +28 -0
  150. package/docs/specs/vnext-upgrade/tasks/M8.5-PROJECT-TOOLS.md +29 -0
  151. package/docs/specs/vnext-upgrade/tasks/M8.6-UI-TOOLS.md +66 -0
  152. package/docs/specs/vnext-upgrade/tasks/M8.7-HELPER-TOOLS.md +24 -0
  153. package/docs/specs/vnext-upgrade/tasks/M8.8-INTEGRATION-TESTS.md +90 -0
  154. package/docs/specs/vnext-upgrade/tasks/M8.9-DOCUMENTATION.md +103 -0
  155. package/docs/styles/docs.css +556 -0
  156. package/docs/styles/page.css +815 -0
  157. package/docs/vnext/MCP_2025-11-25_GUIDE.md +276 -0
  158. package/docs/vnext/vNext-PRD.md +488 -0
  159. package/package.json +4 -4
  160. package/build/utils/design-docs-generator.d.ts +0 -1
  161. package/build/utils/design-docs-generator.js +0 -1
  162. package/docs/BEST_PRACTICES.md +0 -1185
  163. package/docs/HOW_TO_TRIGGER.md +0 -1141
  164. package/docs/MCP-Probe-Kit-/344/275/277/347/224/250/346/211/213/345/206/214.html +0 -544
  165. package/docs/MCP-Probe-Kit-/344/275/277/347/224/250/346/211/213/345/206/214.md +0 -1447
package/build/index.js CHANGED
@@ -2,10 +2,10 @@
2
2
  import { Server } from "@modelcontextprotocol/sdk/server/index.js";
3
3
  import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js";
4
4
  import { CallToolRequestSchema, ListToolsRequestSchema, ListResourcesRequestSchema, ReadResourceRequestSchema, } from "@modelcontextprotocol/sdk/types.js";
5
- import { detectShell, initSetting, initProject, gencommit, debug, genapi, codeReview, gentest, genpr, checkDeps, gendoc, genchangelog, refactor, perf, fix, gensql, resolveConflict, genui, explain, convert, cssOrder, genreadme, split, analyzeProject, initProjectContext, addFeature, securityScan, fixBug, estimate, genMock, design2code, startFeature, startBugfix, startReview, startRelease, startRefactor, startOnboard, startApi, startDoc, genSkill, startRalph, interview, askUser, uiDesignSystem, initComponentCatalog, uiSearch, syncUiData, renderUi, startUi } from "./tools/index.js";
5
+ import { initProject, gencommit, debug, genapi, codeReview, gentest, genpr, checkDeps, gendoc, genchangelog, refactor, perf, gensql, resolveConflict, genreadme, analyzeProject, initProjectContext, addFeature, securityScan, fixBug, estimate, genMock, startFeature, startBugfix, startReview, startRelease, startRefactor, startOnboard, startApi, startDoc, startRalph, interview, askUser, uiDesignSystem, initComponentCatalog, uiSearch, syncUiData, renderUi, startUi } from "./tools/index.js";
6
6
  import { VERSION, NAME } from "./version.js";
7
7
  import { allToolSchemas } from "./schemas/index.js";
8
- import { getToolParamsGuide } from "./resources/index.js";
8
+ import { filterTools, getToolsetFromEnv } from "./lib/toolset-manager.js";
9
9
  // 创建MCP服务器实例
10
10
  const server = new Server({
11
11
  name: NAME,
@@ -16,10 +16,13 @@ const server = new Server({
16
16
  resources: {},
17
17
  },
18
18
  });
19
- // 定义工具列表 - 从 schemas 导入
19
+ // 定义工具列表 - 从 schemas 导入,并根据工具集过滤
20
20
  server.setRequestHandler(ListToolsRequestSchema, async () => {
21
+ const toolset = getToolsetFromEnv();
22
+ const filteredTools = filterTools(allToolSchemas, toolset);
23
+ console.error(`[MCP Probe Kit] 当前工具集: ${toolset} (${filteredTools.length}/${allToolSchemas.length} 个工具)`);
21
24
  return {
22
- tools: allToolSchemas,
25
+ tools: filteredTools,
23
26
  };
24
27
  });
25
28
  // 处理工具调用
@@ -27,10 +30,6 @@ server.setRequestHandler(CallToolRequestSchema, async (request) => {
27
30
  const { name, arguments: args } = request.params;
28
31
  try {
29
32
  switch (name) {
30
- case "detect_shell":
31
- return await detectShell(args);
32
- case "init_setting":
33
- return await initSetting(args);
34
33
  case "init_project":
35
34
  return await initProject(args);
36
35
  case "gencommit":
@@ -55,24 +54,12 @@ server.setRequestHandler(CallToolRequestSchema, async (request) => {
55
54
  return await refactor(args);
56
55
  case "perf":
57
56
  return await perf(args);
58
- case "fix":
59
- return await fix(args);
60
57
  case "gensql":
61
58
  return await gensql(args);
62
59
  case "resolve_conflict":
63
60
  return await resolveConflict(args);
64
- case "genui":
65
- return await genui(args);
66
- case "explain":
67
- return await explain(args);
68
- case "convert":
69
- return await convert(args);
70
- case "css_order":
71
- return await cssOrder(args);
72
61
  case "genreadme":
73
62
  return await genreadme(args);
74
- case "split":
75
- return await split(args);
76
63
  case "analyze_project":
77
64
  return await analyzeProject(args);
78
65
  case "init_project_context":
@@ -87,8 +74,6 @@ server.setRequestHandler(CallToolRequestSchema, async (request) => {
87
74
  return await estimate(args);
88
75
  case "gen_mock":
89
76
  return await genMock(args);
90
- case "design2code":
91
- return await design2code(args);
92
77
  // 智能编排工具
93
78
  case "start_feature":
94
79
  return await startFeature(args);
@@ -106,8 +91,6 @@ server.setRequestHandler(CallToolRequestSchema, async (request) => {
106
91
  return await startApi(args);
107
92
  case "start_doc":
108
93
  return await startDoc(args);
109
- case "gen_skill":
110
- return await genSkill(args);
111
94
  case "start_ralph":
112
95
  return await startRalph(args);
113
96
  // 访谈工具
@@ -155,12 +138,6 @@ server.setRequestHandler(ListResourcesRequestSchema, async () => {
155
138
  description: "MCP Probe Kit 服务器当前状态",
156
139
  mimeType: "application/json",
157
140
  },
158
- {
159
- uri: "probe://tool-params-guide",
160
- name: "工具参数指南",
161
- description: "所有工具的参数说明和使用示例,帮助 AI 正确传参",
162
- mimeType: "application/json",
163
- },
164
141
  ],
165
142
  };
166
143
  });
@@ -179,7 +156,7 @@ server.setRequestHandler(ReadResourceRequestSchema, async (request) => {
179
156
  serverInfo: {
180
157
  name: NAME,
181
158
  version: VERSION,
182
- description: "Cursor 开发增强工具集",
159
+ description: "AI 驱动的完整研发工具集",
183
160
  },
184
161
  toolCount: allToolSchemas.length,
185
162
  }, null, 2),
@@ -187,19 +164,75 @@ server.setRequestHandler(ReadResourceRequestSchema, async (request) => {
187
164
  ],
188
165
  };
189
166
  }
190
- if (uri === "probe://tool-params-guide") {
191
- return {
192
- contents: [
193
- {
194
- uri,
195
- mimeType: "application/json",
196
- text: JSON.stringify(getToolParamsGuide(VERSION), null, 2),
197
- },
198
- ],
199
- };
200
- }
201
167
  throw new Error(`未知资源: ${uri}`);
202
168
  });
169
+ // ============================================
170
+ // Tasks API 端点 - 暂时禁用,等待 MCP SDK 正式支持
171
+ // ============================================
172
+ // 注意:当前 MCP SDK 版本不支持自定义 method,Tasks API 功能暂时禁用
173
+ // 相关 issue: https://github.com/modelcontextprotocol/sdk/issues/xxx
174
+ /*
175
+ // 获取任务状态
176
+ server.setRequestHandler({ method: "tasks/get" } as any, async (request: any) => {
177
+ try {
178
+ const { taskId } = request.params;
179
+ const tasksManager = getTasksManager();
180
+ const task = tasksManager.getTask(taskId);
181
+
182
+ return {
183
+ task,
184
+ };
185
+ } catch (error) {
186
+ const errorMessage = error instanceof Error ? error.message : String(error);
187
+ throw new Error(`Failed to get task: ${errorMessage}`);
188
+ }
189
+ });
190
+
191
+ // 获取任务结果
192
+ server.setRequestHandler({ method: "tasks/result" } as any, async (request: any) => {
193
+ try {
194
+ const { taskId } = request.params;
195
+ const tasksManager = getTasksManager();
196
+ const result = tasksManager.getTaskResult(taskId);
197
+
198
+ return result;
199
+ } catch (error) {
200
+ const errorMessage = error instanceof Error ? error.message : String(error);
201
+ throw new Error(`Failed to get task result: ${errorMessage}`);
202
+ }
203
+ });
204
+
205
+ // 取消任务
206
+ server.setRequestHandler({ method: "tasks/cancel" } as any, async (request: any) => {
207
+ try {
208
+ const { taskId } = request.params;
209
+ const tasksManager = getTasksManager();
210
+ tasksManager.cancelTask(taskId);
211
+
212
+ return {
213
+ _meta: {},
214
+ };
215
+ } catch (error) {
216
+ const errorMessage = error instanceof Error ? error.message : String(error);
217
+ throw new Error(`Failed to cancel task: ${errorMessage}`);
218
+ }
219
+ });
220
+
221
+ // 列出所有任务
222
+ server.setRequestHandler({ method: "tasks/list" } as any, async () => {
223
+ try {
224
+ const tasksManager = getTasksManager();
225
+ const tasks = tasksManager.listTasks();
226
+
227
+ return {
228
+ tasks,
229
+ };
230
+ } catch (error) {
231
+ const errorMessage = error instanceof Error ? error.message : String(error);
232
+ throw new Error(`Failed to list tasks: ${errorMessage}`);
233
+ }
234
+ });
235
+ */
203
236
  // 启动服务器
204
237
  async function main() {
205
238
  const transport = new StdioServerTransport();
@@ -0,0 +1,73 @@
1
+ /**
2
+ * Elicitation 辅助模块
3
+ *
4
+ * MCP 2025-11-25 Elicitation 支持
5
+ * 提供标准化的用户交互能力
6
+ *
7
+ * 注意:当前版本通过文本方式实现交互(向后兼容)
8
+ * 未来可以升级为真正的 Elicitation API 调用
9
+ */
10
+ /**
11
+ * Elicitation 表单字段
12
+ */
13
+ export interface ElicitationField {
14
+ name: string;
15
+ type: 'string' | 'number' | 'boolean';
16
+ description?: string;
17
+ enum?: string[];
18
+ default?: any;
19
+ required?: boolean;
20
+ }
21
+ /**
22
+ * Elicitation 表单 Schema
23
+ */
24
+ export interface ElicitationFormSchema {
25
+ type: 'object';
26
+ properties: Record<string, {
27
+ type: string;
28
+ description?: string;
29
+ enum?: string[];
30
+ default?: any;
31
+ }>;
32
+ required?: string[];
33
+ }
34
+ /**
35
+ * 将字段列表转换为 JSON Schema
36
+ *
37
+ * @param fields - 字段列表
38
+ * @returns JSON Schema
39
+ */
40
+ export declare function fieldsToSchema(fields: ElicitationField[]): ElicitationFormSchema;
41
+ /**
42
+ * 生成文本格式的问题列表(回退方案)
43
+ *
44
+ * @param message - 提示消息
45
+ * @param fields - 字段列表
46
+ * @returns 格式化的文本
47
+ */
48
+ export declare function generateTextQuestions(message: string, fields: ElicitationField[]): string;
49
+ /**
50
+ * 检查客户端是否支持 Elicitation
51
+ *
52
+ * 注意:当前版本始终返回 false(使用文本回退)
53
+ * 未来可以通过 server.getClientCapabilities() 检测
54
+ *
55
+ * @returns 是否支持 Elicitation
56
+ */
57
+ export declare function supportsElicitation(): boolean;
58
+ /**
59
+ * 创建 Elicitation 请求(未来实现)
60
+ *
61
+ * @param message - 提示消息
62
+ * @param fields - 字段列表
63
+ * @returns Elicitation 结果
64
+ */
65
+ export declare function createElicitation(message: string, fields: ElicitationField[]): Promise<Record<string, any>>;
66
+ /**
67
+ * 智能提问:优先使用 Elicitation,回退到文本
68
+ *
69
+ * @param message - 提示消息
70
+ * @param fields - 字段列表
71
+ * @returns 格式化的文本(当前版本)
72
+ */
73
+ export declare function smartAsk(message: string, fields: ElicitationField[]): string;
@@ -0,0 +1,130 @@
1
+ /**
2
+ * Elicitation 辅助模块
3
+ *
4
+ * MCP 2025-11-25 Elicitation 支持
5
+ * 提供标准化的用户交互能力
6
+ *
7
+ * 注意:当前版本通过文本方式实现交互(向后兼容)
8
+ * 未来可以升级为真正的 Elicitation API 调用
9
+ */
10
+ /**
11
+ * 将字段列表转换为 JSON Schema
12
+ *
13
+ * @param fields - 字段列表
14
+ * @returns JSON Schema
15
+ */
16
+ export function fieldsToSchema(fields) {
17
+ const properties = {};
18
+ const required = [];
19
+ for (const field of fields) {
20
+ properties[field.name] = {
21
+ type: field.type,
22
+ description: field.description,
23
+ };
24
+ if (field.enum) {
25
+ properties[field.name].enum = field.enum;
26
+ }
27
+ if (field.default !== undefined) {
28
+ properties[field.name].default = field.default;
29
+ }
30
+ if (field.required) {
31
+ required.push(field.name);
32
+ }
33
+ }
34
+ return {
35
+ type: 'object',
36
+ properties,
37
+ required: required.length > 0 ? required : undefined,
38
+ };
39
+ }
40
+ /**
41
+ * 生成文本格式的问题列表(回退方案)
42
+ *
43
+ * @param message - 提示消息
44
+ * @param fields - 字段列表
45
+ * @returns 格式化的文本
46
+ */
47
+ export function generateTextQuestions(message, fields) {
48
+ const lines = [];
49
+ lines.push("# ❓ 需要你的输入");
50
+ lines.push("");
51
+ lines.push(message);
52
+ lines.push("");
53
+ lines.push("---");
54
+ lines.push("");
55
+ for (let i = 0; i < fields.length; i++) {
56
+ const field = fields[i];
57
+ const required = field.required ? "**[必答]**" : "_[可选]_";
58
+ lines.push(`### ${i + 1}. ${field.description || field.name} ${required}`);
59
+ lines.push("");
60
+ if (field.enum && field.enum.length > 0) {
61
+ lines.push("**可选项**:");
62
+ for (const option of field.enum) {
63
+ lines.push(`- ${option}`);
64
+ }
65
+ lines.push("");
66
+ }
67
+ if (field.default !== undefined) {
68
+ lines.push(`_默认值: ${field.default}_`);
69
+ lines.push("");
70
+ }
71
+ lines.push(`**字段名**: \`${field.name}\``);
72
+ lines.push(`**类型**: ${field.type}`);
73
+ lines.push("");
74
+ lines.push("**你的回答**: ");
75
+ lines.push("");
76
+ lines.push("---");
77
+ lines.push("");
78
+ }
79
+ lines.push("💡 **提示**: 请回答上述问题,我会根据你的回答继续工作。");
80
+ return lines.join("\n");
81
+ }
82
+ /**
83
+ * 检查客户端是否支持 Elicitation
84
+ *
85
+ * 注意:当前版本始终返回 false(使用文本回退)
86
+ * 未来可以通过 server.getClientCapabilities() 检测
87
+ *
88
+ * @returns 是否支持 Elicitation
89
+ */
90
+ export function supportsElicitation() {
91
+ // TODO: 实现真正的能力检测
92
+ // const capabilities = server.getClientCapabilities();
93
+ // return !!capabilities?.elicitation;
94
+ return false;
95
+ }
96
+ /**
97
+ * 创建 Elicitation 请求(未来实现)
98
+ *
99
+ * @param message - 提示消息
100
+ * @param fields - 字段列表
101
+ * @returns Elicitation 结果
102
+ */
103
+ export async function createElicitation(message, fields) {
104
+ // TODO: 实现真正的 Elicitation API 调用
105
+ // const schema = fieldsToSchema(fields);
106
+ // const result = await server.elicitInput({
107
+ // mode: 'form',
108
+ // message,
109
+ // requestedSchema: schema,
110
+ // });
111
+ // return result.data;
112
+ throw new Error('Elicitation not yet implemented. Use text-based fallback.');
113
+ }
114
+ /**
115
+ * 智能提问:优先使用 Elicitation,回退到文本
116
+ *
117
+ * @param message - 提示消息
118
+ * @param fields - 字段列表
119
+ * @returns 格式化的文本(当前版本)
120
+ */
121
+ export function smartAsk(message, fields) {
122
+ // 当前版本:始终使用文本回退
123
+ // 未来版本:检测客户端能力,优先使用 Elicitation
124
+ if (supportsElicitation()) {
125
+ // 未来:返回 Elicitation 请求
126
+ // return createElicitation(message, fields);
127
+ }
128
+ // 回退:返回文本格式
129
+ return generateTextQuestions(message, fields);
130
+ }
@@ -0,0 +1,32 @@
1
+ /**
2
+ * 统一输出封装
3
+ * 提供标准化的工具响应格式,支持结构化输出
4
+ */
5
+ /**
6
+ * 工具响应内容
7
+ */
8
+ export interface ToolContent {
9
+ type: 'text' | 'image' | 'resource';
10
+ text?: string;
11
+ data?: string;
12
+ mimeType?: string;
13
+ }
14
+ /**
15
+ * 工具响应结果
16
+ */
17
+ export interface ToolResponse {
18
+ content: ToolContent[];
19
+ isError?: boolean;
20
+ structuredContent?: any;
21
+ _meta?: Record<string, any>;
22
+ }
23
+ /**
24
+ * 返回结构化响应
25
+ * 同时包含人类可读的文本和机器可读的结构化数据
26
+ *
27
+ * @param text - 人类可读的文本内容
28
+ * @param structuredContent - 机器可读的结构化数据
29
+ * @param meta - 可选的元数据
30
+ * @returns 标准工具响应
31
+ */
32
+ export declare function okStructured(text: string, structuredContent: any, meta?: Record<string, any>): ToolResponse;
@@ -0,0 +1,28 @@
1
+ /**
2
+ * 统一输出封装
3
+ * 提供标准化的工具响应格式,支持结构化输出
4
+ */
5
+ /**
6
+ * 返回结构化响应
7
+ * 同时包含人类可读的文本和机器可读的结构化数据
8
+ *
9
+ * @param text - 人类可读的文本内容
10
+ * @param structuredContent - 机器可读的结构化数据
11
+ * @param meta - 可选的元数据
12
+ * @returns 标准工具响应
13
+ */
14
+ export function okStructured(text, structuredContent, meta) {
15
+ const response = {
16
+ content: [
17
+ {
18
+ type: 'text',
19
+ text,
20
+ },
21
+ ],
22
+ structuredContent,
23
+ };
24
+ if (meta) {
25
+ response._meta = meta;
26
+ }
27
+ return response;
28
+ }
@@ -0,0 +1,116 @@
1
+ /**
2
+ * Tasks 管理器
3
+ * 实现 MCP 2025-11-25 Tasks API
4
+ *
5
+ * 支持长时间运行的工具任务化执行:
6
+ * - 创建任务
7
+ * - 查询任务状态
8
+ * - 获取任务结果
9
+ * - 取消任务
10
+ * - 列出任务
11
+ */
12
+ /**
13
+ * 任务状态
14
+ */
15
+ export type TaskStatus = 'working' | 'completed' | 'failed' | 'cancelled';
16
+ /**
17
+ * 任务元数据
18
+ */
19
+ export interface TaskMetadata {
20
+ taskId: string;
21
+ status: TaskStatus;
22
+ statusMessage?: string;
23
+ createdAt: string;
24
+ lastUpdatedAt: string;
25
+ ttl?: number;
26
+ pollInterval?: number;
27
+ }
28
+ /**
29
+ * 任务结果
30
+ */
31
+ export interface TaskResult {
32
+ content: Array<{
33
+ type: string;
34
+ text?: string;
35
+ [key: string]: any;
36
+ }>;
37
+ isError?: boolean;
38
+ structuredContent?: any;
39
+ _meta?: Record<string, any>;
40
+ }
41
+ /**
42
+ * Tasks 管理器类
43
+ */
44
+ export declare class TasksManager {
45
+ private tasks;
46
+ private cleanupInterval?;
47
+ constructor();
48
+ /**
49
+ * 创建新任务
50
+ *
51
+ * @param ttl - 任务生存时间(毫秒),null 表示无限
52
+ * @param pollInterval - 建议的轮询间隔(毫秒)
53
+ * @returns 任务元数据
54
+ */
55
+ createTask(ttl?: number | null, pollInterval?: number): TaskMetadata;
56
+ /**
57
+ * 更新任务状态
58
+ *
59
+ * @param taskId - 任务 ID
60
+ * @param status - 新状态
61
+ * @param statusMessage - 状态消息
62
+ */
63
+ updateTaskStatus(taskId: string, status: TaskStatus, statusMessage?: string): void;
64
+ /**
65
+ * 设置任务结果
66
+ *
67
+ * @param taskId - 任务 ID
68
+ * @param result - 任务结果
69
+ */
70
+ setTaskResult(taskId: string, result: TaskResult): void;
71
+ /**
72
+ * 获取任务元数据
73
+ *
74
+ * @param taskId - 任务 ID
75
+ * @returns 任务元数据
76
+ */
77
+ getTask(taskId: string): TaskMetadata;
78
+ /**
79
+ * 获取任务结果
80
+ *
81
+ * @param taskId - 任务 ID
82
+ * @returns 任务结果
83
+ */
84
+ getTaskResult(taskId: string): TaskResult;
85
+ /**
86
+ * 取消任务
87
+ *
88
+ * @param taskId - 任务 ID
89
+ */
90
+ cancelTask(taskId: string): void;
91
+ /**
92
+ * 列出所有任务
93
+ *
94
+ * @returns 任务元数据列表
95
+ */
96
+ listTasks(): TaskMetadata[];
97
+ /**
98
+ * 执行异步任务
99
+ *
100
+ * @param taskId - 任务 ID
101
+ * @param executor - 任务执行函数
102
+ */
103
+ executeTask(taskId: string, executor: () => Promise<TaskResult>): Promise<void>;
104
+ /**
105
+ * 清理过期任务
106
+ */
107
+ private cleanupExpiredTasks;
108
+ /**
109
+ * 销毁管理器
110
+ */
111
+ destroy(): void;
112
+ }
113
+ /**
114
+ * 获取全局 Tasks 管理器实例
115
+ */
116
+ export declare function getTasksManager(): TasksManager;