@juspay/neurolink 6.0.0 → 6.2.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 (283) hide show
  1. package/CHANGELOG.md +14 -3
  2. package/dist/cli/commands/config.d.ts +13 -13
  3. package/dist/cli/index.js +3 -9
  4. package/dist/core/analytics.d.ts +11 -1
  5. package/dist/core/analytics.js +2 -2
  6. package/dist/core/base-provider.js +4 -18
  7. package/dist/core/dynamic-models.d.ts +8 -8
  8. package/dist/core/factory.js +3 -11
  9. package/dist/index.d.ts +2 -4
  10. package/dist/index.js +2 -11
  11. package/dist/lib/core/analytics.d.ts +11 -1
  12. package/dist/lib/core/analytics.js +2 -2
  13. package/dist/lib/core/base-provider.js +4 -18
  14. package/dist/lib/core/dynamic-models.d.ts +8 -8
  15. package/dist/lib/core/factory.js +3 -11
  16. package/dist/lib/index.d.ts +2 -4
  17. package/dist/lib/index.js +2 -11
  18. package/dist/lib/mcp/factory.d.ts +1 -1
  19. package/dist/lib/mcp/index.d.ts +7 -19
  20. package/dist/lib/mcp/index.js +15 -56
  21. package/dist/lib/neurolink.d.ts +1 -9
  22. package/dist/lib/neurolink.js +21 -70
  23. package/dist/lib/providers/amazon-bedrock.js +5 -16
  24. package/dist/lib/providers/anthropic-baseprovider.js +3 -21
  25. package/dist/lib/providers/anthropic.js +4 -7
  26. package/dist/lib/providers/azure-openai.js +4 -2
  27. package/dist/lib/providers/google-vertex.js +5 -9
  28. package/dist/lib/providers/huggingFace.js +5 -10
  29. package/dist/lib/providers/mistral.js +5 -8
  30. package/dist/lib/providers/openAI.js +4 -7
  31. package/dist/lib/utils/providerConfig.d.ts +117 -0
  32. package/dist/lib/utils/providerConfig.js +353 -0
  33. package/dist/lib/utils/providerUtils.d.ts +2 -1
  34. package/dist/lib/utils/providerUtils.js +53 -36
  35. package/dist/lib/utils/timeout.d.ts +72 -1
  36. package/dist/lib/utils/timeout.js +203 -2
  37. package/dist/mcp/factory.d.ts +1 -1
  38. package/dist/mcp/index.d.ts +7 -19
  39. package/dist/mcp/index.js +15 -56
  40. package/dist/neurolink.d.ts +1 -9
  41. package/dist/neurolink.js +21 -70
  42. package/dist/providers/amazon-bedrock.js +5 -16
  43. package/dist/providers/anthropic-baseprovider.js +3 -21
  44. package/dist/providers/anthropic.js +4 -7
  45. package/dist/providers/azure-openai.js +4 -2
  46. package/dist/providers/google-vertex.js +5 -9
  47. package/dist/providers/huggingFace.js +5 -10
  48. package/dist/providers/mistral.js +5 -8
  49. package/dist/providers/openAI.js +4 -7
  50. package/dist/utils/providerConfig.d.ts +117 -0
  51. package/dist/utils/providerConfig.js +353 -0
  52. package/dist/utils/providerUtils.d.ts +2 -1
  53. package/dist/utils/providerUtils.js +53 -36
  54. package/dist/utils/timeout.d.ts +72 -1
  55. package/dist/utils/timeout.js +203 -2
  56. package/package.json +2 -1
  57. package/dist/chat/client-utils.d.ts +0 -95
  58. package/dist/chat/client-utils.js +0 -315
  59. package/dist/chat/index.d.ts +0 -24
  60. package/dist/chat/index.js +0 -33
  61. package/dist/chat/session-storage.d.ts +0 -77
  62. package/dist/chat/session-storage.js +0 -233
  63. package/dist/chat/session.d.ts +0 -96
  64. package/dist/chat/session.js +0 -257
  65. package/dist/chat/sse-handler.d.ts +0 -49
  66. package/dist/chat/sse-handler.js +0 -259
  67. package/dist/chat/types.d.ts +0 -74
  68. package/dist/chat/types.js +0 -5
  69. package/dist/chat/websocket-chat-handler.d.ts +0 -37
  70. package/dist/chat/websocket-chat-handler.js +0 -262
  71. package/dist/cli/commands/mcp.d.ts +0 -20
  72. package/dist/cli/commands/mcp.js +0 -1272
  73. package/dist/core/defaults.d.ts +0 -19
  74. package/dist/core/defaults.js +0 -29
  75. package/dist/core/evaluation-config.d.ts +0 -29
  76. package/dist/core/evaluation-config.js +0 -144
  77. package/dist/factories/compatibility-factory.d.ts +0 -35
  78. package/dist/factories/compatibility-factory.js +0 -71
  79. package/dist/factories/provider-generate-factory.d.ts +0 -20
  80. package/dist/factories/provider-generate-factory.js +0 -93
  81. package/dist/lib/chat/client-utils.d.ts +0 -95
  82. package/dist/lib/chat/client-utils.js +0 -315
  83. package/dist/lib/chat/index.d.ts +0 -24
  84. package/dist/lib/chat/index.js +0 -33
  85. package/dist/lib/chat/session-storage.d.ts +0 -77
  86. package/dist/lib/chat/session-storage.js +0 -233
  87. package/dist/lib/chat/session.d.ts +0 -96
  88. package/dist/lib/chat/session.js +0 -257
  89. package/dist/lib/chat/sse-handler.d.ts +0 -49
  90. package/dist/lib/chat/sse-handler.js +0 -259
  91. package/dist/lib/chat/types.d.ts +0 -74
  92. package/dist/lib/chat/types.js +0 -5
  93. package/dist/lib/chat/websocket-chat-handler.d.ts +0 -37
  94. package/dist/lib/chat/websocket-chat-handler.js +0 -262
  95. package/dist/lib/core/defaults.d.ts +0 -19
  96. package/dist/lib/core/defaults.js +0 -29
  97. package/dist/lib/core/evaluation-config.d.ts +0 -29
  98. package/dist/lib/core/evaluation-config.js +0 -144
  99. package/dist/lib/factories/compatibility-factory.d.ts +0 -35
  100. package/dist/lib/factories/compatibility-factory.js +0 -71
  101. package/dist/lib/factories/provider-generate-factory.d.ts +0 -20
  102. package/dist/lib/factories/provider-generate-factory.js +0 -93
  103. package/dist/lib/mcp/adapters/plugin-bridge.d.ts +0 -40
  104. package/dist/lib/mcp/adapters/plugin-bridge.js +0 -89
  105. package/dist/lib/mcp/auto-discovery.d.ts +0 -62
  106. package/dist/lib/mcp/auto-discovery.js +0 -149
  107. package/dist/lib/mcp/client.d.ts +0 -68
  108. package/dist/lib/mcp/client.js +0 -248
  109. package/dist/lib/mcp/config.d.ts +0 -31
  110. package/dist/lib/mcp/config.js +0 -99
  111. package/dist/lib/mcp/context-manager.d.ts +0 -171
  112. package/dist/lib/mcp/context-manager.js +0 -362
  113. package/dist/lib/mcp/contracts/mcp-contract.d.ts +0 -169
  114. package/dist/lib/mcp/contracts/mcp-contract.js +0 -58
  115. package/dist/lib/mcp/core/plugin-manager.d.ts +0 -46
  116. package/dist/lib/mcp/core/plugin-manager.js +0 -110
  117. package/dist/lib/mcp/demo/plugin-demo.d.ts +0 -20
  118. package/dist/lib/mcp/demo/plugin-demo.js +0 -118
  119. package/dist/lib/mcp/dynamic-chain-executor.d.ts +0 -225
  120. package/dist/lib/mcp/dynamic-chain-executor.js +0 -489
  121. package/dist/lib/mcp/dynamic-orchestrator.d.ts +0 -115
  122. package/dist/lib/mcp/dynamic-orchestrator.js +0 -351
  123. package/dist/lib/mcp/ecosystem.d.ts +0 -75
  124. package/dist/lib/mcp/ecosystem.js +0 -161
  125. package/dist/lib/mcp/error-manager.d.ts +0 -254
  126. package/dist/lib/mcp/error-manager.js +0 -501
  127. package/dist/lib/mcp/error-recovery.d.ts +0 -159
  128. package/dist/lib/mcp/error-recovery.js +0 -405
  129. package/dist/lib/mcp/external-client.d.ts +0 -88
  130. package/dist/lib/mcp/external-client.js +0 -331
  131. package/dist/lib/mcp/external-manager.d.ts +0 -112
  132. package/dist/lib/mcp/external-manager.js +0 -308
  133. package/dist/lib/mcp/function-calling.d.ts +0 -65
  134. package/dist/lib/mcp/function-calling.js +0 -642
  135. package/dist/lib/mcp/health-monitor.d.ts +0 -257
  136. package/dist/lib/mcp/health-monitor.js +0 -630
  137. package/dist/lib/mcp/initialize-tools.d.ts +0 -29
  138. package/dist/lib/mcp/initialize-tools.js +0 -261
  139. package/dist/lib/mcp/initialize.d.ts +0 -18
  140. package/dist/lib/mcp/initialize.js +0 -62
  141. package/dist/lib/mcp/manager.d.ts +0 -68
  142. package/dist/lib/mcp/manager.js +0 -176
  143. package/dist/lib/mcp/neurolink-mcp-client.d.ts +0 -97
  144. package/dist/lib/mcp/neurolink-mcp-client.js +0 -462
  145. package/dist/lib/mcp/orchestrator.d.ts +0 -302
  146. package/dist/lib/mcp/orchestrator.js +0 -703
  147. package/dist/lib/mcp/plugin-manager.d.ts +0 -98
  148. package/dist/lib/mcp/plugin-manager.js +0 -296
  149. package/dist/lib/mcp/plugins/core/filesystem-mcp.d.ts +0 -36
  150. package/dist/lib/mcp/plugins/core/filesystem-mcp.js +0 -142
  151. package/dist/lib/mcp/plugins/filesystem-mcp.d.ts +0 -37
  152. package/dist/lib/mcp/plugins/filesystem-mcp.js +0 -54
  153. package/dist/lib/mcp/security-manager.d.ts +0 -87
  154. package/dist/lib/mcp/security-manager.js +0 -344
  155. package/dist/lib/mcp/semaphore-manager.d.ts +0 -137
  156. package/dist/lib/mcp/semaphore-manager.js +0 -329
  157. package/dist/lib/mcp/session-manager.d.ts +0 -187
  158. package/dist/lib/mcp/session-manager.js +0 -400
  159. package/dist/lib/mcp/session-persistence.d.ts +0 -93
  160. package/dist/lib/mcp/session-persistence.js +0 -301
  161. package/dist/lib/mcp/tool-integration.d.ts +0 -58
  162. package/dist/lib/mcp/tool-integration.js +0 -203
  163. package/dist/lib/mcp/transport-manager.d.ts +0 -154
  164. package/dist/lib/mcp/transport-manager.js +0 -334
  165. package/dist/lib/mcp/unified-mcp.d.ts +0 -133
  166. package/dist/lib/mcp/unified-mcp.js +0 -251
  167. package/dist/lib/mcp/unified-registry.d.ts +0 -165
  168. package/dist/lib/mcp/unified-registry.js +0 -538
  169. package/dist/lib/providers/analytics-helper.d.ts +0 -38
  170. package/dist/lib/providers/analytics-helper.js +0 -216
  171. package/dist/lib/providers/function-calling-provider.d.ts +0 -142
  172. package/dist/lib/providers/function-calling-provider.js +0 -630
  173. package/dist/lib/providers/mcp-provider.d.ts +0 -75
  174. package/dist/lib/providers/mcp-provider.js +0 -283
  175. package/dist/lib/providers/timeout-wrapper.d.ts +0 -40
  176. package/dist/lib/providers/timeout-wrapper.js +0 -100
  177. package/dist/lib/sdk/tool-extension.d.ts +0 -181
  178. package/dist/lib/sdk/tool-extension.js +0 -284
  179. package/dist/lib/services/streaming/streaming-manager.d.ts +0 -29
  180. package/dist/lib/services/streaming/streaming-manager.js +0 -245
  181. package/dist/lib/services/types.d.ts +0 -156
  182. package/dist/lib/services/types.js +0 -2
  183. package/dist/lib/services/websocket/websocket-server.d.ts +0 -34
  184. package/dist/lib/services/websocket/websocket-server.js +0 -305
  185. package/dist/lib/utils/provider-validation.d.ts +0 -36
  186. package/dist/lib/utils/provider-validation.js +0 -625
  187. package/dist/lib/utils/providerUtils-fixed.d.ts +0 -8
  188. package/dist/lib/utils/providerUtils-fixed.js +0 -94
  189. package/dist/lib/utils/streaming-utils.d.ts +0 -79
  190. package/dist/lib/utils/streaming-utils.js +0 -198
  191. package/dist/lib/utils/timeout-manager.d.ts +0 -75
  192. package/dist/lib/utils/timeout-manager.js +0 -244
  193. package/dist/mcp/adapters/plugin-bridge.d.ts +0 -40
  194. package/dist/mcp/adapters/plugin-bridge.js +0 -89
  195. package/dist/mcp/auto-discovery.d.ts +0 -62
  196. package/dist/mcp/auto-discovery.js +0 -149
  197. package/dist/mcp/client.d.ts +0 -68
  198. package/dist/mcp/client.js +0 -248
  199. package/dist/mcp/config.d.ts +0 -31
  200. package/dist/mcp/config.js +0 -99
  201. package/dist/mcp/context-manager.d.ts +0 -171
  202. package/dist/mcp/context-manager.js +0 -362
  203. package/dist/mcp/contracts/mcp-contract.d.ts +0 -169
  204. package/dist/mcp/contracts/mcp-contract.js +0 -58
  205. package/dist/mcp/core/plugin-manager.d.ts +0 -46
  206. package/dist/mcp/core/plugin-manager.js +0 -110
  207. package/dist/mcp/demo/plugin-demo.d.ts +0 -20
  208. package/dist/mcp/demo/plugin-demo.js +0 -118
  209. package/dist/mcp/dynamic-chain-executor.d.ts +0 -225
  210. package/dist/mcp/dynamic-chain-executor.js +0 -489
  211. package/dist/mcp/dynamic-orchestrator.d.ts +0 -115
  212. package/dist/mcp/dynamic-orchestrator.js +0 -351
  213. package/dist/mcp/ecosystem.d.ts +0 -75
  214. package/dist/mcp/ecosystem.js +0 -162
  215. package/dist/mcp/error-manager.d.ts +0 -254
  216. package/dist/mcp/error-manager.js +0 -501
  217. package/dist/mcp/error-recovery.d.ts +0 -159
  218. package/dist/mcp/error-recovery.js +0 -405
  219. package/dist/mcp/external-client.d.ts +0 -88
  220. package/dist/mcp/external-client.js +0 -331
  221. package/dist/mcp/external-manager.d.ts +0 -112
  222. package/dist/mcp/external-manager.js +0 -308
  223. package/dist/mcp/function-calling.d.ts +0 -65
  224. package/dist/mcp/function-calling.js +0 -642
  225. package/dist/mcp/health-monitor.d.ts +0 -257
  226. package/dist/mcp/health-monitor.js +0 -630
  227. package/dist/mcp/initialize-tools.d.ts +0 -29
  228. package/dist/mcp/initialize-tools.js +0 -262
  229. package/dist/mcp/initialize.d.ts +0 -18
  230. package/dist/mcp/initialize.js +0 -62
  231. package/dist/mcp/manager.d.ts +0 -68
  232. package/dist/mcp/manager.js +0 -176
  233. package/dist/mcp/neurolink-mcp-client.d.ts +0 -97
  234. package/dist/mcp/neurolink-mcp-client.js +0 -462
  235. package/dist/mcp/orchestrator.d.ts +0 -302
  236. package/dist/mcp/orchestrator.js +0 -703
  237. package/dist/mcp/plugin-manager.d.ts +0 -98
  238. package/dist/mcp/plugin-manager.js +0 -297
  239. package/dist/mcp/plugins/core/filesystem-mcp.d.ts +0 -36
  240. package/dist/mcp/plugins/core/filesystem-mcp.js +0 -142
  241. package/dist/mcp/plugins/core/neurolink-mcp.json +0 -17
  242. package/dist/mcp/plugins/filesystem-mcp.d.ts +0 -37
  243. package/dist/mcp/plugins/filesystem-mcp.js +0 -54
  244. package/dist/mcp/security-manager.d.ts +0 -87
  245. package/dist/mcp/security-manager.js +0 -344
  246. package/dist/mcp/semaphore-manager.d.ts +0 -137
  247. package/dist/mcp/semaphore-manager.js +0 -329
  248. package/dist/mcp/session-manager.d.ts +0 -187
  249. package/dist/mcp/session-manager.js +0 -400
  250. package/dist/mcp/session-persistence.d.ts +0 -93
  251. package/dist/mcp/session-persistence.js +0 -302
  252. package/dist/mcp/tool-integration.d.ts +0 -58
  253. package/dist/mcp/tool-integration.js +0 -203
  254. package/dist/mcp/transport-manager.d.ts +0 -154
  255. package/dist/mcp/transport-manager.js +0 -335
  256. package/dist/mcp/unified-mcp.d.ts +0 -133
  257. package/dist/mcp/unified-mcp.js +0 -251
  258. package/dist/mcp/unified-registry.d.ts +0 -165
  259. package/dist/mcp/unified-registry.js +0 -539
  260. package/dist/providers/analytics-helper.d.ts +0 -38
  261. package/dist/providers/analytics-helper.js +0 -216
  262. package/dist/providers/function-calling-provider.d.ts +0 -142
  263. package/dist/providers/function-calling-provider.js +0 -630
  264. package/dist/providers/mcp-provider.d.ts +0 -75
  265. package/dist/providers/mcp-provider.js +0 -283
  266. package/dist/providers/timeout-wrapper.d.ts +0 -40
  267. package/dist/providers/timeout-wrapper.js +0 -100
  268. package/dist/sdk/tool-extension.d.ts +0 -181
  269. package/dist/sdk/tool-extension.js +0 -284
  270. package/dist/services/streaming/streaming-manager.d.ts +0 -29
  271. package/dist/services/streaming/streaming-manager.js +0 -245
  272. package/dist/services/types.d.ts +0 -156
  273. package/dist/services/types.js +0 -2
  274. package/dist/services/websocket/websocket-server.d.ts +0 -34
  275. package/dist/services/websocket/websocket-server.js +0 -306
  276. package/dist/utils/provider-validation.d.ts +0 -36
  277. package/dist/utils/provider-validation.js +0 -625
  278. package/dist/utils/providerUtils-fixed.d.ts +0 -8
  279. package/dist/utils/providerUtils-fixed.js +0 -94
  280. package/dist/utils/streaming-utils.d.ts +0 -79
  281. package/dist/utils/streaming-utils.js +0 -198
  282. package/dist/utils/timeout-manager.d.ts +0 -75
  283. package/dist/utils/timeout-manager.js +0 -244
