From 8d7f1fa231491421775bed5224c32931cdd98a93 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Fri, 18 Jul 2025 18:09:12 +0000 Subject: [PATCH] Fix routing to make /mcp default transport Co-authored-by: pavelfeldman <883973+pavelfeldman@users.noreply.github.com> --- src/transport.ts | 6 +++--- tests/sse.spec.ts | 31 ++++++++++++++++++++----------- 2 files changed, 23 insertions(+), 14 deletions(-) diff --git a/src/transport.ts b/src/transport.ts index 12814ed..b6f861b 100644 --- a/src/transport.ts +++ b/src/transport.ts @@ -115,10 +115,10 @@ export function startHttpTransport(httpServer: http.Server, mcpServer: Server) { const streamableSessions = new Map(); httpServer.on('request', async (req, res) => { const url = new URL(`http://localhost${req.url}`); - if (url.pathname.startsWith('/mcp')) - await handleStreamable(mcpServer, req, res, streamableSessions); - else + if (url.pathname.startsWith('/sse')) await handleSSE(mcpServer, req, res, url, sseSessions); + else + await handleStreamable(mcpServer, req, res, streamableSessions); }); const url = httpAddressToString(httpServer.address()); const message = [ diff --git a/tests/sse.spec.ts b/tests/sse.spec.ts index 9e888a8..1a34586 100644 --- a/tests/sse.spec.ts +++ b/tests/sse.spec.ts @@ -68,7 +68,7 @@ const test = baseTest.extend<{ serverEndpoint: (options?: { args?: string[], noP test('sse transport', async ({ serverEndpoint }) => { const { url } = await serverEndpoint(); - const transport = new SSEClientTransport(url); + const transport = new SSEClientTransport(new URL('/sse', url)); const client = new Client({ name: 'test', version: '1.0.0' }); await client.connect(transport); await client.ping(); @@ -84,7 +84,7 @@ test('sse transport (config)', async ({ serverEndpoint }) => { await fs.promises.writeFile(configFile, JSON.stringify(config, null, 2)); const { url } = await serverEndpoint({ noPort: true, args: ['--config=' + configFile] }); - const transport = new SSEClientTransport(url); + const transport = new SSEClientTransport(new URL('/sse', url)); const client = new Client({ name: 'test', version: '1.0.0' }); await client.connect(transport); await client.ping(); @@ -93,7 +93,7 @@ test('sse transport (config)', async ({ serverEndpoint }) => { test('sse transport browser lifecycle (isolated)', async ({ serverEndpoint, server }) => { const { url, stderr } = await serverEndpoint({ args: ['--isolated'] }); - const transport1 = new SSEClientTransport(url); + const transport1 = new SSEClientTransport(new URL('/sse', url)); const client1 = new Client({ name: 'test', version: '1.0.0' }); await client1.connect(transport1); await client1.callTool({ @@ -102,7 +102,7 @@ test('sse transport browser lifecycle (isolated)', async ({ serverEndpoint, serv }); await client1.close(); - const transport2 = new SSEClientTransport(url); + const transport2 = new SSEClientTransport(new URL('/sse', url)); const client2 = new Client({ name: 'test', version: '1.0.0' }); await client2.connect(transport2); await client2.callTool({ @@ -130,7 +130,7 @@ test('sse transport browser lifecycle (isolated)', async ({ serverEndpoint, serv test('sse transport browser lifecycle (isolated, multiclient)', async ({ serverEndpoint, server }) => { const { url, stderr } = await serverEndpoint({ args: ['--isolated'] }); - const transport1 = new SSEClientTransport(url); + const transport1 = new SSEClientTransport(new URL('/sse', url)); const client1 = new Client({ name: 'test', version: '1.0.0' }); await client1.connect(transport1); await client1.callTool({ @@ -138,7 +138,7 @@ test('sse transport browser lifecycle (isolated, multiclient)', async ({ serverE arguments: { url: server.HELLO_WORLD }, }); - const transport2 = new SSEClientTransport(url); + const transport2 = new SSEClientTransport(new URL('/sse', url)); const client2 = new Client({ name: 'test', version: '1.0.0' }); await client2.connect(transport2); await client2.callTool({ @@ -147,7 +147,7 @@ test('sse transport browser lifecycle (isolated, multiclient)', async ({ serverE }); await client1.close(); - const transport3 = new SSEClientTransport(url); + const transport3 = new SSEClientTransport(new URL('/sse', url)); const client3 = new Client({ name: 'test', version: '1.0.0' }); await client3.connect(transport3); await client3.callTool({ @@ -177,7 +177,7 @@ test('sse transport browser lifecycle (isolated, multiclient)', async ({ serverE test('sse transport browser lifecycle (persistent)', async ({ serverEndpoint, server }) => { const { url, stderr } = await serverEndpoint(); - const transport1 = new SSEClientTransport(url); + const transport1 = new SSEClientTransport(new URL('/sse', url)); const client1 = new Client({ name: 'test', version: '1.0.0' }); await client1.connect(transport1); await client1.callTool({ @@ -186,7 +186,7 @@ test('sse transport browser lifecycle (persistent)', async ({ serverEndpoint, se }); await client1.close(); - const transport2 = new SSEClientTransport(url); + const transport2 = new SSEClientTransport(new URL('/sse', url)); const client2 = new Client({ name: 'test', version: '1.0.0' }); await client2.connect(transport2); await client2.callTool({ @@ -214,7 +214,7 @@ test('sse transport browser lifecycle (persistent)', async ({ serverEndpoint, se test('sse transport browser lifecycle (persistent, multiclient)', async ({ serverEndpoint, server }) => { const { url } = await serverEndpoint(); - const transport1 = new SSEClientTransport(url); + const transport1 = new SSEClientTransport(new URL('/sse', url)); const client1 = new Client({ name: 'test', version: '1.0.0' }); await client1.connect(transport1); await client1.callTool({ @@ -222,7 +222,7 @@ test('sse transport browser lifecycle (persistent, multiclient)', async ({ serve arguments: { url: server.HELLO_WORLD }, }); - const transport2 = new SSEClientTransport(url); + const transport2 = new SSEClientTransport(new URL('/sse', url)); const client2 = new Client({ name: 'test', version: '1.0.0' }); await client2.connect(transport2); const response = await client2.callTool({ @@ -244,3 +244,12 @@ test('streamable http transport', async ({ serverEndpoint }) => { await client.ping(); expect(transport.sessionId, 'has session support').toBeDefined(); }); + +test('streamable http transport (default)', async ({ serverEndpoint }) => { + const { url } = await serverEndpoint(); + const transport = new StreamableHTTPClientTransport(url); + const client = new Client({ name: 'test', version: '1.0.0' }); + await client.connect(transport); + await client.ping(); + expect(transport.sessionId, 'has session support').toBeDefined(); +});