From 5108ed1c7da3a75e57125823523e6c1dc2a71f1f Mon Sep 17 00:00:00 2001 From: Maciej Witowski Date: Mon, 2 Mar 2026 16:49:31 +0100 Subject: [PATCH] fix: enable JSON response mode on MCP transport MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The default SSE streaming mode is unreliable when the request passes through a proxy chain (e.g. Anthropic → Cloudflare → FRP tunnel → local server). Proxies can buffer, truncate, or close the SSE connection before the tool result event arrives, causing Claude to receive `{"error": "Error occurred during tool execution"}` despite the server returning HTTP 200. Setting `enableJsonResponse: true` makes each MCP response a single atomic `application/json` reply instead of a long-lived SSE stream, which is reliable through any number of intermediary proxies. Co-Authored-By: Claude Opus 4.6 --- packages/server/src/routes/mcp.ts | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/packages/server/src/routes/mcp.ts b/packages/server/src/routes/mcp.ts index 46626f8..da6192b 100644 --- a/packages/server/src/routes/mcp.ts +++ b/packages/server/src/routes/mcp.ts @@ -62,14 +62,18 @@ export function mcpRoute(deps: McpRouteDeps): Hono { } // Pass authInfo to the MCP transport - const transport = new WebStandardStreamableHTTPServerTransport(); + const transport = new WebStandardStreamableHTTPServerTransport({ + enableJsonResponse: true, + }); const server = createMcpServer(deps.mcpContext); await server.connect(transport); return transport.handleRequest(c.req.raw, { authInfo }); } // No OAuth configured — open access (dev/local mode) - const transport = new WebStandardStreamableHTTPServerTransport(); + const transport = new WebStandardStreamableHTTPServerTransport({ + enableJsonResponse: true, + }); const server = createMcpServer(deps.mcpContext); await server.connect(transport); return transport.handleRequest(c.req.raw);