Add heartbeat

This commit is contained in:
2026-02-12 21:59:47 +01:00
parent 28169f48bc
commit 58d09ebc35
3 changed files with 38 additions and 0 deletions

View File

@@ -633,6 +633,20 @@ function runServer() {
transport.onclose = () => { transport.onclose = () => {
sseTransportsBySessionId.delete(transport.sessionId); sseTransportsBySessionId.delete(transport.sessionId);
}; };
// SSE heartbeat to prevent client ReadTimeout during idle (e.g. while waiting for Ollama)
const heartbeatIntervalMs = 15_000;
const heartbeatInterval = setInterval(() => {
try {
if (!res.writableEnded) {
res.write(': heartbeat\n\n');
} else {
clearInterval(heartbeatInterval);
}
} catch {
clearInterval(heartbeatInterval);
}
}, heartbeatIntervalMs);
res.on('close', () => clearInterval(heartbeatInterval));
await server.connect(transport); await server.connect(transport);
console.error("Secure MCP Filesystem Server: new SSE client connected"); console.error("Secure MCP Filesystem Server: new SSE client connected");
} catch (error) { } catch (error) {

View File

@@ -483,6 +483,18 @@ function runServer() {
transport.onclose = () => { transport.onclose = () => {
sseTransportsBySessionId.delete(transport.sessionId); sseTransportsBySessionId.delete(transport.sessionId);
}; };
const heartbeatInterval = setInterval(() => {
try {
if (!res.writableEnded) {
res.write(': heartbeat\n\n');
} else {
clearInterval(heartbeatInterval);
}
} catch {
clearInterval(heartbeatInterval);
}
}, 15_000);
res.on('close', () => clearInterval(heartbeatInterval));
await server.connect(transport); await server.connect(transport);
console.error("Knowledge Graph MCP Server: new SSE client connected"); console.error("Knowledge Graph MCP Server: new SSE client connected");
} catch (error) { } catch (error) {

View File

@@ -123,6 +123,18 @@ function runServer() {
transport.onclose = () => { transport.onclose = () => {
sseTransportsBySessionId.delete(transport.sessionId); sseTransportsBySessionId.delete(transport.sessionId);
}; };
const heartbeatInterval = setInterval(() => {
try {
if (!res.writableEnded) {
res.write(': heartbeat\n\n');
} else {
clearInterval(heartbeatInterval);
}
} catch {
clearInterval(heartbeatInterval);
}
}, 15_000);
res.on('close', () => clearInterval(heartbeatInterval));
await server.connect(transport); await server.connect(transport);
console.error("Sequential Thinking MCP Server: new SSE client connected"); console.error("Sequential Thinking MCP Server: new SSE client connected");
} catch (error) { } catch (error) {