@monoes/mcp 1.0.6 → 2.24.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.
Files changed (53) hide show
  1. package/dist/protocol-types.d.ts +182 -0
  2. package/dist/protocol-types.d.ts.map +1 -0
  3. package/dist/protocol-types.js +8 -0
  4. package/dist/protocol-types.js.map +1 -0
  5. package/dist/resource-helpers.d.ts +32 -0
  6. package/dist/resource-helpers.d.ts.map +1 -0
  7. package/dist/resource-helpers.js +77 -0
  8. package/dist/resource-helpers.js.map +1 -0
  9. package/dist/resource-registry.d.ts +2 -24
  10. package/dist/resource-registry.d.ts.map +1 -1
  11. package/dist/resource-registry.js +1 -70
  12. package/dist/resource-registry.js.map +1 -1
  13. package/dist/server-builtins.d.ts +12 -0
  14. package/dist/server-builtins.d.ts.map +1 -0
  15. package/dist/server-builtins.js +165 -0
  16. package/dist/server-builtins.js.map +1 -0
  17. package/dist/server-core.d.ts +118 -0
  18. package/dist/server-core.d.ts.map +1 -0
  19. package/dist/server-core.js +343 -0
  20. package/dist/server-core.js.map +1 -0
  21. package/dist/server-handlers.d.ts +17 -0
  22. package/dist/server-handlers.d.ts.map +1 -0
  23. package/dist/server-handlers.js +173 -0
  24. package/dist/server-handlers.js.map +1 -0
  25. package/dist/server-routing.d.ts +16 -0
  26. package/dist/server-routing.d.ts.map +1 -0
  27. package/dist/server-routing.js +194 -0
  28. package/dist/server-routing.js.map +1 -0
  29. package/dist/server.d.ts +2 -115
  30. package/dist/server.d.ts.map +1 -1
  31. package/dist/server.js +2 -839
  32. package/dist/server.js.map +1 -1
  33. package/dist/transport/http-base.d.ts +84 -0
  34. package/dist/transport/http-base.d.ts.map +1 -0
  35. package/dist/transport/http-base.js +238 -0
  36. package/dist/transport/http-base.js.map +1 -0
  37. package/dist/transport/http.d.ts +5 -69
  38. package/dist/transport/http.d.ts.map +1 -1
  39. package/dist/transport/http.js +3 -228
  40. package/dist/transport/http.js.map +1 -1
  41. package/dist/transport/websocket-base.d.ts +71 -0
  42. package/dist/transport/websocket-base.d.ts.map +1 -0
  43. package/dist/transport/websocket-base.js +199 -0
  44. package/dist/transport/websocket-base.js.map +1 -0
  45. package/dist/transport/websocket.d.ts +4 -63
  46. package/dist/transport/websocket.d.ts.map +1 -1
  47. package/dist/transport/websocket.js +3 -191
  48. package/dist/transport/websocket.js.map +1 -1
  49. package/dist/types.d.ts +1 -174
  50. package/dist/types.d.ts.map +1 -1
  51. package/dist/types.js +5 -0
  52. package/dist/types.js.map +1 -1
  53. package/package.json +1 -1
