使用说明
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 -d
Webhook注释
- 将Twilio配置为POST
<your-host>/webhook/sms对于入站消息。 - 将Twilio配置为POST
<your-host>/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在高流量环境中