@n0ts123/mcplink-core 0.0.1
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 +424 -0
- package/dist/index.d.ts +456 -0
- package/dist/index.js +1410 -0
- package/dist/index.js.map +1 -0
- package/package.json +67 -0
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,456 @@
|
|
|
1
|
+
import { LanguageModel } from 'ai';
|
|
2
|
+
|
|
3
|
+
/** MCP 服务器配置 - stdio 模式 */
|
|
4
|
+
interface MCPServerConfigStdio {
|
|
5
|
+
type?: 'stdio';
|
|
6
|
+
/** 启动命令 */
|
|
7
|
+
command: string;
|
|
8
|
+
/** 命令参数 */
|
|
9
|
+
args?: string[];
|
|
10
|
+
/** 环境变量 */
|
|
11
|
+
env?: Record<string, string>;
|
|
12
|
+
}
|
|
13
|
+
/** MCP 服务器配置 - SSE 模式 */
|
|
14
|
+
interface MCPServerConfigSSE {
|
|
15
|
+
type: 'sse';
|
|
16
|
+
/** SSE 服务地址 */
|
|
17
|
+
url: string;
|
|
18
|
+
/** 请求头 */
|
|
19
|
+
headers?: Record<string, string>;
|
|
20
|
+
}
|
|
21
|
+
/** MCP 服务器配置 */
|
|
22
|
+
type MCPServerConfig = MCPServerConfigStdio | MCPServerConfigSSE;
|
|
23
|
+
/** MCPLink 配置 */
|
|
24
|
+
interface MCPLinkConfig {
|
|
25
|
+
/** AI 模型实例 (Vercel AI SDK) */
|
|
26
|
+
model: LanguageModel;
|
|
27
|
+
/** 模型名称(用于自动检测是否支持原生工具调用) */
|
|
28
|
+
modelName?: string;
|
|
29
|
+
/** MCP 服务器配置 */
|
|
30
|
+
mcpServers?: Record<string, MCPServerConfig>;
|
|
31
|
+
/** 系统提示词 */
|
|
32
|
+
systemPrompt?: string;
|
|
33
|
+
/** 最大迭代次数 (防止无限循环) */
|
|
34
|
+
maxIterations?: number;
|
|
35
|
+
/** 是否允许并行工具调用 */
|
|
36
|
+
parallelToolCalls?: boolean;
|
|
37
|
+
/**
|
|
38
|
+
* 是否使用基于 Prompt 的工具调用
|
|
39
|
+
* - true: 使用 prompt 让模型输出特定格式来调用工具(支持所有模型)
|
|
40
|
+
* - false: 使用原生 function calling(需要模型支持)
|
|
41
|
+
* - 'auto': 自动检测(默认)
|
|
42
|
+
*/
|
|
43
|
+
usePromptBasedTools?: boolean | 'auto';
|
|
44
|
+
}
|
|
45
|
+
/** 工具调用 */
|
|
46
|
+
interface ToolCall {
|
|
47
|
+
id: string;
|
|
48
|
+
name: string;
|
|
49
|
+
arguments: Record<string, unknown>;
|
|
50
|
+
}
|
|
51
|
+
/** 工具结果 */
|
|
52
|
+
interface ToolResult {
|
|
53
|
+
toolCallId: string;
|
|
54
|
+
toolName: string;
|
|
55
|
+
result: unknown;
|
|
56
|
+
isError?: boolean;
|
|
57
|
+
duration?: number;
|
|
58
|
+
}
|
|
59
|
+
/** 消息角色 */
|
|
60
|
+
type MessageRole = 'system' | 'user' | 'assistant' | 'tool';
|
|
61
|
+
/** 消息 */
|
|
62
|
+
interface Message {
|
|
63
|
+
role: MessageRole;
|
|
64
|
+
content: string;
|
|
65
|
+
toolCalls?: ToolCall[];
|
|
66
|
+
toolResults?: ToolResult[];
|
|
67
|
+
}
|
|
68
|
+
/** 事件类型 */
|
|
69
|
+
declare enum MCPLinkEventType {
|
|
70
|
+
/** AI 开始思考 */
|
|
71
|
+
THINKING_START = "thinking_start",
|
|
72
|
+
/** AI 思考内容 (流式) */
|
|
73
|
+
THINKING_DELTA = "thinking_delta",
|
|
74
|
+
/** AI 思考结束 */
|
|
75
|
+
THINKING_END = "thinking_end",
|
|
76
|
+
/** AI 思考内容(完整,用于工具调用时展示) */
|
|
77
|
+
THINKING_CONTENT = "thinking_content",
|
|
78
|
+
/** AI 开始回复 */
|
|
79
|
+
TEXT_START = "text_start",
|
|
80
|
+
/** AI 回复内容 (流式) */
|
|
81
|
+
TEXT_DELTA = "text_delta",
|
|
82
|
+
/** AI 回复结束 */
|
|
83
|
+
TEXT_END = "text_end",
|
|
84
|
+
/** 开始调用工具 */
|
|
85
|
+
TOOL_CALL_START = "tool_call_start",
|
|
86
|
+
/** 工具参数 (流式) */
|
|
87
|
+
TOOL_CALL_DELTA = "tool_call_delta",
|
|
88
|
+
/** 工具调用参数完成 */
|
|
89
|
+
TOOL_CALL_END = "tool_call_end",
|
|
90
|
+
/** 工具正在执行 */
|
|
91
|
+
TOOL_EXECUTING = "tool_executing",
|
|
92
|
+
/** 工具返回结果 */
|
|
93
|
+
TOOL_RESULT = "tool_result",
|
|
94
|
+
/** 开始新一轮迭代 */
|
|
95
|
+
ITERATION_START = "iteration_start",
|
|
96
|
+
/** 迭代结束 */
|
|
97
|
+
ITERATION_END = "iteration_end",
|
|
98
|
+
/** 全部完成 */
|
|
99
|
+
COMPLETE = "complete",
|
|
100
|
+
/** 发生错误 */
|
|
101
|
+
ERROR = "error",
|
|
102
|
+
/** TODO 列表开始 */
|
|
103
|
+
TODO_START = "todo_start",
|
|
104
|
+
/** 添加 TODO 项 */
|
|
105
|
+
TODO_ITEM_ADD = "todo_item_add",
|
|
106
|
+
/** 更新 TODO 项状态 */
|
|
107
|
+
TODO_ITEM_UPDATE = "todo_item_update",
|
|
108
|
+
/** TODO 列表完成 */
|
|
109
|
+
TODO_END = "todo_end"
|
|
110
|
+
}
|
|
111
|
+
/** 事件数据 */
|
|
112
|
+
interface MCPLinkEventData {
|
|
113
|
+
content?: string;
|
|
114
|
+
toolName?: string;
|
|
115
|
+
toolArgs?: Record<string, unknown>;
|
|
116
|
+
toolResult?: unknown;
|
|
117
|
+
toolCallId?: string;
|
|
118
|
+
duration?: number;
|
|
119
|
+
iteration?: number;
|
|
120
|
+
maxIterations?: number;
|
|
121
|
+
totalIterations?: number;
|
|
122
|
+
totalDuration?: number;
|
|
123
|
+
argsTextDelta?: string;
|
|
124
|
+
isError?: boolean;
|
|
125
|
+
error?: Error;
|
|
126
|
+
todoId?: string;
|
|
127
|
+
todoTitle?: string;
|
|
128
|
+
todoItemId?: string;
|
|
129
|
+
todoItemContent?: string;
|
|
130
|
+
todoItemStatus?: TodoItemStatus;
|
|
131
|
+
todoItemResult?: string;
|
|
132
|
+
}
|
|
133
|
+
/** 事件 */
|
|
134
|
+
interface MCPLinkEvent {
|
|
135
|
+
type: MCPLinkEventType;
|
|
136
|
+
timestamp: number;
|
|
137
|
+
data: MCPLinkEventData;
|
|
138
|
+
}
|
|
139
|
+
/** 对话回调选项 */
|
|
140
|
+
interface ChatCallbacks {
|
|
141
|
+
/** AI 思考内容 */
|
|
142
|
+
onThinking?: (content: string) => void;
|
|
143
|
+
/** 开始调用工具 */
|
|
144
|
+
onToolCallStart?: (toolName: string, args: Record<string, unknown>) => void;
|
|
145
|
+
/** 工具返回结果 */
|
|
146
|
+
onToolResult?: (toolName: string, result: unknown, duration: number) => void;
|
|
147
|
+
/** AI 输出文本 (流式) */
|
|
148
|
+
onTextDelta?: (delta: string) => void;
|
|
149
|
+
/** 迭代开始 */
|
|
150
|
+
onIterationStart?: (iteration: number) => void;
|
|
151
|
+
/** 迭代结束 */
|
|
152
|
+
onIterationEnd?: (iteration: number) => void;
|
|
153
|
+
/** 发生错误 */
|
|
154
|
+
onError?: (error: Error) => void;
|
|
155
|
+
/** TODO 列表开始 */
|
|
156
|
+
onTodoStart?: (todoId: string, title: string) => void;
|
|
157
|
+
/** TODO 项添加 */
|
|
158
|
+
onTodoItemAdd?: (todoId: string, item: TodoItem) => void;
|
|
159
|
+
/** TODO 项更新 */
|
|
160
|
+
onTodoItemUpdate?: (todoId: string, itemId: string, status: TodoItemStatus, result?: string) => void;
|
|
161
|
+
/** TODO 列表完成 */
|
|
162
|
+
onTodoEnd?: (todoId: string) => void;
|
|
163
|
+
}
|
|
164
|
+
/** 对话结果 */
|
|
165
|
+
interface ChatResult {
|
|
166
|
+
/** 最终回复内容 */
|
|
167
|
+
content: string;
|
|
168
|
+
/** 执行过的工具调用记录 */
|
|
169
|
+
toolCalls: Array<{
|
|
170
|
+
name: string;
|
|
171
|
+
arguments: Record<string, unknown>;
|
|
172
|
+
result: unknown;
|
|
173
|
+
duration: number;
|
|
174
|
+
}>;
|
|
175
|
+
/** 完整消息历史 */
|
|
176
|
+
messages: Message[];
|
|
177
|
+
/** Token 使用量 */
|
|
178
|
+
usage: {
|
|
179
|
+
promptTokens: number;
|
|
180
|
+
completionTokens: number;
|
|
181
|
+
totalTokens: number;
|
|
182
|
+
};
|
|
183
|
+
/** 总迭代次数 */
|
|
184
|
+
iterations: number;
|
|
185
|
+
/** 总耗时 (ms) */
|
|
186
|
+
duration: number;
|
|
187
|
+
}
|
|
188
|
+
/** MCP 工具定义 */
|
|
189
|
+
interface MCPTool {
|
|
190
|
+
name: string;
|
|
191
|
+
description: string;
|
|
192
|
+
inputSchema: {
|
|
193
|
+
type: 'object';
|
|
194
|
+
properties?: Record<string, unknown>;
|
|
195
|
+
required?: string[];
|
|
196
|
+
};
|
|
197
|
+
}
|
|
198
|
+
/** MCP 服务器状态 */
|
|
199
|
+
interface MCPServerStatus {
|
|
200
|
+
id: string;
|
|
201
|
+
name: string;
|
|
202
|
+
config: MCPServerConfig;
|
|
203
|
+
status: 'stopped' | 'starting' | 'running' | 'error';
|
|
204
|
+
tools: MCPTool[];
|
|
205
|
+
error?: string;
|
|
206
|
+
}
|
|
207
|
+
/** TODO 项状态 */
|
|
208
|
+
type TodoItemStatus = 'pending' | 'in_progress' | 'completed' | 'failed';
|
|
209
|
+
/** TODO 项 */
|
|
210
|
+
interface TodoItem {
|
|
211
|
+
/** 唯一标识 */
|
|
212
|
+
id: string;
|
|
213
|
+
/** 任务内容 */
|
|
214
|
+
content: string;
|
|
215
|
+
/** 当前状态 */
|
|
216
|
+
status: TodoItemStatus;
|
|
217
|
+
/** 完成后的结果摘要 */
|
|
218
|
+
result?: string;
|
|
219
|
+
}
|
|
220
|
+
/** TODO 列表 */
|
|
221
|
+
interface TodoList {
|
|
222
|
+
/** 唯一标识 */
|
|
223
|
+
id: string;
|
|
224
|
+
/** 整体任务标题 */
|
|
225
|
+
title: string;
|
|
226
|
+
/** 任务项列表 */
|
|
227
|
+
items: TodoItem[];
|
|
228
|
+
/** 创建时间 */
|
|
229
|
+
createdAt: number;
|
|
230
|
+
}
|
|
231
|
+
|
|
232
|
+
/**
|
|
233
|
+
* MCPLink 主类
|
|
234
|
+
* AI Agent 工具调用框架的入口
|
|
235
|
+
*/
|
|
236
|
+
declare class MCPLink {
|
|
237
|
+
private model;
|
|
238
|
+
private mcpManager;
|
|
239
|
+
private agent;
|
|
240
|
+
private promptBasedAgent;
|
|
241
|
+
private config;
|
|
242
|
+
private initialized;
|
|
243
|
+
private detectedNativeSupport;
|
|
244
|
+
constructor(config: MCPLinkConfig);
|
|
245
|
+
/**
|
|
246
|
+
* 初始化 - 连接所有 MCP 服务器
|
|
247
|
+
*/
|
|
248
|
+
initialize(): Promise<void>;
|
|
249
|
+
/**
|
|
250
|
+
* 关闭 - 断开所有 MCP 服务器连接
|
|
251
|
+
*/
|
|
252
|
+
close(): Promise<void>;
|
|
253
|
+
/**
|
|
254
|
+
* 发起对话
|
|
255
|
+
*/
|
|
256
|
+
chat(message: string, callbacks?: ChatCallbacks): Promise<ChatResult>;
|
|
257
|
+
/**
|
|
258
|
+
* 流式对话
|
|
259
|
+
* @param message 用户消息
|
|
260
|
+
* @param options 可选参数
|
|
261
|
+
* @param options.allowedTools 允许使用的工具名称列表
|
|
262
|
+
* @param options.history 历史消息列表
|
|
263
|
+
*/
|
|
264
|
+
chatStream(message: string, options?: {
|
|
265
|
+
allowedTools?: string[];
|
|
266
|
+
history?: Array<{
|
|
267
|
+
role: 'user' | 'assistant';
|
|
268
|
+
content: string;
|
|
269
|
+
}>;
|
|
270
|
+
}): AsyncGenerator<MCPLinkEvent>;
|
|
271
|
+
/**
|
|
272
|
+
* 获取当前使用的模式
|
|
273
|
+
*/
|
|
274
|
+
getToolCallingMode(): 'native' | 'prompt-based';
|
|
275
|
+
/**
|
|
276
|
+
* 添加 MCP 服务器
|
|
277
|
+
*/
|
|
278
|
+
addMCPServer(id: string, config: MCPServerConfig): void;
|
|
279
|
+
/**
|
|
280
|
+
* 移除 MCP 服务器
|
|
281
|
+
*/
|
|
282
|
+
removeMCPServer(id: string): Promise<void>;
|
|
283
|
+
/**
|
|
284
|
+
* 启动指定 MCP 服务器
|
|
285
|
+
*/
|
|
286
|
+
startMCPServer(id: string): Promise<void>;
|
|
287
|
+
/**
|
|
288
|
+
* 停止指定 MCP 服务器
|
|
289
|
+
*/
|
|
290
|
+
stopMCPServer(id: string): Promise<void>;
|
|
291
|
+
/**
|
|
292
|
+
* 获取所有 MCP 服务器状态
|
|
293
|
+
*/
|
|
294
|
+
getMCPServerStatuses(): MCPServerStatus[];
|
|
295
|
+
/**
|
|
296
|
+
* 获取所有可用工具
|
|
297
|
+
*/
|
|
298
|
+
getTools(): MCPTool[];
|
|
299
|
+
/**
|
|
300
|
+
* 手动调用工具
|
|
301
|
+
*/
|
|
302
|
+
callTool(toolName: string, args: Record<string, unknown>): Promise<unknown>;
|
|
303
|
+
/**
|
|
304
|
+
* 更新系统提示词
|
|
305
|
+
*/
|
|
306
|
+
setSystemPrompt(prompt: string): void;
|
|
307
|
+
/**
|
|
308
|
+
* 更新 AI 模型
|
|
309
|
+
*/
|
|
310
|
+
setModel(model: LanguageModel): void;
|
|
311
|
+
}
|
|
312
|
+
|
|
313
|
+
/**
|
|
314
|
+
* MCP 管理器
|
|
315
|
+
* 负责管理多个 MCP 服务器的连接、工具发现和调用
|
|
316
|
+
*/
|
|
317
|
+
declare class MCPManager {
|
|
318
|
+
private servers;
|
|
319
|
+
/**
|
|
320
|
+
* 添加 MCP 服务器配置
|
|
321
|
+
*/
|
|
322
|
+
addServer(id: string, config: MCPServerConfig): void;
|
|
323
|
+
/**
|
|
324
|
+
* 启动 MCP 服务器
|
|
325
|
+
*/
|
|
326
|
+
startServer(id: string): Promise<void>;
|
|
327
|
+
/**
|
|
328
|
+
* 停止 MCP 服务器
|
|
329
|
+
*/
|
|
330
|
+
stopServer(id: string): Promise<void>;
|
|
331
|
+
/**
|
|
332
|
+
* 启动所有已配置的服务器
|
|
333
|
+
*/
|
|
334
|
+
startAll(): Promise<void>;
|
|
335
|
+
/**
|
|
336
|
+
* 停止所有服务器
|
|
337
|
+
*/
|
|
338
|
+
stopAll(): Promise<void>;
|
|
339
|
+
/**
|
|
340
|
+
* 获取所有可用的工具
|
|
341
|
+
*/
|
|
342
|
+
getAllTools(): MCPTool[];
|
|
343
|
+
/**
|
|
344
|
+
* 调用工具
|
|
345
|
+
*/
|
|
346
|
+
callTool(toolName: string, args: Record<string, unknown>): Promise<unknown>;
|
|
347
|
+
/**
|
|
348
|
+
* 获取所有服务器状态
|
|
349
|
+
*/
|
|
350
|
+
getServerStatuses(): MCPServerStatus[];
|
|
351
|
+
/**
|
|
352
|
+
* 移除服务器
|
|
353
|
+
*/
|
|
354
|
+
removeServer(id: string): Promise<void>;
|
|
355
|
+
}
|
|
356
|
+
|
|
357
|
+
/**
|
|
358
|
+
* 默认用户提示词
|
|
359
|
+
* 这只是用户自定义的部分,核心工具调用逻辑已内置到代码中
|
|
360
|
+
*/
|
|
361
|
+
declare const DEFAULT_SYSTEM_PROMPT = "\u4F60\u662F\u4E00\u4E2A\u667A\u80FD\u52A9\u624B\uFF0C\u8BF7\u4F7F\u7528\u4E2D\u6587\u56DE\u590D\u3002";
|
|
362
|
+
/**
|
|
363
|
+
* Agent 引擎
|
|
364
|
+
* 负责执行 AI 对话循环,处理工具调用
|
|
365
|
+
*/
|
|
366
|
+
declare class Agent {
|
|
367
|
+
private model;
|
|
368
|
+
private mcpManager;
|
|
369
|
+
private systemPrompt;
|
|
370
|
+
private maxIterations;
|
|
371
|
+
constructor(model: LanguageModel, mcpManager: MCPManager, options?: {
|
|
372
|
+
systemPrompt?: string;
|
|
373
|
+
maxIterations?: number;
|
|
374
|
+
});
|
|
375
|
+
/**
|
|
376
|
+
* 将 MCP 工具转换为 Vercel AI SDK 格式
|
|
377
|
+
*/
|
|
378
|
+
private convertMCPToolsToAITools;
|
|
379
|
+
/**
|
|
380
|
+
* 简单的 JSON Schema 到 Zod 转换
|
|
381
|
+
*/
|
|
382
|
+
private jsonSchemaToZod;
|
|
383
|
+
/**
|
|
384
|
+
* 执行对话
|
|
385
|
+
*/
|
|
386
|
+
chat(userMessage: string, callbacks?: ChatCallbacks): Promise<ChatResult>;
|
|
387
|
+
/**
|
|
388
|
+
* 流式对话 - 返回事件生成器
|
|
389
|
+
* @param userMessage 用户消息
|
|
390
|
+
* @param options 可选参数
|
|
391
|
+
* @param options.allowedTools 允许使用的工具名称列表,为空或不传则使用所有工具
|
|
392
|
+
* @param options.history 历史消息列表
|
|
393
|
+
*/
|
|
394
|
+
chatStream(userMessage: string, options?: {
|
|
395
|
+
allowedTools?: string[];
|
|
396
|
+
history?: Array<{
|
|
397
|
+
role: 'user' | 'assistant';
|
|
398
|
+
content: string;
|
|
399
|
+
}>;
|
|
400
|
+
}): AsyncGenerator<MCPLinkEvent>;
|
|
401
|
+
}
|
|
402
|
+
|
|
403
|
+
/**
|
|
404
|
+
* 基于 Prompt 的 Agent
|
|
405
|
+
* 通过 prompt 工程让任意模型支持工具调用和思考过程
|
|
406
|
+
*
|
|
407
|
+
* 设计原则:
|
|
408
|
+
* 1. 简洁 - 不做过多干预,让 AI 自己思考和决策
|
|
409
|
+
* 2. 通用 - 支持任何模型,不依赖特定 API
|
|
410
|
+
* 3. 可靠 - 稳定的状态机解析
|
|
411
|
+
*/
|
|
412
|
+
declare class PromptBasedAgent {
|
|
413
|
+
private model;
|
|
414
|
+
private mcpManager;
|
|
415
|
+
private systemPrompt;
|
|
416
|
+
private maxIterations;
|
|
417
|
+
constructor(model: LanguageModel, mcpManager: MCPManager, options?: {
|
|
418
|
+
systemPrompt?: string;
|
|
419
|
+
maxIterations?: number;
|
|
420
|
+
});
|
|
421
|
+
/**
|
|
422
|
+
* 生成工具列表描述
|
|
423
|
+
*/
|
|
424
|
+
private generateToolsDescription;
|
|
425
|
+
/**
|
|
426
|
+
* 内置系统提示词 - 强调格式约束
|
|
427
|
+
*/
|
|
428
|
+
private readonly BUILT_IN_PROMPT;
|
|
429
|
+
/**
|
|
430
|
+
* 构建完整的系统提示词
|
|
431
|
+
*/
|
|
432
|
+
private buildSystemPrompt;
|
|
433
|
+
/**
|
|
434
|
+
* 解析工具调用
|
|
435
|
+
*/
|
|
436
|
+
private parseToolCall;
|
|
437
|
+
/**
|
|
438
|
+
* 智能压缩历史消息
|
|
439
|
+
* - 用户消息完整保留
|
|
440
|
+
* - AI 回复保留关键信息(ID、名称、数量、价格等)
|
|
441
|
+
* - 去除冗长的 JSON 原始数据
|
|
442
|
+
*/
|
|
443
|
+
private compressHistory;
|
|
444
|
+
/**
|
|
445
|
+
* 流式对话
|
|
446
|
+
*/
|
|
447
|
+
chatStream(userMessage: string, options?: {
|
|
448
|
+
allowedTools?: string[];
|
|
449
|
+
history?: Array<{
|
|
450
|
+
role: 'user' | 'assistant';
|
|
451
|
+
content: string;
|
|
452
|
+
}>;
|
|
453
|
+
}): AsyncGenerator<MCPLinkEvent>;
|
|
454
|
+
}
|
|
455
|
+
|
|
456
|
+
export { Agent, type ChatCallbacks, type ChatResult, DEFAULT_SYSTEM_PROMPT, MCPLink, type MCPLinkConfig, type MCPLinkEvent, type MCPLinkEventData, MCPLinkEventType, MCPManager, type MCPServerConfig, type MCPServerConfigSSE, type MCPServerConfigStdio, type MCPServerStatus, type MCPTool, type Message, type MessageRole, PromptBasedAgent, type TodoItem, type TodoItemStatus, type TodoList, type ToolCall, type ToolResult };
|