MCP SSE vs Streamable HTTP: which transport to use
SSE is MCP's older, deprecated HTTP transport; Streamable HTTP replaced it with one endpoint that takes every message as a POST. Which to choose.

SSE and Streamable HTTP are MCP's old and new ways to carry messages over HTTP. The HTTP+SSE transport from protocol version 2024-11-05 used two endpoints: a Server-Sent Events endpoint where the client connects and receives the server's messages, and a separate endpoint for the client's POSTs. Streamable HTTP replaced it with one MCP endpoint, where every client message is a new POST and the server answers with JSON or an SSE stream. HTTP+SSE is now deprecated, so choose Streamable HTTP whenever a server offers it.
The transport rules come from the MCP specification: the 2024-11-05, 2025-11-25, and 2026-07-28 Transports pages and the 2026-07-28 changelog. Client labels come from each client's own docs, and Sume's side from its MCP quickstart and current server code. All were read on 2026-09-28.
What is the difference between SSE and Streamable HTTP?
The old transport splits receiving and sending across two endpoints; the new one takes everything at one endpoint and streams only when the server chooses to. Both are HTTP transports; stdio, where the client launches the server as a subprocess, is compared in Local vs remote MCP server.
| Question | HTTP+SSE | Streamable HTTP |
|---|---|---|
| Status | Defined in revision 2024-11-05; deprecated since 2025-03-26 | Replaces HTTP+SSE; one of MCP's two standard transports |
| Endpoints | Two: an SSE endpoint and a regular HTTP POST endpoint | One MCP endpoint, such as https://example.com/mcp |
| How does the client send? | POSTs to a URI the server sends in an endpoint event when the client connects | Every message is a new HTTP POST to the MCP endpoint |
| How does the server reply? | SSE message events, with JSON in the event data | Per request: one JSON object (application/json) or an SSE stream (text/event-stream) |
Is SSE deprecated in MCP?
Yes. The 2025-11-25 spec says Streamable HTTP replaces the HTTP+SSE transport from 2024-11-05, and the 2026-07-28 changelog reclassifies HTTP+SSE, deprecated since 2025-03-26, as Deprecated under MCP's feature lifecycle policy, with the instruction "Migrate to Streamable HTTP." A deprecated feature stays in the spec for at least twelve months, or ninety days under an expedited-removal exception, before it becomes eligible for removal, and new implementations should not adopt it.
Old and new can still meet. The spec's backward-compatibility steps have a client POST an initialize request to the URL first; if that fails with 400, 404, or 405, the client sends a GET and expects the old SSE stream, with an endpoint event first.
Does Streamable HTTP still use SSE?
Only when the server wants to stream. For each request a client POSTs, the server returns either Content-Type: application/json with one JSON object or text/event-stream to open an SSE stream, and clients must support both. Under 2025-11-25, a client may also GET the endpoint to open a stream for messages the server starts; a server that offers none answers 405 Method Not Allowed. The 2026-07-28 revision replaces that GET stream with a subscriptions/listen request, a long-lived stream for change notifications that the client opts into; every message is still a POST, and replies arrive as a JSON object or a request-scoped SSE stream.
How do MCP clients label the two transports?
Each client names them its own way, so check the label before you pick. From Claude Code v2.1.265, --transport http also reaches SSE-only servers: it tries HTTP first and switches to SSE when the server doesn't accept it.
| Client | Streamable HTTP | HTTP+SSE |
|---|---|---|
| Claude Code | --transport http; in JSON config, streamable-http is an alias for http | --transport sse; its docs call the SSE transport deprecated |
| GitHub Copilot CLI | Server Type HTTP | Server Type SSE: deprecated in the MCP specification, still supported for backwards compatibility |
| AnythingLLM | "type": "streamable" | "type": "sse", assumed when type is missing |
| Android Studio (Gemini) | httpUrl | url; SSE endpoints are usually marked by /sse in the URL |
Which transport does Sume's MCP server use?
Streamable HTTP only. Sume's quickstart says to point a streamable HTTP MCP client at https://mcp.sume.com/mcp, so pick your client's HTTP or Streamable HTTP option, never SSE. In AnythingLLM, set type explicitly, because a missing type means sse (AnythingLLM MCP server setup).
In current code, Sume's mcp_health tool reports transport as streamable_http, and the server answers each POSTed request with a single JSON response rather than an SSE stream. A GET on /mcp, which is how an SSE client connects, gets 401 without a credential; with a valid one it gets 405 and the message "Remote MCP uses POST JSON-RPC requests." So a client set to SSE never gets its event stream. To check a connection yourself, see how to test an MCP server.
Sume's basics page says hosted MCP still works but is not part of the primary path today. n8n's "SSE Endpoint" field label is covered in n8n MCP Client Tool with Sume.
Sources
- MCP specification 2024-11-05: Transports (read 2026-09-28)
- MCP specification 2025-11-25: Transports (read 2026-09-28)
- MCP specification 2026-07-28: Key changes (read 2026-09-28)
- MCP specification 2026-07-28: Transports (read 2026-09-28)
- Model Context Protocol: Versioning (read 2026-09-28)
- Claude Code Docs: Connect Claude Code to tools via MCP (read 2026-09-28)
- GitHub Docs: Adding MCP servers for GitHub Copilot CLI (read 2026-09-28)
- AnythingLLM Docs: MCP compatibility overview (read 2026-09-28)
- Android Developers: Add an MCP server (read 2026-09-28)
- MCP quickstart
- Sume basics
Related posts
More in Developers
- MCP tool call result structure: content, structuredContent
An MCP tool call result has a content array, optional structuredContent, and isError. What goes where, how images travel, and how errors look.
- MCP tool description: what to write and how long it can be
An MCP tool description is the text a model reads to pick and call a tool. What the spec says, where Claude Code cuts it short, and what to write.
- MCP tool exceeds maximum allowed tokens: the fix
Claude Code caps MCP tool output at 25,000 tokens by default. Raise it with MAX_MCP_OUTPUT_TOKENS, or make the tool return less data.
- MCP tool limit in VS Code, Claude Code, and Cursor
VS Code allows 128 enabled tools per chat request. Claude Code has no fixed cap and defers MCP tools. Cursor's MCP docs name no number.
Written by Sume