import { InMemoryTransport } from '@modelcontextprotocol/sdk/inMemory.js' import type { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js' import type { JSONRPCMessage } from '@modelcontextprotocol/sdk/types.js' export async function handleMcpRequest( request: Request, server: McpServer, ): Promise { try { const jsonRpcRequest = (await request.json()) as JSONRPCMessage const [clientTransport, serverTransport] = InMemoryTransport.createLinkedPair() let responseData: JSONRPCMessage | null = null clientTransport.onmessage = (message: JSONRPCMessage) => { responseData = message } await server.connect(serverTransport) await clientTransport.start() await serverTransport.start() await clientTransport.send(jsonRpcRequest) await new Promise((resolve) => setTimeout(resolve, 10)) await clientTransport.close() await serverTransport.close() return Response.json(responseData, { headers: { 'Content-Type': 'application/json', }, }) } catch (error) { console.error('MCP handler error:', error) // Return a JSON-RPC error response return Response.json( { jsonrpc: '2.0', error: { code: -32603, message: 'Internal server error', data: error instanceof Error ? error.message : String(error), }, id: null, }, { status: 500, headers: { 'Content-Type': 'application/json', }, }, ) } }