@cloudbase/agent-tools 0.0.2

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 (194) hide show
  1. package/CHANGELOG.md +416 -0
  2. package/dist/agent_tool.d.ts +7 -0
  3. package/dist/agent_tool.d.ts.map +1 -0
  4. package/dist/agent_tool.js +16 -0
  5. package/dist/agent_tool.js.map +1 -0
  6. package/dist/bash/bash-tool.d.ts +61 -0
  7. package/dist/bash/bash-tool.d.ts.map +1 -0
  8. package/dist/bash/bash-tool.js +191 -0
  9. package/dist/bash/bash-tool.js.map +1 -0
  10. package/dist/bash/index.d.ts +7 -0
  11. package/dist/bash/index.d.ts.map +1 -0
  12. package/dist/bash/index.js +17 -0
  13. package/dist/bash/index.js.map +1 -0
  14. package/dist/bash/operator/base-operator.d.ts +44 -0
  15. package/dist/bash/operator/base-operator.d.ts.map +1 -0
  16. package/dist/bash/operator/base-operator.js +14 -0
  17. package/dist/bash/operator/base-operator.js.map +1 -0
  18. package/dist/bash/operator/local-operator.d.ts +15 -0
  19. package/dist/bash/operator/local-operator.d.ts.map +1 -0
  20. package/dist/bash/operator/local-operator.js +145 -0
  21. package/dist/bash/operator/local-operator.js.map +1 -0
  22. package/dist/bash/operator/sandbox-operator.d.ts +22 -0
  23. package/dist/bash/operator/sandbox-operator.d.ts.map +1 -0
  24. package/dist/bash/operator/sandbox-operator.js +112 -0
  25. package/dist/bash/operator/sandbox-operator.js.map +1 -0
  26. package/dist/bash/utils.d.ts +106 -0
  27. package/dist/bash/utils.d.ts.map +1 -0
  28. package/dist/bash/utils.js +197 -0
  29. package/dist/bash/utils.js.map +1 -0
  30. package/dist/browser/browser-instance-manager.d.ts +79 -0
  31. package/dist/browser/browser-instance-manager.d.ts.map +1 -0
  32. package/dist/browser/browser-instance-manager.js +242 -0
  33. package/dist/browser/browser-instance-manager.js.map +1 -0
  34. package/dist/browser/browser-tool-executor.d.ts +57 -0
  35. package/dist/browser/browser-tool-executor.d.ts.map +1 -0
  36. package/dist/browser/browser-tool-executor.js +205 -0
  37. package/dist/browser/browser-tool-executor.js.map +1 -0
  38. package/dist/browser/browser_client_unified.d.ts +52 -0
  39. package/dist/browser/browser_client_unified.d.ts.map +1 -0
  40. package/dist/browser/browser_client_unified.js +381 -0
  41. package/dist/browser/browser_client_unified.js.map +1 -0
  42. package/dist/browser/browser_tool_unified.d.ts +93 -0
  43. package/dist/browser/browser_tool_unified.d.ts.map +1 -0
  44. package/dist/browser/browser_tool_unified.js +181 -0
  45. package/dist/browser/browser_tool_unified.js.map +1 -0
  46. package/dist/browser/index.d.ts +7 -0
  47. package/dist/browser/index.d.ts.map +1 -0
  48. package/dist/browser/index.js +19 -0
  49. package/dist/browser/index.js.map +1 -0
  50. package/dist/browser/sandbox-connector.d.ts +93 -0
  51. package/dist/browser/sandbox-connector.d.ts.map +1 -0
  52. package/dist/browser/sandbox-connector.js +272 -0
  53. package/dist/browser/sandbox-connector.js.map +1 -0
  54. package/dist/browser/types.d.ts +53 -0
  55. package/dist/browser/types.d.ts.map +1 -0
  56. package/dist/browser/types.js +3 -0
  57. package/dist/browser/types.js.map +1 -0
  58. package/dist/code_executers/base_code_executor.d.ts +17 -0
  59. package/dist/code_executers/base_code_executor.d.ts.map +1 -0
  60. package/dist/code_executers/base_code_executor.js +20 -0
  61. package/dist/code_executers/base_code_executor.js.map +1 -0
  62. package/dist/code_executers/built_in_code_executor.d.ts +25 -0
  63. package/dist/code_executers/built_in_code_executor.d.ts.map +1 -0
  64. package/dist/code_executers/built_in_code_executor.js +106 -0
  65. package/dist/code_executers/built_in_code_executor.js.map +1 -0
  66. package/dist/code_executers/unsafe_local_code_executor.d.ts +118 -0
  67. package/dist/code_executers/unsafe_local_code_executor.d.ts.map +1 -0
  68. package/dist/code_executers/unsafe_local_code_executor.js +605 -0
  69. package/dist/code_executers/unsafe_local_code_executor.js.map +1 -0
  70. package/dist/fs/edit-tool.d.ts +26 -0
  71. package/dist/fs/edit-tool.d.ts.map +1 -0
  72. package/dist/fs/edit-tool.js +202 -0
  73. package/dist/fs/edit-tool.js.map +1 -0
  74. package/dist/fs/glob-tool.d.ts +31 -0
  75. package/dist/fs/glob-tool.d.ts.map +1 -0
  76. package/dist/fs/glob-tool.js +287 -0
  77. package/dist/fs/glob-tool.js.map +1 -0
  78. package/dist/fs/grep-tool.d.ts +32 -0
  79. package/dist/fs/grep-tool.d.ts.map +1 -0
  80. package/dist/fs/grep-tool.js +353 -0
  81. package/dist/fs/grep-tool.js.map +1 -0
  82. package/dist/fs/index.d.ts +11 -0
  83. package/dist/fs/index.d.ts.map +1 -0
  84. package/dist/fs/index.js +38 -0
  85. package/dist/fs/index.js.map +1 -0
  86. package/dist/fs/ls-tool.d.ts +26 -0
  87. package/dist/fs/ls-tool.d.ts.map +1 -0
  88. package/dist/fs/ls-tool.js +235 -0
  89. package/dist/fs/ls-tool.js.map +1 -0
  90. package/dist/fs/multiedit-tool.d.ts +34 -0
  91. package/dist/fs/multiedit-tool.d.ts.map +1 -0
  92. package/dist/fs/multiedit-tool.js +158 -0
  93. package/dist/fs/multiedit-tool.js.map +1 -0
  94. package/dist/fs/operator/base-operator.d.ts +28 -0
  95. package/dist/fs/operator/base-operator.d.ts.map +1 -0
  96. package/dist/fs/operator/base-operator.js +21 -0
  97. package/dist/fs/operator/base-operator.js.map +1 -0
  98. package/dist/fs/operator/in-memory-operator.d.ts +39 -0
  99. package/dist/fs/operator/in-memory-operator.d.ts.map +1 -0
  100. package/dist/fs/operator/in-memory-operator.js +115 -0
  101. package/dist/fs/operator/in-memory-operator.js.map +1 -0
  102. package/dist/fs/operator/index.d.ts +6 -0
  103. package/dist/fs/operator/index.d.ts.map +1 -0
  104. package/dist/fs/operator/index.js +28 -0
  105. package/dist/fs/operator/index.js.map +1 -0
  106. package/dist/fs/operator/local-operator.d.ts +25 -0
  107. package/dist/fs/operator/local-operator.d.ts.map +1 -0
  108. package/dist/fs/operator/local-operator.js +62 -0
  109. package/dist/fs/operator/local-operator.js.map +1 -0
  110. package/dist/fs/operator/sanbox-operator.d.ts +31 -0
  111. package/dist/fs/operator/sanbox-operator.d.ts.map +1 -0
  112. package/dist/fs/operator/sanbox-operator.js +172 -0
  113. package/dist/fs/operator/sanbox-operator.js.map +1 -0
  114. package/dist/fs/operator/transaction/index.d.ts +6 -0
  115. package/dist/fs/operator/transaction/index.d.ts.map +1 -0
  116. package/dist/fs/operator/transaction/index.js +28 -0
  117. package/dist/fs/operator/transaction/index.js.map +1 -0
  118. package/dist/fs/operator/transaction/snapshot-strategies.d.ts +54 -0
  119. package/dist/fs/operator/transaction/snapshot-strategies.d.ts.map +1 -0
  120. package/dist/fs/operator/transaction/snapshot-strategies.js +278 -0
  121. package/dist/fs/operator/transaction/snapshot-strategies.js.map +1 -0
  122. package/dist/fs/operator/transaction/transaction-operator.d.ts +53 -0
  123. package/dist/fs/operator/transaction/transaction-operator.d.ts.map +1 -0
  124. package/dist/fs/operator/transaction/transaction-operator.js +195 -0
  125. package/dist/fs/operator/transaction/transaction-operator.js.map +1 -0
  126. package/dist/fs/operator/transaction/transaction-utils.d.ts +80 -0
  127. package/dist/fs/operator/transaction/transaction-utils.d.ts.map +1 -0
  128. package/dist/fs/operator/transaction/transaction-utils.js +156 -0
  129. package/dist/fs/operator/transaction/transaction-utils.js.map +1 -0
  130. package/dist/fs/read-tool.d.ts +32 -0
  131. package/dist/fs/read-tool.d.ts.map +1 -0
  132. package/dist/fs/read-tool.js +271 -0
  133. package/dist/fs/read-tool.js.map +1 -0
  134. package/dist/fs/str-replace-editor.d.ts +23 -0
  135. package/dist/fs/str-replace-editor.d.ts.map +1 -0
  136. package/dist/fs/str-replace-editor.js +74 -0
  137. package/dist/fs/str-replace-editor.js.map +1 -0
  138. package/dist/fs/toolkit.d.ts +61 -0
  139. package/dist/fs/toolkit.d.ts.map +1 -0
  140. package/dist/fs/toolkit.js +113 -0
  141. package/dist/fs/toolkit.js.map +1 -0
  142. package/dist/fs/utils.d.ts +32 -0
  143. package/dist/fs/utils.d.ts.map +1 -0
  144. package/dist/fs/utils.js +133 -0
  145. package/dist/fs/utils.js.map +1 -0
  146. package/dist/fs/write-tool.d.ts +26 -0
  147. package/dist/fs/write-tool.d.ts.map +1 -0
  148. package/dist/fs/write-tool.js +110 -0
  149. package/dist/fs/write-tool.js.map +1 -0
  150. package/dist/index.d.ts +10 -0
  151. package/dist/index.d.ts.map +1 -0
  152. package/dist/index.js +40 -0
  153. package/dist/index.js.map +1 -0
  154. package/dist/mcp/agkit-mcp-server.d.ts +291 -0
  155. package/dist/mcp/agkit-mcp-server.d.ts.map +1 -0
  156. package/dist/mcp/agkit-mcp-server.js +821 -0
  157. package/dist/mcp/agkit-mcp-server.js.map +1 -0
  158. package/dist/mcp/client-tool.d.ts +65 -0
  159. package/dist/mcp/client-tool.d.ts.map +1 -0
  160. package/dist/mcp/client-tool.js +220 -0
  161. package/dist/mcp/client-tool.js.map +1 -0
  162. package/dist/mcp/index.d.ts +14 -0
  163. package/dist/mcp/index.d.ts.map +1 -0
  164. package/dist/mcp/index.js +26 -0
  165. package/dist/mcp/index.js.map +1 -0
  166. package/dist/mcp/mcp-client-manager.d.ts +153 -0
  167. package/dist/mcp/mcp-client-manager.d.ts.map +1 -0
  168. package/dist/mcp/mcp-client-manager.js +606 -0
  169. package/dist/mcp/mcp-client-manager.js.map +1 -0
  170. package/dist/mcp/mcp-toolkit.d.ts +112 -0
  171. package/dist/mcp/mcp-toolkit.d.ts.map +1 -0
  172. package/dist/mcp/mcp-toolkit.js +188 -0
  173. package/dist/mcp/mcp-toolkit.js.map +1 -0
  174. package/dist/mcp/types.d.ts +157 -0
  175. package/dist/mcp/types.d.ts.map +1 -0
  176. package/dist/mcp/types.js +34 -0
  177. package/dist/mcp/types.js.map +1 -0
  178. package/dist/mcp/utils.d.ts +17 -0
  179. package/dist/mcp/utils.d.ts.map +1 -0
  180. package/dist/mcp/utils.js +48 -0
  181. package/dist/mcp/utils.js.map +1 -0
  182. package/dist/types/index.d.ts +31 -0
  183. package/dist/types/index.d.ts.map +1 -0
  184. package/dist/types/index.js +3 -0
  185. package/dist/types/index.js.map +1 -0
  186. package/dist/types/zod.d.ts +18 -0
  187. package/dist/types/zod.d.ts.map +1 -0
  188. package/dist/types/zod.js +3 -0
  189. package/dist/types/zod.js.map +1 -0
  190. package/dist/utils.d.ts +141 -0
  191. package/dist/utils.d.ts.map +1 -0
  192. package/dist/utils.js +379 -0
  193. package/dist/utils.js.map +1 -0
  194. package/package.json +46 -0
