* Helper to create and start test HTTP server with MCP setup
(args: { mockRes: http.ServerResponse })
| 110 | * Helper to create and start test HTTP server with MCP setup |
| 111 | */ |
| 112 | async function createTestServerWithSse(args: { mockRes: http.ServerResponse }): Promise<{ |
| 113 | server: Server; |
| 114 | transport: SSEServerTransport; |
| 115 | mcpServer: McpServer; |
| 116 | baseUrl: URL; |
| 117 | sessionId: string; |
| 118 | serverPort: number; |
| 119 | }> { |
| 120 | const mcpServer = new McpServer({ name: 'test-server', version: '1.0.0' }, { capabilities: { logging: {} } }); |
| 121 | |
| 122 | mcpServer.tool( |
| 123 | 'greet', |
| 124 | 'A simple greeting tool', |
| 125 | { name: z.string().describe('Name to greet') }, |
| 126 | async ({ name }): Promise<CallToolResult> => { |
| 127 | return { content: [{ type: 'text', text: `Hello, ${name}!` }] }; |
| 128 | } |
| 129 | ); |
| 130 | |
| 131 | const endpoint = '/messages'; |
| 132 | |
| 133 | const transport = new SSEServerTransport(endpoint, args.mockRes); |
| 134 | const sessionId = transport.sessionId; |
| 135 | |
| 136 | await mcpServer.connect(transport); |
| 137 | |
| 138 | const server = createServer(async (req, res) => { |
| 139 | try { |
| 140 | await transport.handlePostMessage(req, res); |
| 141 | } catch (error) { |
| 142 | console.error('Error handling request:', error); |
| 143 | if (!res.headersSent) res.writeHead(500).end(); |
| 144 | } |
| 145 | }); |
| 146 | |
| 147 | const baseUrl = await listenOnRandomPort(server); |
| 148 | |
| 149 | const addr = server.address(); |
| 150 | const port = typeof addr === 'string' ? new URL(baseUrl).port : (addr as any).port; |
| 151 | |
| 152 | return { server, transport, mcpServer, baseUrl, sessionId, serverPort: Number(port) }; |
| 153 | } |
| 154 | |
| 155 | describe('SSEServerTransport', () => { |
| 156 | async function initializeServer(baseUrl: URL): Promise<void> { |
no test coverage detected
searching dependent graphs…