Categories
Artificial Intelligence

From stdio to stateless: a short history of the Model Context Protocol

Five specification revisions and one official extension in under two years: how MCP grew from a local tool protocol into a stateless, extensible standard under the Linux Foundation.

The Model Context Protocol isn’t two years old yet and has already changed shape several times. Here are the specification revisions at a glance, with the ecosystem milestones around them. New to MCP? Start with How does MCP work?

Timeline of the Model Context Protocol from 2024 to 2026: specification revisions 2024-11-05, 2025-03-26, 2025-06-18, 2025-11-25 and 2026-07-28 and the MCP Apps extension 2026-01-26 on the left; launch, adoption by OpenAI, Google and Microsoft, the MCP Apps proposal and the donation to the Agentic AI Foundation on the right.
Specification revisions (left) and ecosystem milestones (right).

2024-11-05: the start

Anthropic launched MCP on 25 November 2024. The first revision already had today’s core: JSON-RPC with an initialize handshake, stdio and HTTP+SSE transports, tools, resources and prompts, plus sampling and roots on the client side. Missing: authorization, a way to ask the user anything, and a remote transport that scaled.

2025-03-26: going remote

OAuth 2.1 authorization, Streamable HTTP replacing HTTP+SSE, and tool annotations such as read-only or destructive. The same day OpenAI adopted MCP; Google and Microsoft followed in April and May.

2025-06-18: structured results and asking the user

Elicitation (form dialogs), structured tool output (outputSchema and structuredContent), resource links, and servers as proper OAuth resource servers. JSON-RPC batching, added in March, was removed again.

2025-11-25: URL elicitation and tasks

The biggest revision so far: URL-mode elicitation for secrets (form vs. URL mode), experimental tasks for long-running work, tool calling in sampling, icons, Client ID Metadata Documents and formal governance. In December, Anthropic donated MCP to the Agentic AI Foundation under the Linux Foundation.

2026-01-26: MCP Apps

The first official extension: a tool can point to an HTML ui:// resource that the host renders in a sandboxed iframe. More in MCP Apps vs. regular MCP servers.

2026-07-28: stateless MCP

The biggest break since launch: every request stands on its own.

  • No handshake, no sessions. Version and capabilities travel with every request; server/discover replaces initialize.
  • Multi round-trip requests replace server-to-client requests: instead of asking the client mid-call, a tool returns input_required and the client retries with the answers. No sticky sessions needed behind a load balancer.
  • subscriptions/listen replaces the GET stream and resources/subscribe; tasks move into an extension.
  • Deprecated (kept for at least twelve months): roots, sampling and logging. notifications/roots/list_changed is already gone.

Living with two generations

Clients and servers won’t switch on the same day. mcp-feature-test serves both on one endpoint: 2026-07-28 requests are handled statelessly, 2025-era clients get a classic session, and the TypeScript SDK translates input_required into old-style requests. Tools like sample_llm, list_roots and structured_output show how your client handles each feature. Open WebUI 0.13.2 does the same from the other side: it tries server/discover and falls back to initialize.

docker run --rm -p 127.0.0.1:3457:3457 ghcr.io/linuxrrze/mcp-feature-test
# MCP endpoint: http://127.0.0.1:3457/mcp, then ask for inspect_client

The pattern

Local tools first, then remote and secure, then better ways to involve the user, and finally no connection state at all, with optional features moved into extensions. Not everything survived: batching lasted one revision, and roots, sampling and logging are on their way out.

Sources

Leave a Reply

Your email address will not be published. Required fields are marked *

Are you human? Please solve:Captcha