Skip to content

Commit df7ba5f

Browse files
committed
fix: update MCP add-on
1 parent a5efd93 commit df7ba5f

File tree

2 files changed

+63
-61
lines changed

2 files changed

+63
-61
lines changed
Lines changed: 62 additions & 60 deletions
Original file line numberDiff line numberDiff line change
@@ -1,61 +1,63 @@
1-
import { StreamableHTTPServerTransport } from "@modelcontextprotocol/sdk/server/streamableHttp.js";
2-
import { getEvent } from "@tanstack/react-start/server";
3-
import type { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
4-
5-
export async function handleMcpRequest(request: Request, server: McpServer) {
6-
const body = await request.json();
7-
const event = getEvent();
8-
const res = event.node.res;
9-
const req = event.node.req;
10-
11-
return new Promise<Response>((resolve, reject) => {
12-
const transport = new StreamableHTTPServerTransport({
13-
sessionIdGenerator: undefined,
14-
});
15-
16-
const cleanup = () => {
17-
transport.close();
18-
server.close();
19-
};
20-
21-
let settled = false;
22-
const safeResolve = (response: Response) => {
23-
if (!settled) {
24-
settled = true;
25-
cleanup();
26-
resolve(response);
27-
}
28-
};
29-
30-
const safeReject = (error: any) => {
31-
if (!settled) {
32-
settled = true;
33-
cleanup();
34-
reject(error);
35-
}
36-
};
37-
38-
res.on("finish", () => safeResolve(new Response(null, { status: 200 })));
39-
res.on("close", () => safeResolve(new Response(null, { status: 200 })));
40-
res.on("error", safeReject);
41-
42-
server
43-
.connect(transport)
44-
.then(() => transport.handleRequest(req, res, body))
45-
.catch((error) => {
46-
console.error("Transport error:", error);
47-
cleanup();
48-
if (!res.headersSent) {
49-
res.writeHead(500, { "Content-Type": "application/json" });
50-
res.end(
51-
JSON.stringify({
52-
jsonrpc: "2.0",
53-
error: { code: -32603, message: "Internal server error" },
54-
id: null,
55-
})
56-
);
57-
}
58-
safeReject(error);
59-
});
60-
});
1+
import { InMemoryTransport } from '@modelcontextprotocol/sdk/inMemory.js'
2+
3+
import type { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js'
4+
import type { JSONRPCMessage } from '@modelcontextprotocol/sdk/types.js'
5+
6+
export async function handleMcpRequest(
7+
request: Request,
8+
server: McpServer,
9+
): Promise<Response> {
10+
try {
11+
const jsonRpcRequest = (await request.json()) as JSONRPCMessage
12+
13+
const [clientTransport, serverTransport] =
14+
InMemoryTransport.createLinkedPair()
15+
16+
let responseData: JSONRPCMessage | null = null
17+
18+
clientTransport.onmessage = (message: JSONRPCMessage) => {
19+
responseData = message
20+
}
21+
22+
await server.connect(serverTransport)
23+
24+
await clientTransport.start()
25+
await serverTransport.start()
26+
27+
await clientTransport.send(jsonRpcRequest)
28+
29+
await new Promise((resolve) => setTimeout(resolve, 10))
30+
31+
await clientTransport.close()
32+
await serverTransport.close()
33+
34+
console.log('responseData', JSON.stringify(responseData, null, 2))
35+
36+
return Response.json(responseData, {
37+
headers: {
38+
'Content-Type': 'application/json',
39+
},
40+
})
41+
} catch (error) {
42+
console.error('MCP handler error:', error)
43+
44+
// Return a JSON-RPC error response
45+
return Response.json(
46+
{
47+
jsonrpc: '2.0',
48+
error: {
49+
code: -32603,
50+
message: 'Internal server error',
51+
data: error instanceof Error ? error.message : String(error),
52+
},
53+
id: null,
54+
},
55+
{
56+
status: 500,
57+
headers: {
58+
'Content-Type': 'application/json',
59+
},
60+
},
61+
)
62+
}
6163
}

packages/cta-engine/src/create-app.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -234,7 +234,7 @@ Use the following commands to start your app:
234234
getPackageManagerScriptCommand(options.packageManager, ['dev']),
235235
)}
236236
237-
Please check the README.md for information on testing, styling, adding routes, etc.${errorStatement}`,
237+
Please read the README.md for information on testing, styling, adding routes, etc.${errorStatement}`,
238238
)
239239
}
240240

0 commit comments

Comments
 (0)