@@ -1,331 +0,0 @@
1
- /**
2
- * NeuroLink External MCP Client
3
- * Connects to external MCP servers via stdio transport following MCP specification
4
- * Bridges external tools into NeuroLink's factory pattern ecosystem
5
- */
6
- import { spawn, ChildProcess } from "child_process";
7
- import { EventEmitter } from "events";
8
- import { mcpLogger as logger } from "./logging.js";
9
- /**
10
- * External MCP Client for stdio transport
11
- */
12
- export class ExternalMCPClient extends EventEmitter {
13
- config;
14
- process = null;
15
- isConnected = false;
16
- messageId = 0;
17
- pendingRequests = new Map();
18
- tools = new Map();
19
- buffer = "";
20
- constructor(config) {
21
- super();
22
- this.config = {
23
- timeout: 30000,
24
- retryAttempts: 3,
25
- ...config,
26
- };
27
- }
28
- /**
29
- * Connect to the external MCP server
30
- */
31
- async connect() {
32
- if (this.isConnected) {
33
- logger.debug(`[External MCP] Already connected to ${this.config.name}`);
34
- return;
35
- }
36
- try {
37
- logger.info(`[External MCP] Connecting to ${this.config.name}...`);
38
- // Spawn the MCP server process
39
- this.process = spawn(this.config.command, this.config.args, {
40
- stdio: ["pipe", "pipe", "pipe"],
41
- env: { ...process.env, ...this.config.env },
42
- });
43
- // 🔧 FIX: Register for cleanup
44
- process.once("beforeExit", () => this.disconnect());
45
- process.once("SIGINT", () => this.disconnect());
46
- process.once("SIGTERM", () => this.disconnect());
47
- if (!this.process.stdout || !this.process.stdin || !this.process.stderr) {
48
- throw new Error("Failed to create stdio pipes");
49
- }
50
- // Setup stdout handler for receiving messages
51
- this.process.stdout.on("data", (data) => {
52
- this.handleMessage(data.toString());
53
- });
54
- // Setup stderr handler for debugging
55
- this.process.stderr.on("data", (data) => {
56
- logger.debug(`[External MCP] ${this.config.name} stderr:`, data.toString().trim());
57
- });
58
- // Handle process exit
59
- this.process.on("exit", (code, signal) => {
60
- logger.warn(`[External MCP] ${this.config.name} process exited`, {
61
- code,
62
- signal,
63
- });
64
- this.isConnected = false;
65
- this.emit("disconnected", { code, signal });
66
- });
67
- // Handle process errors
68
- this.process.on("error", (error) => {
69
- logger.error(`[External MCP] ${this.config.name} process error:`, error);
70
- this.emit("error", error);
71
- });
72
- // Initialize MCP session
73
- await this.initialize();
74
- // Discover available tools
75
- await this.discoverTools();
76
- this.isConnected = true;
77
- logger.info(`[External MCP] Connected to ${this.config.name} with ${this.tools.size} tools`);
78
- this.emit("connected");
79
- }
80
- catch (error) {
81
- logger.error(`[External MCP] Failed to connect to ${this.config.name}:`, error);
82
- await this.disconnect();
83
- throw error;
84
- }
85
- }
86
- /**
87
- * Initialize MCP session
88
- */
89
- async initialize() {
90
- const initResponse = await this.sendRequest("initialize", {
91
- protocolVersion: "2024-11-05",
92
- capabilities: {
93
- tools: {},
94
- },
95
- clientInfo: {
96
- name: "neurolink-mcp-client",
97
- version: "1.0.0",
98
- },
99
- });
100
- logger.debug(`[External MCP] ${this.config.name} initialized:`, initResponse);
101
- }
102
- /**
103
- * Discover available tools from the server
104
- */
105
- async discoverTools() {
106
- try {
107
- const response = await this.sendRequest("tools/list", {});
108
- const responseObj = response;
109
- if (responseObj.tools && Array.isArray(responseObj.tools)) {
110
- this.tools.clear();
111
- for (const tool of responseObj.tools) {
112
- const toolObj = tool;
113
- this.tools.set(toolObj.name || "unknown", {
114
- name: toolObj.name || "unknown",
115
- description: toolObj.description || "",
116
- inputSchema: toolObj.inputSchema,
117
- });
118
- }
119
- logger.debug(`[External MCP] Discovered ${this.tools.size} tools from ${this.config.name}`);
120
- }
121
- }
122
- catch (error) {
123
- logger.warn(`[External MCP] Failed to discover tools from ${this.config.name}:`, error);
124
- }
125
- }
126
- /**
127
- * Execute a tool on the external server
128
- */
129
- async executeTool(toolName, params, context) {
130
- if (!this.isConnected) {
131
- throw new Error(`Not connected to MCP server: ${this.config.name}`);
132
- }
133
- const startTime = Date.now();
134
- try {
135
- logger.debug(`[External MCP] Executing tool ${toolName} on ${this.config.name}`);
136
- const response = await this.sendRequest("tools/call", {
137
- name: toolName,
138
- arguments: params,
139
- });
140
- const executionTime = Date.now() - startTime;
141
- // Transform MCP response to NeuroLink format
142
- const responseObj = response;
143
- const result = {
144
- success: !responseObj.isError,
145
- data: responseObj.text || responseObj.result || response,
146
- metadata: {
147
- toolName,
148
- serverId: this.config.name,
149
- serverTitle: this.config.name,
150
- sessionId: context.sessionId,
151
- timestamp: Date.now(),
152
- executionTime,
153
- },
154
- };
155
- if (responseObj.isError) {
156
- const textArray = responseObj.text;
157
- result.error = textArray?.[0]?.text || "Tool execution failed";
158
- }
159
- logger.debug(`[External MCP] Tool ${toolName} executed in ${executionTime}ms`);
160
- return result;
161
- }
162
- catch (error) {
163
- const executionTime = Date.now() - startTime;
164
- const errorMessage = error instanceof Error ? error.message : String(error);
165
- logger.error(`[External MCP] Tool execution failed: ${toolName}`, error);
166
- return {
167
- success: false,
168
- error: errorMessage,
169
- metadata: {
170
- toolName,
171
- serverId: this.config.name,
172
- serverTitle: this.config.name,
173
- sessionId: context.sessionId,
174
- timestamp: Date.now(),
175
- executionTime,
176
- },
177
- };
178
- }
179
- }
180
- /**
181
- * Get available tools as NeuroLink MCP tools
182
- */
183
- getNeuroLinkTools() {
184
- const neurolinkTools = {};
185
- for (const [name, toolInfo] of this.tools) {
186
- neurolinkTools[name] = {
187
- name,
188
- description: toolInfo.description || `External tool from ${this.config.name}`,
189
- category: "external",
190
- isImplemented: true,
191
- execute: async (params, context) => {
192
- return this.executeTool(name, params, context);
193
- },
194
- inputSchema: toolInfo.inputSchema,
195
- metadata: {
196
- serverId: this.config.name,
197
- serverTitle: this.config.name,
198
- external: true,
199
- transport: "stdio",
200
- },
201
- };
202
- }
203
- return neurolinkTools;
204
- }
205
- /**
206
- * Send a request to the MCP server
207
- */
208
- async sendRequest(method, params) {
209
- return new Promise((resolve, reject) => {
210
- if (!this.process?.stdin) {
211
- reject(new Error("Process not available"));
212
- return;
213
- }
214
- const id = ++this.messageId;
215
- const message = {
216
- jsonrpc: "2.0",
217
- id,
218
- method,
219
- params,
220
- };
221
- // Setup timeout
222
- const timeout = setTimeout(() => {
223
- this.pendingRequests.delete(id);
224
- reject(new Error(`Request timeout: ${method}`));
225
- }, this.config.timeout);
226
- // Store request for response handling
227
- this.pendingRequests.set(id, { resolve, reject, timeout });
228
- // Send message
229
- const messageStr = JSON.stringify(message) + "\n";
230
- this.process.stdin.write(messageStr);
231
- logger.debug(`[External MCP] Sent request ${id}: ${method}`);
232
- });
233
- }
234
- /**
235
- * Handle incoming messages from the server
236
- */
237
- handleMessage(data) {
238
- this.buffer += data;
239
- let lineEnd;
240
- while ((lineEnd = this.buffer.indexOf("\n")) !== -1) {
241
- const line = this.buffer.slice(0, lineEnd);
242
- this.buffer = this.buffer.slice(lineEnd + 1);
243
- if (line.trim()) {
244
- try {
245
- const message = JSON.parse(line);
246
- this.processMessage(message);
247
- }
248
- catch (error) {
249
- logger.warn(`[External MCP] Failed to parse message from ${this.config.name}:`, line);
250
- }
251
- }
252
- }
253
- }
254
- /**
255
- * Process a parsed MCP message
256
- */
257
- processMessage(message) {
258
- if (message.id !== undefined && this.pendingRequests.has(message.id)) {
259
- // Response to our request
260
- const pending = this.pendingRequests.get(message.id);
261
- this.pendingRequests.delete(message.id);
262
- clearTimeout(pending.timeout);
263
- if (message.error) {
264
- pending.reject(new Error(message.error.message));
265
- }
266
- else {
267
- pending.resolve(message.result);
268
- }
269
- }
270
- else if (message.method) {
271
- // Notification or request from server
272
- logger.debug(`[External MCP] Received notification: ${message.method}`);
273
- this.emit("notification", message);
274
- }
275
- }
276
- /**
277
- * Disconnect from the server
278
- */
279
- async disconnect() {
280
- if (!this.isConnected && !this.process) {
281
- return;
282
- }
283
- logger.info(`[External MCP] Disconnecting from ${this.config.name}`);
284
- // Clear pending requests
285
- for (const pending of this.pendingRequests.values()) {
286
- clearTimeout(pending.timeout);
287
- pending.reject(new Error("Connection closed"));
288
- }
289
- this.pendingRequests.clear();
290
- // 🔧 FIX: Enhanced process cleanup
291
- if (this.process) {
292
- this.process.kill("SIGTERM");
293
- // Force kill after timeout
294
- setTimeout(() => {
295
- if (this.process && !this.process.killed) {
296
- this.process.kill("SIGKILL");
297
- }
298
- }, 1000); // Reduced from 5000ms to 1000ms
299
- this.process = null;
300
- }
301
- this.isConnected = false;
302
- this.tools.clear();
303
- this.emit("disconnected");
304
- }
305
- /**
306
- * Check if connected
307
- */
308
- isConnectedToServer() {
309
- return this.isConnected && this.process !== null;
310
- }
311
- /**
312
- * Get server information
313
- */
314
- getServerInfo() {
315
- return {
316
- name: this.config.name,
317
- command: this.config.command,
318
- args: this.config.args,
319
- transport: this.config.transport,
320
- isConnected: this.isConnected,
321
- toolCount: this.tools.size,
322
- tools: Array.from(this.tools.keys()),
323
- };
324
- }
325
- }
326
- /**
327
- * Create an external MCP client
328
- */
329
- export function createExternalMCPClient(config) {
330
- return new ExternalMCPClient(config);
331
- }
@@ -1,112 +0,0 @@
1
- /**
2
- * NeuroLink External MCP Manager
3
- * Manages external MCP servers and bridges them into the NeuroLink factory ecosystem
4
- * Reads .mcp-config.json and spawns external clients
5
- */
6
- import { ExternalMCPClient } from "./external-client.js";
7
- import type { NeuroLinkMCPServer, NeuroLinkExecutionContext, ToolResult } from "./factory.js";
8
- import { MCPToolRegistry } from "./tool-registry.js";
9
- /**
10
- * External server connection info
11
- */
12
- interface ExternalServerInfo {
13
- name: string;
14
- client: ExternalMCPClient | null;
15
- server: NeuroLinkMCPServer | null;
16
- status: "connecting" | "connected" | "disconnected" | "error";
17
- lastError?: string;
18
- toolCount: number;
19
- retryCount: number;
20
- }
21
- /**
22
- * External MCP Manager
23
- * Bridges external MCP servers into NeuroLink's factory pattern ecosystem
24
- */
25
- export declare class ExternalMCPManager {
26
- private servers;
27
- private registry;
28
- private configPath;
29
- private config;
30
- private isInitialized;
31
- constructor(configPath?: string, registry?: MCPToolRegistry);
32
- /**
33
- * Initialize the external MCP manager
34
- * Reads config and connects to all external servers
35
- */
36
- initialize(): Promise<void>;
37
- /**
38
- * Load MCP configuration from file
39
- */
40
- private loadConfig;
41
- /**
42
- * Connect to a specific external server
43
- */
44
- connectToServer(serverName: string): Promise<ExternalServerInfo | null>;
45
- /**
46
- * Register tools from an external server with the NeuroLink registry
47
- */
48
- private registerServerTools;
49
- /**
50
- * Get all connected external servers
51
- */
52
- getConnectedServers(): ExternalServerInfo[];
53
- /**
54
- * Get server status
55
- */
56
- getServerStatus(serverName: string): ExternalServerInfo | undefined;
57
- /**
58
- * Get all server statuses
59
- */
60
- getAllServerStatuses(): Record<string, ExternalServerInfo>;
61
- /**
62
- * Execute a tool on any connected server
63
- */
64
- executeTool(toolName: string, params: unknown, context: NeuroLinkExecutionContext): Promise<ToolResult>;
65
- /**
66
- * List all available tools from external servers
67
- */
68
- listExternalTools(): Promise<import("./tool-registry.js").ToolInfo[]>;
69
- /**
70
- * Get registry instance
71
- */
72
- getRegistry(): MCPToolRegistry;
73
- /**
74
- * Disconnect from a specific server
75
- */
76
- disconnectServer(serverName: string): Promise<boolean>;
77
- /**
78
- * Disconnect from all servers
79
- */
80
- disconnectAll(): Promise<void>;
81
- /**
82
- * Refresh connections - reload config and reconnect
83
- */
84
- refresh(): Promise<void>;
85
- /**
86
- * Get comprehensive status
87
- */
88
- getStatus(): {
89
- isInitialized: boolean;
90
- configPath: string;
91
- totalServers: number;
92
- connected: number;
93
- connecting: number;
94
- disconnected: number;
95
- errors: number;
96
- totalTools: number;
97
- servers: Record<string, ExternalServerInfo>;
98
- };
99
- }
100
- /**
101
- * Default external MCP manager instance
102
- */
103
- export declare const defaultExternalMCPManager: ExternalMCPManager;
104
- /**
105
- * Initialize external MCP servers with default manager
106
- */
107
- export declare function initializeExternalMCP(configPath?: string): Promise<void>;
108
- /**
109
- * Get the default external MCP manager
110
- */
111
- export declare function getExternalMCPManager(): ExternalMCPManager;
112
- export {};