Skip to content

Commit 7ba3511

Browse files
committed
Bump conformance harness to 0.2.0-alpha.11
alpha.11 adds a client scenario, json-schema-2020-12-preservation, that lists tools and echoes the focal tool's inputSchema back through json_schema_echo so the harness can detect 2020-12 keywords being stripped in transit. client.py had no handler for it, so both client legs failed with "Unknown scenario"; with the handler it passes 9/9 at the default, 2025-11-25 and 2026-07-28 wires. Everything else in the release (JSON-schema validation of every wire message, the server-session-lifecycle scenario, a DELETE after each stateful server scenario, the new --requirements mode) passes against main without baseline changes: server active 73/0, draft 103/0, all@2026-07-28 151/0, all 204/25 (the nine tasks-* entries, unchanged); client all 458/9 (the nine per-check DPoP/WIF entries, unchanged), all@2026-07-28 381/0. Also correct the client.py docstring: the exit budget is the harness --timeout (60s in CI), and the scenario list was missing http-custom-headers. No-Verification-Needed: CI config and conformance fixture only
1 parent a4f4ccd commit 7ba3511

2 files changed

Lines changed: 19 additions & 2 deletions

File tree

.github/actions/conformance/client.py

Lines changed: 18 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,16 +11,18 @@
1111
--spec-version is omitted the harness picks per-scenario (LATEST_SPEC_VERSION
1212
for active scenarios, DRAFT_PROTOCOL_VERSION for draft-only ones).
1313
- Server URL as last CLI argument (sys.argv[1])
14-
- Must exit 0 within 30 seconds
14+
- Must exit 0 within the harness --timeout (CI passes 60s; the default is 30s)
1515
1616
Scenarios:
1717
initialize - Connect, initialize, list tools, close
1818
tools_call - Connect, call add_numbers(a=5, b=3), close
1919
sse-retry - Connect, call test_reconnection, close
2020
json-schema-ref-no-deref - Connect, list tools (no $ref deref)
21+
json-schema-2020-12-preservation - List tools, echo the focal inputSchema back verbatim
2122
request-metadata - Connect with all callbacks; client stamps _meta
2223
http-standard-headers - Connect, call a tool (Mcp-* headers checked)
2324
http-invalid-tool-headers - List tools, call every surfaced tool (x-mcp-header filter)
25+
http-custom-headers - Replay the harness's toolCalls (x-mcp-header -> Mcp-Param-*)
2426
elicitation-sep1034-client-defaults - Elicitation with default accept callback
2527
sep-2322-client-request-state - Drive the MRTR auto-loop (SEP-2322)
2628
auth/client-credentials-jwt - Client credentials with private_key_jwt
@@ -252,6 +254,21 @@ async def run_json_schema_ref_no_deref(server_url: str) -> None:
252254
await client.list_tools()
253255

254256

257+
@register("json-schema-2020-12-preservation")
258+
async def run_json_schema_2020_12_preservation(server_url: str) -> None:
259+
"""List tools, then echo the focal tool's inputSchema back verbatim (SEP-1613 / SEP-2106).
260+
261+
The harness diffs what the client round-trips through `json_schema_echo` against its
262+
fixture to detect 2020-12 keywords ($schema, $defs, $anchor, additionalProperties,
263+
allOf/anyOf, if/then/else) being stripped while parsing tools/list. Unlike
264+
json-schema-ref-no-deref, this mock is version-aware, so client_mode() applies.
265+
"""
266+
async with Client(server_url, mode=client_mode()) as client:
267+
listed = await client.list_tools()
268+
focal = next(tool for tool in listed.tools if tool.name == "json_schema_2020_12_tool")
269+
await client.call_tool("json_schema_echo", {"schema": focal.input_schema})
270+
271+
255272
@register("tools_call")
256273
async def run_tools_call(server_url: str) -> None:
257274
"""Connect, list tools, call add_numbers(a=5, b=3), close."""

.github/workflows/conformance.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ env:
1717
# Pinned conformance harness package spec (passed verbatim to `npx --yes`).
1818
# Bump deliberately and reconcile both
1919
# .github/actions/conformance/expected-failures*.yml files in the same change.
20-
CONFORMANCE_PKG: "@modelcontextprotocol/conformance@0.2.0-alpha.10"
20+
CONFORMANCE_PKG: "@modelcontextprotocol/conformance@0.2.0-alpha.11"
2121

2222
jobs:
2323
server-conformance:

0 commit comments

Comments
 (0)