MCP Rigor logo MCP Rigor

MCP-Native Behavior Testing

MCP Rigor 0.10 extends deterministic request/response testing to asynchronous and client-side MCP behavior.

Notifications

Wait for notification "notifications/resources/updated" within 5 seconds
Expect "params.uri" equals "fixture://status"

Supported official notification handlers include:

Events receive deterministic session-local sequence numbers and are available to the evidence recorder.

Resource subscriptions

Subscribe to resource "fixture://status"
Call tool "change_status"
Wait for notification "notifications/resources/updated" within 5 seconds

Cleanup:
Unsubscribe from resource "fixture://status"

The server must declare resource subscription capability.

Progress and cancellation

Call tool "import_catalog" with progress with:
  file: "catalog.csv"

Expect "progress" has 2 items

Cancellation can be configured in YAML/JSON native steps with cancelAfterMs. Cancellation uses AbortSignal, distinguishing it from request timeout.

Pagination

List all tools
Expect "items" has 20 items

Equivalent statements exist for resources, prompts, and resource templates. MCP Rigor follows nextCursor until absent and fails on repeated cursors.

Logging

Set log level to "debug"
Wait for notification "notifications/message" within 5 seconds

Roots, sampling, and elicitation

YAML/JSON suites can configure deterministic client behavior:

client:
  roots:
    - uri: file:///workspace
      name: Workspace
  sampling:
    model: fixture-model
    text: deterministic response
  elicitation:
    action: accept
    content:
      approved: true

The SDK client advertises roots, sampling, and elicitation capabilities and installs handlers using official schemas. No real model is called and no human UI is invoked during deterministic runs.

Experimental tasks

Native requests can stream task-aware tool calls through the SDK experimental task API. Generic task operations are also available:

Task support remains explicitly experimental and SDK-version-sensitive. MCP Rigor records intermediate task events but does not claim to validate persistence or recovery across separate server processes.

Boundary of coverage

Fully testable at the SDK boundary:

Not claimed: