@wundr.io/mcp-registry 1.0.3
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/README.md +890 -0
- package/dist/aggregator.d.ts +330 -0
- package/dist/aggregator.d.ts.map +1 -0
- package/dist/aggregator.js +708 -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 +185 -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 +71 -0
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,109 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @wundr.io/mcp-registry - MCP Server Registry and Discovery
|
|
3
|
+
*
|
|
4
|
+
* Implements MCP server registry, discovery, and the Super MCP aggregator
|
|
5
|
+
* pattern for unified tool routing across multiple MCP servers.
|
|
6
|
+
*
|
|
7
|
+
* Features:
|
|
8
|
+
* - Server registration and lifecycle management
|
|
9
|
+
* - Capability-based server discovery
|
|
10
|
+
* - Health monitoring and automatic recovery
|
|
11
|
+
* - Circuit breaker pattern for fault tolerance
|
|
12
|
+
* - Multiple routing strategies (priority, round-robin, least-latency, etc.)
|
|
13
|
+
*
|
|
14
|
+
* @example
|
|
15
|
+
* ```typescript
|
|
16
|
+
* import {
|
|
17
|
+
* MCPServerRegistry,
|
|
18
|
+
* MCPAggregator,
|
|
19
|
+
* ServerHealthMonitor,
|
|
20
|
+
* createServerDiscoveryService,
|
|
21
|
+
* } from '@wundr.io/mcp-registry';
|
|
22
|
+
*
|
|
23
|
+
* // Create registry
|
|
24
|
+
* const registry = new MCPServerRegistry();
|
|
25
|
+
*
|
|
26
|
+
* // Register servers
|
|
27
|
+
* await registry.register({
|
|
28
|
+
* name: 'wundr-mcp',
|
|
29
|
+
* version: '1.0.0',
|
|
30
|
+
* transport: { type: 'stdio', command: 'npx', args: ['@wundr.io/mcp-server'] },
|
|
31
|
+
* });
|
|
32
|
+
*
|
|
33
|
+
* // Create aggregator
|
|
34
|
+
* const aggregator = new MCPAggregator(registry, {
|
|
35
|
+
* defaultStrategy: 'health-aware',
|
|
36
|
+
* enableRetries: true,
|
|
37
|
+
* });
|
|
38
|
+
*
|
|
39
|
+
* // Start health monitoring
|
|
40
|
+
* const monitor = new ServerHealthMonitor(registry);
|
|
41
|
+
* await monitor.start();
|
|
42
|
+
*
|
|
43
|
+
* // Invoke tools
|
|
44
|
+
* const response = await aggregator.invoke({
|
|
45
|
+
* name: 'drift_detection',
|
|
46
|
+
* arguments: { action: 'detect' },
|
|
47
|
+
* });
|
|
48
|
+
* ```
|
|
49
|
+
*
|
|
50
|
+
* @packageDocumentation
|
|
51
|
+
*/
|
|
52
|
+
import type { MCPAggregator } from './aggregator';
|
|
53
|
+
import type { ServerDiscoveryService } from './discovery';
|
|
54
|
+
import type { ServerHealthMonitor } from './health-monitor';
|
|
55
|
+
import type { MCPServerRegistry } from './registry';
|
|
56
|
+
import type { AggregatorConfig, HealthMonitorConfig } from './types';
|
|
57
|
+
export { TransportType, CapabilityCategory, MCPCapability, ToolDefinition, ToolInputSchema, JsonSchemaProperty, ResourceDefinition, PromptDefinition, PromptArgument, TransportConfig, MCPServerRegistration, ServerRegistrationOptions, HealthLevel, HealthCheckResult, HealthStatus, HealthMonitorConfig, TextContent, ImageContent, EmbeddedResourceContent, ToolContentItem, ToolResult, ToolInvocationRequest, ToolInvocationResponse, CapabilityQuery, DiscoveryResult, RoutingStrategy, AggregatorConfig, CircuitBreakerState, CircuitBreakerStatus, RegistryEventType, RegistryEvent, TransportTypeSchema, TransportConfigSchema, ServerRegistrationOptionsSchema, ToolInvocationRequestSchema, CapabilityQuerySchema, AggregatorConfigSchema, HealthMonitorConfigSchema, } from './types';
|
|
58
|
+
export { MCPServerRegistry, createMCPServerRegistry, RegistryStats, RegistryExport, RegistryEvents, ServerNotFoundError, ServerAlreadyExistsError, RegistrationValidationError, } from './registry';
|
|
59
|
+
export { ServerDiscoveryService, createServerDiscoveryService, CapabilityQueryBuilder, DiscoveryOptions, RecommendationContext, UsageHistoryEntry, ServerRecommendation, NoServersFoundError, InvalidQueryError, } from './discovery';
|
|
60
|
+
export { MCPAggregator, createMCPAggregator, AggregatorEvents, AggregatorStats, RequestEvent, CircuitEvent, ToolHandler, NoServerAvailableError, ToolInvocationTimeoutError, CircuitBreakerOpenError, RetryExhaustedError, } from './aggregator';
|
|
61
|
+
export { ServerHealthMonitor, createServerHealthMonitor, HealthMonitorEvents, HealthMonitorStats, HealthCheckEvent, HealthChangeEvent, ConnectionEvent, HealthCheckFn, RegisteredHealthCheck, HealthCheckError, } from './health-monitor';
|
|
62
|
+
/**
|
|
63
|
+
* Create a complete MCP registry system with all components
|
|
64
|
+
*
|
|
65
|
+
* @param config - Optional configuration for all components
|
|
66
|
+
* @returns Object containing all registry components
|
|
67
|
+
*
|
|
68
|
+
* @example
|
|
69
|
+
* ```typescript
|
|
70
|
+
* const { registry, discovery, aggregator, monitor } = createMCPRegistrySystem({
|
|
71
|
+
* aggregator: { defaultStrategy: 'health-aware' },
|
|
72
|
+
* monitor: { checkInterval: 10000 },
|
|
73
|
+
* });
|
|
74
|
+
*
|
|
75
|
+
* await monitor.start();
|
|
76
|
+
* ```
|
|
77
|
+
*/
|
|
78
|
+
export declare function createMCPRegistrySystem(config?: MCPRegistrySystemConfig): Promise<MCPRegistrySystem>;
|
|
79
|
+
/**
|
|
80
|
+
* Configuration for the complete MCP registry system
|
|
81
|
+
*/
|
|
82
|
+
export interface MCPRegistrySystemConfig {
|
|
83
|
+
/** Aggregator configuration */
|
|
84
|
+
aggregator?: AggregatorConfig;
|
|
85
|
+
/** Health monitor configuration */
|
|
86
|
+
monitor?: HealthMonitorConfig;
|
|
87
|
+
}
|
|
88
|
+
/**
|
|
89
|
+
* Complete MCP registry system with all components
|
|
90
|
+
*/
|
|
91
|
+
export interface MCPRegistrySystem {
|
|
92
|
+
/** Server registry */
|
|
93
|
+
registry: MCPServerRegistry;
|
|
94
|
+
/** Discovery service */
|
|
95
|
+
discovery: ServerDiscoveryService;
|
|
96
|
+
/** Request aggregator */
|
|
97
|
+
aggregator: MCPAggregator;
|
|
98
|
+
/** Health monitor */
|
|
99
|
+
monitor: ServerHealthMonitor;
|
|
100
|
+
}
|
|
101
|
+
/**
|
|
102
|
+
* Package version
|
|
103
|
+
*/
|
|
104
|
+
export declare const VERSION = "1.0.3";
|
|
105
|
+
/**
|
|
106
|
+
* Default export - the createMCPRegistrySystem function
|
|
107
|
+
*/
|
|
108
|
+
export default createMCPRegistrySystem;
|
|
109
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAkDG;AAMH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAClD,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,aAAa,CAAC;AAC1D,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAC;AAC5D,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AACpD,OAAO,KAAK,EAAE,gBAAgB,EAAE,mBAAmB,EAAE,MAAM,SAAS,CAAC;AAMrE,OAAO,EAEL,aAAa,EACb,kBAAkB,EAClB,aAAa,EACb,cAAc,EACd,eAAe,EACf,kBAAkB,EAClB,kBAAkB,EAClB,gBAAgB,EAChB,cAAc,EACd,eAAe,EACf,qBAAqB,EACrB,yBAAyB,EAGzB,WAAW,EACX,iBAAiB,EACjB,YAAY,EACZ,mBAAmB,EAGnB,WAAW,EACX,YAAY,EACZ,uBAAuB,EACvB,eAAe,EACf,UAAU,EACV,qBAAqB,EACrB,sBAAsB,EAGtB,eAAe,EACf,eAAe,EAGf,eAAe,EACf,gBAAgB,EAChB,mBAAmB,EACnB,oBAAoB,EAGpB,iBAAiB,EACjB,aAAa,EAGb,mBAAmB,EACnB,qBAAqB,EACrB,+BAA+B,EAC/B,2BAA2B,EAC3B,qBAAqB,EACrB,sBAAsB,EACtB,yBAAyB,GAC1B,MAAM,SAAS,CAAC;AAMjB,OAAO,EACL,iBAAiB,EACjB,uBAAuB,EACvB,aAAa,EACb,cAAc,EACd,cAAc,EACd,mBAAmB,EACnB,wBAAwB,EACxB,2BAA2B,GAC5B,MAAM,YAAY,CAAC;AAMpB,OAAO,EACL,sBAAsB,EACtB,4BAA4B,EAC5B,sBAAsB,EACtB,gBAAgB,EAChB,qBAAqB,EACrB,iBAAiB,EACjB,oBAAoB,EACpB,mBAAmB,EACnB,iBAAiB,GAClB,MAAM,aAAa,CAAC;AAMrB,OAAO,EACL,aAAa,EACb,mBAAmB,EACnB,gBAAgB,EAChB,eAAe,EACf,YAAY,EACZ,YAAY,EACZ,WAAW,EACX,sBAAsB,EACtB,0BAA0B,EAC1B,uBAAuB,EACvB,mBAAmB,GACpB,MAAM,cAAc,CAAC;AAMtB,OAAO,EACL,mBAAmB,EACnB,yBAAyB,EACzB,mBAAmB,EACnB,kBAAkB,EAClB,gBAAgB,EAChB,iBAAiB,EACjB,eAAe,EACf,aAAa,EACb,qBAAqB,EACrB,gBAAgB,GACjB,MAAM,kBAAkB,CAAC;AAM1B;;;;;;;;;;;;;;;GAeG;AACH,wBAAsB,uBAAuB,CAC3C,MAAM,CAAC,EAAE,uBAAuB,GAC/B,OAAO,CAAC,iBAAiB,CAAC,CAiB5B;AAED;;GAEG;AACH,MAAM,WAAW,uBAAuB;IACtC,+BAA+B;IAC/B,UAAU,CAAC,EAAE,gBAAgB,CAAC;IAC9B,mCAAmC;IACnC,OAAO,CAAC,EAAE,mBAAmB,CAAC;CAC/B;AAED;;GAEG;AACH,MAAM,WAAW,iBAAiB;IAChC,sBAAsB;IACtB,QAAQ,EAAE,iBAAiB,CAAC;IAC5B,wBAAwB;IACxB,SAAS,EAAE,sBAAsB,CAAC;IAClC,yBAAyB;IACzB,UAAU,EAAE,aAAa,CAAC;IAC1B,qBAAqB;IACrB,OAAO,EAAE,mBAAmB,CAAC;CAC9B;AAMD;;GAEG;AACH,eAAO,MAAM,OAAO,UAAU,CAAC;AAM/B;;GAEG;AACH,eAAe,uBAAuB,CAAC"}
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,185 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* @wundr.io/mcp-registry - MCP Server Registry and Discovery
|
|
4
|
+
*
|
|
5
|
+
* Implements MCP server registry, discovery, and the Super MCP aggregator
|
|
6
|
+
* pattern for unified tool routing across multiple MCP servers.
|
|
7
|
+
*
|
|
8
|
+
* Features:
|
|
9
|
+
* - Server registration and lifecycle management
|
|
10
|
+
* - Capability-based server discovery
|
|
11
|
+
* - Health monitoring and automatic recovery
|
|
12
|
+
* - Circuit breaker pattern for fault tolerance
|
|
13
|
+
* - Multiple routing strategies (priority, round-robin, least-latency, etc.)
|
|
14
|
+
*
|
|
15
|
+
* @example
|
|
16
|
+
* ```typescript
|
|
17
|
+
* import {
|
|
18
|
+
* MCPServerRegistry,
|
|
19
|
+
* MCPAggregator,
|
|
20
|
+
* ServerHealthMonitor,
|
|
21
|
+
* createServerDiscoveryService,
|
|
22
|
+
* } from '@wundr.io/mcp-registry';
|
|
23
|
+
*
|
|
24
|
+
* // Create registry
|
|
25
|
+
* const registry = new MCPServerRegistry();
|
|
26
|
+
*
|
|
27
|
+
* // Register servers
|
|
28
|
+
* await registry.register({
|
|
29
|
+
* name: 'wundr-mcp',
|
|
30
|
+
* version: '1.0.0',
|
|
31
|
+
* transport: { type: 'stdio', command: 'npx', args: ['@wundr.io/mcp-server'] },
|
|
32
|
+
* });
|
|
33
|
+
*
|
|
34
|
+
* // Create aggregator
|
|
35
|
+
* const aggregator = new MCPAggregator(registry, {
|
|
36
|
+
* defaultStrategy: 'health-aware',
|
|
37
|
+
* enableRetries: true,
|
|
38
|
+
* });
|
|
39
|
+
*
|
|
40
|
+
* // Start health monitoring
|
|
41
|
+
* const monitor = new ServerHealthMonitor(registry);
|
|
42
|
+
* await monitor.start();
|
|
43
|
+
*
|
|
44
|
+
* // Invoke tools
|
|
45
|
+
* const response = await aggregator.invoke({
|
|
46
|
+
* name: 'drift_detection',
|
|
47
|
+
* arguments: { action: 'detect' },
|
|
48
|
+
* });
|
|
49
|
+
* ```
|
|
50
|
+
*
|
|
51
|
+
* @packageDocumentation
|
|
52
|
+
*/
|
|
53
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
54
|
+
if (k2 === undefined) k2 = k;
|
|
55
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
56
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
57
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
58
|
+
}
|
|
59
|
+
Object.defineProperty(o, k2, desc);
|
|
60
|
+
}) : (function(o, m, k, k2) {
|
|
61
|
+
if (k2 === undefined) k2 = k;
|
|
62
|
+
o[k2] = m[k];
|
|
63
|
+
}));
|
|
64
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
65
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
66
|
+
}) : function(o, v) {
|
|
67
|
+
o["default"] = v;
|
|
68
|
+
});
|
|
69
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
70
|
+
var ownKeys = function(o) {
|
|
71
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
72
|
+
var ar = [];
|
|
73
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
74
|
+
return ar;
|
|
75
|
+
};
|
|
76
|
+
return ownKeys(o);
|
|
77
|
+
};
|
|
78
|
+
return function (mod) {
|
|
79
|
+
if (mod && mod.__esModule) return mod;
|
|
80
|
+
var result = {};
|
|
81
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
82
|
+
__setModuleDefault(result, mod);
|
|
83
|
+
return result;
|
|
84
|
+
};
|
|
85
|
+
})();
|
|
86
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
87
|
+
exports.VERSION = exports.HealthCheckError = exports.createServerHealthMonitor = exports.ServerHealthMonitor = exports.RetryExhaustedError = exports.CircuitBreakerOpenError = exports.ToolInvocationTimeoutError = exports.NoServerAvailableError = exports.createMCPAggregator = exports.MCPAggregator = exports.InvalidQueryError = exports.NoServersFoundError = exports.CapabilityQueryBuilder = exports.createServerDiscoveryService = exports.ServerDiscoveryService = exports.RegistrationValidationError = exports.ServerAlreadyExistsError = exports.ServerNotFoundError = exports.createMCPServerRegistry = exports.MCPServerRegistry = exports.HealthMonitorConfigSchema = exports.AggregatorConfigSchema = exports.CapabilityQuerySchema = exports.ToolInvocationRequestSchema = exports.ServerRegistrationOptionsSchema = exports.TransportConfigSchema = exports.TransportTypeSchema = void 0;
|
|
88
|
+
exports.createMCPRegistrySystem = createMCPRegistrySystem;
|
|
89
|
+
// =============================================================================
|
|
90
|
+
// Type Exports
|
|
91
|
+
// =============================================================================
|
|
92
|
+
var types_1 = require("./types");
|
|
93
|
+
// Zod schemas for runtime validation
|
|
94
|
+
Object.defineProperty(exports, "TransportTypeSchema", { enumerable: true, get: function () { return types_1.TransportTypeSchema; } });
|
|
95
|
+
Object.defineProperty(exports, "TransportConfigSchema", { enumerable: true, get: function () { return types_1.TransportConfigSchema; } });
|
|
96
|
+
Object.defineProperty(exports, "ServerRegistrationOptionsSchema", { enumerable: true, get: function () { return types_1.ServerRegistrationOptionsSchema; } });
|
|
97
|
+
Object.defineProperty(exports, "ToolInvocationRequestSchema", { enumerable: true, get: function () { return types_1.ToolInvocationRequestSchema; } });
|
|
98
|
+
Object.defineProperty(exports, "CapabilityQuerySchema", { enumerable: true, get: function () { return types_1.CapabilityQuerySchema; } });
|
|
99
|
+
Object.defineProperty(exports, "AggregatorConfigSchema", { enumerable: true, get: function () { return types_1.AggregatorConfigSchema; } });
|
|
100
|
+
Object.defineProperty(exports, "HealthMonitorConfigSchema", { enumerable: true, get: function () { return types_1.HealthMonitorConfigSchema; } });
|
|
101
|
+
// =============================================================================
|
|
102
|
+
// Registry Exports
|
|
103
|
+
// =============================================================================
|
|
104
|
+
var registry_1 = require("./registry");
|
|
105
|
+
Object.defineProperty(exports, "MCPServerRegistry", { enumerable: true, get: function () { return registry_1.MCPServerRegistry; } });
|
|
106
|
+
Object.defineProperty(exports, "createMCPServerRegistry", { enumerable: true, get: function () { return registry_1.createMCPServerRegistry; } });
|
|
107
|
+
Object.defineProperty(exports, "ServerNotFoundError", { enumerable: true, get: function () { return registry_1.ServerNotFoundError; } });
|
|
108
|
+
Object.defineProperty(exports, "ServerAlreadyExistsError", { enumerable: true, get: function () { return registry_1.ServerAlreadyExistsError; } });
|
|
109
|
+
Object.defineProperty(exports, "RegistrationValidationError", { enumerable: true, get: function () { return registry_1.RegistrationValidationError; } });
|
|
110
|
+
// =============================================================================
|
|
111
|
+
// Discovery Exports
|
|
112
|
+
// =============================================================================
|
|
113
|
+
var discovery_1 = require("./discovery");
|
|
114
|
+
Object.defineProperty(exports, "ServerDiscoveryService", { enumerable: true, get: function () { return discovery_1.ServerDiscoveryService; } });
|
|
115
|
+
Object.defineProperty(exports, "createServerDiscoveryService", { enumerable: true, get: function () { return discovery_1.createServerDiscoveryService; } });
|
|
116
|
+
Object.defineProperty(exports, "CapabilityQueryBuilder", { enumerable: true, get: function () { return discovery_1.CapabilityQueryBuilder; } });
|
|
117
|
+
Object.defineProperty(exports, "NoServersFoundError", { enumerable: true, get: function () { return discovery_1.NoServersFoundError; } });
|
|
118
|
+
Object.defineProperty(exports, "InvalidQueryError", { enumerable: true, get: function () { return discovery_1.InvalidQueryError; } });
|
|
119
|
+
// =============================================================================
|
|
120
|
+
// Aggregator Exports
|
|
121
|
+
// =============================================================================
|
|
122
|
+
var aggregator_1 = require("./aggregator");
|
|
123
|
+
Object.defineProperty(exports, "MCPAggregator", { enumerable: true, get: function () { return aggregator_1.MCPAggregator; } });
|
|
124
|
+
Object.defineProperty(exports, "createMCPAggregator", { enumerable: true, get: function () { return aggregator_1.createMCPAggregator; } });
|
|
125
|
+
Object.defineProperty(exports, "NoServerAvailableError", { enumerable: true, get: function () { return aggregator_1.NoServerAvailableError; } });
|
|
126
|
+
Object.defineProperty(exports, "ToolInvocationTimeoutError", { enumerable: true, get: function () { return aggregator_1.ToolInvocationTimeoutError; } });
|
|
127
|
+
Object.defineProperty(exports, "CircuitBreakerOpenError", { enumerable: true, get: function () { return aggregator_1.CircuitBreakerOpenError; } });
|
|
128
|
+
Object.defineProperty(exports, "RetryExhaustedError", { enumerable: true, get: function () { return aggregator_1.RetryExhaustedError; } });
|
|
129
|
+
// =============================================================================
|
|
130
|
+
// Health Monitor Exports
|
|
131
|
+
// =============================================================================
|
|
132
|
+
var health_monitor_1 = require("./health-monitor");
|
|
133
|
+
Object.defineProperty(exports, "ServerHealthMonitor", { enumerable: true, get: function () { return health_monitor_1.ServerHealthMonitor; } });
|
|
134
|
+
Object.defineProperty(exports, "createServerHealthMonitor", { enumerable: true, get: function () { return health_monitor_1.createServerHealthMonitor; } });
|
|
135
|
+
Object.defineProperty(exports, "HealthCheckError", { enumerable: true, get: function () { return health_monitor_1.HealthCheckError; } });
|
|
136
|
+
// =============================================================================
|
|
137
|
+
// Convenience Factory Functions
|
|
138
|
+
// =============================================================================
|
|
139
|
+
/**
|
|
140
|
+
* Create a complete MCP registry system with all components
|
|
141
|
+
*
|
|
142
|
+
* @param config - Optional configuration for all components
|
|
143
|
+
* @returns Object containing all registry components
|
|
144
|
+
*
|
|
145
|
+
* @example
|
|
146
|
+
* ```typescript
|
|
147
|
+
* const { registry, discovery, aggregator, monitor } = createMCPRegistrySystem({
|
|
148
|
+
* aggregator: { defaultStrategy: 'health-aware' },
|
|
149
|
+
* monitor: { checkInterval: 10000 },
|
|
150
|
+
* });
|
|
151
|
+
*
|
|
152
|
+
* await monitor.start();
|
|
153
|
+
* ```
|
|
154
|
+
*/
|
|
155
|
+
async function createMCPRegistrySystem(config) {
|
|
156
|
+
const { MCPServerRegistry } = await Promise.resolve().then(() => __importStar(require('./registry')));
|
|
157
|
+
const { ServerDiscoveryService } = await Promise.resolve().then(() => __importStar(require('./discovery')));
|
|
158
|
+
const { MCPAggregator } = await Promise.resolve().then(() => __importStar(require('./aggregator')));
|
|
159
|
+
const { ServerHealthMonitor } = await Promise.resolve().then(() => __importStar(require('./health-monitor')));
|
|
160
|
+
const registry = new MCPServerRegistry();
|
|
161
|
+
const discovery = new ServerDiscoveryService(registry);
|
|
162
|
+
const aggregator = new MCPAggregator(registry, config?.aggregator);
|
|
163
|
+
const monitor = new ServerHealthMonitor(registry, config?.monitor);
|
|
164
|
+
return {
|
|
165
|
+
registry,
|
|
166
|
+
discovery,
|
|
167
|
+
aggregator,
|
|
168
|
+
monitor,
|
|
169
|
+
};
|
|
170
|
+
}
|
|
171
|
+
// =============================================================================
|
|
172
|
+
// Version Export
|
|
173
|
+
// =============================================================================
|
|
174
|
+
/**
|
|
175
|
+
* Package version
|
|
176
|
+
*/
|
|
177
|
+
exports.VERSION = '1.0.3';
|
|
178
|
+
// =============================================================================
|
|
179
|
+
// Default Export
|
|
180
|
+
// =============================================================================
|
|
181
|
+
/**
|
|
182
|
+
* Default export - the createMCPRegistrySystem function
|
|
183
|
+
*/
|
|
184
|
+
exports.default = createMCPRegistrySystem;
|
|
185
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAkDG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA4JH,0DAmBC;AAnKD,gFAAgF;AAChF,eAAe;AACf,gFAAgF;AAEhF,iCAoDiB;AARf,qCAAqC;AACrC,4GAAA,mBAAmB,OAAA;AACnB,8GAAA,qBAAqB,OAAA;AACrB,wHAAA,+BAA+B,OAAA;AAC/B,oHAAA,2BAA2B,OAAA;AAC3B,8GAAA,qBAAqB,OAAA;AACrB,+GAAA,sBAAsB,OAAA;AACtB,kHAAA,yBAAyB,OAAA;AAG3B,gFAAgF;AAChF,mBAAmB;AACnB,gFAAgF;AAEhF,uCASoB;AARlB,6GAAA,iBAAiB,OAAA;AACjB,mHAAA,uBAAuB,OAAA;AAIvB,+GAAA,mBAAmB,OAAA;AACnB,oHAAA,wBAAwB,OAAA;AACxB,uHAAA,2BAA2B,OAAA;AAG7B,gFAAgF;AAChF,oBAAoB;AACpB,gFAAgF;AAEhF,yCAUqB;AATnB,mHAAA,sBAAsB,OAAA;AACtB,yHAAA,4BAA4B,OAAA;AAC5B,mHAAA,sBAAsB,OAAA;AAKtB,gHAAA,mBAAmB,OAAA;AACnB,8GAAA,iBAAiB,OAAA;AAGnB,gFAAgF;AAChF,qBAAqB;AACrB,gFAAgF;AAEhF,2CAYsB;AAXpB,2GAAA,aAAa,OAAA;AACb,iHAAA,mBAAmB,OAAA;AAMnB,oHAAA,sBAAsB,OAAA;AACtB,wHAAA,0BAA0B,OAAA;AAC1B,qHAAA,uBAAuB,OAAA;AACvB,iHAAA,mBAAmB,OAAA;AAGrB,gFAAgF;AAChF,yBAAyB;AACzB,gFAAgF;AAEhF,mDAW0B;AAVxB,qHAAA,mBAAmB,OAAA;AACnB,2HAAA,yBAAyB,OAAA;AAQzB,kHAAA,gBAAgB,OAAA;AAGlB,gFAAgF;AAChF,gCAAgC;AAChC,gFAAgF;AAEhF;;;;;;;;;;;;;;;GAeG;AACI,KAAK,UAAU,uBAAuB,CAC3C,MAAgC;IAEhC,MAAM,EAAE,iBAAiB,EAAE,GAAG,wDAAa,YAAY,GAAC,CAAC;IACzD,MAAM,EAAE,sBAAsB,EAAE,GAAG,wDAAa,aAAa,GAAC,CAAC;IAC/D,MAAM,EAAE,aAAa,EAAE,GAAG,wDAAa,cAAc,GAAC,CAAC;IACvD,MAAM,EAAE,mBAAmB,EAAE,GAAG,wDAAa,kBAAkB,GAAC,CAAC;IAEjE,MAAM,QAAQ,GAAG,IAAI,iBAAiB,EAAE,CAAC;IACzC,MAAM,SAAS,GAAG,IAAI,sBAAsB,CAAC,QAAQ,CAAC,CAAC;IACvD,MAAM,UAAU,GAAG,IAAI,aAAa,CAAC,QAAQ,EAAE,MAAM,EAAE,UAAU,CAAC,CAAC;IACnE,MAAM,OAAO,GAAG,IAAI,mBAAmB,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC;IAEnE,OAAO;QACL,QAAQ;QACR,SAAS;QACT,UAAU;QACV,OAAO;KACR,CAAC;AACJ,CAAC;AA0BD,gFAAgF;AAChF,iBAAiB;AACjB,gFAAgF;AAEhF;;GAEG;AACU,QAAA,OAAO,GAAG,OAAO,CAAC;AAE/B,gFAAgF;AAChF,iBAAiB;AACjB,gFAAgF;AAEhF;;GAEG;AACH,kBAAe,uBAAuB,CAAC"}
|
|
@@ -0,0 +1,323 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @wundr.io/mcp-registry - MCP Server Registry
|
|
3
|
+
*
|
|
4
|
+
* Core registry class for managing MCP server registrations,
|
|
5
|
+
* capability tracking, and server lifecycle management.
|
|
6
|
+
*
|
|
7
|
+
* @packageDocumentation
|
|
8
|
+
*/
|
|
9
|
+
import { EventEmitter } from 'eventemitter3';
|
|
10
|
+
import type { MCPServerRegistration, ServerRegistrationOptions, MCPCapability, ToolDefinition, ResourceDefinition, PromptDefinition, HealthStatus, HealthLevel, RegistryEvent, CapabilityCategory } from './types';
|
|
11
|
+
/**
|
|
12
|
+
* Error thrown when a server is not found in the registry
|
|
13
|
+
*/
|
|
14
|
+
export declare class ServerNotFoundError extends Error {
|
|
15
|
+
readonly serverId: string;
|
|
16
|
+
constructor(serverId: string, message?: string);
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
* Error thrown when a server is already registered
|
|
20
|
+
*/
|
|
21
|
+
export declare class ServerAlreadyExistsError extends Error {
|
|
22
|
+
readonly serverName: string;
|
|
23
|
+
constructor(serverName: string, message?: string);
|
|
24
|
+
}
|
|
25
|
+
/**
|
|
26
|
+
* Error thrown when registration validation fails
|
|
27
|
+
*/
|
|
28
|
+
export declare class RegistrationValidationError extends Error {
|
|
29
|
+
readonly validationErrors: readonly string[];
|
|
30
|
+
constructor(validationErrors: readonly string[], message?: string);
|
|
31
|
+
}
|
|
32
|
+
/**
|
|
33
|
+
* Event map for registry events
|
|
34
|
+
*/
|
|
35
|
+
export interface RegistryEvents {
|
|
36
|
+
'server:registered': (event: RegistryEvent) => void;
|
|
37
|
+
'server:unregistered': (event: RegistryEvent) => void;
|
|
38
|
+
'server:updated': (event: RegistryEvent) => void;
|
|
39
|
+
'server:connected': (event: RegistryEvent) => void;
|
|
40
|
+
'server:disconnected': (event: RegistryEvent) => void;
|
|
41
|
+
'server:health-changed': (event: RegistryEvent) => void;
|
|
42
|
+
'tool:added': (event: RegistryEvent) => void;
|
|
43
|
+
'tool:removed': (event: RegistryEvent) => void;
|
|
44
|
+
'capability:changed': (event: RegistryEvent) => void;
|
|
45
|
+
}
|
|
46
|
+
/**
|
|
47
|
+
* MCP Server Registry
|
|
48
|
+
*
|
|
49
|
+
* Manages registration, discovery, and lifecycle of MCP servers.
|
|
50
|
+
* Provides event-driven notifications for registry changes.
|
|
51
|
+
*
|
|
52
|
+
* @example
|
|
53
|
+
* ```typescript
|
|
54
|
+
* const registry = new MCPServerRegistry();
|
|
55
|
+
*
|
|
56
|
+
* // Register a server
|
|
57
|
+
* const server = await registry.register({
|
|
58
|
+
* name: 'my-mcp-server',
|
|
59
|
+
* version: '1.0.0',
|
|
60
|
+
* transport: { type: 'stdio', command: 'node', args: ['server.js'] },
|
|
61
|
+
* });
|
|
62
|
+
*
|
|
63
|
+
* // Listen for events
|
|
64
|
+
* registry.on('server:registered', (event) => {
|
|
65
|
+
* console.log('Server registered:', event.serverId);
|
|
66
|
+
* });
|
|
67
|
+
*
|
|
68
|
+
* // Find servers by capability
|
|
69
|
+
* const servers = registry.findByCapability('tools');
|
|
70
|
+
* ```
|
|
71
|
+
*/
|
|
72
|
+
export declare class MCPServerRegistry extends EventEmitter<RegistryEvents> {
|
|
73
|
+
/** Registered servers by ID */
|
|
74
|
+
private readonly servers;
|
|
75
|
+
/** Server name to ID mapping for uniqueness */
|
|
76
|
+
private readonly nameToId;
|
|
77
|
+
/** Tool name to server IDs mapping */
|
|
78
|
+
private readonly toolIndex;
|
|
79
|
+
/** Tag to server IDs mapping */
|
|
80
|
+
private readonly tagIndex;
|
|
81
|
+
/** Health status by server ID */
|
|
82
|
+
private readonly healthStatuses;
|
|
83
|
+
/**
|
|
84
|
+
* Creates a new MCPServerRegistry instance
|
|
85
|
+
*/
|
|
86
|
+
constructor();
|
|
87
|
+
/**
|
|
88
|
+
* Register a new MCP server
|
|
89
|
+
*
|
|
90
|
+
* @param options - Server registration options
|
|
91
|
+
* @returns The registered server
|
|
92
|
+
* @throws {ServerAlreadyExistsError} If server name is already registered
|
|
93
|
+
* @throws {RegistrationValidationError} If options are invalid
|
|
94
|
+
*/
|
|
95
|
+
register(options: ServerRegistrationOptions): Promise<MCPServerRegistration>;
|
|
96
|
+
/**
|
|
97
|
+
* Unregister an MCP server
|
|
98
|
+
*
|
|
99
|
+
* @param serverId - Server ID to unregister
|
|
100
|
+
* @throws {ServerNotFoundError} If server is not found
|
|
101
|
+
*/
|
|
102
|
+
unregister(serverId: string): Promise<void>;
|
|
103
|
+
/**
|
|
104
|
+
* Get a server by ID
|
|
105
|
+
*
|
|
106
|
+
* @param serverId - Server ID
|
|
107
|
+
* @returns The server registration or undefined
|
|
108
|
+
*/
|
|
109
|
+
get(serverId: string): MCPServerRegistration | undefined;
|
|
110
|
+
/**
|
|
111
|
+
* Get a server by name
|
|
112
|
+
*
|
|
113
|
+
* @param name - Server name
|
|
114
|
+
* @returns The server registration or undefined
|
|
115
|
+
*/
|
|
116
|
+
getByName(name: string): MCPServerRegistration | undefined;
|
|
117
|
+
/**
|
|
118
|
+
* Check if a server is registered
|
|
119
|
+
*
|
|
120
|
+
* @param serverId - Server ID
|
|
121
|
+
* @returns True if server is registered
|
|
122
|
+
*/
|
|
123
|
+
has(serverId: string): boolean;
|
|
124
|
+
/**
|
|
125
|
+
* Check if a server name is registered
|
|
126
|
+
*
|
|
127
|
+
* @param name - Server name
|
|
128
|
+
* @returns True if server name is registered
|
|
129
|
+
*/
|
|
130
|
+
hasName(name: string): boolean;
|
|
131
|
+
/**
|
|
132
|
+
* Get all registered servers
|
|
133
|
+
*
|
|
134
|
+
* @returns Array of all registered servers
|
|
135
|
+
*/
|
|
136
|
+
getAll(): readonly MCPServerRegistration[];
|
|
137
|
+
/**
|
|
138
|
+
* Get the number of registered servers
|
|
139
|
+
*
|
|
140
|
+
* @returns Server count
|
|
141
|
+
*/
|
|
142
|
+
get size(): number;
|
|
143
|
+
/**
|
|
144
|
+
* Update server capabilities
|
|
145
|
+
*
|
|
146
|
+
* @param serverId - Server ID
|
|
147
|
+
* @param capabilities - New capabilities
|
|
148
|
+
* @throws {ServerNotFoundError} If server is not found
|
|
149
|
+
*/
|
|
150
|
+
updateCapabilities(serverId: string, capabilities: readonly MCPCapability[]): Promise<MCPServerRegistration>;
|
|
151
|
+
/**
|
|
152
|
+
* Update server tools
|
|
153
|
+
*
|
|
154
|
+
* @param serverId - Server ID
|
|
155
|
+
* @param tools - New tools
|
|
156
|
+
* @throws {ServerNotFoundError} If server is not found
|
|
157
|
+
*/
|
|
158
|
+
updateTools(serverId: string, tools: readonly ToolDefinition[]): Promise<MCPServerRegistration>;
|
|
159
|
+
/**
|
|
160
|
+
* Update server resources
|
|
161
|
+
*
|
|
162
|
+
* @param serverId - Server ID
|
|
163
|
+
* @param resources - New resources
|
|
164
|
+
* @throws {ServerNotFoundError} If server is not found
|
|
165
|
+
*/
|
|
166
|
+
updateResources(serverId: string, resources: readonly ResourceDefinition[]): Promise<MCPServerRegistration>;
|
|
167
|
+
/**
|
|
168
|
+
* Update server prompts
|
|
169
|
+
*
|
|
170
|
+
* @param serverId - Server ID
|
|
171
|
+
* @param prompts - New prompts
|
|
172
|
+
* @throws {ServerNotFoundError} If server is not found
|
|
173
|
+
*/
|
|
174
|
+
updatePrompts(serverId: string, prompts: readonly PromptDefinition[]): Promise<MCPServerRegistration>;
|
|
175
|
+
/**
|
|
176
|
+
* Find servers by capability category
|
|
177
|
+
*
|
|
178
|
+
* @param category - Capability category
|
|
179
|
+
* @returns Matching servers
|
|
180
|
+
*/
|
|
181
|
+
findByCapability(category: CapabilityCategory): readonly MCPServerRegistration[];
|
|
182
|
+
/**
|
|
183
|
+
* Find servers that provide a specific tool
|
|
184
|
+
*
|
|
185
|
+
* @param toolName - Tool name
|
|
186
|
+
* @returns Matching servers
|
|
187
|
+
*/
|
|
188
|
+
findByTool(toolName: string): readonly MCPServerRegistration[];
|
|
189
|
+
/**
|
|
190
|
+
* Find servers by tag
|
|
191
|
+
*
|
|
192
|
+
* @param tag - Tag to search for
|
|
193
|
+
* @returns Matching servers
|
|
194
|
+
*/
|
|
195
|
+
findByTag(tag: string): readonly MCPServerRegistration[];
|
|
196
|
+
/**
|
|
197
|
+
* Find servers by health status
|
|
198
|
+
*
|
|
199
|
+
* @param status - Health status level
|
|
200
|
+
* @returns Matching servers
|
|
201
|
+
*/
|
|
202
|
+
findByHealthStatus(status: HealthLevel): readonly MCPServerRegistration[];
|
|
203
|
+
/**
|
|
204
|
+
* Get all available tool names across all servers
|
|
205
|
+
*
|
|
206
|
+
* @returns Set of tool names
|
|
207
|
+
*/
|
|
208
|
+
getAllToolNames(): ReadonlySet<string>;
|
|
209
|
+
/**
|
|
210
|
+
* Get all available tags across all servers
|
|
211
|
+
*
|
|
212
|
+
* @returns Set of tags
|
|
213
|
+
*/
|
|
214
|
+
getAllTags(): ReadonlySet<string>;
|
|
215
|
+
/**
|
|
216
|
+
* Get health status for a server
|
|
217
|
+
*
|
|
218
|
+
* @param serverId - Server ID
|
|
219
|
+
* @returns Health status or undefined
|
|
220
|
+
*/
|
|
221
|
+
getHealthStatus(serverId: string): HealthStatus | undefined;
|
|
222
|
+
/**
|
|
223
|
+
* Update health status for a server
|
|
224
|
+
*
|
|
225
|
+
* @param serverId - Server ID
|
|
226
|
+
* @param status - New health status
|
|
227
|
+
* @throws {ServerNotFoundError} If server is not found
|
|
228
|
+
*/
|
|
229
|
+
updateHealthStatus(serverId: string, status: Partial<HealthStatus>): void;
|
|
230
|
+
/**
|
|
231
|
+
* Get all healthy servers
|
|
232
|
+
*
|
|
233
|
+
* @returns Array of healthy servers
|
|
234
|
+
*/
|
|
235
|
+
getHealthyServers(): readonly MCPServerRegistration[];
|
|
236
|
+
/**
|
|
237
|
+
* Index a tool name to a server ID
|
|
238
|
+
*/
|
|
239
|
+
private indexTool;
|
|
240
|
+
/**
|
|
241
|
+
* Index a tag to a server ID
|
|
242
|
+
*/
|
|
243
|
+
private indexTag;
|
|
244
|
+
/**
|
|
245
|
+
* Create initial health status for a server
|
|
246
|
+
*/
|
|
247
|
+
private createInitialHealthStatus;
|
|
248
|
+
/**
|
|
249
|
+
* Emit a registry event
|
|
250
|
+
*/
|
|
251
|
+
private emitEvent;
|
|
252
|
+
/**
|
|
253
|
+
* Clear all registered servers
|
|
254
|
+
*/
|
|
255
|
+
clear(): void;
|
|
256
|
+
/**
|
|
257
|
+
* Get registry statistics
|
|
258
|
+
*
|
|
259
|
+
* @returns Registry statistics
|
|
260
|
+
*/
|
|
261
|
+
getStats(): RegistryStats;
|
|
262
|
+
/**
|
|
263
|
+
* Group servers by priority
|
|
264
|
+
*/
|
|
265
|
+
private groupByPriority;
|
|
266
|
+
/**
|
|
267
|
+
* Export registry data for persistence
|
|
268
|
+
*
|
|
269
|
+
* @returns Exportable registry data
|
|
270
|
+
*/
|
|
271
|
+
export(): RegistryExport;
|
|
272
|
+
/**
|
|
273
|
+
* Import registry data from persistence
|
|
274
|
+
*
|
|
275
|
+
* @param data - Registry data to import
|
|
276
|
+
*/
|
|
277
|
+
import(data: RegistryExport): Promise<void>;
|
|
278
|
+
}
|
|
279
|
+
/**
|
|
280
|
+
* Registry statistics
|
|
281
|
+
*/
|
|
282
|
+
export interface RegistryStats {
|
|
283
|
+
/** Total number of registered servers */
|
|
284
|
+
readonly totalServers: number;
|
|
285
|
+
/** Total number of unique tools */
|
|
286
|
+
readonly totalTools: number;
|
|
287
|
+
/** Total number of unique tags */
|
|
288
|
+
readonly totalTags: number;
|
|
289
|
+
/** Number of healthy servers */
|
|
290
|
+
readonly healthyServers: number;
|
|
291
|
+
/** Number of degraded servers */
|
|
292
|
+
readonly degradedServers: number;
|
|
293
|
+
/** Number of unhealthy servers */
|
|
294
|
+
readonly unhealthyServers: number;
|
|
295
|
+
/** Number of servers with unknown health */
|
|
296
|
+
readonly unknownServers: number;
|
|
297
|
+
/** Server count by priority */
|
|
298
|
+
readonly serversByPriority: Record<number, number>;
|
|
299
|
+
}
|
|
300
|
+
/**
|
|
301
|
+
* Registry export format
|
|
302
|
+
*/
|
|
303
|
+
export interface RegistryExport {
|
|
304
|
+
/** All registered servers */
|
|
305
|
+
readonly servers: readonly MCPServerRegistration[];
|
|
306
|
+
/** All health statuses */
|
|
307
|
+
readonly healthStatuses: readonly HealthStatus[];
|
|
308
|
+
/** Export timestamp */
|
|
309
|
+
readonly exportedAt: Date;
|
|
310
|
+
}
|
|
311
|
+
/**
|
|
312
|
+
* Create a new MCPServerRegistry instance
|
|
313
|
+
*
|
|
314
|
+
* @returns New registry instance
|
|
315
|
+
*
|
|
316
|
+
* @example
|
|
317
|
+
* ```typescript
|
|
318
|
+
* const registry = createMCPServerRegistry();
|
|
319
|
+
* await registry.register({ ... });
|
|
320
|
+
* ```
|
|
321
|
+
*/
|
|
322
|
+
export declare function createMCPServerRegistry(): MCPServerRegistry;
|
|
323
|
+
//# sourceMappingURL=registry.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"registry.d.ts","sourceRoot":"","sources":["../src/registry.ts"],"names":[],"mappings":"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"}
|