@wundr.io/mcp-registry 1.0.12 → 1.0.14
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/dist/aggregator.d.ts +394 -0
- package/dist/aggregator.d.ts.map +1 -0
- package/dist/aggregator.js +749 -0
- package/dist/aggregator.js.map +1 -0
- package/dist/discovery.d.ts +274 -0
- package/dist/discovery.d.ts.map +1 -0
- package/dist/discovery.js +536 -0
- package/dist/discovery.js.map +1 -0
- package/dist/health-monitor.d.ts +304 -0
- package/dist/health-monitor.d.ts.map +1 -0
- package/dist/health-monitor.js +626 -0
- package/dist/health-monitor.js.map +1 -0
- package/dist/index.d.ts +109 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +186 -0
- package/dist/index.js.map +1 -0
- package/dist/registry.d.ts +323 -0
- package/dist/registry.d.ts.map +1 -0
- package/dist/registry.js +647 -0
- package/dist/registry.js.map +1 -0
- package/dist/types.d.ts +663 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +120 -0
- package/dist/types.js.map +1 -0
- package/package.json +1 -1
|
@@ -0,0 +1,394 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @wundr.io/mcp-registry - MCP Aggregator (Super MCP)
|
|
3
|
+
*
|
|
4
|
+
* Implements the Super MCP pattern for routing requests to appropriate
|
|
5
|
+
* servers based on capabilities, health, and configured routing strategies.
|
|
6
|
+
*
|
|
7
|
+
* @packageDocumentation
|
|
8
|
+
*/
|
|
9
|
+
import { EventEmitter } from 'eventemitter3';
|
|
10
|
+
import type { MCPServerRegistry } from './registry';
|
|
11
|
+
import type { ToolInvocationRequest, ToolInvocationResponse, ToolResult, AggregatorConfig, RoutingStrategy, CircuitBreakerState, CircuitBreakerStatus, MCPServerRegistration } from './types';
|
|
12
|
+
/**
|
|
13
|
+
* Error thrown when no server can handle a tool invocation
|
|
14
|
+
*/
|
|
15
|
+
export declare class NoServerAvailableError extends Error {
|
|
16
|
+
readonly toolName: string;
|
|
17
|
+
constructor(toolName: string, message?: string);
|
|
18
|
+
}
|
|
19
|
+
/**
|
|
20
|
+
* Error thrown when a tool invocation times out
|
|
21
|
+
*/
|
|
22
|
+
export declare class ToolInvocationTimeoutError extends Error {
|
|
23
|
+
readonly toolName: string;
|
|
24
|
+
readonly timeoutMs: number;
|
|
25
|
+
constructor(toolName: string, timeoutMs: number, message?: string);
|
|
26
|
+
}
|
|
27
|
+
/**
|
|
28
|
+
* Error thrown when circuit breaker is open for a server
|
|
29
|
+
*/
|
|
30
|
+
export declare class CircuitBreakerOpenError extends Error {
|
|
31
|
+
readonly serverId: string;
|
|
32
|
+
constructor(serverId: string, message?: string);
|
|
33
|
+
}
|
|
34
|
+
/**
|
|
35
|
+
* Error thrown when all retry attempts are exhausted
|
|
36
|
+
*/
|
|
37
|
+
export declare class RetryExhaustedError extends Error {
|
|
38
|
+
readonly toolName: string;
|
|
39
|
+
readonly attempts: number;
|
|
40
|
+
readonly lastError: Error;
|
|
41
|
+
constructor(toolName: string, attempts: number, lastError: Error, message?: string);
|
|
42
|
+
}
|
|
43
|
+
/**
|
|
44
|
+
* Error thrown when the target server has no registered transport and is not connected
|
|
45
|
+
*/
|
|
46
|
+
export declare class ServerNotConnectedError extends Error {
|
|
47
|
+
readonly serverId: string;
|
|
48
|
+
readonly serverName: string;
|
|
49
|
+
constructor(serverId: string, serverName: string, message?: string);
|
|
50
|
+
}
|
|
51
|
+
/**
|
|
52
|
+
* Event map for aggregator events
|
|
53
|
+
*/
|
|
54
|
+
export interface AggregatorEvents {
|
|
55
|
+
'request:started': (event: RequestEvent) => void;
|
|
56
|
+
'request:completed': (event: RequestEvent) => void;
|
|
57
|
+
'request:failed': (event: RequestEvent) => void;
|
|
58
|
+
'request:retried': (event: RequestEvent) => void;
|
|
59
|
+
'circuit:opened': (event: CircuitEvent) => void;
|
|
60
|
+
'circuit:closed': (event: CircuitEvent) => void;
|
|
61
|
+
'circuit:half-open': (event: CircuitEvent) => void;
|
|
62
|
+
}
|
|
63
|
+
/**
|
|
64
|
+
* Request event data
|
|
65
|
+
*/
|
|
66
|
+
export interface RequestEvent {
|
|
67
|
+
readonly requestId: string;
|
|
68
|
+
readonly toolName: string;
|
|
69
|
+
readonly serverId?: string;
|
|
70
|
+
readonly durationMs?: number;
|
|
71
|
+
readonly error?: Error;
|
|
72
|
+
readonly retryAttempt?: number;
|
|
73
|
+
readonly timestamp: Date;
|
|
74
|
+
}
|
|
75
|
+
/**
|
|
76
|
+
* Circuit breaker event data
|
|
77
|
+
*/
|
|
78
|
+
export interface CircuitEvent {
|
|
79
|
+
readonly serverId: string;
|
|
80
|
+
readonly previousState: CircuitBreakerState;
|
|
81
|
+
readonly newState: CircuitBreakerState;
|
|
82
|
+
readonly timestamp: Date;
|
|
83
|
+
}
|
|
84
|
+
/**
|
|
85
|
+
* MCP Aggregator (Super MCP Pattern)
|
|
86
|
+
*
|
|
87
|
+
* Routes tool invocation requests to appropriate servers based on
|
|
88
|
+
* capabilities, health status, and configured routing strategies.
|
|
89
|
+
* Implements circuit breaker pattern for fault tolerance.
|
|
90
|
+
*
|
|
91
|
+
* @example
|
|
92
|
+
* ```typescript
|
|
93
|
+
* const aggregator = new MCPAggregator(registry, {
|
|
94
|
+
* defaultStrategy: 'health-aware',
|
|
95
|
+
* enableRetries: true,
|
|
96
|
+
* maxRetries: 3,
|
|
97
|
+
* enableCircuitBreaker: true,
|
|
98
|
+
* });
|
|
99
|
+
*
|
|
100
|
+
* // Invoke a tool
|
|
101
|
+
* const response = await aggregator.invoke({
|
|
102
|
+
* name: 'drift_detection',
|
|
103
|
+
* arguments: { action: 'detect' },
|
|
104
|
+
* });
|
|
105
|
+
*
|
|
106
|
+
* // Use specific routing strategy
|
|
107
|
+
* const response = await aggregator.invokeWithStrategy(
|
|
108
|
+
* { name: 'my-tool' },
|
|
109
|
+
* 'least-latency',
|
|
110
|
+
* );
|
|
111
|
+
* ```
|
|
112
|
+
*/
|
|
113
|
+
export declare class MCPAggregator extends EventEmitter<AggregatorEvents> {
|
|
114
|
+
private readonly registry;
|
|
115
|
+
/** Configuration */
|
|
116
|
+
private readonly config;
|
|
117
|
+
/** Discovery service */
|
|
118
|
+
private readonly discovery;
|
|
119
|
+
/** Circuit breaker states by server ID */
|
|
120
|
+
private readonly circuitBreakers;
|
|
121
|
+
/** Round-robin index by tool name */
|
|
122
|
+
private readonly roundRobinIndex;
|
|
123
|
+
/** Request counter for generating IDs */
|
|
124
|
+
private requestCounter;
|
|
125
|
+
/** Tool handler registry for direct invocation */
|
|
126
|
+
private readonly toolHandlers;
|
|
127
|
+
/** Per-server transport registry for remote dispatch */
|
|
128
|
+
private readonly serverTransports;
|
|
129
|
+
/**
|
|
130
|
+
* Creates a new MCPAggregator
|
|
131
|
+
*
|
|
132
|
+
* @param registry - The server registry
|
|
133
|
+
* @param config - Aggregator configuration
|
|
134
|
+
*/
|
|
135
|
+
constructor(registry: MCPServerRegistry, config?: AggregatorConfig);
|
|
136
|
+
/**
|
|
137
|
+
* Invoke a tool using the default routing strategy
|
|
138
|
+
*
|
|
139
|
+
* @param request - Tool invocation request
|
|
140
|
+
* @returns Tool invocation response
|
|
141
|
+
* @throws {NoServerAvailableError} If no server can handle the tool
|
|
142
|
+
* @throws {ToolInvocationTimeoutError} If the invocation times out
|
|
143
|
+
* @throws {RetryExhaustedError} If all retries are exhausted
|
|
144
|
+
*/
|
|
145
|
+
invoke(request: ToolInvocationRequest): Promise<ToolInvocationResponse>;
|
|
146
|
+
/**
|
|
147
|
+
* Invoke a tool with a specific routing strategy
|
|
148
|
+
*
|
|
149
|
+
* @param request - Tool invocation request
|
|
150
|
+
* @param strategy - Routing strategy to use
|
|
151
|
+
* @returns Tool invocation response
|
|
152
|
+
*/
|
|
153
|
+
invokeWithStrategy(request: ToolInvocationRequest, strategy: RoutingStrategy): Promise<ToolInvocationResponse>;
|
|
154
|
+
/**
|
|
155
|
+
* Invoke multiple tools in parallel
|
|
156
|
+
*
|
|
157
|
+
* @param requests - Array of tool invocation requests
|
|
158
|
+
* @returns Array of tool invocation responses
|
|
159
|
+
*/
|
|
160
|
+
invokeParallel(requests: readonly ToolInvocationRequest[]): Promise<readonly ToolInvocationResponse[]>;
|
|
161
|
+
/**
|
|
162
|
+
* Invoke tools in sequence
|
|
163
|
+
*
|
|
164
|
+
* @param requests - Array of tool invocation requests
|
|
165
|
+
* @returns Array of tool invocation responses
|
|
166
|
+
*/
|
|
167
|
+
invokeSequential(requests: readonly ToolInvocationRequest[]): Promise<readonly ToolInvocationResponse[]>;
|
|
168
|
+
/**
|
|
169
|
+
* Register a direct tool handler (for local execution)
|
|
170
|
+
*
|
|
171
|
+
* @param toolName - Tool name
|
|
172
|
+
* @param handler - Tool handler function
|
|
173
|
+
*/
|
|
174
|
+
registerToolHandler(toolName: string, handler: ToolHandler): void;
|
|
175
|
+
/**
|
|
176
|
+
* Unregister a tool handler
|
|
177
|
+
*
|
|
178
|
+
* @param toolName - Tool name
|
|
179
|
+
*/
|
|
180
|
+
unregisterToolHandler(toolName: string): void;
|
|
181
|
+
/**
|
|
182
|
+
* Register a transport for a specific server to enable remote tool dispatch.
|
|
183
|
+
*
|
|
184
|
+
* The transport is responsible for forwarding the tool call to the actual
|
|
185
|
+
* MCP server process over whatever protocol the server uses (stdio, http, etc.).
|
|
186
|
+
*
|
|
187
|
+
* @example
|
|
188
|
+
* ```typescript
|
|
189
|
+
* aggregator.registerServerTransport(server.id, async (toolName, args) => {
|
|
190
|
+
* return myMcpClient.callTool(toolName, args);
|
|
191
|
+
* });
|
|
192
|
+
* ```
|
|
193
|
+
*
|
|
194
|
+
* @param serverId - Server ID as returned by registry.register()
|
|
195
|
+
* @param transport - Transport implementation
|
|
196
|
+
*/
|
|
197
|
+
registerServerTransport(serverId: string, transport: ServerTransport): void;
|
|
198
|
+
/**
|
|
199
|
+
* Unregister a server transport
|
|
200
|
+
*
|
|
201
|
+
* @param serverId - Server ID
|
|
202
|
+
*/
|
|
203
|
+
unregisterServerTransport(serverId: string): void;
|
|
204
|
+
/**
|
|
205
|
+
* Select a server for a tool using the specified strategy
|
|
206
|
+
*
|
|
207
|
+
* @param toolName - Tool name
|
|
208
|
+
* @param strategy - Routing strategy
|
|
209
|
+
* @param preferredServer - Optional preferred server ID
|
|
210
|
+
* @returns Selected server or undefined
|
|
211
|
+
*/
|
|
212
|
+
selectServer(toolName: string, strategy: RoutingStrategy, preferredServer?: string): Promise<MCPServerRegistration | undefined>;
|
|
213
|
+
/**
|
|
214
|
+
* Select server by highest priority
|
|
215
|
+
*/
|
|
216
|
+
private selectByPriority;
|
|
217
|
+
/**
|
|
218
|
+
* Select server using round-robin
|
|
219
|
+
*/
|
|
220
|
+
private selectRoundRobin;
|
|
221
|
+
/**
|
|
222
|
+
* Select server with lowest latency
|
|
223
|
+
*/
|
|
224
|
+
private selectByLeastLatency;
|
|
225
|
+
/**
|
|
226
|
+
* Select random server
|
|
227
|
+
*/
|
|
228
|
+
private selectRandom;
|
|
229
|
+
/**
|
|
230
|
+
* Select server using health-aware strategy
|
|
231
|
+
*/
|
|
232
|
+
private selectHealthAware;
|
|
233
|
+
/**
|
|
234
|
+
* Check if circuit is open for a server
|
|
235
|
+
*
|
|
236
|
+
* @param serverId - Server ID
|
|
237
|
+
* @returns True if circuit is open
|
|
238
|
+
*/
|
|
239
|
+
isCircuitOpen(serverId: string): boolean;
|
|
240
|
+
/**
|
|
241
|
+
* Get circuit breaker status for a server
|
|
242
|
+
*
|
|
243
|
+
* @param serverId - Server ID
|
|
244
|
+
* @returns Circuit breaker status
|
|
245
|
+
*/
|
|
246
|
+
getCircuitStatus(serverId: string): CircuitBreakerStatus;
|
|
247
|
+
/**
|
|
248
|
+
* Get all circuit breaker statuses
|
|
249
|
+
*
|
|
250
|
+
* @returns Array of circuit breaker statuses
|
|
251
|
+
*/
|
|
252
|
+
getAllCircuitStatuses(): readonly CircuitBreakerStatus[];
|
|
253
|
+
/**
|
|
254
|
+
* Manually reset a circuit breaker
|
|
255
|
+
*
|
|
256
|
+
* @param serverId - Server ID
|
|
257
|
+
*/
|
|
258
|
+
resetCircuit(serverId: string): void;
|
|
259
|
+
/**
|
|
260
|
+
* Manually open a circuit breaker
|
|
261
|
+
*
|
|
262
|
+
* @param serverId - Server ID
|
|
263
|
+
*/
|
|
264
|
+
openCircuit(serverId: string): void;
|
|
265
|
+
/**
|
|
266
|
+
* Record a successful request
|
|
267
|
+
*/
|
|
268
|
+
private recordSuccess;
|
|
269
|
+
/**
|
|
270
|
+
* Record a failed request
|
|
271
|
+
*/
|
|
272
|
+
private recordFailure;
|
|
273
|
+
/**
|
|
274
|
+
* Transition circuit to a new state
|
|
275
|
+
*/
|
|
276
|
+
private transitionCircuit;
|
|
277
|
+
/**
|
|
278
|
+
* Get or create circuit breaker state
|
|
279
|
+
*/
|
|
280
|
+
private getOrCreateCircuitState;
|
|
281
|
+
/** Track last attempted server for failure recording */
|
|
282
|
+
private lastAttemptedServerId?;
|
|
283
|
+
/**
|
|
284
|
+
* Execute tool with timeout.
|
|
285
|
+
*
|
|
286
|
+
* Dispatch priority:
|
|
287
|
+
* 1. Local ToolHandler registered via registerToolHandler() - used for
|
|
288
|
+
* in-process tools that do not require a remote server.
|
|
289
|
+
* 2. ServerTransport registered via registerServerTransport() - used to
|
|
290
|
+
* forward the call to the actual MCP server over its native protocol.
|
|
291
|
+
* 3. Neither available - throw ServerNotConnectedError so the caller
|
|
292
|
+
* can either register a transport or handle the error explicitly.
|
|
293
|
+
*/
|
|
294
|
+
private executeWithTimeout;
|
|
295
|
+
/**
|
|
296
|
+
* Execute a function with timeout
|
|
297
|
+
*/
|
|
298
|
+
private executeWithTimeoutInternal;
|
|
299
|
+
/**
|
|
300
|
+
* Get the last attempted server ID
|
|
301
|
+
*/
|
|
302
|
+
private getLastAttemptedServerId;
|
|
303
|
+
/**
|
|
304
|
+
* Check if a server provides a tool
|
|
305
|
+
*/
|
|
306
|
+
private serverProvidesTool;
|
|
307
|
+
/**
|
|
308
|
+
* Generate a unique request ID
|
|
309
|
+
*/
|
|
310
|
+
private generateRequestId;
|
|
311
|
+
/**
|
|
312
|
+
* Delay for specified milliseconds
|
|
313
|
+
*/
|
|
314
|
+
private delay;
|
|
315
|
+
/**
|
|
316
|
+
* Emit a request event
|
|
317
|
+
*/
|
|
318
|
+
private emitRequestEvent;
|
|
319
|
+
/**
|
|
320
|
+
* Get aggregator statistics
|
|
321
|
+
*
|
|
322
|
+
* @returns Aggregator statistics
|
|
323
|
+
*/
|
|
324
|
+
getStats(): AggregatorStats;
|
|
325
|
+
/**
|
|
326
|
+
* Get the current configuration
|
|
327
|
+
*
|
|
328
|
+
* @returns Current aggregator configuration
|
|
329
|
+
*/
|
|
330
|
+
getConfig(): Readonly<Required<AggregatorConfig>>;
|
|
331
|
+
}
|
|
332
|
+
/**
|
|
333
|
+
* Tool handler function type for in-process (local) tool execution.
|
|
334
|
+
*/
|
|
335
|
+
export type ToolHandler = (args: Record<string, unknown>) => Promise<ToolResult>;
|
|
336
|
+
/**
|
|
337
|
+
* Server transport function type for remote tool dispatch.
|
|
338
|
+
*
|
|
339
|
+
* Implementors are responsible for serialising the call over the appropriate
|
|
340
|
+
* protocol (stdio JSON-RPC, HTTP, WebSocket, etc.) and returning a ToolResult.
|
|
341
|
+
*
|
|
342
|
+
* @param toolName - The MCP tool name to invoke
|
|
343
|
+
* @param args - Tool arguments
|
|
344
|
+
* @param server - Full server registration (transport config, metadata, etc.)
|
|
345
|
+
* @returns Tool result from the remote server
|
|
346
|
+
*
|
|
347
|
+
* @example
|
|
348
|
+
* ```typescript
|
|
349
|
+
* // Example using the MCP SDK Client
|
|
350
|
+
* const transport: ServerTransport = async (toolName, args, server) => {
|
|
351
|
+
* const result = await mcpClient.callTool({ name: toolName, arguments: args });
|
|
352
|
+
* return {
|
|
353
|
+
* content: result.content,
|
|
354
|
+
* isError: result.isError ?? false,
|
|
355
|
+
* serverId: server.id,
|
|
356
|
+
* toolName,
|
|
357
|
+
* };
|
|
358
|
+
* };
|
|
359
|
+
* aggregator.registerServerTransport(server.id, transport);
|
|
360
|
+
* ```
|
|
361
|
+
*/
|
|
362
|
+
export type ServerTransport = (toolName: string, args: Record<string, unknown>, server: MCPServerRegistration) => Promise<ToolResult>;
|
|
363
|
+
/**
|
|
364
|
+
* Aggregator statistics
|
|
365
|
+
*/
|
|
366
|
+
export interface AggregatorStats {
|
|
367
|
+
/** Number of open circuit breakers */
|
|
368
|
+
readonly openCircuits: number;
|
|
369
|
+
/** Number of half-open circuit breakers */
|
|
370
|
+
readonly halfOpenCircuits: number;
|
|
371
|
+
/** Number of closed circuit breakers */
|
|
372
|
+
readonly closedCircuits: number;
|
|
373
|
+
/** Total requests processed */
|
|
374
|
+
readonly totalRequests: number;
|
|
375
|
+
/** Number of registered direct handlers */
|
|
376
|
+
readonly registeredHandlers: number;
|
|
377
|
+
}
|
|
378
|
+
/**
|
|
379
|
+
* Create a new MCPAggregator
|
|
380
|
+
*
|
|
381
|
+
* @param registry - The server registry
|
|
382
|
+
* @param config - Optional aggregator configuration
|
|
383
|
+
* @returns New aggregator instance
|
|
384
|
+
*
|
|
385
|
+
* @example
|
|
386
|
+
* ```typescript
|
|
387
|
+
* const aggregator = createMCPAggregator(registry, {
|
|
388
|
+
* defaultStrategy: 'health-aware',
|
|
389
|
+
* enableRetries: true,
|
|
390
|
+
* });
|
|
391
|
+
* ```
|
|
392
|
+
*/
|
|
393
|
+
export declare function createMCPAggregator(registry: MCPServerRegistry, config?: AggregatorConfig): MCPAggregator;
|
|
394
|
+
//# sourceMappingURL=aggregator.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"aggregator.d.ts","sourceRoot":"","sources":["../src/aggregator.ts"],"names":[],"mappings":"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"}
|