diff --git a/README.md b/README.md index fe4caa3f8..501fd4ffb 100644 --- a/README.md +++ b/README.md @@ -224,8 +224,19 @@ const server = new McpServer({ const app = express(); +let transportMap = new Map(); + app.get("/sse", async (req, res) => { const transport = new SSEServerTransport("/messages", res); + const sessionId = transport.sessionId; + + // Set the onclose handler to remove the transport from the transportMap + transport.onclose = () => { + transportMap.delete(sessionId); + console.log(`Transport ${sessionId} has been closed.`); + }; + + transportMap.set(sessionId, transport); await server.connect(transport); }); @@ -233,6 +244,17 @@ app.post("/messages", async (req, res) => { // Note: to support multiple simultaneous connections, these messages will // need to be routed to a specific matching transport. (This logic isn't // implemented here, for simplicity.) + + const sessionId = req.query.sessionId; + if (!sessionId) { + return res.status(400).json({ error: "SessionId is not found" }); + } + + const transport = transportMap.get(sessionId); + if (!transport) { + return res.redirect("/sse"); + } + await transport.handlePostMessage(req, res); });