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
- In v0, add an MCP integration with:
- URL: https://mcp.getdoable.ai/mcp
- Auth: Bearer token
- 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.