Skip to content
Open
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
90 changes: 90 additions & 0 deletions meetings/2026-04-22_weekly.md
Original file line number Diff line number Diff line change
@@ -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.