Refactor schema validation to reduce duplication and add additionalProperties support#198
Merged
koic merged 1 commit intomodelcontextprotocol:mainfrom Dec 16, 2025
Conversation
dc80f62 to
b862468
Compare
…operties support This refactoring extracts common schema validation logic into a base Schema class, eliminating ~100 lines of duplicate code between InputSchema and OutputSchema. It also adds support for the JSON Schema `additionalProperties` keyword to allow fine-grained control over extra properties in tool arguments. Previously `additionalParameters` could be set only on OutputSchema. Key changes: - Created MCP::Tool::Schema base class consolidating: - Schema validation against JSON Schema Draft 4 metaschema - Deep key transformation (string to symbol conversion) - $ref disallowance checking - Common validation methods - Refactored InputSchema to inherit from Schema: - Simplified constructor to accept full schema hash - Changed required fields storage from symbols to strings - Removed ~40 lines of duplicated validation logic - Refactored OutputSchema to inherit from Schema: - Removed ~54 lines of duplicated validation logic - Now shares all common functionality with InputSchema - Updated Tool.input_schema setter: - Simplified to pass full hash directly to InputSchema - Added additionalProperties support: - By default, tools now allow additional properties (JSON Schema default) - Can explicitly set `additionalProperties: false` to disallow extras - Added comprehensive test coverage for both behaviors
b862468 to
a3c24d2
Compare
koic
approved these changes
Dec 16, 2025
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.
This refactoring extracts common schema validation logic into a base Schema class, eliminating ~100 lines of duplicate code between
InputSchemaandOutputSchema. It also adds support for the JSON SchemaadditionalPropertieskeyword to allow fine-grained control over extra properties in tool arguments.Previously
additionalParameterscould be set only onOutputSchema.Key changes:
Created
MCP::Tool::Schemabase class consolidating:Refactored
InputSchemato inherit fromSchema:Refactored
OutputSchemato inherit fromSchema:Updated Tool.input_schema setter:
Added
additionalPropertiessupport:additionalProperties: falseto disallow extrasBreaking Changes
InputSchema doesn't have
requiredandpropertiesreaders.Required params are now strings instead of symbols to match OutputSchema.
Before:
After:
Error messages are unified:
instead of
Impact: