Class: Otto::MCP::SchemaValidationMiddleware

Inherits:
Object
  • Object
show all
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

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.message}")
    rescue ValidationError => e
      return validation_error_response(data&.dig('id'), e.message)
    end
  end

  @app.call(env)
end