MCP · Protocol deep dive
MCP 2026: The Stateless Protocol Upgrade Every Server Author Needs to Know
The next Model Context Protocol release (finalising July 28, 2026) is the biggest spec change since launch: stateless core, JSON Schema 2020-12, hardened OAuth, cloud-native routing headers, and a formal deprecation policy. Here's what changes and how to migrate.
The Model Context Protocol has gone from a November 2024 spec novelty to a 14,000-server ecosystem in under two years. That growth has exposed the seams in the original design — session-oriented state, thin tool contracts, and enterprise auth that required bespoke wiring. The July 28, 2026 release closes all three gaps in one go. If you ship an MCP server, a tool wrapper, or a skills platform that speaks MCP, this post is your head start on the migration.
14K+
servers in the ecosystem
as of May 2026, Linux Foundation AAIF
July 28
spec finalization date
2026 — zero-downtime window
12 mo
deprecation runway
minimum before removal per new policy
Why this release matters
Most protocol upgrades are incremental. The MCP 2026 release is a maturity milestone — the kind of change that separates "interesting research project" from "enterprise infrastructure." Four things drove the scope:
- Scale pressure. The original session model assumed a single long-lived connection between a client and a server. At 14,000 servers with millions of daily requests, operators need to load-balance horizontally without sticky-session routing.
- Enterprise adoption. Fortune 500 teams evaluating MCP consistently hit the same wall: OAuth wiring was underdefined, making security review painful and implementation inconsistent.
- Model capability growth. Frontier models can now reason over complex, nested tool schemas. The original flat JSON Schema support was leaving capability on the table.
- Governance transfer.With MCP now under the Linux Foundation's AAIF, the spec needed formal lifecycle rules — deprecation timelines, versioning, and extension governance — that a startup-spec couldn't credibly provide.
Stateless core — the biggest change
The original MCP handshake established a session: client and server exchanged capability manifests once, then every subsequent request assumed that shared session state. This worked fine for local single-client deployments. It breaks the moment you put a load balancer in front.
The 2026 spec eliminates the session dependency from the request path. Each request is now self-contained, carrying protocol version and negotiated capabilities inline. The server doesn't need to remember who asked — it reads everything it needs from the request.
{
"jsonrpc": "2.0",
"method": "tools/call",
"params": {
"name": "search",
"arguments": { "query": "TypeScript generics" }
},
"id": 1
// Protocol version + capabilities negotiated once at handshake,
// stored in session — not present in each request
}{
"jsonrpc": "2.0",
"method": "tools/call",
"params": {
"name": "search",
"arguments": { "query": "TypeScript generics" },
"_meta": {
"protocolVersion": "2026-07-28",
"clientCapabilities": ["tools", "resources", "prompts"],
"traceContext": {
"traceparent": "00-4bf92f3577b34da6a3ce929d0e0e4736-00f067aa0ba902b7-01"
}
}
},
"id": 1
}The practical win is standard load balancing: round-robin, least-connections, consistent-hash — any strategy works because there's no sticky session to maintain. Cloud deployments that required session-affinity hacks can drop them entirely.
0
sticky session config needed after migration
Any standard load balancer topology works with the stateless request format
JSON Schema 2020-12 for tools
Tool input and output schemas upgrade from JSON Schema Draft 7 to the full 2020-12 dialect. That sounds like a version-bump footnote, but the practical difference is significant for authors of complex tools.
Draft 7 was flat: you could validate that a field was a string, or that an array contained objects of a given shape. JSON Schema 2020-12 adds composition, references, and conditionals. Real tool schemas get meaningfully richer:
{
"name": "create_issue",
"description": "Create a GitHub or Linear issue",
"inputSchema": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"type": "object",
"required": ["tracker", "title"],
"properties": {
"tracker": { "enum": ["github", "linear"] },
"title": { "type": "string", "minLength": 1, "maxLength": 200 },
"labels": {
"type": "array",
"items": { "$ref": "#/$defs/label" }
}
},
"if": { "properties": { "tracker": { "const": "linear" } } },
"then": {
"properties": {
"teamId": { "type": "string", "description": "Linear team ID — required for Linear" }
},
"required": ["teamId"]
},
"$defs": {
"label": { "type": "string", "pattern": "^[a-z][a-z0-9-]*$" }
}
}
}The if/then block above makes teamId conditionally required — only when targeting Linear. In Draft 7, this required a oneOf workaround that models struggled to reason about cleanly. The 2020-12 form is unambiguous and models handle it significantly better.
Hardened OAuth 2.0 / OIDC
Enterprise security reviews blocked MCP adoption more than any technical limitation. The original spec referenced OAuth but left implementation open-ended. Every enterprise shop wired it differently. The 2026 spec closes the gaps:
- Issuer validation — servers must verify
issagainst a validated OIDC discovery document. No more trusting arbitrary JWTs. - Dynamic client registration — clients can self-register following RFC 7591, removing the manual pre-registration step that made tool distribution painful.
- Refresh token handling — the spec now defines exactly how MCP sessions refresh tokens, preventing the silent expiry bugs that plagued long-running agent sessions.
- Scope declarations in manifests — tools declare the OAuth scopes they require in the manifest, enabling clients to request least-privilege tokens per tool rather than a single broad token.
Cloud-native additions
Three additions target the infrastructure layer directly — the things that matter when you're running MCP behind a gateway or a service mesh.
Routing headers
Two new HTTP headers — Mcp-Method and Mcp-Name — carry the JSON-RPC method and tool name at the HTTP layer. Gateways, load balancers, and WAFs can route and filter without parsing the request body.
POST /mcp HTTP/1.1
Host: my-mcp-server.example.com
Content-Type: application/json
Authorization: Bearer eyJ...
Mcp-Method: tools/call
Mcp-Name: search
{ "jsonrpc": "2.0", "method": "tools/call", ... }Predictable caching
Tool responses now support ttlMs and cacheScope fields in the result _meta block. Set cacheScope: "session"on a slow but stable tool and the client won't re-invoke it for the same arguments within the TTL window.
W3C Trace Context
The _meta.traceContext field carries a standard W3C Trace Context traceparent header value. Drop it into your observability stack and MCP calls become first-class spans in Datadog, Honeycomb, or any OpenTelemetry backend.
Making each request a complete, observable unit of work is the prerequisite for treating MCP like any other production API — with SLOs, alerting, and distributed tracing baked in from the start.
Migration checklist for server authors
The transition window opens July 28, 2026, when the spec finalises. The 12-month deprecation clock starts the same day for session-only servers. Here's what to do, in order:
## MCP 2026 Server Migration Checklist
### Phase 1 — Low-effort, high-value (do this week)
- [ ] Add Mcp-Method and Mcp-Name headers to all HTTP responses (zero logic change)
- [ ] Add ttlMs + cacheScope to results for cacheable tools
- [ ] Declare OAuth scope requirements in tool manifests
- [ ] Add outputSchema declarations (optional but recommended)
### Phase 2 — Schema upgrades (1-2 days)
- [ ] Bump inputSchema $schema to "https://json-schema.org/draft/2020-12/schema"
- [ ] Replace oneOf/anyOf workarounds with if/then/else where applicable
- [ ] Add $ref definitions for shared types across tools
- [ ] Run JSON Schema 2020-12 validator against all tool definitions
### Phase 3 — Stateless core (before July 28 deprecation deadline)
- [ ] Handle protocolVersion in each request (not just at handshake)
- [ ] Read clientCapabilities from request _meta instead of cached session state
- [ ] Wire W3C traceContext from _meta into your observability backend
- [ ] Remove sticky-session config from load balancer / gateway
- [ ] Test with stateless request format against SDK test harness
### Phase 4 — OAuth hardening
- [ ] Implement issuer validation against OIDC discovery document
- [ ] Add dynamic client registration endpoint (RFC 7591)
- [ ] Implement refresh token handling per spec section 4.3
- [ ] Verify per-tool scope enforcement matches manifest declarationsThe TypeScript and Python MCP SDKs will ship updated versions with stateless-mode helpers at the July 28 release date. The OX Security RCE disclosure from April 2026 is already patched in both — if you're running an older SDK version, that upgrade is the one to do today, ahead of the spec migration.
MCP skills on skills-hub.ai
Skills-hub.ai hosts a growing catalog of MCP-compatible skills — tools, prompts, and resources that conform to the Agent Skills open standard and install in a single command into Claude Code, Cursor, Codex CLI, and any MCP client.
# browse MCP-compatible skills
npx @skills-hub-ai/cli search --platform MCP
# install the MCP protocol migration skill
npx @skills-hub-ai/cli install mcp-protocol-migration
# add skills-hub to your MCP client
claude mcp add skills-hub -- npx @skills-hub-ai/mcpAs the ecosystem migrates to the 2026 spec, the MCP skills catalog will carry a schema-version badge on each skill, so you can filter for skills already compliant with the 2026-07-28 spec release and avoid adopting tools still on the deprecated session model.
If you publish an MCP server, add a SKILL.md file to your repo and list it in the skills-hub registry. The daily sync picks it up automatically, and your users can install it with a one-liner regardless of which AI tool they use.
Written by
Skills-Hub Team
MCP ecosystem coverage
Skills-Hub is the open registry for AI coding skills, 4,400+ SKILL.md files synced daily from Anthropic, Google, Microsoft, and 90+ official sources. Free + MIT.