@1mcp/agent 0.29.0-beta5 → 0.29.0-beta7
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/build/config/configLoader.d.ts.map +1 -1
- package/build/config/configLoader.js +20 -2
- package/build/config/configLoader.js.map +1 -1
- package/build/constants/mcp.d.ts +1 -1
- package/build/constants/mcp.js +1 -1
- package/build/constants/paths.d.ts +5 -1
- package/build/constants/paths.d.ts.map +1 -1
- package/build/constants/paths.js +7 -1
- package/build/constants/paths.js.map +1 -1
- package/build/constants/schema.d.ts +35 -0
- package/build/constants/schema.d.ts.map +1 -0
- package/build/constants/schema.js +35 -0
- package/build/constants/schema.js.map +1 -0
- package/build/core/tools/handlers/serverManagementHandler.d.ts +5 -5
- package/build/core/tools/internal/adapters/helpers/configTransformers.d.ts +1 -1
- package/build/core/types/transport.d.ts +5 -4
- package/build/core/types/transport.d.ts.map +1 -1
- package/build/core/types/transport.js +71 -38
- package/build/core/types/transport.js.map +1 -1
- package/build/template/handlebarsTemplateRenderer.d.ts +7 -0
- package/build/template/handlebarsTemplateRenderer.d.ts.map +1 -1
- package/build/template/handlebarsTemplateRenderer.js +15 -0
- package/build/template/handlebarsTemplateRenderer.js.map +1 -1
- package/build/transport/http/restorableStreamableTransport.d.ts +56 -11
- package/build/transport/http/restorableStreamableTransport.d.ts.map +1 -1
- package/build/transport/http/restorableStreamableTransport.js +93 -21
- package/build/transport/http/restorableStreamableTransport.js.map +1 -1
- package/build/transport/http/routes/streamableHttpRoutes.d.ts +2 -1
- package/build/transport/http/routes/streamableHttpRoutes.d.ts.map +1 -1
- package/build/transport/http/routes/streamableHttpRoutes.js +77 -238
- package/build/transport/http/routes/streamableHttpRoutes.js.map +1 -1
- package/build/transport/http/utils/sdkInternals.d.ts +32 -0
- package/build/transport/http/utils/sdkInternals.d.ts.map +1 -0
- package/build/transport/http/utils/sdkInternals.js +6 -0
- package/build/transport/http/utils/sdkInternals.js.map +1 -0
- package/build/transport/http/utils/sessionService.d.ts +76 -0
- package/build/transport/http/utils/sessionService.d.ts.map +1 -0
- package/build/transport/http/utils/sessionService.js +232 -0
- package/build/transport/http/utils/sessionService.js.map +1 -0
- package/package.json +1 -1
|
@@ -1,85 +1,29 @@
|
|
|
1
1
|
import { randomUUID } from 'node:crypto';
|
|
2
|
-
import { StreamableHTTPServerTransport } from '@modelcontextprotocol/sdk/server/streamableHttp.js';
|
|
3
2
|
import { ErrorCode } from '@modelcontextprotocol/sdk/types.js';
|
|
4
3
|
import { AUTH_CONFIG, STREAMABLE_HTTP_ENDPOINT } from '../../../constants.js';
|
|
5
|
-
import { ServerStatus } from '../../../core/types/index.js';
|
|
6
4
|
import logger from '../../../logger/logger.js';
|
|
7
5
|
import { getPresetName, getTagExpression, getTagFilterMode, getTagQuery, getValidatedTags, } from '../../../transport/http/middlewares/scopeAuthMiddleware.js';
|
|
8
6
|
import tagsExtractor from '../../../transport/http/middlewares/tagsExtractor.js';
|
|
9
|
-
import { RestorableStreamableHTTPServerTransport } from '../../../transport/http/restorableStreamableTransport.js';
|
|
10
7
|
import { extractContextFromMeta } from '../../../transport/http/utils/contextExtractor.js';
|
|
8
|
+
import { SessionService } from '../../../transport/http/utils/sessionService.js';
|
|
11
9
|
/**
|
|
12
|
-
*
|
|
13
|
-
*
|
|
10
|
+
* Builds the inbound connection config from request data.
|
|
11
|
+
*
|
|
12
|
+
* @param res - Express response object containing validated middleware data
|
|
13
|
+
* @param req - Express request object
|
|
14
|
+
* @param customTemplate - Optional custom template to include
|
|
15
|
+
* @returns The inbound connection configuration
|
|
14
16
|
*/
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
// Create new transport with the original session ID using wrapper class
|
|
26
|
-
const transport = new RestorableStreamableHTTPServerTransport({
|
|
27
|
-
sessionIdGenerator: () => sessionId,
|
|
28
|
-
});
|
|
29
|
-
// Mark the transport as initialized for restored session
|
|
30
|
-
// The wrapper class safely handles the SDK's internal _initialized flag
|
|
31
|
-
transport.markAsInitialized();
|
|
32
|
-
// Safely set sessionId if possible
|
|
33
|
-
try {
|
|
34
|
-
transport.sessionId = sessionId;
|
|
35
|
-
}
|
|
36
|
-
catch (error) {
|
|
37
|
-
logger.warn('Could not set sessionId on restored transport:', error);
|
|
38
|
-
}
|
|
39
|
-
// Convert config context to ContextData format if available
|
|
40
|
-
const contextData = config.context
|
|
41
|
-
? {
|
|
42
|
-
project: config.context.project || {},
|
|
43
|
-
user: config.context.user || {},
|
|
44
|
-
environment: config.context.environment || {},
|
|
45
|
-
timestamp: config.context.timestamp,
|
|
46
|
-
sessionId: config.context.sessionId || sessionId,
|
|
47
|
-
version: config.context.version,
|
|
48
|
-
transport: config.context.transport,
|
|
49
|
-
}
|
|
50
|
-
: undefined;
|
|
51
|
-
// Reconnect with the original configuration and context
|
|
52
|
-
await serverManager.connectTransport(transport, sessionId, config, contextData);
|
|
53
|
-
// Initialize notifications for async loading if enabled
|
|
54
|
-
if (asyncOrchestrator) {
|
|
55
|
-
const inboundConnection = serverManager.getServer(sessionId);
|
|
56
|
-
if (inboundConnection) {
|
|
57
|
-
asyncOrchestrator.initializeNotifications(inboundConnection);
|
|
58
|
-
logger.debug(`Async loading notifications initialized for restored session ${sessionId}`);
|
|
59
|
-
}
|
|
60
|
-
}
|
|
61
|
-
// Set up handlers for the restored transport
|
|
62
|
-
transport.onclose = () => {
|
|
63
|
-
serverManager.disconnectTransport(sessionId);
|
|
64
|
-
sessionRepository.delete(sessionId);
|
|
65
|
-
};
|
|
66
|
-
transport.onerror = (error) => {
|
|
67
|
-
logger.error(`Streamable HTTP transport error for session ${sessionId}:`, error);
|
|
68
|
-
const server = serverManager.getServer(sessionId);
|
|
69
|
-
if (server) {
|
|
70
|
-
server.status = ServerStatus.Error;
|
|
71
|
-
server.lastError = error instanceof Error ? error : new Error(String(error));
|
|
72
|
-
}
|
|
73
|
-
};
|
|
74
|
-
// Update last accessed time with dual-trigger persistence
|
|
75
|
-
sessionRepository.updateAccess(sessionId);
|
|
76
|
-
logger.info(`Successfully restored streamable session: ${sessionId} (restored: ${transport.isRestored()})`);
|
|
77
|
-
return transport;
|
|
78
|
-
}
|
|
79
|
-
catch (error) {
|
|
80
|
-
logger.error(`Failed to restore streamable session ${sessionId}:`, error);
|
|
81
|
-
return null;
|
|
82
|
-
}
|
|
17
|
+
function buildConfigFromRequest(res, req, customTemplate) {
|
|
18
|
+
return {
|
|
19
|
+
tags: getValidatedTags(res),
|
|
20
|
+
tagExpression: getTagExpression(res),
|
|
21
|
+
tagFilterMode: getTagFilterMode(res),
|
|
22
|
+
tagQuery: getTagQuery(res),
|
|
23
|
+
presetName: getPresetName(res),
|
|
24
|
+
enablePagination: req.query.pagination === 'true',
|
|
25
|
+
customTemplate,
|
|
26
|
+
};
|
|
83
27
|
}
|
|
84
28
|
/**
|
|
85
29
|
* Sets up client disconnect detection for a request/response pair.
|
|
@@ -109,12 +53,13 @@ function setupDisconnectDetection(req, res, sessionId, serverManager) {
|
|
|
109
53
|
}
|
|
110
54
|
});
|
|
111
55
|
}
|
|
112
|
-
export function setupStreamableHttpRoutes(router, serverManager, sessionRepository, authMiddleware, availabilityMiddleware, asyncOrchestrator, customTemplate) {
|
|
56
|
+
export function setupStreamableHttpRoutes(router, serverManager, sessionRepository, authMiddleware, availabilityMiddleware, asyncOrchestrator, customTemplate, injectedSessionService) {
|
|
113
57
|
const middlewares = [tagsExtractor, authMiddleware];
|
|
114
58
|
// Add availability middleware if provided
|
|
115
59
|
if (availabilityMiddleware) {
|
|
116
60
|
middlewares.push(availabilityMiddleware);
|
|
117
61
|
}
|
|
62
|
+
const sessionService = injectedSessionService || new SessionService(serverManager, sessionRepository, asyncOrchestrator);
|
|
118
63
|
router.post(STREAMABLE_HTTP_ENDPOINT, ...middlewares, async (req, res) => {
|
|
119
64
|
try {
|
|
120
65
|
let transport;
|
|
@@ -122,147 +67,43 @@ export function setupStreamableHttpRoutes(router, serverManager, sessionReposito
|
|
|
122
67
|
if (!sessionId) {
|
|
123
68
|
// Generate new session ID
|
|
124
69
|
const id = AUTH_CONFIG.SERVER.STREAMABLE_SESSION.ID_PREFIX + randomUUID();
|
|
125
|
-
|
|
126
|
-
sessionIdGenerator: () => id,
|
|
127
|
-
});
|
|
128
|
-
// Use validated tags and tag expression from scope auth middleware
|
|
129
|
-
const tags = getValidatedTags(res);
|
|
130
|
-
const tagExpression = getTagExpression(res);
|
|
131
|
-
const tagFilterMode = getTagFilterMode(res);
|
|
132
|
-
const tagQuery = getTagQuery(res);
|
|
133
|
-
const presetName = getPresetName(res);
|
|
134
|
-
const config = {
|
|
135
|
-
tags,
|
|
136
|
-
tagExpression,
|
|
137
|
-
tagFilterMode,
|
|
138
|
-
tagQuery,
|
|
139
|
-
presetName,
|
|
140
|
-
enablePagination: req.query.pagination === 'true',
|
|
141
|
-
customTemplate,
|
|
142
|
-
};
|
|
70
|
+
const config = buildConfigFromRequest(res, req, customTemplate);
|
|
143
71
|
// Extract context from _meta field (from STDIO proxy)
|
|
144
72
|
const context = extractContextFromMeta(req);
|
|
145
|
-
|
|
146
|
-
|
|
73
|
+
const createResult = await sessionService.createSession(config, context || undefined, id);
|
|
74
|
+
transport = createResult.transport;
|
|
75
|
+
// Log warning if session was not persisted
|
|
76
|
+
if (!createResult.persisted) {
|
|
77
|
+
logger.warn(`New session ${id} was created but not persisted: ${createResult.persistenceError}`);
|
|
147
78
|
}
|
|
148
|
-
// Include full context in config for session persistence
|
|
149
|
-
const configWithContext = {
|
|
150
|
-
...config,
|
|
151
|
-
context: context || undefined,
|
|
152
|
-
};
|
|
153
|
-
// Pass context to ServerManager for template processing (only if valid)
|
|
154
|
-
const validContext = context && context.project && context.user && context.environment ? context : undefined;
|
|
155
|
-
await serverManager.connectTransport(transport, id, configWithContext, validContext);
|
|
156
|
-
// Persist session configuration with full context for restoration
|
|
157
|
-
sessionRepository.create(id, configWithContext);
|
|
158
|
-
// Initialize notifications for async loading if enabled
|
|
159
|
-
if (asyncOrchestrator) {
|
|
160
|
-
const inboundConnection = serverManager.getServer(id);
|
|
161
|
-
if (inboundConnection) {
|
|
162
|
-
asyncOrchestrator.initializeNotifications(inboundConnection);
|
|
163
|
-
logger.debug(`Async loading notifications initialized for Streamable HTTP session ${id}`);
|
|
164
|
-
}
|
|
165
|
-
}
|
|
166
|
-
transport.onclose = () => {
|
|
167
|
-
serverManager.disconnectTransport(id);
|
|
168
|
-
sessionRepository.delete(id);
|
|
169
|
-
};
|
|
170
|
-
transport.onerror = (error) => {
|
|
171
|
-
logger.error(`Streamable HTTP transport error for session ${id}:`, error);
|
|
172
|
-
const server = serverManager.getServer(id);
|
|
173
|
-
if (server) {
|
|
174
|
-
server.status = ServerStatus.Error;
|
|
175
|
-
server.lastError = error instanceof Error ? error : new Error(String(error));
|
|
176
|
-
}
|
|
177
|
-
};
|
|
178
79
|
}
|
|
179
80
|
else {
|
|
180
|
-
|
|
181
|
-
if (!
|
|
182
|
-
//
|
|
81
|
+
transport = await sessionService.getSession(sessionId);
|
|
82
|
+
if (!transport) {
|
|
83
|
+
// Session restoration failed - create new session with provided ID (handles proxy use case)
|
|
84
|
+
logger.error(`Session restoration failed for ${sessionId}, creating new session as fallback`);
|
|
85
|
+
const config = buildConfigFromRequest(res, req, customTemplate);
|
|
86
|
+
// Extract context from _meta field (from STDIO proxy)
|
|
183
87
|
const context = extractContextFromMeta(req);
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
if (!restoredTransport) {
|
|
190
|
-
// Session restoration failed - create new session with provided ID (handles proxy use case)
|
|
191
|
-
logger.info(`🆕 Session restoration failed, creating new session with provided ID: ${sessionId}`);
|
|
192
|
-
transport = new StreamableHTTPServerTransport({
|
|
193
|
-
sessionIdGenerator: () => sessionId,
|
|
194
|
-
});
|
|
195
|
-
// Use validated tags and tag expression from scope auth middleware
|
|
196
|
-
const tags = getValidatedTags(res);
|
|
197
|
-
const tagExpression = getTagExpression(res);
|
|
198
|
-
const tagFilterMode = getTagFilterMode(res);
|
|
199
|
-
const tagQuery = getTagQuery(res);
|
|
200
|
-
const presetName = getPresetName(res);
|
|
201
|
-
const config = {
|
|
202
|
-
tags,
|
|
203
|
-
tagExpression,
|
|
204
|
-
tagFilterMode,
|
|
205
|
-
tagQuery,
|
|
206
|
-
presetName,
|
|
207
|
-
enablePagination: req.query.pagination === 'true',
|
|
208
|
-
customTemplate,
|
|
209
|
-
};
|
|
210
|
-
// Extract context from _meta field (from STDIO proxy)
|
|
211
|
-
const context = extractContextFromMeta(req);
|
|
212
|
-
if (context && context.project?.name && context.sessionId) {
|
|
213
|
-
logger.info(`🔗 New session with provided ID and context: ${context.project.name} (${context.sessionId})`);
|
|
214
|
-
}
|
|
215
|
-
// Pass context to ServerManager for template processing (only if valid)
|
|
216
|
-
const validContext = context && context.project && context.user && context.environment ? context : undefined;
|
|
217
|
-
await serverManager.connectTransport(transport, sessionId, config, validContext);
|
|
218
|
-
// Persist session configuration for restoration with context
|
|
219
|
-
sessionRepository.create(sessionId, config);
|
|
220
|
-
// Initialize notifications for async loading if enabled
|
|
221
|
-
if (asyncOrchestrator) {
|
|
222
|
-
const inboundConnection = serverManager.getServer(sessionId);
|
|
223
|
-
if (inboundConnection) {
|
|
224
|
-
asyncOrchestrator.initializeNotifications(inboundConnection);
|
|
225
|
-
logger.debug(`Async loading notifications initialized for Streamable HTTP session ${sessionId}`);
|
|
226
|
-
}
|
|
227
|
-
}
|
|
228
|
-
transport.onclose = () => {
|
|
229
|
-
serverManager.disconnectTransport(sessionId);
|
|
230
|
-
sessionRepository.delete(sessionId);
|
|
231
|
-
};
|
|
232
|
-
transport.onerror = (error) => {
|
|
233
|
-
logger.error(`Streamable HTTP transport error for session ${sessionId}:`, error);
|
|
234
|
-
const server = serverManager.getServer(sessionId);
|
|
235
|
-
if (server) {
|
|
236
|
-
server.status = ServerStatus.Error;
|
|
237
|
-
server.lastError = error instanceof Error ? error : new Error(String(error));
|
|
238
|
-
}
|
|
239
|
-
};
|
|
88
|
+
const createResult = await sessionService.createSession(config, context || undefined, sessionId);
|
|
89
|
+
transport = createResult.transport;
|
|
90
|
+
// Log warning if session was not persisted
|
|
91
|
+
if (!createResult.persisted) {
|
|
92
|
+
logger.warn(`Fallback session ${sessionId} was created but not persisted: ${createResult.persistenceError}`);
|
|
240
93
|
}
|
|
241
|
-
else {
|
|
242
|
-
transport = restoredTransport;
|
|
243
|
-
}
|
|
244
|
-
}
|
|
245
|
-
else if (existingTransport instanceof StreamableHTTPServerTransport ||
|
|
246
|
-
existingTransport instanceof RestorableStreamableHTTPServerTransport) {
|
|
247
|
-
transport = existingTransport;
|
|
248
|
-
// Update last accessed time for active sessions with dual-trigger persistence
|
|
249
|
-
sessionRepository.updateAccess(sessionId);
|
|
250
|
-
}
|
|
251
|
-
else {
|
|
252
|
-
res.status(400).json({
|
|
253
|
-
error: {
|
|
254
|
-
code: ErrorCode.InvalidParams,
|
|
255
|
-
message: 'Session already exists but uses a different transport protocol',
|
|
256
|
-
},
|
|
257
|
-
});
|
|
258
|
-
return;
|
|
259
94
|
}
|
|
260
95
|
}
|
|
261
96
|
await transport.handleRequest(req, res, req.body);
|
|
262
97
|
}
|
|
263
98
|
catch (error) {
|
|
264
|
-
|
|
265
|
-
|
|
99
|
+
const errorMessage = error instanceof Error ? error.message : String(error);
|
|
100
|
+
logger.error('Streamable HTTP POST error:', { error: errorMessage, sessionId: req.headers['mcp-session-id'] });
|
|
101
|
+
res.status(500).json({
|
|
102
|
+
error: {
|
|
103
|
+
code: ErrorCode.InternalError,
|
|
104
|
+
message: 'An internal server error occurred while processing the request',
|
|
105
|
+
},
|
|
106
|
+
});
|
|
266
107
|
}
|
|
267
108
|
});
|
|
268
109
|
router.get(STREAMABLE_HTTP_ENDPOINT, ...middlewares, async (req, res) => {
|
|
@@ -277,32 +118,29 @@ export function setupStreamableHttpRoutes(router, serverManager, sessionReposito
|
|
|
277
118
|
});
|
|
278
119
|
return;
|
|
279
120
|
}
|
|
280
|
-
|
|
121
|
+
const transport = await sessionService.getSession(sessionId);
|
|
281
122
|
if (!transport) {
|
|
282
|
-
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
|
|
288
|
-
|
|
289
|
-
},
|
|
290
|
-
});
|
|
291
|
-
return;
|
|
292
|
-
}
|
|
293
|
-
transport = restoredTransport;
|
|
294
|
-
}
|
|
295
|
-
else {
|
|
296
|
-
// Update last accessed time for active sessions with dual-trigger persistence
|
|
297
|
-
sessionRepository.updateAccess(sessionId);
|
|
123
|
+
res.status(404).json({
|
|
124
|
+
error: {
|
|
125
|
+
code: ErrorCode.InvalidParams,
|
|
126
|
+
message: 'No active streamable HTTP session found for the provided sessionId',
|
|
127
|
+
},
|
|
128
|
+
});
|
|
129
|
+
return;
|
|
298
130
|
}
|
|
299
131
|
// Set up disconnect detection for SSE stream (GET endpoint maintains persistent connection)
|
|
300
132
|
setupDisconnectDetection(req, res, sessionId, serverManager);
|
|
301
133
|
await transport.handleRequest(req, res, req.body);
|
|
302
134
|
}
|
|
303
135
|
catch (error) {
|
|
304
|
-
|
|
305
|
-
|
|
136
|
+
const errorMessage = error instanceof Error ? error.message : String(error);
|
|
137
|
+
logger.error('Streamable HTTP GET error:', { error: errorMessage, sessionId: req.headers['mcp-session-id'] });
|
|
138
|
+
res.status(500).json({
|
|
139
|
+
error: {
|
|
140
|
+
code: ErrorCode.InternalError,
|
|
141
|
+
message: 'An internal server error occurred while processing the request',
|
|
142
|
+
},
|
|
143
|
+
});
|
|
306
144
|
}
|
|
307
145
|
});
|
|
308
146
|
router.delete(STREAMABLE_HTTP_ENDPOINT, ...middlewares, async (req, res) => {
|
|
@@ -317,28 +155,29 @@ export function setupStreamableHttpRoutes(router, serverManager, sessionReposito
|
|
|
317
155
|
});
|
|
318
156
|
return;
|
|
319
157
|
}
|
|
320
|
-
|
|
158
|
+
const transport = await sessionService.getSession(sessionId);
|
|
321
159
|
if (!transport) {
|
|
322
|
-
|
|
323
|
-
|
|
324
|
-
|
|
325
|
-
|
|
326
|
-
|
|
327
|
-
|
|
328
|
-
|
|
329
|
-
},
|
|
330
|
-
});
|
|
331
|
-
return;
|
|
332
|
-
}
|
|
333
|
-
transport = restoredTransport;
|
|
160
|
+
res.status(404).json({
|
|
161
|
+
error: {
|
|
162
|
+
code: ErrorCode.InvalidParams,
|
|
163
|
+
message: 'No active streamable HTTP session found for the provided sessionId',
|
|
164
|
+
},
|
|
165
|
+
});
|
|
166
|
+
return;
|
|
334
167
|
}
|
|
335
168
|
await transport.handleRequest(req, res);
|
|
336
169
|
// Delete session from storage after explicit delete request
|
|
337
|
-
|
|
170
|
+
await sessionService.deleteSession(sessionId);
|
|
338
171
|
}
|
|
339
172
|
catch (error) {
|
|
340
|
-
|
|
341
|
-
|
|
173
|
+
const errorMessage = error instanceof Error ? error.message : String(error);
|
|
174
|
+
logger.error('Streamable HTTP DELETE error:', { error: errorMessage, sessionId: req.headers['mcp-session-id'] });
|
|
175
|
+
res.status(500).json({
|
|
176
|
+
error: {
|
|
177
|
+
code: ErrorCode.InternalError,
|
|
178
|
+
message: 'An internal server error occurred while processing the request',
|
|
179
|
+
},
|
|
180
|
+
});
|
|
342
181
|
}
|
|
343
182
|
});
|
|
344
183
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"streamableHttpRoutes.js","sourceRoot":"","sources":["../../../../src/transport/http/routes/streamableHttpRoutes.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"streamableHttpRoutes.js","sourceRoot":"","sources":["../../../../src/transport/http/routes/streamableHttpRoutes.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Type definitions for internal properties of the MCP SDK that are not exposed
|
|
3
|
+
* in the public API but are needed for session restoration functionality.
|
|
4
|
+
*/
|
|
5
|
+
/**
|
|
6
|
+
* Interface representing the internal structure of the web standard transport
|
|
7
|
+
* used within StreamableHTTPServerTransport
|
|
8
|
+
*/
|
|
9
|
+
export interface InternalWebStandardTransport {
|
|
10
|
+
sessionId: string;
|
|
11
|
+
}
|
|
12
|
+
/**
|
|
13
|
+
* Interface representing the internal structure of StreamableHTTPServerTransport
|
|
14
|
+
* exposing private properties needed for restoration
|
|
15
|
+
*/
|
|
16
|
+
export interface InternalStreamableTransport {
|
|
17
|
+
/**
|
|
18
|
+
* The underlying web standard transport instance
|
|
19
|
+
* @internal
|
|
20
|
+
*/
|
|
21
|
+
_webStandardTransport?: InternalWebStandardTransport;
|
|
22
|
+
/**
|
|
23
|
+
* Flag indicating if the transport has been initialized
|
|
24
|
+
* @internal
|
|
25
|
+
*/
|
|
26
|
+
_initialized?: boolean;
|
|
27
|
+
/**
|
|
28
|
+
* Session ID from public interface
|
|
29
|
+
*/
|
|
30
|
+
sessionId?: string;
|
|
31
|
+
}
|
|
32
|
+
//# sourceMappingURL=sdkInternals.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sdkInternals.d.ts","sourceRoot":"","sources":["../../../../src/transport/http/utils/sdkInternals.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH;;;GAGG;AACH,MAAM,WAAW,4BAA4B;IAC3C,SAAS,EAAE,MAAM,CAAC;CACnB;AAED;;;GAGG;AACH,MAAM,WAAW,2BAA2B;IAC1C;;;OAGG;IACH,qBAAqB,CAAC,EAAE,4BAA4B,CAAC;IAErD;;;OAGG;IACH,YAAY,CAAC,EAAE,OAAO,CAAC;IAEvB;;OAEG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sdkInternals.js","sourceRoot":"","sources":["../../../../src/transport/http/utils/sdkInternals.ts"],"names":[],"mappings":"AAAA;;;GAGG"}
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
import { StreamableHTTPServerTransport } from '@modelcontextprotocol/sdk/server/streamableHttp.js';
|
|
2
|
+
import { AsyncLoadingOrchestrator } from '../../../core/capabilities/asyncLoadingOrchestrator.js';
|
|
3
|
+
import { ServerManager } from '../../../core/server/serverManager.js';
|
|
4
|
+
import { InboundConnectionConfig } from '../../../core/types/index.js';
|
|
5
|
+
import { RestorableStreamableHTTPServerTransport } from '../../../transport/http/restorableStreamableTransport.js';
|
|
6
|
+
import { StreamableSessionRepository } from '../../../transport/http/storage/streamableSessionRepository.js';
|
|
7
|
+
import type { ContextData } from '../../../types/context.js';
|
|
8
|
+
/**
|
|
9
|
+
* Result type for session restoration operations.
|
|
10
|
+
*/
|
|
11
|
+
export interface SessionRestoreResult {
|
|
12
|
+
transport: RestorableStreamableHTTPServerTransport | null;
|
|
13
|
+
error?: string;
|
|
14
|
+
errorType?: 'not_found' | 'transport_failed' | 'connection_failed' | 'context_invalid';
|
|
15
|
+
}
|
|
16
|
+
/**
|
|
17
|
+
* Result type for session creation operations.
|
|
18
|
+
* Indicates whether the session was successfully persisted to storage.
|
|
19
|
+
*/
|
|
20
|
+
export interface SessionCreateResult {
|
|
21
|
+
transport: StreamableHTTPServerTransport | RestorableStreamableHTTPServerTransport;
|
|
22
|
+
persisted: boolean;
|
|
23
|
+
persistenceError?: string;
|
|
24
|
+
}
|
|
25
|
+
/**
|
|
26
|
+
* Service to handle session management logic for Streamable HTTP transport.
|
|
27
|
+
* Encapsulates creation, restoration, and cleanup of sessions.
|
|
28
|
+
*/
|
|
29
|
+
export declare class SessionService {
|
|
30
|
+
private serverManager;
|
|
31
|
+
private sessionRepository;
|
|
32
|
+
private asyncOrchestrator?;
|
|
33
|
+
constructor(serverManager: ServerManager, sessionRepository: StreamableSessionRepository, asyncOrchestrator?: AsyncLoadingOrchestrator | undefined);
|
|
34
|
+
/**
|
|
35
|
+
* Retrieves an existing session transport or tries to restore it.
|
|
36
|
+
*
|
|
37
|
+
* @param sessionId - The session ID to retrieve
|
|
38
|
+
* @returns The transport if found or restored successfully, null otherwise
|
|
39
|
+
*/
|
|
40
|
+
getSession(sessionId: string): Promise<StreamableHTTPServerTransport | RestorableStreamableHTTPServerTransport | null>;
|
|
41
|
+
/**
|
|
42
|
+
* Restores a session from persistent storage.
|
|
43
|
+
*
|
|
44
|
+
* @param sessionId - The session ID to restore
|
|
45
|
+
* @returns SessionRestoreResult with transport or error details
|
|
46
|
+
*/
|
|
47
|
+
restoreSession(sessionId: string): Promise<SessionRestoreResult>;
|
|
48
|
+
/**
|
|
49
|
+
* Creates a new session with the given configuration.
|
|
50
|
+
*
|
|
51
|
+
* @param config - The inbound connection configuration
|
|
52
|
+
* @param context - Optional context data for the session
|
|
53
|
+
* @param providedSessionId - Optional session ID to use instead of generating one
|
|
54
|
+
* @returns SessionCreateResult with transport and persistence status
|
|
55
|
+
* @throws Error if session creation fails (but not if persistence fails)
|
|
56
|
+
*/
|
|
57
|
+
createSession(config: InboundConnectionConfig, context?: Partial<ContextData>, providedSessionId?: string): Promise<SessionCreateResult>;
|
|
58
|
+
/**
|
|
59
|
+
* Deletes a session and cleans up resources.
|
|
60
|
+
*
|
|
61
|
+
* @param sessionId - The session ID to delete
|
|
62
|
+
*/
|
|
63
|
+
deleteSession(sessionId: string): Promise<void>;
|
|
64
|
+
/**
|
|
65
|
+
* Initializes async loading notifications for a session.
|
|
66
|
+
*
|
|
67
|
+
* This method should be called after connecting a transport to enable
|
|
68
|
+
* the async orchestrator to send capability updates to the client.
|
|
69
|
+
* Only applicable when async loading is enabled.
|
|
70
|
+
*
|
|
71
|
+
* @param sessionId - The session ID to initialize notifications for
|
|
72
|
+
*/
|
|
73
|
+
private initializeNotifications;
|
|
74
|
+
private setupTransportHandlers;
|
|
75
|
+
}
|
|
76
|
+
//# sourceMappingURL=sessionService.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sessionService.d.ts","sourceRoot":"","sources":["../../../../src/transport/http/utils/sessionService.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,6BAA6B,EAAE,MAAM,oDAAoD,CAAC;AAGnG,OAAO,EAAE,wBAAwB,EAAE,MAAM,oDAAoD,CAAC;AAC9F,OAAO,EAAE,aAAa,EAAE,MAAM,mCAAmC,CAAC;AAClE,OAAO,EAAE,uBAAuB,EAAgB,MAAM,0BAA0B,CAAC;AAEjF,OAAO,EAAE,uCAAuC,EAAE,MAAM,sDAAsD,CAAC;AAC/G,OAAO,EAAE,2BAA2B,EAAE,MAAM,4DAA4D,CAAC;AACzG,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AAEzD;;GAEG;AACH,MAAM,WAAW,oBAAoB;IACnC,SAAS,EAAE,uCAAuC,GAAG,IAAI,CAAC;IAC1D,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,SAAS,CAAC,EAAE,WAAW,GAAG,kBAAkB,GAAG,mBAAmB,GAAG,iBAAiB,CAAC;CACxF;AAED;;;GAGG;AACH,MAAM,WAAW,mBAAmB;IAClC,SAAS,EAAE,6BAA6B,GAAG,uCAAuC,CAAC;IACnF,SAAS,EAAE,OAAO,CAAC;IACnB,gBAAgB,CAAC,EAAE,MAAM,CAAC;CAC3B;AAYD;;;GAGG;AACH,qBAAa,cAAc;IAEvB,OAAO,CAAC,aAAa;IACrB,OAAO,CAAC,iBAAiB;IACzB,OAAO,CAAC,iBAAiB,CAAC;gBAFlB,aAAa,EAAE,aAAa,EAC5B,iBAAiB,EAAE,2BAA2B,EAC9C,iBAAiB,CAAC,EAAE,wBAAwB,YAAA;IAGtD;;;;;OAKG;IACG,UAAU,CACd,SAAS,EAAE,MAAM,GAChB,OAAO,CAAC,6BAA6B,GAAG,uCAAuC,GAAG,IAAI,CAAC;IA4B1F;;;;;OAKG;IACG,cAAc,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,oBAAoB,CAAC;IAuEtE;;;;;;;;OAQG;IACG,aAAa,CACjB,MAAM,EAAE,uBAAuB,EAC/B,OAAO,CAAC,EAAE,OAAO,CAAC,WAAW,CAAC,EAC9B,iBAAiB,CAAC,EAAE,MAAM,GACzB,OAAO,CAAC,mBAAmB,CAAC;IA2D/B;;;;OAIG;IACG,aAAa,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAWrD;;;;;;;;OAQG;IACH,OAAO,CAAC,uBAAuB;IAU/B,OAAO,CAAC,sBAAsB;CAkB/B"}
|