Prufa Mcp

io.github.prufa-dev由 GitHub 帳號 prufa-dev 發布v0.2.3更新於 Oct 24, 2026

The full Prufa QA agent over MCP: audits, flows, monitors, gremlin chaos, discovery.

已驗證STDIO僅桌面開發者工具安全與監控

概覽

AI 產生的概覽

Prufa 的 QA 代理 MCP 伺服器:稽核網頁應用程式的流程、主控台錯誤、追蹤、合規、安全標頭與無障礙問題,並回傳分級結果。

可以做什麼
  • 對公開頁面執行一次性稽核,回傳含嚴重程度、影響說明與修正建議的分級 JSON 報告
  • 取得、輪詢、列出報告、執行紀錄、發現項目與告警
  • 建立、確認、編輯、執行與刪除多步驟測試流程,並儲存流程憑證
  • 啟動、暫停、恢復、觸發排程監控並輪替部署鉤子密鑰,查看投遞紀錄
  • 在已授權網域上執行混沌測試、授權寫入操作,並把重現的缺陷路徑轉為流程
  • 對通過 DNS 驗證的網域進行爬取以發現並草擬流程,並管理工作區、用量、通知與帳務連結
適用情境
適合快速上線網頁應用程式、想讓編碼代理檢查已部署或預備環境網址是否有嚴重回歸的情境,也適合把重複檢查變成監控或 CI 關卡。需要腳本化使用者流程與混沌測試的團隊同樣適用。
執行需求
以 stdio 本機程序執行,從 PyPI 安裝(pipx 或 pip),需要 Python 環境。稽核需要 Prufa 帳號與 API 金鑰,透過 PRUFA_API_TOKEN 環境變數或設定檔提供。需要能連線至 Prufa API 的網路。
安裝前請注意
需要提供可存取工作區的 API 權杖(PRUFA_API_TOKEN),應避免留在指令歷史或共用設定中。付費工具會回傳 402 與結帳連結,帳務工具回傳 Stripe 連結,方案與額度可能產生費用。流程憑證與混沌測試儲存的登入資訊會存放在伺服器端,混沌測試在你授權的網域上可能執行真實寫入。稽核會把目標網址與頁面資料傳送到 Prufa 服務。

安裝

在 SourceWeft 中

  1. 開啟 儀表板中的 Prufa Mcp,將其新增到工作區。
  2. 為需要使用其工具的對話啟用該服務。

Desktop only,透過 STDIO。 STDIO 服務會啟動本機處理程序,因此需要 SourceWeft 桌面主機。

其他 MCP 客戶端

參照 儲存庫 中的啟動說明。

README

prufa-mcp — the QA agent for your vibe-coded app

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.

30-second demo

[Installing prufa-mcp and wiring it into Claude Code]

What an audit gives you

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:

jsonc
{  "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.

Install

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:

bash
# Recommended — global install, isolated venvpipx install prufa-mcp
# Or, into your project venvpip install prufa-mcp
# Pin a specific version with ==, e.g. pipx install prufa-mcp==0.1.3
# Verify the binary is on PATHwhich prufa-mcp# Should print something like: /Users/you/.local/bin/prufa-mcp

You also need a free Prufa API key. The first audit is free, no card required.

  1. Sign in at prufa.dev (Google OAuth)
  2. Create an API key from the dashboard

Wire into your agent

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).

Claude Code (recommended path)

bash
# Get the absolute path of the binary (use whatever `which prufa-mcp` returned)PRUFA_BIN=$(which prufa-mcp)
# Add the MCP server. The token stays out of your shell history.read -s -p "Prufa API token: " PRUFA_TOKEN && echoclaude 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.

Cursor / Cline / Continue (hand-edit .mcp.json)

In your project root or in ~/.config/Claude/ etc.:

json
{  "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.json instead — see ADVANCED.md.

Use it

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.

What you get — the full agent surface

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).

Audit & reports

ToolWhat 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).

Workspace, usage & conversion

ToolWhat 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.

Billing (returns a URL for the human to open — never takes a card)

ToolWhat 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).

Flows (describe a journey → reviewable spec → run)

ToolWhat 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_flowRead · list · remove.

Monitors (watch a URL or flow on a schedule)

ToolWhat 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_monitorLifecycle.
prufa_rotate_monitor_webhook(monitor_id)Rotate the deploy-hook secret.
prufa_list_monitor_deliveries(monitor_id)Deploy-hook delivery log + CI snippets.

Gremlin (chaos QA)

ToolWhat 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.

Discovery (full-auto — crawl, infer flows, draft them)

ToolWhat 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_domainManage 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).

The free trial, and when to upgrade

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.

Examples

Three runnable scripts in examples/:

  • examples/nextjs-app/ — audit a deployed Next.js app
  • examples/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:

bash
export PRUFA_API_TOKEN=...python examples/nextjs-app/audit.py https://your-nextjs-app.com

GitHub Action

Fail a PR when Prufa finds a critical regression:

yaml
# .github/workflows/prufa-scan.ymlname: Prufa scanon: [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, sys          from prufa_mcp.audit import run_audit          report = asyncio.run(run_audit(url='${{ secrets.STAGING_URL }}', wait=True))          print(report.get('headline', 'audit complete'))          criticals = report.get('counts', {}).get('critical', 0)          if criticals:              print(f'::error::Prufa found {criticals} critical finding(s)', file=sys.stderr)              sys.exit(1)          "

See examples/prufa-scan.yml for the full template.

License

Apache-2.0. See LICENSE. Contributions welcome — see CONTRIBUTING.md.

來源:README.md,提交 3d9e90b

工具

0
SourceWeft 尚未在沙箱中啟動過該軟體包,因此其工具未知。

版本歷史

1
  1. v0.2.3最新Sep 16, 2026

評分

已滿足適用檢查項的 50%

該評分衡量此收錄條目的完整程度,依據註冊中心條目、端點與公開來源計算得出。它不是對伺服器本身的評價,也不表示伺服器安全或目前可用:可連通性是帶日期的檢查結果,評分也不包含安裝量或使用者評價。

  • 近 30 天內可連通25 分

    請保持端點能夠回應 MCP 握手;SourceWeft 每 30 天探測一次。

  • 已宣告認證方式10 分

    請在註冊中心條目中宣告憑證請求標頭,或保持端點能夠回應探測,以便判定其認證方式。

  • 已列出工具15 分

    請讓伺服器在無憑證時回應 tools/list,或發布可在沙箱中無憑證啟動的軟體包。

  • 描述必需15 分
  • 圖示10 分
  • 文件15 分
  • 授權條款10 分