@vess-id/vess 0.4.0 → 0.5.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/dist/adapter/mcp/http-transport.d.ts +9 -3
- package/dist/adapter/mcp/http-transport.d.ts.map +1 -1
- package/dist/adapter/mcp/http-transport.js +85 -15
- package/dist/adapter/mcp/http-transport.js.map +1 -1
- package/dist/config/constants.d.ts +8 -0
- package/dist/config/constants.d.ts.map +1 -1
- package/dist/config/constants.js +9 -1
- package/dist/config/constants.js.map +1 -1
- package/package.json +1 -1
|
@@ -19,6 +19,13 @@ export interface McpServerFactoryResult {
|
|
|
19
19
|
version: string;
|
|
20
20
|
}) => void;
|
|
21
21
|
}
|
|
22
|
+
export interface HttpTransportOptions {
|
|
23
|
+
healthCheck?: () => Promise<HealthStatus> | HealthStatus;
|
|
24
|
+
sessionTimeoutMs?: number;
|
|
25
|
+
maxSessions?: number;
|
|
26
|
+
/** Reaper sweep interval in ms (default: 60000). Exposed for testing. */
|
|
27
|
+
reaperIntervalMs?: number;
|
|
28
|
+
}
|
|
22
29
|
/**
|
|
23
30
|
* Start HTTP transport for daemon mode.
|
|
24
31
|
*
|
|
@@ -26,9 +33,8 @@ export interface McpServerFactoryResult {
|
|
|
26
33
|
* Can return just an McpServer (backward compat) or { server, onClientInfo }.
|
|
27
34
|
* @param port Port to bind to (default: 3100)
|
|
28
35
|
* @param host Host to bind to (default: 127.0.0.1, localhost only for security)
|
|
36
|
+
* @param options Session lifecycle and health check options
|
|
29
37
|
* @returns Handle with close() for graceful shutdown
|
|
30
38
|
*/
|
|
31
|
-
export declare function startHttpTransport(createMcpServerFn: () => McpServer | McpServerFactoryResult | Promise<McpServer | McpServerFactoryResult>, port?: number, host?: string, options?:
|
|
32
|
-
healthCheck?: () => Promise<HealthStatus> | HealthStatus;
|
|
33
|
-
}): Promise<HttpTransportHandle>;
|
|
39
|
+
export declare function startHttpTransport(createMcpServerFn: () => McpServer | McpServerFactoryResult | Promise<McpServer | McpServerFactoryResult>, port?: number, host?: string, options?: HttpTransportOptions): Promise<HttpTransportHandle>;
|
|
34
40
|
//# sourceMappingURL=http-transport.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"http-transport.d.ts","sourceRoot":"","sources":["../../../src/adapter/mcp/http-transport.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"http-transport.d.ts","sourceRoot":"","sources":["../../../src/adapter/mcp/http-transport.ts"],"names":[],"mappings":"AAiBA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAA;AAWnE,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,OAAO,CAAA;IACb,EAAE,EAAE,OAAO,CAAA;IACX,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAA;IACvB,MAAM,EAAE,MAAM,CAAA;CACf;AAED,MAAM,WAAW,mBAAmB;IAClC,KAAK,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAA;IAC1B,IAAI,EAAE,MAAM,CAAA;IACZ,IAAI,EAAE,MAAM,CAAA;IACZ,YAAY,EAAE,MAAM,MAAM,CAAA;CAC3B;AAED,kGAAkG;AAClG,MAAM,WAAW,sBAAsB;IACrC,MAAM,EAAE,SAAS,CAAA;IACjB,YAAY,CAAC,EAAE,CAAC,IAAI,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,KAAK,IAAI,CAAA;CACjE;AAQD,MAAM,WAAW,oBAAoB;IACnC,WAAW,CAAC,EAAE,MAAM,OAAO,CAAC,YAAY,CAAC,GAAG,YAAY,CAAA;IACxD,gBAAgB,CAAC,EAAE,MAAM,CAAA;IACzB,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,yEAAyE;IACzE,gBAAgB,CAAC,EAAE,MAAM,CAAA;CAC1B;AAmBD;;;;;;;;;GASG;AACH,wBAAsB,kBAAkB,CACtC,iBAAiB,EAAE,MAAM,SAAS,GAAG,sBAAsB,GAAG,OAAO,CAAC,SAAS,GAAG,sBAAsB,CAAC,EACzG,IAAI,GAAE,MAA4B,EAClC,IAAI,GAAE,MAAoB,EAC1B,OAAO,CAAC,EAAE,oBAAoB,GAC7B,OAAO,CAAC,mBAAmB,CAAC,CAuL9B"}
|
|
@@ -8,6 +8,12 @@ exports.startHttpTransport = startHttpTransport;
|
|
|
8
8
|
* its own transport + McpServer instance — a single transport does NOT
|
|
9
9
|
* support concurrent clients.
|
|
10
10
|
*
|
|
11
|
+
* Session lifecycle:
|
|
12
|
+
* - Sessions are created on first POST /mcp without mcp-session-id header
|
|
13
|
+
* - lastActivity is updated on every request to prevent idle reaping
|
|
14
|
+
* - A periodic reaper closes sessions idle longer than sessionTimeoutMs
|
|
15
|
+
* - Max concurrent sessions are capped; excess connections get 503
|
|
16
|
+
*
|
|
11
17
|
* Security: binds to 127.0.0.1 only (localhost). No authentication on HTTP
|
|
12
18
|
* endpoint — same trust model as stdio (any local process can connect).
|
|
13
19
|
*/
|
|
@@ -15,6 +21,17 @@ const streamableHttp_js_1 = require("@modelcontextprotocol/sdk/server/streamable
|
|
|
15
21
|
const node_http_1 = require("node:http");
|
|
16
22
|
const node_crypto_1 = require("node:crypto");
|
|
17
23
|
const constants_1 = require("../../config/constants");
|
|
24
|
+
function shortId(sid) {
|
|
25
|
+
return sid.slice(0, 8);
|
|
26
|
+
}
|
|
27
|
+
/** Close with a timeout to prevent hanging on stuck transports/servers. */
|
|
28
|
+
const CLOSE_TIMEOUT_MS = 5_000;
|
|
29
|
+
function closeWithTimeout(closeable) {
|
|
30
|
+
return new Promise((resolve, reject) => {
|
|
31
|
+
const timer = setTimeout(() => reject(new Error('close timed out')), CLOSE_TIMEOUT_MS);
|
|
32
|
+
Promise.resolve(closeable.close()).then(() => { clearTimeout(timer); resolve(); }, (err) => { clearTimeout(timer); reject(err); });
|
|
33
|
+
});
|
|
34
|
+
}
|
|
18
35
|
/**
|
|
19
36
|
* Start HTTP transport for daemon mode.
|
|
20
37
|
*
|
|
@@ -22,26 +39,50 @@ const constants_1 = require("../../config/constants");
|
|
|
22
39
|
* Can return just an McpServer (backward compat) or { server, onClientInfo }.
|
|
23
40
|
* @param port Port to bind to (default: 3100)
|
|
24
41
|
* @param host Host to bind to (default: 127.0.0.1, localhost only for security)
|
|
42
|
+
* @param options Session lifecycle and health check options
|
|
25
43
|
* @returns Handle with close() for graceful shutdown
|
|
26
44
|
*/
|
|
27
45
|
async function startHttpTransport(createMcpServerFn, port = constants_1.DEFAULT_DAEMON_PORT, host = '127.0.0.1', options) {
|
|
28
46
|
const sessions = new Map();
|
|
47
|
+
const sessionTimeoutMs = options?.sessionTimeoutMs ?? constants_1.DEFAULT_SESSION_TIMEOUT_MS;
|
|
48
|
+
const maxSessions = options?.maxSessions ?? constants_1.DEFAULT_MAX_SESSIONS;
|
|
49
|
+
const reaperIntervalMs = options?.reaperIntervalMs ?? constants_1.DEFAULT_REAPER_INTERVAL_MS;
|
|
50
|
+
// Periodic reaper: evict sessions idle longer than timeout.
|
|
51
|
+
// Delete from Map first (synchronous), then close resources (async).
|
|
52
|
+
// This prevents routing requests to a session mid-close.
|
|
53
|
+
const reaperInterval = setInterval(async () => {
|
|
54
|
+
const now = Date.now();
|
|
55
|
+
for (const [sid, entry] of sessions) {
|
|
56
|
+
if (now - entry.lastActivity > sessionTimeoutMs) {
|
|
57
|
+
const elapsed = Math.round((now - entry.lastActivity) / 1000);
|
|
58
|
+
sessions.delete(sid);
|
|
59
|
+
process.stderr.write(`[agentd] session ${shortId(sid)}… timed out after ${elapsed}s, closing\n`);
|
|
60
|
+
try {
|
|
61
|
+
await closeWithTimeout(entry.transport);
|
|
62
|
+
await closeWithTimeout(entry.server);
|
|
63
|
+
}
|
|
64
|
+
catch { /* best-effort cleanup — includes close timeout */ }
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
}, reaperIntervalMs);
|
|
68
|
+
reaperInterval.unref();
|
|
29
69
|
const httpServer = (0, node_http_1.createServer)(async (req, res) => {
|
|
30
70
|
// Health endpoint
|
|
31
71
|
if (req.method === 'GET' && req.url === '/health') {
|
|
32
72
|
res.writeHead(200, { 'Content-Type': 'application/json' });
|
|
73
|
+
const sessionsDegraded = sessions.size >= constants_1.SESSION_DEGRADED_THRESHOLD;
|
|
33
74
|
if (options?.healthCheck) {
|
|
34
75
|
try {
|
|
35
76
|
const extra = await options.healthCheck();
|
|
36
|
-
const allOk = extra.auth && extra.db;
|
|
37
|
-
res.end(JSON.stringify({ status: allOk ? 'ok' : 'degraded', sessions: sessions.size, ...extra }));
|
|
77
|
+
const allOk = extra.auth && extra.db && !sessionsDegraded;
|
|
78
|
+
res.end(JSON.stringify({ status: allOk ? 'ok' : 'degraded', sessions: sessions.size, maxSessions, ...extra }));
|
|
38
79
|
}
|
|
39
80
|
catch {
|
|
40
|
-
res.end(JSON.stringify({ status: 'degraded', sessions: sessions.size, error: 'health check failed' }));
|
|
81
|
+
res.end(JSON.stringify({ status: 'degraded', sessions: sessions.size, maxSessions, error: 'health check failed' }));
|
|
41
82
|
}
|
|
42
83
|
}
|
|
43
84
|
else {
|
|
44
|
-
res.end(JSON.stringify({ status: 'ok', sessions: sessions.size }));
|
|
85
|
+
res.end(JSON.stringify({ status: sessionsDegraded ? 'degraded' : 'ok', sessions: sessions.size, maxSessions }));
|
|
45
86
|
}
|
|
46
87
|
return;
|
|
47
88
|
}
|
|
@@ -54,11 +95,26 @@ async function startHttpTransport(createMcpServerFn, port = constants_1.DEFAULT_
|
|
|
54
95
|
// Extract session ID from header (MCP protocol)
|
|
55
96
|
const sessionId = req.headers['mcp-session-id'];
|
|
56
97
|
if (sessionId && sessions.has(sessionId)) {
|
|
57
|
-
// Existing session — route to its transport
|
|
98
|
+
// Existing session — route to its transport, update activity timestamp
|
|
58
99
|
const session = sessions.get(sessionId);
|
|
100
|
+
session.lastActivity = Date.now();
|
|
59
101
|
await session.transport.handleRequest(req, res);
|
|
60
102
|
}
|
|
61
103
|
else {
|
|
104
|
+
// Max sessions cap — reject if at limit
|
|
105
|
+
if (sessions.size >= maxSessions) {
|
|
106
|
+
process.stderr.write(`[agentd] max sessions (${maxSessions}) reached, rejecting\n`);
|
|
107
|
+
res.writeHead(503, {
|
|
108
|
+
'Content-Type': 'application/json',
|
|
109
|
+
'Retry-After': '60',
|
|
110
|
+
});
|
|
111
|
+
res.end(JSON.stringify({
|
|
112
|
+
jsonrpc: '2.0',
|
|
113
|
+
error: { code: -32000, message: 'Too many sessions' },
|
|
114
|
+
id: null,
|
|
115
|
+
}));
|
|
116
|
+
return;
|
|
117
|
+
}
|
|
62
118
|
// New session — create transport + server instance
|
|
63
119
|
let transport;
|
|
64
120
|
try {
|
|
@@ -78,12 +134,14 @@ async function startHttpTransport(createMcpServerFn, port = constants_1.DEFAULT_
|
|
|
78
134
|
mcpServer = factoryResult.server;
|
|
79
135
|
onClientInfo = factoryResult.onClientInfo;
|
|
80
136
|
}
|
|
81
|
-
// Track session cleanup
|
|
137
|
+
// Track session cleanup on explicit close (DELETE request or transport teardown)
|
|
82
138
|
const t = transport;
|
|
83
139
|
t.onclose = () => {
|
|
84
140
|
const sid = t.sessionId;
|
|
85
|
-
if (sid)
|
|
141
|
+
if (sid && sessions.has(sid)) {
|
|
86
142
|
sessions.delete(sid);
|
|
143
|
+
process.stderr.write(`[agentd] session ${shortId(sid)}… closed (remaining: ${sessions.size})\n`);
|
|
144
|
+
}
|
|
87
145
|
};
|
|
88
146
|
// Set up oninitialized BEFORE connect to capture clientInfo from MCP handshake
|
|
89
147
|
if (onClientInfo) {
|
|
@@ -100,16 +158,21 @@ async function startHttpTransport(createMcpServerFn, port = constants_1.DEFAULT_
|
|
|
100
158
|
await transport.handleRequest(req, res);
|
|
101
159
|
// Store session after handleRequest (sessionId becomes available)
|
|
102
160
|
if (transport.sessionId) {
|
|
103
|
-
sessions.set(transport.sessionId, {
|
|
161
|
+
sessions.set(transport.sessionId, {
|
|
162
|
+
transport,
|
|
163
|
+
server: mcpServer,
|
|
164
|
+
lastActivity: Date.now(),
|
|
165
|
+
});
|
|
166
|
+
process.stderr.write(`[agentd] new session ${shortId(transport.sessionId)}… (total: ${sessions.size})\n`);
|
|
104
167
|
}
|
|
105
168
|
}
|
|
106
169
|
catch (err) {
|
|
107
170
|
const message = err instanceof Error ? err.message : String(err);
|
|
108
|
-
process.stderr.write(`[ERROR] Failed to create MCP session: ${message}\n`);
|
|
171
|
+
process.stderr.write(`[agentd] [ERROR] Failed to create MCP session: ${message}\n`);
|
|
109
172
|
// Clean up transport if it was created before the error
|
|
110
173
|
if (transport) {
|
|
111
174
|
try {
|
|
112
|
-
transport
|
|
175
|
+
await closeWithTimeout(transport);
|
|
113
176
|
}
|
|
114
177
|
catch { /* best-effort cleanup */ }
|
|
115
178
|
}
|
|
@@ -136,11 +199,18 @@ async function startHttpTransport(createMcpServerFn, port = constants_1.DEFAULT_
|
|
|
136
199
|
port,
|
|
137
200
|
host,
|
|
138
201
|
sessionCount: () => sessions.size,
|
|
139
|
-
close: () => {
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
202
|
+
close: async () => {
|
|
203
|
+
clearInterval(reaperInterval);
|
|
204
|
+
// Graceful shutdown: close all sessions in parallel
|
|
205
|
+
const closePromises = [...sessions].map(async ([sid, session]) => {
|
|
206
|
+
process.stderr.write(`[agentd] shutting down session ${shortId(sid)}…\n`);
|
|
207
|
+
try {
|
|
208
|
+
await closeWithTimeout(session.transport);
|
|
209
|
+
await closeWithTimeout(session.server);
|
|
210
|
+
}
|
|
211
|
+
catch { /* best-effort — includes close timeout */ }
|
|
212
|
+
});
|
|
213
|
+
await Promise.all(closePromises);
|
|
144
214
|
sessions.clear();
|
|
145
215
|
// Force-close all keep-alive connections (Node 18.2+)
|
|
146
216
|
httpServer.closeAllConnections();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"http-transport.js","sourceRoot":"","sources":["../../../src/adapter/mcp/http-transport.ts"],"names":[],"mappings":";;
|
|
1
|
+
{"version":3,"file":"http-transport.js","sourceRoot":"","sources":["../../../src/adapter/mcp/http-transport.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,3 +1,11 @@
|
|
|
1
1
|
/** Default port for the VESS daemon HTTP transport. */
|
|
2
2
|
export declare const DEFAULT_DAEMON_PORT = 3100;
|
|
3
|
+
/** Session inactivity timeout in ms (10 minutes). */
|
|
4
|
+
export declare const DEFAULT_SESSION_TIMEOUT_MS: number;
|
|
5
|
+
/** Maximum concurrent MCP sessions. */
|
|
6
|
+
export declare const DEFAULT_MAX_SESSIONS = 20;
|
|
7
|
+
/** Session count threshold for "degraded" health status. */
|
|
8
|
+
export declare const SESSION_DEGRADED_THRESHOLD = 15;
|
|
9
|
+
/** Reaper sweep interval in ms (60 seconds). */
|
|
10
|
+
export declare const DEFAULT_REAPER_INTERVAL_MS = 60000;
|
|
3
11
|
//# sourceMappingURL=constants.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../../src/config/constants.ts"],"names":[],"mappings":"AAAA,uDAAuD;AACvD,eAAO,MAAM,mBAAmB,OAAO,CAAA"}
|
|
1
|
+
{"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../../src/config/constants.ts"],"names":[],"mappings":"AAAA,uDAAuD;AACvD,eAAO,MAAM,mBAAmB,OAAO,CAAA;AAEvC,qDAAqD;AACrD,eAAO,MAAM,0BAA0B,QAAiB,CAAA;AAExD,uCAAuC;AACvC,eAAO,MAAM,oBAAoB,KAAK,CAAA;AAEtC,4DAA4D;AAC5D,eAAO,MAAM,0BAA0B,KAAK,CAAA;AAE5C,gDAAgD;AAChD,eAAO,MAAM,0BAA0B,QAAS,CAAA"}
|
package/dist/config/constants.js
CHANGED
|
@@ -1,6 +1,14 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.DEFAULT_DAEMON_PORT = void 0;
|
|
3
|
+
exports.DEFAULT_REAPER_INTERVAL_MS = exports.SESSION_DEGRADED_THRESHOLD = exports.DEFAULT_MAX_SESSIONS = exports.DEFAULT_SESSION_TIMEOUT_MS = exports.DEFAULT_DAEMON_PORT = void 0;
|
|
4
4
|
/** Default port for the VESS daemon HTTP transport. */
|
|
5
5
|
exports.DEFAULT_DAEMON_PORT = 3100;
|
|
6
|
+
/** Session inactivity timeout in ms (10 minutes). */
|
|
7
|
+
exports.DEFAULT_SESSION_TIMEOUT_MS = 10 * 60 * 1000;
|
|
8
|
+
/** Maximum concurrent MCP sessions. */
|
|
9
|
+
exports.DEFAULT_MAX_SESSIONS = 20;
|
|
10
|
+
/** Session count threshold for "degraded" health status. */
|
|
11
|
+
exports.SESSION_DEGRADED_THRESHOLD = 15;
|
|
12
|
+
/** Reaper sweep interval in ms (60 seconds). */
|
|
13
|
+
exports.DEFAULT_REAPER_INTERVAL_MS = 60_000;
|
|
6
14
|
//# sourceMappingURL=constants.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"constants.js","sourceRoot":"","sources":["../../src/config/constants.ts"],"names":[],"mappings":";;;AAAA,uDAAuD;AAC1C,QAAA,mBAAmB,GAAG,IAAI,CAAA"}
|
|
1
|
+
{"version":3,"file":"constants.js","sourceRoot":"","sources":["../../src/config/constants.ts"],"names":[],"mappings":";;;AAAA,uDAAuD;AAC1C,QAAA,mBAAmB,GAAG,IAAI,CAAA;AAEvC,qDAAqD;AACxC,QAAA,0BAA0B,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI,CAAA;AAExD,uCAAuC;AAC1B,QAAA,oBAAoB,GAAG,EAAE,CAAA;AAEtC,4DAA4D;AAC/C,QAAA,0BAA0B,GAAG,EAAE,CAAA;AAE5C,gDAAgD;AACnC,QAAA,0BAA0B,GAAG,MAAM,CAAA"}
|
package/package.json
CHANGED