Twilio短信MCP服务器
生产级 模型上下文协议 Twilio短信服务器。\ 通过任何兼容MCP的客户端(VS Code Copilot、Codex CLI、Claude Desktop等)发送、接收、安排、编辑和检查SMS/MMS对话。
______________________________________________________________________
特性
工具(16)
| 工具 | 说明 |
|---|---|
sms_send | 发送一条短信或彩信 |
sms_send_bulk | 以有限的并发性向最多100个收件人发送相同的消息 |
sms_schedule | 安排邮件以供将来传递(需要消息服务) |
sms_cancel_scheduled | 取消已安排的消息 |
sms_list_sent | 使用可选筛选器列出出站消息 |
sms_get_message | 按SID获取一条消息,并丰富传递状态 |
sms_delete_message | 从Twilio删除消息记录 |
sms_redact_message | 新 --为GDPR/隐私合规性修改消息正文 |
sms_list_inbox | 列出入站webhook捕获的消息 |
sms_get_conversation | 将本地收件箱与Twilio历史记录合并为完整线程 |
sms_mark_read | 将收件箱邮件标记为已读 |
sms_list_numbers | 列出帐户上的Twilio电话号码 |
sms_lookup_number | 载波和线路类型智能查找 |
sms_format_number | 新 --验证任何电话字符串并返回E.164+国家格式 |
sms_usage_stats | 新 --每日短信/彩信使用情况和成本分析 |
sms_account_info | 账户余额、状态和元数据 |
资源
| URI | 描述 |
|---|---|
twilio://account | 高级帐户摘要(SID、发件人、版本) |
提示
| 提示 | 描述 |
|---|---|
draft_sms | 给定收件人和主题的人工智能辅助短信起草 |
summarize_conversation | 用数字总结所有交换的消息 |
生产硬化
- 使用指数回退重试 关于瞬态Twilio API错误(429,5xx,网络故障)
- Webhook速率限制 --每个IP节流阀的内存中(120个请求/分钟)
- 结构化日志记录 --stderr上有时间戳、水平、一致的格式
- 输入验证 --Pydantic v2严格模式,E.164,SID模式强制
- Webhook签名验证 --提里奥
RequestValidator在所有入站挂钩上 - 健康和准备终点 —
/healthz,/readyz对于管弦乐队 - Docker多阶段构建 使用非root用户、健康检查、持久卷
py.typed下游类型检查器兼容性标记
需求
- Python 3.11+
- Twilio帐户和Twilio电话号码
- 对于定时消息:Twilio消息服务SID
- 对于入站消息:一个可公开访问的webhook URL
- Docker桌面(可选,用于容器部署)
快速开始
cp env.example .env # fill in your Twilio credentials; for local runs set TWILIO_DB_PATH=inbox.db
pip install -e ".[dev]"
pytest # run the test suite
python -m twilio_sms_mcp.boot # start MCP + webhook server客户端配置
VS代码(GitHub复制/复制聊天)
添加到您的VS代码 settings.json 或 .vscode/mcp.json:
{
"mcp": {
"servers": {
"twilio-sms": {
"command": "python",
"args": ["-m", "twilio_sms_mcp.boot"],
"env": {
"TWILIO_ACCOUNT_SID": "ACxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
"TWILIO_AUTH_TOKEN": "your_auth_token_here",
"TWILIO_FROM_NUMBER": "+12025551234"
}
}
}
}
}克劳德桌面版
添加 claude_desktop_config.json (macOS: ~/Library/Application Support/Claude/,Windows: %APPDATA%\Claude\):
{
"mcpServers": {
"twilio-sms": {
"command": "python",
"args": ["-m", "twilio_sms_mcp.boot"],
"env": {
"TWILIO_ACCOUNT_SID": "ACxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
"TWILIO_AUTH_TOKEN": "your_auth_token_here",
"TWILIO_FROM_NUMBER": "+12025551234"
}
}
}
}Codex 命令行界面
codex mcp add twilio-sms \
-- docker run --rm -i \
--env-file .env \
-p 8080:8080 \
-v twilio_sms_data:/data \
twilio-sms-mcp验证:
codex mcp get twilio-sms
codex mcp list码头工人
构建并运行:
docker build -t twilio-sms-mcp .
docker run --rm -i \
--env-file .env \
-p 8080:8080 \
-v twilio_sms_data:/data \
twilio-sms-mcp或者使用Docker Compose:
docker compose up -dWebhook注释
- 将Twilio配置为POST
/webhook/sms对于入站消息。 - 将Twilio配置为POST
/webhook/status用于交付回访。 - 集
TWILIO_PUBLIC_WEBHOOK_BASE_URL当在反向代理或ngrok后面时。 - 保持
TWILIO_VALIDATE_WEBHOOK_SIGNATURES=true在生产中。
环境变量
| 变量 | 必填 | 默认 | 描述 |
|---|---|---|---|
TWILIO_ACCOUNT_SID | 是 | -- | Twilio帐户SID(以开头 AC) |
TWILIO_AUTH_TOKEN | 是 | -- | Twilio授权令牌 |
TWILIO_FROM_NUMBER | 是 | -- | E.164格式的默认发件人 |
TWILIO_MESSAGING_SERVICE_SID | 否 | -- | 必填 sms_schedule |
TWILIO_WEBHOOK_AUTH_TOKEN | 否 | -- | 覆盖webhook签名验证 |
TWILIO_PUBLIC_WEBHOOK_BASE_URL | 否 | -- | 用于webhook签名验证的公共URL |
TWILIO_VALIDATE_WEBHOOK_SIGNATURES | 没有 | true | 仅对本地调试禁用 |
TWILIO_BULK_SEND_CONCURRENCY | 没有 | 10 | 最大并行发送次数 sms_send_bulk |
TWILIO_LOG_LEVEL | 没有 | INFO | 记录冗长 |
TWILIO_DB_PATH | 没有 | inbox.db | SQLite数据库位置 |
WEBHOOK_PORT | 没有 | 8080 | Webhook HTTP服务器端口 |
TWILIO_API_RETRY_ATTEMPTS | 没有 | 3 | 暂时API错误的重试计数 |
TWILIO_API_RETRY_DELAY | 没有 | 1.0 | 重试之间的基本延迟(秒) |
MCP_TRANSPORT | 没有 | stdio | MCP传输: stdio, sse,或 http |
MCP_HOST | 没有 | 0.0.0.0 | SSE/HTTP传输的绑定地址 |
MCP_PORT | 没有 | 8000 | SSE/HTTP传输端口 |
测试
pip install -e ".[dev]"
pytest -v生产清单
- \[\]使用HTTPS进行webhook传递
- \[\]设置
TWILIO_VALIDATE_WEBHOOK_SIGNATURES=true - \[\]对发件人池和计划邮件使用消息服务SID
- \[\]坚持
/data卷,使收件箱状态在重新启动后仍然存在 - \[\]永不承诺
.env--它被排除在外.gitignore和.dockerignore - \[\]监视器
/healthz和/readyz来自您的编排器 - \[\]设置
TWILIO_LOG_LEVEL=WARNING在高流量环境中
