使用说明
whatsapp mcp服务器
生产准备就绪 模型上下文协议(MCP)服务器 它将像克劳德这样的人工智能助手连接到 WhatsApp云API (Meta)。发送消息、管理对话、处理媒体、发送模板消息和接收实时webhooks——所有这些都是通过自然语言完成的。
为什么选择MCP服务器?
这是唯一建立在官方Meta WhatsApp Cloud API上的WhatsApp MCP服务器。
大多数面向开发人员的WhatsApp工具都依赖于非官方的浏览器自动化库(whatsapp-web.js)或逆向工程协议(whatsmeow, Baileys).这些做法违反了WhatsApp的服务条款,并带来了账户被禁止的真正风险。这个项目是不同的。
| whatsapp mcp服务器 (这个项目) | 非官方图书馆(whatsapp-web.js, whatsmeow, Baileys) |
|
|---|---|---|
| API类型 | ✅ 官方Meta WhatsApp云API | ❌ 非官方/逆向工程 |
| 账户禁令风险 | ✅ 无--Meta已批准 | ⚠️ 高-违反WhatsApp服务条款 |
| 账户类型 | ✅ WhatsApp商业帐户 | 仅限个人帐户 |
| 正常运行时间可靠性 | ✅ 元SLA支持的基础架构 | ❌ WhatsApp更新时中断 |
| 可扩展性 | ✅ 商业级,多代理就绪 | ❌ 仅限一次会议 |
| 模板消息 | ✅ 全力支持 | ❌ 不可用 |
| 介质处理 | ✅ 本机云API媒体端点 | ⚠️ 需要解决方法 |
| Webhook支持 | ✅ Meta webhook官方活动 | ❌ 民意调查/脆弱的听众 |
| 生产使用 | ✅ 为生产而建 | ❌ 建议仅供个人/爱好使用 |
| 长期可行性 | ✅ 稳定的API版本 | ❌ 取决于逆向工程是否保持最新状态 |
底线: 如果你正在构建个人实验之外的任何东西——客户支持、自动通知、业务工作流——请使用官方的API。此服务器为您提供该功能,打包为插入式MCP服务器。
特性
- 发送所有消息类型 --文本、图像、视频、音频、文档、反应
- 模板消息 --发送和列出已批准的WhatsApp Business模板,并提供完整的组件支持
- 媒体管理 --上传、检索和删除媒体文件
- 对话历史 --通过webhook在内存中存储最近的对话
- 实时网络钩子 --接收传入消息和传递状态更新
- 业务概况 --阅读并更新您的WhatsApp Business个人资料
- 联系人查询 --根据WhatsApp验证电话号码
- 费率限制处理 --自动指数退避重试逻辑
- 类型安全 --带Zod输入验证的全类型TypeScript
- Docker就绪 --包含多级Dockerfile和docker组合
- 无需webhook即可工作 --只发送模式,不需要webhook服务器
建筑
┌─────────────────────────────────────────────────────────────┐
│ AI Assistant (Claude) │
└──────────────────────────┬──────────────────────────────────┘
│ MCP Protocol (stdio)
│
┌──────────────────────────▼──────────────────────────────────┐
│ whatsapp-mcp-server │
│ │
│ ┌─────────────┐ ┌──────────────┐ ┌───────────────────┐ │
│ │ MCP Server │ │ Tools │ │ WhatsApp Client │ │
│ │ (stdio) │◄─┤ messages ├─►│ (Axios + retry) │ │
│ │ │ │ contacts │ └────────┬──────────┘ │
│ └─────────────┘ │ media │ │ │
│ │ templates │ │ HTTPS │
│ ┌─────────────┐ └──────────────┘ │ │
│ │ Webhook │ ▼ │
│ │ Server │ ◄──── Incoming ┌─────────────────────┐ │
│ │ (Express) │ messages │ WhatsApp Cloud API │ │
│ └──────┬──────┘ & statuses │ graph.facebook.com │ │
└─────────│───────────────────────────┼─────────────────────┘ │
│ │ │
│ HTTP POST (Meta webhooks) │ HTTPS (send messages) │
│ │ │
┌────▼──────────────────────────▼──────────────┐
│ WhatsApp Users │
└────────────────────────────────────────────────┘
Webhook flow for incoming messages:
WhatsApp User → Meta Servers → POST /webhook → WhatsAppWebhook
→ in-memory conversation store → EventEmitter → MCP tools
先决条件
- Node.js 20+ — 下载
- 元开发人员帐户 — 创建一个
- WhatsApp商业应用 在Meta App仪表板中配置
- 电话号码ID 和 访问令牌 从您的WhatsApp应用程序设置
- (可选) 用于接收webhooks的公共HTTPS URL(本地开发使用ngrok)
快速开始
选项A——使用npx运行(不需要克隆)
该包裹运送了一个 whatsapp-mcp-server 二进制,所以使用它的最快方法是
让您的MCP客户端通过以下方式启动它 npx 并通过传递凭据 env
(见 下面的客户端配置块):
npx -y @fredshred7/whatsapp-mcp-server
npx 按需下载并运行已发布的包——指向您的MCP客户端
完成它,你就完成了。跳转到 使用Claude Desktop
或 使用Claude代码.
选项B--从源代码克隆和构建
步骤1--克隆并安装:
git clone https://github.com/FredShred7/whatsapp-mcp-server.git
cd whatsapp-mcp-server
npm install
步骤2--配置凭据:
cp .env.example .env
# Edit .env with your WhatsApp credentials
步骤3——构建:
npm run build
步骤4——添加到克劳德桌面或克劳德代码 (见下文各节)
第五步——测试: 问克劳德: “发送WhatsApp消息至+15551234567,向克劳德问好!”
配置
所有配置都是通过环境变量进行的。复制 .env.example 到 .env 并填写数值。
| 变量 | 必填 | 描述 |
|---|---|---|
WHATSAPP_PHONE_NUMBER_ID |
是 | 您的WhatsApp电话号码ID(来自Meta App仪表板>WhatsApp>API设置) |
WHATSAPP_ACCESS_TOKEN |
是 | 您的应用程序的永久访问令牌(在Meta app Dashboard中生成) |
WHATSAPP_WEBHOOK_VERIFY_TOKEN |
Webhook | 随机秘密字符串——必须与您在Meta App Dashboard中输入的内容匹配 |
WHATSAPP_APP_SECRET |
推荐 | Meta 应用密钥 (应用仪表板>设置>基本)。用于验证 X-Hub-Signature-256 在传入的webhooks上签名。强烈推荐在生产中使用。如果未设置,则跳过签名验证(并发出启动警告),因此本地开发仍然可以工作。 |
WHATSAPP_BUSINESS_ACCOUNT_ID |
可选 | WhatsApp商业帐户ID——列出电话号码和模板所需 |
WHATSAPP_API_VERSION |
可选 | WhatsApp Cloud API版本(默认: v21.0) |
WEBHOOK_PORT |
可选 | 传入webhook服务器的端口(默认:关闭)。设置为 3000 以启用 |
WEBHOOK_PATH |
可选 | webhooks的HTTP路径(默认: /webhook) |
LOG_LEVEL |
可选 | 记录详细程度: info 或 debug (默认值: info) |
可用工具
| 工具 | 说明 | 关键参数 |
|---|---|---|
whatsapp_send_text |
发送短信 | to, text, preview_url?, reply_to_message_id? |
whatsapp_send_image |
发送带有可选标题的图像 | to, image_url, caption? |
whatsapp_send_video |
发送带有可选字幕的视频 | to, video_url, caption? |
whatsapp_send_audio |
发送音频消息 | to, audio_url |
whatsapp_send_document |
发送文档/文件 | to, document_url, caption?, filename? |
whatsapp_send_reaction |
使用表情符号回复消息 | to, message_id, emoji |
whatsapp_mark_read |
将邮件标记为已读 | message_id |
whatsapp_list_conversations |
列出最近的对话(需要webhook) | limit? |
whatsapp_get_conversation |
获取联系人消息(需要webhook) | phone_number, limit? |
whatsapp_get_message_status |
获取交付/读取状态(需要webhook) | message_id |
whatsapp_get_contact |
⚠️ 传统/不受支持 --在WhatsApp上验证电话号码(见下面的注释) | phone_number |
whatsapp_get_business_profile |
获取您的WhatsApp Business个人资料 | -- |
whatsapp_update_business_profile |
更新业务简介信息 | about?, address?, description?, email?, websites?, vertical? |
whatsapp_upload_media |
从URL上传媒体,获取媒体ID | media_url, mime_type, filename? |
whatsapp_get_media_url |
获取媒体的临时下载URL | media_id |
whatsapp_delete_media |
删除上传的媒体 | media_id |
whatsapp_send_template |
发送已批准的模板消息 | to, template_name, language_code, components? |
whatsapp_list_templates |
列出可用的消息模板 | limit? |
⚠️
whatsapp_get_contact是遗留的,预计不会在云API上工作。 它依赖于POST /{phone-number-id}/contacts“联系检查”,这是一个 遗产的特征 WhatsApp On-Premises API -不是云API端点 后来被删除。每 Meta的On-Premises API Sunset, 最终的本地客户端版本 于2025年10月23日到期.联系人检查 WhatsApp云API(该服务器使用的API)中从未存在过 API 无等效联系人验证(即使在内部部署中,Meta也有 将其降级为始终返回valid,因此结果不可信。)致 确定一个号码是否可以接收消息, 发送消息并检查 消息状态webhooks/错误代码 (例如。131026“消息 无法交付”)。该工具仅保留用于向后兼容性。
使用Claude Desktop
添加 ~/Library/Application Support/Claude/claude_desktop_config.json (macOS)或 %APPDATA%\Claude\claude_desktop_config.json (Windows)。
推荐--通过以下方式运行已发布的包 npx (无需本地构建):
{
"mcpServers": {
"whatsapp": {
"command": "npx",
"args": ["-y", "@fredshred7/whatsapp-mcp-server"],
"env": {
"WHATSAPP_PHONE_NUMBER_ID": "your_phone_number_id",
"WHATSAPP_ACCESS_TOKEN": "your_access_token",
"WHATSAPP_WEBHOOK_VERIFY_TOKEN": "your_verify_token",
"WHATSAPP_APP_SECRET": "your_app_secret",
"WHATSAPP_BUSINESS_ACCOUNT_ID": "your_business_account_id",
"WEBHOOK_PORT": "3000"
}
}
}
}
或者,运行本地构建 (克隆和 npm run build):
{
"mcpServers": {
"whatsapp": {
"command": "node",
"args": ["/absolute/path/to/whatsapp-mcp-server/dist/index.js"],
"env": {
"WHATSAPP_PHONE_NUMBER_ID": "your_phone_number_id",
"WHATSAPP_ACCESS_TOKEN": "your_access_token",
"WHATSAPP_WEBHOOK_VERIFY_TOKEN": "your_verify_token",
"WHATSAPP_APP_SECRET": "your_app_secret",
"WHATSAPP_BUSINESS_ACCOUNT_ID": "your_business_account_id",
"WEBHOOK_PORT": "3000"
}
}
}
}
保存后重新启动Claude Desktop。您应该在工具面板中看到可用的WhatsApp工具。
使用Claude代码
添加到您的Claude Code MCP设置中(~/.claude/settings.json 或项目级别 .claude/settings.json).通过以下方式使用已发布的软件包 npx:
{
"mcpServers": {
"whatsapp": {
"command": "npx",
"args": ["-y", "@fredshred7/whatsapp-mcp-server"],
"env": {
"WHATSAPP_PHONE_NUMBER_ID": "your_phone_number_id",
"WHATSAPP_ACCESS_TOKEN": "your_access_token",
"WHATSAPP_WEBHOOK_VERIFY_TOKEN": "your_verify_token",
"WHATSAPP_APP_SECRET": "your_app_secret",
"WHATSAPP_BUSINESS_ACCOUNT_ID": "your_business_account_id",
"WEBHOOK_PORT": "3000"
}
}
}
}
或者使用CLI添加它:
claude mcp add whatsapp npx -y @fredshred7/whatsapp-mcp-server
Webhook设置
Webhooks允许您 接收 传入消息和传递状态更新。它们是可选的——MCP服务器在没有它们的情况下仅用于发送消息。
与ngrok合作进行本地开发
# 1. Install ngrok: https://ngrok.com/download
# 2. Start your webhook server
WEBHOOK_PORT=3000 npm run dev
# 3. In another terminal, expose it publicly
ngrok http 3000
# 4. Copy the HTTPS URL (e.g. https://abc123.ngrok.io)
在Meta App仪表板中配置
- 首选 元应用仪表板 >您的应用程序>WhatsApp>配置
- 集 回调URL 致:
https://your-ngrok-url.ngrok.io/webhook - 集 验证令牌 匹配您的
WHATSAPP_WEBHOOK_VERIFY_TOKEN - 点击 验证并保存
- 订阅 消息 webhook字段
生产
对于生产,将此服务器部署在具有有效TLS证书的反向代理(nginx、Caddy等)后面。集 WEBHOOK_PORT 连接到您的内部端口,并通过HTTPS在端口443上公开它。
Docker部署
使用docker compose构建和运行
# Copy and fill in your credentials
cp .env.example .env
# Build and start
docker-compose up -d
# View logs
docker-compose logs -f
# Stop
docker-compose down
手动构建
# Build image
docker build -t whatsapp-mcp-server .
# Run (send-only, no webhook)
docker run --rm -i \
-e WHATSAPP_PHONE_NUMBER_ID=xxx \
-e WHATSAPP_ACCESS_TOKEN=xxx \
whatsapp-mcp-server
# Run with webhook server
docker run --rm -i \
-p 3000:3000 \
--env-file .env \
whatsapp-mcp-server
注: 当将Docker与Claude Desktop/Code一起使用时,MCP传输使用stdio。确保通过 -i (交互式),因此stdin/stdout保持连接。webhook端口与MCP传输是分开的。
发展
# Install dependencies
npm install
# Run with auto-reload
npm run dev
# Type-check only (no build)
npm run typecheck
# Build
npm run build
# Lint
npm run lint
# Run the test suite
npm test
# Re-run tests on change
npm run test:watch
项目结构
src/
├── index.ts # Entry point — loads env, wires up components
├── server.ts # MCP server — registers tools, handles requests
├── whatsapp/
│ ├── client.ts # WhatsApp Cloud API client with retry logic
│ ├── types.ts # TypeScript types and interfaces
│ └── webhook.ts # Express webhook server + in-memory store
└── tools/
├── shared.ts # Shared helpers: formatError + Zod->JSON Schema
├── messages.ts # Send/receive message tools
├── contacts.ts # Contact and business profile tools
├── media.ts # Media upload/download/delete tools
└── templates.ts # Template message tools
test/ # Vitest unit tests (schema, errors, webhook)
贡献
欢迎投稿!请阅读 贡献.md 有关报告错误、建议功能和提交pull请求的指南。
许可证
麻省理工学院 --版权所有(c)2025 FredShred7
