Skip to content

Epic: adopt MCP specification 2026-07-28 #115

Description

@TGoodhew

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

  • 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).
  • ping, logging/setLevel, notifications/roots/list_changed removed.
  • 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

Work

Suggested sequencing

  1. MCP: validate the client's protocolVersion instead of echoing it back #104 first — it's a real bug today, standalone, and small.
  2. Adopt the io.modelcontextprotocol/tasks extension for long-running captures and batch sweeps #112 and Add outputSchema + structuredContent so 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.
  3. Then the conformance block (MCP 2026-07-28: stateless dispatch - per-request _meta context and serverInfo in results #106 → MCP 2026-07-28: add the required resultType field to every result #107 → MCP 2026-07-28: implement the required server/discover RPC #105 → MCP 2026-07-28: tools/list must return ttlMs/cacheScope and 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-Name headers and stale session remnants #110 → MCP 2026-07-28: answer subscriptions/listen (replaces the HTTP GET stream) #111), with MCP 2026-07-28: stateless dispatch - per-request _meta context and serverInfo in 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 .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.

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    architectureArchitecture / refactordocumentationImprovements or additions to documentationmcp-specMCP specification conformance

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions