A request whose `id` is not an i64 or a string is parsed as a notification
Les mainteneurs répondent en général sous 3 jours
Évaluation
- Difficulté
- 3/5
- Temps estimé
- 1-2 jours
- Accessibilité débutants
- 62/100
- Type d'issue
- Bug
- Clarté
- Plutôt claire
- Activité
- Active
- Stack technique
- rust
- Domaine
- backend-api-design
Piste de recherche
Start with the JsonRpcMessage untagged enum and NumberOrString parsing in the message model; the issue provides a reproducer using ClientJsonRpcMessage and serde_json::from_str. Check how parsing distinguishes requests from notifications and how invalid ids can be reported as -32600 Invalid Request. Done means the listed id cases no longer silently parse as notifications.
Rédigé par le modèle d'indexation à partir du texte de l'issue.
Description
Describe the bug
JsonRpcMessage is #[serde(untagged)]. When id is present but does not deserialize as NumberOrString (i64 or string), the Request variant fails and the message falls through to Notification, which ignores the extra id field. The server then never answers, so the client waits until its own timeout instead of getting -32600 Invalid Request.
To Reproduce (main at 808124b)
let raw = r#"{"jsonrpc":"2.0","id":1.0,"method":"tools/list"}"#;
let msg: rmcp::model::ClientJsonRpcMessage = serde_json::from_str(raw).unwrap();
assert!(matches!(msg, rmcp::model::ClientJsonRpcMessage::Request(_))); // fails: Notification
Same result for 9223372036854775808 (i64::MAX + 1), 1e2, 1.5, true and null. 9223372036854775807 parses as a request.
Expected behavior
A message that carries id and method is a request. If the id is not one the SDK supports, reject it with -32600 rather than treating it as a notification. 1.0 and 1e2 are integral JSON numbers and could reasonably be accepted as 1 and 100.
Additional context
Found by running the same request ids through several SDKs. The Go SDK has a related report in modelcontextprotocol/go-sdk#1376. I checked message parsing only, not a live server.
I'd like to send a fix: decide request vs notification by the presence of id, and report an invalid id as an error.
AI disclosure: found and drafted with Claude Code; I reviewed it and ran the cases above.
- Langage dominant
- Rust
- Étoiles
- 4k
- Forks
- 662
- Merge moyen
- 3 j 19 h
- PR mergées (30 j)
- 35
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
-
Streamable HTTP client: a 401 or 403 with a JSON-RPC error body and no WWW-Authenticate loses its HTTP statusPeut-être pris @aton-of-data l’a pris il y a 3 jours. Ouvertebug P2 ready for work T-security T-transport
Difficulté 2/5 1-3 heures Accessibilité débutants 68/100
modelcontextprotocol/rust-sdk#1339 ·
Les mainteneurs répondent en général sous 3 jours
-
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 6 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
-
P3 question Stale T-documentation T-enhancement
Difficulté 1/5 Moins d'une heure Accessibilité débutants 86/100
modelcontextprotocol/rust-sdk#1155 · 1 commentaire ·
Les mainteneurs répondent en général sous 3 jours
-
Clean up sessions after legacy initialize parsing failsPeut-être pris @bolinfest l’a pris aujourd’hui. Ouvertebug P2 ready for work T-transport
modelcontextprotocol/rust-sdk#1357 · 1 commentaire · 1 personne assignée ·
Les mainteneurs répondent en général sous 3 jours
-
Expose body-free HTTP status and Retry-After metadataPeut-être pris @bolinfest l’a pris aujourd’hui. Ouverte
modelcontextprotocol/rust-sdk#1356 · 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
-
Custom hosts written as trailing-dot FQDNs (`host.local.`) aren't detected as local backendsPeut-être pris @roboomp l’a pris aujourd’hui. Ouvertebug prio:p2 providers triaged
Difficulté 2/5 1-3 heures Accessibilité débutants 82/100
can1357/oh-my-pi#15798 · 3 commentaires ·
Les mainteneurs répondent en général sous 1 jour
-
requires-triage
Difficulté 2/5 1-3 heures Accessibilité débutants 68/100
apache/datafusion-comet#7001 ·
Les mainteneurs répondent en général sous 1 jour
-
Difficulté 2/5 1-3 heures Accessibilité débutants 62/100
-
Add a Storybook section to CONTRIBUTING.mdPeut-être pris @ChanakyaG2004 l’a pris aujourd’hui. Ouvertedocumentation good first issue
Difficulté 2/5 1-3 heures Accessibilité débutants 82/100
FlowwStar/FlowStar#995 · 2 commentaires ·
Les mainteneurs répondent en général sous 1 jour