@ahmedshaikh/verify-mcp
v0.1.0
Published
Auto-detect how a project checks itself (typecheck / lint / test / build) and run the relevant checks as an MCP server — structured pass/fail with parsed errors, so an agent stops re-deriving commands and grepping walls of output.
Maintainers
Readme
verify
The "did my change actually work?" tool for agents. It auto-detects how a project checks itself — typecheck / lint / test / build — runs the relevant checks, and returns structured pass/fail with parsed errors, so an agent stops re-deriving commands and grepping a wall of stdout.
verify()
→ {
"ok": false,
"checks": [
{ "name": "typecheck", "passed": false,
"errors": [ { "file": "src/api.ts", "line": 42, "message": "TS2304 Cannot find name 'reqId'" } ] },
{ "name": "test", "passed": true, "duration_ms": 1840 }
]
}Why
Agents change code constantly and then flail at verifying it — re-deriving the
build/test commands for every project and eyeballing raw output. verify makes
"is what I just did good?" a single, structured primitive. It's the missing
keystone of the loop: understand → act → verify → remember.
Tools
verify(only?, root?, timeout_ms?)— run the detected checks; structured results.only: ["typecheck"]to run a subset.detect_checks(root?)— list the available checks + commands, without running.
What it detects
| Stack | Checks |
|-------|--------|
| Node / TS | package.json scripts (typecheck/lint/test/build) + tsc --noEmit from tsconfig |
| Python | pytest, mypy, ruff/flake8 (from pyproject / setup.cfg / configs) |
| Go | go build · go vet · go test |
| Rust | cargo build · cargo test |
| fallback | make targets |
Errors are parsed best-effort into {file, line, message} (tsc precisely; a
generic file:line extractor for eslint/pytest/go/rust), with an output tail
kept for anything unstructured.
Setup
npm install
npm testRegister with an MCP client:
claude mcp add verify -e VERIFY_ROOT=/path/to/project -- node /abs/path/verify/dist/server.jsOr use the CLI: agent-verify (run checks) / agent-verify detect (list them).
Honest limits
- Detection is heuristic — unusual project layouts may need the
only/rootargs, or apackage.jsonscript it can find. - Errors are best-effort parsed — exotic formatters fall back to the output tail.
- Runs the whole detected check (not yet diff-scoped); large suites take as long as they take (with a timeout guard).
