diff --git a/conformance/client.rb b/conformance/client.rb index c1034142..23403d3b 100644 --- a/conformance/client.rb +++ b/conformance/client.rb @@ -182,6 +182,14 @@ def build_provider_for(scenario, context) case scenario when "initialize" client.tools + when "json-schema-2020-12-preservation" + # SEP-1613/SEP-2106: echo the focal tool's observed inputSchema verbatim so the harness + # can diff what the client preserved. Preservation holds because `Client::Tool#input_schema` + # is the parsed response untouched. + tools = client.tools + focal = tools.find { |t| t.name == "json_schema_2020_12_tool" } + abort("Tool json_schema_2020_12_tool not found") unless focal + client.call_tool(name: "json_schema_echo", arguments: { "schema" => focal.input_schema }) when "tools_call" tools = client.tools add_numbers = tools.find { |t| t.name == "add_numbers" } diff --git a/conformance/expected_failures.yml b/conformance/expected_failures.yml index e26c20eb..5c1dbec1 100644 --- a/conformance/expected_failures.yml +++ b/conformance/expected_failures.yml @@ -8,9 +8,9 @@ client: # are not implemented in `MCP::Client::HTTP` yet. - http-custom-headers - http-invalid-tool-headers - # Client-side JSON Schema preservation gaps: `$ref` values must reach the caller unresolved. + # Client-side JSON Schema handling: `$ref` values must reach the caller unresolved, + # and the conformance client does not run the scenario over the modern lifecycle yet. - json-schema-ref-no-deref - - json-schema-2020-12-preservation # Unimplemented authorization extensions. - auth/dpop - auth/dpop-nonce