Skip to main content

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.

14,000+MCP servers affected by the July 28 spec upgrade
By Skills-Hub Team · MCP ecosystem coverage7 min read
MCPProtocol2026

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:

  1. 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.
  2. Enterprise adoption. Fortune 500 teams evaluating MCP consistently hit the same wall: OAuth wiring was underdefined, making security review painful and implementation inconsistent.
  3. 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.
  4. 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.

Before — session-scoped request (deprecated)
{
  "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
}
After — self-contained stateless request (2026)
{
  "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:

Example: 2020-12 tool schema with composition + conditionals
{
  "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 iss against 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.

HTTP request with new routing headers
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.
, Linux Foundation AAIF, protocol working group

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:

Migration checklist
## 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 declarations

The 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.

Terminal
# 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/mcp

As 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.

Continue reading