fix: restore extensibility for ToolAnnotations schema #1144
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Summary
Restores the ability for
ToolAnnotationsto accept additional properties beyond the standard fields.Problem
In SDK v1.22.0, the
.passthrough()modifier was accidentally removed fromToolAnnotationsSchemaduring the SEP-1319 cleanup (commit f59996a). This broke consumers like Cloudflare's x402 integration that rely on extending annotations with custom fields (e.g.,paymentHint,paymentPriceUSD).Justification from Spec
The MCP specification allows additional properties on
ToolAnnotations. Looking at the JSON Schema for ToolAnnotations:{ "description": "Additional properties describing a Tool to clients...", "properties": { "title": { ... }, "readOnlyHint": { ... }, "destructiveHint": { ... }, "idempotentHint": { ... }, "openWorldHint": { ... }, "taskHint": { ... } }, "type": "object" }Note: No
"additionalProperties": falseis specified, which per JSON Schema semantics means additional properties ARE allowed.Solution
Add
.catchall(z.unknown())toToolAnnotationsSchemato match the spec's extensibility. Using.catchall(z.unknown())rather than.passthrough()for consistency with other schemas per commit 913ca2a.Test Plan