modelcontextprotocol / modelcontextprotocol/java-sdk
Missing `@JsonIgnoreProperties(ignoreUnknown = true)` on capability sub-records
Nessuno ha ancora preso questa issue.
- Lingua principale
- Java
- Stelle
- 3.7k
- Fork
- 1.1k
- Merge medio
- 1g 15h
- PR unite (30g)
- 9
Descrizione
Bug description
The top-level ClientCapabilities and ServerCapabilities records have @JsonIgnoreProperties(ignoreUnknown = true), but their nested sub-records do not. Since the ObjectMapper is constructed with default settings (FAIL_ON_UNKNOWN_PROPERTIES = true), any unknown field on a capability sub-object causes a deserialization failure.
This already caused a real breakage when the elicitation capability gained form and url fields (#724, fixed in #731), but the systemic issue remains — the next spec addition to any capability sub-object will break older SDK versions again.
Affected records
In McpSchema.java:
| Record | Line | Has annotation? |
|---|---|---|
ClientCapabilities |
383 | Yes |
RootCapabilities |
397 | Yes |
Sampling |
410 | No |
Elicitation |
437 | No |
Elicitation.Form |
443 | No |
Elicitation.Url |
450 | No |
ServerCapabilities |
535 | Yes |
CompletionCapabilities |
548 | No |
LoggingCapabilities |
555 | No |
PromptCapabilities |
565 | No |
ResourceCapabilities |
576 | No |
ToolCapabilities |
587 | No |
Spec reference
The spec schema explicitly states capabilities are not a closed set:
"Known capabilities are defined here, in this schema, but this is not a closed set: any client can define its own, additional capabilities."
ClientCapabilities in schema.json — additionalProperties: false is never set on any capability object or sub-object. Several sub-capabilities (sampling, elicitation, completions, logging) explicitly set additionalProperties: true.
Expected behavior
Unknown fields on capability sub-objects should be silently ignored, matching the behavior of the top-level ClientCapabilities and ServerCapabilities records.
Related
- #734 — reports the same issue for
ToolCapabilitiesspecifically - #724 / #731 — the elicitation breakage that was fixed by adding fields, not by adding the annotation
Guida per i contributori
Apri 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.
Direzione di ricerca
Inizia da mcp-core/src/main/java/io/modelcontextprotocol/spec/McpSchema.java e rivedi i capability record elencati, confrontandoli con ClientCapabilities e ServerCapabilities. Il lavoro è completato quando i campi sconosciuti di ogni sottorecord di capability interessato vengono ignorati durante la deserializzazione, inclusi gli elicitation record annidati.
Scritto dal modello di indicizzazione a partire dal testo della issue.
Valutazione
- Stack tecnologico
- java
- Ambito
- api
- Tipo di issue
- Bug
- Difficoltà
- 2/5
- Tempo stimato
- 1-3 ore
- Stato di attività
- Ferma
- Chiarezza
- Specificata chiaramente
- Idoneità per principianti
- 55/100