@agentdevjs/mcp 0.1.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.
@@ -0,0 +1,12 @@
1
+ /**
2
+ * MCP 工具渲染模板
3
+ */
4
+ /**
5
+ * MCP 工具调用渲染模板
6
+ */
7
+ declare const _default: {
8
+ readonly call: (args: any) => string;
9
+ readonly result: (data: any, success?: boolean) => string;
10
+ };
11
+
12
+ export { _default as default };
@@ -0,0 +1,48 @@
1
+ // src/feature/templates/mcp-tool.render.ts
2
+ function escapeHtml(text) {
3
+ const str = String(text);
4
+ const map = {
5
+ "&": "&",
6
+ "<": "&lt;",
7
+ ">": "&gt;",
8
+ '"': "&quot;",
9
+ "'": "&#39;"
10
+ };
11
+ return str.replace(/[&<>"']/g, (m) => map[m]);
12
+ }
13
+ function formatError(data) {
14
+ const text = typeof data === "object" ? JSON.stringify(data, null, 2) : String(data);
15
+ return `<div class="tool-error">
16
+ <svg viewBox="0 0 24 24" width="16" height="16" fill="currentColor"><path d="M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm1 15h-2v-2h2v2zm0-4h-2V7h2v6z"/></svg>
17
+ <span>${escapeHtml(text)}</span>
18
+ </div>`;
19
+ }
20
+ function renderJsonHighlight(data) {
21
+ const displayData = typeof data === "object" ? JSON.stringify(data, null, 2) : String(data);
22
+ const lines = displayData.split("\n");
23
+ return '<div class="code-read-container">' + lines.map((line, i) => {
24
+ let highlighted;
25
+ try {
26
+ highlighted = hljs.highlight(line, { language: "json" }).value;
27
+ } catch (e) {
28
+ highlighted = escapeHtml(line);
29
+ }
30
+ return '<div class="code-read-line"><span class="code-read-line-num">' + (i + 1) + '</span><span class="code-read-content">' + highlighted + "</span></div>";
31
+ }).join("") + "</div>";
32
+ }
33
+ var mcp_tool_render_default = {
34
+ call: (args) => {
35
+ return `<div class="bash-command">MCP Tool Call</div>`;
36
+ },
37
+ result: (data, success) => {
38
+ if (!success) return formatError(data);
39
+ if (typeof data === "object") {
40
+ return renderJsonHighlight(data);
41
+ }
42
+ return `<pre class="bash-output">${escapeHtml(String(data))}</pre>`;
43
+ }
44
+ };
45
+ export {
46
+ mcp_tool_render_default as default
47
+ };
48
+ //# sourceMappingURL=mcp-tool.render.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/feature/templates/mcp-tool.render.ts"],"sourcesContent":["/**\n * MCP 工具渲染模板\n */\n\nimport type { InlineRenderTemplate } from '@agentdevjs/core';\n\n/**\n * HTML 转义辅助函数\n */\nfunction escapeHtml(text: any): string {\n const str = String(text);\n const map: Record<string, string> = {\n '&': '&amp;',\n '<': '&lt;',\n '>': '&gt;',\n '\"': '&quot;',\n \"'\": '&#39;'\n };\n return str.replace(/[&<>\"']/g, m => map[m]);\n}\n\n/**\n * 格式化错误\n */\nfunction formatError(data: any): string {\n const text = typeof data === 'object' ? JSON.stringify(data, null, 2) : String(data);\n return `<div class=\"tool-error\">\n <svg viewBox=\"0 0 24 24\" width=\"16\" height=\"16\" fill=\"currentColor\"><path d=\"M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm1 15h-2v-2h2v2zm0-4h-2V7h2v6z\"/></svg>\n <span>${escapeHtml(text)}</span>\n </div>`;\n}\n\n/**\n * 使用 hljs 将 JSON 渲染为带行号的语法高亮\n */\nfunction renderJsonHighlight(data: any): string {\n const displayData = typeof data === 'object' ? JSON.stringify(data, null, 2) : String(data);\n const lines = displayData.split('\\n');\n return '<div class=\"code-read-container\">' + lines.map((line: string, i: number) => {\n let highlighted: string;\n try { highlighted = (hljs as any).highlight(line, { language: 'json' }).value; }\n catch (e) { highlighted = escapeHtml(line); }\n return '<div class=\"code-read-line\"><span class=\"code-read-line-num\">' + (i + 1) + '</span><span class=\"code-read-content\">' + highlighted + '</span></div>';\n }).join('') + '</div>';\n}\n\ndeclare const hljs: any;\n\n/**\n * MCP 工具调用渲染模板\n */\nexport default {\n call: (args: any) => {\n return `<div class=\"bash-command\">MCP Tool Call</div>`;\n },\n result: (data: any, success?: boolean) => {\n if (!success) return formatError(data);\n if (typeof data === 'object') {\n return renderJsonHighlight(data);\n }\n return `<pre class=\"bash-output\">${escapeHtml(String(data))}</pre>`;\n }\n} as const satisfies InlineRenderTemplate;\n"],"mappings":";AASA,SAAS,WAAW,MAAmB;AACrC,QAAM,MAAM,OAAO,IAAI;AACvB,QAAM,MAA8B;AAAA,IAClC,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AAAA,EACP;AACA,SAAO,IAAI,QAAQ,YAAY,OAAK,IAAI,CAAC,CAAC;AAC5C;AAKA,SAAS,YAAY,MAAmB;AACtC,QAAM,OAAO,OAAO,SAAS,WAAW,KAAK,UAAU,MAAM,MAAM,CAAC,IAAI,OAAO,IAAI;AACnF,SAAO;AAAA;AAAA,YAEG,WAAW,IAAI,CAAC;AAAA;AAE5B;AAKA,SAAS,oBAAoB,MAAmB;AAC9C,QAAM,cAAc,OAAO,SAAS,WAAW,KAAK,UAAU,MAAM,MAAM,CAAC,IAAI,OAAO,IAAI;AAC1F,QAAM,QAAQ,YAAY,MAAM,IAAI;AACpC,SAAO,sCAAsC,MAAM,IAAI,CAAC,MAAc,MAAc;AAClF,QAAI;AACJ,QAAI;AAAE,oBAAe,KAAa,UAAU,MAAM,EAAE,UAAU,OAAO,CAAC,EAAE;AAAA,IAAO,SACxE,GAAG;AAAE,oBAAc,WAAW,IAAI;AAAA,IAAG;AAC5C,WAAO,mEAAmE,IAAI,KAAK,4CAA4C,cAAc;AAAA,EAC/I,CAAC,EAAE,KAAK,EAAE,IAAI;AAChB;AAOA,IAAO,0BAAQ;AAAA,EACb,MAAM,CAAC,SAAc;AACnB,WAAO;AAAA,EACT;AAAA,EACA,QAAQ,CAAC,MAAW,YAAsB;AACxC,QAAI,CAAC,QAAS,QAAO,YAAY,IAAI;AACrC,QAAI,OAAO,SAAS,UAAU;AAC5B,aAAO,oBAAoB,IAAI;AAAA,IACjC;AACA,WAAO,4BAA4B,WAAW,OAAO,IAAI,CAAC,CAAC;AAAA,EAC7D;AACF;","names":[]}
@@ -0,0 +1,486 @@
1
+ import { Client } from '@modelcontextprotocol/client';
2
+ import { MCPServerConfig, Tool, ToolExecutionContext, ToolResultValue, MCPConfig, AgentFeature, PackageInfo, FeatureManifestDefinition, FeatureInitContext, ContextInjector } from '@agentdevjs/core';
3
+ export { MCPConfig, MCPHTTPConfig, MCPSSEConfig, MCPServerConfig, MCPSstdioConfig } from '@agentdevjs/core';
4
+
5
+ /**
6
+ * MCP 集成类型定义
7
+ *
8
+ * 契约类型(服务器配置形状)的权威定义在 @agentdevjs/core(core/mcp-contract),
9
+ * 此处 re-export 保持旧导入路径兼容;连接管理与调用的运行时类型定义在本包。
10
+ */
11
+
12
+ /**
13
+ * MCP 连接状态
14
+ */
15
+ declare const enum MCPConnectionState {
16
+ /** 未连接 */
17
+ Disconnected = "disconnected",
18
+ /** 连接中 */
19
+ Connecting = "connecting",
20
+ /** 已连接 */
21
+ Connected = "connected",
22
+ /** 连接错误 */
23
+ Error = "error"
24
+ }
25
+ /**
26
+ * MCP 连接信息
27
+ */
28
+ interface MCPConnectionInfo {
29
+ /** 服务器名称 */
30
+ name: string;
31
+ /** 连接状态 */
32
+ state: MCPConnectionState;
33
+ /** 连接时间 */
34
+ connectedAt?: number;
35
+ /** 最后错误 */
36
+ lastError?: string;
37
+ /** 工具数量 */
38
+ toolCount: number;
39
+ }
40
+ /**
41
+ * MCP 工具调用结果
42
+ */
43
+ interface MCPToolResult {
44
+ /** 是否成功 */
45
+ success: boolean;
46
+ /** 结果内容 */
47
+ content?: string;
48
+ /** 结构化数据 (如果可用) */
49
+ structuredContent?: any;
50
+ /** 错误信息 */
51
+ error?: string;
52
+ /** MCP 服务器名称 */
53
+ server: string;
54
+ /** 调用耗时 (毫秒) */
55
+ duration: number;
56
+ /** 图像数据 (如果有) */
57
+ images?: Array<{
58
+ data: string;
59
+ mimeType: string;
60
+ }>;
61
+ /** 资源数据 (如果有) */
62
+ resources?: Array<{
63
+ uri: string;
64
+ mimeType: string;
65
+ text?: string;
66
+ }>;
67
+ }
68
+ /**
69
+ * MCP 统计信息
70
+ */
71
+ interface MCPStatistics {
72
+ /** 总调用次数 */
73
+ totalCalls: number;
74
+ /** 成功调用次数 */
75
+ successfulCalls: number;
76
+ /** 失败调用次数 */
77
+ failedCalls: number;
78
+ /** 平均耗时 (毫秒) */
79
+ averageDuration: number;
80
+ /** 按服务器统计 */
81
+ byServer: Record<string, {
82
+ totalCalls: number;
83
+ successfulCalls: number;
84
+ failedCalls: number;
85
+ averageDuration: number;
86
+ }>;
87
+ }
88
+ /**
89
+ * MCP 客户端配置
90
+ */
91
+ interface MCPClientConfig {
92
+ /** 配置文件路径 */
93
+ configPath?: string;
94
+ /** 是否自动重连 */
95
+ autoReconnect?: boolean;
96
+ /** 重连间隔 (毫秒) */
97
+ reconnectInterval?: number;
98
+ /** 最大重连次数 */
99
+ maxReconnectAttempts?: number;
100
+ /** 日志级别 */
101
+ logLevel?: 'silent' | 'error' | 'warn' | 'info' | 'debug';
102
+ }
103
+
104
+ declare class MCPConnectionManager {
105
+ private connections;
106
+ private reconnectTimers;
107
+ private readonly logger;
108
+ /**
109
+ * 连接到 MCP 服务器
110
+ */
111
+ connectServer(name: string, config: MCPServerConfig): Promise<Client | any>;
112
+ /**
113
+ * 连接到 stdio MCP 服务器
114
+ */
115
+ private connectStdio;
116
+ /**
117
+ * 连接到 HTTP MCP 服务器
118
+ */
119
+ private connectSSE;
120
+ /**
121
+ * 连接到 HTTP MCP 服务器
122
+ */
123
+ private connectHTTP;
124
+ /**
125
+ * 断开服务器连接
126
+ */
127
+ disconnectServer(name: string): Promise<void>;
128
+ /**
129
+ * 断开所有连接
130
+ */
131
+ disconnectAll(): Promise<void>;
132
+ /**
133
+ * 列出服务器的所有工具
134
+ */
135
+ listTools(name: string): Promise<Array<{
136
+ name: string;
137
+ description?: string;
138
+ inputSchema?: any;
139
+ }>>;
140
+ callTool(name: string, serverName: string, args: Record<string, unknown>): Promise<{
141
+ content: any[];
142
+ isError?: boolean;
143
+ }>;
144
+ getConnectionInfo(name: string): MCPConnectionInfo | undefined;
145
+ /**
146
+ * 获取所有连接信息
147
+ */
148
+ getAllConnections(): MCPConnectionInfo[];
149
+ /**
150
+ * 检查连接状态
151
+ */
152
+ isConnected(name: string): boolean;
153
+ /**
154
+ * 获取服务器实例
155
+ */
156
+ getServer(name: string): Client | any | undefined;
157
+ /**
158
+ * 安排重连
159
+ */
160
+ private scheduleReconnect;
161
+ /**
162
+ * 日志输出
163
+ */
164
+ private log;
165
+ private handleProcessOutput;
166
+ private handleDirectResponse;
167
+ private sendDirectRequest;
168
+ private normalizeToolCallResponse;
169
+ private rejectAllPendingRequests;
170
+ private stopProcess;
171
+ dispose(): Promise<void>;
172
+ }
173
+
174
+ /**
175
+ * Gateway discovery client — discovers Claw-hosted MCP servers
176
+ * and converts them into standard MCPConfig entries for transparent mounting.
177
+ *
178
+ * When an agent runs under Claw, PROTOCLAW_SERVER_ORIGIN is set in the env.
179
+ * This module fetches the gateway discovery endpoint, filters to connected
180
+ * servers, and returns MCPConfig entries pointing to the gateway proxy URLs.
181
+ */
182
+
183
+ interface GatewayServerInfo {
184
+ id: string;
185
+ transport: string;
186
+ status: string;
187
+ toolCount: number;
188
+ url: string;
189
+ }
190
+ interface GatewayDiscoveryResult {
191
+ origin: string;
192
+ servers: GatewayServerInfo[];
193
+ }
194
+ /**
195
+ * Discover available gateway servers from Claw's MCP Gateway.
196
+ * Returns empty servers array if gateway is unavailable.
197
+ * Never throws — failures are silently swallowed.
198
+ */
199
+ declare function discoverGatewayServers(origin?: string, timeoutMs?: number): Promise<GatewayDiscoveryResult>;
200
+ /**
201
+ * Convert discovered gateway servers into MCPConfig server entries.
202
+ * Each gateway server becomes an HTTP transport pointing to the gateway proxy URL.
203
+ */
204
+ declare function gatewayServersToConfig(discovery: GatewayDiscoveryResult, excludeServers?: string[]): Record<string, MCPServerConfig>;
205
+
206
+ /**
207
+ * MCP Tool Adapter - 适配器模式实现
208
+ *
209
+ * 将 MCP 工具适配为现有 Tool 接口,保持架构一致性
210
+ */
211
+
212
+ /**
213
+ * 注册工具的简化接口
214
+ * 用于适配器包装
215
+ */
216
+ interface RegisteredToolLike {
217
+ name: string;
218
+ description?: string;
219
+ inputSchema?: any;
220
+ outputSchema?: any;
221
+ annotations?: any;
222
+ handler?: (args: any, context?: any) => Promise<any> | any;
223
+ enabled?: boolean;
224
+ }
225
+ /**
226
+ * MCP 工具适配器配置
227
+ */
228
+ interface MCPToolAdapterConfig {
229
+ /** MCP 服务器名称 */
230
+ serverName: string;
231
+ /** 是否为只读工具 */
232
+ readOnly?: boolean;
233
+ /** 渲染模板覆盖 */
234
+ render?: {
235
+ call?: string;
236
+ result?: string;
237
+ };
238
+ }
239
+ /**
240
+ * MCP 工具适配器
241
+ *
242
+ * 将 MCP RegisteredTool 适配为 Agent 的 Tool 接口
243
+ * 负责格式转换和生命周期管理
244
+ */
245
+ declare class MCPToolAdapter implements Tool {
246
+ private registeredTool;
247
+ private config;
248
+ readonly name: string;
249
+ readonly description: string;
250
+ readonly parameters?: Record<string, unknown>;
251
+ readonly render?: {
252
+ call?: string;
253
+ result?: string;
254
+ };
255
+ constructor(registeredTool: RegisteredToolLike, config: MCPToolAdapterConfig);
256
+ /**
257
+ * 执行 MCP 工具
258
+ */
259
+ execute(args: Record<string, unknown>, context?: ToolExecutionContext): Promise<ToolResultValue>;
260
+ /**
261
+ * 格式化 MCP 工具结果
262
+ */
263
+ private formatResult;
264
+ /**
265
+ * 格式化错误
266
+ */
267
+ private formatError;
268
+ /**
269
+ * 从 RegisteredToolLike 提取参数定义
270
+ *
271
+ * MCP 工具的 inputSchema 已经是 JSON Schema 格式
272
+ * 直接返回,不需要转换
273
+ */
274
+ private extractParameters;
275
+ }
276
+ /**
277
+ * 批量创建 MCP 工具适配器
278
+ */
279
+ declare function createMCPToolAdapters(registeredTools: RegisteredToolLike[], serverName: string, config?: Omit<MCPToolAdapterConfig, 'serverName'>): Tool[];
280
+
281
+ interface MCPDiscoveredTool {
282
+ name: string;
283
+ description?: string;
284
+ inputSchema?: any;
285
+ }
286
+ interface MCPToolCreationOptions {
287
+ name?: string;
288
+ description?: string;
289
+ render?: MCPToolAdapterConfig['render'];
290
+ transformArgs?: (args: Record<string, unknown>, context?: any) => Record<string, unknown>;
291
+ }
292
+ interface MCPToolDiscoveryOptions {
293
+ filter?: (tool: MCPDiscoveredTool) => boolean;
294
+ mapName?: (tool: MCPDiscoveredTool) => string;
295
+ render?: MCPToolAdapterConfig['render'];
296
+ transformArgs?: MCPToolCreationOptions['transformArgs'];
297
+ }
298
+ interface MCPDiscoveredToolSet {
299
+ client: MCPClient;
300
+ tools: Tool[];
301
+ }
302
+ declare function createDefaultMCPToolName(serverId: string, toolName: string): string;
303
+ declare class MCPClient {
304
+ readonly serverId: string;
305
+ private readonly config;
306
+ private readonly manager;
307
+ private connected;
308
+ constructor(serverId: string, config: MCPServerConfig, manager?: MCPConnectionManager);
309
+ connect(): Promise<void>;
310
+ listTools(): Promise<MCPDiscoveredTool[]>;
311
+ callTool(name: string, args: Record<string, unknown>): Promise<any>;
312
+ getConnectionManager(): MCPConnectionManager;
313
+ dispose(): Promise<void>;
314
+ }
315
+ declare function createMCPTool(client: MCPClient, tool: MCPDiscoveredTool, options?: MCPToolCreationOptions): Tool;
316
+ declare function createMCPToolsFromClient(client: MCPClient, options?: MCPToolDiscoveryOptions): Promise<Tool[]>;
317
+ declare function discoverMCPTools(serverId: string, config: MCPServerConfig, options?: MCPToolDiscoveryOptions, manager?: MCPConnectionManager): Promise<MCPDiscoveredToolSet>;
318
+
319
+ interface LoadAllMCPConfigsOptions {
320
+ loadDefaultDir?: boolean;
321
+ extraConfigFiles?: string[];
322
+ excludeServers?: string[];
323
+ }
324
+ declare function getDefaultMCPConfigDir(rootDir?: string): string;
325
+ declare function loadMCPConfigFromInput(input: string, rootDir?: string): MCPConfig | undefined;
326
+ declare function loadAllMCPConfigs(rootDir?: string, options?: LoadAllMCPConfigsOptions): MCPConfig | undefined;
327
+
328
+ interface MCPToolPatch {
329
+ enabled?: boolean;
330
+ name?: string;
331
+ description?: string;
332
+ render?: MCPToolAdapterConfig['render'];
333
+ transformArgs?: MCPToolCreationOptions['transformArgs'];
334
+ }
335
+ interface MCPToolManagementOptions {
336
+ include?: string[];
337
+ exclude?: string[];
338
+ disable?: string[];
339
+ rename?: Record<string, string>;
340
+ describe?: Record<string, string>;
341
+ render?: MCPToolAdapterConfig['render'];
342
+ toolRender?: Record<string, MCPToolAdapterConfig['render']>;
343
+ mapName?: (tool: MCPDiscoveredTool, client: MCPClient) => string;
344
+ transformArgs?: MCPToolCreationOptions['transformArgs'];
345
+ transform?: (tool: MCPDiscoveredTool, client: MCPClient) => MCPToolPatch | false | null | undefined;
346
+ }
347
+ interface MCPConfigMountOptions {
348
+ manager?: MCPConnectionManager;
349
+ clients?: Map<string, MCPClient>;
350
+ getServerOptions?: (serverId: string, serverConfig: MCPServerConfig) => MCPToolManagementOptions | undefined;
351
+ onError?: (serverId: string, error: unknown) => void;
352
+ }
353
+ interface MCPMountedToolSet {
354
+ client: MCPClient;
355
+ tools: Tool[];
356
+ }
357
+ interface MCPMountedConfigResult {
358
+ tools: Tool[];
359
+ clients: Map<string, MCPClient>;
360
+ }
361
+ declare function createManagedMCPToolsFromClient(client: MCPClient, options?: MCPToolManagementOptions): Promise<Tool[]>;
362
+ declare function discoverManagedMCPTools(serverId: string, config: MCPServerConfig, options?: MCPToolManagementOptions, manager?: MCPConnectionManager): Promise<MCPMountedToolSet>;
363
+ declare function mountMCPToolsFromConfig(config: MCPConfig, options?: MCPConfigMountOptions): Promise<MCPMountedConfigResult>;
364
+
365
+ /**
366
+ * MCP 工具渲染模板
367
+ *
368
+ * 定义 MCP 工具在 DebugHub 中的显示样式
369
+ */
370
+ /**
371
+ * MCP 工具渲染模板
372
+ */
373
+ declare const MCP_RENDER_TEMPLATES: {
374
+ /**
375
+ * MCP 工具调用显示
376
+ */
377
+ readonly 'mcp-tool': {
378
+ readonly call: (args: any) => string;
379
+ readonly result: (data: any, success?: boolean) => string;
380
+ };
381
+ /**
382
+ * MCP 结果 (简化版)
383
+ */
384
+ readonly 'mcp-result': {
385
+ readonly call: () => string;
386
+ readonly result: (data: any, success?: boolean) => string;
387
+ };
388
+ };
389
+ /**
390
+ * 获取 MCP 渲染模板
391
+ */
392
+ declare function getMCPRenderTemplate(toolName: string): string;
393
+ /**
394
+ * 渲染 MCP 工具调用
395
+ */
396
+ declare function renderMCPToolCall(serverName: string, toolName: string, args: Record<string, any>): string;
397
+ /**
398
+ * 渲染 MCP 工具结果
399
+ */
400
+ declare function renderMCPToolResult(result: any, success?: boolean): string;
401
+
402
+ /**
403
+ * MCP Feature - MCP 服务器连接和工具注册
404
+ *
405
+ * 将 MCP 集成从 Agent 核心中解耦,实现可外挂功能
406
+ *
407
+ * @example
408
+ * ```typescript
409
+ * // 自动扫描 .agentdev/mcps/*.json
410
+ * agent.use(new MCPFeature());
411
+ *
412
+ * // 从配置文件加载(默认路径 .agentdev/mcps)
413
+ * agent.use(new MCPFeature('github'));
414
+ *
415
+ * // 从指定路径加载配置
416
+ * agent.use(new MCPFeature('./path/to/mcps/github'));
417
+ *
418
+ * // 直接传入配置对象
419
+ * agent.use(new MCPFeature({ servers: { ... } }));
420
+ * ```
421
+ */
422
+
423
+ /**
424
+ * MCP Feature 配置类型
425
+ */
426
+ type MCPFeatureInput = MCPConfig | string;
427
+ interface MCPFeatureOptions {
428
+ excludeServers?: string[];
429
+ }
430
+ /**
431
+ * MCP Feature 实现
432
+ */
433
+ declare class MCPFeature implements AgentFeature {
434
+ readonly name = "mcp";
435
+ readonly source: string;
436
+ readonly description = "\u8FDE\u63A5 MCP \u670D\u52A1\u5668\u5E76\u628A\u53D1\u73B0\u5230\u7684\u8FDC\u7A0B\u80FD\u529B\u6302\u8F7D\u6210\u6807\u51C6\u5DE5\u5177\u3002";
437
+ private readonly manager;
438
+ private clients;
439
+ private readonly input?;
440
+ private readonly options;
441
+ private config?;
442
+ private mcpContext?;
443
+ /**
444
+ * 缓存包信息
445
+ */
446
+ private _packageInfo;
447
+ /**
448
+ * 获取包信息(统一打包方案)
449
+ */
450
+ getPackageInfo(): PackageInfo | null;
451
+ /**
452
+ * 获取模板名称列表(统一打包方案)
453
+ */
454
+ getTemplateNames(): string[];
455
+ constructor(input?: MCPFeatureInput, options?: MCPFeatureOptions);
456
+ getFeatureManifest(): FeatureManifestDefinition;
457
+ private resolveFeatureConfig;
458
+ private resolveRuntimeConfig;
459
+ /**
460
+ * 获取同步工具(无)
461
+ */
462
+ getTools(): Tool[];
463
+ /**
464
+ * 获取异步工具(需要连接 MCP 服务器)
465
+ */
466
+ getAsyncTools(ctx: FeatureInitContext): Promise<Tool[]>;
467
+ /**
468
+ * 声明上下文注入器
469
+ * 为所有 MCP 工具注入 _mcpContext
470
+ */
471
+ getContextInjectors(): Map<string | RegExp, ContextInjector>;
472
+ /**
473
+ * 清理钩子
474
+ */
475
+ onDestroy(): Promise<void>;
476
+ /**
477
+ * 设置 MCP 上下文(运行时注入)
478
+ */
479
+ setMCPContext(context: Record<string, unknown>): void;
480
+ /**
481
+ * 获取连接管理器(供外部使用)
482
+ */
483
+ getConnectionManager(): MCPConnectionManager | undefined;
484
+ }
485
+
486
+ export { type GatewayDiscoveryResult, type GatewayServerInfo, type LoadAllMCPConfigsOptions, MCPClient, type MCPClientConfig, type MCPConfigMountOptions, type MCPConnectionInfo, MCPConnectionManager, MCPConnectionState, type MCPDiscoveredTool, type MCPDiscoveredToolSet, MCPFeature, type MCPFeatureOptions, type MCPMountedConfigResult, type MCPMountedToolSet, type MCPStatistics, MCPToolAdapter, type MCPToolAdapterConfig, type MCPToolCreationOptions, type MCPToolDiscoveryOptions, type MCPToolManagementOptions, type MCPToolPatch, type MCPToolResult, MCP_RENDER_TEMPLATES, createDefaultMCPToolName, createMCPTool, createMCPToolAdapters, createMCPToolsFromClient, createManagedMCPToolsFromClient, discoverGatewayServers, discoverMCPTools, discoverManagedMCPTools, gatewayServersToConfig, getDefaultMCPConfigDir, getMCPRenderTemplate, loadAllMCPConfigs, loadMCPConfigFromInput, mountMCPToolsFromConfig, renderMCPToolCall, renderMCPToolResult };