vouch
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@vouchVerify the profile saving flow at http://127.0.0.1:3000 and check whether the state actually persisted."
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
Review the diff with structured Jev judgments
vouch-jev exposes review_change, assess_pr, and check_file. Jev evaluates each changed file for breaking behavior, risk, missing tests, error handling, input validation, side effects and merge readiness. Reports preserve probabilities, warnings, uncertainty and incomplete context. These judgments complement executable browser and mutation evidence.
Use the standalone vouch-jev-guard entry point for code review without Chromium, or all seven tools through the vouch-jev MCP server. Paid review requires explicit provider and persistent-budget configuration. A ten-file synthetic review measured 638 ms in a real-provider check; this is a smoke measurement, not an accuracy claim or latency guarantee.
Setup, verdict semantics and examples →
Related MCP server: AI Web Tester
A success toast is only half the story
Your agent edits a form. The browser says “Saved.” But did the server persist the change?
vouch-jev runs the interaction and checks the outcome through explicit assertions. A separate read of application state can catch a missing write even when the interface reports success. The agent gets the failing assertion, action history, and a replayable workflow to investigate, fix, and verify again.
Browser interaction Independent state check Result
─────────────────── ─────────────────────── ──────
Fill name → Save → “Saved” GET profile → “Original” FAIL
Fix the persistence write
Fill name → Save → “Saved” GET profile → “Ada Lovelace” PASSThis is the regression we reproduced and repaired through the installed MCP runtime. Read the measured evidence →
Challenge the tests behind the change
A green test suite can still miss the bug. vouch-jev now reads your Git diff, identifies changed JavaScript/TypeScript functions and affected tests, then introduces small deliberate faults in disposable copies: an off-by-one boundary, a missing validation guard, a reversed condition.
If the tests still pass, vouch-jev returns the exact surviving patch and a focused regression-test suggestion. Baselines run twice, failing mutants are repeated, and the original checkout stays untouched by the mutation engine. No model API call is required.
npm run verify:change-demoThe demo starts with passing but weak tests, finds surviving mutations, adds explicit boundary/error assertions, and verifies that those tests now detect the same mutations. It demonstrates test sensitivity, not automatic proof of correctness.
Use vouch-jev analyze --project /path/to/repo --base HEAD for read-only analysis. Execution requires a project configuration and --allow-exec. Code-aware verification → · Implementation roadmap →
Where it helps
When you need to… | vouch-jev provides… |
Review a code change with Jev | File-level judgments for risk, missing tests and merge readiness, with probabilities and uncertainty |
Find tests that miss a changed behavior | Diff-aware mutation runs with exact surviving patches |
Check an agent’s local app change | Real Chromium interactions followed by explicit assertions |
Reproduce a misleading success message | A separate same-origin JSON read to check the expected state |
Give an agent enough context to fix a failure | Structured reports, failing observations, action records, and a replay file |
Connect verification to your coding workflow | Seven MCP tools, a CLI, and local plugin bundles for Codex and Claude Code |
Handle a control label that differs from the intent | Optional Jev selection, with an explicitly enabled stronger-model fallback |
Keep routine verification predictable | Models off by default, origin/write restrictions, deadlines, and persistent paid-call limits |
Try it in two minutes
Requires Node.js 22+, npm, Git for code analysis, and Playwright Chromium for browser workflows. The browser demo below needs no API key or model service. Jev code review requires a TypeSafe API key and explicit model budgets; follow the review setup.
git clone https://github.com/hamza-paracha/vouch.git
cd vouch
npm ci
npx playwright install chromium
npm run verify -- --doctor
npm run verify:demoOn Linux, use npx playwright install --with-deps chromium to install browser system dependencies too.
The demo starts two local apps and cleans them up automatically. Expected results:
false-success-toast → failed (success message, missing state change)
persisted-write → passed (success message and expected state)
model calls → 0The demo command exits successfully only when both expected outcomes are observed. For the separate disk-backed example, run npm run verify:example; it checks both the MCP result and the on-disk profile.
The product and package are named vouch-jev; the source repository remains hamza-paracha/vouch. After npm link, use vouch-jev or vouch-jev-guard. Existing vouch and vouch-guard commands, vouch.config.json, and environment variables remain supported.
Use it from your coding agent
Register the stdio server using the absolute path to your checkout:
# Codex
codex mcp add vouch-jev -- node /absolute/path/to/vouch/bin/vouch.mjs --stdio
# Claude Code — run from your application project
claude mcp add --transport stdio vouch-jev -- node /absolute/path/to/vouch/bin/vouch.mjs --stdioStart a new task/session, then ask:
Use vouch-jev to inspect my disposable local app at http://127.0.0.1:3000. Verify the profile-saving flow, including the persisted display name through the app’s read endpoint. Read the evidence, fix any reproduced failure, and rerun the same assertions. Keep paid models disabled.
Tool | Purpose |
| Jev review of changed files with structured verdicts and uncertainty |
| File-level review plus PR scope, split, security and urgency assessment |
| One changed file, one bounded model request |
| Inspect the configured repository diff, affected tests and mutation candidates |
| Execute configured tests and challenge them with bounded mutations in disposable copies |
| Discover accessible controls without allowing HTTP writes or calling models |
| Run a bounded workflow and return status, assertions, routing, and evidence paths |
For the bundled workflow skill and native plugin manifests, use npm run plugin:build. Client setup and local plugin installation →
Describe the outcome, then verify it
Workflows are small JSON files. This example matches the included profile app; change its URL and assertions to match your own application.
{
"url": "http://127.0.0.1:4178/settings",
"policy": "rules",
"confirmDisposable": true,
"allowedWritePaths": ["/api/profile"],
"steps": [
{ "kind": "fill", "target": { "role": "textbox", "name": "Display name" }, "value": "Ada Lovelace" },
{ "kind": "choose", "intent": "Save profile" },
{ "kind": "assertText", "text": "Profile saved" },
{ "kind": "assertJson", "path": "/api/profile", "field": ["displayName"], "equals": "Ada Lovelace" }
]
}To run this exact example, start node examples/profile-app/server.mjs in another terminal, save the JSON as workflow.json, then run:
npm run verify -- ./workflow.jsonassertJson makes an independent GET using the browser context’s cookies. Its evidence is only as authoritative as that endpoint: a cached or optimistic read does not prove durable storage. The example app reads its persisted file.
How it works
flowchart LR
A[Workflow] --> B[Inspect controls]
B --> C{Exact match?}
C -->|Yes| D[Execute permitted action]
C -->|No · adaptive enabled| E[Jev · optional stronger model]
C -->|No · rules only| H[Abstain + evidence]
E -->|Valid bounded selection| D
E -->|Uncertain or unavailable| H
D --> F[Independent assertions]
F --> G[Report + trace + replay]Models can propose a control; they do not decide whether an assertion passed. Paid routing requires both an adaptive workflow and operator-configured limits. Reservations are persisted before calls, shared across the two model tiers, and retained after timeouts or failures. A configured dollar reservation is an estimate, not a guaranteed provider billing cap. Routing and spending details →
Each browser run saves three local artifacts:
Artifact | What you get |
| Outcome, assertion results, findings, model usage, limits, and source fingerprint |
| Structured actions and bounded accessibility observations |
| Replay input with completed choices frozen and models disabled |
The CLI exits 0 on a pass, 1 on a non-passing run, and 2 on invalid input or startup failure. Replays require the same initial application state. The trace is structured JSON, not a video or Playwright trace ZIP.
Tested, with clear boundaries
This is an alpha for controlled local HTTP(S) applications and trusted JavaScript/TypeScript repositories. It supports literal loopback addresses with an explicit port, exact-origin requests, and explicitly allowed write paths. Use disposable data and a production preview for apps whose development servers require HMR sockets.
Code verification: the controlled demo exposes three surviving mutations, then detects all three after targeted boundary and error assertions are added.
Automated: routing, assertions, network/write restrictions, redirects, cancellation, persistent budgets, redaction, and real MCP transport; plus clean-package installation checks.
Live Jev smoke: three requests covering semantic selection, a false-success regression, and abstention. This establishes those cases, not general accuracy.
Actual repair: reproduced a missing persistence write through the installed runtime, fixed the source, and confirmed the result with an independent disk read.
Clients: Codex plugin installation and Claude Code plugin/MCP loading checked locally.
HTTPS and named cookie/localStorage sessions are supported. Remote targets, cross-origin login flows, WebSocket-dependent flows, popups, and visual assertions remain unsupported. OpenRouter escalation is tested with simulated responses only. A passing workflow covers its explicit assertions and observed browser checks; it does not certify an entire application. Full results and limitations →
Development
npm run typecheck
npm test
npm run verify:change-demo
npm run verify:install
npm run verify:exampleCI runs without provider credentials. See CONTRIBUTING.md, SECURITY.md, and the changelog.
License
MIT licensed. Verification uses Playwright, MCP, and Jev. Codex and Claude Code are supported integrations.
This server cannot be deployed
Maintenance
Related MCP Connectors
Browser-based QA for AI-built software. Test pages with real browsers via agents.
Browser-backed QA with evidence and fix-ready reports for coding agents.
- openhelmOAuthai.openhelm
Autonomous cloud agent tasks: real browser + your tools, structured evidence-backed results.
Run multi-step tasks in a real Chrome browser: persistent environments, live view, human takeover.
Related MCP Servers
- AlicenseAqualityCmaintenanceAI-native browser testing, directly from your coding agent.3MIT
- AlicenseNot gradedqualityBmaintenanceEnables AI coding agents to autonomously interact with and test web applications in a real browser, providing DOM/Accessibility tree extraction, runtime telemetry, screenshot capture, and Markdown test reports.264 npm1MIT

QualityMax QA MCPofficial
AlicenseAqualityAmaintenanceEnables coding agents to independently verify web changes by scanning pages, inspecting UI structure, generating Playwright reproductions, and executing tests with structured QA evidence.466 npm2MIT- AlicenseAqualityBmaintenanceEnables AI coding agents to see, measure, and verify web pages through a real Chrome browser, including screenshots, responsive layout and accessibility audits, pixel diffing against baselines, secure logins, and deployed-fix verification.271MIT