diff --git a/meetings/2026-04-22_weekly.md b/meetings/2026-04-22_weekly.md new file mode 100644 index 0000000..b3d4463 --- /dev/null +++ b/meetings/2026-04-22_weekly.md @@ -0,0 +1,90 @@ +# 2026-04-22 MCP: Transport Working Group (Regular) + +**TL;DR:** The April 22 meeting of the MCP Transport Working Group centered on +tightening up the stateless Specification Enhancement Proposal (SEP). The tone +shifted from routine specification updates to high urgency after the discovery +of a critical, cross-SDK bug regarding protocol version negotiation. Major +consensus was reached on deprecating resumable streams entirely, mapping JSON +RPC request IDs as standard IO stream identifiers, and clarifying HTTP versus +standard IO cancellation mechanisms. + +### Detailed Summary + +### Stateless SEP Cancellation Mechanisms +* **Tension Point:** How to handle cancellation across different transports. + Stephen Halter pointed out that the current streamable HTTP spec explicitly + notes a stream reset is *not* a cancellation, creating a capability gap with + standard IO. +* **Consensus:** Mark Roth successfully argued that in a stateless + architecture, closing the HTTP stream *is* inherently a cancellation. +* **Consensus:** For standard IO, cancellation will rely strictly on the + `cancel notification`. SDKs are expected to abstract these + transport-specific differences automatically so clients have a unified + experience. + +### Standard IO Semantics & Stream Identifiers +* **Tension Point:** Multiple `subscribe` calls over standard IO currently + lack a correlation ID for returning notifications, making it ambiguous which + notifications belong to which subscription request. +* **Trade-off/Debate:** Mark Roth proposed formalizing the JSON RPC request ID + as the standard IO stream identifier. Geoff Goodman and Luca Chang noted a + strict reading of JSON RPC dictates that notifications containing an ID are + technically treated as requests. +* **Consensus:** The group agreed to include the original request ID in + returning notifications (potentially tucked inside an envelope or payload to + bypass JSON RPC violations) to effectively multiplex standard IO streams. + Progress notifications will follow this exact same pattern. + +### Deprecation of Resumable Streams +* **Debate:** With connection drops now implicitly triggering cancellation, + the existing resumable streams (SSE) feature contradicts the new stateless + paradigm. +* **Consensus:** Resumable streams are officially deprecated and will be + stripped from the SEP. +* **Trade-off:** Any workload requiring durability or resumability must now + utilize tasks rather than relying on stream resumability. + +### Escalation: Critical Protocol Version Negotiation Failure +* **Escalation Point:** Peter Alexander revealed that zero official SDKs + currently return the mandated 400 Bad Request error (with JSON RPC error + -32602) when an unsupported protocol version is requested. Instead, they + perform a membership check and silently fall back to the latest supported + version. +* **Impact:** This non-compliance will cause a "bumpy rollout" for new + stateless features, breaking the backward compatibility fallback loop for + new clients speaking to old servers. +* **Consensus:** Immediate intervention is required. The team will file bugs + across the major SDKs and enforce correct negotiation logic via mandatory + conformance tests. + +### Subscription Stream Final Results +* **Tension Point:** Caitie McCaffrey challenged a line in the drafted SEP + stating that a subscription stream "closes once a final result is sent". She + noted there is no final result message for these streams; they simply stream + notifications until explicitly closed or the connection dies. +* **Consensus:** Kurtis Van Gent agreed to remove the inaccurate line + regarding a final request/result. + +### Next Steps & Timeline +Between now and the June release, the priority shifts heavily toward +implementing missing conformance tests to enforce baseline behaviors across all +official SDKs. The stateless SEP will be updated immediately to reflect the +removal of resumable streams, clarify the exact transport-layer cancellation +semantics, and remove lingering stateful concepts. + +### Action Items +- [ ] **Kurtis Van Gent**: Update the stateless SEP to explicitly define HTTP + stream closure and standard IO `cancel notification` as standard cancellation + triggers. +- [ ] **Kurtis Van Gent**: Update the stateless SEP to remove SSE stream + resumability and event IDs, directing users to tasks for durable workloads. +- [ ] **Kurtis Van Gent**: Remove the language regarding a "final result" being + sent on subscription streams, clarifying they remain open until explicitly + terminated. +- [ ] **Kurtis Van Gent**: Check with the Go SDK team to verify their specific + version negotiation logic implementation. +- [ ] **Peter Alexander**: Act as DRI to investigate and file issues with + official SDK teams regarding correct protocol version negotiation failures. +- [ ] **Peter Alexander**: Build a conformance test validating that unsupported + protocol versions correctly return a 32602 JSON RPC error and an HTTP 400 + response. \ No newline at end of file