Skip to content

BuildNot yet confirmed elsewhere1 publisher2 min readPublished

Official MCP SDK still downgrades 2026-07-28 handshakes to the 2025-11-25 era, probe finds

MCP's official server package, @modelcontextprotocol/server 2.3.1, answers 2026-07-28 handshakes with the 2025-11-25 era, a probe published on dev.to found. Default test clients and the Inspector settle for older eras, so a server passes local checks until a client requiring the new era connects.

The Engineer · Build desk

How we use AISend a correction

Illustration accompanying Official MCP SDK still downgrades 2026-07-28 handshakes to the 2025-11-25 era, probe finds
Generated illustration

What happened

  • The same downgrade occurs over streamable-HTTP, in both the stateless pattern with a fresh transport per request and the stateful one, so it is not a stdio quirk.
  • A server built on the SDK's stateful streamable-HTTP pattern answers exactly one initialize, and any second client receives a 400 "Server already initialized" error.
  • DeepWiki's public MCP endpoint, probed on 2026-10-10, served 2025-11-25, accepted every 2025 era and silently downgraded requests for 2026-07-28.
  • The probe's --strict mode exits non-zero unless a server serves 2026-07-28 verbatim, and the authors offer it as a one-line CI step.

Why it matters

  • constraint A strict era gate added today fails every build on @modelcontextprotocol/server 2.3.1, so teams on the official package cannot finish this migration with their own code changes.
  • decision Passing tests against default clients or the Inspector stops counting as evidence of migration; the useful test is a client that asks for 2026-07-28 alone and fails on any other reply.
  • exposure Client authors who require 2026-07-28 today cut themselves off from every server still built on the official SDK's published line.

The failure sits in one field of the initialize reply. The client names the era it wants, and the server's answer carries the era it will actually speak [4]. A client that requires 2026-07-28 and gets 2025-11-25 back either errors somewhere far from the cause or quietly drops into compatibility mode, according to the post's authors on dev.to [4]. Nothing in the server logs marks the moment [4]. The Inspector is built to connect, and it does [3]. A green local suite shows only that the test client was willing to settle for an older era [3].

The pattern first showed up in the official SDK's issue tracker as typescript-sdk#2977 [14]. The downgrade on 2.3.1 comes from upstream of any team's own code. The authors did not find the July revision in any of the org's npm packages they probed, including the v2 server line [7]. Their check on 2026-10-10 came 74 days after the date the revision carries [20]. "Installing the new major does not mean getting the new era," they wrote [11].

We think the probe is scoped correctly for a CI gate. It checks compatibility, not conformance, so a server that negotiates 2026-07-28 and then mishandles a tool call would still pass [9]. That is the property default clients hide, and the probe tests only that property.

The build is small. It is one file with no dependencies, MIT-licensed, with fixtures that reproduce each behaviour the post describes [10]. For each known era it opens a real initialize handshake, records the reply, then calls tools/list to confirm the server is still alive [5]. The sample output walks four eras, newest first, from 2026-07-28 down to 2025-03-26 [12]. The order is deliberate: a stateful server grants a single handshake, and the authors want it spent on the most informative era [17]. Over HTTP the whole run is a handful of small POSTs, with no tool calls and no data read [9]. A server that answers initialize but cannot list tools gets its own verdict instead of a pass [9].

The DeepWiki result is a single endpoint on a single day [18]. The post does not say which SDK that server runs, so it cannot show whether the downgrade there comes from the same package. The authors present it as a snapshot of an ecosystem where, they wrote, "the 2026-07-28 revision barely exists in the wild yet" [2].

What to watch

  • A published @modelcontextprotocol/server release that answers 2026-07-28 verbatim, and the outcome of typescript-sdk#2977.
  • Repeat probes of public endpoints such as DeepWiki's, showing when 2026-07-28 starts to appear in production servers.
  • Whether the Inspector or the SDK's test clients add a mode that requests a single era and fails on a downgrade.

Clarity's read

What the record supports and how the coverage leans. The claims behind it follow.

Reality

Evidence55
Adoption5
Hype gap+10
Incentives60
Confidence55
Why these scores

Claim ledger

Ranked by verification strength, evidence, and original report placement.

  1. [1]

    In July 2026 the MCP spec got a new protocol revision, 2026-07-28.

    ReportedSupportedSource: dev.to post on mcp-era-probe2 sources— create a free account to open themView cited source
  2. [2]

    "the 2026-07-28 revision barely exists in the wild yet"

    ReportedSupportedSource: Authors of the dev.to post3 sources— create a free account to open themView cited source
  3. [3]

    A server in this state compiles and starts, serves any client that negotiates an older era (which most default test clients do), and the Inspector connects because it negotiates down.

    ReportedSupportedSource: dev.to post on mcp-era-probe2 sources— create a free account to open themView cited source

Sources

1 independent publisher whose own reporting we read for this story.

  1. dev.to

    2 articles · October 10, 2026

    Your MCP server compiles, passes its tests, answers the Inspector — and still speaks the wrong protocol era

Share your take

Let Clarity write the post for you.

Signed-in readers get a short post drafted on this story in the register they choose — narrative, analytical, or a direct position — editable to the last word before it goes anywhere. The share buttons at the top of this story work without an account.

Topics and entities

Follow any of these and your For You feed starts watching them — no settings page required.

Topics

Entities

Loading related stories