@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.
@@ -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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"}