Stack: SDK V2 + New Spec — 3 of 10 (the deepest connection-model change).
Make protocol era a first-class connection dimension. Today InspectorClient and the UI assume connect ⇒ initialize ⇒ negotiated capabilities + optional session id ⇒ session-scoped everything. On modern (≥2026-07-28) servers none of that exists.
Scope
- Per-server era config:
auto | legacy | pin-2026, defaulting not to auto (SDK docs warn debugging tools shouldn't auto-probe — it stalls on silent stdio legacy servers and pollutes transcripts).
- Expose
getProtocolEra() / getNegotiatedProtocolVersion() (and optionally persisted getDiscoverResult()) through the event target, state stores, and useInspectorClient.
- Transport type and era are orthogonal:
config.ts getServerType currently returns only stdio | sse | streamable-http; carry era alongside it. The remote-transport protocol (/api/mcp/connect, /api/mcp/disconnect, RemoteSession) must carry both — and "connected" no longer implies a server-side session (nothing to DELETE on modern disconnect).
- Capability gating source:
InspectorView.tsx gates tabs on the initialize result today; on modern, capabilities come from server/discover (or lazily from error responses). Add handling for -32021 MissingRequiredClientCapability and read the extensions maps on both sides.
ConnectionInfoContent era-aware redesign: for modern servers there is no initialize result or session id — show the server/discover result, the pinned/negotiated version, and "sessionless" explicitly. (Note: there is no session-id field in ConnectionInfo today, so this is additive.) Consider persisting getDiscoverResult() in the catalog and passing it as prior for instant reconnects.
Key files
core/mcp/inspectorClient.ts, core/mcp/config.ts (getServerType), core/mcp/remote/node/server.ts + remote-session.ts, core/mcp/remote/*, clients/web/src/components/views/InspectorView/InspectorView.tsx, .../groups/ConnectionInfoContent/*.
Acceptance
- Era selectable per server; UI affordances gate on era, not just capabilities.
- Modern connect works sessionless; Connection Info shows discover/version/sessionless.
npm run ci green.
Ref: specification/v2_new_spec_impact.md §7.1, §7.8, §8.3(negotiation), §9.1, §9.5(3).
Stack: SDK V2 + New Spec — 3 of 10 (the deepest connection-model change).
Make protocol era a first-class connection dimension. Today
InspectorClientand the UI assume connect ⇒initialize⇒ negotiated capabilities + optional session id ⇒ session-scoped everything. On modern (≥2026-07-28) servers none of that exists.Scope
auto | legacy | pin-2026, defaulting not toauto(SDK docs warn debugging tools shouldn't auto-probe — it stalls on silent stdio legacy servers and pollutes transcripts).getProtocolEra()/getNegotiatedProtocolVersion()(and optionally persistedgetDiscoverResult()) through the event target, state stores, anduseInspectorClient.config.tsgetServerTypecurrently returns onlystdio | sse | streamable-http; carry era alongside it. The remote-transport protocol (/api/mcp/connect,/api/mcp/disconnect,RemoteSession) must carry both — and "connected" no longer implies a server-side session (nothing to DELETE on modern disconnect).InspectorView.tsxgates tabs on theinitializeresult today; on modern, capabilities come fromserver/discover(or lazily from error responses). Add handling for-32021 MissingRequiredClientCapabilityand read theextensionsmaps on both sides.ConnectionInfoContentera-aware redesign: for modern servers there is no initialize result or session id — show theserver/discoverresult, the pinned/negotiated version, and "sessionless" explicitly. (Note: there is no session-id field in ConnectionInfo today, so this is additive.) Consider persistinggetDiscoverResult()in the catalog and passing it aspriorfor instant reconnects.Key files
core/mcp/inspectorClient.ts,core/mcp/config.ts(getServerType),core/mcp/remote/node/server.ts+remote-session.ts,core/mcp/remote/*,clients/web/src/components/views/InspectorView/InspectorView.tsx,.../groups/ConnectionInfoContent/*.Acceptance
npm run cigreen.Ref:
specification/v2_new_spec_impact.md§7.1, §7.8, §8.3(negotiation), §9.1, §9.5(3).