Skip to content

Commit df8051b

Browse files
committed
use proxy function
1 parent 4b82553 commit df8051b

File tree

2 files changed

+40
-71
lines changed

2 files changed

+40
-71
lines changed

server/src/index.ts

Lines changed: 10 additions & 71 deletions
Original file line numberDiff line numberDiff line change
@@ -3,22 +3,9 @@ import cors from "cors";
33
import { Server } from "mcp-typescript/server/index.js";
44
import { SSEServerTransport } from "mcp-typescript/server/sse.js";
55
import express from "express";
6-
import {
7-
CallToolRequestSchema,
8-
GetPromptRequestSchema,
9-
ListPromptsRequestSchema,
10-
ListResourcesRequestSchema,
11-
ListToolsRequestSchema,
12-
ReadResourceRequestSchema,
13-
ListResourcesResultSchema,
14-
ReadResourceResultSchema,
15-
ListPromptsResultSchema,
16-
GetPromptResultSchema,
17-
ListToolsResultSchema,
18-
CallToolResultSchema,
19-
} from "mcp-typescript/types.js";
206
import { Client } from "mcp-typescript/client/index.js";
217
import { StdioClientTransport } from "mcp-typescript/client/stdio.js";
8+
import mcpProxy from "./mcpProxy.js";
229

2310
const app = express();
2411
app.use(cors());
@@ -47,65 +34,17 @@ app.get("/sse", async (req, res) => {
4734
await mcpClient.close();
4835
};
4936

50-
server.setRequestHandler(ListResourcesRequestSchema, () =>
51-
mcpClient.request(
52-
{
53-
method: "resources/list",
54-
},
55-
ListResourcesResultSchema,
56-
),
57-
);
58-
59-
server.setRequestHandler(ReadResourceRequestSchema, (params) =>
60-
mcpClient.request(
61-
{
62-
method: "resources/read",
63-
params: params.params,
64-
},
65-
ReadResourceResultSchema,
66-
),
67-
);
68-
69-
server.setRequestHandler(ListPromptsRequestSchema, () =>
70-
mcpClient.request(
71-
{
72-
method: "prompts/list",
73-
},
74-
ListPromptsResultSchema,
75-
),
76-
);
77-
78-
server.setRequestHandler(GetPromptRequestSchema, (params) => {
79-
return mcpClient.request(
80-
{
81-
method: "prompts/get",
82-
params: params.params,
83-
},
84-
GetPromptResultSchema,
85-
);
86-
});
87-
88-
server.setRequestHandler(ListToolsRequestSchema, () =>
89-
mcpClient.request(
90-
{
91-
method: "tools/list",
92-
},
93-
ListToolsResultSchema,
94-
),
95-
);
96-
97-
server.setRequestHandler(CallToolRequestSchema, (params) =>
98-
mcpClient.request(
99-
{
100-
method: "tools/call",
101-
params: params.params,
102-
},
103-
CallToolResultSchema,
104-
),
105-
);
106-
10737
await webAppTransport.connectSSE(req, res);
10838
await server.connect(webAppTransport);
39+
40+
mcpProxy({
41+
transportToClient: webAppTransport,
42+
transportToServer: backingServerTransport,
43+
onerror: (error) => {
44+
console.error(error);
45+
server.close();
46+
},
47+
});
10948
});
11049

11150
app.post("/message", async (req, res) => {

server/src/mcpProxy.ts

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
import { Transport } from "mcp-typescript/shared/transport.js";
2+
3+
export default function mcpProxy({
4+
transportToClient,
5+
transportToServer,
6+
onerror,
7+
}: {
8+
transportToClient: Transport;
9+
transportToServer: Transport;
10+
onerror: (error: Error) => void;
11+
}) {
12+
transportToClient.onmessage = (message) => {
13+
transportToServer.send(message).catch(onerror);
14+
};
15+
16+
transportToServer.onmessage = (message) => {
17+
transportToClient.send(message).catch(onerror);
18+
};
19+
20+
transportToClient.onclose = () => {
21+
transportToServer.close().catch(onerror);
22+
};
23+
24+
transportToServer.onclose = () => {
25+
transportToClient.close().catch(onerror);
26+
};
27+
28+
transportToClient.onerror = onerror;
29+
transportToServer.onerror = onerror;
30+
}

0 commit comments

Comments
 (0)