@xiaozhi-client/mcp-core 1.9.7-beta.3

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/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2025 shenjingnan
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
@@ -0,0 +1,295 @@
1
+ import { Tool } from '@modelcontextprotocol/sdk/types.js';
2
+ import { EventEmitter } from 'node:events';
3
+
4
+ /**
5
+ * MCP 核心库类型定义
6
+ * 统一管理所有 MCP 相关的类型定义
7
+ */
8
+
9
+ /**
10
+ * 通信方式枚举
11
+ * 定义 MCP 支持的传输类型
12
+ */
13
+ declare enum MCPTransportType {
14
+ STDIO = "stdio",
15
+ SSE = "sse",
16
+ STREAMABLE_HTTP = "streamable-http"
17
+ }
18
+ /**
19
+ * ModelScope SSE 自定义选项接口
20
+ */
21
+ interface ModelScopeSSEOptions {
22
+ eventSourceInit?: {
23
+ fetch?: (url: string | URL | Request, init?: RequestInit) => Promise<Response>;
24
+ };
25
+ requestInit?: RequestInit;
26
+ }
27
+ /**
28
+ * MCP 服务配置接口
29
+ * 包含所有 MCP 服务的配置选项
30
+ */
31
+ interface MCPServiceConfig {
32
+ name: string;
33
+ type?: MCPTransportType;
34
+ command?: string;
35
+ args?: string[];
36
+ env?: Record<string, string>;
37
+ url?: string;
38
+ apiKey?: string;
39
+ headers?: Record<string, string>;
40
+ modelScopeAuth?: boolean;
41
+ customSSEOptions?: ModelScopeSSEOptions;
42
+ timeout?: number;
43
+ retryAttempts?: number;
44
+ }
45
+ /**
46
+ * 连接状态枚举
47
+ */
48
+ declare enum ConnectionState {
49
+ DISCONNECTED = "disconnected",
50
+ CONNECTING = "connecting",
51
+ CONNECTED = "connected",
52
+ RECONNECTING = "reconnecting",
53
+ FAILED = "failed",
54
+ ERROR = "error"
55
+ }
56
+ /**
57
+ * MCP 服务状态接口
58
+ */
59
+ interface MCPServiceStatus {
60
+ name: string;
61
+ connected: boolean;
62
+ initialized: boolean;
63
+ transportType: MCPTransportType;
64
+ toolCount: number;
65
+ lastError?: string;
66
+ connectionState: ConnectionState;
67
+ }
68
+ /**
69
+ * 工具调用结果接口
70
+ */
71
+ interface ToolCallResult {
72
+ content: Array<{
73
+ type: string;
74
+ text: string;
75
+ }>;
76
+ isError?: boolean;
77
+ }
78
+ /**
79
+ * JSON Schema 类型定义
80
+ */
81
+ type JSONSchema = (Record<string, unknown> & {
82
+ type: "object";
83
+ properties?: Record<string, unknown>;
84
+ required?: string[];
85
+ additionalProperties?: boolean;
86
+ }) | Record<string, unknown>;
87
+ /**
88
+ * 类型守卫:检查对象是否为有效的 MCP Tool JSON Schema
89
+ */
90
+ declare function isValidToolJSONSchema(obj: unknown): obj is {
91
+ type: "object";
92
+ properties?: Record<string, unknown>;
93
+ required?: string[];
94
+ additionalProperties?: boolean;
95
+ };
96
+ /**
97
+ * 确保对象符合 MCP Tool JSON Schema 格式
98
+ */
99
+ declare function ensureToolJSONSchema(schema: JSONSchema): {
100
+ type: "object";
101
+ properties?: Record<string, object>;
102
+ required?: string[];
103
+ additionalProperties?: boolean;
104
+ };
105
+ /**
106
+ * CustomMCP 工具类型定义
107
+ */
108
+ interface CustomMCPTool {
109
+ name: string;
110
+ description?: string;
111
+ inputSchema: JSONSchema;
112
+ handler?: {
113
+ type: string;
114
+ config?: Record<string, unknown>;
115
+ };
116
+ }
117
+ /**
118
+ * 工具信息接口
119
+ */
120
+ interface ToolInfo {
121
+ serviceName: string;
122
+ originalName: string;
123
+ tool: Tool;
124
+ }
125
+ /**
126
+ * 工具状态过滤选项
127
+ */
128
+ type ToolStatusFilter = "enabled" | "disabled" | "all";
129
+ /**
130
+ * 增强的工具信息接口
131
+ */
132
+ interface EnhancedToolInfo {
133
+ /** 工具唯一标识符,格式为 "{serviceName}__{originalName}" */
134
+ name: string;
135
+ /** 工具描述信息 */
136
+ description: string;
137
+ /** 工具输入参数的 JSON Schema 定义 */
138
+ inputSchema: JSONSchema;
139
+ /** 工具所属的 MCP 服务名称 */
140
+ serviceName: string;
141
+ /** 工具在 MCP 服务中的原始名称 */
142
+ originalName: string;
143
+ /** 工具是否启用 */
144
+ enabled: boolean;
145
+ /** 工具使用次数统计 */
146
+ usageCount: number;
147
+ /** 工具最后使用时间 */
148
+ lastUsedTime: string;
149
+ }
150
+ /**
151
+ * 统一服务器配置接口
152
+ */
153
+ interface UnifiedServerConfig {
154
+ name?: string;
155
+ enableLogging?: boolean;
156
+ logLevel?: string;
157
+ configs?: Record<string, MCPServiceConfig>;
158
+ }
159
+ /**
160
+ * 统一服务器状态接口
161
+ */
162
+ interface UnifiedServerStatus {
163
+ isRunning: boolean;
164
+ serviceStatus: ManagerStatus;
165
+ transportCount: number;
166
+ activeConnections: number;
167
+ config: UnifiedServerConfig;
168
+ services?: Record<string, MCPServiceConnectionStatus>;
169
+ totalTools?: number;
170
+ availableTools?: string[];
171
+ }
172
+ /**
173
+ * MCP 服务连接状态接口
174
+ */
175
+ interface MCPServiceConnectionStatus {
176
+ connected: boolean;
177
+ clientName: string;
178
+ }
179
+ /**
180
+ * 管理器状态接口
181
+ */
182
+ interface ManagerStatus {
183
+ services: Record<string, MCPServiceConnectionStatus>;
184
+ totalTools: number;
185
+ availableTools: string[];
186
+ }
187
+ /**
188
+ * 工具调用参数接口
189
+ */
190
+ interface ToolCallParams {
191
+ name: string;
192
+ arguments?: Record<string, unknown>;
193
+ }
194
+ /**
195
+ * 验证后的工具调用参数
196
+ */
197
+ interface ValidatedToolCallParams {
198
+ name: string;
199
+ arguments?: Record<string, unknown>;
200
+ }
201
+ /**
202
+ * 工具调用验证选项
203
+ */
204
+ interface ToolCallValidationOptions {
205
+ validateName?: boolean;
206
+ validateArguments?: boolean;
207
+ allowEmptyArguments?: boolean;
208
+ customValidator?: (params: ToolCallParams) => string | null;
209
+ }
210
+ /**
211
+ * 工具调用错误码枚举
212
+ */
213
+ declare enum ToolCallErrorCode {
214
+ INVALID_PARAMS = -32602,
215
+ TOOL_NOT_FOUND = -32601,
216
+ SERVICE_UNAVAILABLE = -32001,
217
+ TIMEOUT = -32002,
218
+ TOOL_EXECUTION_ERROR = -32000
219
+ }
220
+ /**
221
+ * 工具调用错误类
222
+ */
223
+ declare class ToolCallError extends Error {
224
+ code: ToolCallErrorCode;
225
+ data?: unknown | undefined;
226
+ constructor(code: ToolCallErrorCode, message: string, data?: unknown | undefined);
227
+ }
228
+
229
+ /**
230
+ * 简化版 MCP 服务管理器
231
+ * 专门为 endpoint 包设计,提供核心 MCP 服务管理功能
232
+ */
233
+
234
+ /**
235
+ * 简化版 MCP 服务管理器
236
+ * 提供 MCP 服务的核心管理功能
237
+ */
238
+ declare class MCPServiceManager extends EventEmitter {
239
+ private configs;
240
+ private tools;
241
+ private isInitialized;
242
+ constructor(configs?: Record<string, MCPServiceConfig>);
243
+ /**
244
+ * 添加服务配置
245
+ */
246
+ addServiceConfig(name: string, config: MCPServiceConfig): void;
247
+ /**
248
+ * 更新服务配置
249
+ */
250
+ updateServiceConfig(name: string, config: MCPServiceConfig): void;
251
+ /**
252
+ * 移除服务配置
253
+ */
254
+ removeServiceConfig(name: string): void;
255
+ /**
256
+ * 获取所有服务配置
257
+ */
258
+ getServiceConfigs(): Record<string, MCPServiceConfig>;
259
+ /**
260
+ * 启动所有服务
261
+ */
262
+ startAllServices(): Promise<void>;
263
+ /**
264
+ * 启动单个服务
265
+ */
266
+ startService(serviceName: string): Promise<void>;
267
+ /**
268
+ * 获取所有工具列表
269
+ */
270
+ getAllTools(status?: ToolStatusFilter): EnhancedToolInfo[];
271
+ /**
272
+ * 调用工具
273
+ */
274
+ callTool(toolName: string, _arguments_: Record<string, unknown>, _options?: {
275
+ timeout?: number;
276
+ }): Promise<ToolCallResult>;
277
+ /**
278
+ * 添加工具(用于测试或自定义工具)
279
+ */
280
+ addTool(tool: EnhancedToolInfo): void;
281
+ /**
282
+ * 移除工具
283
+ */
284
+ removeTool(toolName: string): void;
285
+ /**
286
+ * 获取管理器状态
287
+ */
288
+ getStatus(): ManagerStatus;
289
+ /**
290
+ * 清理资源
291
+ */
292
+ cleanup(): Promise<void>;
293
+ }
294
+
295
+ export { ConnectionState, type CustomMCPTool, type EnhancedToolInfo, type JSONSchema, type MCPServiceConfig, type MCPServiceConnectionStatus, MCPServiceManager, type MCPServiceStatus, MCPTransportType, type ManagerStatus, type ModelScopeSSEOptions, ToolCallError, ToolCallErrorCode, type ToolCallParams, type ToolCallResult, type ToolCallValidationOptions, type ToolInfo, type UnifiedServerConfig, type UnifiedServerStatus, type ValidatedToolCallParams, ensureToolJSONSchema, isValidToolJSONSchema };
package/dist/index.js ADDED
@@ -0,0 +1,196 @@
1
+ var __defProp = Object.defineProperty;
2
+ var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
3
+
4
+ // src/types.ts
5
+ var MCPTransportType = /* @__PURE__ */ ((MCPTransportType2) => {
6
+ MCPTransportType2["STDIO"] = "stdio";
7
+ MCPTransportType2["SSE"] = "sse";
8
+ MCPTransportType2["STREAMABLE_HTTP"] = "streamable-http";
9
+ return MCPTransportType2;
10
+ })(MCPTransportType || {});
11
+ var ConnectionState = /* @__PURE__ */ ((ConnectionState2) => {
12
+ ConnectionState2["DISCONNECTED"] = "disconnected";
13
+ ConnectionState2["CONNECTING"] = "connecting";
14
+ ConnectionState2["CONNECTED"] = "connected";
15
+ ConnectionState2["RECONNECTING"] = "reconnecting";
16
+ ConnectionState2["FAILED"] = "failed";
17
+ ConnectionState2["ERROR"] = "error";
18
+ return ConnectionState2;
19
+ })(ConnectionState || {});
20
+ function isValidToolJSONSchema(obj) {
21
+ return typeof obj === "object" && obj !== null && "type" in obj && obj.type === "object";
22
+ }
23
+ __name(isValidToolJSONSchema, "isValidToolJSONSchema");
24
+ function ensureToolJSONSchema(schema) {
25
+ if (isValidToolJSONSchema(schema)) {
26
+ return schema;
27
+ }
28
+ return {
29
+ type: "object",
30
+ properties: {},
31
+ required: [],
32
+ additionalProperties: true
33
+ };
34
+ }
35
+ __name(ensureToolJSONSchema, "ensureToolJSONSchema");
36
+ var ToolCallErrorCode = /* @__PURE__ */ ((ToolCallErrorCode2) => {
37
+ ToolCallErrorCode2[ToolCallErrorCode2["INVALID_PARAMS"] = -32602] = "INVALID_PARAMS";
38
+ ToolCallErrorCode2[ToolCallErrorCode2["TOOL_NOT_FOUND"] = -32601] = "TOOL_NOT_FOUND";
39
+ ToolCallErrorCode2[ToolCallErrorCode2["SERVICE_UNAVAILABLE"] = -32001] = "SERVICE_UNAVAILABLE";
40
+ ToolCallErrorCode2[ToolCallErrorCode2["TIMEOUT"] = -32002] = "TIMEOUT";
41
+ ToolCallErrorCode2[ToolCallErrorCode2["TOOL_EXECUTION_ERROR"] = -32e3] = "TOOL_EXECUTION_ERROR";
42
+ return ToolCallErrorCode2;
43
+ })(ToolCallErrorCode || {});
44
+ var ToolCallError = class extends Error {
45
+ constructor(code, message, data) {
46
+ super(message);
47
+ this.code = code;
48
+ this.data = data;
49
+ this.name = "ToolCallError";
50
+ }
51
+ static {
52
+ __name(this, "ToolCallError");
53
+ }
54
+ };
55
+
56
+ // src/manager.ts
57
+ import { EventEmitter } from "events";
58
+ var MCPServiceManager = class extends EventEmitter {
59
+ static {
60
+ __name(this, "MCPServiceManager");
61
+ }
62
+ configs = {};
63
+ tools = /* @__PURE__ */ new Map();
64
+ isInitialized = false;
65
+ constructor(configs) {
66
+ super();
67
+ if (configs) {
68
+ this.configs = configs;
69
+ }
70
+ }
71
+ /**
72
+ * 添加服务配置
73
+ */
74
+ addServiceConfig(name, config) {
75
+ this.configs[name] = { ...config, name };
76
+ }
77
+ /**
78
+ * 更新服务配置
79
+ */
80
+ updateServiceConfig(name, config) {
81
+ if (!this.configs[name]) {
82
+ throw new Error(`\u670D\u52A1\u4E0D\u5B58\u5728: ${name}`);
83
+ }
84
+ this.configs[name] = { ...config, name };
85
+ }
86
+ /**
87
+ * 移除服务配置
88
+ */
89
+ removeServiceConfig(name) {
90
+ delete this.configs[name];
91
+ }
92
+ /**
93
+ * 获取所有服务配置
94
+ */
95
+ getServiceConfigs() {
96
+ return { ...this.configs };
97
+ }
98
+ /**
99
+ * 启动所有服务
100
+ */
101
+ async startAllServices() {
102
+ if (this.isInitialized) {
103
+ return;
104
+ }
105
+ this.isInitialized = true;
106
+ this.emit("initialized");
107
+ }
108
+ /**
109
+ * 启动单个服务
110
+ */
111
+ async startService(serviceName) {
112
+ if (!this.configs[serviceName]) {
113
+ throw new Error(`\u670D\u52A1\u914D\u7F6E\u4E0D\u5B58\u5728: ${serviceName}`);
114
+ }
115
+ this.emit("serviceStarted", serviceName);
116
+ }
117
+ /**
118
+ * 获取所有工具列表
119
+ */
120
+ getAllTools(status = "all") {
121
+ const allTools = Array.from(this.tools.values());
122
+ if (status === "all") {
123
+ return allTools;
124
+ }
125
+ return allTools.filter(
126
+ (tool) => status === "enabled" ? tool.enabled : !tool.enabled
127
+ );
128
+ }
129
+ /**
130
+ * 调用工具
131
+ */
132
+ async callTool(toolName, _arguments_, _options) {
133
+ const tool = this.tools.get(toolName);
134
+ if (!tool) {
135
+ throw new ToolCallError(
136
+ -32601 /* TOOL_NOT_FOUND */,
137
+ `\u5DE5\u5177\u4E0D\u5B58\u5728: ${toolName}`
138
+ );
139
+ }
140
+ if (!tool.enabled) {
141
+ throw new ToolCallError(
142
+ -32001 /* SERVICE_UNAVAILABLE */,
143
+ `\u5DE5\u5177\u5DF2\u7981\u7528: ${toolName}`
144
+ );
145
+ }
146
+ return {
147
+ content: [
148
+ {
149
+ type: "text",
150
+ text: `\u5DE5\u5177 ${toolName} \u9700\u8981\u901A\u8FC7\u5B9E\u9645\u7684 MCP \u8FDE\u63A5\u8C03\u7528`
151
+ }
152
+ ],
153
+ isError: false
154
+ };
155
+ }
156
+ /**
157
+ * 添加工具(用于测试或自定义工具)
158
+ */
159
+ addTool(tool) {
160
+ this.tools.set(tool.name, tool);
161
+ }
162
+ /**
163
+ * 移除工具
164
+ */
165
+ removeTool(toolName) {
166
+ this.tools.delete(toolName);
167
+ }
168
+ /**
169
+ * 获取管理器状态
170
+ */
171
+ getStatus() {
172
+ const availableTools = this.getAllTools("enabled").map((t) => t.name);
173
+ return {
174
+ services: {},
175
+ totalTools: this.tools.size,
176
+ availableTools
177
+ };
178
+ }
179
+ /**
180
+ * 清理资源
181
+ */
182
+ async cleanup() {
183
+ this.tools.clear();
184
+ this.isInitialized = false;
185
+ }
186
+ };
187
+ export {
188
+ ConnectionState,
189
+ MCPServiceManager,
190
+ MCPTransportType,
191
+ ToolCallError,
192
+ ToolCallErrorCode,
193
+ ensureToolJSONSchema,
194
+ isValidToolJSONSchema
195
+ };
196
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/types.ts","../src/manager.ts"],"sourcesContent":["/**\n * MCP 核心库类型定义\n * 统一管理所有 MCP 相关的类型定义\n */\n\nimport type { Tool } from \"@modelcontextprotocol/sdk/types.js\";\n\n// =========================\n// 1. 基础传输类型\n// =========================\n\n/**\n * 通信方式枚举\n * 定义 MCP 支持的传输类型\n */\nexport enum MCPTransportType {\n STDIO = \"stdio\",\n SSE = \"sse\",\n STREAMABLE_HTTP = \"streamable-http\",\n}\n\n// =========================\n// 2. 配置接口类型\n// =========================\n\n/**\n * ModelScope SSE 自定义选项接口\n */\nexport interface ModelScopeSSEOptions {\n eventSourceInit?: {\n fetch?: (\n url: string | URL | Request,\n init?: RequestInit\n ) => Promise<Response>;\n };\n requestInit?: RequestInit;\n}\n\n/**\n * MCP 服务配置接口\n * 包含所有 MCP 服务的配置选项\n */\nexport interface MCPServiceConfig {\n name: string;\n type?: MCPTransportType; // 现在是可选的,支持自动推断\n // stdio 配置\n command?: string;\n args?: string[];\n env?: Record<string, string>; // 环境变量配置\n // 网络配置\n url?: string;\n // 认证配置\n apiKey?: string;\n headers?: Record<string, string>;\n // ModelScope 特有配置\n modelScopeAuth?: boolean;\n customSSEOptions?: ModelScopeSSEOptions;\n // 超时配置\n timeout?: number;\n // 重试配置\n retryAttempts?: number;\n}\n\n// =========================\n// 3. 状态枚举类型\n// =========================\n\n/**\n * 连接状态枚举\n */\nexport enum ConnectionState {\n DISCONNECTED = \"disconnected\",\n CONNECTING = \"connecting\",\n CONNECTED = \"connected\",\n RECONNECTING = \"reconnecting\",\n FAILED = \"failed\",\n ERROR = \"error\",\n}\n\n/**\n * MCP 服务状态接口\n */\nexport interface MCPServiceStatus {\n name: string;\n connected: boolean;\n initialized: boolean;\n transportType: MCPTransportType;\n toolCount: number;\n lastError?: string;\n connectionState: ConnectionState;\n}\n\n// =========================\n// 4. 工具调用相关类型\n// =========================\n\n/**\n * 工具调用结果接口\n */\nexport interface ToolCallResult {\n content: Array<{\n type: string;\n text: string;\n }>;\n isError?: boolean;\n}\n\n/**\n * JSON Schema 类型定义\n */\nexport type JSONSchema =\n | (Record<string, unknown> & {\n type: \"object\";\n properties?: Record<string, unknown>;\n required?: string[];\n additionalProperties?: boolean;\n })\n | Record<string, unknown>;\n\n/**\n * 类型守卫:检查对象是否为有效的 MCP Tool JSON Schema\n */\nexport function isValidToolJSONSchema(obj: unknown): obj is {\n type: \"object\";\n properties?: Record<string, unknown>;\n required?: string[];\n additionalProperties?: boolean;\n} {\n return (\n typeof obj === \"object\" &&\n obj !== null &&\n \"type\" in obj &&\n (obj as { type?: unknown }).type === \"object\"\n );\n}\n\n/**\n * 确保对象符合 MCP Tool JSON Schema 格式\n */\nexport function ensureToolJSONSchema(schema: JSONSchema): {\n type: \"object\";\n properties?: Record<string, object>;\n required?: string[];\n additionalProperties?: boolean;\n} {\n if (isValidToolJSONSchema(schema)) {\n return schema as {\n type: \"object\";\n properties?: Record<string, object>;\n required?: string[];\n additionalProperties?: boolean;\n };\n }\n\n return {\n type: \"object\",\n properties: {} as Record<string, object>,\n required: [],\n additionalProperties: true,\n };\n}\n\n/**\n * CustomMCP 工具类型定义\n */\nexport interface CustomMCPTool {\n name: string;\n description?: string;\n inputSchema: JSONSchema;\n handler?: {\n type: string;\n config?: Record<string, unknown>;\n };\n}\n\n/**\n * 工具信息接口\n */\nexport interface ToolInfo {\n serviceName: string;\n originalName: string;\n tool: Tool;\n}\n\n// =========================\n// 5. 增强工具信息类型\n// =========================\n\n/**\n * 工具状态过滤选项\n */\nexport type ToolStatusFilter = \"enabled\" | \"disabled\" | \"all\";\n\n/**\n * 增强的工具信息接口\n */\nexport interface EnhancedToolInfo {\n /** 工具唯一标识符,格式为 \"{serviceName}__{originalName}\" */\n name: string;\n /** 工具描述信息 */\n description: string;\n /** 工具输入参数的 JSON Schema 定义 */\n inputSchema: JSONSchema;\n /** 工具所属的 MCP 服务名称 */\n serviceName: string;\n /** 工具在 MCP 服务中的原始名称 */\n originalName: string;\n /** 工具是否启用 */\n enabled: boolean;\n /** 工具使用次数统计 */\n usageCount: number;\n /** 工具最后使用时间 */\n lastUsedTime: string;\n}\n\n// =========================\n// 6. 服务器配置类型\n// =========================\n\n/**\n * 统一服务器配置接口\n */\nexport interface UnifiedServerConfig {\n name?: string;\n enableLogging?: boolean;\n logLevel?: string;\n configs?: Record<string, MCPServiceConfig>;\n}\n\n/**\n * 统一服务器状态接口\n */\nexport interface UnifiedServerStatus {\n isRunning: boolean;\n serviceStatus: ManagerStatus;\n transportCount: number;\n activeConnections: number;\n config: UnifiedServerConfig;\n services?: Record<string, MCPServiceConnectionStatus>;\n totalTools?: number;\n availableTools?: string[];\n}\n\n// =========================\n// 7. 管理器相关类型\n// =========================\n\n/**\n * MCP 服务连接状态接口\n */\nexport interface MCPServiceConnectionStatus {\n connected: boolean;\n clientName: string;\n}\n\n/**\n * 管理器状态接口\n */\nexport interface ManagerStatus {\n services: Record<string, MCPServiceConnectionStatus>;\n totalTools: number;\n availableTools: string[];\n}\n\n// =========================\n// 8. 参数校验相关类型\n// =========================\n\n/**\n * 工具调用参数接口\n */\nexport interface ToolCallParams {\n name: string;\n arguments?: Record<string, unknown>;\n}\n\n/**\n * 验证后的工具调用参数\n */\nexport interface ValidatedToolCallParams {\n name: string;\n arguments?: Record<string, unknown>;\n}\n\n/**\n * 工具调用验证选项\n */\nexport interface ToolCallValidationOptions {\n validateName?: boolean;\n validateArguments?: boolean;\n allowEmptyArguments?: boolean;\n customValidator?: (params: ToolCallParams) => string | null;\n}\n\n/**\n * 工具调用错误码枚举\n */\nexport enum ToolCallErrorCode {\n INVALID_PARAMS = -32602,\n TOOL_NOT_FOUND = -32601,\n SERVICE_UNAVAILABLE = -32001,\n TIMEOUT = -32002,\n TOOL_EXECUTION_ERROR = -32000,\n}\n\n/**\n * 工具调用错误类\n */\nexport class ToolCallError extends Error {\n constructor(\n public code: ToolCallErrorCode,\n message: string,\n public data?: unknown\n ) {\n super(message);\n this.name = \"ToolCallError\";\n }\n}\n","/**\n * 简化版 MCP 服务管理器\n * 专门为 endpoint 包设计,提供核心 MCP 服务管理功能\n */\n\nimport { EventEmitter } from \"node:events\";\nimport type {\n EnhancedToolInfo,\n MCPServiceConfig,\n ManagerStatus,\n ToolCallResult,\n ToolStatusFilter,\n} from \"./types.js\";\nimport { ToolCallError, ToolCallErrorCode } from \"./types.js\";\n\n/**\n * 简化版 MCP 服务管理器\n * 提供 MCP 服务的核心管理功能\n */\nexport class MCPServiceManager extends EventEmitter {\n private configs: Record<string, MCPServiceConfig> = {};\n private tools: Map<string, EnhancedToolInfo> = new Map();\n private isInitialized = false;\n\n constructor(configs?: Record<string, MCPServiceConfig>) {\n super();\n if (configs) {\n this.configs = configs;\n }\n }\n\n /**\n * 添加服务配置\n */\n addServiceConfig(name: string, config: MCPServiceConfig): void {\n this.configs[name] = { ...config, name };\n }\n\n /**\n * 更新服务配置\n */\n updateServiceConfig(name: string, config: MCPServiceConfig): void {\n if (!this.configs[name]) {\n throw new Error(`服务不存在: ${name}`);\n }\n this.configs[name] = { ...config, name };\n }\n\n /**\n * 移除服务配置\n */\n removeServiceConfig(name: string): void {\n delete this.configs[name];\n }\n\n /**\n * 获取所有服务配置\n */\n getServiceConfigs(): Record<string, MCPServiceConfig> {\n return { ...this.configs };\n }\n\n /**\n * 启动所有服务\n */\n async startAllServices(): Promise<void> {\n if (this.isInitialized) {\n return;\n }\n\n // 这里应该创建实际的 MCP 服务连接\n // 由于 endpoint 包需要独立发布,我们暂时提供一个基础实现\n this.isInitialized = true;\n\n this.emit(\"initialized\");\n }\n\n /**\n * 启动单个服务\n */\n async startService(serviceName: string): Promise<void> {\n if (!this.configs[serviceName]) {\n throw new Error(`服务配置不存在: ${serviceName}`);\n }\n\n // 这里应该创建实际的 MCP 服务连接\n this.emit(\"serviceStarted\", serviceName);\n }\n\n /**\n * 获取所有工具列表\n */\n getAllTools(status: ToolStatusFilter = \"all\"): EnhancedToolInfo[] {\n const allTools = Array.from(this.tools.values());\n\n if (status === \"all\") {\n return allTools;\n }\n\n return allTools.filter((tool) =>\n status === \"enabled\" ? tool.enabled : !tool.enabled\n );\n }\n\n /**\n * 调用工具\n */\n async callTool(\n toolName: string,\n _arguments_: Record<string, unknown>,\n _options?: { timeout?: number }\n ): Promise<ToolCallResult> {\n const tool = this.tools.get(toolName);\n\n if (!tool) {\n throw new ToolCallError(\n ToolCallErrorCode.TOOL_NOT_FOUND,\n `工具不存在: ${toolName}`\n );\n }\n\n if (!tool.enabled) {\n throw new ToolCallError(\n ToolCallErrorCode.SERVICE_UNAVAILABLE,\n `工具已禁用: ${toolName}`\n );\n }\n\n // 这里应该调用实际的 MCP 工具\n // 由于这是一个简化实现,我们返回一个占位结果\n return {\n content: [\n {\n type: \"text\",\n text: `工具 ${toolName} 需要通过实际的 MCP 连接调用`,\n },\n ],\n isError: false,\n };\n }\n\n /**\n * 添加工具(用于测试或自定义工具)\n */\n addTool(tool: EnhancedToolInfo): void {\n this.tools.set(tool.name, tool);\n }\n\n /**\n * 移除工具\n */\n removeTool(toolName: string): void {\n this.tools.delete(toolName);\n }\n\n /**\n * 获取管理器状态\n */\n getStatus(): ManagerStatus {\n const availableTools = this.getAllTools(\"enabled\").map((t) => t.name);\n\n return {\n services: {},\n totalTools: this.tools.size,\n availableTools,\n };\n }\n\n /**\n * 清理资源\n */\n async cleanup(): Promise<void> {\n this.tools.clear();\n this.isInitialized = false;\n }\n}\n"],"mappings":"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","names":["MCPTransportType","ConnectionState","ToolCallErrorCode"]}
package/package.json ADDED
@@ -0,0 +1,47 @@
1
+ {
2
+ "name": "@xiaozhi-client/mcp-core",
3
+ "version": "1.9.7-beta.3",
4
+ "description": "MCP 协议核心实现,提供服务管理和连接功能",
5
+ "type": "module",
6
+ "main": "./dist/index.js",
7
+ "types": "./dist/index.d.ts",
8
+ "exports": {
9
+ ".": {
10
+ "types": "./dist/index.d.ts",
11
+ "import": "./dist/index.js"
12
+ }
13
+ },
14
+ "files": [
15
+ "dist"
16
+ ],
17
+ "dependencies": {
18
+ "ws": "^8.14.2"
19
+ },
20
+ "peerDependencies": {
21
+ "@modelcontextprotocol/sdk": "^1.24.0"
22
+ },
23
+ "devDependencies": {
24
+ "@types/node": "^24.3.0",
25
+ "@types/ws": "^8.5.0",
26
+ "tsup": "^8.3.5",
27
+ "typescript": "^5.9.2",
28
+ "vitest": "^3.0.5"
29
+ },
30
+ "publishConfig": {
31
+ "access": "public"
32
+ },
33
+ "keywords": [
34
+ "xiaozhi",
35
+ "mcp",
36
+ "model-context-protocol",
37
+ "service-manager"
38
+ ],
39
+ "author": "xiaozhi-client",
40
+ "license": "MIT",
41
+ "scripts": {
42
+ "build": "tsup",
43
+ "dev": "tsup --watch",
44
+ "test": "vitest",
45
+ "type-check": "tsc --noEmit"
46
+ }
47
+ }