ActGate
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., "@ActGateApprove the pending shell.exec intent so the upstream server can run it."
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.
ActGate
Local IntentLedger and MCP stdio proxy: propose a tool action, approve or deny in an append-only hash-chained ledger, then let an identical tools/call reach one upstream MCP server.
This is not a SaaS. The ledger path stays on disk. dry-run and approve record decisions only; they do not execute tools. The MCP proxy is what executes, and only after approve.
Install
pip install actgateDev:
pip install -e .[dev]Related MCP server: io.github.AAH20/agent-action-gate
CLI quickstart
actgate init
actgate propose --tool shell.exec --args '{"cmd":"ls"}' --blast-tags fs.read
actgate pending
actgate dry-run <intent_id>
actgate approve <intent_id>
actgate verify
actgate listMCP proxy
Point your MCP client at ActGate instead of the upstream server:
actgate init
actgate mcp --upstream python -m some_mcp_serverUse the same --root (or the same working directory) for init, approve/deny, and mcp, so they share one ledger.
Flow:
Client
tools/listis forwarded to upstream. Onlytools/callis gated; other methods are forwarded.First
tools/callfor a tool+args writes a propose event and returnsACTGATE_PENDING intent_id=...(upstream is not called).Human:
actgate approve <intent_id>(oractgate deny <intent_id>).Identical subsequent
tools/call(same tool and args) runs upstream once and appends anexecuteevent. A third call returns already-executed.Denied intents never hit upstream.
Bare verify checks hash-chain integrity only. Set ACTGATE_SEAL_KEY for
optional HMAC seals, or pass verify --require-seal.
Human loop (HITL)
Typical MCP approval loop:
Client hits
actgate mcp --upstream ...and getsACTGATE_PENDING.Human:
actgate pending(oractgate pending --watch) to see undecided proposes.actgate approve <intent_id>oractgate deny <intent_id>.Client retries the same
tools/call; proxy executes once.
pending is the propose-without-decision queue. --watch polls (default 1s) and
prints newly pending intents as JSON until Ctrl-C (clean exit 0).
Exit codes
Code | Meaning |
0 | ok (propose, approve, verify clean, show/list/pending) |
1 | deny recorded, or verify found a broken chain / bad seal |
2 | setup error (missing ledger, bad path, invalid args) |
Intent shape
{
"tool": "shell.exec",
"args": {"cmd": "ls"},
"args_hash": null,
"blast_tags": ["fs.read"],
"requested_mode": "execute",
"created_at": "2026-09-06T00:00:00+00:00"
}What this is not
Not a hosted approval product
Not a policy DSL
No network calls in the ledger core path (the MCP proxy talks to a local upstream process)
Development
pip install -e .[dev]
pytestThis server cannot be deployed
Maintenance
Related MCP Connectors
Hash-chained HMAC-signed audit log MCP for A2A (agent-to-agent) calls. Every tool-call, agent-ha...
Pre-flight MCP security. Blocks compromised deps + tool drift. HMAC-signed. Dredd judges.
Remote MCP for Copilot CLI switch gate MCP, structured receipts, audit logs, and reviewer-ready evid
- kanonikOAuthai.kanonik
Governance runtime for compliance: verified, human-approved writes to a tamper-evident record.
Related MCP Servers
- AlicenseBqualityCmaintenanceHash-chained HMAC-signed audit log MCP for A2A (agent-to-agent) calls. Every tool-call, agent-handoff, decision gets a tamper-evident signed record.593 PyPIMIT
- AlicenseNot gradedqualityBmaintenanceMCP server that gates agent tool calls by normalizing intent, denying unknown/unattended destructive actions, and requiring HITL prove approval for high-risk operations. It maintains an append-only hash-chained Action Ledger and exposes gate_check and ledger_verify tools without ever executing tools.MIT
- AlicenseBqualityBmaintenancePrivacy-first, tamper-evident receipts for MCP tool calls. It hashes and signs arguments/results so you can verify what ran, when, without storing raw payloads.2MIT
- AlicenseNot gradedqualityBmaintenanceEnables transparent MCP proxying with a hash-chained effect ledger, classifying agent actions by reversibility, enforcing approval gates, and dry-run previews of sessions.MIT