outputSchema is generated for the deserialize contract; tool results are serialised
I maintainer di solito rispondono entro 2 giorni
Valutazione
Questa issue non è ancora stata valutata.
Descrizione
Problem
schema_for_output::<T>() builds a tool's outputSchema through schema_for_type, which uses SchemaSettings::draft2020_12(), i.e. schemars' default Contract::Deserialize (crates/rmcp/src/handler/server/common.rs, still the case on main at ad5a284). A tool result is a value the server serialises, so its schema should describe what Serialize writes. Under the deserialize contract the advertised schema is wrong for common shapes:
- an
Option<T>field withoutskip_serializing_ifis always written (asnull), but is advertised as optional; - a
#[serde(default)]field is always written, but is advertised as optional; - a type that accepts several forms and writes one (e.g.
rust_decimal::Decimal: string or number in, string out) is advertised with every accepted form.
A client or model reading outputSchema is told a field may be absent when the server always sends it, or may be a number when the server sends a string.
Repro
#[derive(serde::Serialize, schemars::JsonSchema)]
struct Out {
always: Option<i32>,
#[serde(skip_serializing_if = "Option::is_none")]
sometimes: Option<i32>,
}
// schema_for_output::<Out>()["required"] is absent; it should be ["always"].
Proposed fix
schema_for_output generates with SchemaSettings::draft2020_12().for_serialize(). Inputs (schema_for_type) stay on the deserialize contract. There is no public API change. For types whose two forms are equal, the output schema is byte-identical.
I have a patch against main with two tests (an always-written Option is required in an output schema; an input Option stays optional). cargo test -p rmcp --features server,client,macros,schemars,transport-io passes. I'm happy to open the PR if this direction is welcome.
- Lingua principale
- Rust
- Stelle
- 4k
- Fork
- 662
- Merge medio
- 3g 11h
- PR unite (30g)
- 36
Preparare l'ambiente
Avvia il container di sviluppo del progetto nel browser, con il tuo account GitHub.
- Nessun Dockerfile né file Docker Compose
- Nessun modello di pull request
- Leggi la guida per i contributori
Come iniziare
- Leggi tutta la issue e poi la guida ai contributi del progetto.
- Commenta sulla issue per dire che te ne occupi tu — evita che due persone facciano lo stesso lavoro.
- Fai un fork del repository e lavora su un branch.
- Apri una pull request che faccia riferimento al numero della issue.
Altre issue di modelcontextprotocol/rust-sdk
-
Streamable HTTP client: a 401 or 403 with a JSON-RPC error body and no WWW-Authenticate loses its HTTP statusForse già presa @aton-of-data l’ha presa 7 giorni fa. Apertabug P2 ready for work T-security T-transport
Difficoltà 2/5 1-3 ore Idoneità per principianti 68/100
modelcontextprotocol/rust-sdk#1339 ·
I maintainer di solito rispondono entro 2 giorni
-
auth: refresh_token() requests offline_access that was never granted, so refreshes fail with invalid_scopeForse già presa @jstar0 l’ha presa 10 giorni fa. Apertabug P1 ready for work T-security T-transport
Difficoltà 2/5 1-3 ore Idoneità per principianti 65/100
modelcontextprotocol/rust-sdk#1330 ·
I maintainer di solito rispondono entro 2 giorni
-
P3 question Stale T-documentation T-enhancement
Difficoltà 1/5 Meno di un'ora Idoneità per principianti 86/100
modelcontextprotocol/rust-sdk#1155 · 1 commento ·
I maintainer di solito rispondono entro 2 giorni
-
Streamable HTTP client: update the stored endpoint URI after a 308Forse già presa @connor4312 l’ha presa 2 giorni fa. Apertaenhancement P3 T-transport
modelcontextprotocol/rust-sdk#1373 · 2 commenti · 1 assegnatario ·
I maintainer di solito rispondono entro 2 giorni
-
Expose OAuth discovery and registration results for application-owned flowsForse già presa @connor4312 l’ha presa 2 giorni fa. Apertaenhancement P2 ready for work T-security
modelcontextprotocol/rust-sdk#1371 · 1 commento · 1 assegnatario ·
I maintainer di solito rispondono entro 2 giorni
Tutte le issue di modelcontextprotocol/rust-sdk
Issue simili
-
documentation P2
Difficoltà 2/5 1-3 ore Idoneità per principianti 88/100
I maintainer di solito rispondono entro 1 giorno
-
bug good first issue priority:high
Difficoltà 2/5 1-3 ore Idoneità per principianti 88/100
Konfirm-xyz/konfirm-contracts#163 ·
I maintainer di solito rispondono entro 1 giorno
-
area:gc-repack-output bug factory:dogfood factory:triaged priority:p3 type:bug type:ux
Difficoltà 2/5 1-3 ore Idoneità per principianti 72/100
gitbutlerapp/grit#1161 · 1 commento ·
I maintainer di solito rispondono entro 1 giorno
-
bug
Difficoltà 2/5 1-3 ore Idoneità per principianti 76/100
I maintainer di solito rispondono entro 1 giorno
-
feature performance
Difficoltà 2/5 1-3 ore Idoneità per principianti 65/100
lance-format/lance#10137 ·
I maintainer di solito rispondono entro 2 giorni