You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
Implement SEP-2322: Multi Round-Trip Requests #2187
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
Nothing in main yet (no InputRequiredResult, no resultType, no client retry loop).
spec#2773 — explicitly support extending ResultType
Public-API decision points (call them out for the review meeting)
Handler ergonomics: keep the existing await ctx.elicitInput() shape and translate it (Option H continuation) vs. surface MRTR explicitly with an InputRequest[] return.
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.
Activity
mattzcarey commentedon May 29, 2026
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
mainyet (noInputRequiredResult, noresultType, no client retry loop).RequiresInputthrown byctx.mcpReq.send; dispatcher catches →IncompleteResult; MRTR typesIncompleteResult; servicesinputRequestsvia local handlers; resends withparams.{inputResponses, requestState}ContinuationCompat(Option H suspend/resume): parks the live handler frame, resumes on the follow-up POST (TTL-bounded, principal-bound). Notable design: opt-in viashttpHandler({continuation: ...}).Open PR stack
Outstanding (acceptance criteria, summary)
InputRequiredResultwithresultType: "input_required"returned to MRTR-capable clients onlyinputRequestskeys unique per request; values constrained to Elicit / CreateMessage / ListRoots typesrequestStateopaque, byte-round-tripped, treated as attacker-controlled (integrity-protect when it influences authz/logic; reject failed verification)idMUST differ from originalinputResponses; SHOULD ignore unrecognized keys; SHOULD validate shape (malformed → JSON-RPC error)inputResponses/requestStateMUST NOT be applied to other parallel client requestsmaxRounds)requestStateinputRequeststypes the client doesn't supportInputRequiredResultPost-
85ec3771clarifications to fold inResultTypePublic-API decision points (call them out for the review meeting)
await ctx.elicitInput()shape and translate it (Option H continuation) vs. surface MRTR explicitly with anInputRequest[]return.maxRounds, backoff, idempotency considerations.Coordination
Per the track plan: blocks #2189 (Tasks, which composes MRTR + Extensions). Coordinate with #2184 on
RequestEnv/BaseContext.extshape since MRTR types live alongside the per-request envelope.norika1207-lab commentedon Jun 2, 2026