Spec Driven Development
MCP Server that facilitates spec-driven development workflows, not just Vibe Coding.
作者提供的说明(英文原文)
The full Prufa QA agent over MCP: audits, flows, monitors, gremlin chaos, discovery.
这三项永远不会合并成一个分数:意见、测量和人气是不同的东西。
我们还没有为它写通俗的介绍。下面是我们从注册中心读取到的事实。
选择你使用的 AI 应用,然后复制设置。
PRUFA_API_TOKEN标为机密的值是你账户的钥匙。千万不要分享给别人,也不要粘贴到聊天里。
你需要
你用的是哪个应用?
在上方选择你的应用。我们会记住它,下次按钮会显示“安装到 …”。
打开 Claude Desktop → Settings → Developer → Edit Config,把下面的内容粘贴到 claude_desktop_config.json
{
"mcpServers": {
"prufa": {
"command": "uvx",
"args": [
"prufa-mcp"
],
"env": {
"PRUFA_API_TOKEN": "your-value"
}
}
}
}在终端中运行这条命令
claude mcp add prufa --env PRUFA_API_TOKEN=your-value -- uvx prufa-mcp运行前请先填写空着的值。
粘贴到项目中的 .cursor/mcp.json,或 ~/.cursor/mcp.json
{
"mcpServers": {
"prufa": {
"command": "uvx",
"args": [
"prufa-mcp"
],
"env": {
"PRUFA_API_TOKEN": "your-value"
}
}
}
}浏览器会先询问是否打开应用,然后应用会显示设置并请你确认。密钥的值会留空,由你自己填写。
粘贴到项目中的 .vscode/mcp.json
{
"servers": {
"prufa": {
"type": "stdio",
"command": "uvx",
"args": [
"prufa-mcp"
],
"env": {
"PRUFA_API_TOKEN": "your-value"
}
}
}
}浏览器会先询问是否打开应用,然后应用会显示设置并请你确认。密钥的值会留空,由你自己填写。
这个服务器在你的电脑上运行,而 ChatGPT 只能连接互联网上的服务器。请选择其他应用。
你的选择通过 Cookie 保存在这台设备上,无需账户。
这些设置是根据作者在注册中心的条目生成的。如果 README 的写法不同,请以 README 为准。
它在你的电脑上运行;安装后,工具列表会显示在你的 AI 应用中。
我们检查的是任何人都能看到的信息;我们没有阅读代码。不适用的检查项不计入总数。 · 检查于 2026年11月9日
注册名称已通过 GitHub 账户 prufa-dev 验证,该账户拥有此仓库
我们还没有从 GitHub 读取这个仓库
我们还没有从 GitHub 读取这个仓库
它在你的电脑上运行,没有互联网端点
在你的电脑上运行,改用本地设置
它在你的电脑上运行;我们只能读取互联网端点的工具列表
与注册中心里这个分类中所有活跃的服务器比较。只有当发布者拥有该仓库时,星标数才计入。
它在 1 项适用的基础检查中通过了 1 项。我们没有阅读代码。在添加密钥或令牌之前,请先看看这个服务器要求哪些权限,并使用只具备所需权限的密钥。
你需要填写:PRUFA_API_TOKEN
它在你的电脑上运行。你的 AI 应用会在需要时启动它,数据不会经过作者的服务器(除非它自己调用在线服务)。
GitHub 仓库最后更新于–,最新版本(0.2.3)于4个月前进入注册中心。
支持 MCP 的应用,例如 Claude Desktop、Claude Code、Cursor 和 VS Code。你的电脑上还需要有 Python (uv)。
同一分类中有:Spec Driven Development, Remote Desktop Commander, Tethered Trust
同一分类中其他作者的服务器,按星标数排序。
如何看卡片:↓ 每周下载量i★ GitHub 星标i三大支柱:评价 · 检查 · 使用情况i更新 = 最新版本发布到注册中心的时间i
MCP Server that facilitates spec-driven development workflows, not just Vibe Coding.
Remote Desktop Commander: use files, terminal and processes on your own computers from any AI app.
Fit, compatibility and recall checks for AI agents before they buy: verdicts, evidence, receipts.
按原文从作者的仓库复制。PopNx MCP 没有审查或背书其内容。HTML、图片和脚本已被移除。链接会离开本站。
Vibe-coded apps ship faster than anyone can review them. In June 2026 we audited 49 fresh Show HN launches — 38 had a critical bug on day one: a broken signup, a silent console error, analytics that never fired, a consent banner that did nothing.
Prufa is the agent that catches those before your users do. Point it at a URL and it audits the things humans skip when they're moving fast — broken flows, JS console errors, missing tracking, consent violations, security headers, mobile tap targets, accessibility — and hands back machine-verified findings, graded A–F. This repo is the open-source MCP server that wires that audit straight into your coding agent.
Ask your agent to audit https://yourapp.com and prufa_run_audit returns one JSON report. Findings are grouped into graded sections, each finding carries a severity, the impact (why it matters), and a fix hint. Real output, trimmed:
{
"url": "https://yourapp.com", "headline": "2 warnings found", "counts": { "critical": 0, "warning": 2, "info": 5 }, "sections": [ { "label": "Works", "grade": "C", "counts": { "warning": 2, "info": 1 } }, { "label": "Fast", "grade": "A" }, { "label": "Found", "grade": "A" }, { "label": "Compliant", "grade": "A" } ], "check_results": [ { "check_id": "ux", "findings": [{ "severity": "warning", "title": "2 javascript console error(s) during page load", "impact": "Errors at load time often mean broken features visitors never report.", "evidence": { "count": 2, "sample": [ "Access to XMLHttpRequest at 'https://api.fontshare.com/...' blocked by CORS policy", "Failed to load resource: net::ERR_FAILED" ]} }] }, { "check_id": "mobile", "findings": [{ "severity": "warning", "title": "13 tap target(s) smaller than 24px", "impact": "Fingers are not cursors — undersized buttons mean mis-taps on exactly the elements you want pressed.", "fix_hint": "Give interactive elements at least 24x24px of hit area (WCAG 2.5.8)." }] }, { "check_id": "security", "findings": [{ "severity": "info", "title": "no Content-Security-Policy header", "impact": "Without a CSP, one injected script owns the page — and every third-party tag you load is trusted completely.", "fix_hint": "Start with a report-only CSP and tighten from real violation reports." }] } ], "report_url": "/r/G82RpzTi_zn-o71_XoMLCprP7uvCQP87" }
report_url is a shareable HTML version of the same report. The full payload also includes tracking, consent, seo/aeo, a11y, forms, and detected user flows — see the OSS surface below.
The package is on PyPI. Install it globally with pipx (recommended — isolated venv, exposes the prufa-mcp binary on your PATH) or into a project venv with pip:
# Recommended — global install, isolated venv
pipx install prufa-mcp
pip install prufa-mcp
which prufa-mcp
You also need a free Prufa API key. The first audit is free, no card required.
The MCP server runs as a stdio subprocess, spawned by your agent on first use. The cleanest way to register it is claude mcp add (Claude Code's built-in command — it writes the config to ~/.claude.json correctly, which the ~/.claude/mcp.json path does NOT).
# Get the absolute path of the binary (use whatever `which prufa-mcp` returned)
PRUFA_BIN=$(which prufa-mcp)
read -s -p "Prufa API token: " PRUFA_TOKEN && echo claude mcp add \ --scope user \ --env "PRUFA_API_TOKEN=$PRUFA_TOKEN" \ prufa \ -- "$PRUFA_BIN"
Restart Claude Code (config is read at startup), then verify:
/mcp
You should see prufa listed as Connected, with prufa_run_audit and prufa_get_report as available tools.
.mcp.json)In your project root or in ~/.config/Claude/ etc.:
{
"mcpServers": { "prufa": { "command": "/Users/you/.local/bin/prufa-mcp", "env": { "PRUFA_API_TOKEN": "your-prufa-api-key" } } } }
Restart the host app. The command path must be the absolute binary path (not ~, not $()) — those don't expand in MCP config.
Prefer config files to env vars? Drop your token in
~/.config/prufa/mcp.jsoninstead — see ADVANCED.md.
In your agent:
> audit https://my-vibe-coded-app.com and show me the criticals
run prufa on my staging deploy
fetch the report for the audit I just ran
prufa_run_audit with wait=true (the default) blocks until the audit completes and returns the JSON report directly — typically 25–60s for a public page. If you set wait=false, the call returns immediately with the queued state plus a share_token you can poll with prufa_get_report.
prufa-mcp exposes the whole product over MCP (44 tools). Point your agent at Prufa and it can audit pages, drive multi-step flows, watch for regressions, run chaos tests, run full-auto discovery, and manage the workspace + billing — no dashboard round-trip. Free/anonymous tools need no card; Pro tools return the API's 402 with a checkout link when you're not on a plan (the tool is visible, the paywall is server-side).
| Tool | What it does |
|---|---|
prufa_run_audit(url, wait=true) | One-shot public-page audit; blocks and returns findings JSON. |
prufa_get_report(run_id?, share_token?) | Fetch a report by UUID or /r/ slug. |
prufa_get_run(run_id) | Poll a run's status. |
prufa_list_runs(limit) | Recent runs in the workspace. |
prufa_get_finding(run_id, finding_key?) | Persisted findings, machine-readable. |
prufa_list_alerts() | Alert ledger (newest first, incl. suppressions). |
| Tool | What it does |
|---|---|
prufa_setup_workspace(owner_email, name?) | Create a free, no-card agent_temp workspace (7-day trial) and return an API token once. If a token is already set, returns the real workspace + trial state. |
prufa_get_workspace() | Current workspace + inlined usage + a trial block. |
prufa_get_usage() | Usage object + trial/upsell blocks — call before metered actions. |
prufa_workspace_settings(...) | Usage webhook, auto-recharge, email/Slack switches. |
prufa_set_notifications(cells) | The 9-event × {email, slack} routing matrix. |
| Tool | What it does |
|---|---|
prufa_upgrade_plan(tier) | Stripe checkout URL for a paid plan (starter/pro/team). |
prufa_buy_credits(credits) | Stripe checkout URL for a one-time credit pack. |
prufa_billing_portal() | Stripe customer portal URL (card, invoices, cancel). |
| Tool | What it does |
|---|---|
prufa_create_flow(url, test_case, name?) | Compile a plain-text test case to a draft spec. |
prufa_confirm_flow(flow_id, spec?) | Approve a draft — only confirmed flows run. |
prufa_run_flow(flow_id, credentials?) | Execute a confirmed flow. |
prufa_set_flow_credentials(flow_id, credentials) | Store {{VAR}} values (write-only). |
prufa_edit_flow(flow_id, spec) | Edit the spec (returns it to draft). |
prufa_get_flow · prufa_list_flows · prufa_delete_flow | Read · list · remove. |
| Tool | What it does |
|---|---|
prufa_start_monitor(url, cadence?, flow_id?) | 1-click monitor; returns a deploy-hook secret once. |
prufa_trigger_monitor(monitor_id) | Run now (rate-capped). |
prufa_pause_monitor · prufa_resume_monitor · prufa_get_monitor · prufa_list_monitors · prufa_delete_monitor | Lifecycle. |
prufa_rotate_monitor_webhook(monitor_id) | Rotate the deploy-hook secret. |
prufa_list_monitor_deliveries(monitor_id) | Deploy-hook delivery log + CI snippets. |
| Tool | What it does |
|---|---|
prufa_run_gremlin(url, persona?, direction?, credentials?) | Imitate a difficult user; detectors verify what breaks. Mutations dry-run unless authorized; payments never execute. |
prufa_rerun_gremlin(run_id) | Re-run a past gremlin with the same intent + saved login. |
prufa_authorize_domain(host, allow_mutation?) | Allow real (non-payment) writes on a host you own. |
prufa_list_gremlin_domains() | List mutation authorizations. |
prufa_gremlin_saved_logins() | Reuse a prior login (owning workspace only — sensitive). |
prufa_promote_gremlin_path(share_token, path_index) | Turn a reproduced bug path into a draft flow. |
| Tool | What it does |
|---|---|
prufa_register_discovery_domain(domain) | Register a domain, get the DNS TXT record to publish. |
prufa_verify_discovery_domain(domain_id) | Verify the DNS proof. |
prufa_list_discovery_domains · prufa_revoke_discovery_domain | Manage authorized domains. |
prufa_run_discovery(url) | Crawl a verified site and draft its meaningful flows. |
prufa_get_discovery(discovery_id) | Run status + the flows it surfaced. |
Plus prufa_health_check() (probe the server/API).
prufa_setup_workspace mints a free `agent_temp` workspace: no card, a 7-day trial, and an included credit budget. Monitors, discovery, and full-length gremlin runs work during the trial, then need a paid plan.
The MCP makes this legible to your agent: prufa_get_usage, prufa_setup_workspace, and every metered result carry a trial block (days + credits remaining) and, when you're low on credits or near the trial's end, an upsell block with a message_for_human your agent can relay plus the exact tool to call (prufa_upgrade_plan / prufa_buy_credits). When a Pro tool is called off-plan, the 402 passes through with a checkout_url — no silent failures, no surprise charges.
Three runnable scripts in examples/:
examples/nextjs-app/ — audit a deployed Next.js appexamples/vite-spa/ — audit a Vite SPA (focuses on client-side routing audits)examples/stripe-checkout/ — audit a Stripe-checkout page (payment-flow verification)Each is a copy-pasteable demo:
export PRUFA_API_TOKEN=...
python examples/nextjs-app/audit.py https://your-nextjs-app.com
Fail a PR when Prufa finds a critical regression:
# .github/workflows/prufa-scan.yml
name: Prufa scan on: [pull_request] jobs: audit: runs-on: ubuntu-latest steps:
只显示了开头部分;其余内容请在仓库中阅读