mcpField
M
mcp-whatsapp-cloud

mcp-whatsapp-cloud

Local
github.com/codesparCommunication275Updated 4w ago

About mcp-whatsapp-cloud

mcp-whatsapp-cloud is an MCP server for Meta's WhatsApp Cloud API, sending messages, handling media and managing templates through the Graph API. It is aimed at merchants with an approved WhatsApp Business Account who want a direct Meta integration without an intermediary.

Key features

  1. 01Text, media, template, interactive and location messages
  2. 02Media upload, temporary URL retrieval and deletion
  3. 03Message template listing, creation and deletion
  4. 04Business profile and phone number management
  5. 05Bearer token authentication against the Graph API

Use cases

  1. 01Send order confirmations or interactive button messages through an AI assistant
  2. 02Send approved templates outside the 24-hour service window
  3. 03Upload catalog images once and reuse their media IDs

MCP support

The project runs as an MCP server that exposes 22 WhatsApp Cloud API tools to MCP clients, allowing them to send messages and manage media and templates.

Configuration

Local server config is the same for every client. Copy it into your client’s MCP config file.

mcp.json · Universal config
{
"mcpServers": {
"codespar-mcp-whatsapp-cloud": {
"command": "npx",
"args": [
"-y",
"@codespar/mcp-whatsapp-cloud"
],
"env": {
"WHATSAPP_ACCESS_TOKEN": "<WHATSAPP_ACCESS_TOKEN>",
"WHATSAPP_PHONE_NUMBER_ID": "<WHATSAPP_PHONE_NUMBER_ID>",
"WHATSAPP_BUSINESS_ACCOUNT_ID": "<WHATSAPP_BUSINESS_ACCOUNT_ID>",
"WHATSAPP_GRAPH_VERSION": "<WHATSAPP_GRAPH_VERSION>"
}
}
}
}
Run commandnpx -y @codespar/mcp-whatsapp-cloud
Environment variables to set
WHATSAPP_ACCESS_TOKENSecretMeta system-user access token (permanent). Used as Bearer token for Graph API.
WHATSAPP_PHONE_NUMBER_IDWhatsApp Business phone number ID registered with Meta.
WHATSAPP_BUSINESS_ACCOUNT_IDWhatsApp Business Account (WABA) ID. Used for template management.
WHATSAPP_GRAPH_VERSIONGraph API version. Defaults to v21.0. Meta bumps quarterly.

Local servers need a runtime on your machine (e.g. Node.js 18+). Config file locations differ by client; see your client’s docs.

Packages
npm@codespar/mcp-whatsapp-cloud0.2.2

Tools

22

Saved tool list · updated 2w ago

ParameterTypeRequiredDescription
tostringYesRecipient phone number in E.164 without + (e.g. 5511999999999)
bodystringYesMessage text (UTF-8, up to 4096 chars)
preview_urlbooleanNoEnable URL preview for links in body (default false)

Details

From the project README

@codespar/mcp-whatsapp-cloud

MCP server for the WhatsApp Cloud API — Meta's official WhatsApp Business API, self-hosted on Meta infrastructure.

Direct Meta integration. No middleman, no provider markup. For merchants with an approved WhatsApp Business Account (WABA) who want Meta-direct pricing and full control over conversation, pricing category, and template lifecycle.

WhatsApp servers in this catalog

ServerWhat it isWhen to pick it
whatsapp-cloud (this)Direct Meta Cloud APILarge merchants with approved WABA; lower cost at scale, no intermediary fees
z-apiWrapper on top of Meta CloudEasy onboarding, instant QR-pair, extra helpers
evolution-apiOpen-source wrapperSelf-hosted, community-driven
take-blipBrazilian BSP wrapperEnterprise Brazil, CCaaS features
zenviaBrazilian BSP wrapperBrazil omnichannel (SMS + WhatsApp)

Tools (22)

