# MCP protocol eras (version history)

> VI: https://5ac.vn/wiki/mcp-eras/ · EN: https://5ac.vn/en/wiki/mcp-eras/ · lang: en · spec_as_of 2026-10-18 (spec 2026-07-28) · cluster C4

The five dated revisions of the Model Context Protocol spec, 2024-11-05 through 2026-07-28: what changed in each era, which tutorials still describe the old handshake, and how to detect which era a document assumes.

---
## Definition

MCP eras is the name for the five dated revisions of the Model Context Protocol specification: 2024-11-05, 2025-03-26, 2025-06-18, 2025-11-25 and 2026-07-28. Each era changed how client and server shake hands, declare their version, and receive notifications. Knowing which era a document describes keeps you from pasting an old handshake into a server running the 2026 protocol.

## Mechanism

MCP versions itself by date, not semver. The versioning page states it verbatim (accessed 18 Oct 2026): *"The Model Context Protocol uses string-based version identifiers following the format `YYYY-MM-DD`, to indicate the last date backwards incompatible changes were made"*: the version only moves when compatibility breaks. The chain below is verified from the changelog pages themselves: each opens with "This document lists changes made to the Model Context Protocol (MCP) specification since the previous revision, …" — string the four sentences together for one unbroken chain across exactly five milestones:

| Era | Signature changes per the original changelog | How to spot a document assuming it |
| --- | --- | --- |
| 2024-11-05 | first release: JSON-RPC 2.0, a centralized handshake, HTTP+SSE transport, no authorization framework | says "HTTP+SSE endpoint", never mentions OAuth |
| 2025-03-26 | adds OAuth 2.1 authorization; Streamable HTTP replaces HTTP+SSE; adds JSON-RPC batching; adds tool annotations | teaches "batching" as a live feature |
| 2025-06-18 | removes batching; structured tool output; servers are OAuth Resource Servers; Resource Indicators (RFC 8707) required; elicitation added; `MCP-Protocol-Version` header required | still teaching batching = outdated from here on; mentions RFC 8707 → this era onward |
| 2025-11-25 | OIDC Discovery for authorization servers; icons; incremental scope consent; URL-mode elicitation; sampling gains tool calling; Client ID Metadata Documents; experimental tasks in the core; JSON Schema 2020-12 | "tasks" advertised through `capabilities.tasks` as a core capability |
| 2026-07-28 | drops the `initialize` handshake and `Mcp-Session-Id` session; per-request version in `_meta`; `server/discover` added; MRTR; required `resultType`; `subscriptions/listen`; tasks become an extension; Roots/Sampling/Logging deprecated | `server/discover`, MRTR or `resultType` appear; the handshake is no longer mandatory |

## Which tutorials still describe the old handshake

Many. The versioning page itself keeps a compatibility section for *"servers and clients that implement the handshake-based protocol revisions (`2025-11-25` and earlier)"* — in the spec's own words, all four first eras are "handshake-based". Ecosystem proof: MCP's own Inspector defaults to the `legacy` era, and the docs say why: *"A debugging tool must not auto-probe. A `server/discover` probe stalls against silent legacy stdio servers"*. So many servers still behave legacy that probing is unsafe as a default. Consequence for reading: any tutorial written before August 2026 almost certainly describes a one-time `initialize` handshake, a session id, maybe batching or HTTP+SSE: none of which matches a 2026-07-28 server.

## Spec anchor

Every revision date is read from a normative page, with the exact sentence where the date or label appears (all fetched live, HTTP 200, 18 Oct 2026):

- <https://modelcontextprotocol.io/specification/versioning> — *"The current protocol version is 2026-07-28."* — and *"For interoperability with servers and clients that implement the handshake-based protocol revisions (`2025-11-25` and earlier), see Backward Compatibility."*
- <https://modelcontextprotocol.io/specification/2025-03-26/changelog> — *"…since the previous revision, 2024-11-05."*
- <https://modelcontextprotocol.io/specification/2025-06-18/changelog> — *"…since the previous revision, 2025-03-26."*
- <https://modelcontextprotocol.io/specification/2025-11-25/changelog> — *"…since the previous revision, 2025-06-18."*
- <https://modelcontextprotocol.io/specification/2026-07-28/changelog> — *"…since the previous revision, 2025-11-25."* (headline changes: *"Make MCP stateless: remove the `initialize`/`notifications/initialized` handshake"*; *"Add `server/discover`: servers MUST implement this RPC"*)
- <https://modelcontextprotocol.io/llms.txt> — the official machine-readable index: exactly five dated directories, `specification/2024-11-05`, `2025-03-26`, `2025-06-18`, `2025-11-25`, `2026-07-28` (plus the matching `docs/` series) — no sixth revision exists.
- <https://modelcontextprotocol.io/docs/2026-07-28/tools/inspector/protocol-eras.md> — *"The 2026-07-28 revision of MCP made substantial changes to the protocol. The Inspector therefore treats protocol era (legacy or modern, meaning before or as of that revision) as a first-class, per-server setting"* — "era" is the official term, not one this entry invented.

## Academic anchors

This entry needs no arXiv anchor: its subject is an open standard's revision history, and the normative sources above (versioning page + four changelogs) are themselves the primary record — every date comes straight from them, not from a third-party summary. For a reading frame on *measuring* protocol implementations, see the survey arXiv:2507.21504 linked from the [Model Context Protocol](/en/wiki/mcp/) entry.

## FAQ

**Why dates instead of semver?** A version bumps only on breaking changes; between revisions the spec keeps taking compatible improvements — the versioning page calls it *"incremental improvements while preserving interoperability"*, a living-version model semver cannot express.

**My tutorial teaches the `initialize` handshake: still usable?** Yes, for servers on ≤ 2025-11-25 (most production servers today). But a client built from that pattern needs the backward-compatibility path checked: a 2026 server has no mandatory handshake — it reads the version from each request's `_meta`.

**Cheapest tells for a document's era?** Three signatures: batching (only correct 2025-03-26→2025-06-18); `Mcp-Session-Id` or HTTP+SSE (≤ 2025-11-25); `server/discover` or MRTR (2026-07-28).

**Does a new revision delete features immediately?** No. Since 2026-07-28 a formal feature lifecycle applies: Deprecated features *"remain in the specification for at least twelve months"* before they become eligible for removal. Roots, Sampling and Logging sit in that window now.

**A sixth revision yet?** As of the 18 Oct 2026 as-of date, the official index and the four changelog pages show exactly five revisions; no successor is marked Current. The access date is part of the claim — that is the spec-as-of contract working.

## Related

- [Model Context Protocol (MCP)](/en/wiki/mcp/)
- [What is llms.txt](/en/wiki/llms-txt/)
- [Agent2Agent (A2A) protocol](/en/wiki/a2a/)
- [ACP — three protocols, one name](/en/wiki/acp/)
- [Agent Skills (SKILL.md)](/en/wiki/agent-skills/)
- [What Is a Multi-Agent OS?](/en/blog/what-is-multi-agent-os/) — the multi-agent architecture the MCP and A2A protocols plug into
