You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
We currently implement 2025-06-18 (McpDispatcher.ProtocolVersion, src/GpibMcp.Core/Mcp/McpDispatcher.cs:22), two revisions behind.
What changed at the top level
Sessions are gone. No Mcp-Session-Id, no per-connection list results (SEP-2567).
The handshake is gone. No initialize / notifications/initialized. Every request carries its protocol version, client capabilities and identity in _meta (SEP-2575).
server/discover is a MUST — the new way a client learns what we support.
Every result needs resultType — "complete" or "input_required" (SEP-2322).
Server-initiated requests are replaced by MRTR — instead of the server calling sampling/createMessage or elicitation/create, it returns an InputRequiredResult and the client retries with inputResponses (SEP-2322).
Roots, Sampling and Logging are deprecated — twelve-month minimum window (SEP-2577).
Tasks moved to an official extension, io.modelcontextprotocol/tasks, with polling instead of blocking (SEP-2663).
Where we already line up
Worth noting before the list of work, because it's more than expected:
The HTTP transport is already sessionless and offers no GET/SSE stream — SEP-2567 and SEP-2575 both move toward exactly that, so there's nothing to unwind
No SSE resumability to remove
We use none of the deprecated features — no Roots, no Sampling, no Logging; diagnostics already go to stderr, which is the recommended migration
tools/list is already deterministically ordered
All our error codes sit in the standard JSON-RPC range, so nothing collides with the newly reserved block
Every client we ship for today — Claude Desktop, the .mcpb bundle, the Copilot/ChatGPT HTTP connectors — speaks 2025-06-18. This has to be additive: keep initialize, notifications/initialized and ping working as legacy paths and switch behaviour on the revision the request actually declares. No client is asking for 2026-07-28 yet, so there's no rush — but #104 means we currently claim to support it when asked, which is the part that should be fixed now.
Tracking issue for the MCP 2026-07-28 specification revision — the largest break since the protocol launched.
We currently implement 2025-06-18 (
McpDispatcher.ProtocolVersion,src/GpibMcp.Core/Mcp/McpDispatcher.cs:22), two revisions behind.What changed at the top level
Mcp-Session-Id, no per-connection list results (SEP-2567).initialize/notifications/initialized. Every request carries its protocol version, client capabilities and identity in_meta(SEP-2575).server/discoveris a MUST — the new way a client learns what we support.resultType—"complete"or"input_required"(SEP-2322).ping,logging/setLevel,notifications/roots/list_changedremoved.sampling/createMessageorelicitation/create, it returns anInputRequiredResultand the client retries withinputResponses(SEP-2322).io.modelcontextprotocol/tasks, with polling instead of blocking (SEP-2663).Where we already line up
Worth noting before the list of work, because it's more than expected:
tools/listis already deterministically orderedWork
protocolVersioninstead of echoing it back (bug, do first, independent of the rest)server/discoverRPC #105 — implementserver/discover_metacontext andserverInfoin results #106 — stateless dispatch: per-request_metacontext,serverInfoin resultsresultTypefield to every result #107 — requiredresultTypeon every resulttools/listmust returnttlMs/cacheScopeand a deterministic order #108 —tools/list:ttlMs/cacheScope+ pinned orderingMcp-Method/Mcp-Nameheaders and stale session remnants #110 — Streamable HTTP:Mcp-Method/Mcp-Nameheaders, stale session remnantssubscriptions/listen(replaces the HTTP GET stream) #111 — answersubscriptions/listenio.modelcontextprotocol/tasksextension for long-running captures and batch sweeps #112 —io.modelcontextprotocol/tasksfor long-running captures and sweepsoutputSchema+structuredContentso measurements stop coming back as prose #113 —outputSchema+structuredContentfor measurement resultspackaging/docs updated once the wire format changes (the README'sinitializeexamples at lines 211/226/767 hard-code2025-06-18)Suggested sequencing
io.modelcontextprotocol/tasksextension for long-running captures and batch sweeps #112 and AddoutputSchema+structuredContentso measurements stop coming back as prose #113 next. These are the only two items on the list with a user-visible payoff: task handles + progress for the 7–24 s captures, and structured measurement results instead of prose the model re-parses. Neither is blocked on the conformance work._metacontext andserverInfoin results #106 → MCP 2026-07-28: add the requiredresultTypefield to every result #107 → MCP 2026-07-28: implement the requiredserver/discoverRPC #105 → MCP 2026-07-28:tools/listmust returnttlMs/cacheScopeand a deterministic order #108 → MCP 2026-07-28: adopt the JSON-RPC error-code allocation policy #109 → MCP 2026-07-28: Streamable HTTP -Mcp-Method/Mcp-Nameheaders and stale session remnants #110 → MCP 2026-07-28: answersubscriptions/listen(replaces the HTTP GET stream) #111), with MCP 2026-07-28: stateless dispatch - per-request_metacontext andserverInfoin results #106 first since the per-request context is what the others hang off.Compatibility constraint
Every client we ship for today — Claude Desktop, the
.mcpbbundle, the Copilot/ChatGPT HTTP connectors — speaks 2025-06-18. This has to be additive: keepinitialize,notifications/initializedandpingworking as legacy paths and switch behaviour on the revision the request actually declares. No client is asking for 2026-07-28 yet, so there's no rush — but #104 means we currently claim to support it when asked, which is the part that should be fixed now.