@@ -0,0 +1,606 @@
1
+ "use strict";
2
+ /**
3
+ * MCP Client Manager
4
+ *
5
+ * Manages connections to external MCP servers and provides tools from those servers
6
+ */
7
+ Object.defineProperty(exports, "__esModule", { value: true });
8
+ exports.MCPClientManager = void 0;
9
+ const index_js_1 = require("@modelcontextprotocol/sdk/client/index.js");
10
+ const stdio_js_1 = require("@modelcontextprotocol/sdk/client/stdio.js");
11
+ const sse_js_1 = require("@modelcontextprotocol/sdk/client/sse.js");
12
+ const streamableHttp_js_1 = require("@modelcontextprotocol/sdk/client/streamableHttp.js");
13
+ const client_tool_1 = require("./client-tool");
14
+ const types_1 = require("./types");
15
+ const agkit_mcp_server_1 = require("./agkit-mcp-server");
16
+ /**
17
+ * MCP Client Manager - manages connections to external MCP servers
18
+ */
19
+ class MCPClientManager {
20
+ constructor() {
21
+ this.clients = new Map();
22
+ this.transports = new Map();
23
+ this.connections = new Map();
24
+ this.availableTools = new Map();
25
+ this.eventListeners = new Set();
26
+ // Enhanced connection management
27
+ this.connectionOptions = new Map();
28
+ this.serverStatus = new Map();
29
+ this.reconnectTimers = new Map();
30
+ this.heartbeatTimers = new Map();
31
+ }
32
+ /**
33
+ * Add a new MCP server connection
34
+ */
35
+ async addServer(serverId, config, connectionOptions) {
36
+ if (this.clients.has(serverId)) {
37
+ throw new Error(`Server '${serverId}' is already registered`);
38
+ }
39
+ // Set up connection options with defaults
40
+ const options = {
41
+ autoReconnect: true,
42
+ reconnectDelay: 5000,
43
+ maxReconnectAttempts: 3,
44
+ ...connectionOptions,
45
+ };
46
+ // Initialize server status
47
+ const status = {
48
+ connected: false,
49
+ toolCount: 0,
50
+ resourceCount: 0,
51
+ promptCount: 0,
52
+ errors: [],
53
+ lastActivity: new Date(),
54
+ reconnectAttempts: 0,
55
+ };
56
+ let client;
57
+ // If a pre-connected client is provided, use it directly
58
+ if (config.client) {
59
+ client = config.client;
60
+ status.connected = true; // Assume pre-connected client is already connected
61
+ }
62
+ else {
63
+ // Validate that transport config is provided
64
+ if (!config.transport) {
65
+ throw new Error(`Either 'client' or 'transport' must be provided in config`);
66
+ }
67
+ // Create new client
68
+ client = new index_js_1.Client({
69
+ name: config.name || "ag-kit-mcp-client",
70
+ version: config.version || "1.0.0",
71
+ }, {
72
+ capabilities: {
73
+ tools: {},
74
+ },
75
+ });
76
+ }
77
+ this.clients.set(serverId, client);
78
+ this.connections.set(serverId, config);
79
+ this.connectionOptions.set(serverId, options);
80
+ this.serverStatus.set(serverId, status);
81
+ try {
82
+ // Only connect if we created a new client (not pre-connected)
83
+ if (!config.client) {
84
+ await this.connectServer(serverId);
85
+ }
86
+ await this.loadServerTools(serverId);
87
+ // Set up heartbeat if configured
88
+ if (options.heartbeatInterval) {
89
+ this.setupHeartbeat(serverId);
90
+ }
91
+ }
92
+ catch (error) {
93
+ // Clean up on failure
94
+ this.cleanupServer(serverId);
95
+ throw error;
96
+ }
97
+ }
98
+ /**
99
+ * Connect to a specific server
100
+ */
101
+ async connectServer(serverId) {
102
+ const client = this.clients.get(serverId);
103
+ const config = this.connections.get(serverId);
104
+ const status = this.serverStatus.get(serverId);
105
+ if (!client || !config || !status) {
106
+ throw new Error(`Server '${serverId}' not found`);
107
+ }
108
+ // Validate transport config exists (should not be called for pre-connected clients)
109
+ if (!config.transport) {
110
+ throw new Error(`Transport config is required for server '${serverId}'`);
111
+ }
112
+ // Check if already connected
113
+ if (status.connected && this.transports.has(serverId)) {
114
+ console.log(`[MCPClientManager] Server '${serverId}' is already connected`);
115
+ return;
116
+ }
117
+ // Create transport based on configuration
118
+ const transport = await this.createTransport(config.transport);
119
+ // Connect with timeout
120
+ const connectPromise = client.connect(transport);
121
+ const timeoutPromise = new Promise((_, reject) => {
122
+ setTimeout(() => reject(new Error("Connection timeout")), config.transport.timeout || 10000);
123
+ });
124
+ await Promise.race([connectPromise, timeoutPromise]);
125
+ this.transports.set(serverId, transport);
126
+ // Update status
127
+ status.connected = true;
128
+ status.lastActivity = new Date();
129
+ status.reconnectAttempts = 0;
130
+ this.emit({
131
+ type: "connected",
132
+ clientName: serverId,
133
+ });
134
+ }
135
+ /**
136
+ * Create transport instance based on configuration
137
+ */
138
+ async createTransport(transportConfig) {
139
+ const transportType = (0, types_1.detectTransportType)(transportConfig);
140
+ switch (transportType) {
141
+ case "stdio":
142
+ if (!transportConfig.command) {
143
+ throw new Error("Command is required for stdio transport");
144
+ }
145
+ return new stdio_js_1.StdioClientTransport({
146
+ command: transportConfig.command,
147
+ args: transportConfig.args || [],
148
+ });
149
+ case "sse": {
150
+ const { type, url, timeout, ...restOptions } = transportConfig;
151
+ if (!url) {
152
+ throw new Error("URL is required for SSE transport");
153
+ }
154
+ return new sse_js_1.SSEClientTransport(new URL(url), restOptions);
155
+ }
156
+ case "streamableHttp": {
157
+ const { type, url, timeout, ...restOptions } = transportConfig;
158
+ if (!url) {
159
+ throw new Error("URL is required for StreamableHTTP transport");
160
+ }
161
+ return new streamableHttp_js_1.StreamableHTTPClientTransport(new URL(url), restOptions);
162
+ }
163
+ case "memory":
164
+ if (!transportConfig.memoryId) {
165
+ throw new Error("Memory ID is required for InMemory transport");
166
+ }
167
+ // Import the memory transport registry from agkit-mcp-server
168
+ return agkit_mcp_server_1.memoryTransportRegistry.getClientTransport(transportConfig.memoryId);
169
+ case "custom":
170
+ if (!transportConfig.transport) {
171
+ throw new Error("Transport instance is required for custom transport");
172
+ }
173
+ return transportConfig.transport;
174
+ default:
175
+ throw new Error(`Transport type '${transportType}' is not supported. ` +
176
+ `Supported types: stdio, sse, streamableHttp, memory, custom`);
177
+ }
178
+ }
179
+ /**
180
+ * Load tools from a specific server
181
+ */
182
+ async loadServerTools(serverId) {
183
+ const client = this.clients.get(serverId);
184
+ if (!client) {
185
+ throw new Error(`Server '${serverId}' not found`);
186
+ }
187
+ try {
188
+ const response = await client.listTools();
189
+ // Type assertion for MCP SDK response
190
+ const listResponse = response;
191
+ this.availableTools.set(serverId, listResponse.tools || []);
192
+ (listResponse.tools || []).forEach((tool) => {
193
+ this.emit({
194
+ type: "tool_discovered",
195
+ tool: {
196
+ name: tool.name,
197
+ description: tool.description || "",
198
+ inputSchema: tool.inputSchema,
199
+ },
200
+ });
201
+ });
202
+ }
203
+ catch (error) {
204
+ this.emit({
205
+ type: "error",
206
+ error: error instanceof Error ? error : new Error(String(error)),
207
+ context: `load_tools:${serverId}`,
208
+ });
209
+ throw error;
210
+ }
211
+ }
212
+ /**
213
+ * Get all available tools from all connected servers
214
+ */
215
+ getAllTools(serverId) {
216
+ const allTools = [];
217
+ for (const [_serverId, tools] of serverId
218
+ ? new Map([[serverId, this.getServerTools(serverId)]]).entries()
219
+ : this.availableTools.entries()) {
220
+ for (const tool of tools) {
221
+ allTools.push({ serverId: _serverId, tool });
222
+ }
223
+ }
224
+ return allTools;
225
+ }
226
+ /**
227
+ * Get tools from a specific server
228
+ */
229
+ getServerTools(serverId) {
230
+ return this.availableTools.get(serverId) || [];
231
+ }
232
+ /**
233
+ * Create MCPClientTool instances for all available tools
234
+ */
235
+ createClientTools(serverId) {
236
+ const clientTools = [];
237
+ for (const { serverId: _serverId, tool } of this.getAllTools(serverId)) {
238
+ // Use createClientTool to avoid code duplication
239
+ const clientTool = this.createClientTool(_serverId, tool.name, `${_serverId}:${tool.name}` // Use server:tool format as AG-Kit tool name
240
+ );
241
+ clientTools.push(clientTool);
242
+ }
243
+ return clientTools;
244
+ }
245
+ /**
246
+ * Create a specific client tool
247
+ */
248
+ createClientTool(serverId, toolName, agKitToolName) {
249
+ const tools = this.getServerTools(serverId);
250
+ const tool = tools.find((t) => t.name === toolName);
251
+ if (!tool) {
252
+ throw new Error(`Tool '${toolName}' not found on server '${serverId}'`);
253
+ }
254
+ const config = this.connections.get(serverId);
255
+ const toolMetadata = {
256
+ name: tool.name,
257
+ description: tool.description || "",
258
+ inputSchema: tool.inputSchema,
259
+ };
260
+ // Create a wrapper that uses this manager's client
261
+ const client = new Proxy(this.clients.get(serverId), {
262
+ get: (_, prop) => {
263
+ if (prop === "callTool") {
264
+ return async (params) => {
265
+ return this.callTool(serverId, params.name, params.arguments);
266
+ };
267
+ }
268
+ return Reflect.get(_, prop);
269
+ },
270
+ });
271
+ return new client_tool_1.MCPClientTool(client, toolMetadata, {
272
+ name: agKitToolName || `${serverId}:${toolName}`,
273
+ }, { includeMetadata: true });
274
+ }
275
+ /**
276
+ * Call a tool on a specific server
277
+ */
278
+ async callTool(serverId, toolName, args) {
279
+ const client = this.clients.get(serverId);
280
+ if (!client) {
281
+ throw new Error(`Server '${serverId}' not connected`);
282
+ }
283
+ try {
284
+ this.emit({
285
+ type: "tool_called",
286
+ toolName: `${serverId}:${toolName}`,
287
+ arguments: args,
288
+ });
289
+ const callResponse = await client.callTool({
290
+ name: toolName,
291
+ arguments: args,
292
+ });
293
+ this.emit({
294
+ type: "tool_result",
295
+ toolName: `${serverId}:${toolName}`,
296
+ result: callResponse,
297
+ });
298
+ return callResponse;
299
+ }
300
+ catch (error) {
301
+ this.emit({
302
+ type: "error",
303
+ error: error instanceof Error ? error : new Error(String(error)),
304
+ context: `tool_call:${serverId}:${toolName}`,
305
+ });
306
+ throw error;
307
+ }
308
+ }
309
+ /**
310
+ * Disconnect from a specific server
311
+ */
312
+ async disconnectServer(serverId) {
313
+ const client = this.clients.get(serverId);
314
+ const transport = this.transports.get(serverId);
315
+ if (client && transport) {
316
+ try {
317
+ await client.close();
318
+ this.emit({
319
+ type: "disconnected",
320
+ clientName: serverId,
321
+ });
322
+ }
323
+ catch (error) {
324
+ this.emit({
325
+ type: "error",
326
+ error: error instanceof Error ? error : new Error(String(error)),
327
+ context: `disconnect:${serverId}`,
328
+ });
329
+ throw error;
330
+ }
331
+ }
332
+ this.cleanupServer(serverId);
333
+ }
334
+ /**
335
+ * Disconnect from all servers
336
+ */
337
+ async disconnectAll() {
338
+ const serverIds = Array.from(this.clients.keys());
339
+ for (const serverId of serverIds) {
340
+ try {
341
+ await this.disconnectServer(serverId);
342
+ }
343
+ catch (error) {
344
+ console.error(`Error disconnecting from server '${serverId}':`, error);
345
+ }
346
+ }
347
+ }
348
+ /**
349
+ * Refresh connections and reload tools
350
+ */
351
+ async refresh() {
352
+ const serverIds = Array.from(this.connections.keys());
353
+ for (const serverId of serverIds) {
354
+ try {
355
+ const config = this.connections.get(serverId);
356
+ if (!config)
357
+ continue;
358
+ // Skip refresh for pre-connected clients
359
+ if (config.client) {
360
+ console.warn(`Skipping refresh for server '${serverId}' - it uses a pre-connected client. ` +
361
+ `Please handle refresh externally.`);
362
+ continue;
363
+ }
364
+ await this.disconnectServer(serverId);
365
+ await this.addServer(serverId, config, this.connectionOptions.get(serverId));
366
+ }
367
+ catch (error) {
368
+ console.error(`Error refreshing server '${serverId}':`, error);
369
+ }
370
+ }
371
+ }
372
+ /**
373
+ * Check if a server is connected
374
+ */
375
+ isServerConnected(serverId) {
376
+ const status = this.serverStatus.get(serverId);
377
+ return status?.connected === true && this.transports.has(serverId);
378
+ }
379
+ /**
380
+ * Get connection status for all servers
381
+ */
382
+ getConnectionStatus() {
383
+ const status = {};
384
+ for (const serverId of this.clients.keys()) {
385
+ status[serverId] = this.isServerConnected(serverId);
386
+ }
387
+ return status;
388
+ }
389
+ /**
390
+ * Add event listener
391
+ */
392
+ addEventListener(listener) {
393
+ this.eventListeners.add(listener);
394
+ }
395
+ /**
396
+ * Remove event listener
397
+ */
398
+ removeEventListener(listener) {
399
+ return this.eventListeners.delete(listener);
400
+ }
401
+ /**
402
+ * Emit event to all listeners
403
+ */
404
+ emit(event) {
405
+ this.eventListeners.forEach((listener) => {
406
+ try {
407
+ listener(event);
408
+ }
409
+ catch (error) {
410
+ console.error("[MCPClientManager] Error in event listener:", error);
411
+ }
412
+ });
413
+ }
414
+ /**
415
+ * Get statistics
416
+ */
417
+ getStats() {
418
+ return {
419
+ connectedServers: this.clients.size,
420
+ totalTools: Array.from(this.availableTools.values()).reduce((sum, tools) => sum + tools.length, 0),
421
+ serverStatus: this.getConnectionStatus(),
422
+ };
423
+ }
424
+ /**
425
+ * Set up heartbeat to keep connection alive
426
+ */
427
+ setupHeartbeat(serverId) {
428
+ const options = this.connectionOptions.get(serverId);
429
+ if (!options?.heartbeatInterval)
430
+ return;
431
+ const config = this.connections.get(serverId);
432
+ const heartbeatTimer = setInterval(async () => {
433
+ const client = this.clients.get(serverId);
434
+ const status = this.serverStatus.get(serverId);
435
+ if (client && status?.connected) {
436
+ try {
437
+ // Send ping to keep connection alive
438
+ await client.ping?.();
439
+ if (status) {
440
+ status.lastActivity = new Date();
441
+ }
442
+ }
443
+ catch (error) {
444
+ this.handleError(serverId, error instanceof Error ? error : new Error(String(error)), "heartbeat");
445
+ // Only auto-reconnect if we have transport config (not pre-connected client)
446
+ if (options.autoReconnect && config.transport) {
447
+ this.scheduleReconnect(serverId);
448
+ }
449
+ }
450
+ }
451
+ }, options.heartbeatInterval);
452
+ this.heartbeatTimers.set(serverId, heartbeatTimer);
453
+ }
454
+ /**
455
+ * Schedule automatic reconnection
456
+ */
457
+ scheduleReconnect(serverId) {
458
+ const options = this.connectionOptions.get(serverId);
459
+ const status = this.serverStatus.get(serverId);
460
+ const config = this.connections.get(serverId);
461
+ if (!options?.autoReconnect || !status || !config)
462
+ return;
463
+ // Don't auto-reconnect pre-connected clients without callback
464
+ if (config.client && !config.onReconnectNeeded) {
465
+ this.emit({
466
+ type: "error",
467
+ error: new Error(`Cannot auto-reconnect server '${serverId}' - it uses a pre-connected client without onReconnectNeeded callback. ` +
468
+ `Please provide an onReconnectNeeded callback or handle reconnection externally.`),
469
+ context: `auto_reconnect:${serverId}`,
470
+ });
471
+ return;
472
+ }
473
+ // Clear existing timer
474
+ const existingTimer = this.reconnectTimers.get(serverId);
475
+ if (existingTimer) {
476
+ clearTimeout(existingTimer);
477
+ }
478
+ // Check if we've exceeded max attempts
479
+ if (options.maxReconnectAttempts &&
480
+ status.reconnectAttempts >= options.maxReconnectAttempts) {
481
+ this.emit({
482
+ type: "error",
483
+ error: new Error(`Max reconnection attempts (${options.maxReconnectAttempts}) exceeded for server '${serverId}'`),
484
+ context: `reconnect:${serverId}`,
485
+ });
486
+ return;
487
+ }
488
+ const reconnectTimer = setTimeout(async () => {
489
+ try {
490
+ status.reconnectAttempts = (status.reconnectAttempts || 0) + 1;
491
+ await this.reconnectServer(serverId);
492
+ }
493
+ catch (error) {
494
+ console.error(`Reconnection failed for server '${serverId}':`, error);
495
+ // Schedule another reconnect attempt
496
+ this.scheduleReconnect(serverId);
497
+ }
498
+ }, options.reconnectDelay || 5000);
499
+ this.reconnectTimers.set(serverId, reconnectTimer);
500
+ }
501
+ /**
502
+ * Manually reconnect to a specific server
503
+ */
504
+ async reconnectServer(serverId) {
505
+ const config = this.connections.get(serverId);
506
+ if (!config) {
507
+ throw new Error(`Server '${serverId}' not found`);
508
+ }
509
+ // Clear existing timer
510
+ const existingTimer = this.reconnectTimers.get(serverId);
511
+ if (existingTimer) {
512
+ clearTimeout(existingTimer);
513
+ this.reconnectTimers.delete(serverId);
514
+ }
515
+ try {
516
+ await this.disconnectServer(serverId);
517
+ // Handle pre-connected client with reconnection callback
518
+ if (config.client) {
519
+ if (config.onReconnectNeeded) {
520
+ // Use the reconnection callback to get a new connected client
521
+ const newClient = await config.onReconnectNeeded(serverId, config);
522
+ const newConfig = { ...config, client: newClient };
523
+ await this.addServer(serverId, newConfig, this.connectionOptions.get(serverId));
524
+ }
525
+ else {
526
+ throw new Error(`Cannot reconnect server '${serverId}' - it uses a pre-connected client but no onReconnectNeeded callback is provided. ` +
527
+ `Please provide an onReconnectNeeded callback or handle reconnection externally.`);
528
+ }
529
+ }
530
+ else if (config.transport) {
531
+ // Standard reconnection using transport config
532
+ await this.addServer(serverId, config, this.connectionOptions.get(serverId));
533
+ }
534
+ else {
535
+ throw new Error(`Cannot reconnect server '${serverId}' - no transport configuration or reconnection callback available`);
536
+ }
537
+ }
538
+ catch (error) {
539
+ this.handleError(serverId, error instanceof Error ? error : new Error(String(error)), "reconnection");
540
+ throw error;
541
+ }
542
+ }
543
+ /**
544
+ * Handle errors and update status
545
+ */
546
+ handleError(serverId, error, context) {
547
+ const status = this.serverStatus.get(serverId);
548
+ if (!status)
549
+ return;
550
+ status.errors.push({
551
+ timestamp: new Date(),
552
+ error,
553
+ context,
554
+ });
555
+ // Keep only last 10 errors
556
+ if (status.errors.length > 10) {
557
+ status.errors = status.errors.slice(-10);
558
+ }
559
+ this.emit({
560
+ type: "error",
561
+ error,
562
+ context: `${context}:${serverId}`,
563
+ });
564
+ }
565
+ /**
566
+ * Clean up server resources
567
+ */
568
+ cleanupServer(serverId) {
569
+ // Clear timers
570
+ const reconnectTimer = this.reconnectTimers.get(serverId);
571
+ if (reconnectTimer) {
572
+ clearTimeout(reconnectTimer);
573
+ this.reconnectTimers.delete(serverId);
574
+ }
575
+ const heartbeatTimer = this.heartbeatTimers.get(serverId);
576
+ if (heartbeatTimer) {
577
+ clearInterval(heartbeatTimer);
578
+ this.heartbeatTimers.delete(serverId);
579
+ }
580
+ // Remove from maps
581
+ this.clients.delete(serverId);
582
+ this.connections.delete(serverId);
583
+ this.transports.delete(serverId);
584
+ this.availableTools.delete(serverId);
585
+ this.connectionOptions.delete(serverId);
586
+ this.serverStatus.delete(serverId);
587
+ }
588
+ /**
589
+ * Get server status
590
+ */
591
+ getServerStatus(serverId) {
592
+ return this.serverStatus.get(serverId);
593
+ }
594
+ /**
595
+ * Get all server statuses
596
+ */
597
+ getAllServerStatuses() {
598
+ const statuses = {};
599
+ for (const [serverId, status] of this.serverStatus.entries()) {
600
+ statuses[serverId] = { ...status };
601
+ }
602
+ return statuses;
603
+ }
604
+ }
605
+ exports.MCPClientManager = MCPClientManager;
606
+ //# sourceMappingURL=mcp-client-manager.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mcp-client-manager.js","sourceRoot":"","sources":["../../src/mcp/mcp-client-manager.ts"],"names":[],"mappings":"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"}