Client: an abandoned call_tool sends no notifications/cancelled — the MRTR helper hides each round's RequestHandle
Les mainteneurs répondent en général sous 3 jours
Évaluation
- Difficulté
- 4/5
- Temps estimé
- 3-5 jours
- Accessibilité débutants
- 48/100
Piste de recherche
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.
Rédigé par le modèle d'indexation à partir du texte de l'issue.
Description
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).
- Langage dominant
- Rust
- Étoiles
- 4.1k
- Forks
- 680
- Merge moyen
- 3 j 20 h
- PR mergées (30 j)
- 32
Préparer son environnement
Lance le conteneur de développement du projet dans votre navigateur, avec votre propre compte GitHub.
- Aucun Dockerfile ni fichier Docker Compose
- Aucun modèle de pull request
- Lire le guide de contribution
Par où commencer
- Lisez l'issue en entier, puis le guide de contribution du projet.
- Signalez en commentaire que vous la prenez — cela évite que deux personnes fassent le même travail.
- Forkez le dépôt et travaillez sur une branche.
- Ouvrez une pull request qui référence le numéro de l'issue.
Autres issues de modelcontextprotocol/rust-sdk
-
auth: refresh_token() requests offline_access that was never granted, so refreshes fail with invalid_scopePeut-être pris @jstar0 l’a pris il y a 21 jours. Ouvertebug P1 ready for work T-security T-transport
Difficulté 2/5 1-3 heures Accessibilité débutants 65/100
modelcontextprotocol/rust-sdk#1330 ·
Les mainteneurs répondent en général sous 3 jours
-
Enterprise-managed auth: ID-JAG `resource` claim should be optionalPeut-être pris @gocamille l’a pris il y a 1 jour. Ouvertebug P1 ready for work T-security T-transport
modelcontextprotocol/rust-sdk#1404 · 2 commentaires · 1 personne assignée ·
Les mainteneurs répondent en général sous 3 jours
-
Auto discovery timeout rejects a late probe response during legacy initializationPeut-être pris @gocamille l’a pris il y a 2 jours. Ouvertebug P1 ready for work T-service
modelcontextprotocol/rust-sdk#1400 · 1 commentaire · 1 personne assignée ·
Les mainteneurs répondent en général sous 3 jours
-
URL mode elicitation requires elicitationId, which the 2026-07-28 schema removedPeut-être pris @gocamille l’a pris il y a 2 jours. Ouvertebug P1 ready for work T-model
modelcontextprotocol/rust-sdk#1399 · 1 commentaire · 1 personne assignée ·
Les mainteneurs répondent en général sous 3 jours
-
stdio transport: a request over the maximum line length gets no answerPeut-être pris @gocamille l’a pris il y a 3 jours. Ouvertebug P1 ready for work T-transport
modelcontextprotocol/rust-sdk#1395 · 1 commentaire · 1 personne assignée ·
Les mainteneurs répondent en général sous 3 jours
Toutes les issues de modelcontextprotocol/rust-sdk
Issues similaires
-
priority middle
Difficulté 1/5 Moins d'une heure Accessibilité débutants 62/100
KATO-Hiro/AtCoderClans#12940 ·
Les mainteneurs répondent en général sous 1 jour
-
bug
Difficulté 2/5 1-3 heures Accessibilité débutants 83/100
Les mainteneurs répondent en général sous 1 jour
-
o8 next debug build aborts on Glass to Dark appearance switch (nil identifier messaged before check)Ouvertebug
Difficulté 2/5 1-3 heures Accessibilité débutants 78/100
hurttlocker/o8#5112 ·
-
Difficulté 2/5 1-3 heures Accessibilité débutants 79/100
Les mainteneurs répondent en général sous 1 jour
-
Difficulté 2/5 1-3 heures Accessibilité débutants 78/100
Les mainteneurs répondent en général sous 1 jour