MCP 2026-07-28 transports and the legacy boundary
stdio: local
binding
client-launched child process
one JSON-RPC object per line
stdout protocol, stderr logs
modern metadata
version + capabilities per request
clientInfo SHOULD repeat
lifetime
EOF closes transport process
process is not protocol session
recovery
restart, rediscover, relist
retry safe work with new id
Streamable HTTP: modern
single endpoint /mcp
POST each JSON-RPC message
response: JSON or scoped SSE
required mirrors
MCP-Protocol-Version
Mcp-Method + conditional Mcp-Name
validate every value vs body
long-lived changes
POST subscriptions/listen
ack + tagged notifications + result
removed modern behavior
GET / DELETE return 405
ignore session + replay headers
no server JSON-RPC requests
legacy compatibility only
2025 Streamable HTTP
Mcp-Session-Id
standalone GET + DELETE
Last-Event-ID resumption
2024 HTTP+SSE
separate SSE and POST endpoints
safe dual-era probe
modern POST first
recognized modern error: stay modern
unrecognized miss: try legacy
migration rule
keep legacy routes separate
never label them 2026 behavior
Protocol semantics stay the same across bindings: every modern request is self-describing.