A fail-closed consent layer for AI agents that gates actions behind human approval via Telegram. Exposes two tools: check_action evaluates proposed operations against your consent rules and returns allow/deny/ask instantly, while request_approval blocks execution for up to 120 seconds waiting for you to tap Approve or Deny in a Telegram notification. Everything defaults to deny unless you explicitly allow it. Requires a ConsentGate API key, and the blocking approval flow needs their Pro plan with a linked Telegram account. Useful when you want Claude to handle high-stakes operations like transferring funds, deleting data, or posting publicly, but only after you've confirmed each action in real time.
CONSENTGATE_API_KEY*secretConsentGate API key (cg_…) from https://consentgate.fyi/dashboard/keys
CONSENTGATE_BASE_URLOverride the API base URL (defaults to https://consentgate.fyi)
A Model Context Protocol server that lets any MCP-capable agent (Claude Desktop, Claude Code, Cursor, custom agents, …) gate its own actions behind a human's consent policy via ConsentGate.
The agent asks before it acts; you stay in control. High-stakes actions can block on an explicit Approve / Deny tap delivered to your Telegram.
| Tool | Blocks? | What it does |
|---|---|---|
check_action | no | Evaluates an action against your consent rules. Returns allow, deny, or ask (no rule matched). Use it before any sensitive/irreversible action. |
request_approval | yes (≤120s) | Sends an Approve/Deny prompt to your Telegram and blocks until you tap or it times out. Returns allow only on an explicit human Approve; everything else (deny, timeout, not-available) is deny. |
Both fail closed: anything other than an explicit allow means do not proceed.
cg_…).request_approval (interactive approvals): the Pro plan and a linked Telegram
account (Dashboard → Telegram → Connect). check_action works on any plan.Environment variables:
| Var | Required | Default | Notes |
|---|---|---|---|
CONSENTGATE_API_KEY | ✅ | — | Your cg_… key. |
CONSENTGATE_BASE_URL | — | https://consentgate.fyi | Override for self-hosted instances. |
Add to claude_desktop_config.json (Settings → Developer → Edit Config):
{
"mcpServers": {
"consentgate": {
"command": "npx",
"args": ["-y", "consentgate-mcp"],
"env": { "CONSENTGATE_API_KEY": "cg_your_key_here" }
}
}
}
claude mcp add consentgate --env CONSENTGATE_API_KEY=cg_your_key_here -- npx -y consentgate-mcp
Run npx -y consentgate-mcp (stdio transport) with CONSENTGATE_API_KEY in the environment.
Until the package is published to npm, point your client at the built file (
node /abs/path/to/mcp/dist/index.js) instead ofnpx consentgate-mcp.
cd mcp
npm install # also builds via the `prepare` script
npm run build # -> dist/index.js
CONSENTGATE_API_KEY=cg_… npm run smoke # lists tools + a live check_action
A good agent policy:
Before performing any action that sends messages, spends money, deletes data, posts publicly, or changes external state, call
check_action. If the result isallow, proceed. Ifdeny, stop. Ifask(or the action is high-stakes), callrequest_approvaland proceed only on an explicitallow.
Example (request_approval):
{
"action": "transfer_funds",
"category": "spending",
"metadata": { "amount": "$500", "to": "Acme Corp" },
"wait_seconds": 90
}
// -> blocks; you tap Approve in Telegram -> { "decision": "allow", "resolved_by": "human" }
MIT
io.github.ericm1018/skillfm-llm-cost-optimizer-openai-anthropic-usage
io.github.mikerawsonnz/llm-orchestration-agent
io.github.mikerawsonnz/authenticated-llm-agent
labforgedev/copilot-memory-mcp
csoai-org/agent-prompt-injection-firewall-mcp
io.github.mikerawsonnz/authenticated-multi-llm-agent