diff --git a/lib/mcp/tool/input_schema.rb b/lib/mcp/tool/input_schema.rb index b542801..d6885e0 100644 --- a/lib/mcp/tool/input_schema.rb +++ b/lib/mcp/tool/input_schema.rb @@ -50,7 +50,10 @@ def validate_schema! accept_uri: false, accept_file: ->(path) { path.to_s.start_with?(Gem.loaded_specs["json-schema"].full_gem_path) }, ) - metaschema = JSON::Validator.validator_for_name("draft4").metaschema + metaschema_path = Pathname.new(JSON::Validator.validator_for_name("draft4").metaschema) + # Converts metaschema to a file URI for cross-platform compatibility + metaschema_uri = JSON::Util::URI.file_uri(metaschema_path.expand_path.cleanpath.to_s.tr("\\", "/")) + metaschema = metaschema_uri.to_s errors = JSON::Validator.fully_validate(metaschema, schema, schema_reader: schema_reader) if errors.any? raise ArgumentError, "Invalid JSON Schema: #{errors.join(", ")}" diff --git a/lib/mcp/tool/output_schema.rb b/lib/mcp/tool/output_schema.rb index 614e59d..af5405c 100644 --- a/lib/mcp/tool/output_schema.rb +++ b/lib/mcp/tool/output_schema.rb @@ -55,7 +55,10 @@ def validate_schema! accept_uri: false, accept_file: ->(path) { path.to_s.start_with?(Gem.loaded_specs["json-schema"].full_gem_path) }, ) - metaschema = JSON::Validator.validator_for_name("draft4").metaschema + metaschema_path = Pathname.new(JSON::Validator.validator_for_name("draft4").metaschema) + # Converts metaschema to a file URI for cross-platform compatibility + metaschema_uri = JSON::Util::URI.file_uri(metaschema_path.expand_path.cleanpath.to_s.tr("\\", "/")) + metaschema = metaschema_uri.to_s errors = JSON::Validator.fully_validate(metaschema, schema, schema_reader: schema_reader) if errors.any? raise ArgumentError, "Invalid JSON Schema: #{errors.join(", ")}"