Skip to content

Commit d813200

Browse files
committed
fix: session cleanup memory leak in SSE error handler
Fixed session ID mismatch in error handler that prevented proper transport cleanup on connection errors. Error handler now uses transport.sessionId (matching storage key) instead of outer scope sessionId variable. Changes: - Fixed src/index.js line 299: use transport.sessionId for cleanup - Added src/index.js line 300: sessionActivity cleanup - Version bump to 1.2.1 in package.json This resolves the issue where MCP server accumulated stale sessions after ECONNRESET errors, causing failures after ~12 requests from n8n.
1 parent 54e4708 commit d813200

File tree

2 files changed

+6
-3
lines changed

2 files changed

+6
-3
lines changed

package.json

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "tsdav-mcp-server",
3-
"version": "1.2.0",
3+
"version": "1.2.1",
44
"description": "Model Context Protocol (MCP) server for CalDAV/CardDAV/VTODO integration via tsdav - enables AI systems to manage calendars, contacts, and tasks",
55
"type": "module",
66
"main": "src/index.js",
@@ -13,7 +13,9 @@
1313
"dev": "node --watch src/index.js",
1414
"test": "NODE_ENV=test NODE_OPTIONS='--experimental-vm-modules' jest",
1515
"test:watch": "NODE_ENV=test NODE_OPTIONS='--experimental-vm-modules' jest --watch",
16-
"test:coverage": "NODE_ENV=test NODE_OPTIONS='--experimental-vm-modules' jest --coverage"
16+
"test:coverage": "NODE_ENV=test NODE_OPTIONS='--experimental-vm-modules' jest --coverage",
17+
"test:integration": "node tests/integration/mcp-test-runner.js",
18+
"test:setup-data": "node tests/integration/setup-test-data.js"
1719
},
1820
"author": "tsdav-mcp-server contributors",
1921
"license": "MIT",

src/index.js

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -296,7 +296,8 @@ app.get('/sse', authenticateBearer, async (req, res) => {
296296
transportSessionId: transport.sessionId,
297297
}, 'SSE connection error');
298298
clearInterval(keepAliveInterval);
299-
delete transports[sessionId];
299+
delete transports[transport.sessionId];
300+
sessionActivity.delete(transport.sessionId);
300301
});
301302

302303
res.on('finish', () => {

0 commit comments

Comments
 (0)