Replies: 1 comment
-
|
Answered in reddit thread: https://www.reddit.com/r/mcp/s/XPaRnyxlD3 Though the request still stands, why not using http2 for async dublex multi direction streaming? |
Beta Was this translation helpful? Give feedback.
0 replies
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Uh oh!
There was an error while loading. Please reload this page.
-
Pre-submission Checklist
Discussion Topic
Hey folks,
I’ve been digging into the new “Streamable HTTP” transport introduced for MCP (Model Context Protocol) — replacing the old HTTP + SSE setup — and I’m trying to confirm one specific point that seems strangely undocumented:
👉 Is HTTP/2 (or HTTP/3) actually required for Streamable HTTP to work properly?
What I found so far:
The official MCP spec and Anthropic / Claude MCP blogs (and Cloudflare’s “Streamable HTTP MCP servers” post) all describe the new unified single-endpoint model where both client and server send JSON-RPC messages concurrently.
That clearly implies full-duplex bidirectional streaming, which HTTP/1.1 simply can’t do — it only allows server-to-client streaming (chunked or SSE), not client-to-server while reading.
In practice, Python’s fastmcp and official MCP SDK use Starlette/ASGI apps that work fine on Hypercorn with --h2, but will degrade on Uvicorn (HTTP/1.1) to synchronous request/response mode.
Similarly, I’ve seen Java frameworks (Spring AI / Micronaut MCP) add “Streamable HTTP” server configs but none explicitly say “requires HTTP/2”.
What’s missing:
No documentation — neither in the official spec, FastMCP, nor Anthropic’s developer docs — explicitly states that HTTP/2 or HTTP/3 is required for proper Streamable HTTP behavior.
It’s obvious if you understand HTTP semantics, but confusing for developers who spin up a simple REST-style MCP server on Uvicorn/Flask/Express and wonder why “streaming” doesn’t stream or blocks mid-request.
What I’d love clarity on:
Is there any official source (spec, SDK doc, blog, comment) that explicitly says Streamable HTTP requires HTTP/2 or higher?
Have you successfully run MCP clients and servers over HTTP/1.1 and observed partial streaming actually work? I guess not...
In which language SDKs (Python, TypeScript, Java, Go, etc.) have you seen this acknowledged or configured (e.g. Hypercorn --h2, Jetty, HTTP/2-enabled Node, etc.)?
Why hasn’t this been clearly documented yet? Everyone migrating from SSE to Streamable HTTP is bound to hit this confusion.
If anyone from Anthropic, Cloudflare, or framework maintainers (fastmcp, modelcontextprotocol/python-sdk, Spring AI, etc.) sees this — please confirm officially whether HTTP/2 is a hard requirement for Streamable HTTP and update docs accordingly 🙏
Right now there’s a huge mismatch between the spec narrative (“bidirectional JSON-RPC on one endpoint”) and the ecosystem examples (which silently assume HTTP/2).
Thanks in advance for any pointers, example setups, or authoritative quotes!
Beta Was this translation helpful? Give feedback.
All reactions