<p align="center"> <img src="assets/README.svg" alt="Meta Cloud API" width="400"> </p>
<h1 align="center">Meta Cloud API MCP Server</h1>
<p align="center"> A Model Context Protocol (MCP) server that lets Claude manage WhatsApp templates, flows, and send messages through the WhatsApp Cloud API. </p>
<p align="center"> <a href="https://www.npmjs.com/package/meta-cloud-api-mcp"><img src="https://img.shields.io/npm/v/meta-cloud-api-mcp.svg" alt="npm version"></a> <a href="https://www.npmjs.com/package/meta-cloud-api"><img src="https://img.shields.io/badge/SDK-meta--cloud--api-blue" alt="SDK"></a> <a href="https://modelcontextprotocol.io"><img src="https://img.shields.io/badge/MCP-compatible-brightgreen" alt="MCP Compatible"></a> <a href="https://github.com/froggy1014/meta-cloud-api-mcp/blob/main/LICENSE"><img src="https://img.shields.io/badge/license-MIT-blue.svg" alt="License"></a> </p>
---
What is this?
This MCP server wraps the meta-cloud-api SDK, giving Claude (and other MCP-compatible clients) direct access to the WhatsApp Business Platform. You can ask Claude to:
- "Create a welcome template in English and Spanish"
- "List all my flows and publish the draft one"
- "Send a template message to +1-555-123-4567"
- "Update my business profile description"
Quick Start
1. Install
npm install -g meta-cloud-api-mcp
2. Get Your Credentials
You need three values from the Meta Developer Portal:
| Variable | Where to find it | |----------|-----------------| | CLOUD_API_ACCESS_TOKEN | App Dashboard > WhatsApp > API Setup | | WA_PHONE_NUMBER_ID | App Dashboard > WhatsApp > API Setup > Phone number ID | | WA_BUSINESS_ACCOUNT_ID | App Dashboard > WhatsApp > API Setup > WhatsApp Business Account ID |
3. Configure Claude Desktop
Add to your claude_desktop_config.json:
{
"mcpServers": {
"whatsapp": {
"command": "npx",
"args": ["-y", "meta-cloud-api-mcp"],
"env": {
"CLOUD_API_ACCESS_TOKEN": "your_access_token",
"WA_PHONE_NUMBER_ID": "your_phone_number_id",
"WA_BUSINESS_ACCOUNT_ID": "your_business_account_id"
}
}
}
}
4. Configure Claude Code
claude mcp add whatsapp -- npx -y meta-cloud-api-mcp
# Then set environment variables in your .claude/settings.json
Available Tools (31)
Templates (5 tools)
| Tool | Description | |------|-------------| | list_templates | List templates with filters (name, status, category, language) | | get_template | Get a single template by ID with full component definition | | create_template | Create a new message template (MARKETING, UTILITY, AUTHENTICATION) | | update_template | Update template components (resubmits for review) | | delete_template | Delete a template by name or specific language version |
Flows (8 tools)
| Tool | Description | |------|-------------| | list_flows | List all flows for your WhatsApp Business Account | | get_flow | Get flow details including status and validation errors | | create_flow | Create a new flow (optionally with inline JSON or clone) | | update_flow_metadata | Update flow name, categories, or endpoint URI | | update_flow_json | Upload or update the flow JSON definition | | delete_flow | Delete a draft flow | | publish_flow | Publish a draft flow (makes it live) | | deprecate_flow | Deprecate a published flow (irreversible) |
Messages (3 tools)
| Tool | Description | |------|-------------| | send_text_message | Send a text message to a phone number | | send_template_message | Send a pre-approved template message | | send_image_message | Send an image (by media ID or public URL) |
Media (4 tools)
| Tool | Description | |------|-------------| | get_media_info | Get media metadata (URL, MIME type, size, hash) | | upload_media | Upload a file to WhatsApp (returns media ID) | | delete_media | Delete media from WhatsApp servers | | download_media | Download media content to a local file |
Business Profile (2 tools)
| Tool | Description | |------|-------------| | get_business_profile | Get profile (about, address, email, websites, etc.) | | update_business_profile | Update profile fields |
WABA (3 tools)
| Tool | Description | |------|-------------| | get_waba_account | Get account info (status, health, verification, limits) | | subscribe_waba_webhook | Subscribe to WABA webhooks with optional callback override | | unsubscribe_waba_webhook | Unsubscribe from WABA webhooks |
Phone Numbers (4 tools)
| Tool | Description | |------|-------------| | get_phone_number | Get phone number info (display number, quality, status) | | list_phone_numbers | List all phone numbers in the WABA | | request_verification_code | Request verification code via SMS or voice | | verify_phone_code | Verify phone number with received code |
Registration (2 tools)
| Tool | Description | |------|-------------| | register_phone | Register a phone number with a 6-digit PIN | | deregister_phone | Deregister a phone number |
Example Conversations
Managing Templates: > "List all my approved marketing templates" > > "Create a template called order_update with a body that says 'Your order has been confirmed. Order number: {{1}}'" > > "Delete the old_promo template"
Managing Flows: > "Show me all my flows and their statuses" > > "Create a new customer support flow called support_v2" > > "Update the flow JSON for flow ID 12345 with this definition: { ... }" > > "Publish flow 12345"
Sending Messages: > "Send 'Hello!' to +15551234567" > > "Send the hello_world template in English to +15551234567"
Development
git clone https://github.com/froggy1014/meta-cloud-api-mcp.git
cd meta-cloud-api-mcp
npm install
npm run build
Testing with MCP Inspector
npx @modelcontextprotocol/inspector node dist/index.js
Set environment variables in the Inspector UI, then browse and test all 31 tools interactively.
Requirements
- Node.js 18 or later
- Meta Developer Account with WhatsApp Business API access
- MCP-compatible client (Claude Desktop, Claude Code, etc.)
Related
- meta-cloud-api — The TypeScript SDK this server wraps
- meta-cloud-api docs — SDK documentation
- Model Context Protocol — MCP specification
- WhatsApp Cloud API — Official Meta documentation
License
MIT - see LICENSE for details.











