@1mcp/agent 0.10.3 → 0.12.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.
- package/README.md +41 -17
- package/build/auth/authManager.d.ts +109 -0
- package/build/auth/authManager.d.ts.map +1 -0
- package/build/auth/authManager.js +173 -0
- package/build/auth/authManager.js.map +1 -0
- package/build/auth/authMiddleware.d.ts +16 -0
- package/build/auth/authMiddleware.d.ts.map +1 -0
- package/build/auth/authMiddleware.js +45 -0
- package/build/auth/authMiddleware.js.map +1 -0
- package/build/auth/sessionManager.d.ts +197 -0
- package/build/auth/sessionManager.d.ts.map +1 -0
- package/build/auth/sessionManager.js +408 -0
- package/build/auth/sessionManager.js.map +1 -0
- package/build/capabilities/capabilityManager.d.ts +1 -1
- package/build/capabilities/capabilityManager.d.ts.map +1 -1
- package/build/capabilities/capabilityManager.js +39 -6
- package/build/capabilities/capabilityManager.js.map +1 -1
- package/build/config/configManager.d.ts +7 -1
- package/build/config/configManager.d.ts.map +1 -1
- package/build/config/configManager.js +24 -2
- package/build/config/configManager.js.map +1 -1
- package/build/constants.d.ts +25 -1
- package/build/constants.d.ts.map +1 -1
- package/build/constants.js +31 -2
- package/build/constants.js.map +1 -1
- package/build/{client.d.ts → core/client/clientFactory.d.ts} +1 -1
- package/build/core/client/clientFactory.d.ts.map +1 -0
- package/build/{client.js → core/client/clientFactory.js} +2 -2
- package/build/core/client/clientFactory.js.map +1 -0
- package/build/{clients → core/client}/clientManager.d.ts +3 -2
- package/build/core/client/clientManager.d.ts.map +1 -0
- package/build/{clients → core/client}/clientManager.js +10 -6
- package/build/core/client/clientManager.js.map +1 -0
- package/build/core/server/serverConfig.d.ts +100 -0
- package/build/core/server/serverConfig.d.ts.map +1 -0
- package/build/core/server/serverConfig.js +117 -0
- package/build/core/server/serverConfig.js.map +1 -0
- package/build/{serverManager.d.ts → core/server/serverManager.d.ts} +7 -2
- package/build/core/server/serverManager.d.ts.map +1 -0
- package/build/core/server/serverManager.js +159 -0
- package/build/core/server/serverManager.js.map +1 -0
- package/build/core/types/client.d.ts +38 -0
- package/build/core/types/client.d.ts.map +1 -0
- package/build/core/types/client.js +13 -0
- package/build/core/types/client.js.map +1 -0
- package/build/core/types/index.d.ts +4 -0
- package/build/core/types/index.d.ts.map +1 -0
- package/build/core/types/index.js +5 -0
- package/build/core/types/index.js.map +1 -0
- package/build/core/types/server.d.ts +14 -0
- package/build/core/types/server.d.ts.map +1 -0
- package/build/core/types/server.js +2 -0
- package/build/core/types/server.js.map +1 -0
- package/build/{types.d.ts → core/types/transport.d.ts} +1 -48
- package/build/core/types/transport.d.ts.map +1 -0
- package/build/{types.js → core/types/transport.js} +1 -13
- package/build/core/types/transport.js.map +1 -0
- package/build/handlers/notificationHandlers.d.ts +1 -1
- package/build/handlers/notificationHandlers.d.ts.map +1 -1
- package/build/handlers/notificationHandlers.js +41 -15
- package/build/handlers/notificationHandlers.js.map +1 -1
- package/build/handlers/requestHandlers.d.ts +1 -1
- package/build/handlers/requestHandlers.d.ts.map +1 -1
- package/build/handlers/requestHandlers.js +65 -2
- package/build/handlers/requestHandlers.js.map +1 -1
- package/build/index.d.ts +1 -1
- package/build/index.d.ts.map +1 -1
- package/build/index.js +44 -5
- package/build/index.js.map +1 -1
- package/build/logger/logger.js +1 -1
- package/build/logger/logger.js.map +1 -1
- package/build/server.d.ts +1 -1
- package/build/server.d.ts.map +1 -1
- package/build/server.js +6 -3
- package/build/server.js.map +1 -1
- package/build/services/configReloadService.d.ts +15 -5
- package/build/services/configReloadService.d.ts.map +1 -1
- package/build/services/configReloadService.js +28 -11
- package/build/services/configReloadService.js.map +1 -1
- package/build/{config/transportConfig.d.ts → transport/config.d.ts} +2 -2
- package/build/transport/config.d.ts.map +1 -0
- package/build/{config/transportConfig.js → transport/config.js} +2 -2
- package/build/transport/config.js.map +1 -0
- package/build/transport/http/errorHandler.d.ts.map +1 -0
- package/build/{server → transport/http}/errorHandler.js +1 -1
- package/build/transport/http/errorHandler.js.map +1 -0
- package/build/transport/http/middleware/loggingMiddleware.d.ts.map +1 -0
- package/build/{middleware → transport/http/middleware}/loggingMiddleware.js +11 -7
- package/build/transport/http/middleware/loggingMiddleware.js.map +1 -0
- package/build/transport/http/routes/oauthRoutes.d.ts +14 -0
- package/build/transport/http/routes/oauthRoutes.d.ts.map +1 -0
- package/build/transport/http/routes/oauthRoutes.js +132 -0
- package/build/transport/http/routes/oauthRoutes.js.map +1 -0
- package/build/transport/http/routes/sseRoutes.d.ts +4 -0
- package/build/transport/http/routes/sseRoutes.d.ts.map +1 -0
- package/build/transport/http/routes/sseRoutes.js +64 -0
- package/build/transport/http/routes/sseRoutes.js.map +1 -0
- package/build/transport/http/routes/streamableHttpRoutes.d.ts +4 -0
- package/build/transport/http/routes/streamableHttpRoutes.d.ts.map +1 -0
- package/build/transport/http/routes/streamableHttpRoutes.js +121 -0
- package/build/transport/http/routes/streamableHttpRoutes.js.map +1 -0
- package/build/transport/http/server.d.ts +69 -0
- package/build/transport/http/server.d.ts.map +1 -0
- package/build/transport/http/server.js +115 -0
- package/build/transport/http/server.js.map +1 -0
- package/build/utils/clientFiltering.d.ts +1 -1
- package/build/utils/clientFiltering.d.ts.map +1 -1
- package/build/utils/errorHandling.d.ts +1 -0
- package/build/utils/errorHandling.d.ts.map +1 -1
- package/build/utils/errorHandling.js +29 -5
- package/build/utils/errorHandling.js.map +1 -1
- package/build/utils/errorTypes.d.ts +4 -1
- package/build/utils/errorTypes.d.ts.map +1 -1
- package/build/utils/errorTypes.js +12 -4
- package/build/utils/errorTypes.js.map +1 -1
- package/build/utils/pagination.d.ts +1 -1
- package/build/utils/pagination.d.ts.map +1 -1
- package/build/utils/pagination.js +84 -5
- package/build/utils/pagination.js.map +1 -1
- package/build/utils/tagsExtractor.d.ts.map +1 -0
- package/build/utils/tagsExtractor.js.map +1 -0
- package/package.json +14 -5
- package/build/client.d.ts.map +0 -1
- package/build/client.js.map +0 -1
- package/build/clients/clientManager.d.ts.map +0 -1
- package/build/clients/clientManager.js.map +0 -1
- package/build/config/transportConfig.d.ts.map +0 -1
- package/build/config/transportConfig.js.map +0 -1
- package/build/middleware/loggingMiddleware.d.ts.map +0 -1
- package/build/middleware/loggingMiddleware.js.map +0 -1
- package/build/server/errorHandler.d.ts.map +0 -1
- package/build/server/errorHandler.js.map +0 -1
- package/build/server/expressServer.d.ts +0 -11
- package/build/server/expressServer.d.ts.map +0 -1
- package/build/server/expressServer.js +0 -177
- package/build/server/expressServer.js.map +0 -1
- package/build/server/tagsExtractor.d.ts.map +0 -1
- package/build/server/tagsExtractor.js.map +0 -1
- package/build/serverManager.d.ts.map +0 -1
- package/build/serverManager.js +0 -87
- package/build/serverManager.js.map +0 -1
- package/build/types.d.ts.map +0 -1
- package/build/types.js.map +0 -1
- /package/build/{server → transport/http}/errorHandler.d.ts +0 -0
- /package/build/{middleware → transport/http/middleware}/loggingMiddleware.d.ts +0 -0
- /package/build/{server → utils}/tagsExtractor.d.ts +0 -0
- /package/build/{server → utils}/tagsExtractor.js +0 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"serverManager.d.ts","sourceRoot":"","sources":["../../../src/core/server/serverManager.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,SAAS,EAAE,MAAM,+CAA+C,CAAC;AAK1E,OAAO,EAAE,OAAO,EAAE,UAAU,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AAEzE,qBAAa,aAAa;IACxB,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAgB;IACvC,OAAO,CAAC,OAAO,CAAsC;IACrD,OAAO,CAAC,YAAY,CAAoC;IACxD,OAAO,CAAC,kBAAkB,CAA4C;IAEtE,OAAO,CAAC,OAAO,CAAe;IAC9B,OAAO,CAAC,UAAU,CAAiC;IACnD,OAAO,CAAC,mBAAmB,CAAyC;IACpE,OAAO,CAAC,gBAAgB,CAA0B;IAElD,OAAO;WAYO,mBAAmB,CAC/B,MAAM,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,EACzC,YAAY,EAAE;QAAE,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;KAAE,EACvD,OAAO,EAAE,OAAO,EAChB,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,GACpC,aAAa;IAOhB,WAAkB,OAAO,IAAI,aAAa,CAEzC;WAGa,aAAa,IAAI,IAAI;IAatB,gBAAgB,CAAC,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,EAAE,IAAI,EAAE,eAAe,GAAG,OAAO,CAAC,IAAI,CAAC;YA2B9F,iBAAiB;YAoBjB,SAAS;IA4BhB,mBAAmB,CAAC,SAAS,EAAE,MAAM,EAAE,UAAU,GAAE,OAAe,GAAG,IAAI;IA8BzE,YAAY,CAAC,SAAS,EAAE,MAAM,GAAG,SAAS,GAAG,SAAS;IAItD,aAAa,IAAI,GAAG,CAAC,MAAM,EAAE,SAAS,CAAC;IAUvC,mBAAmB,IAAI,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC;IAIhD,wBAAwB,IAAI,MAAM;IAIlC,SAAS,CAAC,SAAS,EAAE,MAAM,GAAG,UAAU,GAAG,SAAS;IAIpD,0BAA0B,CAAC,UAAU,EAAE,OAAO,EAAE,aAAa,EAAE,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,GAAG,IAAI;CAIvG"}
|
|
@@ -0,0 +1,159 @@
|
|
|
1
|
+
import { Server } from '@modelcontextprotocol/sdk/server/index.js';
|
|
2
|
+
import logger from '../../logger/logger.js';
|
|
3
|
+
import configReloadService from '../../services/configReloadService.js';
|
|
4
|
+
import { setupCapabilities } from '../../capabilities/capabilityManager.js';
|
|
5
|
+
import { enhanceServerWithLogging } from '../../transport/http/middleware/loggingMiddleware.js';
|
|
6
|
+
export class ServerManager {
|
|
7
|
+
static instance;
|
|
8
|
+
servers = new Map();
|
|
9
|
+
serverConfig;
|
|
10
|
+
serverCapabilities;
|
|
11
|
+
clients = {};
|
|
12
|
+
transports = {};
|
|
13
|
+
connectionSemaphore = new Map();
|
|
14
|
+
disconnectingIds = new Set();
|
|
15
|
+
constructor(config, capabilities, clients, transports) {
|
|
16
|
+
this.serverConfig = config;
|
|
17
|
+
this.serverCapabilities = capabilities;
|
|
18
|
+
this.clients = clients;
|
|
19
|
+
this.transports = transports;
|
|
20
|
+
}
|
|
21
|
+
static getOrCreateInstance(config, capabilities, clients, transports) {
|
|
22
|
+
if (!ServerManager.instance) {
|
|
23
|
+
ServerManager.instance = new ServerManager(config, capabilities, clients, transports);
|
|
24
|
+
}
|
|
25
|
+
return ServerManager.instance;
|
|
26
|
+
}
|
|
27
|
+
static get current() {
|
|
28
|
+
return ServerManager.instance;
|
|
29
|
+
}
|
|
30
|
+
// Test utility method to reset singleton state
|
|
31
|
+
static resetInstance() {
|
|
32
|
+
if (ServerManager.instance) {
|
|
33
|
+
// Clean up existing connections with forced close
|
|
34
|
+
for (const [sessionId] of ServerManager.instance.servers) {
|
|
35
|
+
ServerManager.instance.disconnectTransport(sessionId, true);
|
|
36
|
+
}
|
|
37
|
+
ServerManager.instance.servers.clear();
|
|
38
|
+
ServerManager.instance.connectionSemaphore.clear();
|
|
39
|
+
ServerManager.instance.disconnectingIds.clear();
|
|
40
|
+
}
|
|
41
|
+
ServerManager.instance = undefined;
|
|
42
|
+
}
|
|
43
|
+
async connectTransport(transport, sessionId, opts) {
|
|
44
|
+
// Check if a connection is already in progress for this session
|
|
45
|
+
const existingConnection = this.connectionSemaphore.get(sessionId);
|
|
46
|
+
if (existingConnection) {
|
|
47
|
+
logger.warn(`Connection already in progress for session ${sessionId}, waiting...`);
|
|
48
|
+
await existingConnection;
|
|
49
|
+
return;
|
|
50
|
+
}
|
|
51
|
+
// Check if transport is already connected
|
|
52
|
+
if (this.servers.has(sessionId)) {
|
|
53
|
+
logger.warn(`Transport already connected for session ${sessionId}`);
|
|
54
|
+
return;
|
|
55
|
+
}
|
|
56
|
+
// Create connection promise to prevent race conditions
|
|
57
|
+
const connectionPromise = this.performConnection(transport, sessionId, opts);
|
|
58
|
+
this.connectionSemaphore.set(sessionId, connectionPromise);
|
|
59
|
+
try {
|
|
60
|
+
await connectionPromise;
|
|
61
|
+
}
|
|
62
|
+
finally {
|
|
63
|
+
// Clean up the semaphore entry
|
|
64
|
+
this.connectionSemaphore.delete(sessionId);
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
async performConnection(transport, sessionId, opts) {
|
|
68
|
+
// Set connection timeout
|
|
69
|
+
const connectionTimeoutMs = 30000; // 30 seconds
|
|
70
|
+
const timeoutPromise = new Promise((_, reject) => {
|
|
71
|
+
setTimeout(() => reject(new Error(`Connection timeout for session ${sessionId}`)), connectionTimeoutMs);
|
|
72
|
+
});
|
|
73
|
+
try {
|
|
74
|
+
await Promise.race([this.doConnect(transport, sessionId, opts), timeoutPromise]);
|
|
75
|
+
}
|
|
76
|
+
catch (error) {
|
|
77
|
+
// Clean up partial connection on failure
|
|
78
|
+
if (this.servers.has(sessionId)) {
|
|
79
|
+
this.servers.delete(sessionId);
|
|
80
|
+
}
|
|
81
|
+
logger.error(`Failed to connect transport for session ${sessionId}:`, error);
|
|
82
|
+
throw error;
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
async doConnect(transport, sessionId, opts) {
|
|
86
|
+
// Create a new server instance for this transport
|
|
87
|
+
const server = new Server(this.serverConfig, this.serverCapabilities);
|
|
88
|
+
// Create server info object first
|
|
89
|
+
const serverInfo = {
|
|
90
|
+
server,
|
|
91
|
+
...opts,
|
|
92
|
+
};
|
|
93
|
+
// Enhance server with logging middleware
|
|
94
|
+
enhanceServerWithLogging(server);
|
|
95
|
+
// Set up capabilities for this server instance
|
|
96
|
+
await setupCapabilities(this.clients, serverInfo);
|
|
97
|
+
// Update the configuration reload service with server info
|
|
98
|
+
configReloadService.updateServerInfo(sessionId, serverInfo);
|
|
99
|
+
// Store the server instance
|
|
100
|
+
this.servers.set(sessionId, serverInfo);
|
|
101
|
+
// Connect the transport to the new server instance
|
|
102
|
+
await server.connect(transport);
|
|
103
|
+
logger.info(`Connected transport for session ${sessionId}`);
|
|
104
|
+
}
|
|
105
|
+
disconnectTransport(sessionId, forceClose = false) {
|
|
106
|
+
// Prevent recursive disconnection calls
|
|
107
|
+
if (this.disconnectingIds.has(sessionId)) {
|
|
108
|
+
return;
|
|
109
|
+
}
|
|
110
|
+
const server = this.servers.get(sessionId);
|
|
111
|
+
if (server) {
|
|
112
|
+
this.disconnectingIds.add(sessionId);
|
|
113
|
+
try {
|
|
114
|
+
// Only close the transport if explicitly requested (e.g., during shutdown)
|
|
115
|
+
// Don't close if this is called from an onclose handler to avoid recursion
|
|
116
|
+
if (forceClose && server.server.transport) {
|
|
117
|
+
try {
|
|
118
|
+
server.server.transport.close();
|
|
119
|
+
}
|
|
120
|
+
catch (error) {
|
|
121
|
+
logger.error(`Error closing transport for session ${sessionId}:`, error);
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
this.servers.delete(sessionId);
|
|
125
|
+
configReloadService.removeServerInfo(sessionId);
|
|
126
|
+
logger.info(`Disconnected transport for session ${sessionId}`);
|
|
127
|
+
}
|
|
128
|
+
finally {
|
|
129
|
+
this.disconnectingIds.delete(sessionId);
|
|
130
|
+
}
|
|
131
|
+
}
|
|
132
|
+
}
|
|
133
|
+
getTransport(sessionId) {
|
|
134
|
+
return this.servers.get(sessionId)?.server.transport;
|
|
135
|
+
}
|
|
136
|
+
getTransports() {
|
|
137
|
+
const transports = new Map();
|
|
138
|
+
for (const [id, server] of this.servers.entries()) {
|
|
139
|
+
if (server.server.transport) {
|
|
140
|
+
transports.set(id, server.server.transport);
|
|
141
|
+
}
|
|
142
|
+
}
|
|
143
|
+
return transports;
|
|
144
|
+
}
|
|
145
|
+
getClientTransports() {
|
|
146
|
+
return this.transports;
|
|
147
|
+
}
|
|
148
|
+
getActiveTransportsCount() {
|
|
149
|
+
return this.servers.size;
|
|
150
|
+
}
|
|
151
|
+
getServer(sessionId) {
|
|
152
|
+
return this.servers.get(sessionId);
|
|
153
|
+
}
|
|
154
|
+
updateClientsAndTransports(newClients, newTransports) {
|
|
155
|
+
this.clients = newClients;
|
|
156
|
+
this.transports = newTransports;
|
|
157
|
+
}
|
|
158
|
+
}
|
|
159
|
+
//# sourceMappingURL=serverManager.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"serverManager.js","sourceRoot":"","sources":["../../../src/core/server/serverManager.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
import { Client } from '@modelcontextprotocol/sdk/client/index.js';
|
|
2
|
+
import { ServerCapabilities } from '@modelcontextprotocol/sdk/types.js';
|
|
3
|
+
import { EnhancedTransport } from './transport.js';
|
|
4
|
+
/**
|
|
5
|
+
* Enum representing possible client connection states
|
|
6
|
+
*/
|
|
7
|
+
export declare enum ClientStatus {
|
|
8
|
+
/** Client is successfully connected */
|
|
9
|
+
Connected = "connected",
|
|
10
|
+
/** Client is disconnected */
|
|
11
|
+
Disconnected = "disconnected",
|
|
12
|
+
/** Client encountered an error */
|
|
13
|
+
Error = "error"
|
|
14
|
+
}
|
|
15
|
+
/**
|
|
16
|
+
* Complete client information including transport, status and history
|
|
17
|
+
*/
|
|
18
|
+
export interface ClientInfo {
|
|
19
|
+
readonly name: string;
|
|
20
|
+
readonly transport: EnhancedTransport;
|
|
21
|
+
readonly client: Client;
|
|
22
|
+
readonly lastError?: Error;
|
|
23
|
+
readonly lastConnected?: Date;
|
|
24
|
+
status: ClientStatus;
|
|
25
|
+
capabilities?: ServerCapabilities;
|
|
26
|
+
}
|
|
27
|
+
/**
|
|
28
|
+
* Map of client information indexed by client name
|
|
29
|
+
*/
|
|
30
|
+
export type Clients = Record<string, ClientInfo>;
|
|
31
|
+
/**
|
|
32
|
+
* Options for client operations
|
|
33
|
+
*/
|
|
34
|
+
export interface OperationOptions {
|
|
35
|
+
readonly retryCount?: number;
|
|
36
|
+
readonly retryDelay?: number;
|
|
37
|
+
}
|
|
38
|
+
//# sourceMappingURL=client.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../../src/core/types/client.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,2CAA2C,CAAC;AACnE,OAAO,EAAE,kBAAkB,EAAE,MAAM,oCAAoC,CAAC;AACxE,OAAO,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAC;AAEnD;;GAEG;AACH,oBAAY,YAAY;IACtB,uCAAuC;IACvC,SAAS,cAAc;IACvB,6BAA6B;IAC7B,YAAY,iBAAiB;IAC7B,kCAAkC;IAClC,KAAK,UAAU;CAChB;AAED;;GAEG;AACH,MAAM,WAAW,UAAU;IACzB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,SAAS,EAAE,iBAAiB,CAAC;IACtC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,SAAS,CAAC,EAAE,KAAK,CAAC;IAC3B,QAAQ,CAAC,aAAa,CAAC,EAAE,IAAI,CAAC;IAC9B,MAAM,EAAE,YAAY,CAAC;IACrB,YAAY,CAAC,EAAE,kBAAkB,CAAC;CACnC;AAED;;GAEG;AACH,MAAM,MAAM,OAAO,GAAG,MAAM,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;AAEjD;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC;CAC9B"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Enum representing possible client connection states
|
|
3
|
+
*/
|
|
4
|
+
export var ClientStatus;
|
|
5
|
+
(function (ClientStatus) {
|
|
6
|
+
/** Client is successfully connected */
|
|
7
|
+
ClientStatus["Connected"] = "connected";
|
|
8
|
+
/** Client is disconnected */
|
|
9
|
+
ClientStatus["Disconnected"] = "disconnected";
|
|
10
|
+
/** Client encountered an error */
|
|
11
|
+
ClientStatus["Error"] = "error";
|
|
12
|
+
})(ClientStatus || (ClientStatus = {}));
|
|
13
|
+
//# sourceMappingURL=client.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"client.js","sourceRoot":"","sources":["../../../src/core/types/client.ts"],"names":[],"mappings":"AAIA;;GAEG;AACH,MAAM,CAAN,IAAY,YAOX;AAPD,WAAY,YAAY;IACtB,uCAAuC;IACvC,uCAAuB,CAAA;IACvB,6BAA6B;IAC7B,6CAA6B,CAAA;IAC7B,kCAAkC;IAClC,+BAAe,CAAA;AACjB,CAAC,EAPW,YAAY,KAAZ,YAAY,QAOvB"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/core/types/index.ts"],"names":[],"mappings":"AACA,cAAc,gBAAgB,CAAC;AAC/B,cAAc,aAAa,CAAC;AAC5B,cAAc,aAAa,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/core/types/index.ts"],"names":[],"mappings":"AAAA,2CAA2C;AAC3C,cAAc,gBAAgB,CAAC;AAC/B,cAAc,aAAa,CAAC;AAC5B,cAAc,aAAa,CAAC"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { Server } from '@modelcontextprotocol/sdk/server/index.js';
|
|
2
|
+
import { ServerCapabilities } from '@modelcontextprotocol/sdk/types.js';
|
|
3
|
+
export interface ServerInfoExtra {
|
|
4
|
+
readonly tags?: string[];
|
|
5
|
+
readonly enablePagination?: boolean;
|
|
6
|
+
}
|
|
7
|
+
/**
|
|
8
|
+
* Server information including tags
|
|
9
|
+
*/
|
|
10
|
+
export interface ServerInfo extends ServerInfoExtra {
|
|
11
|
+
readonly server: Server;
|
|
12
|
+
}
|
|
13
|
+
export type ServerCapability = keyof ServerCapabilities;
|
|
14
|
+
//# sourceMappingURL=server.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../../../src/core/types/server.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,2CAA2C,CAAC;AACnE,OAAO,EAAE,kBAAkB,EAAE,MAAM,oCAAoC,CAAC;AAExE,MAAM,WAAW,eAAe;IAC9B,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;IACzB,QAAQ,CAAC,gBAAgB,CAAC,EAAE,OAAO,CAAC;CACrC;AAED;;GAEG;AACH,MAAM,WAAW,UAAW,SAAQ,eAAe;IACjD,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;CACzB;AAED,MAAM,MAAM,gBAAgB,GAAG,MAAM,kBAAkB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"server.js","sourceRoot":"","sources":["../../../src/core/types/server.ts"],"names":[],"mappings":""}
|
|
@@ -1,8 +1,5 @@
|
|
|
1
1
|
import { z } from 'zod';
|
|
2
|
-
import { Server } from '@modelcontextprotocol/sdk/server/index.js';
|
|
3
|
-
import { Client } from '@modelcontextprotocol/sdk/client/index.js';
|
|
4
2
|
import { Transport } from '@modelcontextprotocol/sdk/shared/transport.js';
|
|
5
|
-
import { ServerCapabilities } from '@modelcontextprotocol/sdk/types.js';
|
|
6
3
|
/**
|
|
7
4
|
* Enhanced transport interface that includes MCP-specific properties
|
|
8
5
|
*/
|
|
@@ -85,48 +82,4 @@ export type TransportConfig = HTTPBasedTransportConfig | StdioTransportConfig;
|
|
|
85
82
|
* Type for MCP server parameters derived from transport config schema
|
|
86
83
|
*/
|
|
87
84
|
export type MCPServerParams = z.infer<typeof transportConfigSchema>;
|
|
88
|
-
|
|
89
|
-
readonly tags?: string[];
|
|
90
|
-
readonly enablePagination?: boolean;
|
|
91
|
-
}
|
|
92
|
-
/**
|
|
93
|
-
* Server information including tags
|
|
94
|
-
*/
|
|
95
|
-
export interface ServerInfo extends ServerInfoExtra {
|
|
96
|
-
readonly server: Server;
|
|
97
|
-
}
|
|
98
|
-
/**
|
|
99
|
-
* Enum representing possible client connection states
|
|
100
|
-
*/
|
|
101
|
-
export declare enum ClientStatus {
|
|
102
|
-
/** Client is successfully connected */
|
|
103
|
-
Connected = "connected",
|
|
104
|
-
/** Client is disconnected */
|
|
105
|
-
Disconnected = "disconnected",
|
|
106
|
-
/** Client encountered an error */
|
|
107
|
-
Error = "error"
|
|
108
|
-
}
|
|
109
|
-
/**
|
|
110
|
-
* Complete client information including transport, status and history
|
|
111
|
-
*/
|
|
112
|
-
export interface ClientInfo {
|
|
113
|
-
readonly name: string;
|
|
114
|
-
readonly transport: EnhancedTransport;
|
|
115
|
-
readonly client: Client;
|
|
116
|
-
readonly lastError?: Error;
|
|
117
|
-
readonly lastConnected?: Date;
|
|
118
|
-
status: ClientStatus;
|
|
119
|
-
capabilities?: ServerCapabilities;
|
|
120
|
-
}
|
|
121
|
-
/**
|
|
122
|
-
* Map of client information indexed by client name
|
|
123
|
-
*/
|
|
124
|
-
export type Clients = Record<string, ClientInfo>;
|
|
125
|
-
/**
|
|
126
|
-
* Options for client operations
|
|
127
|
-
*/
|
|
128
|
-
export interface OperationOptions {
|
|
129
|
-
readonly retryCount?: number;
|
|
130
|
-
readonly retryDelay?: number;
|
|
131
|
-
}
|
|
132
|
-
//# sourceMappingURL=types.d.ts.map
|
|
85
|
+
//# sourceMappingURL=transport.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"transport.d.ts","sourceRoot":"","sources":["../../../src/core/types/transport.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,SAAS,EAAE,MAAM,+CAA+C,CAAC;AAE1E;;GAEG;AACH,MAAM,WAAW,iBAAkB,SAAQ,SAAS;IAClD,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;CACjB;AAED;;GAEG;AACH,MAAM,WAAW,mBAAmB;IAClC,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,QAAQ,CAAC,EAAE,OAAO,CAAC;IAC5B,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;CAC1B;AAED;;GAEG;AACH,MAAM,WAAW,wBAAyB,SAAQ,mBAAmB;IACnE,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,KAAK,CAAC;IAC9B,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CAC3C;AAED;;GAEG;AACH,MAAM,WAAW,oBAAqB,SAAQ,mBAAmB;IAC/D,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC;IACvB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;IACzB,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IAClC,QAAQ,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CACvC;AAED;;GAEG;AACH,eAAO,MAAM,qBAAqB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAgBhC,CAAC;AAEH;;GAEG;AACH,MAAM,MAAM,eAAe,GAAG,wBAAwB,GAAG,oBAAoB,CAAC;AAE9E;;GAEG;AACH,MAAM,MAAM,eAAe,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,qBAAqB,CAAC,CAAC"}
|
|
@@ -17,16 +17,4 @@ export const transportConfigSchema = z.object({
|
|
|
17
17
|
cwd: z.string().optional(),
|
|
18
18
|
env: z.record(z.string()).optional(),
|
|
19
19
|
});
|
|
20
|
-
|
|
21
|
-
* Enum representing possible client connection states
|
|
22
|
-
*/
|
|
23
|
-
export var ClientStatus;
|
|
24
|
-
(function (ClientStatus) {
|
|
25
|
-
/** Client is successfully connected */
|
|
26
|
-
ClientStatus["Connected"] = "connected";
|
|
27
|
-
/** Client is disconnected */
|
|
28
|
-
ClientStatus["Disconnected"] = "disconnected";
|
|
29
|
-
/** Client encountered an error */
|
|
30
|
-
ClientStatus["Error"] = "error";
|
|
31
|
-
})(ClientStatus || (ClientStatus = {}));
|
|
32
|
-
//# sourceMappingURL=types.js.map
|
|
20
|
+
//# sourceMappingURL=transport.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"transport.js","sourceRoot":"","sources":["../../../src/core/types/transport.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAyCxB;;GAEG;AACH,MAAM,CAAC,MAAM,qBAAqB,GAAG,CAAC,CAAC,MAAM,CAAC;IAC5C,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,gBAAgB,CAAC,CAAC,CAAC,QAAQ,EAAE;IACnE,QAAQ,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE;IAChC,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAC9B,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,QAAQ,EAAE;IAEpC,sBAAsB;IACtB,GAAG,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE;IAChC,OAAO,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,QAAQ,EAAE;IAExC,+BAA+B;IAC/B,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAC9B,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,QAAQ,EAAE;IACpC,MAAM,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,QAAQ,EAAE;IACpD,GAAG,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAC1B,GAAG,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,QAAQ,EAAE;CACrC,CAAC,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"notificationHandlers.d.ts","sourceRoot":"","sources":["../../src/handlers/notificationHandlers.ts"],"names":[],"mappings":"AAaA,OAAO,EAAE,OAAO,EAAE,UAAU,EAAgB,MAAM,
|
|
1
|
+
{"version":3,"file":"notificationHandlers.d.ts","sourceRoot":"","sources":["../../src/handlers/notificationHandlers.ts"],"names":[],"mappings":"AAaA,OAAO,EAAE,OAAO,EAAE,UAAU,EAAgB,MAAM,wBAAwB,CAAC;AAC3E;;;;GAIG;AACH,wBAAgB,gCAAgC,CAAC,OAAO,EAAE,OAAO,EAAE,UAAU,EAAE,UAAU,GAAG,IAAI,CAwC/F;AAED;;;;GAIG;AACH,wBAAgB,gCAAgC,CAAC,OAAO,EAAE,OAAO,EAAE,UAAU,EAAE,UAAU,GAAG,IAAI,CAyC/F"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { CancelledNotificationSchema, ProgressNotificationSchema, LoggingMessageNotificationSchema, ResourceUpdatedNotificationSchema, ResourceListChangedNotificationSchema, ToolListChangedNotificationSchema, PromptListChangedNotificationSchema, InitializedNotificationSchema, RootsListChangedNotificationSchema, } from '@modelcontextprotocol/sdk/types.js';
|
|
2
2
|
import logger from '../logger/logger.js';
|
|
3
3
|
import { withErrorHandling } from '../utils/errorHandling.js';
|
|
4
|
-
import { ClientStatus } from '../types.js';
|
|
4
|
+
import { ClientStatus } from '../core/types/index.js';
|
|
5
5
|
/**
|
|
6
6
|
* Sets up client-to-server notification handlers
|
|
7
7
|
* @param clients Record of client instances
|
|
@@ -21,13 +21,26 @@ export function setupClientToServerNotifications(clients, serverInfo) {
|
|
|
21
21
|
clientNotificationSchemas.forEach((schema) => {
|
|
22
22
|
clientInfo.client.setNotificationHandler(schema, withErrorHandling(async (notification) => {
|
|
23
23
|
logger.info(`Received notification in client: ${name} ${JSON.stringify(notification)}`);
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
params
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
24
|
+
// Try to send notification, catch connection errors gracefully
|
|
25
|
+
try {
|
|
26
|
+
// Preserve original message structure and only modify params
|
|
27
|
+
const forwardedNotification = {
|
|
28
|
+
method: notification.method,
|
|
29
|
+
params: {
|
|
30
|
+
...notification.params,
|
|
31
|
+
server: name,
|
|
32
|
+
},
|
|
33
|
+
};
|
|
34
|
+
serverInfo.server.notification(forwardedNotification);
|
|
35
|
+
}
|
|
36
|
+
catch (error) {
|
|
37
|
+
if (error instanceof Error && error.message.includes('Not connected')) {
|
|
38
|
+
logger.warn(`Server transport not connected. Dropping notification from ${name}`);
|
|
39
|
+
}
|
|
40
|
+
else {
|
|
41
|
+
logger.error(`Failed to send notification from ${name}: ${error}`);
|
|
42
|
+
}
|
|
43
|
+
}
|
|
31
44
|
}, `Error handling client notification from ${name}`));
|
|
32
45
|
});
|
|
33
46
|
}
|
|
@@ -52,13 +65,26 @@ export function setupServerToClientNotifications(clients, serverInfo) {
|
|
|
52
65
|
logger.warn(`Client ${name} is not connected. Notification not sent.`);
|
|
53
66
|
return;
|
|
54
67
|
}
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
params
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
68
|
+
// Try to send notification, catch connection errors gracefully
|
|
69
|
+
try {
|
|
70
|
+
// Preserve original message structure and only modify params
|
|
71
|
+
const forwardedNotification = {
|
|
72
|
+
method: notification.method,
|
|
73
|
+
params: {
|
|
74
|
+
...notification.params,
|
|
75
|
+
client: name,
|
|
76
|
+
},
|
|
77
|
+
};
|
|
78
|
+
clientInfo.client.notification(forwardedNotification);
|
|
79
|
+
}
|
|
80
|
+
catch (error) {
|
|
81
|
+
if (error instanceof Error && error.message.includes('Not connected')) {
|
|
82
|
+
logger.warn(`Client ${name} transport not connected. Dropping notification.`);
|
|
83
|
+
}
|
|
84
|
+
else {
|
|
85
|
+
logger.error(`Failed to send notification to ${name}: ${error}`);
|
|
86
|
+
}
|
|
87
|
+
}
|
|
62
88
|
}, `Error handling server notification to ${name}`));
|
|
63
89
|
});
|
|
64
90
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"notificationHandlers.js","sourceRoot":"","sources":["../../src/handlers/notificationHandlers.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,2BAA2B,EAC3B,0BAA0B,EAC1B,gCAAgC,EAChC,iCAAiC,EACjC,qCAAqC,EACrC,iCAAiC,EACjC,mCAAmC,EACnC,6BAA6B,EAC7B,kCAAkC,GACnC,MAAM,oCAAoC,CAAC;AAC5C,OAAO,MAAM,MAAM,qBAAqB,CAAC;AACzC,OAAO,EAAE,iBAAiB,EAAE,MAAM,2BAA2B,CAAC;AAC9D,OAAO,EAAuB,YAAY,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"notificationHandlers.js","sourceRoot":"","sources":["../../src/handlers/notificationHandlers.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"requestHandlers.d.ts","sourceRoot":"","sources":["../../src/handlers/requestHandlers.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"requestHandlers.d.ts","sourceRoot":"","sources":["../../src/handlers/requestHandlers.ts"],"names":[],"mappings":"AA+BA,OAAO,EAAE,OAAO,EAAE,UAAU,EAAgB,MAAM,wBAAwB,CAAC;AAqD3E;;;;;;GAMG;AACH,wBAAgB,uBAAuB,CAAC,OAAO,EAAE,OAAO,EAAE,UAAU,EAAE,UAAU,GAAG,IAAI,CA6CtF"}
|
|
@@ -1,10 +1,12 @@
|
|
|
1
|
-
import { CallToolRequestSchema, ListResourcesRequestSchema, ListToolsRequestSchema, ReadResourceRequestSchema, ListPromptsRequestSchema, GetPromptRequestSchema, ListResourceTemplatesRequestSchema, SubscribeRequestSchema, UnsubscribeRequestSchema, SetLevelRequestSchema, CallToolResultSchema, CreateMessageRequestSchema, ListRootsRequestSchema, } from '@modelcontextprotocol/sdk/types.js';
|
|
1
|
+
import { CallToolRequestSchema, ListResourcesRequestSchema, ListToolsRequestSchema, ReadResourceRequestSchema, ListPromptsRequestSchema, GetPromptRequestSchema, ListResourceTemplatesRequestSchema, SubscribeRequestSchema, UnsubscribeRequestSchema, SetLevelRequestSchema, CallToolResultSchema, CreateMessageRequestSchema, ListRootsRequestSchema, ElicitRequestSchema, PingRequestSchema, CompleteRequestSchema, } from '@modelcontextprotocol/sdk/types.js';
|
|
2
2
|
import { setLogLevel } from '../logger/logger.js';
|
|
3
3
|
import { MCP_URI_SEPARATOR } from '../constants.js';
|
|
4
|
-
import { executeClientOperation, executeServerOperation } from '../
|
|
4
|
+
import { executeClientOperation, executeServerOperation } from '../core/client/clientManager.js';
|
|
5
5
|
import { parseUri, withErrorHandling } from '../utils/errorHandling.js';
|
|
6
6
|
import { filterClients, byCapabilities, byTags } from '../utils/clientFiltering.js';
|
|
7
|
+
import { ClientStatus } from '../core/types/index.js';
|
|
7
8
|
import { handlePagination } from '../utils/pagination.js';
|
|
9
|
+
import logger from '../logger/logger.js';
|
|
8
10
|
/**
|
|
9
11
|
* Registers server-specific request handlers
|
|
10
12
|
* @param clients Record of client instances
|
|
@@ -12,11 +14,19 @@ import { handlePagination } from '../utils/pagination.js';
|
|
|
12
14
|
*/
|
|
13
15
|
function registerServerRequestHandlers(clients, serverInfo) {
|
|
14
16
|
Object.entries(clients).forEach(([_, clientInfo]) => {
|
|
17
|
+
clientInfo.client.setRequestHandler(PingRequestSchema, withErrorHandling(async () => {
|
|
18
|
+
return executeServerOperation(serverInfo, (_server) => _server.server.ping());
|
|
19
|
+
}, 'Error pinging'));
|
|
15
20
|
clientInfo.client.setRequestHandler(CreateMessageRequestSchema, withErrorHandling(async (request) => {
|
|
16
21
|
return executeServerOperation(serverInfo, (_server) => _server.server.createMessage(request.params, {
|
|
17
22
|
timeout: clientInfo.transport.timeout,
|
|
18
23
|
}));
|
|
19
24
|
}, 'Error creating message'));
|
|
25
|
+
clientInfo.client.setRequestHandler(ElicitRequestSchema, withErrorHandling(async (request) => {
|
|
26
|
+
return executeServerOperation(serverInfo, (_server) => _server.server.elicitInput(request.params, {
|
|
27
|
+
timeout: clientInfo.transport.timeout,
|
|
28
|
+
}));
|
|
29
|
+
}, 'Error eliciting input'));
|
|
20
30
|
clientInfo.client.setRequestHandler(ListRootsRequestSchema, withErrorHandling(async (request) => {
|
|
21
31
|
return executeServerOperation(serverInfo, (_server) => _server.server.listRoots(request.params, {
|
|
22
32
|
timeout: clientInfo.transport.timeout,
|
|
@@ -37,12 +47,33 @@ export function registerRequestHandlers(clients, serverInfo) {
|
|
|
37
47
|
setLogLevel(request.params.level);
|
|
38
48
|
return {};
|
|
39
49
|
});
|
|
50
|
+
// Register ping handler
|
|
51
|
+
serverInfo.server.setRequestHandler(PingRequestSchema, withErrorHandling(async () => {
|
|
52
|
+
// Health check all connected upstream clients
|
|
53
|
+
const healthCheckPromises = Object.entries(clients).map(async ([clientName, clientInfo]) => {
|
|
54
|
+
if (clientInfo.status === ClientStatus.Connected) {
|
|
55
|
+
try {
|
|
56
|
+
await clientInfo.client.ping();
|
|
57
|
+
logger.info(`Health check successful for client: ${clientName}`);
|
|
58
|
+
}
|
|
59
|
+
catch (error) {
|
|
60
|
+
logger.warn(`Health check failed for client ${clientName}: ${error}`);
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
});
|
|
64
|
+
// Wait for all health checks to complete (but don't fail if some fail)
|
|
65
|
+
await Promise.allSettled(healthCheckPromises);
|
|
66
|
+
// Always return successful pong response
|
|
67
|
+
return {};
|
|
68
|
+
}, 'Error handling ping'));
|
|
40
69
|
// Register resource-related handlers
|
|
41
70
|
registerResourceHandlers(clients, serverInfo);
|
|
42
71
|
// Register tool-related handlers
|
|
43
72
|
registerToolHandlers(clients, serverInfo);
|
|
44
73
|
// Register prompt-related handlers
|
|
45
74
|
registerPromptHandlers(clients, serverInfo);
|
|
75
|
+
// Register completion-related handlers
|
|
76
|
+
registerCompletionHandlers(clients, serverInfo);
|
|
46
77
|
// Register server-specific request handlers
|
|
47
78
|
registerServerRequestHandlers(clients, serverInfo);
|
|
48
79
|
}
|
|
@@ -115,6 +146,8 @@ function registerToolHandlers(clients, serverInfo) {
|
|
|
115
146
|
name: `${clientInfo.name}${MCP_URI_SEPARATOR}${tool.name}`,
|
|
116
147
|
description: tool.description,
|
|
117
148
|
inputSchema: tool.inputSchema,
|
|
149
|
+
outputSchema: tool.outputSchema,
|
|
150
|
+
annotations: tool.annotations,
|
|
118
151
|
})) ?? [], serverInfo.enablePagination ?? false);
|
|
119
152
|
return {
|
|
120
153
|
tools: result.items,
|
|
@@ -154,4 +187,34 @@ function registerPromptHandlers(clients, serverInfo) {
|
|
|
154
187
|
return executeClientOperation(clients, clientName, (clientInfo) => clientInfo.client.getPrompt({ ...request.params, name: promptName }));
|
|
155
188
|
}, 'Error getting prompt'));
|
|
156
189
|
}
|
|
190
|
+
/**
|
|
191
|
+
* Registers completion-related request handlers
|
|
192
|
+
* @param clients Record of client instances
|
|
193
|
+
* @param serverInfo The MCP server instance
|
|
194
|
+
*/
|
|
195
|
+
function registerCompletionHandlers(clients, serverInfo) {
|
|
196
|
+
serverInfo.server.setRequestHandler(CompleteRequestSchema, withErrorHandling(async (request) => {
|
|
197
|
+
const { ref } = request.params;
|
|
198
|
+
let clientName;
|
|
199
|
+
let updatedRef;
|
|
200
|
+
if (ref.type === 'ref/prompt') {
|
|
201
|
+
const { clientName: cn, resourceName } = parseUri(ref.name, MCP_URI_SEPARATOR);
|
|
202
|
+
clientName = cn;
|
|
203
|
+
updatedRef = { ...ref, name: resourceName };
|
|
204
|
+
}
|
|
205
|
+
else if (ref.type === 'ref/resource') {
|
|
206
|
+
const { clientName: cn, resourceName } = parseUri(ref.uri, MCP_URI_SEPARATOR);
|
|
207
|
+
clientName = cn;
|
|
208
|
+
updatedRef = { ...ref, uri: resourceName };
|
|
209
|
+
}
|
|
210
|
+
else {
|
|
211
|
+
// This should be caught by the schema validation, but as a safeguard:
|
|
212
|
+
throw new Error(`Unsupported completion reference type: ${ref.type}`);
|
|
213
|
+
}
|
|
214
|
+
const params = { ...request.params, ref: updatedRef };
|
|
215
|
+
return executeClientOperation(clients, clientName, (clientInfo) => clientInfo.client.complete(params, {
|
|
216
|
+
timeout: clientInfo.transport.timeout,
|
|
217
|
+
}), {}, 'completions');
|
|
218
|
+
}, 'Error handling completion'));
|
|
219
|
+
}
|
|
157
220
|
//# sourceMappingURL=requestHandlers.js.map
|