tasks conformance command validates the MCP Tasks wire your server exposes: which wire the connection resolves to, whether declaration hygiene holds for that wire, and whether the server honours the observable parts of the contract (result-type discipline, -32003 on undeclared requests, TTL shapes, inline results, and Mcp-Name routing for HTTP transports).
Tasks conformance provokes and then polls a real task, so it requires a
persistent connection. It is not available in hosted mode.
Quick start
execution.taskSupport, which the 2026-07-28 ToolSchema strips, so a tasks-extension server cannot advertise which tool creates a task. Without --tool-name the six task-dependent checks cannot run and the command reports "outcome": "incomplete" (exit code 3) rather than a green run:
--tool-name the server does not list is treated the same way: the run is incomplete, and the message names both the tool you asked for and the tools the server actually lists.
Emit CI-friendly JUnit XML:
What it checks
Categories and check ids
Three categories are available:dispatchcreationlifecycle
--category to run a subset by category, or --check-id to run specific checks:
If you pass both
--category and --check-id, the explicit --check-id
selection wins.Options
Example output
Outcomes: passed, failed, incomplete
A run reports one of three outcomes, andpassed is true only for the first:
Every skipped check says which kind of skip it is in
skipReason:
not-applicable— the check cannot apply here (an extension-only check on a legacy connection,Mcp-Namerouting over stdio, any task check on a connection with no tasks wire). These never hold a run back.could-not-run— the check applies but was never exercised (no probe tool resolved, the named tool is not listed, the tool produced no task, the task never became readable). These make the runincomplete.
incompleteReason naming the checks that did not run and what to change; non-quiet runs also print it to stderr. A skipped check can never add up to a passing verdict.
Shared connection flags
tasks conformance uses the same shared target flags as the rest of the CLI:
--transport is optional; without it, --url implies HTTP and --command implies stdio.
Notes
- Exit codes are CI-friendly:
0when all selected checks pass,1when any check fails,2for invalid command usage, and3when the run is incomplete because a selected check could not be run. - Declaration hygiene is asserted against captured outbound JSON-RPC bytes, not re-derived from intent.
- The undeclared-request checks (
tasks-undeclared-creation-refused,tasks-undeclared-capability-rejected) apply to the extension wire only and are skipped on the legacy wire. tasks-undeclared-capability-rejectedneeds a live task to probe with, so it is reported ascould-not-run(and the run as incomplete) when no task could be provoked. Its probes run last, after every check that reads the task, because a server that wrongly accepts an undeclaredtasks/updateortasks/cancelwould otherwise mutate the very task the other checks inspect. If the server does not implementsubscriptions/listenat all (-32601), that sub-probe is reported as a warning instead of a failure.- The
tasks-mcp-name-routingcheck applies to HTTP transports only and is skipped for stdio servers. - Checks that require a created task cannot run when no probe tool resolves. That is a
could-not-runskip, so the command exits3instead of reporting a pass — pass--tool-nameto fix it.
Related commands
- Apps conformance for MCP Apps surface validation
- Server inspection for breadth-first connectivity and capability triage
- Command reference for the full flag list

