Client: an abandoned call_tool sends no notifications/cancelled — the MRTR helper hides each round's RequestHandle
メンテナーはふだん 3 日以内に返信
まだ誰も着手していません。
評価
- 難易度
- 4/5
- 見積もり時間
- 3〜5日
- 初心者へのやさしさ
- 48/100
調査の方向性
Start by reading RunningService::call_tool, call_tool_with_mrtr_max_rounds, and peer.call_tool_once to trace how each round's RequestHandle is managed. The issue identifies three possible approaches; assess how cancellation interacts with retries and input_required handling. Done means an abandoned or cancelled call sends notifications/cancelled for its in-flight round.
索引モデルが issue の本文から書いたものです。
説明
rmcp 3.5.0, client side. A caller that abandons a tools/call — its own deadline passed, say — has no way to tell the server, because the MRTR helper hides the request it is waiting on.
RunningService::call_tool (via call_tool_with_mrtr_max_rounds) drives each round with peer.call_tool_once → send_request, which awaits a RequestHandle internally. So:
- Dropping the
call_toolfuture sends nothing.RequestHandlehas noDropbehaviour;send_timeout_cancel_notificationruns only when the handle's ownPeerRequestOptionstimeout fires. A wrapper liketokio::time::timeout(bound, service.call_tool(params))abandons the request locally while the server keeps working on it, and its response stream stays open until the server answers or the socket's idle timeout fires. - A caller can't drive the rounds itself either.
send_cancellable_request/send_request_with_optionreturn aRequestHandlewithcancel(), but answering aninput_requiredround needsprepare_input_required_retry, which is private. Re-implementing it means re-implementing the elicitation hand-off to the localClientHandler.
A call_tool that can be cancelled through any of these would do:
- A drop guard in the MRTR driver that holds the current round's
RequestHandleand sendsnotifications/cancelledfor it when the future is dropped mid-round (the cheapest; it covers everytimeout/select!caller). - An option on
call_toolfor a total deadline or aCancellationToken, which sendsnotifications/cancelledfor the round in flight when it fires (the spirit ofPeerRequestOptions::max_total_timeout, across rounds). prepare_input_required_retrymade public, so callers can drive rounds withsend_cancellable_request.
(1) seems the most useful, since abandoning a future is how most async callers bound a call.
Context: agentd bounds every tool call it makes on behalf of a workflow step or a model turn. Today an abandoned call is documented as "not cancelled" because of this (crates/mcp/src/rmcp_client.rs, call_tool).
- 主要言語
- Rust
- スター
- 4k
- フォーク
- 654
- 平均マージ
- 3日 4時間
- マージ済み PR(30日)
- 37
環境構築
このプロジェクトの開発コンテナを、あなたの GitHub アカウントでブラウザ上に起動します。
- Dockerfile・Docker Compose ファイルなし
- プルリクエストのテンプレートなし
- コントリビューションガイドを読む
はじめの一歩
- issue を最後まで読み、次にプロジェクトのコントリビューションガイドを読みます。
- 着手することを issue にコメントします — 二人が同じ作業をするのを防げます。
- リポジトリをフォークし、ブランチを切って変更します。
- issue 番号を参照したプルリクエストを送ります。
modelcontextprotocol/rust-sdk のほかの issue
-
Streamable HTTP client: a 401 or 403 with a JSON-RPC error body and no WWW-Authenticate loses its HTTP status対応中かも このイシューにリンクされたプルリクエストがオープン中、またはマージ済みです。 オープンbug P2 ready for work T-security T-transport
難易度 2/5 1〜3時間 初心者へのやさしさ 68/100
modelcontextprotocol/rust-sdk#1339 ·
メンテナーはふだん 3 日以内に返信
-
rmcp and rmcp-macros crates no longer include LICENSE (regression since 1.3.0)対応中かも このイシューにリンクされたプルリクエストがオープン中、またはマージ済みです。 オープンbug P2 ready for work T-config
難易度 2/5 1〜3時間 初心者へのやさしさ 78/100
modelcontextprotocol/rust-sdk#1335 ·
メンテナーはふだん 3 日以内に返信
-
auth: refresh_token() requests offline_access that was never granted, so refreshes fail with invalid_scope対応中かも @jstar0 が 3 日前に担当しました。 オープンbug P1 ready for work T-security T-transport
難易度 2/5 1〜3時間 初心者へのやさしさ 65/100
modelcontextprotocol/rust-sdk#1330 ·
メンテナーはふだん 3 日以内に返信
-
P3 question Stale T-documentation T-enhancement
難易度 1/5 1時間未満 初心者へのやさしさ 86/100
modelcontextprotocol/rust-sdk#1155 · コメント 1 件 ·
メンテナーはふだん 3 日以内に返信
-
Non-object outputSchema and structuredContent are sent to clients that negotiated 2025-06-18 / 2025-11-25, where an object is required対応中かも @Cassian433 が今日担当しました。 オープンbug P1 ready for work T-handler T-model
難易度 3/5 1〜2日 初心者へのやさしさ 28/100
modelcontextprotocol/rust-sdk#1337 ·
メンテナーはふだん 3 日以内に返信
modelcontextprotocol/rust-sdk の issue をすべて見る
似ている issue
-
bug
難易度 2/5 1〜3時間 初心者へのやさしさ 72/100
eclipse-opensovd/classic-diagnostic-adapter#616 ·
メンテナーはふだん 2 日以内に返信
-
documentation
難易度 1/5 1時間未満 初心者へのやさしさ 86/100
メンテナーはふだん 1 日以内に返信
-
track: content
難易度 2/5 1〜3時間 初心者へのやさしさ 72/100
0xAndersen/witness-log#10 ·
-
follow-up main-defect wave-A
難易度 2/5 1〜3時間 初心者へのやさしさ 72/100
carrick-sh/carrick#249 ·
メンテナーはふだん 1 日以内に返信
-
bug
難易度 2/5 1〜3時間 初心者へのやさしさ 76/100
lugassawan/swe-workbench#799 ·
メンテナーはふだん 1 日以内に返信