MCP 2026-07-28 is live: day-one field notes after the cutover
July 28 shipped. MCP's fifth spec release makes the protocol stateless at the core, hardens OAuth, graduates Tasks and Apps into a versioned extensions framework, and updates Tier 1 SDKs. Here is what I verify in the first 48 hours that the pre-GA checklist could not prove until clients actually moved.
In this post (9 sections)
Introduction
The four-day cutover checklist was written for the night before. This post is for the morning after. The official MCP blog and Anthropic's Claude rollout note confirm what the RC promised since May 21: protocol-level sessions are dead, extensions are real, auth is stricter.
If your staging round-robin was green and production still feels weird, you are in the normal part of the curve. Sticky sessions hide application bugs. Stateless traffic surfaces them.
What GA actually changed
Stateless core
No handshake. No Mcp-Session-Id. Protocol version, client identity, and capabilities ride in _meta. Optional server/discover exists if you want capabilities up front; it is not required. Any instance behind round-robin can take any request. Application state belongs in explicit tool handles the model can see, not in transport sessions you hoped Redis would keep honest.
Header-based routing and cacheable lists
Streamable HTTP must include Mcp-Method and Mcp-Name. Gateways can authorize and meter without parsing JSON bodies. tools/list, prompts/list, resources/list, and resources/read carry ttlMs and cacheScope so clients can cache without cross-tenant bleed. If you skipped the header security pass, fix secret headers in access logs before you celebrate latency wins.
MRTR instead of held-open streams
Multi Round-Trip Requests replace server-initiated elicitation/create, sampling/createMessage, and roots/list that needed a live bidirectional stream. The server returns resultType: "input_required" with the requests it needs; the client retries with inputResponses. This is how confirmations and mid-tool prompts work on serverless and edge without fake sticky sessions.
Auth hardening and CIMD
Authorization servers should return iss per RFC 9207; clients must validate before redeeming codes. Client credentials bind to the issuing auth server. Dynamic Client Registration remains for compatibility but is formally deprecated toward Client ID Metadata Documents. If you piloted Enterprise-Managed Authorization, re-check group inheritance on first login after clients upgrade.
Tasks and Apps as extensions
Tasks leave experimental core for io.modelcontextprotocol/tasks with poll-based tasks/get and tasks/update. MCP Apps sit in the same versioned extensions framework. Long-running work should not pretend to be a sticky session anymore. Use the extension, or keep your own job store behind a handle.
| Watch in the first 48 hours | Backlog inside the 12-month window |
|---|---|
| 4xx from missing Mcp-Method / version mismatches | Full Roots / Sampling / Logging removal |
| Step-2 empty responses on multi-step tools (handle bugs) | Polishing MCP Apps UI |
| cacheScope cross-user incidents | Optional Server Cards UX |
| OAuth iss validation failures after SDK bump | CIMD migration for every legacy DCR client |
| Clients still sending Mcp-Session-Id | HTTP+SSE transport retirement |
Verification script I run at T+2 hours
I treat the first two hours after the SDK bump like a flight check, not a standup. Same order every time so the on-call does not invent a personal ritual under stress.
# 1) Confirm negotiated protocol version on a live tools/list
curl -sS https://mcp.example/mcp \
-H "MCP-Protocol-Version: 2026-07-28" \
-H "Mcp-Method: tools/list" \
-H "Mcp-Name: *" \
-H "Authorization: Bearer $TOKEN" \
-d '{"jsonrpc":"2.0","id":1,"method":"tools/list","params":{"_meta":{"io.modelcontextprotocol/clientInfo":{"name":"cutover-probe","version":"1.0"}}}}' \
| jq '{version: .result._meta, cacheScope: .result.cacheScope, ttlMs: .result.ttlMs, toolCount: (.result.tools|length)}'
# 2) Dual identity cacheScope check (expect disjoint catalogs if scoped)
# 3) Multi-step tool: mint handle on step1, kill a pod, complete step2
# 4) Grep access logs for Authorization= or Mcp-Session-Id=If jq comes back empty on cacheScope for authenticated list endpoints, stop and fix caching before you invite more clients. Empty is not "flexible." Empty is how tenant B sees tenant A's tools.
Ecosystem day-zero signal (what I trust vs what I ignore)
The MCP blog quotes partners from AWS AgentCore, Cloudflare Workers, Microsoft Foundry, FastMCP, Supabase, and others claiming day-zero support. Useful as a vendor matrix. Useless as your production proof. I only greenlight a connector when our own probe script passes against that vendor's endpoint with our IdP tokens. Press quotes do not bind oauth_subject to handles.
GitHub's pre-GA note that their MCP Server already dropped Redis session writes was a good leading indicator. Still re-run the probe after their GA-aligned SDK bump. "We tracked the RC" is not the same commit as "we ship the final version string."
Breakage patterns I expect (and how I triage)
- 01Session-Id nostalgiaOld clients still send Mcp-Session-Id or expect initialize. Symptom: rising 4xx or silent ignores depending on gateway. Triage: identify client SDK versions from User-Agent / clientInfo, publish upgrade matrix, keep a temporary reject metric so support is not guessing.
- 02Handle amnesia under real trafficStaging had two pods; production has ten and a colder Redis. Symptom: step 2 of checkout-like tools returns empty or wrong owner. Triage: confirm handle mint binds oauth_subject, prove kill-pod mid-flight, re-run the week-three handle sprint cases against prod-shaped load.
- 03Gateway body/header desyncProxies rewrite JSON but leave Mcp-Name stale. Symptom: authorize-on-header allows a tool the body is not calling, or vice versa. Triage: reject mismatches; log method/name only, never Authorization.
- 04List cache poisoning across identitiesShared CDN key ignores cacheScope. Symptom: user B sees user A tool catalog. Triage: dual-identity test from the cutover checklist, then purge and fix cache keying.
- 05MRTR clients that still assume streamsElicitation hangs because the client never retries with inputResponses. Symptom: "tool waiting forever" tickets after you moved off sticky streams. Triage: confirm client SDK MRTR support; fall back to explicit confirm tools if needed.
Claude-specific notes
Anthropic is rolling 2026-07-28 support across Claude products, with MCP Apps, enterprise-managed auth, connector observability dashboards, and MCP tunnels (research preview) for private-network servers without inbound firewall holes. If you publish to the connectors directory, treat observability dashboards as day-one ops, not a nice-to-have. Viewer-scoped OAuth for live artifacts still follows the Week 29 checklist.
Portability reminder
Rival enterprise protocol headlines did not stop GA. Finish this cutover. Keep tool contracts and IdP policy above the wire so you are not rewriting business logic if another transport wins a press cycle. That is still the portability playbook.
How I declare day-one success
- Multi-step tools complete under production round-robin with pod kills.
- No cross-tenant handle replay in audit samples.
- No Authorization or secret headers in CDN/gateway access logs.
- Session-Id traffic is a known, trending-down backlog with owners.
- On-call pages are about client upgrades, not inventing session affinity again.
Conclusion
GA day is when the RC stops being a PDF and starts being pager noise. Keep the freeze. Fix handles and headers. Leave Roots/Sampling/Logging on the 12-month plan. Boring traffic is the win condition.
Sources: Model Context Protocol Blog, "The 2026-07-28 Specification" at MCP blog; Anthropic, "Bringing MCP 2026-07-28 to Claude" at Claude blog.
Agentic AI patterns, delivered Thursdays
What I am shipping, watching, and pruning out of client stacks each week. One email. No fluff.