-
Notifications
You must be signed in to change notification settings - Fork 2.8k
fix: add additionalProperties: false to nested MCP tool schemas #10109
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Merged
Conversation
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
Contributor
Review complete. No issues found. The latest changes pin zod to version 3.25.61 to avoid a TypeScript TS2589 regression introduced in 3.25.76. This is a clean, targeted fix that correctly pins the dependency version and updates the lockfile accordingly. Mention @roomote in a comment to request specific changes to this pull request or fix all unresolved issues. |
cte
approved these changes
Dec 16, 2025
OpenAI's API requires additionalProperties: false on all object schemas, including nested ones. MCP tools like 'create_entities' have array items that are objects, which were missing this property. Created a recursive utility function that transforms JSON schemas to ensure all nested object schemas have additionalProperties: false.
- Add JsonSchema TypeScript interface for type safety - Add JsonSchemaSchema Zod validator for validating JSON Schema structures - Add JsonSchemaUtils class with validation methods: - validate(): safe validation with result object - validateOrThrow(): throws on invalid schema - isValid(): type guard for checking validity - stripUnknownFields(): sanitize schemas - validateAndAddAdditionalPropertiesFalse(): combined validation + transform - Keep standalone addAdditionalPropertiesFalse() for backwards compatibility - Expand test coverage from 12 to 29 tests
- Replace custom recursive traversal with json-schema-traverse library - Library is small (~22KB), has TypeScript types, and is well-tested - Same author as ajv (most popular JSON Schema validator) - Simplifies the addAdditionalPropertiesFalse implementation - All 29 tests still pass
- Keep Zod validation for JSON Schema structure - Add generic transformJsonSchema() function for extensibility - Remove unused JsonSchemaUtils class - Reduce code while maintaining all functionality
- Single schema definition (StrictJsonSchemaSchema) that validates AND applies defaults - Removed json-schema-traverse dependency - mcp_server.ts uses parsed schema directly, no manual property additions - Updated tests to verify Zod default behavior
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Labels
bug
Something isn't working
lgtm
This PR has been approved by a maintainer
PR - Needs Review
size:L
This PR changes 100-499 lines, ignoring generated files.
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.
Problem
OpenAI's API returns an error when MCP tools have nested object schemas that don't have
additionalProperties: false:Solution
Uses Zod schema with
.default(false)onadditionalProperties. A single schema definition that is both validator AND mutator - no manual property additions needed.API
JsonSchemaSchemaStrictJsonSchemaSchemaadditionalProperties: falseto all schemas via Zod's.default()Usage
Changes
src/utils/json-schema.ts- Single Zod schema with.default(false)onadditionalPropertiessrc/core/prompts/tools/native-tools/mcp_server.ts- Uses parsed schema directlyjson-schema-traversedependencyTesting
All 4700+ tests pass.
Important
Adds
ToolInputSchemato ensureadditionalProperties: falsein nested schemas, updatesgetMcpServerTools(), and adds tests.additionalProperties: falsein nested schemas usingToolInputSchemainjson-schema.ts.getMcpServerTools()inmcp_server.tsto useToolInputSchemafor schema parsing.json-schema.spec.tsto verifyToolInputSchemabehavior.json-schema-traversedependency.zodversion inpackage.json.This description was created by
for a93c1a7. You can customize this summary. It will automatically update as commits are pushed.