@1mcp/agent 0.25.4 → 0.26.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/build/auth/sdkOAuthClientProvider.d.ts.map +1 -1
- package/build/auth/sdkOAuthClientProvider.js +3 -5
- package/build/auth/sdkOAuthClientProvider.js.map +1 -1
- package/build/auth/sessionTypes.d.ts +10 -0
- package/build/auth/sessionTypes.d.ts.map +1 -1
- package/build/auth/storage/fileStorageService.d.ts +25 -1
- package/build/auth/storage/fileStorageService.d.ts.map +1 -1
- package/build/auth/storage/fileStorageService.js +155 -27
- package/build/auth/storage/fileStorageService.js.map +1 -1
- package/build/auth/storage/oauthStorageService.js +1 -1
- package/build/auth/storage/oauthStorageService.js.map +1 -1
- package/build/commands/mcp/index.d.ts.map +1 -1
- package/build/commands/mcp/index.js +3 -2
- package/build/commands/mcp/index.js.map +1 -1
- package/build/commands/registry/index.d.ts +6 -0
- package/build/commands/registry/index.d.ts.map +1 -0
- package/build/commands/registry/index.js +67 -0
- package/build/commands/registry/index.js.map +1 -0
- package/build/commands/registry/options.d.ts +47 -0
- package/build/commands/registry/options.d.ts.map +1 -0
- package/build/commands/registry/options.js +39 -0
- package/build/commands/registry/options.js.map +1 -0
- package/build/commands/registry/search.d.ts +21 -0
- package/build/commands/registry/search.d.ts.map +1 -0
- package/build/commands/registry/search.js +186 -0
- package/build/commands/registry/search.js.map +1 -0
- package/build/commands/registry/show.d.ts +25 -0
- package/build/commands/registry/show.d.ts.map +1 -0
- package/build/commands/registry/show.js +87 -0
- package/build/commands/registry/show.js.map +1 -0
- package/build/commands/registry/status.d.ts +16 -0
- package/build/commands/registry/status.d.ts.map +1 -0
- package/build/commands/registry/status.js +86 -0
- package/build/commands/registry/status.js.map +1 -0
- package/build/commands/registry/versions.d.ts +21 -0
- package/build/commands/registry/versions.d.ts.map +1 -0
- package/build/commands/registry/versions.js +76 -0
- package/build/commands/registry/versions.js.map +1 -0
- package/build/constants/auth.d.ts +27 -0
- package/build/constants/auth.d.ts.map +1 -1
- package/build/constants/auth.js +31 -0
- package/build/constants/auth.js.map +1 -1
- package/build/constants/mcp.d.ts +1 -1
- package/build/constants/mcp.js +1 -1
- package/build/core/tools/handlers/registryHandler.d.ts +11 -0
- package/build/core/tools/handlers/registryHandler.d.ts.map +1 -0
- package/build/core/tools/handlers/registryHandler.js +49 -0
- package/build/core/tools/handlers/registryHandler.js.map +1 -0
- package/build/core/tools/handlers/searchHandler.d.ts +19 -0
- package/build/core/tools/handlers/searchHandler.d.ts.map +1 -0
- package/build/core/tools/handlers/searchHandler.js +104 -0
- package/build/core/tools/handlers/searchHandler.js.map +1 -0
- package/build/core/tools/handlers/showHandler.d.ts +10 -0
- package/build/core/tools/handlers/showHandler.d.ts.map +1 -0
- package/build/core/tools/handlers/showHandler.js +44 -0
- package/build/core/tools/handlers/showHandler.js.map +1 -0
- package/build/core/tools/handlers/versionsHandler.d.ts +10 -0
- package/build/core/tools/handlers/versionsHandler.d.ts.map +1 -0
- package/build/core/tools/handlers/versionsHandler.js +44 -0
- package/build/core/tools/handlers/versionsHandler.js.map +1 -0
- package/build/domains/preset/manager/presetManager.d.ts.map +1 -1
- package/build/domains/preset/manager/presetManager.js +2 -2
- package/build/domains/preset/manager/presetManager.js.map +1 -1
- package/build/domains/registry/cacheManager.d.ts +61 -0
- package/build/domains/registry/cacheManager.d.ts.map +1 -0
- package/build/domains/registry/cacheManager.js +158 -0
- package/build/domains/registry/cacheManager.js.map +1 -0
- package/build/domains/registry/formatters/commonFormatters.d.ts +34 -0
- package/build/domains/registry/formatters/commonFormatters.d.ts.map +1 -0
- package/build/domains/registry/formatters/commonFormatters.js +154 -0
- package/build/domains/registry/formatters/commonFormatters.js.map +1 -0
- package/build/domains/registry/formatters/serverDetailFormatter.d.ts +6 -0
- package/build/domains/registry/formatters/serverDetailFormatter.d.ts.map +1 -0
- package/build/domains/registry/formatters/serverDetailFormatter.js +310 -0
- package/build/domains/registry/formatters/serverDetailFormatter.js.map +1 -0
- package/build/domains/registry/formatters/versionsFormatter.d.ts +6 -0
- package/build/domains/registry/formatters/versionsFormatter.d.ts.map +1 -0
- package/build/domains/registry/formatters/versionsFormatter.js +84 -0
- package/build/domains/registry/formatters/versionsFormatter.js.map +1 -0
- package/build/domains/registry/mcpRegistryClient.d.ts +101 -0
- package/build/domains/registry/mcpRegistryClient.d.ts.map +1 -0
- package/build/domains/registry/mcpRegistryClient.js +464 -0
- package/build/domains/registry/mcpRegistryClient.js.map +1 -0
- package/build/domains/registry/mcpToolSchemas.d.ts +63 -0
- package/build/domains/registry/mcpToolSchemas.d.ts.map +1 -0
- package/build/domains/registry/mcpToolSchemas.js +52 -0
- package/build/domains/registry/mcpToolSchemas.js.map +1 -0
- package/build/domains/registry/searchFiltering.d.ts +48 -0
- package/build/domains/registry/searchFiltering.d.ts.map +1 -0
- package/build/domains/registry/searchFiltering.js +201 -0
- package/build/domains/registry/searchFiltering.js.map +1 -0
- package/build/domains/registry/types.d.ts +204 -0
- package/build/domains/registry/types.d.ts.map +1 -0
- package/build/domains/registry/types.js +5 -0
- package/build/domains/registry/types.js.map +1 -0
- package/build/index.js +2 -0
- package/build/index.js.map +1 -1
- package/build/transport/http/restorableStreamableTransport.d.ts +52 -0
- package/build/transport/http/restorableStreamableTransport.d.ts.map +1 -0
- package/build/transport/http/restorableStreamableTransport.js +68 -0
- package/build/transport/http/restorableStreamableTransport.js.map +1 -0
- 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 +113 -30
- package/build/transport/http/routes/streamableHttpRoutes.js.map +1 -1
- package/build/transport/http/server.d.ts +2 -0
- package/build/transport/http/server.d.ts.map +1 -1
- package/build/transport/http/server.js +10 -2
- package/build/transport/http/server.js.map +1 -1
- package/build/transport/http/storage/streamableSessionRepository.d.ts +57 -0
- package/build/transport/http/storage/streamableSessionRepository.d.ts.map +1 -0
- package/build/transport/http/storage/streamableSessionRepository.js +156 -0
- package/build/transport/http/storage/streamableSessionRepository.js.map +1 -0
- package/package.json +2 -1
|
@@ -1,12 +1,68 @@
|
|
|
1
1
|
import { randomUUID } from 'node:crypto';
|
|
2
2
|
import { StreamableHTTPServerTransport } from '@modelcontextprotocol/sdk/server/streamableHttp.js';
|
|
3
3
|
import { ErrorCode } from '@modelcontextprotocol/sdk/types.js';
|
|
4
|
-
import { STREAMABLE_HTTP_ENDPOINT } from '../../../constants.js';
|
|
4
|
+
import { AUTH_CONFIG, STREAMABLE_HTTP_ENDPOINT } from '../../../constants.js';
|
|
5
5
|
import { ServerStatus } from '../../../core/types/index.js';
|
|
6
6
|
import logger from '../../../logger/logger.js';
|
|
7
7
|
import { getPresetName, getTagExpression, getTagFilterMode, getTagQuery, getValidatedTags, } from '../../../transport/http/middlewares/scopeAuthMiddleware.js';
|
|
8
8
|
import tagsExtractor from '../../../transport/http/middlewares/tagsExtractor.js';
|
|
9
|
-
|
|
9
|
+
import { RestorableStreamableHTTPServerTransport } from '../../../transport/http/restorableStreamableTransport.js';
|
|
10
|
+
/**
|
|
11
|
+
* Helper function to restore a streamable HTTP session from persistent storage
|
|
12
|
+
* Uses RestorableStreamableHTTPServerTransport | RestorableStreamableHTTPServerTransport wrapper for proper initialization handling
|
|
13
|
+
*/
|
|
14
|
+
async function restoreSession(sessionId, serverManager, sessionRepository, asyncOrchestrator) {
|
|
15
|
+
try {
|
|
16
|
+
// Try to retrieve session config from storage
|
|
17
|
+
const sessionData = sessionRepository.get(sessionId);
|
|
18
|
+
if (!sessionData) {
|
|
19
|
+
logger.debug(`No persisted session found for: ${sessionId}`);
|
|
20
|
+
return null;
|
|
21
|
+
}
|
|
22
|
+
const config = sessionData;
|
|
23
|
+
logger.info(`Restoring streamable session: ${sessionId}`);
|
|
24
|
+
// Create new transport with the original session ID using wrapper class
|
|
25
|
+
const transport = new RestorableStreamableHTTPServerTransport({
|
|
26
|
+
sessionIdGenerator: () => sessionId,
|
|
27
|
+
});
|
|
28
|
+
// Mark the transport as initialized for restored session
|
|
29
|
+
// The wrapper class safely handles the SDK's internal _initialized flag
|
|
30
|
+
transport.markAsInitialized();
|
|
31
|
+
transport.sessionId = sessionId;
|
|
32
|
+
// Reconnect with the original configuration
|
|
33
|
+
await serverManager.connectTransport(transport, sessionId, config);
|
|
34
|
+
// Initialize notifications for async loading if enabled
|
|
35
|
+
if (asyncOrchestrator) {
|
|
36
|
+
const inboundConnection = serverManager.getServer(sessionId);
|
|
37
|
+
if (inboundConnection) {
|
|
38
|
+
asyncOrchestrator.initializeNotifications(inboundConnection);
|
|
39
|
+
logger.debug(`Async loading notifications initialized for restored session ${sessionId}`);
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
// Set up handlers for the restored transport
|
|
43
|
+
transport.onclose = () => {
|
|
44
|
+
serverManager.disconnectTransport(sessionId);
|
|
45
|
+
sessionRepository.delete(sessionId);
|
|
46
|
+
};
|
|
47
|
+
transport.onerror = (error) => {
|
|
48
|
+
logger.error(`Streamable HTTP transport error for session ${sessionId}:`, error);
|
|
49
|
+
const server = serverManager.getServer(sessionId);
|
|
50
|
+
if (server) {
|
|
51
|
+
server.status = ServerStatus.Error;
|
|
52
|
+
server.lastError = error instanceof Error ? error : new Error(String(error));
|
|
53
|
+
}
|
|
54
|
+
};
|
|
55
|
+
// Update last accessed time with dual-trigger persistence
|
|
56
|
+
sessionRepository.updateAccess(sessionId);
|
|
57
|
+
logger.info(`Successfully restored streamable session: ${sessionId} (restored: ${transport.isRestored()})`);
|
|
58
|
+
return transport;
|
|
59
|
+
}
|
|
60
|
+
catch (error) {
|
|
61
|
+
logger.error(`Failed to restore streamable session ${sessionId}:`, error);
|
|
62
|
+
return null;
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
export function setupStreamableHttpRoutes(router, serverManager, sessionRepository, authMiddleware, availabilityMiddleware, asyncOrchestrator, customTemplate) {
|
|
10
66
|
const middlewares = [tagsExtractor, authMiddleware];
|
|
11
67
|
// Add availability middleware if provided
|
|
12
68
|
if (availabilityMiddleware) {
|
|
@@ -17,7 +73,7 @@ export function setupStreamableHttpRoutes(router, serverManager, authMiddleware,
|
|
|
17
73
|
let transport;
|
|
18
74
|
const sessionId = req.headers['mcp-session-id'];
|
|
19
75
|
if (!sessionId) {
|
|
20
|
-
const id = randomUUID();
|
|
76
|
+
const id = AUTH_CONFIG.SERVER.STREAMABLE_SESSION.ID_PREFIX + randomUUID();
|
|
21
77
|
transport = new StreamableHTTPServerTransport({
|
|
22
78
|
sessionIdGenerator: () => id,
|
|
23
79
|
});
|
|
@@ -27,7 +83,7 @@ export function setupStreamableHttpRoutes(router, serverManager, authMiddleware,
|
|
|
27
83
|
const tagFilterMode = getTagFilterMode(res);
|
|
28
84
|
const tagQuery = getTagQuery(res);
|
|
29
85
|
const presetName = getPresetName(res);
|
|
30
|
-
|
|
86
|
+
const config = {
|
|
31
87
|
tags,
|
|
32
88
|
tagExpression,
|
|
33
89
|
tagFilterMode,
|
|
@@ -35,7 +91,10 @@ export function setupStreamableHttpRoutes(router, serverManager, authMiddleware,
|
|
|
35
91
|
presetName,
|
|
36
92
|
enablePagination: req.query.pagination === 'true',
|
|
37
93
|
customTemplate,
|
|
38
|
-
}
|
|
94
|
+
};
|
|
95
|
+
await serverManager.connectTransport(transport, id, config);
|
|
96
|
+
// Persist session configuration for restoration
|
|
97
|
+
sessionRepository.create(id, config);
|
|
39
98
|
// Initialize notifications for async loading if enabled
|
|
40
99
|
if (asyncOrchestrator) {
|
|
41
100
|
const inboundConnection = serverManager.getServer(id);
|
|
@@ -46,7 +105,7 @@ export function setupStreamableHttpRoutes(router, serverManager, authMiddleware,
|
|
|
46
105
|
}
|
|
47
106
|
transport.onclose = () => {
|
|
48
107
|
serverManager.disconnectTransport(id);
|
|
49
|
-
|
|
108
|
+
sessionRepository.delete(id);
|
|
50
109
|
};
|
|
51
110
|
transport.onerror = (error) => {
|
|
52
111
|
logger.error(`Streamable HTTP transport error for session ${id}:`, error);
|
|
@@ -60,16 +119,24 @@ export function setupStreamableHttpRoutes(router, serverManager, authMiddleware,
|
|
|
60
119
|
else {
|
|
61
120
|
const existingTransport = serverManager.getTransport(sessionId);
|
|
62
121
|
if (!existingTransport) {
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
122
|
+
// Attempt to restore session from persistent storage
|
|
123
|
+
const restoredTransport = await restoreSession(sessionId, serverManager, sessionRepository, asyncOrchestrator);
|
|
124
|
+
if (!restoredTransport) {
|
|
125
|
+
res.status(404).json({
|
|
126
|
+
error: {
|
|
127
|
+
code: ErrorCode.InvalidParams,
|
|
128
|
+
message: 'No active streamable HTTP session found for the provided sessionId',
|
|
129
|
+
},
|
|
130
|
+
});
|
|
131
|
+
return;
|
|
132
|
+
}
|
|
133
|
+
transport = restoredTransport;
|
|
70
134
|
}
|
|
71
|
-
if (existingTransport instanceof StreamableHTTPServerTransport
|
|
135
|
+
else if (existingTransport instanceof StreamableHTTPServerTransport ||
|
|
136
|
+
existingTransport instanceof RestorableStreamableHTTPServerTransport) {
|
|
72
137
|
transport = existingTransport;
|
|
138
|
+
// Update last accessed time for active sessions with dual-trigger persistence
|
|
139
|
+
sessionRepository.updateAccess(sessionId);
|
|
73
140
|
}
|
|
74
141
|
else {
|
|
75
142
|
res.status(400).json({
|
|
@@ -100,15 +167,24 @@ export function setupStreamableHttpRoutes(router, serverManager, authMiddleware,
|
|
|
100
167
|
});
|
|
101
168
|
return;
|
|
102
169
|
}
|
|
103
|
-
|
|
170
|
+
let transport = serverManager.getTransport(sessionId);
|
|
104
171
|
if (!transport) {
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
172
|
+
// Attempt to restore session from persistent storage
|
|
173
|
+
const restoredTransport = await restoreSession(sessionId, serverManager, sessionRepository, asyncOrchestrator);
|
|
174
|
+
if (!restoredTransport) {
|
|
175
|
+
res.status(404).json({
|
|
176
|
+
error: {
|
|
177
|
+
code: ErrorCode.InvalidParams,
|
|
178
|
+
message: 'No active streamable HTTP session found for the provided sessionId',
|
|
179
|
+
},
|
|
180
|
+
});
|
|
181
|
+
return;
|
|
182
|
+
}
|
|
183
|
+
transport = restoredTransport;
|
|
184
|
+
}
|
|
185
|
+
else {
|
|
186
|
+
// Update last accessed time for active sessions with dual-trigger persistence
|
|
187
|
+
sessionRepository.updateAccess(sessionId);
|
|
112
188
|
}
|
|
113
189
|
await transport.handleRequest(req, res, req.body);
|
|
114
190
|
}
|
|
@@ -129,17 +205,24 @@ export function setupStreamableHttpRoutes(router, serverManager, authMiddleware,
|
|
|
129
205
|
});
|
|
130
206
|
return;
|
|
131
207
|
}
|
|
132
|
-
|
|
208
|
+
let transport = serverManager.getTransport(sessionId);
|
|
133
209
|
if (!transport) {
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
210
|
+
// Attempt to restore session from persistent storage
|
|
211
|
+
const restoredTransport = await restoreSession(sessionId, serverManager, sessionRepository, asyncOrchestrator);
|
|
212
|
+
if (!restoredTransport) {
|
|
213
|
+
res.status(404).json({
|
|
214
|
+
error: {
|
|
215
|
+
code: ErrorCode.InvalidParams,
|
|
216
|
+
message: 'No active streamable HTTP session found for the provided sessionId',
|
|
217
|
+
},
|
|
218
|
+
});
|
|
219
|
+
return;
|
|
220
|
+
}
|
|
221
|
+
transport = restoredTransport;
|
|
141
222
|
}
|
|
142
223
|
await transport.handleRequest(req, res);
|
|
224
|
+
// Delete session from storage after explicit delete request
|
|
225
|
+
sessionRepository.delete(sessionId);
|
|
143
226
|
}
|
|
144
227
|
catch (error) {
|
|
145
228
|
logger.error('Streamable HTTP error:', error);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"streamableHttpRoutes.js","sourceRoot":"","sources":["../../../../src/transport/http/routes/streamableHttpRoutes.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAEzC,OAAO,EAAE,6BAA6B,EAAE,MAAM,oDAAoD,CAAC;AACnG,OAAO,EAAE,SAAS,EAAE,MAAM,oCAAoC,CAAC;AAE/D,OAAO,EAAE,wBAAwB,EAAE,MAAM,mBAAmB,CAAC;
|
|
1
|
+
{"version":3,"file":"streamableHttpRoutes.js","sourceRoot":"","sources":["../../../../src/transport/http/routes/streamableHttpRoutes.ts"],"names":[],"mappings":"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"}
|
|
@@ -22,6 +22,7 @@ export declare class ExpressServer {
|
|
|
22
22
|
private oauthProvider;
|
|
23
23
|
private configManager;
|
|
24
24
|
private customTemplate?;
|
|
25
|
+
private streamableSessionRepository;
|
|
25
26
|
/**
|
|
26
27
|
* Creates a new ExpressServer instance.
|
|
27
28
|
*
|
|
@@ -73,6 +74,7 @@ export declare class ExpressServer {
|
|
|
73
74
|
* - Authentication manager shutdown
|
|
74
75
|
* - Session cleanup
|
|
75
76
|
* - Timer cleanup
|
|
77
|
+
* - Streamable session repository flush
|
|
76
78
|
*/
|
|
77
79
|
shutdown(): void;
|
|
78
80
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../../../src/transport/http/server.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../../../src/transport/http/server.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,wBAAwB,EAAE,MAAM,oDAAoD,CAAC;AAC9F,OAAO,EAAE,iBAAiB,EAAE,MAAM,wCAAwC,CAAC;AAE3E,OAAO,EAAE,aAAa,EAAE,MAAM,mCAAmC,CAAC;AAmBlE;;;;;;;;;;;;GAYG;AACH,qBAAa,aAAa;IACxB,OAAO,CAAC,GAAG,CAAsB;IACjC,OAAO,CAAC,aAAa,CAAgB;IACrC,OAAO,CAAC,cAAc,CAAC,CAAoB;IAC3C,OAAO,CAAC,iBAAiB,CAAC,CAA2B;IACrD,OAAO,CAAC,aAAa,CAAyB;IAC9C,OAAO,CAAC,aAAa,CAAqB;IAC1C,OAAO,CAAC,cAAc,CAAC,CAAS;IAChC,OAAO,CAAC,2BAA2B,CAA8B;IAEjE;;;;;;;;;;OAUG;gBAED,aAAa,EAAE,aAAa,EAC5B,cAAc,CAAC,EAAE,iBAAiB,EAClC,iBAAiB,CAAC,EAAE,wBAAwB,EAC5C,cAAc,CAAC,EAAE,MAAM;IAyBzB;;;;;;;;;OASG;IACH,OAAO,CAAC,eAAe;IAiBvB;;;;;;;;;OASG;IACH,OAAO,CAAC,WAAW;IAkFnB;;;;;;;;OAQG;IACI,KAAK,IAAI,IAAI;IASpB;;;;;;;;OAQG;IACI,QAAQ,IAAI,IAAI;CAIxB"}
|
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
import { mcpAuthRouter } from '@modelcontextprotocol/sdk/server/auth/router.js';
|
|
2
2
|
import { SDKOAuthServerProvider } from '../../auth/sdkOAuthServerProvider.js';
|
|
3
|
+
import { FileStorageService } from '../../auth/storage/fileStorageService.js';
|
|
3
4
|
import { McpConfigManager } from '../../config/mcpConfigManager.js';
|
|
4
|
-
import { RATE_LIMIT_CONFIG } from '../../constants.js';
|
|
5
|
+
import { RATE_LIMIT_CONFIG, STORAGE_SUBDIRS } from '../../constants.js';
|
|
5
6
|
import { AgentConfigManager } from '../../core/server/agentConfig.js';
|
|
6
7
|
import logger from '../../logger/logger.js';
|
|
7
8
|
import bodyParser from 'body-parser';
|
|
@@ -16,6 +17,7 @@ import createHealthRoutes from './routes/healthRoutes.js';
|
|
|
16
17
|
import createOAuthRoutes from './routes/oauthRoutes.js';
|
|
17
18
|
import { setupSseRoutes } from './routes/sseRoutes.js';
|
|
18
19
|
import { setupStreamableHttpRoutes } from './routes/streamableHttpRoutes.js';
|
|
20
|
+
import { StreamableSessionRepository } from './storage/streamableSessionRepository.js';
|
|
19
21
|
/**
|
|
20
22
|
* ExpressServer orchestrates the HTTP/SSE transport layer for the MCP server.
|
|
21
23
|
*
|
|
@@ -37,6 +39,7 @@ export class ExpressServer {
|
|
|
37
39
|
oauthProvider;
|
|
38
40
|
configManager;
|
|
39
41
|
customTemplate;
|
|
42
|
+
streamableSessionRepository;
|
|
40
43
|
/**
|
|
41
44
|
* Creates a new ExpressServer instance.
|
|
42
45
|
*
|
|
@@ -60,6 +63,9 @@ export class ExpressServer {
|
|
|
60
63
|
// Initialize OAuth provider with custom session storage path if configured
|
|
61
64
|
const sessionStoragePath = this.configManager.getSessionStoragePath();
|
|
62
65
|
this.oauthProvider = new SDKOAuthServerProvider(sessionStoragePath);
|
|
66
|
+
// Initialize streamable session repository with 'transport' subdirectory
|
|
67
|
+
const fileStorageService = new FileStorageService(sessionStoragePath, STORAGE_SUBDIRS.TRANSPORT);
|
|
68
|
+
this.streamableSessionRepository = new StreamableSessionRepository(fileStorageService);
|
|
63
69
|
this.setupMiddleware();
|
|
64
70
|
this.setupRoutes();
|
|
65
71
|
}
|
|
@@ -142,7 +148,7 @@ export class ExpressServer {
|
|
|
142
148
|
allowPartialAvailability: true,
|
|
143
149
|
includeOAuthServers: false,
|
|
144
150
|
});
|
|
145
|
-
setupStreamableHttpRoutes(router, this.serverManager, scopeAuthMiddleware, availabilityMiddleware, this.asyncOrchestrator, this.customTemplate);
|
|
151
|
+
setupStreamableHttpRoutes(router, this.serverManager, this.streamableSessionRepository, scopeAuthMiddleware, availabilityMiddleware, this.asyncOrchestrator, this.customTemplate);
|
|
146
152
|
setupSseRoutes(router, this.serverManager, scopeAuthMiddleware, availabilityMiddleware, this.asyncOrchestrator, this.customTemplate);
|
|
147
153
|
this.app.use(router);
|
|
148
154
|
// Log authentication status
|
|
@@ -177,9 +183,11 @@ export class ExpressServer {
|
|
|
177
183
|
* - Authentication manager shutdown
|
|
178
184
|
* - Session cleanup
|
|
179
185
|
* - Timer cleanup
|
|
186
|
+
* - Streamable session repository flush
|
|
180
187
|
*/
|
|
181
188
|
shutdown() {
|
|
182
189
|
this.oauthProvider.shutdown();
|
|
190
|
+
this.streamableSessionRepository.stopPeriodicFlush();
|
|
183
191
|
}
|
|
184
192
|
}
|
|
185
193
|
//# sourceMappingURL=server.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"server.js","sourceRoot":"","sources":["../../../src/transport/http/server.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,iDAAiD,CAAC;AAEhF,OAAO,EAAE,sBAAsB,EAAE,MAAM,qCAAqC,CAAC;AAC7E,OAAO,EAAE,gBAAgB,EAAE,MAAM,iCAAiC,CAAC;AACnE,OAAO,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;
|
|
1
|
+
{"version":3,"file":"server.js","sourceRoot":"","sources":["../../../src/transport/http/server.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
import { FileStorageService } from '../../../auth/storage/fileStorageService.js';
|
|
2
|
+
import { InboundConnectionConfig } from '../../../core/types/index.js';
|
|
3
|
+
/**
|
|
4
|
+
* Repository for streamable HTTP session operations
|
|
5
|
+
*
|
|
6
|
+
* Manages session persistence with automatic expiration and cleanup.
|
|
7
|
+
* Sessions store configuration needed to restore connections after server restart.
|
|
8
|
+
*
|
|
9
|
+
* Uses Redis-style dual-trigger persistence for performance:
|
|
10
|
+
* - Persists after N requests OR M minutes, whichever comes first
|
|
11
|
+
* - Background flush every 60 seconds for dirty sessions
|
|
12
|
+
*/
|
|
13
|
+
export declare class StreamableSessionRepository {
|
|
14
|
+
private storage;
|
|
15
|
+
private lastPersistTimes;
|
|
16
|
+
private lastAccessTimes;
|
|
17
|
+
private requestCounts;
|
|
18
|
+
private dirtySessionIds;
|
|
19
|
+
private flushInterval;
|
|
20
|
+
constructor(storage: FileStorageService);
|
|
21
|
+
/**
|
|
22
|
+
* Creates a new streamable session with the given ID and configuration
|
|
23
|
+
*/
|
|
24
|
+
create(sessionId: string, config: InboundConnectionConfig): void;
|
|
25
|
+
/**
|
|
26
|
+
* Retrieves a session by ID and returns the configuration
|
|
27
|
+
*/
|
|
28
|
+
get(sessionId: string): InboundConnectionConfig | null;
|
|
29
|
+
/**
|
|
30
|
+
* Updates the last accessed timestamp for a session with dual-trigger persistence
|
|
31
|
+
*
|
|
32
|
+
* Uses Redis-style save policy: persists after N requests OR M minutes, whichever comes first.
|
|
33
|
+
* Always updates in-memory timestamps to prevent data loss.
|
|
34
|
+
*/
|
|
35
|
+
updateAccess(sessionId: string): void;
|
|
36
|
+
/**
|
|
37
|
+
* Deletes a session by ID
|
|
38
|
+
*/
|
|
39
|
+
delete(sessionId: string): boolean;
|
|
40
|
+
/**
|
|
41
|
+
* Persists session access to disk and resets counters
|
|
42
|
+
*/
|
|
43
|
+
private persistSessionAccess;
|
|
44
|
+
/**
|
|
45
|
+
* Flushes all dirty sessions to disk
|
|
46
|
+
*/
|
|
47
|
+
private flushDirtySessions;
|
|
48
|
+
/**
|
|
49
|
+
* Starts periodic background flush of dirty sessions
|
|
50
|
+
*/
|
|
51
|
+
private startPeriodicFlush;
|
|
52
|
+
/**
|
|
53
|
+
* Stops periodic flush and performs final flush of all dirty sessions
|
|
54
|
+
*/
|
|
55
|
+
stopPeriodicFlush(): void;
|
|
56
|
+
}
|
|
57
|
+
//# sourceMappingURL=streamableSessionRepository.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"streamableSessionRepository.d.ts","sourceRoot":"","sources":["../../../../src/transport/http/storage/streamableSessionRepository.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,kBAAkB,EAAE,MAAM,yCAAyC,CAAC;AAE7E,OAAO,EAAE,uBAAuB,EAAE,MAAM,0BAA0B,CAAC;AAGnE;;;;;;;;;GASG;AACH,qBAAa,2BAA2B;IAU1B,OAAO,CAAC,OAAO;IAR3B,OAAO,CAAC,gBAAgB,CAA6B;IACrD,OAAO,CAAC,eAAe,CAA6B;IACpD,OAAO,CAAC,aAAa,CAA6B;IAClD,OAAO,CAAC,eAAe,CAAqB;IAG5C,OAAO,CAAC,aAAa,CAA+C;gBAEhD,OAAO,EAAE,kBAAkB;IAI/C;;OAEG;IACH,MAAM,CAAC,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,uBAAuB,GAAG,IAAI;IAkBhE;;OAEG;IACH,GAAG,CAAC,SAAS,EAAE,MAAM,GAAG,uBAAuB,GAAG,IAAI;IAwBtD;;;;;OAKG;IACH,YAAY,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI;IAmBrC;;OAEG;IACH,MAAM,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO;IAclC;;OAEG;IACH,OAAO,CAAC,oBAAoB;IAqB5B;;OAEG;IACH,OAAO,CAAC,kBAAkB;IAiB1B;;OAEG;IACH,OAAO,CAAC,kBAAkB;IAO1B;;OAEG;IACI,iBAAiB,IAAI,IAAI;CAUjC"}
|
|
@@ -0,0 +1,156 @@
|
|
|
1
|
+
import { AUTH_CONFIG } from '../../../constants.js';
|
|
2
|
+
import logger from '../../../logger/logger.js';
|
|
3
|
+
/**
|
|
4
|
+
* Repository for streamable HTTP session operations
|
|
5
|
+
*
|
|
6
|
+
* Manages session persistence with automatic expiration and cleanup.
|
|
7
|
+
* Sessions store configuration needed to restore connections after server restart.
|
|
8
|
+
*
|
|
9
|
+
* Uses Redis-style dual-trigger persistence for performance:
|
|
10
|
+
* - Persists after N requests OR M minutes, whichever comes first
|
|
11
|
+
* - Background flush every 60 seconds for dirty sessions
|
|
12
|
+
*/
|
|
13
|
+
export class StreamableSessionRepository {
|
|
14
|
+
storage;
|
|
15
|
+
// Per-session tracking for dual-trigger persistence
|
|
16
|
+
lastPersistTimes = new Map();
|
|
17
|
+
lastAccessTimes = new Map();
|
|
18
|
+
requestCounts = new Map();
|
|
19
|
+
dirtySessionIds = new Set();
|
|
20
|
+
// Background flush
|
|
21
|
+
flushInterval = null;
|
|
22
|
+
constructor(storage) {
|
|
23
|
+
this.storage = storage;
|
|
24
|
+
this.startPeriodicFlush();
|
|
25
|
+
}
|
|
26
|
+
/**
|
|
27
|
+
* Creates a new streamable session with the given ID and configuration
|
|
28
|
+
*/
|
|
29
|
+
create(sessionId, config) {
|
|
30
|
+
const sessionData = {
|
|
31
|
+
tags: config.tags,
|
|
32
|
+
tagExpression: config.tagExpression ? JSON.stringify(config.tagExpression) : undefined,
|
|
33
|
+
tagQuery: config.tagQuery ? JSON.stringify(config.tagQuery) : undefined,
|
|
34
|
+
tagFilterMode: config.tagFilterMode,
|
|
35
|
+
presetName: config.presetName,
|
|
36
|
+
enablePagination: config.enablePagination,
|
|
37
|
+
customTemplate: config.customTemplate,
|
|
38
|
+
expires: Date.now() + AUTH_CONFIG.SERVER.STREAMABLE_SESSION.TTL_MS,
|
|
39
|
+
createdAt: Date.now(),
|
|
40
|
+
lastAccessedAt: Date.now(),
|
|
41
|
+
};
|
|
42
|
+
this.storage.writeData(AUTH_CONFIG.SERVER.STREAMABLE_SESSION.FILE_PREFIX, sessionId, sessionData);
|
|
43
|
+
logger.info(`Created streamable session: ${sessionId}`);
|
|
44
|
+
}
|
|
45
|
+
/**
|
|
46
|
+
* Retrieves a session by ID and returns the configuration
|
|
47
|
+
*/
|
|
48
|
+
get(sessionId) {
|
|
49
|
+
const sessionData = this.storage.readData(AUTH_CONFIG.SERVER.STREAMABLE_SESSION.FILE_PREFIX, sessionId);
|
|
50
|
+
if (!sessionData) {
|
|
51
|
+
return null;
|
|
52
|
+
}
|
|
53
|
+
// Parse JSON fields back to objects
|
|
54
|
+
const config = {
|
|
55
|
+
tags: sessionData.tags,
|
|
56
|
+
tagExpression: sessionData.tagExpression ? JSON.parse(sessionData.tagExpression) : undefined,
|
|
57
|
+
tagQuery: sessionData.tagQuery ? JSON.parse(sessionData.tagQuery) : undefined,
|
|
58
|
+
tagFilterMode: sessionData.tagFilterMode,
|
|
59
|
+
presetName: sessionData.presetName,
|
|
60
|
+
enablePagination: sessionData.enablePagination,
|
|
61
|
+
customTemplate: sessionData.customTemplate,
|
|
62
|
+
};
|
|
63
|
+
return config;
|
|
64
|
+
}
|
|
65
|
+
/**
|
|
66
|
+
* Updates the last accessed timestamp for a session with dual-trigger persistence
|
|
67
|
+
*
|
|
68
|
+
* Uses Redis-style save policy: persists after N requests OR M minutes, whichever comes first.
|
|
69
|
+
* Always updates in-memory timestamps to prevent data loss.
|
|
70
|
+
*/
|
|
71
|
+
updateAccess(sessionId) {
|
|
72
|
+
const now = Date.now();
|
|
73
|
+
// Always update in-memory timestamps
|
|
74
|
+
this.lastAccessTimes.set(sessionId, now);
|
|
75
|
+
const count = (this.requestCounts.get(sessionId) || 0) + 1;
|
|
76
|
+
this.requestCounts.set(sessionId, count);
|
|
77
|
+
this.dirtySessionIds.add(sessionId);
|
|
78
|
+
// Check dual triggers: N requests OR M minutes
|
|
79
|
+
const lastPersist = this.lastPersistTimes.get(sessionId) || 0;
|
|
80
|
+
const timeSince = now - lastPersist;
|
|
81
|
+
const policy = AUTH_CONFIG.SERVER.STREAMABLE_SESSION.SAVE_POLICY;
|
|
82
|
+
if (count >= policy.REQUESTS || timeSince >= policy.INTERVAL_MS) {
|
|
83
|
+
this.persistSessionAccess(sessionId, now);
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
/**
|
|
87
|
+
* Deletes a session by ID
|
|
88
|
+
*/
|
|
89
|
+
delete(sessionId) {
|
|
90
|
+
// Clean up in-memory tracking
|
|
91
|
+
this.lastPersistTimes.delete(sessionId);
|
|
92
|
+
this.lastAccessTimes.delete(sessionId);
|
|
93
|
+
this.requestCounts.delete(sessionId);
|
|
94
|
+
this.dirtySessionIds.delete(sessionId);
|
|
95
|
+
const result = this.storage.deleteData(AUTH_CONFIG.SERVER.STREAMABLE_SESSION.FILE_PREFIX, sessionId);
|
|
96
|
+
if (result) {
|
|
97
|
+
logger.info(`Deleted streamable session: ${sessionId}`);
|
|
98
|
+
}
|
|
99
|
+
return result;
|
|
100
|
+
}
|
|
101
|
+
/**
|
|
102
|
+
* Persists session access to disk and resets counters
|
|
103
|
+
*/
|
|
104
|
+
persistSessionAccess(sessionId, accessTime) {
|
|
105
|
+
const sessionData = this.storage.readData(AUTH_CONFIG.SERVER.STREAMABLE_SESSION.FILE_PREFIX, sessionId);
|
|
106
|
+
if (sessionData) {
|
|
107
|
+
sessionData.lastAccessedAt = accessTime;
|
|
108
|
+
// Extend expiration on access
|
|
109
|
+
sessionData.expires = accessTime + AUTH_CONFIG.SERVER.STREAMABLE_SESSION.TTL_MS;
|
|
110
|
+
this.storage.writeData(AUTH_CONFIG.SERVER.STREAMABLE_SESSION.FILE_PREFIX, sessionId, sessionData);
|
|
111
|
+
// Reset counters and update persist time
|
|
112
|
+
this.lastPersistTimes.set(sessionId, accessTime);
|
|
113
|
+
this.requestCounts.set(sessionId, 0);
|
|
114
|
+
this.dirtySessionIds.delete(sessionId);
|
|
115
|
+
logger.debug(`Persisted access time for streamable session: ${sessionId}`);
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
/**
|
|
119
|
+
* Flushes all dirty sessions to disk
|
|
120
|
+
*/
|
|
121
|
+
flushDirtySessions() {
|
|
122
|
+
if (this.dirtySessionIds.size === 0) {
|
|
123
|
+
return;
|
|
124
|
+
}
|
|
125
|
+
const sessionsToFlush = Array.from(this.dirtySessionIds);
|
|
126
|
+
for (const sessionId of sessionsToFlush) {
|
|
127
|
+
const lastAccess = this.lastAccessTimes.get(sessionId);
|
|
128
|
+
if (lastAccess) {
|
|
129
|
+
this.persistSessionAccess(sessionId, lastAccess);
|
|
130
|
+
}
|
|
131
|
+
}
|
|
132
|
+
logger.debug(`Flushed ${sessionsToFlush.length} dirty sessions`);
|
|
133
|
+
}
|
|
134
|
+
/**
|
|
135
|
+
* Starts periodic background flush of dirty sessions
|
|
136
|
+
*/
|
|
137
|
+
startPeriodicFlush() {
|
|
138
|
+
const policy = AUTH_CONFIG.SERVER.STREAMABLE_SESSION.SAVE_POLICY;
|
|
139
|
+
this.flushInterval = setInterval(() => {
|
|
140
|
+
this.flushDirtySessions();
|
|
141
|
+
}, policy.FLUSH_INTERVAL_MS);
|
|
142
|
+
}
|
|
143
|
+
/**
|
|
144
|
+
* Stops periodic flush and performs final flush of all dirty sessions
|
|
145
|
+
*/
|
|
146
|
+
stopPeriodicFlush() {
|
|
147
|
+
if (this.flushInterval) {
|
|
148
|
+
clearInterval(this.flushInterval);
|
|
149
|
+
this.flushInterval = null;
|
|
150
|
+
}
|
|
151
|
+
// Final flush of all dirty sessions
|
|
152
|
+
this.flushDirtySessions();
|
|
153
|
+
logger.info('Stopped periodic flush and flushed remaining dirty sessions');
|
|
154
|
+
}
|
|
155
|
+
}
|
|
156
|
+
//# sourceMappingURL=streamableSessionRepository.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"streamableSessionRepository.js","sourceRoot":"","sources":["../../../../src/transport/http/storage/streamableSessionRepository.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@1mcp/agent",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.26.0",
|
|
4
4
|
"description": "One MCP server to aggregate them all - A unified Model Context Protocol server implementation",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"mcp",
|
|
@@ -62,6 +62,7 @@
|
|
|
62
62
|
"express": "^5.1.0",
|
|
63
63
|
"express-rate-limit": "^7.5.1",
|
|
64
64
|
"handlebars": "^4.7.8",
|
|
65
|
+
"https-proxy-agent": "^7.0.6",
|
|
65
66
|
"json5": "^2.2.3",
|
|
66
67
|
"prompts": "^2.4.2",
|
|
67
68
|
"source-map-support": "^0.5.21",
|