Fix session never stored: move transports.set() after handleRequest

The session ID is generated inside StreamableHTTPServerTransport during
handleRequest() when it processes the initialize method. The previous
code called transports.set() BEFORE handleRequest(), at which point
transport.sessionId was still undefined — so the session was never
stored in the map. Every subsequent request got "No valid session."

https://claude.ai/code/session_01S8iM5fK53kYa54tydpgsNq
This commit is contained in:
Claude
2026-03-28 21:59:19 +00:00
parent dc9b1cb3e1
commit a3d319acd1
@@ -102,11 +102,14 @@ app.all('/mcp', async (req, res) => {
const server = createMcpServer();
await server.connect(transport);
await transport.handleRequest(req, res, req.body);
// Register AFTER handleRequest — the session ID is only assigned during
// initialize processing inside handleRequest, not before.
if (transport.sessionId) {
transports.set(transport.sessionId, transport);
console.error(`[mcp] Session ${transport.sessionId} registered`);
}
await transport.handleRequest(req, res, req.body);
});
app.listen(PORT, '0.0.0.0', () => {