Glossary

Streamable HTTP (MCP transport)

The network transport of the Model Context Protocol since revision 2025-03-26. One endpoint, plain POST and JSON when that is enough, Server-Sent Events when the server has something to stream.

General definition

Streamable HTTP (MCP transport) is the transport the Model Context Protocol defines for servers reached over a network. Introduced in specification revision 2025-03-26, it replaces the earlier HTTP+SSE transport from revision 2024-11-05, which needed two endpoints and a permanently open event stream. Streamable HTTP uses one endpoint path, the MCP endpoint, that accepts both POST and GET.

  • POST carries one JSON-RPC message from the client, which must send an Accept header listing both application/json and text/event-stream. For a request the server answers either with a single JSON object or by opening a Server-Sent Events stream on which it can send notifications and requests before the final response. Client notifications and responses get 202 Accepted.
  • GET opens a server-initiated SSE stream for messages not tied to a client request, or returns 405 if the server offers none.
  • Mcp-Session-Id: the server may assign a session id on the initialize response; the client echoes it on every later request, DELETE ends the session, and a 404 tells the client to initialise again.
  • Resumability: servers may put id fields on SSE events, and a client reconnects with Last-Event-ID to have missed events replayed on that stream.
  • MCP-Protocol-Version: sent by the client on every request after version negotiation.

Why the redesign matters: a plain HTTP client can talk to a basic server with nothing but POST and JSON, and a server answers with SSE only when it has something to stream, so servers run on serverless platforms and behind ordinary load balancers without holding connections open. A single endpoint is also easier to protect: one URL to put behind OAuth, one place to validate the Origin header (required, to stop DNS rebinding attacks), one process to bind to localhost when running on a developer machine. Stdio, where the client launches the server as a subprocess, remains the transport for local tools, and clients should still support it.

Servers that must keep supporting old clients can host the legacy SSE and POST endpoints alongside the new MCP endpoint. Clients probing an unknown URL try a POST first and, if it fails with a 4xx, fall back to the old flow of a GET that returns an endpoint event. This is the transport every remote MCP server and connector now depends on.

In the Ethora ecosystem

The hosted Ethora MCP server at mcp.chat.ethora.com speaks Streamable HTTP on /mcp (and on /mcp/k/<key> and /mcp/oauth), accepting POST, GET and DELETE, which is why it can be added to Claude, ChatGPT, Claude Code, Cursor, VS Code and other clients by URL alone. A client that leaves text/event-stream out of its Accept header gets a 406, the most common connection error. Sessions are tracked with the session id and evicted after idle time; state is private per session.

The same code runs the stdio version published as @ethora/mcp-server on npm and the self-hosted service inside the monoserver deploy, so a developer can use stdio locally and the HTTP endpoint from hosted assistants without learning two tools. Configuration snippets for each client are on the tools reference.

Get started

Build AI agents on your own stack

Ethora’s AI SDK brings agents, RAG and self-hosted LLMs into your product. Talk to our team.

Start Free
Free tier available Enterprise SLA No vendor lock-in