Skip to main content
The 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, undeclared capability handling, 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

For a local stdio server:
When your server’s tools carry no task metadata (the extension wire), pass the tool name explicitly:
Emit CI-friendly JUnit XML:

What it checks

Categories and check ids

Three categories are available:
  • dispatch
  • creation
  • lifecycle
Use --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

Typical success summary:

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: 0 when all selected checks pass, 1 when any check fails, and 2 for invalid command usage.
  • Declaration hygiene is asserted against captured outbound JSON-RPC bytes, not re-derived from intent.
  • The undeclared-capability check (tasks-undeclared-capability-rejected) applies to the extension wire only and is skipped on the legacy wire.
  • The tasks-mcp-name-routing check applies to HTTP transports only and is skipped for stdio servers.
  • Checks that require a created task are skipped when no task-capable tool is found and no --tool-name is provided.