July 28, 2026

The protocol
goes stateless.

The specification published on 2025-11-25 is being replaced. The release candidate locked on May 21. The final publishes on July 28. The spec calls it a breaking change in those words, and every line below links to the pull request that made it.

2025-11-25 current spec published
2026-05-21 release candidate locked
2026-07-28 the final publishes
2027-07-28 deprecation floor, SEP-2596
  • removed
    initialize, notifications/initialized

    Every request now carries its own protocol version and client capabilities in _meta.

    SEP-2575
  • removed
    Mcp-Session-Id, protocol level sessions

    Cross call state becomes server minted handles, passed back as ordinary tool arguments.

    SEP-2567
  • removed
    Last-Event-ID, SSE resumability

    A broken response stream loses the in flight request. Clients re-issue it as a new one.

    SEP-2575
  • removed
    ping, logging/setLevel, notifications/roots/list_changed

    Log level moves per request into _meta.

    SEP-2575
  • added
    server/discover

    Servers MUST implement it, to advertise supported versions, capabilities and identity.

    SEP-2575
  • added
    resultType on every result

    Either complete, or input_required for a multi round trip interim result.

    SEP-2322
  • added
    Multi Round-Trip Requests

    Replaces every server initiated request: roots/list, sampling/createMessage, elicitation/create.

    SEP-2322
  • added
    Mcp-Method, Mcp-Name

    Now required headers on Streamable HTTP POST requests.

    SEP-2243
  • added
    ttlMs, cacheScope

    Now required on every list and resource read result, so clients can cache and stop polling.

    SEP-2549
  • deprecated
    Roots, Sampling, Logging

    Still fully functional, but new implementations should not adopt them.

    SEP-2577
  • deprecated
    Dynamic Client Registration

    In favor of Client ID Metadata Documents. Kept for servers that do not support CIMD yet.

    PR #2858
  • moved
    Tasks

    Out of the core protocol and into an official extension, io.modelcontextprotocol/tasks.

    SEP-2663
The previous pattern of server-initiated requests is no longer supported. This is a breaking change.
MCP specification, Multi Round-Trip Requests ->

And yet nothing breaks that day.

The same release adopts a feature lifecycle policy with a minimum twelve month deprecation window, so a server written against the old spec keeps working for a year while you move. Hosts are cutting definition cost from their side too. This is not an emergency, and a tool that measures things for a living should be the last one to tell you it is.

It is simply the date on which does mine still comply stops being a matter of opinion. That is what efaimo check --mcp is for, and the commands page shows it run against the official reference server.