
This page is part of our MCP specification reference, a plain-English guide to the Model Context Protocol spec (version 2026-07-28), within The MCP Guide. Building a server? See MCP development.
HTTP+SSE was MCP's original transport for remote servers, defined in the 2024-11-05 specification. The client opened a long-lived Server-Sent Events (SSE) connection to receive messages and sent its own messages to a separate POST endpoint. It was replaced by Streamable HTTP in 2025-03-26 and is listed as Deprecated in the 2026-07-28 spec.
Status in the 2026-07-28 spec: deprecated
If you run or depend on an older remote MCP server, this page explains how the old transport worked, what the spec says about it today, and how to move off it. Every detail was checked against the official spec pages on 28 October 2026.
Key Takeaways
- HTTP+SSE used two endpoints: an SSE endpoint for server-to-client messages and a POST endpoint for client-to-server messages.
- It has been deprecated since protocol version 2025-03-26 and was reclassified as Deprecated under the formal lifecycle policy in 2026-07-28.
- New implementations "SHOULD NOT adopt it," and existing ones "SHOULD migrate to Streamable HTTP."
- Clients can detect an old server by trying a POST first and falling back to a GET that expects an
endpointevent. - As of October 2026, no removal date is fixed; the deprecated features registry ties earliest removal to SEP-2596 reaching Final.
What HTTP+SSE was
The 2024-11-05 transports page defined it. "The server MUST provide two endpoints":
- "An SSE endpoint, for clients to establish a connection and receive messages from the server."
- "A regular HTTP POST endpoint for clients to send messages to the server."
The flow went like this. The client opened the SSE connection. The server's first event was an endpoint event "containing a URI for the client to use for sending messages." From then on, the client POSTed every message to that URI, and the server sent all replies as SSE message events on the open connection.
A first event on the SSE stream looked roughly like this. This sketch is ours, based on the 2024-11-05 description, and the sessionId query string is an illustrative implementation choice, not a spec requirement:
event: endpoint
data: /messages?sessionId=abc123
Each later server message arrived as a message event whose data was a JSON-RPC object:
{"jsonrpc": "2.0", "id": 1, "result": {"tools": []}}
Why it was replaced
In the 2024-11-05 design, replies to every request flowed over one long-lived stream, and the client had to work with two endpoints. A client could not get a plain JSON reply to a single POST.
The 2025-03-26 changelog lists the fix as a major change: it "Replaced the previous HTTP+SSE transport with a more flexible Streamable HTTP transport." Streamable HTTP uses one endpoint, and a server can reply to each POST with plain JSON or a stream scoped to that request.
What the 2026-07-28 spec says
The Streamable HTTP page carries a warning box. HTTP+SSE "has been deprecated since protocol version 2025-03-26 and is classified as Deprecated under the feature lifecycle policy." It continues: "New implementations SHOULD NOT adopt it; existing implementations SHOULD migrate to Streamable HTTP. It is eligible for removal in a future revision."
The deprecated features registry lists its earliest removal as "Three months after SEP-2596 reaches Final." The 2026-07-28 release post describes it as "officially deprecated, with a year-long offramp." The registry is the formal record, so plan on the registry's wording and watch for the SEP status. Our versioning and deprecation guide explains how the lifecycle works.
Supporting old and new clients at once
The 2026-07-28 spec still documents backward compatibility.
Servers that want to support older clients should "continue to host both the SSE and POST endpoints of the old transport, alongside the new 'MCP endpoint'." Combining the old POST endpoint with the new one is possible "but this may introduce unneeded complexity."
Clients that want to support older servers should:
- Accept a server URL from the user.
- POST a request to it with the standard
Acceptheader. - If that works, treat it as a Streamable HTTP server.
- If it fails with
400,404or405, and the body is not a recognized modern JSON-RPC error, send a GET and expect an SSE stream whose first event isendpoint. - If the
endpointevent arrives, use the old transport from then on.
Step 4's body check matters. Modern servers also return 400 and 404 with JSON-RPC errors, and those should not trigger a fallback.
How to migrate a server
A practical order of work:
- Upgrade your SDK. The official SDKs implement Streamable HTTP. See the official MCP SDKs.
- Add a single MCP endpoint that accepts POST, such as
/mcp. - Return JSON or a request-scoped SSE stream per request, not a shared stream.
- Pick a target version. If you go straight to 2026-07-28, skip sessions entirely and require the new headers. If you must stay on 2025-11-25 for now, follow that revision's session rules.
- Keep the old endpoints during a transition window, then remove them once your client logs show no old traffic.
- Re-check security. Validate
Origin, bind local servers to127.0.0.1, and add authorization for remote use.
The details of the new transport are in MCP Streamable HTTP transport.
Common mistakes
- Building something new on HTTP+SSE because an old tutorial used it. The spec says not to.
- Falling back on any 400 or 404. Check the response body first.
- Removing the old endpoints with no warning. Some clients may still depend on them.
- Assuming the security rules changed. The 2024-11-05 page already required
Originvalidation.
Next step
Once you are on Streamable HTTP, the next job is usually sign-in. Read MCP authorization: what the spec requires, or ask our MCP development team to plan the migration.
Frequently asked questions
Is HTTP+SSE the same as Streamable HTTP?
No. Both can use Server-Sent Events, but HTTP+SSE needed two endpoints and one long-lived stream for all replies. Streamable HTTP uses one endpoint and streams only per request.
Is HTTP+SSE removed?
Not as of October 2026. It is in the Deprecated state. The registry says it becomes eligible for removal three months after SEP-2596 reaches Final, and actual removal is a Core Maintainer decision.
Do I have to support HTTP+SSE in a new client?
No. It is optional backward compatibility. Support it only if your users still connect to servers that have not migrated.
How can I tell which transport a server uses?
Try a POST to the server URL first. If you get a non-MCP 400, 404 or 405, try a GET. An SSE stream that opens with an endpoint event means the old transport.
Did HTTP+SSE have its own security rules?
Yes. The 2024-11-05 page required Origin validation, recommended binding local servers to localhost, and recommended authentication. Those same rules carry over to Streamable HTTP.











