Whatsapp Business Mcp について
Meta Cloud APIを介してWhatsApp Businessのテンプレート管理とテンプレートメッセージ送信を行うMCPサーバーです。テンプレートの検証から運用までの操作をMCPクライアントに提供します。
主な機能
- 01テンプレートペイロードの検証
- 02テンプレートの作成・一覧・詳細確認・削除
- 03承認ステータスの確認
- 04単一または複数番号への送信
- 05stdio、SSE、Streamable HTTP対応
活用シーン
- 01Metaへの提出前にテンプレートを検証
- 02WhatsApp Businessテンプレートの作成と追跡
- 03承認済みテンプレートの顧客への送信
- 04複数の宛先へのテンプレートメッセージ配信
MCP 対応
WhatsApp Businessのテンプレート管理とメッセージ送信に使う8つのツールをMCPクライアントに公開します。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 に移動し、Add custom connector を選択します
- サーバーの URL(例:
https://your-domain.com/mcp/)を入力します - Claude は認証なしまたはOAuth ベースのサーバーに対応しています。最も簡単な方法は、認証を空欄にすることです。サーバーは手順 1 で設定した環境変数を使用します。
注: Claude.ai はカスタムリクエストヘッダーに対応していません。サーバーには、環境変数を使って Meta の認証情報を事前に設定する必要があります。ホストされた各サーバーが提供できるのは、1 つの 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 クライアントでは、サーバーの環境変数に依存せず、リクエストごとの認証情報を渡すことができます。次の 2 つの方法をサポートしています:
方法 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 アシスタントに話しかけるだけです:
「ヘッダー画像、50% オフについての本文、Shop Now ボタンを含む
summer_saleというマーケティングテンプレートを作成して」
「承認済みのテンプレートをすべて一覧表示して」
「注文番号 ORD-456 の
order_confirmationテンプレートを +919876543210 に送信して」
「送信する前に、このテンプレートを検証して:...」
「テンプレート 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権限を持つシステムユーザーのアクセストークン
依存関係
| パッケージ | 用途 |
|---|---|
mcp | Model Context Protocol SDK |
httpx | Meta API 用の非同期 HTTP クライアント |
pydantic | ペイロードの検証 |
python-dotenv | 環境設定 |
ロードマップ
予定されている機能については、ROADMAP.md を参照してください。
ライセンス
MIT — LICENSE を参照してください。
Jina Connect が開発 — WhatsApp Business CX プラットフォーム。
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。