From demo to production: what a decade of custom AI builds taught me about agents
Adam Riccoboni, author of The AI Age, on why agents beat chatbots for productivity and five lessons from a decade of custom AI builds at Critical Future.
8 min read
MCP transports are stdio and Streamable HTTP. Here is how each carries messages, what the 2026-07-28 revision removed, and how Claude Code connects to them.
MCP transports decide how a client and a server exchange messages, and the choice also decides where the server can run. A local server runs as a process on the same machine as the client. A remote server runs behind a network address.
MCP transports are the mechanisms that carry JSON-RPC messages between an MCP client and an MCP server. The specification defines two standard transports: stdio, where the client launches the server as a local subprocess, and Streamable HTTP, where the server runs as a remote HTTP endpoint. Protocol semantics are identical on both.
In stdio, the client starts the MCP server as a subprocess and the two exchange messages over its standard streams. The server reads JSON-RPC from stdin and writes to stdout, one message per line, with no embedded newlines. It may write logs to stderr, and the client may capture, forward or ignore them.
The server must not write anything to stdout that is not a valid MCP message, so a stray debug print is a protocol violation. The 2025-06-18 specification says clients SHOULD support stdio whenever possible. The 2026-07-28 stdio page keeps the same framing and defines shutdown: the client closes the server's input, waits for it to exit, and force-terminates the process only if it does not.
Claude Code's MCP reference gives this form for a local server:
claude mcp add --env AIRTABLE_API_KEY=YOUR_KEY --transport stdio airtable -- npx -y airtable-mcp-serverClaude Code sets CLAUDE_PROJECT_DIR in the server's environment to the project root, so a server can resolve project paths without depending on its working directory.
Streamable HTTP replaced the HTTP+SSE transport from protocol version 2024-11-05, and it was introduced in the 2025-03-26 revision. The 2026-07-28 revision changed its behavior. The endpoint accepts POST, and each JSON-RPC request is its own HTTP POST. The server answers with one JSON object, or with a Server-Sent Events stream scoped to that request.

Under the 2025-06-18 revision, the single endpoint accepted both POST and GET. The server had to validate the Origin header and should bind to localhost when it runs locally.
Every POST carries an MCP-Protocol-Version header that must match the version in the request body's _meta. Every request carries Mcp-Method, and requests that name a tool, resource or prompt also carry Mcp-Name. If a header does not match its body value, the server returns HTTP 400 with the HeaderMismatch error, code -32020.
Claude Code's MCP reference recommends HTTP for remote servers and gives this form:
claude mcp add --transport http notion https://mcp.notion.com/mcp
Claude Code also accepts streamable-http as an alias for http in JSON configuration, so a block copied from a server's documentation works without edits.
The current specification revision is 2026-07-28, which the specification site marks as the latest. These changes touch transports, as listed in the changelog:
Mcp-Session-Id header are removed from Streamable HTTP. Servers that need state across calls pass explicit handles as tool arguments.subscriptions/listen request.Last-Event-ID header no longer applies, and a broken response stream loses the in-flight request, which the client re-issues with a new request ID.Mcp-Method header, and Mcp-Name where the method names a tool, resource or prompt.Choose stdio for a server that runs on the same machine as the client and works with local files or local tools. Choose Streamable HTTP for a server that is hosted or shared over a network. The specification says new implementations should not adopt deprecated features, so a new server should not start on HTTP+SSE.
AI Agents Listing publishes about 604 MCP servers in its MCP servers directory, where you can compare them before you pick one.
claude mcp add --transport http and a local one with --transport stdio.Use stdio. The client launches the server as a subprocess, so no network endpoint is involved. The 2025-06-18 specification says clients SHOULD support stdio whenever possible.
Yes, for the response to a single request. The server answers with a JSON object or with an SSE stream scoped to that request. The 2026-07-28 revision removed SSE resumability, so a client whose stream breaks must send the request again under a new request ID.
For compatibility, yes. The 2026-07-28 revision marks HTTP+SSE as Deprecated. The 2025-06-18 backwards-compatibility section says servers that want older clients can keep the old SSE and POST endpoints alongside the MCP endpoint. Claude Code's reference also marks SSE as deprecated and recommends HTTP for remote servers.
One email a week. New agents, MCP servers and skills, and what is actually getting traction.
Adam Riccoboni, author of The AI Age, on why agents beat chatbots for productivity and five lessons from a decade of custom AI builds at Critical Future.
8 min read
MCP prompts are reusable message templates an MCP server exposes through prompts/list and prompts/get. Here is how they work, with the 2026-07-28 changes.
4 min read
A Copenhagen agency founder on logging MCP agent runs, splitting agent time from human review, and turning a run into an invoice line without watching anyone's screen.
5 min read