Adding human approval to an MCP agent: three patterns
Updated July 2026 · by the UseFrame team
Autonomous agents are good at doing things and bad at knowing which things they shouldn't do without asking. If your agent can send email, deploy code, spend money, or delete data, you eventually want a hard rule: certain actions pause until a human says yes. Not a system-prompt suggestion — models can talk themselves past those — but a mechanical gate in the tool layer.
There are three common ways to build this today.
1. Client-side permission prompts
If you run agents interactively (Claude Code in a terminal, an IDE extension), the harness itself can prompt before risky tool calls. This is the zero-setup option and it works well — until the agent is not interactive. Scheduled runs, CI jobs, and long autonomous sessions have nobody at the keyboard, and most harnesses then either block forever or auto-approve. Client prompts also don't travel: approve on the machine or not at all.
2. Self-hosted approval server
The DIY pattern: a small MCP server exposing something like request_approval(action, context). The tool posts to Slack or email and blocks (or polls) until someone responds. Open-source examples exist and it's a fun afternoon build. The costs show up later: you host it, you keep the Slack app tokens alive, you build the audit log, you handle timeouts and retries and the case where your phone was in your pocket for four hours. For one agent it's fine; for a fleet it becomes a small product you maintain for an audience of one.
3. Hosted approval gates
Hosted services own the delivery, mobile UX, and audit trail; your agent just calls one tool. The established players are built for teams — gotoHuman is excellent but its paid tiers start at $99/month for 6 users, and HumanLayer meters by operations with team workflows in mind. If you're a company routing approvals to a review team, start there.
The gap is the solo operator: one person, several agents, who wants "tap approve on my phone" for $10-20/month, not a seat-based team product. That's the slice UseFrame covers — request approval over HTTP or MCP, push to your phone, approve/deny, everything logged. The free tier (100 requests/mo) is live; setup takes about five minutes.
Choosing
- Interactive only? Use your harness's built-in prompts. Done.
- Team with a review workflow? gotoHuman or HumanLayer.
- Enjoy hosting things? Self-host an approval MCP server.
- Solo, agents run unattended, phone in pocket? That's us — or the DIY route if you'd rather build it.
Whichever you pick, the principle is the same: put the gate in the tool layer, where the model can't argue with it.