SDK version ≠ negotiated protocol era
Upgrading to the TypeScript SDK v2 alone does not turn on MCP revision 2026-07-28. A v2 Client normally starts with the legacy initialize exchange. To probe the modern era and fall back to legacy where supported, set versionNegotiation: { mode: 'auto' }. Official SDK migration guidance ↗
Evidence: official documentation Independently reproduced by Wize: No. This article is a curated diagnostic, not a claim that Wize has run your code or verified your environment.
Choose what you are seeing
This runs entirely in your browser and sends no configuration or code to us.
Enable era auto-negotiation
Three protocol shifts to understand
Modern 2026 requests do not use the legacy initialize / initialized exchange.
server/discover can advertise server capabilities before a request. SDK auto mode probes it.
The modern request carries protocol identity and capabilities in its _meta envelope. No protocol-level session ID is required.
The SDK may serve both protocol eras. Seeing a legacy request does not necessarily indicate a broken installation. MCP official release notes ↗
Check the protocol era before modifying your server
Expected in legacy mode
initialize then notifications/initialized, potentially using a session depending on transport and server implementation.
Expected in modern mode
Optional server/discover probe, then calls with the 2026 metadata envelope; no protocol-level Mcp-Session-Id.
auto mode, not every probe failure should fall back to legacy. Authentication errors (401/403), server errors (5xx), and some HTTP timeouts are handled as failures in the official SDK guidance. Do not bypass security checks to force a connection.Where behavior differs
| Configuration | Starting behavior | What to verify |
|---|---|---|
| v1 SDK | Legacy protocol | Consult the v1 → v2 upgrade guide before copying v2 examples |
v2 client, no versionNegotiation | Legacy initialize | This is a documented default, not necessarily a bug |
v2 client, mode: 'auto' | Probes with server/discover; may fall back | Check getProtocolEra() after connection |
v2 client, modern pin | Modern only | Older servers may reject negotiation |
v2 server, manually constructed McpServer | Can remain legacy | Use documented modern-serving entry points for the relevant transport |
Sources and confidence
Every actionable statement above is linked to official primary documentation. SDK behavior may change; always confirm the version of the packages installed in your project.
- Official MCP TypeScript SDK — supporting revision 2026-07-28. Documents the default legacy behavior,
mode: 'auto', modern-only pinning, and server entry points. - Official MCP TypeScript SDK — protocol versions. Describes eras and negotiation.
- Official MCP blog — 2026-07-28 specification release. Defines the change to a stateless core.
- Official MCP TypeScript SDK — upgrade to v2. For users still on v1.
Evidence categories: protocol facts = primary-source confirmed · proposed decision steps = reasoned guidance from those docs · run in Wize test environment = not yet · customer outcomes = not yet.
What AgentFix Ledger is testing
This page is our first experimental diagnostic asset. We are testing whether version-specific troubleshooting information can be found without outreach and used by visitors. It is free. There is no paid product offered here today.
No visitors, signups, conversion numbers, independent reproductions, or savings are claimed. Such evidence must be collected after actual publication and suitable analytics configuration.
Open machine-readable evidence record ↗