TL;DR - the new MCP standard goes live imminently. Parse your MCP manually, or use Temrel’s free tool to audit and detect what changes to make

The MCP Protocol is growing up

You’ve built an MCP server the right way, doing your handshakes, perhaps even sampling. On Monday 28th July, the spec finalises and a great deal of ‘the right way’ becomes legacy. It’s not going to blow up, but the clock starts.

An MCP Primer (skip if you already know)

The Model Context Protocol (MCP) is an open standard released by Anthropic in late 2024 that defines how AI apps connect to external tools and data. MCP can run on local stdio or more commonly streamable HTTP for remote tools. There are three roles:

host: the app connecting to the MCP, e.g. Claude Code, Cursor et. al.
client: this runs inside the host and manages the connection to the server
server: this wraps the capability of the tool, e.g. GitHub, Postgres, etc

Servers expose three primitives: Tools (functions the app is calling, JSON inputs), Resources (data, indexed by URI), Prompts (e.g. slash commands).

Client-side primitives allow the server to ask the client something: Sampling for LLM completions on the client side via API calls to tools/call and tools/list, Roots where the client tells the server which directories are in scope and Elicitation where the server asks for more information mid-operation. Two of these are on death row.

Up to now, client and server did an intialize handshake, with remote servers issuing an Mcp-Session-Id header for all subsequent requests in the session.

The handshake is dead

We’re dropping initialize and Mcp-Session-Id, so at scale we no longer have to manage sticky routes and a shared state store. A connection is no longer married to a server instance. Requests get routed on an Mcp-Method header and can land on any instance behind a load balancer.

In essence, the MCP just became like any other ordinary web service.

State is debt, now we’re paying it off

Sessions used to force stickiness, shared data stores and gateway packet inspection. These are gone now. They represented an infrastructure tax for state that didn’t really add anything meaningful.

State is debt. We don’t like state.

There’s a parallel here with context engineering: redundant tokens are liabilities, not assets. Protocol state was too.

Ironically in this case, though, some of the statefulness is being pushed back to the model. It’s the model that now stores the chain of calls instead of the server. This is a superior approach as the model is driving the bus here.

What actually breaks (and what just smells)

Great, you might ask, but what breaks now on my current MCP setup?

The hard break is the Tasks API. This is replaced by the Tasks extension, meaning task calls need to be migrated to tasks/get , tasks/update and tasks/cancel. Bummer if you built on the Tasks API.

Deprecated, but with a 12-month runway are Roots (use tool params/config instead), Sampling (the MCP will reach directly to your model’s API) and Logging (stderr or OT).

Auth is hardening; OAuth 2.1 is now mandatory.

Minor updates on the SDK: Python is renamed MCPServer from FastMCP, TypeScript goes ESM-only and we see the first appearance for Go and C# in preview.

Your migration pass, this week

Do a quick pass on what needs to be migrated for your MCP:

  • grep for session assumptions and initialize handlers.

  • update your Roots/Sampling/Logging usage, each now has a named replacement

  • pin any critical SDK versions before you get the v2 by surprise

From the temrel-agentic-toolkit

Or alternately, use the tool we’re releasing today: mcp-spec-audit. It’s a scanner parses your repo for any landmines related to the update and gives you a migration checklist.

Run it in the CLI, or adopt it as a Claude Code Skill. The skill is the fastest route - Claude will follow up the output offering to complete the fixes.

Check the details here.

Do this today

  1. Run mcp-spec-audit (or the manual greps above) against every MCP server you own

  2. Migrate anything on the experimental Tasks API now: it is the only hard break

  3. Open a ticket per deprecated feature with its named replacement, dated inside the 12-month window

Why this matters

Protocols mature the way codebases do: by deleting. MCP shedding state is it becoming boring infrastructure, and boring is what wins. Let this be a part of your ongoing thinking. Ask yourself ‘How can I further shed state, or otherwise pass it to more useful locations?’

Did the write-down hit anything you actually used? If you're mourning Sampling, tell me what for. Genuinely curious who was on it.

See you next week.

Keep Reading