SEP-2322: Multi Round-Trip Requests changedseps/2322-MRTR
Upstream edited this page at 2 Aug 2026 21:13 UTC, give or take a minute or two: the time comes from Anthropic’s own sitemap rather than from a commit. This site recorded the change at 20 Oct 2026 20:07 UTC.
Upstream edited
Recorded here
Lines+26added
Lines−32removed
From line
2
where the diff opens
First seen
14 Aug 2026
this site's first read of the page
Recorded edits3to this page, all time
The whole hunk
from line 2, old and new numbered
/
from line 2
22
33> Multi Round-Trip Requests
44
5<div className="flex items-center gap-2 mb-4">
6 <Badge color="green" shape="pill">
7 Final
8 </Badge>
5Final
96
10 <Badge color="gray" shape="pill">
11 Standards Track
12 </Badge>
13</div>
7Standards Track
148
15<Note>
16 This SEP has reached Final status and is preserved as a historical record of
17 the design as accepted. Changes made to the protocol after finalization are
18 not reflected here. Refer to the [current
19 specification](/specification/latest) and its changelog for authoritative
20 requirements.
21</Note>
9> [!NOTE]
10>
11> This SEP has reached Final status and is preserved as a historical record of
12> the design as accepted. Changes made to the protocol after finalization are
13> not reflected here. Refer to the [current
14> specification](/specification/latest) and its changelog for authoritative
15> requirements.
2216
2317| Field | Value |
2418| - | - |
from line 455
461455
462456<details>
463457 <summary>Click to expand Example Flow for Ephemeral Tools</summary>
464 <b>Example Flow for Ephemeral Tools</b>
458 **Example Flow for Ephemeral Tools**
465459
466460 Note: This is a contrived example, just to illustrate the flow.
467461
from line 925
931925
932926 The below example walks through the entire Task Message flow for a Echo Tool which can request additional information from the client via Elicitation.
933927
934 1. <b>Client Request</b> to invoke EchoTool.
928 1. **Client Request** to invoke EchoTool.
935929
936930 ```json theme={null}
937931 {
from line 941
947941 }
948942 ```
949943
950 2. <b>Server Response</b> with a `Task`
944 2. **Server Response** with a `Task`
951945
952946 ```json theme={null}
953947 {
from line 961
967961 }
968962 ```
969963
970 3. <b>Client Request</b> periodically checks the status of the `Task` using
964 3. **Client Request** periodically checks the status of the `Task` using
971965 `tasks/get`.
972966
973967 ```json theme={null}
from line 975
981975 }
982976 ```
983977
984 4. <b>Server Response</b> with Task status `input_required`
978 4. **Server Response** with Task status `input_required`
985979
986980 ```json theme={null}
987981 {
from line 993
999993 }
1000994 ```
1001995
1002 5. <b>Client Request</b> sends message `tasks/result` to discover what input is
996 5. **Client Request** sends message `tasks/result` to discover what input is
1003997 required to proceed.
1004998
1005999 ```json theme={null}
from line 1007
10131007 }
10141008 ```
10151009
1016 6. <b>Server Response</b> returns `inputRequests` to request additional input
1010 6. **Server Response** returns `inputRequests` to request additional input
10171011
10181012 ```json theme={null}
10191013 {
from line 1040
10461040 }
10471041 ```
10481042
1049 7. <b>Client Request</b> presents the Elicitation to the user and collects the
1043 7. **Client Request** presents the Elicitation to the user and collects the
10501044 input, then sends message to the server.
10511045
10521046 ```json theme={null}
from line 1066
10721066 }
10731067 ```
10741068
1075 8. <b>Server Response</b> Server should acknowledge the receipt of the
1069 8. **Server Response** Server should acknowledge the receipt of the
10761070 'tasks/input\_response' message by sending a 'JSONRPCResponse'. If the message
10771071 was successfully received a `JSONRPCResultResponse` is sent including the
10781072 `taskId`. If an error occurs, a `JSONRPCErrorResponse` is sent. The server
from line 1087
10931087 }
10941088 ```
10951089
1096 9. <b>Client Request</b> continues to poll the input status using `tasks/get`
1090 9. **Client Request** continues to poll the input status using `tasks/get`
10971091 until server responds with Task Status of `Completed`
10981092
10991093 ```json theme={null}
from line 1101
11071101 }
11081102 ```
11091103
1110 10. <b>Server Response</b> with Task status `completed`
1104 10. **Server Response** with Task status `completed`
11111105
11121106 ```json theme={null}
11131107 {
from line 1119
11251119 }
11261120 ```
11271121
1128 11. <b>Client Request</b> calls `tasks/result` to get the final result of the
1122 11. **Client Request** calls `tasks/result` to get the final result of the
11291123 `Task` from the server.
11301124
11311125 ```json theme={null}
from line 1133
11391133 }
11401134 ```
11411135
1142 12. <b>Server Response</b> with the final result of the `Task`
1136 12. **Server Response** with the final result of the `Task`
11431137
11441138 ```json theme={null}
11451139 {
from line 1268
127412682. The Server responds with an incomplete response, indicating that the client needs to provide missing information for the request to succeed.
12751269
12761270In the persistent workflow, this would look like the following:
1277Step 7 from above: <b>Client Request</b> The client mistakenly or maliciously sends unexpected, but well-formed data to the server in response to the input request.
1271Step 7 from above: **Client Request** The client mistakenly or maliciously sends unexpected, but well-formed data to the server in response to the input request.
12781272
12791273```json theme={null}
12801274{
from line 1293
12991293}
13001294```
13011295
1302Step 8 from above. <b>Server Response</b> Server acknowledges the receipt of the response by sending a `JSONRPCResultResponse`. However, since the response is missing required information, the server does not proceed with processing the task and leaves the Task status as `input_required`. The next time the client calls `tasks/result`, the server responds with a new `inputRequest` requesting the necessary information again.
1296Step 8 from above. **Server Response** Server acknowledges the receipt of the response by sending a `JSONRPCResultResponse`. However, since the response is missing required information, the server does not proceed with processing the task and leaves the Task status as `input_required`. The next time the client calls `tasks/result`, the server responds with a new `inputRequest` requesting the necessary information again.
13031297
13041298```json theme={null}
13051299{
No line in this hunk matches that.