ToolPurpose
send_text_messageSend a plain text message.
send_template_messageSend an approved message template.
send_media_messageSend an image, video, document, or audio.
send_interactive_messageSend an interactive message (reply buttons or list).
send_interactive_cta_urlSend an interactive message with a single CTA URL button.
send_interactive_flowSend a WhatsApp Flow message.
send_location_messageSend a location pin with latitude/longitude and optional name/address.
send_contacts_messageSend one or more contact cards (vCard-like).
send_reaction_messageSend an emoji reaction on a previously received/sent message.
send_typing_indicatorShow a typing indicator on a received message.
mark_message_as_readMark an incoming message as read so the sender sees the blue double-check.
upload_mediaUpload a media file and get back a media_id reusable in send_media_message.
retrieve_media_urlResolve a media_id to a short-lived downloadable URL.
delete_mediaDelete an uploaded media asset by id.
list_templatesList message templates on the WhatsApp Business Account.
create_templateSubmit a new template for Meta review.
delete_templateDelete a message template from the WABA by name.
get_business_profileRead the WhatsApp business profile (about, description, email, websites, vertical, address) for the configu...
update_business_profileUpdate the business profile on the configured phone number.
list_phone_numbersList all phone numbers registered under the WhatsApp Business Account, including display name, quality rati...
request_verification_codeRequest Meta to send a verification code to the configured phone number via SMS or voice.
verify_codeSubmit the verification code received via SMS/voice after request_verification_code.

Install

npm install @codespar/mcp-whatsapp-cloud

Environment

WHATSAPP_ACCESS_TOKEN="EAAG..."           # required (secret) — Meta system-user token
WHATSAPP_PHONE_NUMBER_ID="1234567890"     # required — WABA phone number id
WHATSAPP_BUSINESS_ACCOUNT_ID="9876543210" # required — WABA id (for templates)
WHATSAPP_GRAPH_VERSION="v21.0"            # optional — Meta bumps quarterly

Authentication

Bearer token against the Graph API. Use a permanent system-user token from Meta Business Manager — user access tokens expire and will break production.

Authorization: Bearer <WHATSAPP_ACCESS_TOKEN>

Messaging rules (important)

  • Customer-service window — You can freely send any message type for 24h after the user last messaged you.
  • Business-initiated — Outside that window you must send an approved template. Use send_template_message with a name + language + components.
  • Templates — Create with create_template, wait for Meta approval (minutes to hours), then use.
  • Phone numbers are E.164 without the leading + (e.g. 5511999999999).

Media

Two paths:

  1. Public URL — pass link to send_media_message. Fastest, but Meta fetches on every send.
  2. Uploaded media_id — call upload_media once, reuse id on subsequent sends. Recommended for catalog assets.

Uploaded media expires after ~30 days.

Interactive messages

send_interactive_message expects a fully-formed interactive object. Example button payload:

{
  "type": "button",
  "body": { "text": "Confirma seu pedido?" },
  "action": {
    "buttons": [
      { "type": "reply", "reply": { "id": "confirm", "title": "Confirmar" } },
      { "type": "reply", "reply": { "id": "cancel", "title": "Cancelar" } }
    ]
  }
}

See the Cloud API interactive reference for list payloads.

Run

# stdio (default — for Claude Desktop, Cursor, etc)
npx @codespar/mcp-whatsapp-cloud

# HTTP (for server-to-server)
MCP_HTTP=true MCP_PORT=3000 npx @codespar/mcp-whatsapp-cloud

Enterprise

Need governance, budget limits, and audit trails for agent payments? CodeSpar Enterprise adds policy engine, payment routing, and compliance templates on top of these MCP servers.

License

MIT

Comments

Markdown supported

New to MCP?

From what the protocol is to installing your first server, these answers cover most first questions.

An open protocol that defines how AI applications connect to external tools and data in a uniform way. Clients talk to the model; MCP servers provide tools, resources and prompt templates. They exchange standard messages, so one server can be reused by many clients.