The QA agent for your vibe-coded app. Apache-2.0 MCP server.
Project description
prufa-mcp — the QA agent for your vibe-coded app
"Median 5 hours from vulnerability disclosure to mass automated exploitation." — Patchstack 2026 State of WordPress Security
Vibe-coded apps ship faster than humans can review. Prufa is the agent that audits them — tracking pixels, broken flows, consent violations, console errors — before the 5-hour window opens.
30-second demo
The demo GIF will land in v0.2. Until then, see "What you get" below for the live call shape, and
examples/for runnable scripts.
Quickstart
pip install prufa-mcp
# or
npm install -g prufa-mcp # (npm mirror — not yet published, see Task 1.11)
Then in your .mcp.json (Claude Code, Cursor, Cline, Continue, etc.):
{
"mcpServers": {
"prufa": {
"command": "prufa-mcp",
"env": {
"PRUFA_API_TOKEN": "your-prufa-api-key"
}
}
}
}
Get a free API key at prufa.dev — the first audit is free, no card required.
Then in your agent:
> audit https://my-vibe-coded-app.com
> run prufa on my staging deploy and show me the criticals
> check my landing page for broken tracking pixels
What you get (the OSS surface)
| Tool | What it does |
|---|---|
prufa_run_audit |
One call → runs a public-page audit, returns findings JSON |
prufa_get_report |
Fetches a shareable report for a completed audit |
That's it. The audit primitive is small. The hosted product at prufa.dev is where the value compounds — scheduling, alerting, team workflows, and the human-readable HTML report.
Why open source
Same shape as Stagehand (free) → Browserbase (paid). Open the primitive. The hosted tier earns the right to be paid by being the thing that scales.
Examples
examples/nextjs-app/— audit a deployed Next.js appexamples/vite-spa/— audit a Vite SPAexamples/stripe-checkout/— audit a Stripe-checkout page (focuses on payment-flow verification)
Each example is a copy-pasteable demo. Clone, set PRUFA_API_TOKEN, run.
GitHub Action
Add PR-time audits to any repo:
# .github/workflows/prufa-scan.yml
name: Prufa scan
on: [pull_request]
jobs:
audit:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: actions/setup-python@v5
with:
python-version: "3.11"
- run: pip install prufa-mcp
- name: Run audit
env:
PRUFA_API_TOKEN: ${{ secrets.PRUFA_API_TOKEN }}
run: |
python -c "
import asyncio, json, sys
from prufa_mcp.audit import run_audit
result = asyncio.run(run_audit(url='${{ secrets.STAGING_URL }}', wait=True))
print(json.dumps(result, indent=2))
criticals = [f for f in result.get('findings', []) if f.get('severity') == 'critical']
if criticals:
print(f'::error::Prufa found {len(criticals)} critical finding(s)', file=sys.stderr)
sys.exit(1)
"
See examples/prufa-scan.yml for the full template.
SLO
The hosted audit API targets a 30-second p95 for wait=true on public pages.
The OSS server is a thin client — it does no audit work itself, so its only
SLO is "responds to MCP list_tools and call_tool within 1 second."
License
Apache-2.0. See LICENSE.
Project details
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file prufa_mcp-0.1.0.tar.gz.
File metadata
- Download URL: prufa_mcp-0.1.0.tar.gz
- Upload date:
- Size: 9.6 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
61ab2fae89055e9022d458fe152b62a49a5819b3ef572c075eef37f2e113bee5
|
|
| MD5 |
26748570402f2dae41ee008517583d9e
|
|
| BLAKE2b-256 |
6dc2e7a68318f2fa341f79f022fd0dcf8c2626f0e698d44edc52623af4e90fab
|
Provenance
The following attestation bundles were made for prufa_mcp-0.1.0.tar.gz:
Publisher:
publish.yml on prufa-dev/prufa-mcp
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
prufa_mcp-0.1.0.tar.gz -
Subject digest:
61ab2fae89055e9022d458fe152b62a49a5819b3ef572c075eef37f2e113bee5 - Sigstore transparency entry: 1829122563
- Sigstore integration time:
-
Permalink:
prufa-dev/prufa-mcp@08587d673f4feb0bb84ac721ad128ae50f30f7f9 -
Branch / Tag:
refs/tags/v0.1.0 - Owner: https://github.com/prufa-dev
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@08587d673f4feb0bb84ac721ad128ae50f30f7f9 -
Trigger Event:
push
-
Statement type:
File details
Details for the file prufa_mcp-0.1.0-py3-none-any.whl.
File metadata
- Download URL: prufa_mcp-0.1.0-py3-none-any.whl
- Upload date:
- Size: 10.2 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
d086b8cf6d1fba06f71a8c3059df82412e7d356c3ffcf955e69d403ef7ccacd5
|
|
| MD5 |
639e7b2efeb45c41e4563be27db3e680
|
|
| BLAKE2b-256 |
4283245975342a8e91d28f60f29c45fb7f654dd39dd2174bf1eb126861f4196f
|
Provenance
The following attestation bundles were made for prufa_mcp-0.1.0-py3-none-any.whl:
Publisher:
publish.yml on prufa-dev/prufa-mcp
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
prufa_mcp-0.1.0-py3-none-any.whl -
Subject digest:
d086b8cf6d1fba06f71a8c3059df82412e7d356c3ffcf955e69d403ef7ccacd5 - Sigstore transparency entry: 1829122614
- Sigstore integration time:
-
Permalink:
prufa-dev/prufa-mcp@08587d673f4feb0bb84ac721ad128ae50f30f7f9 -
Branch / Tag:
refs/tags/v0.1.0 - Owner: https://github.com/prufa-dev
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@08587d673f4feb0bb84ac721ad128ae50f30f7f9 -
Trigger Event:
push
-
Statement type: