paa-guard mcp
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@paa-guard mcpCheck if my agent can buy a $79 item from walmart-deals.shop"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
Top 10: https://kenhuangus.github.io/owasp-top-10-for-personal-ai-agents/
paa10-guard
A reference mitigation for the OWASP Top 10 for Personal AI Agents (PAA10). It is a small, dependency-free policy guard that checks each action a personal agent proposes, outside the model, and answers allow, require_approval, or deny. It ships as a Python package, a CLI, an MCP server, a gating MCP proxy, a Claude plugin (skill, hook, MCP), and rule packs for Meta Muse, Grok Bot, OpenAI Dots and Anthropic Claude Duet.
Status: v0.1 reference implementation for the PAA10 draft. Use it to learn from, test against, and adapt. It is not a certified product, and it does not replace a platform's own safeguards.
Why "outside the model"
Every PAA10 entry asks providers to enforce limits at the permission or execution boundary, because a prompt like "confirm before acting" can be lost (the OpenClaw inbox case) or overridden by injected text (the Comet one-time-code case). The guard keeps mandates, approvals, payees, consents and the stop switch in an owner-controlled store that the agent cannot write to, and checks the action itself rather than what the model says about it.
Related MCP server: actionproxy
What it checks
Entry | Main controls |
PAA01 Mandate drift | Mandates bound to purpose, action classes, resources, expiry and delegation depth; children never wider than parents; withdrawal cascades |
PAA02 Account takeover | Blocks one-time codes, reset links, keys and passwords in outbound content; hands recovery and 2FA changes to the owner; blocks credential-store exfiltration; connector pinning |
PAA03 Context exposure | Work/private/family context crossing, sensitive categories and inferences, public sharing |
PAA04 Memory corruption | Provenance on every memory; untrusted facts and instructions quarantined; unconfirmed memory cannot drive actions |
PAA05 Scams | Lookalike and unverified merchants, changed payee details, new payees, phishing login pages, downloads a page demands |
PAA06 Spending | Approvals bound to the exact terms and single-use; per-action, daily and monthly caps; duplicate-charge and model-budget limits; irreversible actions |
PAA07 Representation | Draft vs send, audience expansion, contact-list blasts, per-recipient rate limits, commitments and public posts in the owner's name |
PAA08 Household and bystanders | Consent recorded from the data subject, not the operator; no recording of non-users |
PAA09 Choice manipulation | Undisclosed sponsorship, ranking against the owner's criteria, urgency and guilt language, respected refusals |
PAA10 Control | Owner kill switch for all agents, one agent, or its children, which cancels outstanding approvals; loop breaker; hash-chained audit log; export |
docs/mapping.md maps every provider requirement in the Top 10 to a guard rule and a test.
Quick start
pip install git+https://github.com/kenhuangus/paa10-guard
paa-guard init # writes ~/.paa-guard/policy.json for you to edit
python examples/run_examples.py # one scenario per entry (from a checkout)
echo '{"class":"purchase","payment":{"merchant_domain":"walmart-deals.shop","amount":79,"currency":"USD"}}' | paa-guard check
# exit code: 0 allow, 3 require_approval, 2 denyYou can also run it without installing: python bin/paa-guard.py ... from a checkout. It needs Python 3.9 or later and no other packages.
Owner commands
paa-guard mandate add groceries --purpose "weekly groceries" --classes read,purchase --expires 2026-12-01T00:00:00Z
paa-guard pending # what the agent is waiting on
paa-guard approve apr_1a2b3c # approve one exact action (any change in terms voids it)
paa-guard stop --reason "something is off" # every later check denies; outstanding approvals are cancelled
paa-guard resume
paa-guard payee add "Acme Plumbing" --account acct-111 --verified-via "called the number on my last invoice"
paa-guard consent add partner --category location --evidence "partner turned on sharing"
paa-guard memory list | paa-guard memory confirm KEY | paa-guard memory delete KEY
paa-guard audit verify && paa-guard export my-agent-records.jsonApproving, resuming, mandates, payees, consents and memory confirmation exist only on the CLI and on the owner HTTP endpoints, never on the agent's tools.
Ways to plug it in
Integration | Command or file | Enforcement |
Gating MCP proxy in front of any stdio tool server |
| Enforced: blocked calls are never forwarded |
Hook (Claude Code, Agent SDK, any host that runs a pre-action command) |
| Enforced on every tool call |
Hosted guard for cloud agents (MCP over HTTP plus REST) |
| Enforced for services that call it |
Agent-facing MCP tools |
| Advisory unless paired with the proxy |
Skill |
| Advisory |
Rule packs |
| Enforced by the platform where it supports rules (Dots Custom Rules) |
Platform guides
Meta Muse: hosted guard as a connector, proxy in front of risky connectors, skill text.
Grok Bot: skill, routine approval boundaries, guard connector where MCP is available.
OpenAI Dots: Custom Rules pack, narrow app permissions, guard as a ChatGPT app.
Anthropic Claude Duet and Claude Code: install as a plugin (
/plugin marketplace add kenhuangus/paa10-guard), remote connector for Duet.
Each guide separates what the guard enforces from what is guidance to the agent. The platform descriptions are taken from vendor pages and reviews cited in each guide. Extension points differ by account and change over time, so check what your account offers.
Tool mapping
The proxy and hook map tool calls to PAA actions. Unknown tools are classified from their names (send_email becomes send, checkout becomes purchase), and a tool with an unrecognized name is treated as modify, never as read. For accurate checks, give the proxy a map like examples/tool-map.example.json that says which argument holds the recipients, amount or merchant.
Tests
python -m unittest discover -s tests -vThe suite has 53 tests: one or more scenarios per entry (most taken from the documented cases in the Top 10), plus integration tests for the CLI, the MCP server, the proxy, the hook adapter, and HTTP token separation. CI runs it on Linux, Windows and macOS.
Limits
See docs/mapping.md. In short: the guard enforces only where actions pass through it, its detectors are deliberately simple, and it trusts the fields an adapter supplies.
License
Apache License 2.0.
This server cannot be deployed
Maintenance
Related MCP Connectors
Runtime permission, approval, and audit layer for AI agent tool execution.
Supervised API-write gateway for AI agents with policy, human approval and execution receipts.
Pre-execution governance for AI agents. Deterministic PASS/FAIL/REVIEW verdicts, replayable proof.
Deterministic allow/require_approval/deny verdicts for agent actions, before they happen.
Related MCP Servers
- AlicenseNot gradedqualityBmaintenanceGoverns AI agent tool calls by checking them against Agentic Control Plane policies, returning allow/deny/ask decisions with audit logging and identity attribution for MCP clients like Claude and ChatGPT. Exposes acp_check and acp_status tools for policy enforcement and connection verification.MIT
- AlicenseNot gradedqualityCmaintenanceProvides a human-in-the-loop approval gateway for AI agents, enforcing policies and audit logging for MCP-compatible tool calls.Apache 2.0
- AlicenseNot gradedqualityBmaintenanceProvides permission gates and tamper-evident audit logging for AI agent tool executions, with declarative policies, consent ladders, and hash-chained verification.MIT

ERDL Guardofficial
AlicenseNot gradedqualityAmaintenanceEnforces deterministic policy decisions on AI agent tool calls, supporting allow, deny, correct, escalate, and human review actions with verifiable audit receipts.10 npmMIT