Skip to content

Commit 632772d

Browse files
committed
chore: drop express usage in cli.ts
1 parent 1f5950b commit 632772d

File tree

1 file changed

+43
-42
lines changed

1 file changed

+43
-42
lines changed

src/cli.ts

Lines changed: 43 additions & 42 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ import WebSocket from "ws";
33
// eslint-disable-next-line @typescript-eslint/no-explicit-any
44
(global as any).WebSocket = WebSocket;
55

6-
import express from "express";
6+
import http from "http";
77
import { Client } from "./client/index.js";
88
import { SSEClientTransport } from "./client/sse.js";
99
import { StdioClientTransport } from "./client/stdio.js";
@@ -59,54 +59,55 @@ async function runClient(url_or_command: string, args: string[]) {
5959

6060
async function runServer(port: number | null) {
6161
if (port !== null) {
62-
const app = express();
63-
6462
let servers: Server[] = [];
63+
const app = http.createServer(async (req, res) => {
64+
const url = new URL(req.url ?? '/', `http://${req.headers.host}`);
65+
if (req.method === 'GET' && url.pathname === '/sse') {
66+
console.log("Got new SSE connection");
67+
68+
const transport = new SSEServerTransport("/message", res);
69+
const server = new Server(
70+
{
71+
name: "mcp-typescript test server",
72+
version: "0.1.0",
73+
},
74+
{
75+
capabilities: {},
76+
},
77+
);
78+
79+
servers.push(server);
80+
81+
server.onclose = () => {
82+
console.log("SSE connection closed");
83+
servers = servers.filter((s) => s !== server);
84+
};
85+
86+
await server.connect(transport);
87+
}
6588

66-
app.get("/sse", async (req, res) => {
67-
console.log("Got new SSE connection");
68-
69-
const transport = new SSEServerTransport("/message", res);
70-
const server = new Server(
71-
{
72-
name: "mcp-typescript test server",
73-
version: "0.1.0",
74-
},
75-
{
76-
capabilities: {},
77-
},
78-
);
79-
80-
servers.push(server);
81-
82-
server.onclose = () => {
83-
console.log("SSE connection closed");
84-
servers = servers.filter((s) => s !== server);
85-
};
86-
87-
await server.connect(transport);
88-
});
89+
if (req.method === 'POST' && url.pathname === '/message') {
90+
console.log("Received message");
8991

90-
app.post("/message", async (req, res) => {
91-
console.log("Received message");
92+
const sessionId = url.searchParams.get("sessionId") as string;
93+
const transport = servers
94+
.map((s) => s.transport as SSEServerTransport)
95+
.find((t) => t.sessionId === sessionId);
96+
if (!transport) {
97+
res.statusCode = 404;
98+
res.end("Session not found");
99+
return;
100+
}
92101

93-
const sessionId = req.query.sessionId as string;
94-
const transport = servers
95-
.map((s) => s.transport as SSEServerTransport)
96-
.find((t) => t.sessionId === sessionId);
97-
if (!transport) {
98-
res.status(404).send("Session not found");
99-
return;
102+
await transport.handlePostMessage(req, res);
100103
}
101-
102-
await transport.handlePostMessage(req, res);
103104
});
104105

105-
app.listen(port, (error) => {
106-
if (error) {
107-
console.error('Failed to start server:', error);
108-
process.exit(1);
109-
}
106+
app.on('error', error => {
107+
console.error('Failed to start server:', error);
108+
process.exit(1);
109+
})
110+
app.listen(port, () => {
110111
console.log(`Server running on http://localhost:${port}/sse`);
111112
});
112113
} else {

0 commit comments

Comments
 (0)