Verdict Mcp

io.github.DgotliebPublished by GitHub account Dgotliebv0.1.0a4Updated Oct 24, 2026

Sandboxed test runs for coding agents: compact typed verdicts with failure fingerprints and history

VerifiedSTDIODesktop onlyDeveloper ToolsSecurity & Monitoring

Overview

AI-generated overview

A local MCP server that runs sandboxed Python test, lint and type checks for coding agents and returns compact typed verdicts with failure fingerprints and run-

What you can do
Run impact-selected pytest tests in an isolated container and get typed failures with fingerprints and a preexisting flag, or force a full run with scope all. Fetch the full traceback for a single failure on demand. Look up a fingerprint's first seen, last seen and times seen to tell a regression from long-standing breakage. Run ruff and mypy checks normalized into the same verdict schema.
When to use it
Useful when a coding agent verifies changes in a Python/pytest repository and you want short structured results instead of large raw runner output, plus a way to distinguish new regressions from failures that already existed.
Requirements
Runs locally over stdio as the verdict-mcp package (uvx, uv tool install or pip install). Needs Python and a container runtime, podman preferred with docker fallback; without one, an explicit local fallback mode must be configured. VERDICT_PROJECT sets the project path, defaulting to the working directory. An optional verdict.toml configures packages, runner image, setup command and limits.
Before you install
Test runs execute project code; the sandbox mounts the worktree read-only and disables network for checks, but a configured setup_cmd runs with network access before the check. The local fallback runs checks against a temporary copy rather than in a container. Impact selection is approximate and can miss dynamically imported or data-driven tests. Python/pytest only for now.

Installation

In SourceWeft

  1. Open Verdict Mcp in the dashboard and add it to a workspace.
  2. Enable the server for the chats that should use its tools.

Desktop only via STDIO. STDIO servers start a local process, so they need the SourceWeft desktop host.

Other MCP clients

Follow the launch instructions in the repository.

README

verdict

https://github.com/user-attachments/assets/62923912-98aa-4246-8bc8-4adf55ae3ff8

[CI] [PyPI] [Python] [License]

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 machineverdict:              ~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

ToolWhat 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

No install step needed — uvx fetches it on first use. (Or uv tool install verdict-mcp / pip install verdict-mcp for a permanent verdict-mcp command.)

Claude Code — .mcp.json in your project root:

json
{  "mcpServers": {    "verdict": {      "command": "uvx",      "args": ["verdict-mcp"],      "env": { "VERDICT_PROJECT": "." }    }  }}

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

Optional verdict.toml in your repo root:

toml
[project]packages = ["your_package"]          # for impact selection (auto-guessed if omitted)
[runner]image = "ghcr.io/you/yourproj-test"  # prebuilt env with your depssetup_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:

bash
cd examples/demo_projectVERDICT_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.

Troubleshooting: if a verdict says container engine 'podman' could not start the check, run the suggested podman pull <image> by hand — the engine's own error is the answer. One known trap on macOS: a "credsStore": "gcloud" line in ~/.docker/config.json makes podman call the gcloud credential helper for every registry, including docker.io; an expired gcloud login then breaks all pulls. Fix with gcloud auth login or remove that line.

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

Source: README.md at commit aea7c65

Tools

0
SourceWeft has not started this package in its sandbox yet, so its tools are not known.

Version history

1
  1. v0.1.0a4LatestSep 16, 2026

Score

50% of the applicable checks met

How complete this listing is, computed from the registry entry, the endpoint and public sources. Not a rating of the server and not a statement that it is safe or working today: reachability is a dated check, and no installs or reviews go into the score.

  • Reached in the last 30 days25 pts

    Keep the endpoint answering the MCP handshake; SourceWeft probes it every 30 days.

  • Auth declared10 pts

    Declare the credential headers in the registry entry, or keep the endpoint answering the probe so its auth can be classified.

  • Tools listed15 pts

    Answer tools/list without a credential, or ship a package that starts in a sandbox without one.

  • DescriptionRequired15 pts
  • Logo10 pts
  • Documentation15 pts
  • License10 pts