MCP Guard · Open source
MCP authorization for your agent’s tool calls.
MCP Guard is an open-source stdio MCP proxy. Check routed tool calls against your policy before they reach the server: allow, block, or hold for approval.
What you are connecting
Your MCP client → MCP Guard → your stdio MCP server.
Start on a test server, review the decision log, then enable the rules you need.
deploy_productionTool call requested
The client routes the call through the proxy.Policy requires approval
A require_approval rule matches this tool.Hold returned
Enforce mode returns a hold error to the client.Call not forwarded
The stdio server does not receive this call.
From setup to a tested decision
Connect one workflow, then verify it.
Choose the server path
Use a stdio MCP server you can launch through the proxy. Update the client configuration so calls use that path.
Define and observe the rules
Match exact tool names to allow, block, or require approval. Observe mode logs each decision while forwarding every call.
Test enforcement
Switch to enforce mode and test allowed, blocked, and held calls. Without the optional approval UI, a held call returns an error and does not reach the server.
# Log each decision but forward every call (observe mode):npx -y @permission-protocol/[email protected] --config pp.config.yaml --mode observe -- node my-mcp-server.js# After reviewing the decisions, enforce the rules:npx -y @permission-protocol/[email protected] --config pp.config.yaml --mode enforce -- node my-mcp-server.jsValidated against @permission-protocol/mcp-guard 0.1.0 on October 14, 2026. Replace the example server command and tool names with your own.
Scope and boundaries
What this controls, and what it doesn’t.
- Only calls routed through the proxy are evaluated. Direct credentials and other tool paths remain outside it.
- Observe mode does not block. Without the optional local approval UI, a require-approval rule returns a hold error. That UI in 0.1.0 has no sign-in, listens on all network interfaces, and accepts requests from any web page, so use it only to evaluate test tools.
- Local JSONL decision records include payload hashes. A hash alone is not a cryptographic signature or independent proof of human authorization.
- Confirm the transport, package version, record fields, and signing requirements for your deployment.
The record behind the decision
Decide what evidence you need.
MCP Guard 0.1.0 writes an unsigned local decision log and does not record who approved a held call. If your reviewers need signed human-approval evidence, discuss your workflow before rollout.
How to choose which AI actions need human approvalYour first workflow
Ready to test your first workflow?
Work through setup, approval, denial, and evidence inspection. Keep track of your checks before expanding the rollout.
Open the test checklist