关于 Whatsapp Business Mcp
面向 MCP 客户端的 WhatsApp Business 服务,可通过 Meta Cloud API 管理模板并发送模板消息,涵盖模板校验及完整生命周期操作。
主要功能
- 01校验模板负载
- 02创建、列出、查看和删除模板
- 03检查模板审批状态
- 04向单个或多个号码发送模板消息
- 05支持 stdio、SSE 和 Streamable HTTP
适用场景
- 01提交给 Meta 前校验模板
- 02创建并跟踪 WhatsApp Business 模板
- 03向客户发送已批准的模板
- 04向多个收件人群发模板消息
MCP 相关
向 MCP 客户端提供八种 WhatsApp Business 模板与消息工具,支持 stdio、SSE 和 Streamable HTTP 传输方式。
配置
本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。
uvx jina-whatsapp-mcpMETA_ACCESS_TOKEN密钥Meta API access token with whatsapp_business_messaging and whatsapp_business_management permissionsMETA_WABA_IDWhatsApp Business Account IDMETA_PHONE_NUMBER_IDWhatsApp phone number IDMETA_APP_IDMeta app ID (for media uploads)META_API_VERSIONMeta Graph API version (defaults to v24.0)本地服务需要在你的电脑上安装运行环境(如 Node.js 18+)。各客户端的配置文件位置不同,请参考客户端文档。
工具
本地服务需要在你的电脑上运行后才能读取工具,维护者暂未提供工具列表。
详细介绍
WhatsApp MCP 服务
借助 Meta Cloud API,通过 Claude、ChatGPT、Cursor、VS Code Copilot 或任何兼容 MCP 的客户端管理 WhatsApp Business 模板并发送消息。
功能
| 工具 | 描述 |
|---|---|
validate_template | 在提交给 Meta 之前验证模板负载 |
create_template | 提交模板以供 Meta 审批 |
list_templates | 列出模板,可选筛选条件(状态、类别、名称) |
get_template_detail | 根据 ID 获取模板的完整详情 |
check_template_status | 快速检查模板状态 |
delete_template | 按名称删除模板 |
send_template_message | 向电话号码发送已批准的模板 |
send_bulk_template_messages | 向多个电话号码发送已批准的模板 |
8 个工具涵盖完整的模板生命周期:创建 → 验证 → 审批 → 发送。
快速开始
1. 克隆并安装
git clone https://github.com/nakulben/whatsapp-mcp.git
cd whatsapp-mcp
python -m venv venv
source venv/bin/activate # Windows: venv\Scripts\activate
pip install -r requirements.txt
2. 配置凭据
cp .env.example .env
META_ACCESS_TOKEN=your_access_token
META_WABA_ID=your_whatsapp_business_account_id
META_PHONE_NUMBER_ID=your_phone_number_id
META_APP_ID=your_app_id # Optional, for media uploads
META_API_VERSION=v24.0 # Optional, defaults to v24.0
所有模式(本地 stdio 和托管远程模式)都会使用环境变量。
如何获取这些信息? 前往 Meta for Developers,创建或选择你的应用,然后进入 WhatsApp > API Setup。
3. 连接到 MCP 客户端
该服务支持 3 种传输模式:
| 传输方式 | 命令 | 使用者 |
|---|---|---|
stdio(默认) | python -m whatsapp_mcp | Claude Desktop、Cursor、VS Code、Windsurf |
sse | python -m whatsapp_mcp --transport sse | 旧版远程客户端 |
streamable-http | python -m whatsapp_mcp --transport streamable-http | Claude.ai、ChatGPT、较新的 MCP 客户端 |
对于 HTTP 传输方式,你可以自定义主机/端口:
python -m whatsapp_mcp --transport streamable-http --host 0.0.0.0 --port 8000
Claude Desktop(stdio — 本地)
添加到 claude_desktop_config.json:
{
"mcpServers": {
"whatsapp": {
"command": "/path/to/whatsapp-mcp/venv/bin/python",
"args": ["-m", "whatsapp_mcp"],
"env": {
"META_ACCESS_TOKEN": "your_access_token",
"META_WABA_ID": "your_waba_id",
"META_PHONE_NUMBER_ID": "your_phone_number_id",
"META_APP_ID": "your_app_id"
}
}
}
}
Claude.ai Web(远程 — streamable-http)
Claude.ai 通过自定义连接器连接到远程 MCP 服务。连接由 Anthropic 的云服务器发起,而不是由你的计算机发起。
- 配置好环境变量后,通过 HTTPS 托管该服务:
python -m whatsapp_mcp --transport streamable-http --host 0.0.0.0 --port 8001 - 通过 nginx、Caddy 或隧道(ngrok、Cloudflare Tunnel)为其配置 HTTPS
- 在 Claude.ai 中:前往 Customize > Connectors → 添加自定义连接器
- 输入你的服务 URL(例如
https://your-domain.com/mcp/) - Claude 支持无需身份验证或基于 OAuth 的服务。最简单的设置方式是将身份验证留空——服务将使用你在第 1 步配置的环境变量。
注意: Claude.ai 不支持自定义请求头。必须通过环境变量预先为服务配置 Meta 凭据。每个托管服务对应一个 WhatsApp Business Account。
nginx 配置示例
location /mcp/ {
proxy_pass http://127.0.0.1:8001/;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_read_timeout 86400;
}
ChatGPT(远程 — Responses API)
ChatGPT 通过 Responses API 支持远程 MCP 服务。它同时支持 Streamable HTTP 和 SSE 传输方式。
选项 1 — 使用环境变量预先配置服务(最简单):
from openai import OpenAI
client = OpenAI()
resp = client.responses.create(
model="gpt-4.1",
tools=[{
"type": "mcp",
"server_label": "whatsapp",
"server_url": "https://your-domain.com/mcp/",
"require_approval": "never",
}],
input="List all my approved templates",
)
选项 2 — 通过 Bearer 令牌提供单次请求凭据:
将 Meta 凭据编码为 base64 JSON,并在 authorization 字段中传递。
OpenAI 会将此值作为 Authorization 请求头转发到你的 MCP 服务:
# Create the token
echo -n '{"access_token":"EAA...","phone_number_id":"123","waba_id":"456"}' | base64
# Output: eyJhY2Nlc3NfdG9rZW4iOiJFQUEuLi4iLCJwaG9uZV9udW1iZXJfaWQiOiIxMjMiLCJ3YWJhX2lkIjoiNDU2In0=
resp = client.responses.create(
model="gpt-4.1",
tools=[{
"type": "mcp",
"server_label": "whatsapp",
"server_url": "https://your-domain.com/mcp/",
"authorization": "eyJhY2Nlc3NfdG9rZW4iOiJFQUEuLi4iLCJwaG9uZV9udW1iZXJfaWQiOiIxMjMiLCJ3YWJhX2lkIjoiNDU2In0=",
"require_approval": "never",
}],
input="List all my approved templates",
)
注意: ChatGPT 仅支持远程 MCP 服务(不支持本地 stdio)。你的服务必须可通过 HTTPS 从公网访问。
Cursor(stdio)
在项目的 .cursor/mcp.json 中添加:
{
"mcpServers": {
"whatsapp": {
"command": "/path/to/whatsapp-mcp/venv/bin/python",
"args": ["-m", "whatsapp_mcp"]
}
}
}
VS Code Copilot(stdio)
添加到 .vscode/mcp.json:
{
"servers": {
"whatsapp": {
"type": "stdio",
"command": "/path/to/whatsapp-mcp/venv/bin/python",
"args": ["-m", "whatsapp_mcp"]
}
}
}
按请求提供凭据(直接 HTTP / curl / 脚本)
对于程序化访问或自定义 MCP 客户端,你可以按请求传递凭据,而不必依赖服务端环境变量。支持两种方式:
方法 1 — Bearer 令牌(推荐):
将包含 Meta 凭据的 JSON 对象进行 Base64 编码:
# Create the token
TOKEN=$(echo -n '{"access_token":"EAA...","phone_number_id":"123","waba_id":"456"}' | base64)
# Use it
curl -H "Authorization: Bearer $TOKEN" https://your-server.com/mcp/ ...
必填字段:access_token、phone_number_id、waba_id。可选字段:app_id、api_version。
方法 2 — X-Meta- 标头:*
| 标头 | 必填 | 描述 |
|---|---|---|
X-Meta-Access-Token | 是 | 你的 Meta 访问令牌 |
X-Meta-Phone-Number-Id | 是 | 你的 WhatsApp 电话号码 ID |
X-Meta-Business-Account-Id | 是 | 你的 WhatsApp Business Account ID |
X-Meta-App-Id | 否 | 你的 Meta 应用 ID(用于上传媒体) |
X-Meta-Api-Version | 否 | API 版本(默认为 v24.0) |
如果既没有 Bearer 令牌,也没有 X-Meta-* 标头,服务端将回退到使用环境变量。
使用示例
连接后,直接与 AI 助手对话:
“创建一个名为
summer_sale的营销模板,包含标题图片、关于 5 折优惠的正文,以及一个‘立即选购’按钮”
“列出我所有已批准的模板”
“将
order_confirmation模板发送给 +919876543210,订单号为 ORD-456”
“在提交前验证此模板:……”
“检查模板 ID 123456789 的状态”
支持的模板类型
Meta 的 API 有 2 种模板类别(不包括 Authentication)。每个类别中的模板可以有不同的结构变体,每种变体都有自己的组件布局和验证规则。
营销模板
| 结构变体 | 创建 | 发送 | 关键组件 |
|---|---|---|---|
| 文本 / 图片 / 视频 / 文档 | ✅ | ✅ | 标题(可选)+ 正文 + 页脚 + 按钮 |
| 轮播 | ✅ | ✅ | 卡片,每张卡片包含标题、正文和按钮 |
| 商品目录 | ✅ | ✅ | 正文 + CATALOG 按钮 |
| 限时优惠(LTO) | ✅ | ✅ | 正文 + limited_time_offer 组件 + 复制代码按钮 |
| 优惠码 | ✅ | ✅ | 正文 + copy_code 按钮 |
| 多商品消息(MPM) | ✅ | ✅ | 正文 + 带分区的 product_list 操作 |
| 单商品消息(SPM) | ✅ | ✅ | 正文 + product 操作 |
| 商品卡片轮播 | ✅ | ✅ | 正文 + 带按钮的商品卡片 |
| 通话权限 | ✅ | — | 正文 + call_permission 按钮 |
实用模板
| 结构变体 | 创建 | 发送 | 关键组件 |
|---|---|---|---|
| 文本 / 图片 / 视频 / 文档 | ✅ | ✅ | 标题(可选)+ 正文 + 页脚 + 按钮 |
| 订单详情 | ✅ | ✅ | 正文 + 带支付负载的 order_details 按钮 |
| 订单状态 | ✅ | ✅ | 正文 + 订单状态参数 |
**路由方式:**调用
create_template时,服务端会检查组件以自动检测结构变体(例如,存在cards[]→ 轮播,CATALOG按钮 → 商品目录),并应用相应的验证器。你只需传入category: "MARKETING"或"UTILITY"——变体将根据组件结构确定。
运行测试
pip install pytest pytest-asyncio
python -m pytest tests/ -v
项目结构
whatsapp-mcp/
├── whatsapp_mcp/
│ ├── __init__.py # Package version
│ ├── __main__.py # Entry point (python -m whatsapp_mcp)
│ ├── config.py # Environment config loader
│ ├── meta_api.py # Async Meta Graph API client
│ ├── middleware.py # ASGI middleware for per-request credentials
│ ├── server.py # MCP server with 8 tools
│ ├── models/ # Pydantic data models
│ │ ├── body.py # Body component
│ │ ├── header.py # Header component (text/image/video/document)
│ │ ├── footer.py # Footer component
│ │ ├── buttons.py # Button types (URL, phone, quick reply, etc.)
│ │ ├── buttons_component.py
│ │ ├── enums.py # Template categories, types, formats
│ │ └── order_models.py # Order-related models (checkout templates)
│ └── validators/
│ ├── create/ # 12 template creation validators
│ └── send/ # 11 template send validators
├── tests/
│ ├── test_validators.py # Validator tests
│ ├── test_meta_api.py # API client tests (mocked HTTP)
│ └── test_tools.py # MCP tool registration & helper tests
├── .env.example
├── requirements.txt
├── LICENSE # MIT
└── ROADMAP.md
要求
- Python 3.10+
- Meta WhatsApp Business Account
- 具有
whatsapp_business_messaging和whatsapp_business_management权限的 System User 访问令牌
依赖项
| 软件包 | 用途 |
|---|---|
mcp | Model Context Protocol SDK |
httpx | 用于 Meta API 的异步 HTTP 客户端 |
pydantic | 负载验证 |
python-dotenv | 环境配置 |
路线图
请参阅 ROADMAP.md 了解计划中的功能。
许可证
MIT — 请参阅 LICENSE。
由 Jina Connect 构建——WhatsApp Business CX 平台。
评论
一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。