Skip to content

Commit 41f8ec0

Browse files
Merge pull request modelcontextprotocol#53 from modelcontextprotocol/justin/server-connection-errors
Fix server dying when an error occurs
2 parents 09d66ab + bf2ddc9 commit 41f8ec0

File tree

1 file changed

+40
-25
lines changed

1 file changed

+40
-25
lines changed

server/src/index.ts

Lines changed: 40 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -51,44 +51,59 @@ const createTransport = async (query: express.Request["query"]) => {
5151
};
5252

5353
app.get("/sse", async (req, res) => {
54-
console.log("New SSE connection");
54+
try {
55+
console.log("New SSE connection");
5556

56-
const backingServerTransport = await createTransport(req.query);
57+
const backingServerTransport = await createTransport(req.query);
5758

58-
console.log("Connected MCP client to backing server transport");
59+
console.log("Connected MCP client to backing server transport");
5960

60-
const webAppTransport = new SSEServerTransport("/message", res);
61-
console.log("Created web app transport");
61+
const webAppTransport = new SSEServerTransport("/message", res);
62+
console.log("Created web app transport");
6263

63-
webAppTransports.push(webAppTransport);
64-
console.log("Created web app transport");
64+
webAppTransports.push(webAppTransport);
65+
console.log("Created web app transport");
6566

66-
await webAppTransport.start();
67+
await webAppTransport.start();
6768

68-
mcpProxy({
69-
transportToClient: webAppTransport,
70-
transportToServer: backingServerTransport,
71-
onerror: (error) => {
72-
console.error(error);
73-
},
74-
});
75-
console.log("Set up MCP proxy");
69+
mcpProxy({
70+
transportToClient: webAppTransport,
71+
transportToServer: backingServerTransport,
72+
onerror: (error) => {
73+
console.error(error);
74+
},
75+
});
76+
console.log("Set up MCP proxy");
77+
} catch (error) {
78+
console.error("Error in /sse route:", error);
79+
res.status(500).json(error);
80+
}
7681
});
7782

7883
app.post("/message", async (req, res) => {
79-
const sessionId = req.query.sessionId;
80-
console.log(`Received message for sessionId ${sessionId}`);
81-
82-
const transport = webAppTransports.find((t) => t.sessionId === sessionId);
83-
if (!transport) {
84-
res.status(404).send("Session not found");
85-
return;
84+
try {
85+
const sessionId = req.query.sessionId;
86+
console.log(`Received message for sessionId ${sessionId}`);
87+
88+
const transport = webAppTransports.find((t) => t.sessionId === sessionId);
89+
if (!transport) {
90+
res.status(404).end("Session not found");
91+
return;
92+
}
93+
await transport.handlePostMessage(req, res);
94+
} catch (error) {
95+
console.error("Error in /message route:", error);
96+
res.status(500).json(error);
8697
}
87-
await transport.handlePostMessage(req, res);
8898
});
8999

90100
app.get("/default-environment", (req, res) => {
91-
res.json(getDefaultEnvironment());
101+
try {
102+
res.json(getDefaultEnvironment());
103+
} catch (error) {
104+
console.error("Error in /default-environment route:", error);
105+
res.status(500).json(error);
106+
}
92107
});
93108

94109
const PORT = process.env.PORT || 3000;

0 commit comments

Comments
 (0)