@juspay/neurolink 1.6.0 → 1.10.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 +200 -7
- package/README.md +101 -18
- package/dist/agent/direct-tools.d.ts +1203 -0
- package/dist/agent/direct-tools.js +387 -0
- package/dist/cli/commands/agent-generate.d.ts +2 -0
- package/dist/cli/commands/agent-generate.js +70 -0
- package/dist/cli/commands/config.d.ts +6 -6
- package/dist/cli/commands/config.js +326 -273
- package/dist/cli/commands/mcp.d.ts +2 -1
- package/dist/cli/commands/mcp.js +874 -146
- package/dist/cli/commands/ollama.d.ts +1 -1
- package/dist/cli/commands/ollama.js +153 -143
- package/dist/cli/index.js +687 -325
- package/dist/cli/utils/complete-setup.d.ts +19 -0
- package/dist/cli/utils/complete-setup.js +81 -0
- package/dist/cli/utils/env-manager.d.ts +44 -0
- package/dist/cli/utils/env-manager.js +226 -0
- package/dist/cli/utils/interactive-setup.d.ts +48 -0
- package/dist/cli/utils/interactive-setup.js +302 -0
- package/dist/core/dynamic-models.d.ts +208 -0
- package/dist/core/dynamic-models.js +250 -0
- package/dist/core/factory.d.ts +13 -6
- package/dist/core/factory.js +177 -62
- package/dist/core/types.d.ts +4 -2
- package/dist/core/types.js +4 -4
- package/dist/index.d.ts +16 -16
- package/dist/index.js +16 -16
- package/dist/lib/agent/direct-tools.d.ts +1203 -0
- package/dist/lib/agent/direct-tools.js +387 -0
- package/dist/lib/core/dynamic-models.d.ts +208 -0
- package/dist/lib/core/dynamic-models.js +250 -0
- package/dist/lib/core/factory.d.ts +13 -6
- package/dist/lib/core/factory.js +177 -62
- package/dist/lib/core/types.d.ts +4 -2
- package/dist/lib/core/types.js +4 -4
- package/dist/lib/index.d.ts +16 -16
- package/dist/lib/index.js +16 -16
- package/dist/lib/mcp/auto-discovery.d.ts +120 -0
- package/dist/lib/mcp/auto-discovery.js +793 -0
- package/dist/lib/mcp/client.d.ts +66 -0
- package/dist/lib/mcp/client.js +245 -0
- package/dist/lib/mcp/config.d.ts +31 -0
- package/dist/lib/mcp/config.js +74 -0
- package/dist/lib/mcp/context-manager.d.ts +4 -4
- package/dist/lib/mcp/context-manager.js +24 -18
- package/dist/lib/mcp/factory.d.ts +28 -11
- package/dist/lib/mcp/factory.js +36 -29
- package/dist/lib/mcp/function-calling.d.ts +51 -0
- package/dist/lib/mcp/function-calling.js +510 -0
- package/dist/lib/mcp/index.d.ts +190 -0
- package/dist/lib/mcp/index.js +156 -0
- package/dist/lib/mcp/initialize-tools.d.ts +28 -0
- package/dist/lib/mcp/initialize-tools.js +209 -0
- package/dist/lib/mcp/initialize.d.ts +17 -0
- package/dist/lib/mcp/initialize.js +51 -0
- package/dist/lib/mcp/logging.d.ts +71 -0
- package/dist/lib/mcp/logging.js +183 -0
- package/dist/lib/mcp/manager.d.ts +67 -0
- package/dist/lib/mcp/manager.js +176 -0
- package/dist/lib/mcp/neurolink-mcp-client.d.ts +96 -0
- package/dist/lib/mcp/neurolink-mcp-client.js +417 -0
- package/dist/lib/mcp/orchestrator.d.ts +3 -3
- package/dist/lib/mcp/orchestrator.js +46 -43
- package/dist/lib/mcp/registry.d.ts +12 -4
- package/dist/lib/mcp/registry.js +64 -37
- package/dist/lib/mcp/servers/ai-providers/ai-analysis-tools.d.ts +1 -1
- package/dist/lib/mcp/servers/ai-providers/ai-analysis-tools.js +204 -65
- package/dist/lib/mcp/servers/ai-providers/ai-core-server.js +142 -102
- package/dist/lib/mcp/servers/ai-providers/ai-workflow-tools.d.ts +6 -6
- package/dist/lib/mcp/servers/ai-providers/ai-workflow-tools.js +197 -142
- package/dist/lib/mcp/servers/utilities/utility-server.d.ts +8 -0
- package/dist/lib/mcp/servers/utilities/utility-server.js +326 -0
- package/dist/lib/mcp/tool-integration.d.ts +67 -0
- package/dist/lib/mcp/tool-integration.js +179 -0
- package/dist/lib/mcp/unified-registry.d.ts +269 -0
- package/dist/lib/mcp/unified-registry.js +1411 -0
- package/dist/lib/neurolink.d.ts +68 -6
- package/dist/lib/neurolink.js +304 -42
- package/dist/lib/providers/agent-enhanced-provider.d.ts +59 -0
- package/dist/lib/providers/agent-enhanced-provider.js +242 -0
- package/dist/lib/providers/amazonBedrock.d.ts +3 -3
- package/dist/lib/providers/amazonBedrock.js +54 -50
- package/dist/lib/providers/anthropic.d.ts +2 -2
- package/dist/lib/providers/anthropic.js +92 -84
- package/dist/lib/providers/azureOpenAI.d.ts +2 -2
- package/dist/lib/providers/azureOpenAI.js +97 -86
- package/dist/lib/providers/function-calling-provider.d.ts +70 -0
- package/dist/lib/providers/function-calling-provider.js +359 -0
- package/dist/lib/providers/googleAIStudio.d.ts +10 -5
- package/dist/lib/providers/googleAIStudio.js +60 -38
- package/dist/lib/providers/googleVertexAI.d.ts +3 -3
- package/dist/lib/providers/googleVertexAI.js +96 -86
- package/dist/lib/providers/huggingFace.d.ts +3 -3
- package/dist/lib/providers/huggingFace.js +70 -63
- package/dist/lib/providers/index.d.ts +11 -11
- package/dist/lib/providers/index.js +18 -18
- package/dist/lib/providers/mcp-provider.d.ts +62 -0
- package/dist/lib/providers/mcp-provider.js +183 -0
- package/dist/lib/providers/mistralAI.d.ts +3 -3
- package/dist/lib/providers/mistralAI.js +42 -36
- package/dist/lib/providers/ollama.d.ts +4 -4
- package/dist/lib/providers/ollama.js +128 -98
- package/dist/lib/providers/openAI.d.ts +7 -3
- package/dist/lib/providers/openAI.js +45 -33
- package/dist/lib/utils/logger.js +2 -2
- package/dist/lib/utils/providerUtils-fixed.d.ts +8 -0
- package/dist/lib/utils/providerUtils-fixed.js +75 -0
- package/dist/lib/utils/providerUtils.d.ts +8 -1
- package/dist/lib/utils/providerUtils.js +63 -32
- package/dist/mcp/auto-discovery.d.ts +120 -0
- package/dist/mcp/auto-discovery.js +794 -0
- package/dist/mcp/client.d.ts +66 -0
- package/dist/mcp/client.js +245 -0
- package/dist/mcp/config.d.ts +31 -0
- package/dist/mcp/config.js +74 -0
- package/dist/mcp/context-manager.d.ts +4 -4
- package/dist/mcp/context-manager.js +24 -18
- package/dist/mcp/factory.d.ts +28 -11
- package/dist/mcp/factory.js +36 -29
- package/dist/mcp/function-calling.d.ts +51 -0
- package/dist/mcp/function-calling.js +510 -0
- package/dist/mcp/index.d.ts +190 -0
- package/dist/mcp/index.js +156 -0
- package/dist/mcp/initialize-tools.d.ts +28 -0
- package/dist/mcp/initialize-tools.js +210 -0
- package/dist/mcp/initialize.d.ts +17 -0
- package/dist/mcp/initialize.js +51 -0
- package/dist/mcp/logging.d.ts +71 -0
- package/dist/mcp/logging.js +183 -0
- package/dist/mcp/manager.d.ts +67 -0
- package/dist/mcp/manager.js +176 -0
- package/dist/mcp/neurolink-mcp-client.d.ts +96 -0
- package/dist/mcp/neurolink-mcp-client.js +417 -0
- package/dist/mcp/orchestrator.d.ts +3 -3
- package/dist/mcp/orchestrator.js +46 -43
- package/dist/mcp/registry.d.ts +12 -4
- package/dist/mcp/registry.js +64 -37
- package/dist/mcp/servers/ai-providers/ai-analysis-tools.d.ts +1 -1
- package/dist/mcp/servers/ai-providers/ai-analysis-tools.js +204 -65
- package/dist/mcp/servers/ai-providers/ai-core-server.js +142 -102
- package/dist/mcp/servers/ai-providers/ai-workflow-tools.d.ts +6 -6
- package/dist/mcp/servers/ai-providers/ai-workflow-tools.js +197 -142
- package/dist/mcp/servers/utilities/utility-server.d.ts +8 -0
- package/dist/mcp/servers/utilities/utility-server.js +326 -0
- package/dist/mcp/tool-integration.d.ts +67 -0
- package/dist/mcp/tool-integration.js +179 -0
- package/dist/mcp/unified-registry.d.ts +269 -0
- package/dist/mcp/unified-registry.js +1411 -0
- package/dist/neurolink.d.ts +68 -6
- package/dist/neurolink.js +304 -42
- package/dist/providers/agent-enhanced-provider.d.ts +59 -0
- package/dist/providers/agent-enhanced-provider.js +242 -0
- package/dist/providers/amazonBedrock.d.ts +3 -3
- package/dist/providers/amazonBedrock.js +54 -50
- package/dist/providers/anthropic.d.ts +2 -2
- package/dist/providers/anthropic.js +92 -84
- package/dist/providers/azureOpenAI.d.ts +2 -2
- package/dist/providers/azureOpenAI.js +97 -86
- package/dist/providers/function-calling-provider.d.ts +70 -0
- package/dist/providers/function-calling-provider.js +359 -0
- package/dist/providers/googleAIStudio.d.ts +10 -5
- package/dist/providers/googleAIStudio.js +60 -38
- package/dist/providers/googleVertexAI.d.ts +3 -3
- package/dist/providers/googleVertexAI.js +96 -86
- package/dist/providers/huggingFace.d.ts +3 -3
- package/dist/providers/huggingFace.js +70 -63
- package/dist/providers/index.d.ts +11 -11
- package/dist/providers/index.js +18 -18
- package/dist/providers/mcp-provider.d.ts +62 -0
- package/dist/providers/mcp-provider.js +183 -0
- package/dist/providers/mistralAI.d.ts +3 -3
- package/dist/providers/mistralAI.js +42 -36
- package/dist/providers/ollama.d.ts +4 -4
- package/dist/providers/ollama.js +128 -98
- package/dist/providers/openAI.d.ts +7 -3
- package/dist/providers/openAI.js +45 -33
- package/dist/utils/logger.js +2 -2
- package/dist/utils/providerUtils-fixed.d.ts +8 -0
- package/dist/utils/providerUtils-fixed.js +75 -0
- package/dist/utils/providerUtils.d.ts +8 -1
- package/dist/utils/providerUtils.js +63 -32
- package/package.json +182 -160
package/dist/mcp/registry.d.ts
CHANGED
|
@@ -3,8 +3,8 @@
|
|
|
3
3
|
* Central registry for managing MCP servers and tools with execution capabilities
|
|
4
4
|
* Supports tool discovery, registration, and orchestrated execution
|
|
5
5
|
*/
|
|
6
|
-
import type { NeuroLinkMCPServer, NeuroLinkMCPTool, NeuroLinkExecutionContext, ToolResult } from
|
|
7
|
-
import { ContextManager } from
|
|
6
|
+
import type { NeuroLinkMCPServer, NeuroLinkMCPTool, NeuroLinkExecutionContext, ToolResult } from "./factory.js";
|
|
7
|
+
import { ContextManager } from "./context-manager.js";
|
|
8
8
|
/**
|
|
9
9
|
* Tool registration information
|
|
10
10
|
*/
|
|
@@ -149,8 +149,16 @@ export declare class MCPToolRegistry {
|
|
|
149
149
|
private updateExecutionMetrics;
|
|
150
150
|
}
|
|
151
151
|
/**
|
|
152
|
-
*
|
|
153
|
-
*
|
|
152
|
+
* Get the default singleton instance of the MCPToolRegistry.
|
|
153
|
+
* This function ensures that the registry is only instantiated once.
|
|
154
|
+
* Using a function getter helps prevent circular dependency issues during module initialization.
|
|
155
|
+
*
|
|
156
|
+
* @returns The singleton MCPToolRegistry instance.
|
|
157
|
+
*/
|
|
158
|
+
export declare function getDefaultToolRegistry(): MCPToolRegistry;
|
|
159
|
+
/**
|
|
160
|
+
* @deprecated The direct export `defaultToolRegistry` is deprecated and will be removed.
|
|
161
|
+
* Please use `getDefaultToolRegistry()` instead to avoid circular dependency issues.
|
|
154
162
|
*/
|
|
155
163
|
export declare const defaultToolRegistry: MCPToolRegistry;
|
|
156
164
|
/**
|
package/dist/mcp/registry.js
CHANGED
|
@@ -3,7 +3,8 @@
|
|
|
3
3
|
* Central registry for managing MCP servers and tools with execution capabilities
|
|
4
4
|
* Supports tool discovery, registration, and orchestrated execution
|
|
5
5
|
*/
|
|
6
|
-
import { ContextManager, ContextValidator } from
|
|
6
|
+
import { ContextManager, ContextValidator } from "./context-manager.js";
|
|
7
|
+
import { registryLogger, mcpLogger } from "./logging.js";
|
|
7
8
|
/**
|
|
8
9
|
* Central MCP Tool Registry
|
|
9
10
|
* Manages all MCP servers and their tools with advanced execution capabilities
|
|
@@ -26,9 +27,10 @@ export class MCPToolRegistry {
|
|
|
26
27
|
* @throws Error if server ID already exists
|
|
27
28
|
*/
|
|
28
29
|
async registerServer(server) {
|
|
29
|
-
// Check for duplicate server ID
|
|
30
|
+
// Check for duplicate server ID - if already registered, skip silently
|
|
30
31
|
if (this.servers.has(server.id)) {
|
|
31
|
-
|
|
32
|
+
mcpLogger.debug(`Server with ID '${server.id}' is already registered, skipping registration`);
|
|
33
|
+
return;
|
|
32
34
|
}
|
|
33
35
|
// Register the server
|
|
34
36
|
this.servers.set(server.id, server);
|
|
@@ -36,7 +38,7 @@ export class MCPToolRegistry {
|
|
|
36
38
|
for (const [toolName, tool] of Object.entries(server.tools)) {
|
|
37
39
|
await this.registerToolFromServer(server, toolName, tool);
|
|
38
40
|
}
|
|
39
|
-
|
|
41
|
+
registryLogger.debug(`Registered server '${server.id}' with ${Object.keys(server.tools).length} tools`);
|
|
40
42
|
}
|
|
41
43
|
/**
|
|
42
44
|
* Register a single tool from a server
|
|
@@ -55,7 +57,7 @@ export class MCPToolRegistry {
|
|
|
55
57
|
serverCategory: server.category,
|
|
56
58
|
qualifiedName,
|
|
57
59
|
simpleName,
|
|
58
|
-
registeredAt: Date.now()
|
|
60
|
+
registeredAt: Date.now(),
|
|
59
61
|
};
|
|
60
62
|
// Register with both qualified and simple names
|
|
61
63
|
this.tools.set(qualifiedName, registration);
|
|
@@ -64,7 +66,7 @@ export class MCPToolRegistry {
|
|
|
64
66
|
this.tools.set(simpleName, registration);
|
|
65
67
|
}
|
|
66
68
|
else {
|
|
67
|
-
|
|
69
|
+
registryLogger.warn(`Tool name conflict: '${simpleName}' already exists, use qualified name '${qualifiedName}'`);
|
|
68
70
|
}
|
|
69
71
|
}
|
|
70
72
|
/**
|
|
@@ -78,7 +80,7 @@ export class MCPToolRegistry {
|
|
|
78
80
|
*/
|
|
79
81
|
async executeTool(toolName, params, context, options = {}) {
|
|
80
82
|
const startTime = Date.now();
|
|
81
|
-
const { validateInput = true, validatePermissions = true, trackMetrics = true, timeoutMs = 30000 } = options;
|
|
83
|
+
const { validateInput = true, validatePermissions = true, trackMetrics = true, timeoutMs = 30000, } = options;
|
|
82
84
|
try {
|
|
83
85
|
// Find the tool
|
|
84
86
|
const registration = this.tools.get(toolName);
|
|
@@ -90,11 +92,12 @@ export class MCPToolRegistry {
|
|
|
90
92
|
if (validatePermissions) {
|
|
91
93
|
const contextValidation = ContextValidator.validateContext(context);
|
|
92
94
|
if (!contextValidation.isValid) {
|
|
93
|
-
throw new Error(`Context validation failed: ${contextValidation.errors.join(
|
|
95
|
+
throw new Error(`Context validation failed: ${contextValidation.errors.join(", ")}`);
|
|
94
96
|
}
|
|
95
97
|
// Check tool permissions
|
|
96
|
-
if (tool.permissions &&
|
|
97
|
-
|
|
98
|
+
if (tool.permissions &&
|
|
99
|
+
!ContextValidator.hasPermissions(context, tool.permissions)) {
|
|
100
|
+
throw new Error(`Insufficient permissions for tool '${toolName}'. Required: ${tool.permissions.join(", ")}`);
|
|
98
101
|
}
|
|
99
102
|
}
|
|
100
103
|
// Validate input parameters if schema provided
|
|
@@ -123,8 +126,8 @@ export class MCPToolRegistry {
|
|
|
123
126
|
serverTitle,
|
|
124
127
|
sessionId: context.sessionId,
|
|
125
128
|
timestamp: Date.now(),
|
|
126
|
-
executionTime
|
|
127
|
-
}
|
|
129
|
+
executionTime,
|
|
130
|
+
},
|
|
128
131
|
};
|
|
129
132
|
// Track metrics
|
|
130
133
|
if (trackMetrics) {
|
|
@@ -137,10 +140,10 @@ export class MCPToolRegistry {
|
|
|
137
140
|
}
|
|
138
141
|
catch (error) {
|
|
139
142
|
const errorMessage = error instanceof Error ? error.message : String(error);
|
|
140
|
-
|
|
143
|
+
registryLogger.warn(`Output validation warning for tool '${toolName}': ${errorMessage}`);
|
|
141
144
|
}
|
|
142
145
|
}
|
|
143
|
-
|
|
146
|
+
registryLogger.debug(`Executed tool '${toolName}' in ${executionTime}ms - ${result.success ? "SUCCESS" : "FAILED"}`);
|
|
144
147
|
return enhancedResult;
|
|
145
148
|
}
|
|
146
149
|
catch (error) {
|
|
@@ -157,10 +160,10 @@ export class MCPToolRegistry {
|
|
|
157
160
|
toolName,
|
|
158
161
|
sessionId: context.sessionId,
|
|
159
162
|
timestamp: Date.now(),
|
|
160
|
-
executionTime
|
|
161
|
-
}
|
|
163
|
+
executionTime,
|
|
164
|
+
},
|
|
162
165
|
};
|
|
163
|
-
|
|
166
|
+
registryLogger.error(`Tool execution failed '${toolName}': ${errorMessage}`);
|
|
164
167
|
return errorResult;
|
|
165
168
|
}
|
|
166
169
|
}
|
|
@@ -175,7 +178,8 @@ export class MCPToolRegistry {
|
|
|
175
178
|
// Get unique tools (prefer qualified names over simple names)
|
|
176
179
|
const uniqueTools = new Map();
|
|
177
180
|
for (const [name, registration] of this.tools) {
|
|
178
|
-
if (name.includes(
|
|
181
|
+
if (name.includes(".")) {
|
|
182
|
+
// Qualified name
|
|
179
183
|
uniqueTools.set(registration.qualifiedName, registration);
|
|
180
184
|
}
|
|
181
185
|
else if (!uniqueTools.has(registration.qualifiedName)) {
|
|
@@ -183,9 +187,10 @@ export class MCPToolRegistry {
|
|
|
183
187
|
}
|
|
184
188
|
}
|
|
185
189
|
for (const registration of uniqueTools.values()) {
|
|
186
|
-
const { tool, serverId, serverTitle, serverCategory, qualifiedName, simpleName } = registration;
|
|
190
|
+
const { tool, serverId, serverTitle, serverCategory, qualifiedName, simpleName, } = registration;
|
|
187
191
|
// Apply filters
|
|
188
|
-
if (criteria.name &&
|
|
192
|
+
if (criteria.name &&
|
|
193
|
+
!simpleName.toLowerCase().includes(criteria.name.toLowerCase())) {
|
|
189
194
|
continue;
|
|
190
195
|
}
|
|
191
196
|
if (criteria.category && tool.category !== criteria.category) {
|
|
@@ -194,15 +199,17 @@ export class MCPToolRegistry {
|
|
|
194
199
|
if (criteria.serverId && serverId !== criteria.serverId) {
|
|
195
200
|
continue;
|
|
196
201
|
}
|
|
197
|
-
if (criteria.serverCategory &&
|
|
202
|
+
if (criteria.serverCategory &&
|
|
203
|
+
serverCategory !== criteria.serverCategory) {
|
|
198
204
|
continue;
|
|
199
205
|
}
|
|
200
|
-
if (criteria.implemented !== undefined &&
|
|
206
|
+
if (criteria.implemented !== undefined &&
|
|
207
|
+
tool.isImplemented !== criteria.implemented) {
|
|
201
208
|
continue;
|
|
202
209
|
}
|
|
203
210
|
if (criteria.permissions && criteria.permissions.length > 0) {
|
|
204
211
|
const toolPermissions = tool.permissions || [];
|
|
205
|
-
const hasAllPermissions = criteria.permissions.every(p => toolPermissions.includes(p));
|
|
212
|
+
const hasAllPermissions = criteria.permissions.every((p) => toolPermissions.includes(p));
|
|
206
213
|
if (!hasAllPermissions) {
|
|
207
214
|
continue;
|
|
208
215
|
}
|
|
@@ -216,7 +223,7 @@ export class MCPToolRegistry {
|
|
|
216
223
|
category: tool.category,
|
|
217
224
|
serverCategory,
|
|
218
225
|
permissions: tool.permissions,
|
|
219
|
-
isImplemented: tool.isImplemented
|
|
226
|
+
isImplemented: tool.isImplemented,
|
|
220
227
|
});
|
|
221
228
|
}
|
|
222
229
|
return tools.sort((a, b) => a.qualifiedName.localeCompare(b.qualifiedName));
|
|
@@ -239,7 +246,7 @@ export class MCPToolRegistry {
|
|
|
239
246
|
return {
|
|
240
247
|
tool: registration.tool,
|
|
241
248
|
server,
|
|
242
|
-
registration
|
|
249
|
+
registration,
|
|
243
250
|
};
|
|
244
251
|
}
|
|
245
252
|
/**
|
|
@@ -252,22 +259,24 @@ export class MCPToolRegistry {
|
|
|
252
259
|
const serversByCategory = {};
|
|
253
260
|
// Count tools by category
|
|
254
261
|
for (const registration of this.tools.values()) {
|
|
255
|
-
const category = registration.tool.category ||
|
|
262
|
+
const category = registration.tool.category || "uncategorized";
|
|
256
263
|
toolsByCategory[category] = (toolsByCategory[category] || 0) + 1;
|
|
257
264
|
}
|
|
258
265
|
// Count servers by category
|
|
259
266
|
for (const server of this.servers.values()) {
|
|
260
|
-
const category = server.category ||
|
|
267
|
+
const category = server.category || "uncategorized";
|
|
261
268
|
serversByCategory[category] = (serversByCategory[category] || 0) + 1;
|
|
262
269
|
}
|
|
263
270
|
return {
|
|
264
271
|
totalServers: this.servers.size,
|
|
265
|
-
totalTools: new Set(Array.from(this.tools.values()).map(r => r.qualifiedName)).size,
|
|
272
|
+
totalTools: new Set(Array.from(this.tools.values()).map((r) => r.qualifiedName)).size,
|
|
266
273
|
toolsByCategory,
|
|
267
274
|
serversByCategory,
|
|
268
275
|
executionCount: this.executionCount,
|
|
269
|
-
averageExecutionTime: this.executionCount > 0
|
|
270
|
-
|
|
276
|
+
averageExecutionTime: this.executionCount > 0
|
|
277
|
+
? this.totalExecutionTime / this.executionCount
|
|
278
|
+
: 0,
|
|
279
|
+
errorRate: this.executionCount > 0 ? this.errorCount / this.executionCount : 0,
|
|
271
280
|
};
|
|
272
281
|
}
|
|
273
282
|
/**
|
|
@@ -293,7 +302,7 @@ export class MCPToolRegistry {
|
|
|
293
302
|
}
|
|
294
303
|
// Remove the server
|
|
295
304
|
this.servers.delete(serverId);
|
|
296
|
-
|
|
305
|
+
registryLogger.debug(`Unregistered server '${serverId}' and ${toolsToRemove.length} tools`);
|
|
297
306
|
return true;
|
|
298
307
|
}
|
|
299
308
|
/**
|
|
@@ -305,7 +314,7 @@ export class MCPToolRegistry {
|
|
|
305
314
|
this.executionCount = 0;
|
|
306
315
|
this.totalExecutionTime = 0;
|
|
307
316
|
this.errorCount = 0;
|
|
308
|
-
|
|
317
|
+
registryLogger.debug("Cleared all servers and tools");
|
|
309
318
|
}
|
|
310
319
|
/**
|
|
311
320
|
* Create timeout promise wrapper
|
|
@@ -320,7 +329,7 @@ export class MCPToolRegistry {
|
|
|
320
329
|
promise,
|
|
321
330
|
new Promise((_, reject) => {
|
|
322
331
|
setTimeout(() => reject(new Error(timeoutMessage)), timeoutMs);
|
|
323
|
-
})
|
|
332
|
+
}),
|
|
324
333
|
]);
|
|
325
334
|
}
|
|
326
335
|
/**
|
|
@@ -341,14 +350,32 @@ export class MCPToolRegistry {
|
|
|
341
350
|
* Default registry instance
|
|
342
351
|
* Can be used across the application for consistent tool management
|
|
343
352
|
*/
|
|
344
|
-
|
|
353
|
+
let defaultRegistryInstance = null;
|
|
354
|
+
/**
|
|
355
|
+
* Get the default singleton instance of the MCPToolRegistry.
|
|
356
|
+
* This function ensures that the registry is only instantiated once.
|
|
357
|
+
* Using a function getter helps prevent circular dependency issues during module initialization.
|
|
358
|
+
*
|
|
359
|
+
* @returns The singleton MCPToolRegistry instance.
|
|
360
|
+
*/
|
|
361
|
+
export function getDefaultToolRegistry() {
|
|
362
|
+
if (!defaultRegistryInstance) {
|
|
363
|
+
defaultRegistryInstance = new MCPToolRegistry();
|
|
364
|
+
}
|
|
365
|
+
return defaultRegistryInstance;
|
|
366
|
+
}
|
|
367
|
+
/**
|
|
368
|
+
* @deprecated The direct export `defaultToolRegistry` is deprecated and will be removed.
|
|
369
|
+
* Please use `getDefaultToolRegistry()` instead to avoid circular dependency issues.
|
|
370
|
+
*/
|
|
371
|
+
export const defaultToolRegistry = getDefaultToolRegistry();
|
|
345
372
|
/**
|
|
346
373
|
* Utility function to register server with default registry
|
|
347
374
|
*
|
|
348
375
|
* @param server MCP server to register
|
|
349
376
|
*/
|
|
350
377
|
export async function registerServer(server) {
|
|
351
|
-
return
|
|
378
|
+
return getDefaultToolRegistry().registerServer(server);
|
|
352
379
|
}
|
|
353
380
|
/**
|
|
354
381
|
* Utility function to execute tool with default registry
|
|
@@ -360,7 +387,7 @@ export async function registerServer(server) {
|
|
|
360
387
|
* @returns Tool execution result
|
|
361
388
|
*/
|
|
362
389
|
export async function executeTool(toolName, params, context, options) {
|
|
363
|
-
return
|
|
390
|
+
return getDefaultToolRegistry().executeTool(toolName, params, context, options);
|
|
364
391
|
}
|
|
365
392
|
/**
|
|
366
393
|
* Utility function to list tools with default registry
|
|
@@ -369,5 +396,5 @@ export async function executeTool(toolName, params, context, options) {
|
|
|
369
396
|
* @returns Array of tool information
|
|
370
397
|
*/
|
|
371
398
|
export function listTools(criteria) {
|
|
372
|
-
return
|
|
399
|
+
return getDefaultToolRegistry().listTools(criteria);
|
|
373
400
|
}
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
* AI-focused MCP tools for usage analysis, performance benchmarking, and parameter optimization
|
|
4
4
|
* Tools: analyze-ai-usage, benchmark-provider-performance, optimize-prompt-parameters
|
|
5
5
|
*/
|
|
6
|
-
import type { NeuroLinkMCPTool } from
|
|
6
|
+
import type { NeuroLinkMCPTool } from "../../factory.js";
|
|
7
7
|
/**
|
|
8
8
|
* AI Usage Analysis Tool
|
|
9
9
|
* Analyzes AI usage patterns, token consumption, and cost optimization opportunities
|