@monoes/mcp 1.0.4 → 1.0.7
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 +1 -1
- package/dist/protocol-types.d.ts +182 -0
- package/dist/protocol-types.d.ts.map +1 -0
- package/dist/protocol-types.js +8 -0
- package/dist/protocol-types.js.map +1 -0
- package/dist/resource-helpers.d.ts +32 -0
- package/dist/resource-helpers.d.ts.map +1 -0
- package/dist/resource-helpers.js +77 -0
- package/dist/resource-helpers.js.map +1 -0
- package/dist/resource-registry.d.ts +2 -24
- package/dist/resource-registry.d.ts.map +1 -1
- package/dist/resource-registry.js +1 -70
- package/dist/resource-registry.js.map +1 -1
- package/dist/server-builtins.d.ts +12 -0
- package/dist/server-builtins.d.ts.map +1 -0
- package/dist/server-builtins.js +165 -0
- package/dist/server-builtins.js.map +1 -0
- package/dist/server-core.d.ts +118 -0
- package/dist/server-core.d.ts.map +1 -0
- package/dist/server-core.js +343 -0
- package/dist/server-core.js.map +1 -0
- package/dist/server-handlers.d.ts +17 -0
- package/dist/server-handlers.d.ts.map +1 -0
- package/dist/server-handlers.js +173 -0
- package/dist/server-handlers.js.map +1 -0
- package/dist/server-routing.d.ts +16 -0
- package/dist/server-routing.d.ts.map +1 -0
- package/dist/server-routing.js +194 -0
- package/dist/server-routing.js.map +1 -0
- package/dist/server.d.ts +2 -115
- package/dist/server.d.ts.map +1 -1
- package/dist/server.js +2 -839
- package/dist/server.js.map +1 -1
- package/dist/transport/http-base.d.ts +84 -0
- package/dist/transport/http-base.d.ts.map +1 -0
- package/dist/transport/http-base.js +238 -0
- package/dist/transport/http-base.js.map +1 -0
- package/dist/transport/http.d.ts +5 -69
- package/dist/transport/http.d.ts.map +1 -1
- package/dist/transport/http.js +3 -228
- package/dist/transport/http.js.map +1 -1
- package/dist/transport/websocket-base.d.ts +71 -0
- package/dist/transport/websocket-base.d.ts.map +1 -0
- package/dist/transport/websocket-base.js +199 -0
- package/dist/transport/websocket-base.js.map +1 -0
- package/dist/transport/websocket.d.ts +4 -63
- package/dist/transport/websocket.d.ts.map +1 -1
- package/dist/transport/websocket.js +3 -191
- package/dist/transport/websocket.js.map +1 -1
- package/dist/types.d.ts +1 -174
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js +5 -0
- package/dist/types.js.map +1 -1
- package/package.json +4 -4
|
@@ -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":"AAAA;;GAEG;AAEH,OAAO,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AAEzD,OAAO,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAExC,MAAM,OAAgB,iBAAkB,SAAQ,iBAAiB;IACrD,eAAe,CAAC,OAAmB;QAC3C,MAAM,KAAK,GAAG,IAAI,CAAC,YAAY,CAAC,SAAS,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;YACtD,IAAI,EAAE,CAAC,CAAC,IAAI;YACZ,WAAW,EAAE,CAAC,CAAC,WAAW;YAC1B,WAAW,EAAE,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,WAAW;SAC5D,CAAC,CAAC,CAAC;QAEJ,OAAO;YACL,OAAO,EAAE,KAAK;YACd,EAAE,EAAE,OAAO,CAAC,EAAE;YACd,MAAM,EAAE,EAAE,KAAK,EAAE;SAClB,CAAC;IACJ,CAAC;IAES,KAAK,CAAC,eAAe,CAC7B,OAAmB,EACnB,YAAqB;QAErB,MAAM,MAAM,GAAG,OAAO,CAAC,MAA+D,CAAC;QAEvF,IAAI,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC;YAClB,OAAO,IAAI,CAAC,mBAAmB,CAC7B,OAAO,CAAC,EAAE,EACV,UAAU,CAAC,cAAc,EACzB,uBAAuB,CACxB,CAAC;QACJ,CAAC;QAED,MAAM,OAAO,GAAgB;YAC3B,SAAS,EAAE,IAAI,CAAC,uBAAuB,CAAC,YAAY,CAAC,EAAE,EAAE,IAAI,SAAS;YACtE,SAAS,EAAE,OAAO,CAAC,EAAE;YACrB,YAAY,EAAE,IAAI,CAAC,YAAY;YAC/B,gBAAgB,EAAE,IAAI,CAAC,gBAAgB;SACxC,CAAC;QAEF,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,EAAE,MAAM,CAAC,SAAS,IAAI,EAAE,EAAE,OAAO,CAAC,CAAC;QAE7F,OAAO;YACL,OAAO,EAAE,KAAK;YACd,EAAE,EAAE,OAAO,CAAC,EAAE;YACd,MAAM;SACP,CAAC;IACJ,CAAC;IAES,KAAK,CAAC,mBAAmB,CACjC,OAAmB,EACnB,YAAqB;QAErB,MAAM,OAAO,GAAgB;YAC3B,SAAS,EAAE,IAAI,CAAC,uBAAuB,CAAC,YAAY,CAAC,EAAE,EAAE,IAAI,SAAS;YACtE,SAAS,EAAE,OAAO,CAAC,EAAE;YACrB,YAAY,EAAE,IAAI,CAAC,YAAY;YAC/B,gBAAgB,EAAE,IAAI,CAAC,gBAAgB;SACxC,CAAC;QAEF,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,YAAY,CAAC,OAAO,CAC5C,OAAO,CAAC,MAAM,EACb,OAAO,CAAC,MAAkC,IAAI,EAAE,EACjD,OAAO,CACR,CAAC;QAEF,OAAO;YACL,OAAO,EAAE,KAAK;YACd,EAAE,EAAE,OAAO,CAAC,EAAE;YACd,MAAM;SACP,CAAC;IACJ,CAAC;IAED,+EAA+E;IAC/E,qCAAqC;IACrC,+EAA+E;IAErE,mBAAmB,CAAC,OAAmB;QAC/C,MAAM,MAAM,GAAG,OAAO,CAAC,MAAyC,CAAC;QACjE,MAAM,MAAM,GAAG,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;QAE1D,OAAO;YACL,OAAO,EAAE,KAAK;YACd,EAAE,EAAE,OAAO,CAAC,EAAE;YACd,MAAM;SACP,CAAC;IACJ,CAAC;IAES,KAAK,CAAC,mBAAmB,CAAC,OAAmB;QACrD,MAAM,MAAM,GAAG,OAAO,CAAC,MAAqC,CAAC;QAE7D,IAAI,CAAC,MAAM,EAAE,GAAG,EAAE,CAAC;YACjB,OAAO,IAAI,CAAC,mBAAmB,CAC7B,OAAO,CAAC,EAAE,EACV,UAAU,CAAC,cAAc,EACzB,0BAA0B,CAC3B,CAAC;QACJ,CAAC;QAED,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;YAC5D,OAAO;gBACL,OAAO,EAAE,KAAK;gBACd,EAAE,EAAE,OAAO,CAAC,EAAE;gBACd,MAAM;aACP,CAAC;QACJ,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,IAAI,CAAC,mBAAmB,CAC7B,OAAO,CAAC,EAAE,EACV,UAAU,CAAC,cAAc,EACzB,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,sBAAsB,CAChE,CAAC;QACJ,CAAC;IACH,CAAC;IAES,wBAAwB,CAAC,OAAmB,EAAE,YAAqB;QAC3E,MAAM,MAAM,GAAG,OAAO,CAAC,MAAqC,CAAC;QAC7D,MAAM,SAAS,GAAG,IAAI,CAAC,uBAAuB,CAAC,YAAY,CAAC,EAAE,EAAE,CAAC;QAEjE,IAAI,CAAC,MAAM,EAAE,GAAG,EAAE,CAAC;YACjB,OAAO,IAAI,CAAC,mBAAmB,CAC7B,OAAO,CAAC,EAAE,EACV,UAAU,CAAC,cAAc,EACzB,0BAA0B,CAC3B,CAAC;QACJ,CAAC;QAED,IAAI,CAAC,SAAS,EAAE,CAAC;YACf,OAAO,IAAI,CAAC,mBAAmB,CAC7B,OAAO,CAAC,EAAE,EACV,UAAU,CAAC,sBAAsB,EACjC,mBAAmB,CACpB,CAAC;QACJ,CAAC;QAED,IAAI,CAAC;YACH,sCAAsC;YACtC,IAAI,WAAW,GAAG,IAAI,CAAC,qBAAqB,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;YAC5D,IAAI,CAAC,WAAW,EAAE,CAAC;gBACjB,WAAW,GAAG,IAAI,GAAG,EAAE,CAAC;gBACxB,IAAI,CAAC,qBAAqB,CAAC,GAAG,CAAC,SAAS,EAAE,WAAW,CAAC,CAAC;YACzD,CAAC;YAED,mEAAmE;YACnE,wEAAwE;YACxE,MAAM,UAAU,GAAG,WAAW,CAAC,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;YAC/C,IAAI,UAAU,EAAE,CAAC;gBACf,IAAI,CAAC,gBAAgB,CAAC,WAAW,CAAC,UAAU,CAAC,CAAC;YAChD,CAAC;YAED,MAAM,cAAc,GAAG,IAAI,CAAC,gBAAgB,CAAC,SAAS,CAAC,MAAM,CAAC,GAAG,EAAE,CAAC,GAAG,EAAE,QAAQ,EAAE,EAAE;gBACnF,0CAA0C;gBAC1C,IAAI,CAAC,gBAAgB,CAAC,iCAAiC,EAAE,EAAE,GAAG,EAAE,CAAC,CAAC;YACpE,CAAC,CAAC,CAAC;YAEH,WAAW,CAAC,GAAG,CAAC,MAAM,CAAC,GAAG,EAAE,cAAc,CAAC,CAAC;YAE5C,OAAO;gBACL,OAAO,EAAE,KAAK;gBACd,EAAE,EAAE,OAAO,CAAC,EAAE;gBACd,MAAM,EAAE,EAAE,cAAc,EAAE;aAC3B,CAAC;QACJ,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,IAAI,CAAC,mBAAmB,CAC7B,OAAO,CAAC,EAAE,EACV,UAAU,CAAC,cAAc,EACzB,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,qBAAqB,CAC/D,CAAC;QACJ,CAAC;IACH,CAAC;IAES,0BAA0B,CAAC,OAAmB,EAAE,YAAqB;QAC7E,MAAM,MAAM,GAAG,OAAO,CAAC,MAAqC,CAAC;QAC7D,MAAM,SAAS,GAAG,IAAI,CAAC,uBAAuB,CAAC,YAAY,CAAC,EAAE,EAAE,CAAC;QAEjE,IAAI,CAAC,MAAM,EAAE,GAAG,EAAE,CAAC;YACjB,OAAO,IAAI,CAAC,mBAAmB,CAC7B,OAAO,CAAC,EAAE,EACV,UAAU,CAAC,cAAc,EACzB,0BAA0B,CAC3B,CAAC;QACJ,CAAC;QAED,IAAI,SAAS,EAAE,CAAC;YACd,MAAM,WAAW,GAAG,IAAI,CAAC,qBAAqB,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;YAC9D,MAAM,cAAc,GAAG,WAAW,EAAE,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;YACpD,IAAI,WAAW,IAAI,cAAc,EAAE,CAAC;gBAClC,kEAAkE;gBAClE,kEAAkE;gBAClE,eAAe;gBACf,IAAI,CAAC,gBAAgB,CAAC,WAAW,CAAC,cAAc,CAAC,CAAC;gBAClD,WAAW,CAAC,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;gBAC/B,IAAI,WAAW,CAAC,IAAI,KAAK,CAAC,EAAE,CAAC;oBAC3B,IAAI,CAAC,qBAAqB,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;gBAC/C,CAAC;YACH,CAAC;QACH,CAAC;QAED,OAAO;YACL,OAAO,EAAE,KAAK;YACd,EAAE,EAAE,OAAO,CAAC,EAAE;YACd,MAAM,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE;SAC1B,CAAC;IACJ,CAAC;IAED,+EAA+E;IAC/E,mCAAmC;IACnC,+EAA+E;IAErE,iBAAiB,CAAC,OAAmB;QAC7C,MAAM,MAAM,GAAG,OAAO,CAAC,MAAyC,CAAC;QACjE,MAAM,MAAM,GAAG,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;QAExD,OAAO;YACL,OAAO,EAAE,KAAK;YACd,EAAE,EAAE,OAAO,CAAC,EAAE;YACd,MAAM;SACP,CAAC;IACJ,CAAC;IAES,KAAK,CAAC,gBAAgB,CAAC,OAAmB;QAClD,MAAM,MAAM,GAAG,OAAO,CAAC,MAEV,CAAC;QAEd,IAAI,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC;YAClB,OAAO,IAAI,CAAC,mBAAmB,CAC7B,OAAO,CAAC,EAAE,EACV,UAAU,CAAC,cAAc,EACzB,yBAAyB,CAC1B,CAAC;QACJ,CAAC;QAED,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,EAAE,MAAM,CAAC,SAAS,CAAC,CAAC;YAC5E,OAAO;gBACL,OAAO,EAAE,KAAK;gBACd,EAAE,EAAE,OAAO,CAAC,EAAE;gBACd,MAAM;aACP,CAAC;QACJ,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,IAAI,CAAC,mBAAmB,CAC7B,OAAO,CAAC,EAAE,EACV,UAAU,CAAC,cAAc,EACzB,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,mBAAmB,CAC7D,CAAC;QACJ,CAAC;IACH,CAAC;CACF"}
|
|
@@ -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 {
|
|
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
|
|
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
|
package/dist/server.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,
|
|
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"}
|