import { Router } from "express"; import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js"; import { StreamableHTTPServerTransport } from "@modelcontextprotocol/sdk/server/streamableHttp.js"; import { registerTools } from "./tools.js"; export const mcpRouter = Router(); mcpRouter.post("/mcp", async (req, res) => { try { const server = new McpServer({ name: "awesome-index", version: "0.1.0", }); registerTools(server); const transport = new StreamableHTTPServerTransport({ sessionIdGenerator: undefined, enableJsonResponse: true, }); res.on("close", async () => { await transport.close(); await server.close(); }); await server.connect(transport); await transport.handleRequest(req, res, req.body); } catch (err) { console.error("[mcp] request failed:", err.message); if (!res.headersSent) { res.status(500).json({ jsonrpc: "2.0", error: { code: -32603, message: "Internal error" }, id: null }); } } }); mcpRouter.get("/mcp", (_req, res) => { res.status(405).json({ jsonrpc: "2.0", error: { code: -32000, message: "GET not supported (stateless mode)" }, id: null }); }); mcpRouter.delete("/mcp", (_req, res) => { res.status(405).json({ jsonrpc: "2.0", error: { code: -32000, message: "DELETE not supported (stateless mode)" }, id: null }); });