Claude MCP审批服务器
Claude MCP Approval Server Demo
一种模型上下文协议(MCP)服务器,在执行潜在的敏感命令之前通过WhatsApp提供批准提示。采用FastMCP和Twilio构建。
特性
- 🔐 权限提示:拦截工具执行并通过WhatsApp请求批准
- 📱 WhatsApp集成:使用Twilio发送带有快速回复按钮的审批请求
- ⚡ FastMCP:基于FastMCP构建,便于与Claude集成
- 🎯 智能格式化:以可读的方式格式化命令和原因
- ⏱️ 自动到期:出于安全考虑,请求将在5分钟后过期
- 💾 数据库跟踪:SQLite数据库用于跟踪审批请求
安装说明
1.安装依赖项
uv install2.设置Twilio帐户
- 注册Twilio 和https://www.twilio.com
- 尝试WhatsApp消息 首选https://console.twilio.com/us1/develop/sms/try-it-out/whatsapp-learn并按照设置指南进行操作:
- 通过向Twilio号码发送消息加入WhatsApp沙盒 - 测试从您的设备发送/接收消息 - 注意你的 沙箱WhatsApp号码 (例如。, whatsapp:+14155238886)
3.获取Twilio证书
- 获取您的帐户SID 从Twilio控制台仪表板
- 生成身份验证令牌 在https://console.twilio.com/us1/account/keys-credentials/api-keys
- 单击“创建API密钥” - 注意 安全标识符 和 秘密 (这是您的身份验证令牌)
4.配置环境
cp .env.example .env编辑 .env 使用您的凭据:
TWILIO_ACCOUNT_SID=your_account_sid_here
TWILIO_AUTH_TOKEN=your_auth_token_here
TWILIO_WHATSAPP_FROM=whatsapp:+14155238886 # Your sandbox number
APPROVAL_PHONE=+1234567890 # YOUR phone number (without whatsapp: prefix)
SERVER_PORT=8000 # Optional: Server port (defaults to 8000)重要:替换 +1234567890 使用您用于加入WhatsApp沙盒的实际电话号码。这是发送审批请求的地方。
5.创建WhatsApp模板
python setup_template.py这会自动创建Twilio模板并更新您的 .env 具有模板SID的文件。
6.暴露服务器
使用以下命令暴露您的本地服务器 ngrok 或 尾秤:
选项A:ngrok
ngrok http 8000 # Replace 8000 with your SERVER_PORT if different选项B:尾秤
tailscale funnel --bg 8000 # Replace 8000 with your SERVER_PORT if different注意您的公共URL(例如。, https://abc123.ngrok.io 或 https://hostname.tail12345.ts.net)
7. 配置Twilio Webhook
- 回到 试试WhatsApp 页面:https://console.twilio.com/us1/develop/sms/try-it-out/whatsapp-learn
- 点击 沙盒设置
- 集 两者 网钩 URL 到 :
https://your-public-url/twilio-webhook
- 当有消息进来时: https://your-public-url/twilio-webhook - 状态回调URL: https://your-public-url/twilio-webhook
8.启动审批服务器
重要:在运行Claude之前启动服务器!
uv run approval_server.py服务器应显示:
- ✅ Twilio已配置
- 🌐 列出的服务器端点
- Webhook URL 准备就绪
9.在许可提示下运行克劳德
claude --mcp-config mcp-servers.json \
--mcp-debug \
--permission-prompt-tool mcp__approval-server__permissions__approve \
--verbose \
--debug \
--output-format stream-json \
-p "your prompt here"10.从任何地方批准/拒绝! 🎉
当Claude尝试执行命令时,您将收到一条WhatsApp消息,其中包含 ✅ 批准 和 ❌ 拒绝 按钮。点击以从世界任何地方进行响应!
重要注意事项
⚠️ 网络接入:The -p (提示)模式没有网络访问 ⚠️ 交互模式:非交互模式(无 -p)不使用 --permission-prompt-tool
MCP配置
MCP配置位于 mcp-servers.json. 替换 8000 与你的 SERVER_PORT 如果您使用的是其他端口。
运作原理
- 工具拦截当克劳德试图执行一个工具时
permissions__approve函数首先被调用 - WhatsApp通知:批准请求将发送到您的WhatsApp,其中包含格式化的命令详细信息
- 用户响应:您可以使用快速回复按钮批准或拒绝
- 执行根据你的回答,克劳德要么继续,要么停止
消息格式
Bash命令:
🔔 Approval Request
Execute command: `ls -la /etc`
*Reason:* List system configuration files
*Request ID:* abc123
⏱️ Expires in 5 minutes其他工具:
🔔 Approval Request
*Tool:* WebFetch
• url: https://example.com
• prompt: Extract title
*Request ID:* abc123
⏱️ Expires in 5 minutes自定义模板
要修改WhatsApp消息格式或按钮:
- 编辑
template_config.json - 跑
python setup_template.py创建新模板 - 脚本将更新您的
.env具有新SID的文件
安全和功能
- ⏱️ 自动到期:请求在5分钟后过期
- 🔒 电话验证:只接受来自您配置的电话号码的回复
- 📊 审计跟踪:数据库存储用于跟踪的请求历史记录
- 🔐 E2E加密:WhatsApp消息使用端到端加密
- 🌍 全局访问:使用WhatsApp从任何地方批准/拒绝
鸣谢
https://github.com/mmarcen/test_permission-prompt-tool用于提供使用具有权限提示工具的MCP服务器的工作示例。

