Class: Otto::MCP::Validator
- Inherits:
-
Object
- Object
- Otto::MCP::Validator
- Defined in:
- lib/otto/mcp/schema_validation.rb
Overview
JSON Schema validator for MCP protocol requests
Constant Summary collapse
- JSON_SCHEMER_REQUIREMENT =
'~> 2.0'
Class Method Summary collapse
Instance Method Summary collapse
-
#initialize ⇒ Validator
constructor
A new instance of Validator.
- #validate_request(data) ⇒ Object
- #validate_tool_arguments(tool_name, arguments, schema) ⇒ Object
Constructor Details
#initialize ⇒ Validator
Returns a new instance of Validator.
28 29 30 31 |
# File 'lib/otto/mcp/schema_validation.rb', line 28 def initialize self.class.ensure_available! @schemas = {} end |
Class Method Details
.ensure_available! ⇒ Object
18 19 20 21 22 23 24 25 26 |
# File 'lib/otto/mcp/schema_validation.rb', line 18 def self.ensure_available! Otto::OptionalDependency.require!( 'json_schemer', JSON_SCHEMER_REQUIREMENT, require_path: 'json_schemer', feature: 'MCP JSON Schema validation', alternative: 'Or pass `enable_validation: false` when enabling MCP.' ) end |
Instance Method Details
#validate_request(data) ⇒ Object
33 34 35 36 37 38 39 40 41 42 43 |
# File 'lib/otto/mcp/schema_validation.rb', line 33 def validate_request(data) schema = mcp_request_schema validation_errors = schema.validate(data).to_a unless validation_errors.empty? = validation_errors.map { |error| error['details'] || error['error'] || error.to_s }.join(', ') raise ValidationError, "Invalid MCP request: #{}" end true end |
#validate_tool_arguments(tool_name, arguments, schema) ⇒ Object
45 46 47 48 49 50 51 52 53 54 55 56 57 |
# File 'lib/otto/mcp/schema_validation.rb', line 45 def validate_tool_arguments(tool_name, arguments, schema) return true unless schema schemer = JSONSchemer.schema(schema) validation_errors = schemer.validate(arguments).to_a unless validation_errors.empty? = validation_errors.map { |error| error['details'] || error['error'] || error.to_s }.join(', ') raise ValidationError, "Invalid arguments for tool #{tool_name}: #{}" end true end |