@@ -0,0 +1,17 @@
1
+ /**
2
+ * @monoes/mcp - MCP Server (tool, resource and prompt handlers)
3
+ */
4
+ import { MCPServerBuiltins } from './server-builtins.js';
5
+ import type { MCPRequest, MCPResponse } from './types.js';
6
+ export declare abstract class MCPServerHandlers extends MCPServerBuiltins {
7
+ protected handleToolsList(request: MCPRequest): MCPResponse;
8
+ protected handleToolsCall(request: MCPRequest, connectionId?: string): Promise<MCPResponse>;
9
+ protected handleToolExecution(request: MCPRequest, connectionId?: string): Promise<MCPResponse>;
10
+ protected handleResourcesList(request: MCPRequest): MCPResponse;
11
+ protected handleResourcesRead(request: MCPRequest): Promise<MCPResponse>;
12
+ protected handleResourcesSubscribe(request: MCPRequest, connectionId?: string): MCPResponse;
13
+ protected handleResourcesUnsubscribe(request: MCPRequest, connectionId?: string): MCPResponse;
14
+ protected handlePromptsList(request: MCPRequest): MCPResponse;
15
+ protected handlePromptsGet(request: MCPRequest): Promise<MCPResponse>;
16
+ }
17
+ //# sourceMappingURL=server-handlers.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"server-handlers.d.ts","sourceRoot":"","sources":["../src/server-handlers.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AACzD,OAAO,KAAK,EAAE,UAAU,EAAE,WAAW,EAAe,MAAM,YAAY,CAAC;AAGvE,8BAAsB,iBAAkB,SAAQ,iBAAiB;IAC/D,SAAS,CAAC,eAAe,CAAC,OAAO,EAAE,UAAU,GAAG,WAAW,CAY1D;IAED,UAAgB,eAAe,CAC7B,OAAO,EAAE,UAAU,EACnB,YAAY,CAAC,EAAE,MAAM,GACpB,OAAO,CAAC,WAAW,CAAC,CAyBtB;IAED,UAAgB,mBAAmB,CACjC,OAAO,EAAE,UAAU,EACnB,YAAY,CAAC,EAAE,MAAM,GACpB,OAAO,CAAC,WAAW,CAAC,CAmBtB;IAMD,SAAS,CAAC,mBAAmB,CAAC,OAAO,EAAE,UAAU,GAAG,WAAW,CAS9D;IAED,UAAgB,mBAAmB,CAAC,OAAO,EAAE,UAAU,GAAG,OAAO,CAAC,WAAW,CAAC,CAyB7E;IAED,SAAS,CAAC,wBAAwB,CAAC,OAAO,EAAE,UAAU,EAAE,YAAY,CAAC,EAAE,MAAM,GAAG,WAAW,CAsD1F;IAED,SAAS,CAAC,0BAA0B,CAAC,OAAO,EAAE,UAAU,EAAE,YAAY,CAAC,EAAE,MAAM,GAAG,WAAW,CAgC5F;IAMD,SAAS,CAAC,iBAAiB,CAAC,OAAO,EAAE,UAAU,GAAG,WAAW,CAS5D;IAED,UAAgB,gBAAgB,CAAC,OAAO,EAAE,UAAU,GAAG,OAAO,CAAC,WAAW,CAAC,CA2B1E;CACF"}
@@ -0,0 +1,173 @@
1
+ /**
2
+ * @monoes/mcp - MCP Server (tool, resource and prompt handlers)
3
+ */
4
+ import { MCPServerBuiltins } from './server-builtins.js';
5
+ import { ErrorCodes } from './types.js';
6
+ export class MCPServerHandlers extends MCPServerBuiltins {
7
+ handleToolsList(request) {
8
+ const tools = this.toolRegistry.listTools().map((t) => ({
9
+ name: t.name,
10
+ description: t.description,
11
+ inputSchema: this.toolRegistry.getTool(t.name)?.inputSchema,
12
+ }));
13
+ return {
14
+ jsonrpc: '2.0',
15
+ id: request.id,
16
+ result: { tools },
17
+ };
18
+ }
19
+ async handleToolsCall(request, connectionId) {
20
+ const params = request.params;
21
+ if (!params?.name) {
22
+ return this.createErrorResponse(request.id, ErrorCodes.INVALID_PARAMS, 'Tool name is required');
23
+ }
24
+ const context = {
25
+ sessionId: this.getSessionForConnection(connectionId)?.id || 'unknown',
26
+ requestId: request.id,
27
+ orchestrator: this.orchestrator,
28
+ swarmCoordinator: this.swarmCoordinator,
29
+ };
30
+ const result = await this.toolRegistry.execute(params.name, params.arguments || {}, context);
31
+ return {
32
+ jsonrpc: '2.0',
33
+ id: request.id,
34
+ result,
35
+ };
36
+ }
37
+ async handleToolExecution(request, connectionId) {
38
+ const context = {
39
+ sessionId: this.getSessionForConnection(connectionId)?.id || 'unknown',
40
+ requestId: request.id,
41
+ orchestrator: this.orchestrator,
42
+ swarmCoordinator: this.swarmCoordinator,
43
+ };
44
+ const result = await this.toolRegistry.execute(request.method, request.params || {}, context);
45
+ return {
46
+ jsonrpc: '2.0',
47
+ id: request.id,
48
+ result,
49
+ };
50
+ }
51
+ // ============================================================================
52
+ // Resource Handlers (MCP 2025-11-25)
53
+ // ============================================================================
54
+ handleResourcesList(request) {
55
+ const params = request.params;
56
+ const result = this.resourceRegistry.list(params?.cursor);
57
+ return {
58
+ jsonrpc: '2.0',
59
+ id: request.id,
60
+ result,
61
+ };
62
+ }
63
+ async handleResourcesRead(request) {
64
+ const params = request.params;
65
+ if (!params?.uri) {
66
+ return this.createErrorResponse(request.id, ErrorCodes.INVALID_PARAMS, 'Resource URI is required');
67
+ }
68
+ try {
69
+ const result = await this.resourceRegistry.read(params.uri);
70
+ return {
71
+ jsonrpc: '2.0',
72
+ id: request.id,
73
+ result,
74
+ };
75
+ }
76
+ catch (error) {
77
+ return this.createErrorResponse(request.id, ErrorCodes.INVALID_PARAMS, error instanceof Error ? error.message : 'Resource read failed');
78
+ }
79
+ }
80
+ handleResourcesSubscribe(request, connectionId) {
81
+ const params = request.params;
82
+ const sessionId = this.getSessionForConnection(connectionId)?.id;
83
+ if (!params?.uri) {
84
+ return this.createErrorResponse(request.id, ErrorCodes.INVALID_PARAMS, 'Resource URI is required');
85
+ }
86
+ if (!sessionId) {
87
+ return this.createErrorResponse(request.id, ErrorCodes.SERVER_NOT_INITIALIZED, 'No active session');
88
+ }
89
+ try {
90
+ // Track subscription for this session
91
+ let sessionSubs = this.resourceSubscriptions.get(sessionId);
92
+ if (!sessionSubs) {
93
+ sessionSubs = new Map();
94
+ this.resourceSubscriptions.set(sessionId, sessionSubs);
95
+ }
96
+ // Re-subscribing the same URI replaces the previous subscription —
97
+ // otherwise the old callback would keep firing with no way to reach it.
98
+ const existingId = sessionSubs.get(params.uri);
99
+ if (existingId) {
100
+ this.resourceRegistry.unsubscribe(existingId);
101
+ }
102
+ const subscriptionId = this.resourceRegistry.subscribe(params.uri, (uri, _content) => {
103
+ // Send notification when resource updates
104
+ this.sendNotification('notifications/resources/updated', { uri });
105
+ });
106
+ sessionSubs.set(params.uri, subscriptionId);
107
+ return {
108
+ jsonrpc: '2.0',
109
+ id: request.id,
110
+ result: { subscriptionId },
111
+ };
112
+ }
113
+ catch (error) {
114
+ return this.createErrorResponse(request.id, ErrorCodes.INTERNAL_ERROR, error instanceof Error ? error.message : 'Subscription failed');
115
+ }
116
+ }
117
+ handleResourcesUnsubscribe(request, connectionId) {
118
+ const params = request.params;
119
+ const sessionId = this.getSessionForConnection(connectionId)?.id;
120
+ if (!params?.uri) {
121
+ return this.createErrorResponse(request.id, ErrorCodes.INVALID_PARAMS, 'Resource URI is required');
122
+ }
123
+ if (sessionId) {
124
+ const sessionSubs = this.resourceSubscriptions.get(sessionId);
125
+ const subscriptionId = sessionSubs?.get(params.uri);
126
+ if (sessionSubs && subscriptionId) {
127
+ // Actually detach the registry callback — just forgetting the URI
128
+ // locally left the callback live, producing phantom notifications
129
+ // (issue #92).
130
+ this.resourceRegistry.unsubscribe(subscriptionId);
131
+ sessionSubs.delete(params.uri);
132
+ if (sessionSubs.size === 0) {
133
+ this.resourceSubscriptions.delete(sessionId);
134
+ }
135
+ }
136
+ }
137
+ return {
138
+ jsonrpc: '2.0',
139
+ id: request.id,
140
+ result: { success: true },
141
+ };
142
+ }
143
+ // ============================================================================
144
+ // Prompt Handlers (MCP 2025-11-25)
145
+ // ============================================================================
146
+ handlePromptsList(request) {
147
+ const params = request.params;
148
+ const result = this.promptRegistry.list(params?.cursor);
149
+ return {
150
+ jsonrpc: '2.0',
151
+ id: request.id,
152
+ result,
153
+ };
154
+ }
155
+ async handlePromptsGet(request) {
156
+ const params = request.params;
157
+ if (!params?.name) {
158
+ return this.createErrorResponse(request.id, ErrorCodes.INVALID_PARAMS, 'Prompt name is required');
159
+ }
160
+ try {
161
+ const result = await this.promptRegistry.get(params.name, params.arguments);
162
+ return {
163
+ jsonrpc: '2.0',
164
+ id: request.id,
165
+ result,
166
+ };
167
+ }
168
+ catch (error) {
169
+ return this.createErrorResponse(request.id, ErrorCodes.INVALID_PARAMS, error instanceof Error ? error.message : 'Prompt get failed');
170
+ }
171
+ }
172
+ }
173
+ //# sourceMappingURL=server-handlers.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"server-handlers.js","sourceRoot":"","sources":["../src/server-handlers.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,16 @@
1
+ /**
2
+ * @monoes/mcp - MCP Server (request routing)
3
+ *
4
+ * Method dispatch plus the task, completion, logging and sampling handlers.
5
+ */
6
+ import { MCPServerHandlers } from './server-handlers.js';
7
+ import type { MCPRequest, MCPResponse } from './types.js';
8
+ export declare abstract class MCPServerRouting extends MCPServerHandlers {
9
+ protected routeRequest(request: MCPRequest, connectionId?: string): Promise<MCPResponse>;
10
+ private handleTasksStatus;
11
+ private handleTasksCancel;
12
+ private handleCompletion;
13
+ private handleLoggingSetLevel;
14
+ private handleSamplingCreateMessage;
15
+ }
16
+ //# sourceMappingURL=server-routing.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"server-routing.d.ts","sourceRoot":"","sources":["../src/server-routing.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AACzD,OAAO,KAAK,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAG1D,8BAAsB,gBAAiB,SAAQ,iBAAiB;IAC9D,UAAgB,YAAY,CAAC,OAAO,EAAE,UAAU,EAAE,YAAY,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC,CA8D7F;IAMD,OAAO,CAAC,iBAAiB;IA2BzB,OAAO,CAAC,iBAAiB;IAoBzB,OAAO,CAAC,gBAAgB;IAwDxB,OAAO,CAAC,qBAAqB;YA2Bf,2BAA2B;CA0E1C"}
@@ -0,0 +1,194 @@
1
+ /**
2
+ * @monoes/mcp - MCP Server (request routing)
3
+ *
4
+ * Method dispatch plus the task, completion, logging and sampling handlers.
5
+ */
6
+ import { MCPServerHandlers } from './server-handlers.js';
7
+ import { ErrorCodes } from './types.js';
8
+ export class MCPServerRouting extends MCPServerHandlers {
9
+ async routeRequest(request, connectionId) {
10
+ switch (request.method) {
11
+ // Tool methods
12
+ case 'tools/list':
13
+ return this.handleToolsList(request);
14
+ case 'tools/call':
15
+ return this.handleToolsCall(request, connectionId);
16
+ // Resource methods (MCP 2025-11-25)
17
+ case 'resources/list':
18
+ return this.handleResourcesList(request);
19
+ case 'resources/read':
20
+ return this.handleResourcesRead(request);
21
+ case 'resources/subscribe':
22
+ return this.handleResourcesSubscribe(request, connectionId);
23
+ case 'resources/unsubscribe':
24
+ return this.handleResourcesUnsubscribe(request, connectionId);
25
+ // Prompt methods (MCP 2025-11-25)
26
+ case 'prompts/list':
27
+ return this.handlePromptsList(request);
28
+ case 'prompts/get':
29
+ return this.handlePromptsGet(request);
30
+ // Task methods (MCP 2025-11-25)
31
+ case 'tasks/status':
32
+ return this.handleTasksStatus(request);
33
+ case 'tasks/cancel':
34
+ return this.handleTasksCancel(request);
35
+ // Completion (MCP 2025-11-25)
36
+ case 'completion/complete':
37
+ return this.handleCompletion(request);
38
+ // Logging (MCP 2025-11-25)
39
+ case 'logging/setLevel':
40
+ return this.handleLoggingSetLevel(request);
41
+ // Sampling (MCP 2025-11-25)
42
+ case 'sampling/createMessage':
43
+ return this.handleSamplingCreateMessage(request, connectionId);
44
+ // Utility
45
+ case 'ping':
46
+ return {
47
+ jsonrpc: '2.0',
48
+ id: request.id,
49
+ result: { pong: true, timestamp: Date.now() },
50
+ };
51
+ default:
52
+ // Check if it's a direct tool call
53
+ if (this.toolRegistry.hasTool(request.method)) {
54
+ return this.handleToolExecution(request, connectionId);
55
+ }
56
+ return this.createErrorResponse(request.id, ErrorCodes.METHOD_NOT_FOUND, `Method not found: ${request.method}`);
57
+ }
58
+ }
59
+ // ============================================================================
60
+ // Task Handlers (MCP 2025-11-25)
61
+ // ============================================================================
62
+ handleTasksStatus(request) {
63
+ const params = request.params;
64
+ if (params?.taskId) {
65
+ const task = this.taskManager.getTask(params.taskId);
66
+ if (!task) {
67
+ return this.createErrorResponse(request.id, ErrorCodes.INVALID_PARAMS, `Task not found: ${params.taskId}`);
68
+ }
69
+ return {
70
+ jsonrpc: '2.0',
71
+ id: request.id,
72
+ result: task,
73
+ };
74
+ }
75
+ // Return all tasks
76
+ return {
77
+ jsonrpc: '2.0',
78
+ id: request.id,
79
+ result: { tasks: this.taskManager.getAllTasks() },
80
+ };
81
+ }
82
+ handleTasksCancel(request) {
83
+ const params = request.params;
84
+ if (!params?.taskId) {
85
+ return this.createErrorResponse(request.id, ErrorCodes.INVALID_PARAMS, 'Task ID is required');
86
+ }
87
+ const success = this.taskManager.cancelTask(params.taskId, params.reason);
88
+ return {
89
+ jsonrpc: '2.0',
90
+ id: request.id,
91
+ result: { success },
92
+ };
93
+ }
94
+ // ============================================================================
95
+ // Completion Handler (MCP 2025-11-25)
96
+ // ============================================================================
97
+ handleCompletion(request) {
98
+ const params = request.params;
99
+ if (!params?.ref || !params?.argument) {
100
+ return this.createErrorResponse(request.id, ErrorCodes.INVALID_PARAMS, 'Completion reference and argument are required');
101
+ }
102
+ // Basic completion implementation - can be extended
103
+ const completions = [];
104
+ if (params.ref.type === 'ref/prompt') {
105
+ // Get prompt argument completions
106
+ const prompt = this.promptRegistry.getPrompt(params.ref.name || '');
107
+ if (prompt?.arguments) {
108
+ for (const arg of prompt.arguments) {
109
+ if (arg.name === params.argument.name) {
110
+ // Could add domain-specific completions here
111
+ }
112
+ }
113
+ }
114
+ }
115
+ else if (params.ref.type === 'ref/resource') {
116
+ // Get resource URI completions
117
+ const { resources } = this.resourceRegistry.list();
118
+ for (const resource of resources) {
119
+ if (resource.uri.startsWith(params.argument.value)) {
120
+ completions.push(resource.uri);
121
+ }
122
+ }
123
+ }
124
+ return {
125
+ jsonrpc: '2.0',
126
+ id: request.id,
127
+ result: {
128
+ completion: {
129
+ values: completions.slice(0, 10),
130
+ total: completions.length,
131
+ hasMore: completions.length > 10,
132
+ },
133
+ },
134
+ };
135
+ }
136
+ // ============================================================================
137
+ // Logging Handler (MCP 2025-11-25)
138
+ // ============================================================================
139
+ handleLoggingSetLevel(request) {
140
+ const params = request.params;
141
+ if (!params?.level) {
142
+ return this.createErrorResponse(request.id, ErrorCodes.INVALID_PARAMS, 'Log level is required');
143
+ }
144
+ // Update capabilities
145
+ this.capabilities.logging = { level: params.level };
146
+ this.logger.info('Log level updated', { level: params.level });
147
+ return {
148
+ jsonrpc: '2.0',
149
+ id: request.id,
150
+ result: { success: true },
151
+ };
152
+ }
153
+ // ============================================================================
154
+ // Sampling Handler (MCP 2025-11-25)
155
+ // ============================================================================
156
+ async handleSamplingCreateMessage(request, connectionId) {
157
+ const params = request.params;
158
+ if (!params?.messages || !params?.maxTokens) {
159
+ return this.createErrorResponse(request.id, ErrorCodes.INVALID_PARAMS, 'messages and maxTokens are required');
160
+ }
161
+ // Check if sampling is available
162
+ const available = await this.samplingManager.isAvailable();
163
+ if (!available) {
164
+ return this.createErrorResponse(request.id, ErrorCodes.INTERNAL_ERROR, 'No LLM provider available for sampling');
165
+ }
166
+ try {
167
+ const result = await this.samplingManager.createMessage({
168
+ messages: params.messages.map((m) => ({
169
+ role: m.role,
170
+ content: m.content,
171
+ })),
172
+ maxTokens: params.maxTokens,
173
+ systemPrompt: params.systemPrompt,
174
+ modelPreferences: params.modelPreferences,
175
+ includeContext: params.includeContext,
176
+ temperature: params.temperature,
177
+ stopSequences: params.stopSequences,
178
+ metadata: params.metadata,
179
+ }, {
180
+ sessionId: this.getSessionForConnection(connectionId)?.id || 'unknown',
181
+ serverId: this.serverInfo.name,
182
+ });
183
+ return {
184
+ jsonrpc: '2.0',
185
+ id: request.id,
186
+ result,
187
+ };
188
+ }
189
+ catch (error) {
190
+ return this.createErrorResponse(request.id, ErrorCodes.INTERNAL_ERROR, error instanceof Error ? error.message : 'Sampling failed');
191
+ }
192
+ }
193
+ }
194
+ //# sourceMappingURL=server-routing.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"server-routing.js","sourceRoot":"","sources":["../src/server-routing.ts"],"names":[],"mappings":"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"}
package/dist/server.d.ts CHANGED
@@ -3,12 +3,7 @@
3
3
  *
