@juspay/neurolink 6.1.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.
- package/CHANGELOG.md +10 -6
- package/dist/cli/commands/config.d.ts +13 -13
- package/dist/cli/index.js +3 -9
- package/dist/core/analytics.d.ts +11 -1
- package/dist/core/analytics.js +2 -2
- package/dist/core/base-provider.js +4 -18
- package/dist/core/dynamic-models.d.ts +8 -8
- package/dist/core/factory.js +3 -11
- package/dist/index.d.ts +2 -4
- package/dist/index.js +2 -11
- package/dist/lib/core/analytics.d.ts +11 -1
- package/dist/lib/core/analytics.js +2 -2
- package/dist/lib/core/base-provider.js +4 -18
- package/dist/lib/core/dynamic-models.d.ts +8 -8
- package/dist/lib/core/factory.js +3 -11
- package/dist/lib/index.d.ts +2 -4
- package/dist/lib/index.js +2 -11
- package/dist/lib/mcp/factory.d.ts +1 -1
- package/dist/lib/mcp/index.d.ts +7 -19
- package/dist/lib/mcp/index.js +15 -56
- package/dist/lib/neurolink.d.ts +1 -9
- package/dist/lib/neurolink.js +21 -70
- package/dist/lib/providers/amazon-bedrock.js +5 -16
- package/dist/lib/providers/anthropic-baseprovider.js +3 -21
- package/dist/lib/providers/anthropic.js +4 -7
- package/dist/lib/providers/azure-openai.js +4 -2
- package/dist/lib/providers/google-vertex.js +5 -9
- package/dist/lib/providers/huggingFace.js +5 -10
- package/dist/lib/providers/mistral.js +5 -8
- package/dist/lib/providers/openAI.js +4 -7
- package/dist/lib/utils/providerConfig.d.ts +117 -0
- package/dist/lib/utils/providerConfig.js +353 -0
- package/dist/lib/utils/providerUtils.d.ts +2 -1
- package/dist/lib/utils/providerUtils.js +53 -36
- package/dist/lib/utils/timeout.d.ts +72 -1
- package/dist/lib/utils/timeout.js +203 -2
- package/dist/mcp/factory.d.ts +1 -1
- package/dist/mcp/index.d.ts +7 -19
- package/dist/mcp/index.js +15 -56
- package/dist/neurolink.d.ts +1 -9
- package/dist/neurolink.js +21 -70
- package/dist/providers/amazon-bedrock.js +5 -16
- package/dist/providers/anthropic-baseprovider.js +3 -21
- package/dist/providers/anthropic.js +4 -7
- package/dist/providers/azure-openai.js +4 -2
- package/dist/providers/google-vertex.js +5 -9
- package/dist/providers/huggingFace.js +5 -10
- package/dist/providers/mistral.js +5 -8
- package/dist/providers/openAI.js +4 -7
- package/dist/utils/providerConfig.d.ts +117 -0
- package/dist/utils/providerConfig.js +353 -0
- package/dist/utils/providerUtils.d.ts +2 -1
- package/dist/utils/providerUtils.js +53 -36
- package/dist/utils/timeout.d.ts +72 -1
- package/dist/utils/timeout.js +203 -2
- package/package.json +1 -1
- package/dist/chat/client-utils.d.ts +0 -95
- package/dist/chat/client-utils.js +0 -315
- package/dist/chat/index.d.ts +0 -24
- package/dist/chat/index.js +0 -33
- package/dist/chat/session-storage.d.ts +0 -77
- package/dist/chat/session-storage.js +0 -233
- package/dist/chat/session.d.ts +0 -96
- package/dist/chat/session.js +0 -257
- package/dist/chat/sse-handler.d.ts +0 -49
- package/dist/chat/sse-handler.js +0 -259
- package/dist/chat/types.d.ts +0 -74
- package/dist/chat/types.js +0 -5
- package/dist/chat/websocket-chat-handler.d.ts +0 -37
- package/dist/chat/websocket-chat-handler.js +0 -262
- package/dist/cli/commands/mcp.d.ts +0 -20
- package/dist/cli/commands/mcp.js +0 -1272
- package/dist/core/defaults.d.ts +0 -19
- package/dist/core/defaults.js +0 -29
- package/dist/core/evaluation-config.d.ts +0 -29
- package/dist/core/evaluation-config.js +0 -144
- package/dist/factories/compatibility-factory.d.ts +0 -35
- package/dist/factories/compatibility-factory.js +0 -71
- package/dist/factories/provider-generate-factory.d.ts +0 -20
- package/dist/factories/provider-generate-factory.js +0 -93
- package/dist/lib/chat/client-utils.d.ts +0 -95
- package/dist/lib/chat/client-utils.js +0 -315
- package/dist/lib/chat/index.d.ts +0 -24
- package/dist/lib/chat/index.js +0 -33
- package/dist/lib/chat/session-storage.d.ts +0 -77
- package/dist/lib/chat/session-storage.js +0 -233
- package/dist/lib/chat/session.d.ts +0 -96
- package/dist/lib/chat/session.js +0 -257
- package/dist/lib/chat/sse-handler.d.ts +0 -49
- package/dist/lib/chat/sse-handler.js +0 -259
- package/dist/lib/chat/types.d.ts +0 -74
- package/dist/lib/chat/types.js +0 -5
- package/dist/lib/chat/websocket-chat-handler.d.ts +0 -37
- package/dist/lib/chat/websocket-chat-handler.js +0 -262
- package/dist/lib/core/defaults.d.ts +0 -19
- package/dist/lib/core/defaults.js +0 -29
- package/dist/lib/core/evaluation-config.d.ts +0 -29
- package/dist/lib/core/evaluation-config.js +0 -144
- package/dist/lib/factories/compatibility-factory.d.ts +0 -35
- package/dist/lib/factories/compatibility-factory.js +0 -71
- package/dist/lib/factories/provider-generate-factory.d.ts +0 -20
- package/dist/lib/factories/provider-generate-factory.js +0 -93
- package/dist/lib/mcp/adapters/plugin-bridge.d.ts +0 -40
- package/dist/lib/mcp/adapters/plugin-bridge.js +0 -89
- package/dist/lib/mcp/auto-discovery.d.ts +0 -62
- package/dist/lib/mcp/auto-discovery.js +0 -149
- package/dist/lib/mcp/client.d.ts +0 -68
- package/dist/lib/mcp/client.js +0 -248
- package/dist/lib/mcp/config.d.ts +0 -31
- package/dist/lib/mcp/config.js +0 -99
- package/dist/lib/mcp/context-manager.d.ts +0 -171
- package/dist/lib/mcp/context-manager.js +0 -362
- package/dist/lib/mcp/contracts/mcp-contract.d.ts +0 -169
- package/dist/lib/mcp/contracts/mcp-contract.js +0 -58
- package/dist/lib/mcp/core/plugin-manager.d.ts +0 -46
- package/dist/lib/mcp/core/plugin-manager.js +0 -110
- package/dist/lib/mcp/demo/plugin-demo.d.ts +0 -20
- package/dist/lib/mcp/demo/plugin-demo.js +0 -118
- package/dist/lib/mcp/dynamic-chain-executor.d.ts +0 -225
- package/dist/lib/mcp/dynamic-chain-executor.js +0 -489
- package/dist/lib/mcp/dynamic-orchestrator.d.ts +0 -115
- package/dist/lib/mcp/dynamic-orchestrator.js +0 -351
- package/dist/lib/mcp/ecosystem.d.ts +0 -75
- package/dist/lib/mcp/ecosystem.js +0 -161
- package/dist/lib/mcp/error-manager.d.ts +0 -254
- package/dist/lib/mcp/error-manager.js +0 -501
- package/dist/lib/mcp/error-recovery.d.ts +0 -159
- package/dist/lib/mcp/error-recovery.js +0 -405
- package/dist/lib/mcp/external-client.d.ts +0 -88
- package/dist/lib/mcp/external-client.js +0 -331
- package/dist/lib/mcp/external-manager.d.ts +0 -112
- package/dist/lib/mcp/external-manager.js +0 -308
- package/dist/lib/mcp/function-calling.d.ts +0 -65
- package/dist/lib/mcp/function-calling.js +0 -642
- package/dist/lib/mcp/health-monitor.d.ts +0 -257
- package/dist/lib/mcp/health-monitor.js +0 -630
- package/dist/lib/mcp/initialize-tools.d.ts +0 -29
- package/dist/lib/mcp/initialize-tools.js +0 -261
- package/dist/lib/mcp/initialize.d.ts +0 -18
- package/dist/lib/mcp/initialize.js +0 -62
- package/dist/lib/mcp/manager.d.ts +0 -68
- package/dist/lib/mcp/manager.js +0 -176
- package/dist/lib/mcp/neurolink-mcp-client.d.ts +0 -97
- package/dist/lib/mcp/neurolink-mcp-client.js +0 -462
- package/dist/lib/mcp/orchestrator.d.ts +0 -302
- package/dist/lib/mcp/orchestrator.js +0 -703
- package/dist/lib/mcp/plugin-manager.d.ts +0 -98
- package/dist/lib/mcp/plugin-manager.js +0 -296
- package/dist/lib/mcp/plugins/core/filesystem-mcp.d.ts +0 -36
- package/dist/lib/mcp/plugins/core/filesystem-mcp.js +0 -142
- package/dist/lib/mcp/plugins/filesystem-mcp.d.ts +0 -37
- package/dist/lib/mcp/plugins/filesystem-mcp.js +0 -54
- package/dist/lib/mcp/security-manager.d.ts +0 -87
- package/dist/lib/mcp/security-manager.js +0 -344
- package/dist/lib/mcp/semaphore-manager.d.ts +0 -137
- package/dist/lib/mcp/semaphore-manager.js +0 -329
- package/dist/lib/mcp/session-manager.d.ts +0 -187
- package/dist/lib/mcp/session-manager.js +0 -400
- package/dist/lib/mcp/session-persistence.d.ts +0 -93
- package/dist/lib/mcp/session-persistence.js +0 -301
- package/dist/lib/mcp/tool-integration.d.ts +0 -58
- package/dist/lib/mcp/tool-integration.js +0 -203
- package/dist/lib/mcp/transport-manager.d.ts +0 -154
- package/dist/lib/mcp/transport-manager.js +0 -334
- package/dist/lib/mcp/unified-mcp.d.ts +0 -133
- package/dist/lib/mcp/unified-mcp.js +0 -251
- package/dist/lib/mcp/unified-registry.d.ts +0 -165
- package/dist/lib/mcp/unified-registry.js +0 -538
- package/dist/lib/providers/analytics-helper.d.ts +0 -38
- package/dist/lib/providers/analytics-helper.js +0 -216
- package/dist/lib/providers/function-calling-provider.d.ts +0 -142
- package/dist/lib/providers/function-calling-provider.js +0 -630
- package/dist/lib/providers/mcp-provider.d.ts +0 -75
- package/dist/lib/providers/mcp-provider.js +0 -283
- package/dist/lib/providers/timeout-wrapper.d.ts +0 -40
- package/dist/lib/providers/timeout-wrapper.js +0 -100
- package/dist/lib/sdk/tool-extension.d.ts +0 -181
- package/dist/lib/sdk/tool-extension.js +0 -284
- package/dist/lib/services/streaming/streaming-manager.d.ts +0 -29
- package/dist/lib/services/streaming/streaming-manager.js +0 -245
- package/dist/lib/services/types.d.ts +0 -156
- package/dist/lib/services/types.js +0 -2
- package/dist/lib/services/websocket/websocket-server.d.ts +0 -34
- package/dist/lib/services/websocket/websocket-server.js +0 -305
- package/dist/lib/utils/provider-validation.d.ts +0 -36
- package/dist/lib/utils/provider-validation.js +0 -625
- package/dist/lib/utils/providerUtils-fixed.d.ts +0 -8
- package/dist/lib/utils/providerUtils-fixed.js +0 -94
- package/dist/lib/utils/streaming-utils.d.ts +0 -79
- package/dist/lib/utils/streaming-utils.js +0 -198
- package/dist/lib/utils/timeout-manager.d.ts +0 -75
- package/dist/lib/utils/timeout-manager.js +0 -244
- package/dist/mcp/adapters/plugin-bridge.d.ts +0 -40
- package/dist/mcp/adapters/plugin-bridge.js +0 -89
- package/dist/mcp/auto-discovery.d.ts +0 -62
- package/dist/mcp/auto-discovery.js +0 -149
- package/dist/mcp/client.d.ts +0 -68
- package/dist/mcp/client.js +0 -248
- package/dist/mcp/config.d.ts +0 -31
- package/dist/mcp/config.js +0 -99
- package/dist/mcp/context-manager.d.ts +0 -171
- package/dist/mcp/context-manager.js +0 -362
- package/dist/mcp/contracts/mcp-contract.d.ts +0 -169
- package/dist/mcp/contracts/mcp-contract.js +0 -58
- package/dist/mcp/core/plugin-manager.d.ts +0 -46
- package/dist/mcp/core/plugin-manager.js +0 -110
- package/dist/mcp/demo/plugin-demo.d.ts +0 -20
- package/dist/mcp/demo/plugin-demo.js +0 -118
- package/dist/mcp/dynamic-chain-executor.d.ts +0 -225
- package/dist/mcp/dynamic-chain-executor.js +0 -489
- package/dist/mcp/dynamic-orchestrator.d.ts +0 -115
- package/dist/mcp/dynamic-orchestrator.js +0 -351
- package/dist/mcp/ecosystem.d.ts +0 -75
- package/dist/mcp/ecosystem.js +0 -162
- package/dist/mcp/error-manager.d.ts +0 -254
- package/dist/mcp/error-manager.js +0 -501
- package/dist/mcp/error-recovery.d.ts +0 -159
- package/dist/mcp/error-recovery.js +0 -405
- package/dist/mcp/external-client.d.ts +0 -88
- package/dist/mcp/external-client.js +0 -331
- package/dist/mcp/external-manager.d.ts +0 -112
- package/dist/mcp/external-manager.js +0 -308
- package/dist/mcp/function-calling.d.ts +0 -65
- package/dist/mcp/function-calling.js +0 -642
- package/dist/mcp/health-monitor.d.ts +0 -257
- package/dist/mcp/health-monitor.js +0 -630
- package/dist/mcp/initialize-tools.d.ts +0 -29
- package/dist/mcp/initialize-tools.js +0 -262
- package/dist/mcp/initialize.d.ts +0 -18
- package/dist/mcp/initialize.js +0 -62
- package/dist/mcp/manager.d.ts +0 -68
- package/dist/mcp/manager.js +0 -176
- package/dist/mcp/neurolink-mcp-client.d.ts +0 -97
- package/dist/mcp/neurolink-mcp-client.js +0 -462
- package/dist/mcp/orchestrator.d.ts +0 -302
- package/dist/mcp/orchestrator.js +0 -703
- package/dist/mcp/plugin-manager.d.ts +0 -98
- package/dist/mcp/plugin-manager.js +0 -297
- package/dist/mcp/plugins/core/filesystem-mcp.d.ts +0 -36
- package/dist/mcp/plugins/core/filesystem-mcp.js +0 -142
- package/dist/mcp/plugins/core/neurolink-mcp.json +0 -17
- package/dist/mcp/plugins/filesystem-mcp.d.ts +0 -37
- package/dist/mcp/plugins/filesystem-mcp.js +0 -54
- package/dist/mcp/security-manager.d.ts +0 -87
- package/dist/mcp/security-manager.js +0 -344
- package/dist/mcp/semaphore-manager.d.ts +0 -137
- package/dist/mcp/semaphore-manager.js +0 -329
- package/dist/mcp/session-manager.d.ts +0 -187
- package/dist/mcp/session-manager.js +0 -400
- package/dist/mcp/session-persistence.d.ts +0 -93
- package/dist/mcp/session-persistence.js +0 -302
- package/dist/mcp/tool-integration.d.ts +0 -58
- package/dist/mcp/tool-integration.js +0 -203
- package/dist/mcp/transport-manager.d.ts +0 -154
- package/dist/mcp/transport-manager.js +0 -335
- package/dist/mcp/unified-mcp.d.ts +0 -133
- package/dist/mcp/unified-mcp.js +0 -251
- package/dist/mcp/unified-registry.d.ts +0 -165
- package/dist/mcp/unified-registry.js +0 -539
- package/dist/providers/analytics-helper.d.ts +0 -38
- package/dist/providers/analytics-helper.js +0 -216
- package/dist/providers/function-calling-provider.d.ts +0 -142
- package/dist/providers/function-calling-provider.js +0 -630
- package/dist/providers/mcp-provider.d.ts +0 -75
- package/dist/providers/mcp-provider.js +0 -283
- package/dist/providers/timeout-wrapper.d.ts +0 -40
- package/dist/providers/timeout-wrapper.js +0 -100
- package/dist/sdk/tool-extension.d.ts +0 -181
- package/dist/sdk/tool-extension.js +0 -284
- package/dist/services/streaming/streaming-manager.d.ts +0 -29
- package/dist/services/streaming/streaming-manager.js +0 -245
- package/dist/services/types.d.ts +0 -156
- package/dist/services/types.js +0 -2
- package/dist/services/websocket/websocket-server.d.ts +0 -34
- package/dist/services/websocket/websocket-server.js +0 -306
- package/dist/utils/provider-validation.d.ts +0 -36
- package/dist/utils/provider-validation.js +0 -625
- package/dist/utils/providerUtils-fixed.d.ts +0 -8
- package/dist/utils/providerUtils-fixed.js +0 -94
- package/dist/utils/streaming-utils.d.ts +0 -79
- package/dist/utils/streaming-utils.js +0 -198
- package/dist/utils/timeout-manager.d.ts +0 -75
- package/dist/utils/timeout-manager.js +0 -244
|
@@ -1,308 +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 { readFile } from "fs/promises";
|
|
7
|
-
import { resolve } from "path";
|
|
8
|
-
import { createExternalMCPClient, } from "./external-client.js";
|
|
9
|
-
import { createMCPServer } from "./factory.js";
|
|
10
|
-
import { MCPToolRegistry } from "./tool-registry.js";
|
|
11
|
-
import { mcpLogger as logger } from "./logging.js";
|
|
12
|
-
/**
|
|
13
|
-
* External MCP Manager
|
|
14
|
-
* Bridges external MCP servers into NeuroLink's factory pattern ecosystem
|
|
15
|
-
*/
|
|
16
|
-
export class ExternalMCPManager {
|
|
17
|
-
servers = new Map();
|
|
18
|
-
registry;
|
|
19
|
-
configPath;
|
|
20
|
-
config = null;
|
|
21
|
-
isInitialized = false;
|
|
22
|
-
constructor(configPath, registry) {
|
|
23
|
-
this.configPath = configPath || ".mcp-config.json";
|
|
24
|
-
this.registry = registry || new MCPToolRegistry();
|
|
25
|
-
}
|
|
26
|
-
/**
|
|
27
|
-
* Initialize the external MCP manager
|
|
28
|
-
* Reads config and connects to all external servers
|
|
29
|
-
*/
|
|
30
|
-
async initialize() {
|
|
31
|
-
if (this.isInitialized) {
|
|
32
|
-
logger.debug("[External MCP Manager] Already initialized");
|
|
33
|
-
return;
|
|
34
|
-
}
|
|
35
|
-
try {
|
|
36
|
-
logger.info("[External MCP Manager] Initializing...");
|
|
37
|
-
// Load configuration
|
|
38
|
-
await this.loadConfig();
|
|
39
|
-
if (!this.config?.mcpServers) {
|
|
40
|
-
logger.warn("[External MCP Manager] No MCP servers configured");
|
|
41
|
-
this.isInitialized = true;
|
|
42
|
-
return;
|
|
43
|
-
}
|
|
44
|
-
// Connect to all configured servers
|
|
45
|
-
const serverNames = Object.keys(this.config.mcpServers);
|
|
46
|
-
logger.info(`[External MCP Manager] Connecting to ${serverNames.length} external servers: ${serverNames.join(", ")}`);
|
|
47
|
-
const connectionPromises = serverNames.map((serverName) => this.connectToServer(serverName).catch((error) => {
|
|
48
|
-
logger.error(`[External MCP Manager] Failed to connect to ${serverName}:`, error);
|
|
49
|
-
return null;
|
|
50
|
-
}));
|
|
51
|
-
const results = await Promise.allSettled(connectionPromises);
|
|
52
|
-
const connected = results.filter((r) => r.status === "fulfilled" && r.value !== null).length;
|
|
53
|
-
logger.info(`[External MCP Manager] Connected to ${connected}/${serverNames.length} external servers`);
|
|
54
|
-
this.isInitialized = true;
|
|
55
|
-
}
|
|
56
|
-
catch (error) {
|
|
57
|
-
logger.error("[External MCP Manager] Initialization failed:", error);
|
|
58
|
-
throw error;
|
|
59
|
-
}
|
|
60
|
-
}
|
|
61
|
-
/**
|
|
62
|
-
* Load MCP configuration from file
|
|
63
|
-
*/
|
|
64
|
-
async loadConfig() {
|
|
65
|
-
try {
|
|
66
|
-
const configFile = resolve(this.configPath);
|
|
67
|
-
const configData = await readFile(configFile, "utf-8");
|
|
68
|
-
this.config = JSON.parse(configData);
|
|
69
|
-
logger.debug("[External MCP Manager] Config loaded:", {
|
|
70
|
-
serversCount: Object.keys(this.config?.mcpServers || {}).length,
|
|
71
|
-
autoDiscovery: this.config?.autoDiscovery?.enabled,
|
|
72
|
-
});
|
|
73
|
-
}
|
|
74
|
-
catch (error) {
|
|
75
|
-
if (error?.code === "ENOENT") {
|
|
76
|
-
logger.warn(`[External MCP Manager] Config file not found: ${this.configPath}`);
|
|
77
|
-
this.config = { mcpServers: {} };
|
|
78
|
-
}
|
|
79
|
-
else {
|
|
80
|
-
logger.error("[External MCP Manager] Failed to load config:", error);
|
|
81
|
-
throw error;
|
|
82
|
-
}
|
|
83
|
-
}
|
|
84
|
-
}
|
|
85
|
-
/**
|
|
86
|
-
* Connect to a specific external server
|
|
87
|
-
*/
|
|
88
|
-
async connectToServer(serverName) {
|
|
89
|
-
if (!this.config?.mcpServers[serverName]) {
|
|
90
|
-
throw new Error(`Server configuration not found: ${serverName}`);
|
|
91
|
-
}
|
|
92
|
-
const serverConfig = this.config.mcpServers[serverName];
|
|
93
|
-
try {
|
|
94
|
-
logger.info(`[External MCP Manager] Connecting to server: ${serverName}`);
|
|
95
|
-
// Create external client
|
|
96
|
-
const client = createExternalMCPClient({
|
|
97
|
-
name: serverName,
|
|
98
|
-
command: serverConfig.command,
|
|
99
|
-
args: serverConfig.args,
|
|
100
|
-
transport: serverConfig.transport,
|
|
101
|
-
env: serverConfig.env,
|
|
102
|
-
});
|
|
103
|
-
// Create server info
|
|
104
|
-
const serverInfo = {
|
|
105
|
-
name: serverName,
|
|
106
|
-
client,
|
|
107
|
-
server: createMCPServer({
|
|
108
|
-
id: `external-${serverName}`,
|
|
109
|
-
title: `External ${serverConfig.name || serverName}`,
|
|
110
|
-
description: `External MCP server: ${serverName}`,
|
|
111
|
-
category: "integrations",
|
|
112
|
-
visibility: "private",
|
|
113
|
-
metadata: {
|
|
114
|
-
external: true,
|
|
115
|
-
transport: "stdio",
|
|
116
|
-
command: serverConfig.command,
|
|
117
|
-
args: serverConfig.args,
|
|
118
|
-
},
|
|
119
|
-
}),
|
|
120
|
-
status: "connecting",
|
|
121
|
-
toolCount: 0,
|
|
122
|
-
retryCount: 0,
|
|
123
|
-
};
|
|
124
|
-
// Setup event handlers
|
|
125
|
-
client.on("connected", () => {
|
|
126
|
-
logger.info(`[External MCP Manager] Connected to ${serverName}`);
|
|
127
|
-
serverInfo.status = "connected";
|
|
128
|
-
this.registerServerTools(serverInfo);
|
|
129
|
-
});
|
|
130
|
-
client.on("disconnected", () => {
|
|
131
|
-
logger.warn(`[External MCP Manager] Disconnected from ${serverName}`);
|
|
132
|
-
serverInfo.status = "disconnected";
|
|
133
|
-
// TODO: Implement reconnection logic
|
|
134
|
-
});
|
|
135
|
-
client.on("error", (error) => {
|
|
136
|
-
logger.error(`[External MCP Manager] Error from ${serverName}:`, error);
|
|
137
|
-
serverInfo.status = "error";
|
|
138
|
-
serverInfo.lastError = error.message;
|
|
139
|
-
});
|
|
140
|
-
// Store server info
|
|
141
|
-
this.servers.set(serverName, serverInfo);
|
|
142
|
-
// Connect to the server
|
|
143
|
-
await client.connect();
|
|
144
|
-
return serverInfo;
|
|
145
|
-
}
|
|
146
|
-
catch (error) {
|
|
147
|
-
logger.error(`[External MCP Manager] Failed to connect to ${serverName}:`, error);
|
|
148
|
-
const serverInfo = {
|
|
149
|
-
name: serverName,
|
|
150
|
-
client: null,
|
|
151
|
-
server: null,
|
|
152
|
-
status: "error",
|
|
153
|
-
lastError: error instanceof Error ? error.message : String(error),
|
|
154
|
-
toolCount: 0,
|
|
155
|
-
retryCount: 0,
|
|
156
|
-
};
|
|
157
|
-
this.servers.set(serverName, serverInfo);
|
|
158
|
-
return null;
|
|
159
|
-
}
|
|
160
|
-
}
|
|
161
|
-
/**
|
|
162
|
-
* Register tools from an external server with the NeuroLink registry
|
|
163
|
-
*/
|
|
164
|
-
async registerServerTools(serverInfo) {
|
|
165
|
-
try {
|
|
166
|
-
if (!serverInfo.client) {
|
|
167
|
-
throw new Error("Client is not available");
|
|
168
|
-
}
|
|
169
|
-
if (!serverInfo.server) {
|
|
170
|
-
throw new Error("Server is not available");
|
|
171
|
-
}
|
|
172
|
-
const tools = serverInfo.client.getNeuroLinkTools();
|
|
173
|
-
// Register each tool with the server
|
|
174
|
-
for (const [toolName, tool] of Object.entries(tools)) {
|
|
175
|
-
serverInfo.server.registerTool(tool);
|
|
176
|
-
}
|
|
177
|
-
serverInfo.toolCount = Object.keys(tools).length;
|
|
178
|
-
// Register the server with the registry
|
|
179
|
-
await this.registry.registerServer(serverInfo.name, serverInfo);
|
|
180
|
-
logger.info(`[External MCP Manager] Registered ${serverInfo.toolCount} tools from ${serverInfo.name}`);
|
|
181
|
-
}
|
|
182
|
-
catch (error) {
|
|
183
|
-
logger.error(`[External MCP Manager] Failed to register tools from ${serverInfo.name}:`, error);
|
|
184
|
-
}
|
|
185
|
-
}
|
|
186
|
-
/**
|
|
187
|
-
* Get all connected external servers
|
|
188
|
-
*/
|
|
189
|
-
getConnectedServers() {
|
|
190
|
-
return Array.from(this.servers.values()).filter((s) => s.status === "connected");
|
|
191
|
-
}
|
|
192
|
-
/**
|
|
193
|
-
* Get server status
|
|
194
|
-
*/
|
|
195
|
-
getServerStatus(serverName) {
|
|
196
|
-
return this.servers.get(serverName);
|
|
197
|
-
}
|
|
198
|
-
/**
|
|
199
|
-
* Get all server statuses
|
|
200
|
-
*/
|
|
201
|
-
getAllServerStatuses() {
|
|
202
|
-
const statuses = {};
|
|
203
|
-
for (const [name, info] of this.servers) {
|
|
204
|
-
statuses[name] = {
|
|
205
|
-
...info,
|
|
206
|
-
// Don't include the actual client/server objects in status
|
|
207
|
-
client: null,
|
|
208
|
-
server: null,
|
|
209
|
-
};
|
|
210
|
-
}
|
|
211
|
-
return statuses;
|
|
212
|
-
}
|
|
213
|
-
/**
|
|
214
|
-
* Execute a tool on any connected server
|
|
215
|
-
*/
|
|
216
|
-
async executeTool(toolName, params, context) {
|
|
217
|
-
// Use the registry to execute the tool
|
|
218
|
-
return this.registry.executeTool(toolName, params, context);
|
|
219
|
-
}
|
|
220
|
-
/**
|
|
221
|
-
* List all available tools from external servers
|
|
222
|
-
*/
|
|
223
|
-
listExternalTools() {
|
|
224
|
-
return this.registry.listTools();
|
|
225
|
-
}
|
|
226
|
-
/**
|
|
227
|
-
* Get registry instance
|
|
228
|
-
*/
|
|
229
|
-
getRegistry() {
|
|
230
|
-
return this.registry;
|
|
231
|
-
}
|
|
232
|
-
/**
|
|
233
|
-
* Disconnect from a specific server
|
|
234
|
-
*/
|
|
235
|
-
async disconnectServer(serverName) {
|
|
236
|
-
const serverInfo = this.servers.get(serverName);
|
|
237
|
-
if (!serverInfo || !serverInfo.client) {
|
|
238
|
-
return false;
|
|
239
|
-
}
|
|
240
|
-
try {
|
|
241
|
-
await serverInfo.client.disconnect();
|
|
242
|
-
this.registry.unregisterServer(`external-${serverName}`);
|
|
243
|
-
this.servers.delete(serverName);
|
|
244
|
-
logger.info(`[External MCP Manager] Disconnected from ${serverName}`);
|
|
245
|
-
return true;
|
|
246
|
-
}
|
|
247
|
-
catch (error) {
|
|
248
|
-
logger.error(`[External MCP Manager] Failed to disconnect from ${serverName}:`, error);
|
|
249
|
-
return false;
|
|
250
|
-
}
|
|
251
|
-
}
|
|
252
|
-
/**
|
|
253
|
-
* Disconnect from all servers
|
|
254
|
-
*/
|
|
255
|
-
async disconnectAll() {
|
|
256
|
-
logger.info("[External MCP Manager] Disconnecting from all external servers");
|
|
257
|
-
const disconnectPromises = Array.from(this.servers.keys()).map((serverName) => this.disconnectServer(serverName));
|
|
258
|
-
await Promise.allSettled(disconnectPromises);
|
|
259
|
-
this.servers.clear();
|
|
260
|
-
this.isInitialized = false;
|
|
261
|
-
}
|
|
262
|
-
/**
|
|
263
|
-
* Refresh connections - reload config and reconnect
|
|
264
|
-
*/
|
|
265
|
-
async refresh() {
|
|
266
|
-
logger.info("[External MCP Manager] Refreshing connections");
|
|
267
|
-
await this.disconnectAll();
|
|
268
|
-
await this.initialize();
|
|
269
|
-
}
|
|
270
|
-
/**
|
|
271
|
-
* Get comprehensive status
|
|
272
|
-
*/
|
|
273
|
-
getStatus() {
|
|
274
|
-
const servers = Array.from(this.servers.values());
|
|
275
|
-
return {
|
|
276
|
-
isInitialized: this.isInitialized,
|
|
277
|
-
configPath: this.configPath,
|
|
278
|
-
totalServers: servers.length,
|
|
279
|
-
connected: servers.filter((s) => s.status === "connected").length,
|
|
280
|
-
connecting: servers.filter((s) => s.status === "connecting").length,
|
|
281
|
-
disconnected: servers.filter((s) => s.status === "disconnected").length,
|
|
282
|
-
errors: servers.filter((s) => s.status === "error").length,
|
|
283
|
-
totalTools: servers.reduce((sum, s) => sum + s.toolCount, 0),
|
|
284
|
-
servers: this.getAllServerStatuses(),
|
|
285
|
-
};
|
|
286
|
-
}
|
|
287
|
-
}
|
|
288
|
-
/**
|
|
289
|
-
* Default external MCP manager instance
|
|
290
|
-
*/
|
|
291
|
-
export const defaultExternalMCPManager = new ExternalMCPManager();
|
|
292
|
-
/**
|
|
293
|
-
* Initialize external MCP servers with default manager
|
|
294
|
-
*/
|
|
295
|
-
export async function initializeExternalMCP(configPath) {
|
|
296
|
-
if (configPath) {
|
|
297
|
-
const manager = new ExternalMCPManager(configPath);
|
|
298
|
-
await manager.initialize();
|
|
299
|
-
return;
|
|
300
|
-
}
|
|
301
|
-
await defaultExternalMCPManager.initialize();
|
|
302
|
-
}
|
|
303
|
-
/**
|
|
304
|
-
* Get the default external MCP manager
|
|
305
|
-
*/
|
|
306
|
-
export function getExternalMCPManager() {
|
|
307
|
-
return defaultExternalMCPManager;
|
|
308
|
-
}
|
|
@@ -1,65 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* MCP Function-Calling Integration
|
|
3
|
-
* Converts MCP tools to AI SDK function definitions and handles function calls
|
|
4
|
-
* Enables true AI function calling with discovered MCP tools
|
|
5
|
-
*/
|
|
6
|
-
import type { Tool } from "ai";
|
|
7
|
-
import type { NeuroLinkMCPTool, ToolResult, NeuroLinkExecutionContext } from "./factory.js";
|
|
8
|
-
import type { UnknownRecord } from "../types/common.js";
|
|
9
|
-
/**
|
|
10
|
-
* Convert MCP tool to AI SDK function definition
|
|
11
|
-
*/
|
|
12
|
-
export declare function mcpToolToAISDKTool(tool: NeuroLinkMCPTool, serverId: string): Tool;
|
|
13
|
-
/**
|
|
14
|
-
* Get all available MCP tools as AI SDK function definitions
|
|
15
|
-
*/
|
|
16
|
-
export declare function getAvailableFunctionTools(): Promise<{
|
|
17
|
-
tools: Tool[];
|
|
18
|
-
toolsObject: Record<string, Tool>;
|
|
19
|
-
toolMap: Map<string, {
|
|
20
|
-
serverId: string;
|
|
21
|
-
toolName: string;
|
|
22
|
-
}>;
|
|
23
|
-
}>;
|
|
24
|
-
/**
|
|
25
|
-
* Execute MCP tool from AI function call
|
|
26
|
-
*/
|
|
27
|
-
export declare function executeFunctionCall(functionName: string, parameters: Record<string, unknown>, context?: NeuroLinkExecutionContext): Promise<ToolResult>;
|
|
28
|
-
/**
|
|
29
|
-
* Handle multiple function calls and format results for AI
|
|
30
|
-
*/
|
|
31
|
-
export declare function handleFunctionCalls(functionCalls: Array<{
|
|
32
|
-
name: string;
|
|
33
|
-
parameters: Record<string, unknown>;
|
|
34
|
-
id?: string;
|
|
35
|
-
}>, context?: NeuroLinkExecutionContext): Promise<Array<{
|
|
36
|
-
id?: string;
|
|
37
|
-
result: ToolResult;
|
|
38
|
-
formattedForAI: string;
|
|
39
|
-
}>>;
|
|
40
|
-
/**
|
|
41
|
-
* Create a subset of tools for specific categories or capabilities
|
|
42
|
-
*/
|
|
43
|
-
export declare function getFunctionToolsForCategory(category?: string, maxTools?: number): Promise<{
|
|
44
|
-
tools: Tool[];
|
|
45
|
-
toolMap: Map<string, {
|
|
46
|
-
serverId: string;
|
|
47
|
-
toolName: string;
|
|
48
|
-
}>;
|
|
49
|
-
}>;
|
|
50
|
-
/**
|
|
51
|
-
* Check if function calling is available
|
|
52
|
-
*/
|
|
53
|
-
export declare function isFunctionCallingAvailable(): Promise<boolean>;
|
|
54
|
-
/**
|
|
55
|
-
* Utility function to create a named tool object for debugging
|
|
56
|
-
*/
|
|
57
|
-
export declare function createNamedTool(name: string, toolDef: Tool): Tool & {
|
|
58
|
-
name: string;
|
|
59
|
-
};
|
|
60
|
-
/**
|
|
61
|
-
* Get tools with proper name properties for debugging
|
|
62
|
-
*/
|
|
63
|
-
export declare function getToolsWithNames(): Promise<Record<string, UnknownRecord & {
|
|
64
|
-
name: string;
|
|
65
|
-
}>>;
|