Skip to the content.

ADR-0006 — Add the Streamable HTTP transport, as a local endpoint

Context

ADR-0001 rejected Streamable HTTP because correct implementation meant sessions, SSE framing with keep-alives, resumability via Last-Event-ID, and a long-lived GET stream — more protocol surface than the rest of the SDK combined.

That reasoning expired with the revision it was written against. 2026-07-28 deleted every one of those mechanisms: no Mcp-Session-Id, no GET stream, no resumability, no server-initiated requests. What remains is POST a JSON-RPC message, get a JSON object back. A stateless protocol makes an HTTP binding a request-mapping exercise, not a state-management one — and the core already treats every message as a pure function.

Spike 02 measured what is actually hard, and it is not MCP:

Decision

Ship mcpserver_http.sh as a second transport over the same core, and scope it honestly as a local, single-client endpoint — not a production web server.

Consequences

Good

Bad / accepted

Alternatives considered