fix(core): allow extra JSON Schema keywords on elicitation primitive schemas#1949
Open
Zelys-DFKH wants to merge 2 commits intomodelcontextprotocol:mainfrom
Open
Conversation
Primitive schema Zod validators (BooleanSchemaSchema, StringSchemaSchema, NumberSchemaSchema) stripped any key not explicitly listed, rejecting valid JSON Schema keywords like `pattern`, `exclusiveMinimum`, `const`, etc. Added .passthrough() to all three so extra keys are preserved, and added [key: string]: unknown index signatures to the matching spec.types interfaces to maintain bidirectional type compatibility. Closes modelcontextprotocol#1844 Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
🦋 Changeset detectedLatest commit: a88c75a The changes in this PR will be included in the next version bump. This PR includes changesets to release 1 package
Not sure what this means? Click here to learn what changesets are. Click here if you're a maintainer who wants to add another changeset to this PR |
@modelcontextprotocol/client
@modelcontextprotocol/server
@modelcontextprotocol/express
@modelcontextprotocol/fastify
@modelcontextprotocol/hono
@modelcontextprotocol/node
commit: |
Prettier formats long z.object({...}).passthrough() as a broken chain
with .passthrough() on its own line.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
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
Servers sending
elicitation/createwith standard JSON Schema keywords on primitive fields —patternon a string,exclusiveMinimumon a number,conston a boolean — get them silently stripped. In stricter validator configs, the request fails outright. The spec describesrequestedSchemaas a "JSON Schema object" with no restriction on valid keywords, so the SDK was being stricter than the spec.The fix is three
.passthrough()calls onBooleanSchemaSchema,StringSchemaSchema, andNumberSchemaSchema. Also added[key: string]: unknownindex signatures to the matching interfaces inspec.types.tsto keep the types consistent, and removed two@ts-expect-errorcomments in the elicitation tests that were papering over the resulting assignability errors.Test plan
pnpm --filter @modelcontextprotocol/core test: all 489 existing tests passpnpm typecheck:all: cleantest/integration/test/server/elicitation.test.tscover all three primitive types with extra keywords (patternon string,exclusiveMinimum/exclusiveMaximumon number,conston boolean)Fixes #1844