v0 MCP client can't call tools with bearer auth — UI shows "connected" but LLM sees no tools

Summary
When adding a remote streamable-HTTP MCP server with bearer token authentication in v0, the UI reports the server as “connected,” but the LLM in chat cannot see or invoke any of its tools. Server-side logs confirm that v0 never issues the tools/list
JSON-RPC call — or any request beyond an initial initialize. The same MCP server + bearer token works correctly in Claude Code.

Steps to reproduce

  1. In v0, add an MCP integration with:
  2. Open a new chat and ask the LLM to list or call any tool from the doable MCP.

Expected

  • v0 performs the full streamable-HTTP handshake (initialize → notifications/initialized → GET /mcp SSE stream open → tools/list).
  • The LLM’s tool registry is populated with the server’s 6 tools.
  • Invoking a tool results in a tools/call JSON-RPC request to the server.

Actual

  • v0 issues only a single POST /mcp initialize request, which the server answers with 200 OK and a valid Mcp-Session-Id.
  • v0 never sends notifications/initialized, never opens the SSE stream via GET /mcp, and never calls tools/list.
  • The LLM reports no tools available; its internal “Search/List doable tools” calls return empty without any corresponding HTTP request reaching the MCP server.
  • Across multiple attempts (recreate the MCP, new chat, different tool requests), zero subsequent HTTP traffic from Vercel IPs reaches the server.

Evidence

  • Server access logs for https://mcp.getdoable.ai/mcp during v0 attempts show only POST /mcp 200 for initialize; no further requests.
  • Same URL + same bearer token via Claude Code (claude mcp add doable --transport http https://mcp.getdoable.ai/mcp -H "Authorization: Bearer ") completes the full handshake and exposes all 6 tools correctly.
  • Direct curl reproductions of initialize → notifications/initialized → tools/list against the same endpoint return valid JSON-RPC responses, confirming the server is spec-compliant per MCP 2025-06-18.
  • a failed v0 chat https://v0.app/chat/hello-mPd5frf30kS

Environment

  • MCP server: Python MCP SDK (FastMCP), streamable-HTTP transport, session-based (non-stateless), behind Caddy on HTTPS.
  • MCP client under test: v0 (tested in multiple workspaces / new chats).
  • Control client: Claude Code — works without issue.

Impact
MCP servers with bearer-token auth are effectively unusable in v0 today: they appear connected but no tools can be invoked.

when it fails to call mcp in the chat, and i post another chat message again, the chat returns 400 (Bad Request) error. example chat https://v0.app/chat/mcp-connection-uSf4jDoF6mc