Limited-period launch offer: 80% OFF · MCP Builder’s Handbook at ₹98 instead of the regular ₹499 · See details
Roori eBooks
Protocol update

MCP 2026-07-28: what changed, and why most tutorials are now out of date

Published 2026-10-20 · Roori eBooks

Quick check: does the MCP tutorial you're following start with an initialize call? If yes, it's describing the previous protocol. The official site lists 2026-07-28 as the current revision (as of 19 October 2026), and the headline change is simple: the handshake and sessions are gone.

Before and after

Older (2025-11-25 and earlier) Current (2026-07-28)
Starting a connection initialize, then an initialized notification No handshake
State A session tied to the connection Every request stands on its own
Version and capabilities Agreed once at the start Sent in _meta on every request
Discovery Part of the handshake Optional server/discover request
Server-initiated requests Allowed Not used. "Multi round-trip requests" instead

Source: the official MCP versioning page and the transports spec for 2026-07-28.

On Streamable HTTP the version also travels in the MCP-Protocol-Version header. A server can support several versions at once. If it gets one it doesn't know, it replies with an error listing the ones it does.

A real request and response

We didn't want to just describe this, so we ran it. The lines below come from a small Python MCP server (SDK package mcp 2.3.0) on 19 October 2026. We wrote raw JSON-RPC to it over stdio. --> is what we sent, <-- is what came back.

--> {"jsonrpc": "2.0", "id": 1, "method": "server/discover", "params": {"_meta": {"io.modelcontextprotocol/protocolVersion": "2026-07-28", "io.modelcontextprotocol/clientCapabilities": {}}}}
<-- {"jsonrpc":"2.0","id":1,"result":{"cacheScope":"private","capabilities":{"prompts":{"listChanged":true},"resources":{"listChanged":true,"subscribe":true},"tools":{"listChanged":true}},"resultType":"complete","supportedVersions":["2026-07-28"],"ttlMs":0,"_meta":{"io.modelcontextprotocol/serverInfo":{"name":"india-utils","version":""}}}}
--> {"jsonrpc": "2.0", "id": 2, "method": "tools/call", "params": {"name": "gst_breakdown", "arguments": {"amount": 1180, "gst_rate_percent": 18, "amount_includes_gst": true}, "_meta": {"io.modelcontextprotocol/protocolVersion": "2026-07-28", "io.modelcontextprotocol/clientCapabilities": {}}}}
<-- {"jsonrpc":"2.0","id":2,"result":{"content":[{"text":"{\n  \"taxable_value\": 1000.0,\n  \"gst_rate_percent\": 18,\n  \"gst_amount\": 180.0,\n  \"cgst\": 90.0,\n  \"sgst\": 90.0,\n  \"total\": 1180.0\n}","type":"text"}],"isError":false,"resultType":"complete","structuredContent":{"taxable_value":1000.0,"gst_rate_percent":18,"gst_amount":180.0,"cgst":90.0,"sgst":90.0,"total":1180.0},"_meta":{"io.modelcontextprotocol/serverInfo":{"name":"india-utils","version":""}}}}

Three things worth noticing:

  1. server/discover answered with supportedVersions: ["2026-07-28"] plus the server's capabilities. This server only speaks the new revision.
  2. tools/call worked with no handshake before it. The reply has readable text in content and a proper object in structuredContent.
  3. We got it wrong the first time. Our first attempt sent only the protocol version, and the server replied with error -32602: "params._meta is missing the required envelope key(s): io.modelcontextprotocol/clientCapabilities". So in this SDK both keys are required on every request, even if capabilities is just {}. The SDK's own Client class fills them in for you, which is another reason not to hand-roll this.

So what should you do?

Keep going

Frequently asked questions

What is the current MCP protocol revision?

As of 19 October 2026 the official site lists 2026-07-28 as current. Revisions are named after the date of the last breaking change.

Is the initialize handshake gone in MCP?

In revision 2026-07-28, yes. There is no initialize step and no connection session. Each request states its own protocol version and client capabilities. Older revisions (2025-11-25 and earlier) used the handshake.

What is server/discover?

A request that returns the server's supported protocol versions, capabilities and identity in one go. A client can call it first, or just send a request and handle a version error if one comes back.

₹98 ₹499 80% OFF
Buy the MCP e-book