@juspay/neurolink 6.1.0 → 6.2.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.
Files changed (303) hide show
  1. package/CHANGELOG.md +16 -6
  2. package/dist/agent/direct-tools.js +6 -5
  3. package/dist/cli/commands/config.d.ts +13 -13
  4. package/dist/cli/index.js +3 -9
  5. package/dist/config/configManager.js +11 -10
  6. package/dist/core/analytics.d.ts +11 -1
  7. package/dist/core/analytics.js +2 -2
  8. package/dist/core/base-provider.js +4 -18
  9. package/dist/core/dynamic-models.d.ts +8 -8
  10. package/dist/core/factory.js +3 -11
  11. package/dist/index.d.ts +2 -4
  12. package/dist/index.js +2 -11
  13. package/dist/lib/agent/direct-tools.js +6 -5
  14. package/dist/lib/config/configManager.js +11 -10
  15. package/dist/lib/core/analytics.d.ts +11 -1
  16. package/dist/lib/core/analytics.js +2 -2
  17. package/dist/lib/core/base-provider.js +4 -18
  18. package/dist/lib/core/dynamic-models.d.ts +8 -8
  19. package/dist/lib/core/factory.js +3 -11
  20. package/dist/lib/index.d.ts +2 -4
  21. package/dist/lib/index.js +2 -11
  22. package/dist/lib/mcp/factory.d.ts +1 -1
  23. package/dist/lib/mcp/index.d.ts +9 -21
  24. package/dist/lib/mcp/index.js +16 -57
  25. package/dist/lib/mcp/registry.js +1 -1
  26. package/dist/lib/mcp/servers/ai-providers/ai-analysis-tools.js +2 -1
  27. package/dist/lib/mcp/tool-registry.js +1 -1
  28. package/dist/lib/neurolink.d.ts +1 -9
  29. package/dist/lib/neurolink.js +22 -71
  30. package/dist/lib/providers/amazon-bedrock.js +5 -16
  31. package/dist/lib/providers/anthropic-baseprovider.js +3 -21
  32. package/dist/lib/providers/anthropic.js +4 -7
  33. package/dist/lib/providers/azure-openai.js +6 -3
  34. package/dist/lib/providers/google-vertex.js +5 -9
  35. package/dist/lib/providers/huggingFace.js +5 -10
  36. package/dist/lib/providers/mistral.js +5 -8
  37. package/dist/lib/providers/openAI.js +4 -7
  38. package/dist/lib/telemetry/index.js +2 -1
  39. package/dist/lib/utils/logger.d.ts +62 -2
  40. package/dist/lib/utils/logger.js +174 -9
  41. package/dist/lib/utils/providerConfig.d.ts +117 -0
  42. package/dist/lib/utils/providerConfig.js +353 -0
  43. package/dist/lib/utils/providerUtils.d.ts +2 -1
  44. package/dist/lib/utils/providerUtils.js +53 -36
  45. package/dist/lib/utils/timeout.d.ts +72 -1
  46. package/dist/lib/utils/timeout.js +203 -2
  47. package/dist/mcp/factory.d.ts +1 -1
  48. package/dist/mcp/index.d.ts +9 -21
  49. package/dist/mcp/index.js +16 -57
  50. package/dist/mcp/registry.js +1 -1
  51. package/dist/mcp/servers/ai-providers/ai-analysis-tools.js +2 -1
  52. package/dist/mcp/tool-registry.js +1 -1
  53. package/dist/neurolink.d.ts +1 -9
  54. package/dist/neurolink.js +22 -71
  55. package/dist/providers/amazon-bedrock.js +5 -16
  56. package/dist/providers/anthropic-baseprovider.js +3 -21
  57. package/dist/providers/anthropic.js +4 -7
  58. package/dist/providers/azure-openai.js +6 -3
  59. package/dist/providers/google-vertex.js +5 -9
  60. package/dist/providers/huggingFace.js +5 -10
  61. package/dist/providers/mistral.js +5 -8
  62. package/dist/providers/openAI.js +4 -7
  63. package/dist/telemetry/index.js +2 -1
  64. package/dist/utils/logger.d.ts +62 -2
  65. package/dist/utils/logger.js +174 -9
  66. package/dist/utils/providerConfig.d.ts +117 -0
  67. package/dist/utils/providerConfig.js +353 -0
  68. package/dist/utils/providerUtils.d.ts +2 -1
  69. package/dist/utils/providerUtils.js +53 -36
  70. package/dist/utils/timeout.d.ts +72 -1
  71. package/dist/utils/timeout.js +203 -2
  72. package/package.json +1 -1
  73. package/dist/chat/client-utils.d.ts +0 -95
  74. package/dist/chat/client-utils.js +0 -315
  75. package/dist/chat/index.d.ts +0 -24
  76. package/dist/chat/index.js +0 -33
  77. package/dist/chat/session-storage.d.ts +0 -77
  78. package/dist/chat/session-storage.js +0 -233
  79. package/dist/chat/session.d.ts +0 -96
  80. package/dist/chat/session.js +0 -257
  81. package/dist/chat/sse-handler.d.ts +0 -49
  82. package/dist/chat/sse-handler.js +0 -259
  83. package/dist/chat/types.d.ts +0 -74
  84. package/dist/chat/types.js +0 -5
  85. package/dist/chat/websocket-chat-handler.d.ts +0 -37
  86. package/dist/chat/websocket-chat-handler.js +0 -262
  87. package/dist/cli/commands/mcp.d.ts +0 -20
  88. package/dist/cli/commands/mcp.js +0 -1272
  89. package/dist/core/defaults.d.ts +0 -19
  90. package/dist/core/defaults.js +0 -29
  91. package/dist/core/evaluation-config.d.ts +0 -29
  92. package/dist/core/evaluation-config.js +0 -144
  93. package/dist/factories/compatibility-factory.d.ts +0 -35
  94. package/dist/factories/compatibility-factory.js +0 -71
  95. package/dist/factories/provider-generate-factory.d.ts +0 -20
  96. package/dist/factories/provider-generate-factory.js +0 -93
  97. package/dist/lib/chat/client-utils.d.ts +0 -95
  98. package/dist/lib/chat/client-utils.js +0 -315
  99. package/dist/lib/chat/index.d.ts +0 -24
  100. package/dist/lib/chat/index.js +0 -33
  101. package/dist/lib/chat/session-storage.d.ts +0 -77
  102. package/dist/lib/chat/session-storage.js +0 -233
  103. package/dist/lib/chat/session.d.ts +0 -96
  104. package/dist/lib/chat/session.js +0 -257
  105. package/dist/lib/chat/sse-handler.d.ts +0 -49
  106. package/dist/lib/chat/sse-handler.js +0 -259
  107. package/dist/lib/chat/types.d.ts +0 -74
  108. package/dist/lib/chat/types.js +0 -5
  109. package/dist/lib/chat/websocket-chat-handler.d.ts +0 -37
  110. package/dist/lib/chat/websocket-chat-handler.js +0 -262
  111. package/dist/lib/core/defaults.d.ts +0 -19
  112. package/dist/lib/core/defaults.js +0 -29
  113. package/dist/lib/core/evaluation-config.d.ts +0 -29
  114. package/dist/lib/core/evaluation-config.js +0 -144
  115. package/dist/lib/factories/compatibility-factory.d.ts +0 -35
  116. package/dist/lib/factories/compatibility-factory.js +0 -71
  117. package/dist/lib/factories/provider-generate-factory.d.ts +0 -20
  118. package/dist/lib/factories/provider-generate-factory.js +0 -93
  119. package/dist/lib/mcp/adapters/plugin-bridge.d.ts +0 -40
  120. package/dist/lib/mcp/adapters/plugin-bridge.js +0 -89
  121. package/dist/lib/mcp/auto-discovery.d.ts +0 -62
  122. package/dist/lib/mcp/auto-discovery.js +0 -149
  123. package/dist/lib/mcp/client.d.ts +0 -68
  124. package/dist/lib/mcp/client.js +0 -248
  125. package/dist/lib/mcp/config.d.ts +0 -31
  126. package/dist/lib/mcp/config.js +0 -99
  127. package/dist/lib/mcp/context-manager.d.ts +0 -171
  128. package/dist/lib/mcp/context-manager.js +0 -362
  129. package/dist/lib/mcp/contracts/mcp-contract.d.ts +0 -169
  130. package/dist/lib/mcp/contracts/mcp-contract.js +0 -58
  131. package/dist/lib/mcp/core/plugin-manager.d.ts +0 -46
  132. package/dist/lib/mcp/core/plugin-manager.js +0 -110
  133. package/dist/lib/mcp/demo/plugin-demo.d.ts +0 -20
  134. package/dist/lib/mcp/demo/plugin-demo.js +0 -118
  135. package/dist/lib/mcp/dynamic-chain-executor.d.ts +0 -225
  136. package/dist/lib/mcp/dynamic-chain-executor.js +0 -489
  137. package/dist/lib/mcp/dynamic-orchestrator.d.ts +0 -115
  138. package/dist/lib/mcp/dynamic-orchestrator.js +0 -351
  139. package/dist/lib/mcp/ecosystem.d.ts +0 -75
  140. package/dist/lib/mcp/ecosystem.js +0 -161
  141. package/dist/lib/mcp/error-manager.d.ts +0 -254
  142. package/dist/lib/mcp/error-manager.js +0 -501
  143. package/dist/lib/mcp/error-recovery.d.ts +0 -159
  144. package/dist/lib/mcp/error-recovery.js +0 -405
  145. package/dist/lib/mcp/external-client.d.ts +0 -88
  146. package/dist/lib/mcp/external-client.js +0 -331
  147. package/dist/lib/mcp/external-manager.d.ts +0 -112
  148. package/dist/lib/mcp/external-manager.js +0 -308
  149. package/dist/lib/mcp/function-calling.d.ts +0 -65
  150. package/dist/lib/mcp/function-calling.js +0 -642
  151. package/dist/lib/mcp/health-monitor.d.ts +0 -257
  152. package/dist/lib/mcp/health-monitor.js +0 -630
  153. package/dist/lib/mcp/initialize-tools.d.ts +0 -29
  154. package/dist/lib/mcp/initialize-tools.js +0 -261
  155. package/dist/lib/mcp/initialize.d.ts +0 -18
  156. package/dist/lib/mcp/initialize.js +0 -62
  157. package/dist/lib/mcp/logging.d.ts +0 -38
  158. package/dist/lib/mcp/logging.js +0 -100
  159. package/dist/lib/mcp/manager.d.ts +0 -68
  160. package/dist/lib/mcp/manager.js +0 -176
  161. package/dist/lib/mcp/neurolink-mcp-client.d.ts +0 -97
  162. package/dist/lib/mcp/neurolink-mcp-client.js +0 -462
  163. package/dist/lib/mcp/orchestrator.d.ts +0 -302
  164. package/dist/lib/mcp/orchestrator.js +0 -703
  165. package/dist/lib/mcp/plugin-manager.d.ts +0 -98
  166. package/dist/lib/mcp/plugin-manager.js +0 -296
  167. package/dist/lib/mcp/plugins/core/filesystem-mcp.d.ts +0 -36
  168. package/dist/lib/mcp/plugins/core/filesystem-mcp.js +0 -142
  169. package/dist/lib/mcp/plugins/filesystem-mcp.d.ts +0 -37
  170. package/dist/lib/mcp/plugins/filesystem-mcp.js +0 -54
  171. package/dist/lib/mcp/security-manager.d.ts +0 -87
  172. package/dist/lib/mcp/security-manager.js +0 -344
  173. package/dist/lib/mcp/semaphore-manager.d.ts +0 -137
  174. package/dist/lib/mcp/semaphore-manager.js +0 -329
  175. package/dist/lib/mcp/session-manager.d.ts +0 -187
  176. package/dist/lib/mcp/session-manager.js +0 -400
  177. package/dist/lib/mcp/session-persistence.d.ts +0 -93
  178. package/dist/lib/mcp/session-persistence.js +0 -301
  179. package/dist/lib/mcp/tool-integration.d.ts +0 -58
  180. package/dist/lib/mcp/tool-integration.js +0 -203
  181. package/dist/lib/mcp/transport-manager.d.ts +0 -154
  182. package/dist/lib/mcp/transport-manager.js +0 -334
  183. package/dist/lib/mcp/unified-mcp.d.ts +0 -133
  184. package/dist/lib/mcp/unified-mcp.js +0 -251
  185. package/dist/lib/mcp/unified-registry.d.ts +0 -165
  186. package/dist/lib/mcp/unified-registry.js +0 -538
  187. package/dist/lib/providers/analytics-helper.d.ts +0 -38
  188. package/dist/lib/providers/analytics-helper.js +0 -216
  189. package/dist/lib/providers/function-calling-provider.d.ts +0 -142
  190. package/dist/lib/providers/function-calling-provider.js +0 -630
  191. package/dist/lib/providers/mcp-provider.d.ts +0 -75
  192. package/dist/lib/providers/mcp-provider.js +0 -283
  193. package/dist/lib/providers/timeout-wrapper.d.ts +0 -40
  194. package/dist/lib/providers/timeout-wrapper.js +0 -100
  195. package/dist/lib/sdk/tool-extension.d.ts +0 -181
  196. package/dist/lib/sdk/tool-extension.js +0 -284
  197. package/dist/lib/services/streaming/streaming-manager.d.ts +0 -29
  198. package/dist/lib/services/streaming/streaming-manager.js +0 -245
  199. package/dist/lib/services/types.d.ts +0 -156
  200. package/dist/lib/services/types.js +0 -2
  201. package/dist/lib/services/websocket/websocket-server.d.ts +0 -34
  202. package/dist/lib/services/websocket/websocket-server.js +0 -305
  203. package/dist/lib/utils/provider-validation.d.ts +0 -36
  204. package/dist/lib/utils/provider-validation.js +0 -625
  205. package/dist/lib/utils/providerUtils-fixed.d.ts +0 -8
  206. package/dist/lib/utils/providerUtils-fixed.js +0 -94
  207. package/dist/lib/utils/streaming-utils.d.ts +0 -79
  208. package/dist/lib/utils/streaming-utils.js +0 -198
  209. package/dist/lib/utils/timeout-manager.d.ts +0 -75
  210. package/dist/lib/utils/timeout-manager.js +0 -244
  211. package/dist/mcp/adapters/plugin-bridge.d.ts +0 -40
  212. package/dist/mcp/adapters/plugin-bridge.js +0 -89
  213. package/dist/mcp/auto-discovery.d.ts +0 -62
  214. package/dist/mcp/auto-discovery.js +0 -149
  215. package/dist/mcp/client.d.ts +0 -68
  216. package/dist/mcp/client.js +0 -248
  217. package/dist/mcp/config.d.ts +0 -31
  218. package/dist/mcp/config.js +0 -99
  219. package/dist/mcp/context-manager.d.ts +0 -171
  220. package/dist/mcp/context-manager.js +0 -362
  221. package/dist/mcp/contracts/mcp-contract.d.ts +0 -169
  222. package/dist/mcp/contracts/mcp-contract.js +0 -58
  223. package/dist/mcp/core/plugin-manager.d.ts +0 -46
  224. package/dist/mcp/core/plugin-manager.js +0 -110
  225. package/dist/mcp/demo/plugin-demo.d.ts +0 -20
  226. package/dist/mcp/demo/plugin-demo.js +0 -118
  227. package/dist/mcp/dynamic-chain-executor.d.ts +0 -225
  228. package/dist/mcp/dynamic-chain-executor.js +0 -489
  229. package/dist/mcp/dynamic-orchestrator.d.ts +0 -115
  230. package/dist/mcp/dynamic-orchestrator.js +0 -351
  231. package/dist/mcp/ecosystem.d.ts +0 -75
  232. package/dist/mcp/ecosystem.js +0 -162
  233. package/dist/mcp/error-manager.d.ts +0 -254
  234. package/dist/mcp/error-manager.js +0 -501
  235. package/dist/mcp/error-recovery.d.ts +0 -159
  236. package/dist/mcp/error-recovery.js +0 -405
  237. package/dist/mcp/external-client.d.ts +0 -88
  238. package/dist/mcp/external-client.js +0 -331
  239. package/dist/mcp/external-manager.d.ts +0 -112
  240. package/dist/mcp/external-manager.js +0 -308
  241. package/dist/mcp/function-calling.d.ts +0 -65
  242. package/dist/mcp/function-calling.js +0 -642
  243. package/dist/mcp/health-monitor.d.ts +0 -257
  244. package/dist/mcp/health-monitor.js +0 -630
  245. package/dist/mcp/initialize-tools.d.ts +0 -29
  246. package/dist/mcp/initialize-tools.js +0 -262
  247. package/dist/mcp/initialize.d.ts +0 -18
  248. package/dist/mcp/initialize.js +0 -62
  249. package/dist/mcp/logging.d.ts +0 -38
  250. package/dist/mcp/logging.js +0 -100
  251. package/dist/mcp/manager.d.ts +0 -68
  252. package/dist/mcp/manager.js +0 -176
  253. package/dist/mcp/neurolink-mcp-client.d.ts +0 -97
  254. package/dist/mcp/neurolink-mcp-client.js +0 -462
  255. package/dist/mcp/orchestrator.d.ts +0 -302
  256. package/dist/mcp/orchestrator.js +0 -703
  257. package/dist/mcp/plugin-manager.d.ts +0 -98
  258. package/dist/mcp/plugin-manager.js +0 -297
  259. package/dist/mcp/plugins/core/filesystem-mcp.d.ts +0 -36
  260. package/dist/mcp/plugins/core/filesystem-mcp.js +0 -142
  261. package/dist/mcp/plugins/core/neurolink-mcp.json +0 -17
  262. package/dist/mcp/plugins/filesystem-mcp.d.ts +0 -37
  263. package/dist/mcp/plugins/filesystem-mcp.js +0 -54
  264. package/dist/mcp/security-manager.d.ts +0 -87
  265. package/dist/mcp/security-manager.js +0 -344
  266. package/dist/mcp/semaphore-manager.d.ts +0 -137
  267. package/dist/mcp/semaphore-manager.js +0 -329
  268. package/dist/mcp/session-manager.d.ts +0 -187
  269. package/dist/mcp/session-manager.js +0 -400
  270. package/dist/mcp/session-persistence.d.ts +0 -93
  271. package/dist/mcp/session-persistence.js +0 -302
  272. package/dist/mcp/tool-integration.d.ts +0 -58
  273. package/dist/mcp/tool-integration.js +0 -203
  274. package/dist/mcp/transport-manager.d.ts +0 -154
  275. package/dist/mcp/transport-manager.js +0 -335
  276. package/dist/mcp/unified-mcp.d.ts +0 -133
  277. package/dist/mcp/unified-mcp.js +0 -251
  278. package/dist/mcp/unified-registry.d.ts +0 -165
  279. package/dist/mcp/unified-registry.js +0 -539
  280. package/dist/providers/analytics-helper.d.ts +0 -38
  281. package/dist/providers/analytics-helper.js +0 -216
  282. package/dist/providers/function-calling-provider.d.ts +0 -142
  283. package/dist/providers/function-calling-provider.js +0 -630
  284. package/dist/providers/mcp-provider.d.ts +0 -75
  285. package/dist/providers/mcp-provider.js +0 -283
  286. package/dist/providers/timeout-wrapper.d.ts +0 -40
  287. package/dist/providers/timeout-wrapper.js +0 -100
  288. package/dist/sdk/tool-extension.d.ts +0 -181
  289. package/dist/sdk/tool-extension.js +0 -284
  290. package/dist/services/streaming/streaming-manager.d.ts +0 -29
  291. package/dist/services/streaming/streaming-manager.js +0 -245
  292. package/dist/services/types.d.ts +0 -156
  293. package/dist/services/types.js +0 -2
  294. package/dist/services/websocket/websocket-server.d.ts +0 -34
  295. package/dist/services/websocket/websocket-server.js +0 -306
  296. package/dist/utils/provider-validation.d.ts +0 -36
  297. package/dist/utils/provider-validation.js +0 -625
  298. package/dist/utils/providerUtils-fixed.d.ts +0 -8
  299. package/dist/utils/providerUtils-fixed.js +0 -94
  300. package/dist/utils/streaming-utils.d.ts +0 -79
  301. package/dist/utils/streaming-utils.js +0 -198
  302. package/dist/utils/timeout-manager.d.ts +0 -75
  303. 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 {};