Read-only MCP server over Verdict QA state: verdicts, findings, flaky quarantine, history.
Copy the AI prompt to install this server into Claude Code, Cursor, or another agent β or use 1-click editor setup below.
We haven't yet run this listing's install command through our automated sandbox check. This isn't a red flag β we're steadily working through the catalog.
π‘ Paste the JSON block into your client's configuration file under mcpServers, then restart the application.
Your test suite is green. Verdict found a defect that had lived 4,595 days.
Verdict is a QA agent that does not fix, does not flatter, and does not forget. It measures
before it judges β the harness runs your gates, hashes every line a finding cites, re-runs
the guarding test at the old commit and the new one β and it keeps a memory: every run is a
delta against the last, findings age, regressions rank first, and the tester's own misses
are published beside its hits. The contract it runs under is immutable and hashed into every
verdict; what it learns lives beside the contract, dated and auditable, and never edits it.
The number above is real: FilePerms in a 4kβ
Python library could not revoke a permission
bit since 2014-02-07, and every one of its 625 tests was green the day Verdict filed it β
the run, and the misses, are in the ledger.
Most AI "QA agents" are a paragraph of enthusiasm with a checklist. They audit your repo from scratch every time, re-report the same 20 findings until you stop reading, call flaky tests "failures", call stale tests "failures", and end with "LGTM! π".
Verdict is a Claude Code plugin built the way QA is actually practiced:
NEW / STILL_OPEN / RESOLVED / REGRESSED β regressions ranked
first, always.REAL_DEFECT,
STALE_EXPECTATION (which needs a citation proving the change was intended),
BRITTLE_TEST, ENVIRONMENT, or FLAKY (confirmed by re-runs, quarantined with an
expiry). The classification most likely to excuse a regression carries the highest
evidence bar.pass | pass with risks | blocked | fail β an open Blocker forces fail, blocked is a
legitimate outcome, and a pass always names what was not tested.Edit tool, a hook confines its writes to the
QA root, and a strict-mode Bash guard closes the shell's write channels β a tester that
patches what it judges isn't independent. The guard is a heuristic, not a sandbox, and
the README says so.Who pays for the model? You do, with the Claude subscription you already have: the plugin runs inside your own session, nothing routes through anyone else, and everything below the model β the state, the gate, the MCP server, the eval scorer β is stdlib Python that runs for free. Works on Python, TypeScript, Go, or anything with a test runner; the eval fixtures cover Python and TypeScript.
Read next: Install Β· What installs, and when it runs Β· Quickstart Β· Why another QA agent Β· The tested tester Β· CI gate Β· Accepting a risk Β· FAQ
Any other coding agent β Cursor, Codex, OpenCode and the rest of the agent skills ecosystem β gets the same doctrine as five skills, and the same harness as a pip package:
The skills restate the contract for an agent that cannot run the verdict agent; the
hooks that enforce the read-only guarantee exist only in Claude Code, so there the
guarantee is the agent's own discipline plus the harness's refusals. AGENTS.md and
llms.txt at the repository root are for agents that read before they act.
Python 3.9 or newer, whatever your python3 resolves to β the hooks and the
fact harness are stdlib-only and are invoked by that name, which on a stock Mac is
/usr/bin/python3 (3.9). The optional MCP server is a pip install and needs 3.10+,
which is what requires-python in pyproject.toml refers to. The floor is tested:
a module that would fail to import on 3.9 fails CI instead
(tests/test_interpreter_floor.py) β because the
failure it prevents was silent. The Bash guard once raised on import there while the
write guard beside it kept working, so a strict session looked armed with half its
controls missing.
Installing a plugin means letting its code run in your sessions, so here is exactly
what this one does β measured from hooks/hooks.json, not summarised from memory.
Six hook registrations; each starts a python3 (tens of milliseconds) when its
event fires:
| Event | Fires on | Script | Silent when |
|---|---|---|---|
PreToolUse | Write/Edit/MultiEdit/NotebookEdit | write-scope guard | always, unless VERDICT_STRICT=1 or the caller is the verdict agent itself |
PreToolUse | Bash | bash-scope guard | always, unless VERDICT_STRICT=1 |
PostToolUse | Write/Edit/MultiEdit | state validator | unless the written file is literally named state.json |
Stop / SubagentStop | end of turn | run-contract check | unless a QA run in this session left hand-written state β and it blocks at most once, never loops |
SessionStart | session open | findings banner | unless the repository has QA state |
Every hook fails open: malformed input, missing files, or an exception mean
exit 0 and silence β a broken hook must never brick a session. VERDICT_STRICT=1
is what arms the scope guards, and you set it only for dedicated QA sessions
(headless, CI, the nightly); in ordinary interactive work the guards are no-ops.
Prefer not to install globally? Everything works per-repository: copy
agents/verdict.md into <repo>/.claude/agents/ and the
hooks/hooks.json entries into <repo>/.claude/settings.json,
with ${CLAUDE_PLUGIN_ROOT} replaced by a checkout path. That is exactly how the
eval harness provisions its scratch projects β eval/run_eval.py
is the reference implementation.
Every later run is a delta against the stored state. A repeat run returns something like:
No reviews yet β be the first to share how this listing worked for you.
Showcase your server listing on GitHub or your project documentation. Embed this dynamic SVG badge to highlight official listing status and live engagement.
[](https://allmcps.com/mcp/verdict-qa)<a href="https://allmcps.com/mcp/verdict-qa"><img src="https://allmcps.com/api/badge/verdict-qa?style=directory" alt="Verdict QA on AllMCPs" /></a>