---
title: "MCP goes stateless on July 28. A registry's probe gets simpler; its conformance score gets harder."
date: 2026-07-25
summary: "The 2026-07-28 revision removes the initialize handshake and session header — the exact signals a directory uses to tell a live server from a dead URL. What replaces them is cheaper to probe and quietly resets what conformance measures."
slug: mcp-stateless-probe-conformance
author: "Sebastiaan Hilbers"
hero_glyph: brackets
---

On July 28, the Model Context Protocol ships the largest revision since it launched. The [2026-07-28 release candidate](https://blog.modelcontextprotocol.io/posts/2026-07-28-release-candidate/) removes protocol-level sessions: no `initialize`/`initialized` handshake, no `Mcp-Session-Id` header, no sticky routing. The maintainers frame it as an operational simplification, and it is — [as TechCrunch put it](https://techcrunch.com/2026/07/20/ais-most-important-protocol-is-getting-a-little-bit-easier-to-use/), the protocol moves to a "looser, 'stateless' approach to session IDs on the server side, similar to how most ordinary websites already work." A remote server that used to need a shared session store and sticky load balancing can now sit behind a plain round-robin.

There is a second-order effect the deployment framing skips. The handshake that statelessness removes is also the handshake a registry uses to tell a live MCP server from a dead URL. When you optimize a protocol for load balancers, you optimize it for observers too — and the signal a directory reads shifts from a session negotiation to a single request. That makes liveness cheaper to measure and, at the same time, makes conformance harder to score. Both halves matter if you run the measurement layer.

## What the probe reads today

Agenstry crawls the agent web and probes what it finds. Of [5,177 indexed candidates, 3,652 return a parseable card and 357 answer a live protocol request](https://agenstry.com/reports/state-of-agent-economy) as of the July 25, 2026 snapshot — a 6.9% live rate that is the single most-quoted number in our reports. For an MCP server, "live" today means a specific exchange: open the stream, send `initialize`, receive `serverInfo` and the capability set, send `initialized`, then list tools. The handshake is the evidence. It tells you the endpoint speaks MCP, which version, and what it claims to offer, all before you call anything.

That exchange is stateful by construction. The `Mcp-Session-Id` the server returns has to come back on every subsequent request, which is exactly the coordination burden the new spec removes. Arcade's engineers [described the pain to TechCrunch](https://techcrunch.com/2026/07/20/ais-most-important-protocol-is-getting-a-little-bit-easier-to-use/): "every one of those machines has to know about a session ID that some other machine handed out … it fights the load balancer instead of working with it." A prober fights the same thing at smaller scale — it has to hold a session open across round-trips to collect a full picture of a server it may never contact again.

## What replaces it

Six Specification Enhancement Proposals remove the session model together. [SEP-2575](https://blog.modelcontextprotocol.io/posts/2026-07-28-release-candidate/) drops the `initialize`/`initialized` handshake; protocol version and client info now ride in `_meta` on every request. SEP-2567 eliminates the `Mcp-Session-Id` header. SEP-2243 mandates `Mcp-Method` and `Mcp-Name` headers so a router — or a gateway, or anything sitting in front of the server — can see what is being called without parsing the body.

Read that as a measurement spec and it is unusually friendly. After July 28, confirming an MCP endpoint is live no longer requires negotiating and holding a session. The method and name are in the headers; the version is in `_meta`; any request can land on any instance. The evidence a registry needs to record "this server answered, speaking this version of the protocol" arrives in a single stateless round-trip that looks like every other HTTP request the server handles. The probe gets simpler, and — because it no longer depends on the server keeping state it might drop under load — more honest about what production traffic will actually see.

<svg viewBox="0 0 640 250" xmlns="http://www.w3.org/2000/svg" style="max-width:100%;height:auto" role="img" aria-label="Before July 28, a liveness probe needs a four-step stateful handshake; after, a single stateless request carries the same evidence.">
  <text x="20" y="28" font-family="Geist, sans-serif" font-size="15" font-weight="600" fill="#A855F7">Today — stateful handshake</text>
  <rect x="20" y="44" width="180" height="34" rx="6" fill="none" stroke="#A855F7" stroke-width="1.6"/>
  <text x="110" y="66" text-anchor="middle" font-family="Geist Mono, monospace" font-size="12" fill="#A855F7">initialize →</text>
  <rect x="20" y="86" width="180" height="34" rx="6" fill="none" stroke="#A855F7" stroke-width="1.6"/>
  <text x="110" y="108" text-anchor="middle" font-family="Geist Mono, monospace" font-size="12" fill="#A855F7">← serverInfo + Session-Id</text>
  <rect x="20" y="128" width="180" height="34" rx="6" fill="none" stroke="#A855F7" stroke-width="1.6"/>
  <text x="110" y="150" text-anchor="middle" font-family="Geist Mono, monospace" font-size="12" fill="#A855F7">initialized →</text>
  <rect x="20" y="170" width="180" height="34" rx="6" fill="none" stroke="#A855F7" stroke-width="1.6"/>
  <text x="110" y="192" text-anchor="middle" font-family="Geist Mono, monospace" font-size="12" fill="#A855F7">tools/list →</text>
  <text x="230" y="128" font-family="Geist, sans-serif" font-size="24" fill="#F472B6">→</text>
  <text x="330" y="28" font-family="Geist, sans-serif" font-size="15" font-weight="600" fill="#F472B6">2026-07-28 — stateless</text>
  <rect x="330" y="104" width="290" height="52" rx="6" fill="none" stroke="#F472B6" stroke-width="1.6"/>
  <text x="475" y="128" text-anchor="middle" font-family="Geist Mono, monospace" font-size="12" fill="#F472B6">tools/list</text>
  <text x="475" y="146" text-anchor="middle" font-family="Geist Mono, monospace" font-size="11" fill="#F472B6">Mcp-Method · Mcp-Name · _meta(version)</text>
  <text x="330" y="184" font-family="Geist, sans-serif" font-size="12" fill="#888">One round-trip carries the same evidence.</text>
</svg>

## Where it gets harder

Conformance is the other half of what a registry records, and the rewrite moves it. Agenstry scores every live agent against a published nine-criterion methodology; some of those criteria read capabilities the new spec is deprecating. [SEP-2577](https://blog.modelcontextprotocol.io/posts/2026-07-28-release-candidate/) marks Roots, Sampling, and Logging as deprecated — annotation-only for now, functional for at least twelve months under the new [feature-lifecycle policy](https://blog.modelcontextprotocol.io/posts/2026-07-28-release-candidate/), but on a removal path. A server that exposes Sampling in July is advertising a capability that the protocol is steering callers away from. Scoring that as a positive signal ages badly.

The same is true in reverse for the new first-class extensions. Tasks graduated out of experimental core into an extension with a real lifecycle — `tools/call` can return a task handle that the client drives with `tasks/get`, `tasks/update`, and `tasks/cancel`. MCP Apps (SEP-1865) lets a server ship an interactive HTML surface rendered in a sandboxed iframe. Neither existed as a stable capability to score before this release. A conformance rubric written against the pre-July protocol will silently under-credit servers that adopt the parts of MCP that are actually going forward, and over-credit servers still exposing the parts on their way out.

This is the recurring lesson of measuring a moving protocol: the score is only as current as the spec it encodes. A live-probe result is a fact about a moment; a conformance grade is an opinion about a spec version, and it decays the moment the spec revs. The July 28 release is a large enough rev that a static rubric would start lying within the quarter.

## What we're doing about it

Two concrete changes, both scoped to the transport switch rather than to any one server. The liveness probe is getting a stateless path: after July 28 it should confirm an MCP endpoint from a single headered request and fall back to the handshake for servers still on the older revision, so the 6.9% live rate stays comparable across the cutover instead of stepping on the calendar the way a naive migration would. The conformance rubric is moving Roots, Sampling, and Logging from positive signals to neutral-and-sunsetting, and adding Tasks and MCP Apps as scored capabilities once Tier 1 SDK support lands inside the [ten-week validation window](https://blog.modelcontextprotocol.io/posts/2026-07-28-release-candidate/) the maintainers set before final publication.

The open question is the long tail. Deprecation windows are twelve months minimum, so for the next year the crawl will hold a mix of stateful and stateless servers, and a directory has to read both without pretending they are the same thing. The interesting measurement over the next few quarters is not the live rate itself but the migration curve underneath it: how fast the servers that answer our probe move off the handshake once they no longer have to keep it. That number will say more about MCP's operational maturity than any single snapshot of how many are live today.

## Sources

- [The 2026-07-28 MCP Specification Release Candidate](https://blog.modelcontextprotocol.io/posts/2026-07-28-release-candidate/) — Model Context Protocol maintainers, 2026.
- [AI's most important protocol is getting a little bit easier to use](https://techcrunch.com/2026/07/20/ais-most-important-protocol-is-getting-a-little-bit-easier-to-use/) — Russell Brandom, TechCrunch, July 20, 2026.
- [State of the Agent Economy — Agenstry registry crawl](https://agenstry.com/reports/state-of-agent-economy) — Agenstry, snapshot 2026-07-25.
- [Conformance methodology](https://agenstry.com/methodology) — Agenstry.
