How to add human approval to a Claude agent with MCP in 5 minutes
Step-by-step: connect the redphonr MCP server to Claude Code, Claude Desktop or Cursor, and make your agent ask you on Slack or SMS before risky actions.
This tutorial makes a Claude agent stop and ask you before it does anything risky, and lets you answer from your phone. It takes about five minutes and no code.
What you need
- A redphonr account. It is free to start and does not need a card.
- Claude Code, Claude Desktop, Cursor or another MCP client.
- Five minutes.
Step 1: create an API key
Sign in at redphonr.com, open API keys in the dashboard and create a key. It starts with rp_live_ and is shown once. Keep it in a password manager or environment variable, never in a repository.
Step 2: add the MCP server
Claude Code
One command:
claude mcp add --transport http redphonr https://mcp.redphonr.com/mcp \
--header "Authorization: Bearer $REDPHONR_API_KEY"
Claude Desktop
Add the server to claude_desktop_config.json, as in the redphonr quickstart:
{
"mcpServers": {
"redphonr": {
"url": "https://mcp.redphonr.com/mcp",
"headers": { "Authorization": "Bearer rp_live_YOUR_KEY" }
}
}
}
Restart Claude Desktop. The redphonr tools appear in the tools menu.
Cursor and Windsurf
Add the same JSON block to the editor’s MCP settings file.
Step 3: tell the agent when to ask
Tools only help if the agent knows when to use them. Paste this into your system prompt, CLAUDE.md or project instructions:
You have access to redphonr, a human-in-the-loop approval system.
Before any consequential, costly or irreversible action, stop and ask.
request_approval: before anything hard to reverse (deletes, payments, deploys, access grants, bulk email)
ask_human: when you cannot decide between options yourself
collect_input: when you need data only a person has
verify_output: before sending or publishing something you generated
handoff: when the task needs a person from here on
alert_human: to notify without waiting
Rules:
1. Always set default to "deny". Never proceed if the request times out.
2. Put the full context in the message: what, how many, and why.
3. One request per decision. Do not ask again for something already approved.
Be specific about your own red lines. “Ask before any DELETE or UPDATE without a WHERE id =” works better than “ask before risky database changes”.
Step 4: choose how you get reached
In the dashboard, open Reach me and add channels in the order you want them tried. A good starting ladder:
| Order | Channel | Fires after |
|---|---|---|
| 1 | Slack | immediately |
| 2 | SMS | 5 minutes |
| 3 | Voice call | 15 minutes |
Each new phone number or account is verified once. On a voice call, press 1 to approve, 2 to deny, 3 to hear the details again or 9 to leave a voice note.
Step 5: test it
Ask the agent:
Ask redphonr for approval to run a test.
Within a few seconds you get a card. Approve it. The agent prints the result:
{ "decision": "approved", "responded_via": "slack", "responded_at": "2026-10-03T09:41:12Z" }
Now try a real task that crosses one of your red lines, for example “clean up users who have not logged in for two years”. The agent should pause and describe exactly what it is about to delete before it runs anything.
Building your own agent instead
If you build an agent with an SDK, connect to the same MCP endpoint from your MCP client library, or call the HTTP API directly. With the OpenAI Agents SDK, LangChain, CrewAI, Mastra or AutoGen, register redphonr as a remote MCP server and the tools appear like any other.
For agents that already use a framework-level pause, such as LangGraph’s interrupt() or a needsApproval flag, redphonr is the delivery layer: the framework decides when to stop, redphonr gets the question to a person and brings the answer back. See redphonr vs LangGraph interrupt() for how the two fit together.
Common mistakes
- No default. Without
default: "deny", a timeout can be read as permission. Always set it. - Vague messages. “Proceed with cleanup?” is not answerable from a phone. “Delete 3,200 users inactive since 2023 from prod (backup taken 09:00)?” is.
- Asking about everything. If the agent asks every minute, people approve without reading. Gate the few actions that matter.
Frequently asked questions
Do I need to write code to add human approval to a Claude agent?
No. With MCP you add the redphonr server to your client config and paste a short system prompt. Claude then calls request_approval on its own before risky actions. Code is only needed if you build your own agent with an SDK.
Does this work in Cursor and Windsurf?
Yes. Any client that supports remote MCP servers over HTTP can use redphonr with the same URL and API key.
What if I am away from my laptop?
That is the point of routing approvals through redphonr. The request reaches you on Slack, SMS, WhatsApp or a phone call, and escalates down your list if you do not answer.
What should the timeout default be?
Deny. If nobody answers in time, the agent should not proceed. Set default to deny on every request_approval call.