Skip to content

Implement SEP-2575: Make MCP Stateless #2184

Closed

Description

@felixweinberger

This is a tracking issue for implementation of SEP-2575.

Activity

  1. mattzcarey commented on May 29, 2026

    @mattzcarey
    Member

    Status — SEP-2575 (Make MCP Stateless)

    Track: A (core, sequential spine) — biggest single piece of work in release-1 (~43 wire + 4 sdk + 4 guidance requirements). Tangled with SEP-2567 (#2185).
    Spec: seps/2575-stateless-mcp.md · merged spec#2575 2026-05-11

    What's done

    Open PR stack (Felix, v2-stateless label) — the active line of work

    1. [SEP-2663] refactor!: remove 2025-11 experimental tasks #2128 — [SEP-2663] refactor!: remove 2025-11 experimental tasks (mechanical, base of the stack)
    2. chore: sync schemas to spec @142b3c3c; segregate pre-2026 wire schemas #2129 — chore: sync schemas to spec @142b3c3c; segregate pre-2026 wire schemas (mechanical schema regen)
    3. refactor(core): extract Dispatcher; Protocol composes it #2130 — refactor(core): extract Dispatcher; Protocol composes it (zero-Δ refactor)
    4. [SEP-2575][SEP-2322][SEP-2567] 2026-06 stateless support over StreamableHTTP #2131 — [SEP-2575][SEP-2322][SEP-2567] 2026-06 stateless support over StreamableHTTP ← the substantive review (+4229/-1047)
    5. [SEP-2575][SEP-2567] 2026-06 stateless support: stdio + InMemory transports #2132 — [SEP-2575][SEP-2567] 2026-06 stateless support: stdio + InMemory transports

    Outstanding (acceptance criteria, summary)

    • Every request _meta carries protocolVersion / clientInfo / clientCapabilities (io.modelcontextprotocol/* keys)
    • MCP-Protocol-Version header MUST match body or 400
    • Mandatory server/discover RPC
    • Removed RPCs: logging/setLevel, resources/subscribe/unsubscribe, ping, roots/list, notifications/roots/list_changed
    • GET endpoint removed (POST only); no batching; no Last-Event-ID resumability
    • New UnsupportedProtocolVersionError (custom code, see fix spec#2716)
    • subscriptions/listen (single long-lived POST stream, opt-in types, ack-first, io.modelcontextprotocol/subscriptionId in _meta)
    • Per-request _meta.logLevel; servers MUST NOT emit notifications/message without it
    • Dual-era stdio probe: server/discover first → fall back to initialize on -32601
    • Per-message protocol-version routing (legacy / modern paths kept separate — see §7.1 of the spec page)
    • Per-request auth (no auth-bypass through removal of initialize)

    Related work in main

    Post-85ec3771 clarifications to fold in

    • spec#2716 — custom error code for UnsupportedProtocolVersionError
    • spec#2791 — incorporates SEP-2596 / SEP-1865; clarifies Streamable HTTP
    • spec#2776 (open) — consolidates back-compat rule + broadens stdio fallback
    • spec#2770 (open) — clarifies stdio process lifetime

    Test backlog

    Coordination

    Per the track plan: this issue + #2185 are sequential and must land together. Two cross-track coordination moments:

    1. Agreeing the transport seam when envelope enforcement starts (Track B is building 2243/headers/subscriptions against this contract).
    2. The MRTR public API decision in Implement SEP-2322: Multi Round-Trip Requests #2187 (Track A also).

    Dupes

    #2181 is a duplicate of this issue — should be closed.

  2. norika1207-lab commented on Jun 2, 2026

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

Metadata

Metadata

Labels

No labels
No labels

Type

No type

Projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions