
This page is part of our MCP specification reference, a plain-English guide to the Model Context Protocol spec (version 2026-07-28), within The MCP Guide. Building a server? See MCP development.
Status in the 2026-07-28 spec: core (version negotiation is required; the deprecation policy governs the spec itself)
MCP versions are dates, such as 2026-07-28, that mark the last time a backward-incompatible change was made. In the current spec, every request states the version it uses, and the server accepts or rejects each request on its own. Features are retired through a formal deprecation policy with a minimum twelve-month window.
Together, these rules tell you two things. Which version a client and server are speaking right now. And how much warning you get before a feature disappears.
This page covers both, using the versioning and compatibility page and the feature lifecycle and deprecation policy, as of October 2026.
Key Takeaways
- MCP version IDs use the format YYYY-MM-DD and change only when backward-incompatible changes are made.
- Revisions are Draft, Current or Final; as of October 2026, 2026-07-28 is Current.
- Every request carries its version in
_meta; unsupported versions get error-32022with a list of supported ones. - Features move through three states: Active, Deprecated and Removed.
- A deprecated feature stays for at least twelve months, or at least ninety days for an active security risk.
- Roots, Sampling, Logging and Dynamic Client Registration are deprecated, with earliest removal on or after 2027-07-28.
What MCP versioning is
The versioning guide says MCP uses "string-based version identifiers following the format YYYY-MM-DD, to indicate the last date backwards incompatible changes were made." Backward-compatible updates do not bump the version.
Each revision has a label:
| Label | Meaning |
|---|---|
| Draft | In progress, not ready for use |
| Current | The version to use; may still get backward-compatible changes |
| Final | Past and complete; will not change |
Why MCP needs both rules
MCP has thousands of independent clients and servers. They upgrade at different times. Versioning lets two programs agree on rules for each request. The deprecation policy gives builders a predictable runway before something is taken away.
The policy came with the 2026-07-28 release. The changelog lists it under governance updates, adopted through SEP-2596.
How version negotiation works
"There is no negotiation handshake," the versioning page says. "Every request carries its protocol version, and the server accepts or rejects each request independently."
The client sets io.modelcontextprotocol/protocolVersion in _meta. On HTTP the same value also goes in the MCP-Protocol-Version header. If the server does not support it, it "MUST respond with an UnsupportedProtocolVersionError listing the versions it does support." Here is the spec's example:
{
"jsonrpc": "2.0",
"id": 1,
"error": {
"code": -32022,
"message": "Unsupported protocol version",
"data": {
"supported": ["2026-07-28", "2025-11-25"],
"requested": "1900-01-01"
}
}
}
The client SHOULD pick a version from supported and retry, or show an error if none match. Clients that want to choose up front can call server/discover first.
Old and new versions side by side
The spec calls 2026-07-28 and later "modern," and 2025-11-25 and earlier "legacy," because those used an initialize handshake. An implementation that supports both is "dual-era." A server MAY serve both eras on the same endpoint. The versioning page includes a full compatibility matrix, and our specification changelog lists what each version changed.
How the deprecation policy works
The feature lifecycle policy defines three states:
| State | What it means | What you should do |
|---|---|---|
| Active | Part of the Current revision | Implement as specified |
| Deprecated | Still in the spec, scheduled for removal, with a migration path | Do not adopt it; migrate before earliest removal |
| Removed | Deleted from the draft; absent from the next Current revision | Do not depend on it in that revision |
A feature may be deprecated when something newer covers the same need, when it carries a risk that cannot be fixed in place, or when adoption is negligible compared with its upkeep. Each deprecation needs a SEP with a migration path and a window "at least twelve" months long. The window starts when the revision marking it deprecated is released.
Removal is not automatic. Core Maintainers decide during release preparation, and "features may remain Deprecated, without removal, for much longer than the minimum deprecation window."
The twelve-month floor can be shortened only for an "active security risk," such as a vulnerability with a published advisory and no in-place fix. Even then, the window must be "at least ninety days."
Tier 1 SDKs must mark deprecated features with their language's native deprecation tag in their next release, and should warn at runtime. See the official MCP SDKs for which SDKs are Tier 1.
What is deprecated as of October 2026
The deprecated features registry is the single list to check:
| Feature | Deprecated in | Migration path | Earliest removal |
|---|---|---|---|
| Roots | 2026-07-28 | Tool parameters, resource URIs or server configuration | First revision on or after 2027-07-28 |
| Sampling | 2026-07-28 | Call AI model provider APIs directly | First revision on or after 2027-07-28 |
| Logging | 2026-07-28 | stderr for stdio; OpenTelemetry | First revision on or after 2027-07-28 |
| Dynamic Client Registration | 2026-07-28 | Client ID Metadata Documents | First revision on or after 2027-07-28 |
includeContext "thisServer"/"allServers" | 2025-11-25 | Omit the field or use "none" | Follows Sampling |
| HTTP+SSE transport | 2025-03-26 | Streamable HTTP | Three months after SEP-2596 reaches Final |
The registry also says: "No features have been removed under this policy yet."
What changed across spec versions
- 2025-06-18 and earlier: versions were agreed once in
initialize. The 2025-06-18 release added theMCP-Protocol-VersionHTTP header for later requests, per its changelog. - 2025-11-25: the 2025-11-25 lifecycle page still required the client to send a version in
initialize, with the server answering with the same or another version it supports. - 2026-07-28: per-request versions,
server/discover, theUnsupportedProtocolVersionError, the formal lifecycle policy and the deprecated registry.
Common mistakes
- Treating "deprecated" as "removed." Deprecated features still work. Plan the migration; do not panic.
- Treating "deprecated" as "fine forever." New implementations should not adopt them.
- Falling back to
initializeon a modern error. If a server returns-32022, it is modern. Retry with a supported version instead. - Reading a release date as the version. The version date marks the last breaking change, not necessarily the publish date.
- Expecting SDKs to drop features on the spec's schedule. The policy says SDK removal follows each SDK's own support policy.
Next step
See every version and its headline changes in MCP specification version history and changelog. For a governance view of upgrades, read MCP governance for IT leaders, or browse the MCP specification hub.
Frequently asked questions
How are MCP versions numbered?
They are dates in YYYY-MM-DD format. The date marks the last time backward-incompatible changes were made. Backward-compatible updates keep the same version.
What is the current MCP version?
As of October 2026, it is 2026-07-28. Earlier versions are 2025-11-25, 2025-06-18, 2025-03-26 and 2024-11-05, and a draft is in progress.
How long do deprecated MCP features last?
At least twelve months from the release that deprecated them. For an active security risk, the window can be shortened, but never below ninety days. Features can stay deprecated much longer.
What happens if my client sends a version the server does not support?
The server returns error -32022 with a list of the versions it supports. The client should retry with one of them, or tell the user if none match.
Has anything been removed from MCP under the new policy?
Not through the deprecation process, as of October 2026; the registry says no features have been removed under the policy yet. Breaking releases have removed things directly, though. The 2026-07-28 release itself removed sessions, the initialize handshake and ping, and 2025-06-18 removed JSON-RPC batching.











