protocol conformance commands, but inside your own Jest or Vitest suites.
Use it when you want MCP protocol regressions to fail CI directly, or when you need JUnit XML and JSON artifacts from code rather than shell scripts.
Protocol conformance is currently HTTP-only. For local stdio-only servers, use
MCP Apps Conformance,
unit tests, or run your server through an
HTTP bridge in CI.
Import
Single run
Suite
MCPConformanceSuiteConfig keeps the existing serverUrl + defaults + runs shape:
MCPConformanceConfig
Available categories and check ids
Categories:coreprotocoltoolspromptsresourcessecuritytransport
server-initializepinglogging-set-levelcompletion-completecapabilities-consistenttools-listtools-input-schemas-validtools-x-mcp-header-declarations-valid(2026-07-28 only)prompts-listresources-listprotocol-invalid-method-errorlocalhost-host-rebinding-rejected— requires HTTP 403 when the run explicitly pinsprotocolVersionto2025-11-25or later; accepts any 4xx on earlier pins or when no version is pinnedlocalhost-host-valid-acceptedserver-sse-polling-sessionserver-accepts-multiple-post-streamsserver-sse-streams-functionalnotification-post-accepted(2025 revisions only)get-stream-or-405(2025 revisions only)session-id-visible-ascii(2025 revisions only)post-response-content-type
Result types
MCPConformanceTest.run() returns an MCPConformanceResult:
Each
MCPCheckResult includes a skipReason field whenever status is "skipped":
"not-applicable"— the check cannot apply to this server (era-gated check on the wrong protocol version, unadvertised capability, localhost-only requirement against a remote server). These never hold a run back."could-not-run"— the check applies but was never exercised (broken session, missinginputRequiredProbe, subscription stream unavailable). These make the runincomplete.
MCPConformanceSuite.run() returns an MCPConformanceSuiteResult:
Outcomes: passed, failed, incomplete
A run reports one of three outcomes, andpassed is true only for the first:
An incomplete run carries a root
incompleteReason naming the checks that did not run and what to change; non-quiet CLI runs also print it to stderr. For a suite, the exit code is the worst of all runs (failure outranks incomplete).
Readiness advice
Every run also collects areadiness channel: advisory observations about server behavior that the spec does not mandate but that indicate potential issues. Readiness items never affect outcome, passed, or exit codes — they are informational only.
Each MCPReadinessWarning has:
The CLI prints readiness items as an
Advice section on stderr after each protocol conformance or conformance-suite run. The section is suppressed by --quiet and does not appear in JSON or JUnit XML output.
Current readiness checks:
readiness-parse-error-handling— fires when the server accepts an unparseable JSON body as success without returning a JSON-RPC-32700parse error. No MCP revision mandates a specific response to malformed input, so this isMAYadvice rather than a check.readiness-session-termination— on 2025-era runs, fires when a session-terminationDELETEreturns a 5xx. On 2026-era runs, fires whenGETorDELETEtraffic from an older client is not answered with HTTP 405 (the 2026 backward-compatSHOULD).
CI reporting
All three conformance domains share the same report helpers:toConformanceReport(result)renderConformanceReportJUnitXml(report)renderConformanceReportJson(report)
protocol conformance --format junit-xml and protocol conformance-suite --format junit-xml emit the same XML that the SDK helpers produce for the same result.

