Scanners produce candidates, and an agent left alone with them writes confident nonsense. Here every hypothesis has to survive a PoC run in a sandbox that answers pass or fail on its own terms, and the ledger keeps the recon, proof and review verdicts in separate lanes so one phase cannot quietly rewrite another. Expect to feed it a real machine — this is a Docker stack of security images, not an npx one-liner.
A security-research server that fronts 55+ containerised tools — SAST, SCA, secrets, IaC, recon, DAST, fuzzing, CodeQL, a headless browser, an out-of-band callback server and a PoC sandbox — behind one MCP interface.
- A workspace step that clones the target and detects its languages before anything scans
- Broad discovery in one pass: static analysis, dependency scanning, secrets, and a reconnaissance chain across subdomain, port, endpoint and parameter discovery
- CodeQL both ways — the built-in queries, and custom queries you write, run against an indexed fact base of the code
- Variant hunting: diff discovery across versions, and coverage-guided fuzzing on the source
- Empirical proof rather than assertion — a sandbox that runs agent-written Python or bash exploit scripts inside the target network and returns a deterministic pass or fail verdict from exit codes or explicit markers
- Dynamic testing against a running target, plus a Chromium-with-Playwright utility path for anything that needs a real browser
- A shared findings ledger with deep-merge upserts, so a later review verdict never overwrites the earlier proof data and the record survives the agent's context being reset
- Report generation restricted to findings an oracle verified
- An optional plugin system: a plugin adds Docker services, scanning rules and report templates, and its tools register themselves once the containers are healthy
Docker Engine 20.10+ with Compose 2.0+, 8GB of RAM at minimum and 20GB of free disk, because the security tool images are large. Runs on Linux, macOS or Windows with WSL2, and Python 3.11+. Not on a package registry: clone the repository, copy the example .env and config.yaml, and bring the compose stack up. Plugins are switched on through PLUGINS and COMPOSE_PROFILES in .env.
One command — docker exec -i mcpwner-server python src/server.py
