Lowlevel plumbing for Multi Round-Trip Requests:
Types:
- IncompleteResult with result_type discriminator, input_requests, request_state
- InputRequest/InputResponse unions (elicitation, sampling, roots)
- input_responses + request_state fields on RequestParams
Server (lowlevel):
- on_call_tool return widened to include IncompleteResult
Session:
- send_request accepts TypeAdapter (overload) for union result parsing
- call_tool_mrtr() returns CallToolResult | IncompleteResult
- call_tool() stays narrow, raises on IncompleteResult with migration hint
Client:
- call_tool() drives MRTR retry loop internally — dispatches embedded
input requests to elicitation/sampling/list_roots callbacks, retries
with collected responses + echoed request_state
- max_mrtr_rounds bound (default 8)
The client-side delta from today's code is zero: elicitation_callback is the
same function whether it fires from SSE push or MRTR retry.