Skip to content

Implement SEP-2322: Multi Round-Trip Requests #2187

Closed

Description

@felixweinberger

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

Activity

  1. mattzcarey commented on May 29, 2026

    @mattzcarey
    Member

    Status — SEP-2322 (Multi Round-Trip Requests / MRTR)

    Track: A (core) — depends on #2186 (SEP-2260) and #2184/#2185 (Group A). The MRTR public API design is the biggest API change of the release and a designated all-hands review moment per the track plan.
    Spec: seps/2322-MRTR.md · merged spec#2322 2026-05-06

    What's done

    Open PR stack

    Outstanding (acceptance criteria, summary)

    • InputRequiredResult with resultType: "input_required" returned to MRTR-capable clients only
    • inputRequests keys unique per request; values constrained to Elicit / CreateMessage / ListRoots types
    • requestState opaque, byte-round-tripped, treated as attacker-controlled (integrity-protect when it influences authz/logic; reject failed verification)
    • Retry JSON-RPC id MUST differ from original
    • Server SHOULD re-prompt on incomplete inputResponses; SHOULD ignore unrecognized keys; SHOULD validate shape (malformed → JSON-RPC error)
    • inputResponses / requestState MUST NOT be applied to other parallel client requests
    • Client must bound retry rounds (maxRounds)
    • Replay mitigation: embed + verify authenticated principal, TTL, originating-request id inside the integrity-protected requestState
    • Capability-gated: server MUST NOT send inputRequests types the client doesn't support
    • (Derived BC) legacy path uses SSE-push or capability error, not InputRequiredResult
    • Servers MUST send s→c requests via MRTR pattern; the server-initiated push pattern is no longer supported (overlap with Implement SEP-2260: Require Server requests to be associated with a Client request #2186)

    Post-85ec3771 clarifications to fold in

    • spec#2725 — MRTR bug & doc fixes
    • spec#2773 — explicitly support extending ResultType

    Public-API decision points (call them out for the review meeting)

    1. Handler ergonomics: keep the existing await ctx.elicitInput() shape and translate it (Option H continuation) vs. surface MRTR explicitly with an InputRequest[] return.
    2. Continuation storage seam: in-memory default vs. pluggable store, TTL knobs, multi-replica behavior.
    3. Client retry policy: default maxRounds, backoff, idempotency considerations.

    Coordination

    Per the track plan: blocks #2189 (Tasks, which composes MRTR + Extensions). Coordinate with #2184 on RequestEnv / BaseContext.ext shape since MRTR types live alongside the per-request envelope.

  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