4
4
  * High-performance MCP server implementation
5
5
  */
6
- import { EventEmitter } from 'node:events';
7
- import { type PromptRegistry } from './prompt-registry.js';
8
- import { type RateLimiter } from './rate-limiter.js';
9
- import { type ResourceRegistry } from './resource-registry.js';
10
- import { type LLMProvider, type SamplingManager } from './sampling.js';
11
- import { type TaskManager } from './task-manager.js';
6
+ import { MCPServerRouting } from './server-routing.js';
12
7
  import type { ILogger, MCPServerConfig, MCPServerMetrics, MCPSession, MCPTool } from './types.js';
13
8
  export interface IMCPServer {
14
9
  start(): Promise<void>;
@@ -28,121 +23,13 @@ export interface IMCPServer {
28
23
  getSession(sessionId: string): MCPSession | undefined;
29
24
  terminateSession(sessionId: string): boolean;
30
25
  }
31
- export declare class MCPServer extends EventEmitter implements IMCPServer {
32
- private readonly logger;
33
- private readonly orchestrator?;
34
- private readonly swarmCoordinator?;
35
- private readonly config;
36
- private readonly toolRegistry;
37
- private readonly sessionManager;
38
- private readonly resourceRegistry;
39
- private readonly promptRegistry;
40
- private readonly taskManager;
41
- private readonly connectionPool?;
42
- private readonly rateLimiter;
43
- private readonly samplingManager;
44
- private transport?;
45
- private running;
46
- private startTime?;
47
- private startupDuration?;
48
- private currentSession?;
49
- private readonly connectionSessions;
50
- private resourceSubscriptions;
51
- private readonly serverInfo;
52
- private readonly protocolVersion;
53
- private capabilities;
54
- private requestStats;
55
- constructor(config: Partial<MCPServerConfig>, logger: ILogger, orchestrator?: unknown, swarmCoordinator?: unknown);
56
- /**
57
- * Get resource registry for external registration
58
- */
59
- getResourceRegistry(): ResourceRegistry;
60
- /**
61
- * Get prompt registry for external registration
62
- */
63
- getPromptRegistry(): PromptRegistry;
64
- /**
65
- * Get task manager for async operations
66
- */
67
- getTaskManager(): TaskManager;
68
- /**
69
- * Get rate limiter for configuration
70
- */
71
- getRateLimiter(): RateLimiter;
72
- /**
73
- * Get sampling manager for LLM provider registration
74
- */
75
- getSamplingManager(): SamplingManager;
76
- /**
77
- * Register an LLM provider for sampling
78
- */
79
- registerLLMProvider(provider: LLMProvider, isDefault?: boolean): void;
26
+ export declare class MCPServer extends MCPServerRouting implements IMCPServer {
80
27
  start(): Promise<void>;
81
28
  stop(): Promise<void>;
82
- registerTool(tool: MCPTool): boolean;
83
- registerTools(tools: MCPTool[]): {
84
- registered: number;
85
- failed: string[];
86
- };
87
- unregisterTool(name: string): boolean;
88
- getHealthStatus(): Promise<{
89
- healthy: boolean;
90
- error?: string;
91
- metrics?: Record<string, number>;
92
- }>;
93
- getMetrics(): MCPServerMetrics;
94
- getSessions(): MCPSession[];
95
- getSession(sessionId: string): MCPSession | undefined;
96
29
  terminateSession(sessionId: string): boolean;
97
- /**
98
- * Resolve the session bound to a connection without creating one.
99
- * Multi-client transports (http, websocket) pass a `connectionId`, which is
100
- * looked up in `connectionSessions`. Single-client transports (stdio,
101
- * in-process) omit it, falling back to the `currentSession` singleton.
102
- */
103
- private getSessionForConnection;
104
- /**
105
- * Bind a newly-created session to a connection: per-connectionId when the
106
- * transport supports multiple clients, otherwise the singleton fallback.
107
- */
108
- private bindSessionToConnection;
109
- /**
110
- * Tear down the session owned by a connection when the transport reports
111
- * that connection has closed — prevents closed clients' sessions (and any
112
- * resource subscriptions) from lingering until the idle-timeout sweep.
113
- */
114
- private closeConnectionSession;
115
- /**
116
- * Detach every registry subscription owned by a session. Called whenever a
117
- * session ends (terminated, connection closed, expired, server stopped) so
118
- * no update callback outlives its session (issue #92).
119
- */
120
- private purgeSessionSubscriptions;
121
30
  private handleRequest;
122
31
  private handleNotification;
123
32
  private handleInitialize;
124
- private routeRequest;
125
- private handleToolsList;
126
- private handleToolsCall;
127
- private handleToolExecution;
128
- private handleResourcesList;
129
- private handleResourcesRead;
130
- private handleResourcesSubscribe;
131
- private handleResourcesUnsubscribe;
132
- private handlePromptsList;
133
- private handlePromptsGet;
134
- private handleTasksStatus;
135
- private handleTasksCancel;
136
- private handleCompletion;
137
- private handleLoggingSetLevel;
138
- private handleSamplingCreateMessage;
139
- private sendNotification;
140
- private getOrCreateSession;
141
- private createErrorResponse;
142
- private registerBuiltInTools;
143
- private registerBuiltInResources;
144
- private registerBuiltInPrompts;
145
- private setupEventHandlers;
146
33
  }
147
34
  export declare function createMCPServer(config: Partial<MCPServerConfig>, logger: ILogger, orchestrator?: unknown, swarmCoordinator?: unknown): MCPServer;
148
35
  //# sourceMappingURL=server.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AAEvD,OAAO,KAAK,EACV,OAAO,EAMP,eAAe,EACf,gBAAgB,EAChB,UAAU,EACV,OAAO,EACR,MAAM,YAAY,CAAC;AAGpB,MAAM,WAAW,UAAU;IACzB,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IACvB,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IACtB,YAAY,CAAC,IAAI,EAAE,OAAO,GAAG,OAAO,CAAC;IACrC,aAAa,CAAC,KAAK,EAAE,OAAO,EAAE,GAAG;QAAE,UAAU,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,EAAE,CAAA;KAAE,CAAC;IAC1E,eAAe,IAAI,OAAO,CAAC;QACzB,OAAO,EAAE,OAAO,CAAC;QACjB,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;KAClC,CAAC,CAAC;IACH,UAAU,IAAI,gBAAgB,CAAC;IAC/B,WAAW,IAAI,UAAU,EAAE,CAAC;IAC5B,UAAU,CAAC,SAAS,EAAE,MAAM,GAAG,UAAU,GAAG,SAAS,CAAC;IACtD,gBAAgB,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC;CAC9C;AAED,qBAAa,SAAU,SAAQ,gBAAiB,YAAW,UAAU;IAC7D,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CA+D3B;IAEK,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC,CAwC1B;IAED,gBAAgB,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAW3C;YAEa,aAAa;YA6Eb,kBAAkB;YAoBlB,gBAAgB;CA6B/B;AAED,wBAAgB,eAAe,CAC7B,MAAM,EAAE,OAAO,CAAC,eAAe,CAAC,EAChC,MAAM,EAAE,OAAO,EACf,YAAY,CAAC,EAAE,OAAO,EACtB,gBAAgB,CAAC,EAAE,OAAO,GACzB,SAAS,CAEX"}