Skip to main content
Pre-release

This release is a pre-release and may not be stable for production use.

verdict

Structured, sandboxed verification feedback for coding agents.

An MCP server that replaces your agent's pytest shell-outs with something built for the agent inner loop: impact-selected tests, run in an isolated environment, returning compact typed verdicts instead of 40,000 tokens of raw runner output — with failure fingerprints that tell the agent whether a failure is its regression or was broken all along.

raw pytest dump:  ~40,000 tokens, unstructured, run un-sandboxed on your machine
verdict:              ~400 tokens, typed JSON, run in a rootless container, with memory

Why

The highest-frequency tool call in agentic coding is verification — and it's the least structured. Agents re-run whole suites when one module changed, burn context parsing ANSI-coded tracebacks, run arbitrary code directly on your machine, and routinely misdiagnose pre-existing breakage as their own regression (then "fix" code that wasn't broken). verdict fixes all four.

Tools

Tool What it does
verify(scope?, base?) Selects tests affected by your working-tree diff (static import graph via grimp), runs them via podman/docker with the worktree mounted read-only, returns typed failures with fingerprints and a preexisting flag
explain_failure(check_id) Full traceback for one failure, on demand — bulk never rides in the summary
history(fingerprint) First seen / last seen / times seen — regression vs. long-standing breakage
run_checks(["ruff","mypy"]) Lint and type checks, normalized into the same verdict schema

Every failure carries a fingerprint: a stable hash of the normalized failure signature (volatile tokens — addresses, tmp paths, ids, durations — collapsed). Same logical failure, same fingerprint, across runs and refactors. Fingerprints are what give verdict memory.

Quickstart

uv tool install verdict-mcp     # or: pip install verdict-mcp

Claude Code.mcp.json in your project root:

{
  "mcpServers": {
    "verdict": {
      "command": "verdict-mcp",
      "env": { "VERDICT_PROJECT": "." }
    }
  }
}

Cursor — same shape in .cursor/mcp.json.

Optional verdict.toml in your repo root:

[project]
packages = ["your_package"]          # for impact selection (auto-guessed if omitted)

[runner]
image = "ghcr.io/you/yourproj-test"  # prebuilt env with your deps
setup_cmd = "pip install -e .[test]" # or install on the fly (runs with network; tests don't)
# prefer = "local"                   # escape hatch if you have no container runtime

[limits]
max_failures = 10

Try it without an agent:

cd examples/demo_project
VERDICT_PROJECT=. verdict-mcp   # then connect any MCP client, or use the MCP inspector

Sandbox posture (v0.1)

Checks run in an ephemeral container (podman preferred, docker fallback): worktree mounted read-only at /src, copied to a writable /work inside the container, --network=none for the check run. Your host environment is never mutated by a test run. If setup_cmd is configured, that step runs with network before the check; prefer a prebuilt image for a tighter posture. No container runtime → explicit prefer = "local" fallback runs checks against a temp copy of your worktree (still never in place). See SECURITY.md for the full threat model and known limitations.

Honest limitations

  • Impact selection uses the static import graph — approximate by design. Dynamic imports, fixture-by-name resolution, and data-driven tests can be missed; verify(scope="all") is always available and verdict says in selection_note whenever it falls back.
  • Python/pytest only today, plus ruff/mypy. The adapter interface is small and documented — vitest and go test -json adapters are the most-wanted contributions (CONTRIBUTING.md).
  • Flake detection and coverage-map-based selection are v0.2 (roadmap).

Roadmap

v0.2: coverage-based impact maps (precise selection), flake detection via fingerprint alternation, devcontainer.json support, result cache keyed on (tree hash, check, image digest). Later: vitest/jest, go test, cargo test adapters; per-repo verdict daemon mode.

License

Apache-2.0

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

verdict_mcp-0.1.0a1.tar.gz (33.7 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

verdict_mcp-0.1.0a1-py3-none-any.whl (27.0 kB view details)

Uploaded Python 3

File details

Details for the file verdict_mcp-0.1.0a1.tar.gz.

File metadata

  • Download URL: verdict_mcp-0.1.0a1.tar.gz
  • Upload date:
  • Size: 33.7 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/7.0.0 CPython/3.13.14

File hashes

Hashes for verdict_mcp-0.1.0a1.tar.gz
Algorithm Hash digest
SHA256 31efdae1b1c873cef22dfed43e63bcf1bd27a05c15ae590ea93bda7b02a7620e
MD5 32f43c780618d32dfe695b253c0cafb9
BLAKE2b-256 6efdf77fd295825f2cd227f53b918136e290ec2b1f567d0455d926c2fda9076b

See more details on using hashes here.

Provenance

The following attestation bundles were made for verdict_mcp-0.1.0a1.tar.gz:

Publisher: release.yml on Dgotlieb/verdict-mcp

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file verdict_mcp-0.1.0a1-py3-none-any.whl.

File metadata

  • Download URL: verdict_mcp-0.1.0a1-py3-none-any.whl
  • Upload date:
  • Size: 27.0 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/7.0.0 CPython/3.13.14

File hashes

Hashes for verdict_mcp-0.1.0a1-py3-none-any.whl
Algorithm Hash digest
SHA256 d2bd941e5cc7adefef2115a99e5e048ee1e9407aee82c8499128a84df20fbdf6
MD5 c0f65de7a1c662f061eda26b3c6ac982
BLAKE2b-256 77fce2967c6d12aa6d41b1013684a4e787ef2ca202f33ced96829c0e4f9e4c25

See more details on using hashes here.

Provenance

The following attestation bundles were made for verdict_mcp-0.1.0a1-py3-none-any.whl:

Publisher: release.yml on Dgotlieb/verdict-mcp

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Release history Release notifications | RSS feed

This release

0.1.0a1 This release

2 files

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page