Skip to content

Era-aware connection model & capability gating #1626

Description

@cliffhall

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).

Metadata

Metadata

Assignees

Labels

v2Issues and PRs for v2

Type

No type

Fields

No fields configured for issues without a type.

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions