Class: Otto::MCP::SchemaValidationMiddleware
- Inherits:
-
Object
- Object
- Otto::MCP::SchemaValidationMiddleware
- Defined in:
- lib/otto/mcp/schema_validation.rb
Overview
Middleware for validating MCP protocol requests using JSON schema Validates JSON-RPC 2.0 structure and tool argument schemas
Instance Method Summary collapse
- #call(env) ⇒ Object
-
#initialize(app, _security_config = nil) ⇒ SchemaValidationMiddleware
constructor
A new instance of SchemaValidationMiddleware.
Constructor Details
#initialize(app, _security_config = nil) ⇒ SchemaValidationMiddleware
Returns a new instance of SchemaValidationMiddleware.
72 73 74 75 |
# File 'lib/otto/mcp/schema_validation.rb', line 72 def initialize(app, _security_config = nil) @app = app @validator = Validator.new end |
Instance Method Details
#call(env) ⇒ Object
77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 |
# File 'lib/otto/mcp/schema_validation.rb', line 77 def call(env) # Only validate MCP endpoints return @app.call(env) unless mcp_endpoint?(env) request = Otto::Request.new(env) if request.post? && request.content_type&.include?('application/json') begin body = request.body.read data = JSON.parse(body) @validator.validate_request(data) # Reset body for downstream middleware request.body.rewind if request.body.respond_to?(:rewind) rescue JSON::ParserError => e return validation_error_response(nil, "Invalid JSON: #{e.}") rescue ValidationError => e return validation_error_response(data&.dig('id'), e.) end end @app.call(env) end |