All writing

MCP 2026-07-28: What the Stateless Shift Means for Your Stack

Redis session stores, sticky load balancers, per-session state hydration on every agent invocation — if you built MCP servers in the last eight months, you may be holding protocol-level anti-patterns. The MCP 2026-07-28 specification shipped on July 28th and is being called the most consequential protocol revision since MCP launched. The headline: MCP is moving to a stateless, request/response model. AWS, Google Cloud, Cloudflare, and Anthropic all shipped same-day support. Nearly half a billion SDK downloads a month, with both the TypeScript and Python SDKs past a billion total downloads — MCP is no longer a niche integration experiment. It's infrastructure you have to take a position on.

I haven't shipped MCP servers against this exact spec — it just dropped. But I've built enough distributed agent infrastructure to know which architectural bets this kind of shift rewards and which ones it punishes. Here's what the spec actually changes, what it costs you to migrate (and to wait), and the decision rules I'd apply right now.

What the Spec Actually Changes

The stateless core is the headline, but this release contains several distinct changes worth understanding separately. The spec research notes confirm breaking changes exist — though the full enumeration is in the spec release itself. Here's what's been publicly confirmed:

Stateless request/response model. The spec moves from a bidirectional, session-bound protocol to a clean stateless design. According to Microsoft's writeup, this means requests can be routed with a plain round-robin load balancer — no affinity rules, no shared session store required downstream. If your server logic assumes a stable per-connection identity, that assumption is now challenged at the protocol level.

Multi Round-Trip Requests (MRTR). Long-running or multi-step tool interactions now have a first-class protocol primitive. This is how the spec handles what sessions previously approximated — but at the request level rather than the connection level. The distinction matters: state lives in the caller's context, not in a server-side object. This is a better model for agent systems where the orchestrator should own state, not the tool server.

Authorization hardened to OAuth 2.0/OIDC. MCP servers are now formally positioned as OAuth 2.1 resource servers, with six Specification Enhancement Proposals codifying this. The practical upshot: you can wire enterprise identity directly — Entra, Okta — without workarounds. Before this, auth integration was a custom shim everyone reinvented badly. For enterprise deployments, this alone justifies the migration cost.

Cacheable list results. Tool and resource lists can now be cached. For agents that enumerate capabilities on every invocation, this removes a meaningful source of cold-path latency. If you're running high-frequency agent loops, this is a quiet win.

MCP Apps and Tasks under a formal extensions framework. Interactive UIs (MCP Apps) and long-running work (Tasks) now have a versioned extension path that won't require core protocol changes to evolve. The details of what specifically changed in the Tasks model are in the full spec — read it before assuming your existing Tasks integration carries over unchanged.

A formal deprecation policy. For the first time, the spec tells you what the runway looks like before removal. For teams standardizing MCP across multiple internal tools, this is what makes it safe to build on at scale. Unpredictable breakage is the thing that kills internal platform adoption — a deprecation policy removes that blocker.

The Architectural Bet You're Making Either Way

The stateless shift rewards a specific style of agent architecture and punishes another. Understanding which camp you're in determines how urgent your migration is.

If your MCP servers are stateless already — tool servers that take a request, hit an API or database, return a result, and forget everything — this spec change is mostly additive. You get better load-balancing characteristics, cleaner auth, and list caching for free. Migration is low-risk and the timeline is weeks, not months. The engineering is fast; the drag will be testing and any compliance review if you're in a regulated environment.

If your MCP servers hold session state — conversation context, accumulated tool results, per-user state written server-side — you have real refactoring ahead. The stateless model pushes that state up to the caller. In agent systems, that typically means the orchestrator layer: your LangGraph graph state, your Etera-style multi-agent context store, whatever owns the thread. This is architecturally correct — tool servers shouldn't own caller state — but it's a non-trivial migration if your codebase assumed otherwise.

The worst position to be in: session state scattered across multiple MCP servers with no clear orchestrator that owns canonical state. That's a distributed state management problem dressed up as a migration question. Solve the ownership question first; the MCP migration follows naturally.

The stateless protocol is eating session-bound agent design. Build your orchestrators to own state, and your tool servers become interchangeable.

Backward Compatibility: How Much Runway Do You Have?

The spec includes backward compatibility provisions — clients speaking 2026-07-28 can interoperate with older servers during a transition window. This means you're not facing a hard cutoff on day one. But "not immediately broken" and "safe to ignore" are different things.

The risk of waiting isn't that your current integration explodes. It's that you're building new features on a deprecated model while the ecosystem — SDKs, client implementations, hosted platforms — normalizes around the new one. Anthropic, AWS, and Google all shipped same-day support. That's a signal about which direction the tooling investment flows from here.

If you're running MCP in production today, the right move is to audit, not panic. Identify what state your servers actually hold, check the full spec release against your implementation for specific breaking changes, and make a deliberate call — don't let the migration happen to you by drift.

What to Actually Do

This week:

  1. Read the breaking changes section of the full spec release directly. Don't rely on summaries — the specific list of what's removed and what's deprecated is there. Map it against your implementation line by line.

  2. Audit your MCP servers for server-side state. Write down every place your tool servers write or read state that isn't in the inbound request. That list is your migration surface area. If it's empty, your migration is almost trivially easy.

  3. Decide where state lives in your agent architecture. If it's not clearly in the orchestrator, fix that design decision now — independently of MCP. The stateless spec just makes the right answer explicit.

  4. Upgrade the OAuth integration if you're in enterprise. The 2.1 resource server model with native Entra/Okta support is worth the migration cost by itself if you've been shimming auth. This is where the compliance and security teams will thank you later.

  5. Set a migration target date, not a "when we get to it" intention. The ecosystem is moving. AWS, Google, and Anthropic shipping same-day support means the SDK defaults will shift. A team that plans a 6-week migration window is in a much better position than one that discovers breaking behavior in production six months from now.

MCP just grew up. The question isn't whether to adapt — it's whether you do it on your schedule or the protocol's.

Working on something like this? I take on a few fractional-CTO and AI engagements at a time.

The AI CTO playbook

Get my AI playbooks — straight to your inbox

Practical notes on shipping production AI, scaling teams, and the calls a CTO actually has to make. A few times a month. No spam, no fluff.