What happens
Connecting the MCP Inspector to the server (seen on https://staging.mcp.cloudflare.com/mcp while testing #223) shows the transport as legacy Streamable HTTP, not the modern MCP 2026-07-28 protocol.
What we know
src/mcp-handler.ts serves /mcp with @modelcontextprotocol/server 2.0.0's createMcpHandler, passing no handler options. The comment there says the SDK defaults to "stateless 2025 compatibility, with a fresh server and no protocol session".
- The server does speak modern MCP when a client negotiates it:
tests/mcp-client.test.ts ("automatic protocol negotiation › selects modern MCP, then lists and calls tools without a session") and tests/mcp-modern.test.ts (server/discover, stateless tools/list / tools/call) pass against the SDK's own client.
- So either the Inspector negotiates or classifies differently from the SDK client, or the deployed server doesn't advertise modern support the way the Inspector expects.
To find out
- Which Inspector version, and what signal it uses to decide "modern" vs "legacy" (a
server/discover probe? MCP-Protocol-Version / Mcp-Method headers? the initialize result?).
- Whether the Inspector's first, unauthenticated probe gets the
401 Bearer challenge and then falls back to legacy, never retrying the modern path after OAuth completes.
- Whether
createMcpHandler needs an option to prefer or advertise 2026-07-28 rather than the 2025 compatibility default, or whether this is an Inspector bug to report upstream.
Expected
Once authorized, a client that supports 2026-07-28 (the Inspector included) should end up on the modern stateless protocol against this server.
What happens
Connecting the MCP Inspector to the server (seen on
https://staging.mcp.cloudflare.com/mcpwhile testing #223) shows the transport as legacy Streamable HTTP, not the modern MCP 2026-07-28 protocol.What we know
src/mcp-handler.tsserves/mcpwith@modelcontextprotocol/server2.0.0'screateMcpHandler, passing no handler options. The comment there says the SDK defaults to "stateless 2025 compatibility, with a fresh server and no protocol session".tests/mcp-client.test.ts("automatic protocol negotiation › selects modern MCP, then lists and calls tools without a session") andtests/mcp-modern.test.ts(server/discover, statelesstools/list/tools/call) pass against the SDK's own client.To find out
server/discoverprobe?MCP-Protocol-Version/Mcp-Methodheaders? theinitializeresult?).401Bearer challenge and then falls back to legacy, never retrying the modern path after OAuth completes.createMcpHandlerneeds an option to prefer or advertise 2026-07-28 rather than the 2025 compatibility default, or whether this is an Inspector bug to report upstream.Expected
Once authorized, a client that supports 2026-07-28 (the Inspector included) should end up on the modern stateless protocol against this server.