mcpbeat Sign in

WhatsApp MCP Server

answering

WhatsApp is answering right now. Last checked 6 min ago. It exposes 47 tools. Last commit 21 Aug 2026.

Connect a personal/Business WhatsApp account via QR pairing (multi-device, like WhatsApp Web). Send

Uptime history 28 days of history · worst day 97%
28 days agonow
100.0%
Uptime 24h
92 of 92 checks
47
Tools
read from the server
1090 ms
Response time
average over 24h
0
Stars
last commit 21 Aug 2026

What changed 65

Every tool that appeared, vanished or quietly changed what it asks for. Recorded since 22 August 2026. No other catalogue keeps this.

13 Sep a tool changed version2 times that day
9 Sep a tool changed version
8 Sep a tool changed version
7 Sep a tool changed version
6 Sep a tool changed version
5 Sep a tool changed version
4 Sep a tool changed version
3 Sep a tool changed version3 times that day
2 Sep a tool changed version6 times that day
1 Sep a tool changed version2 times that day
and 55 more, back to 22 August 2026

WhatsApp does not always answer

Over the last week it answered 99.1% of our checks. We check every 15 minutes, so you hear about the next outage within the hour — not from your users.

Three servers free · no card

Connect this server

Endpoint below is the one we actually reach during checks — not the one copied from a README. Last verified 6 min ago.

run in your terminal
claude mcp add whatsapp-mcp --transport http https://api.mcp.ai/p_whatsapp
~/Library/Application Support/Claude/claude_desktop_config.json
{
  "mcpServers": {
    "whatsapp-mcp": {
      "url": "https://api.mcp.ai/p_whatsapp"
    }
  }
}
~/.codex/config.toml
[mcp_servers.whatsapp-mcp]
url = "https://api.mcp.ai/p_whatsapp"
.cursor/mcp.json
{
  "mcpServers": {
    "whatsapp-mcp": {
      "url": "https://api.mcp.ai/p_whatsapp"
    }
  }
}
.vscode/mcp.json
{
  "mcpServers": {
    "whatsapp-mcp": {
      "url": "https://api.mcp.ai/p_whatsapp"
    }
  }
}

Available tools 47

Read directly from the server with tools/list, grouped by what they act on. If a tool disappears, we record the date.

whatsapp
whatsapp_chat_archive
Change a chat's state. action: archive/unarchive, pin/unpin, mute/unmute. Requires chat_jid. [Flattened action: archive]
whatsapp_chat_metadata
Get metadata for a single chat (subject/name, archived/pinned/muted state, unread count, timestamps). Requires chat_jid.
whatsapp_chat_mute
Change a chat's state. action: archive/unarchive, pin/unpin, mute/unmute. Requires chat_jid. [Flattened action: mute]
whatsapp_chat_pin
Change a chat's state. action: archive/unarchive, pin/unpin, mute/unmute. Requires chat_jid. [Flattened action: pin]
whatsapp_chat_unarchive
Change a chat's state. action: archive/unarchive, pin/unpin, mute/unmute. Requires chat_jid. [Flattened action: unarchive]
whatsapp_chat_unmute
Change a chat's state. action: archive/unarchive, pin/unpin, mute/unmute. Requires chat_jid. [Flattened action: unmute]
whatsapp_chat_unpin
Change a chat's state. action: archive/unarchive, pin/unpin, mute/unmute. Requires chat_jid. [Flattened action: unpin]
whatsapp_chats
List WhatsApp chats (individual + group). Sorted by most recent activity.
whatsapp_config_get
Show this install's editable-after-connect settings per connected number — currently the proxy (proxy_url): whether it's set and a masked preview (the raw value is never returned). Owner/admin or the connection owner.
whatsapp_config_set
Change an editable-after-connect setting on a connected number WITHOUT re-pairing. Today the only field is `proxy_url` — the SOCKS5/HTTPS proxy WhatsApp connects through (recommended to avoid IP bans). Owner/admin or the connection owner. - `account`: which number (id/wa_jid, phone, or label; omit if only one is connected). - `values`: e.g. { "proxy_url": "socks5://user:pass@host:port" }. An empty string CLEARS the field (e.g. { "proxy_url": "" } connects with no proxy); omit the key to keep the current value. The new value applies on the next (re)connection; the live session cache is invalidated so the next tool call uses it.
whatsapp_contacts_get
Read WhatsApp contacts. Actions: - list: search across contacts (query optional — substring on name/phone). Default limit 50. - get: full contact info by JID. [Flattened action: get]
whatsapp_contacts_list
Read WhatsApp contacts. Actions: - list: search across contacts (query optional — substring on name/phone). Default limit 50. - get: full contact info by JID. [Flattened action: list]
whatsapp_group_manage_create
Group lifecycle/admin (the connected account must be a group admin for most actions). Actions: - create: { name, participants[] } - leave: { group_jid } - update: { group_jid, name?, description? } - invite_link: { group_jid, link_action: 'get'|'revoke' } - join: { invite } (invite code or full invite link) - requests: { group_jid, req_action: 'list'|'approve'|'reject', users? } [Flattened action: create]
whatsapp_group_manage_invite_link
Group lifecycle/admin (the connected account must be a group admin for most actions). Actions: - create: { name, participants[] } - leave: { group_jid } - update: { group_jid, name?, description? } - invite_link: { group_jid, link_action: 'get'|'revoke' } - join: { invite } (invite code or full invite link) - requests: { group_jid, req_action: 'list'|'approve'|'reject', users? } [Flattened action: invite_link]
whatsapp_group_manage_join
Group lifecycle/admin (the connected account must be a group admin for most actions). Actions: - create: { name, participants[] } - leave: { group_jid } - update: { group_jid, name?, description? } - invite_link: { group_jid, link_action: 'get'|'revoke' } - join: { invite } (invite code or full invite link) - requests: { group_jid, req_action: 'list'|'approve'|'reject', users? } [Flattened action: join]
whatsapp_group_manage_leave
Group lifecycle/admin (the connected account must be a group admin for most actions). Actions: - create: { name, participants[] } - leave: { group_jid } - update: { group_jid, name?, description? } - invite_link: { group_jid, link_action: 'get'|'revoke' } - join: { invite } (invite code or full invite link) - requests: { group_jid, req_action: 'list'|'approve'|'reject', users? } [Flattened action: leave]
whatsapp_group_manage_requests
Group lifecycle/admin (the connected account must be a group admin for most actions). Actions: - create: { name, participants[] } - leave: { group_jid } - update: { group_jid, name?, description? } - invite_link: { group_jid, link_action: 'get'|'revoke' } - join: { invite } (invite code or full invite link) - requests: { group_jid, req_action: 'list'|'approve'|'reject', users? } [Flattened action: requests]
whatsapp_group_manage_update
Group lifecycle/admin (the connected account must be a group admin for most actions). Actions: - create: { name, participants[] } - leave: { group_jid } - update: { group_jid, name?, description? } - invite_link: { group_jid, link_action: 'get'|'revoke' } - join: { invite } (invite code or full invite link) - requests: { group_jid, req_action: 'list'|'approve'|'reject', users? } [Flattened action: update]
whatsapp_group_members
List the members of a WhatsApp group (live). Returns each participant's JID, phone, and admin/super-admin flag. Requires group_jid (…@g.us, from whatsapp_groups).
whatsapp_group_participants_add
Manage participants of a WhatsApp group (the connected account must be a group admin). action: 'remove' kicks members, 'promote' makes them admin, 'demote' removes admin, 'add' invites. Pass 1–50 phone numbers (+E164) or JIDs in `users`. [Flattened action: add]
whatsapp_group_participants_demote
Manage participants of a WhatsApp group (the connected account must be a group admin). action: 'remove' kicks members, 'promote' makes them admin, 'demote' removes admin, 'add' invites. Pass 1–50 phone numbers (+E164) or JIDs in `users`. [Flattened action: demote]
whatsapp_group_participants_promote
Manage participants of a WhatsApp group (the connected account must be a group admin). action: 'remove' kicks members, 'promote' makes them admin, 'demote' removes admin, 'add' invites. Pass 1–50 phone numbers (+E164) or JIDs in `users`. [Flattened action: promote]
whatsapp_group_participants_remove
Manage participants of a WhatsApp group (the connected account must be a group admin). action: 'remove' kicks members, 'promote' makes them admin, 'demote' removes admin, 'add' invites. Pass 1–50 phone numbers (+E164) or JIDs in `users`. [Flattened action: remove]
whatsapp_groups
List WhatsApp groups the account belongs to — subject, jid, participants count, owner.
whatsapp_history_backfill
Request OLDER messages for a chat from your phone (on-demand history sync), extending what whatsapp_messages can read. Returns { status, messages_added }: - "done"/"partial": it pulled messages_added new messages — read them via whatsapp_messages (paginate with `before`). "partial" means WhatsApp stopped early; wait and retry for more. - "cooldown": you requested this chat <60s ago (retry_after_s tells you when). WhatsApp THROTTLES back-to-back requests — DO NOT retry in a loop; wait, then try once. - "timeout": the phone didn't deliver in time (offline or throttled) — already-synced history is still readable; retry later. BEST-EFFORT (gated by WhatsApp): one call usually pulls a batch (~50–70 msgs); pulling much deeper repeatedly often won't work. Connects live, may take up to ~1 minute. The initial sync already loaded deep history for most chats — check whatsapp_history_coverage first; only backfill when a chat's oldest_ts isn't far enough back.
whatsapp_history_coverage
Show how far back the LOCAL message archive reaches per chat (oldest_ts, newest_ts, message_count, status). Use it to find pagination boundaries for whatsapp_messages and to decide whether to pull more with whatsapp_history_backfill. Optional query (filter by name/JID), kind, limit, or a single chat_jid.
whatsapp_list_accounts
List WhatsApp accounts paired to this install — wa_jid, phone, label, proxy on/off, status.
whatsapp_message_delete
Manage a message you can act on. Actions: - delete: { chat_jid, message_id, for_everyone? (default true) } — delete for everyone (your msg) or just for you - forward: { chat_jid, message_id, to } — forward a stored message to another chat - edit: { chat_jid, message_id, text } — edit one of your recent text messages [Flattened action: delete] Bulk support: accepts message_ids for batched execution.
whatsapp_message_edit
Manage a message you can act on. Actions: - delete: { chat_jid, message_id, for_everyone? (default true) } — delete for everyone (your msg) or just for you - forward: { chat_jid, message_id, to } — forward a stored message to another chat - edit: { chat_jid, message_id, text } — edit one of your recent text messages [Flattened action: edit] Bulk support: accepts message_ids for batched execution.
whatsapp_message_forward
Manage a message you can act on. Actions: - delete: { chat_jid, message_id, for_everyone? (default true) } — delete for everyone (your msg) or just for you - forward: { chat_jid, message_id, to } — forward a stored message to another chat - edit: { chat_jid, message_id, text } — edit one of your recent text messages [Flattened action: forward] Bulk support: accepts message_ids for batched execution.
whatsapp_messages
List messages in a chat from LOCAL history. Requires chat_jid (from whatsapp_chats). Paginate backwards by passing the oldest message's timestamp as `before` (ISO 8601); `after` pages forward; `order` sorts. NOTE: only messages already synced locally are returned — to see how far back the archive goes use whatsapp_history_coverage, and to pull OLDER messages from your phone use whatsapp_history_backfill.
whatsapp_messages_write
Mark messages as read in a chat. Requires chat_jid. Optional message_id (marks up to this message; omit to mark all unread). Bulk support: accepts message_ids for batched execution.
whatsapp_poll_create
Send a poll or vote on one. Actions: - create: { to, name, options[] (2–12), selectable_count? } - vote: { chat_jid, message_id, options[] (the option texts to select) } [Flattened action: create] Bulk support: accepts message_ids for batched execution.
whatsapp_poll_vote
Send a poll or vote on one. Actions: - create: { to, name, options[] (2–12), selectable_count? } - vote: { chat_jid, message_id, options[] (the option texts to select) } [Flattened action: vote] Bulk support: accepts message_ids for batched execution.
whatsapp_react
React to a message with an emoji (or remove your reaction by passing an empty emoji). Requires chat_jid + message_id. Bulk support: accepts message_ids for batched execution.
whatsapp_search
Full-text search across all stored messages (SQLite FTS5). Optional chat_jid to scope. Returns matches with context.
whatsapp_send_media
Send a WhatsApp message (text or media). Actions: - text: { to, text, reply_to? } - media: { to, type ('image'|'video'|'audio'|'document'|'sticker'), media_url | media_base64, caption?, filename?, mimetype? } `to` accepts either a JID ('[email protected]', '<id>@g.us') or a plain phone (digits, country code included). For groups always use the '<id>@g.us' JID — get it from whatsapp_groups. [Flattened action: media]
whatsapp_send_text
Send a WhatsApp message (text or media). Actions: - text: { to, text, reply_to? } - media: { to, type ('image'|'video'|'audio'|'document'|'sticker'), media_url | media_base64, caption?, filename?, mimetype? } `to` accepts either a JID ('[email protected]', '<id>@g.us') or a plain phone (digits, country code included). For groups always use the '<id>@g.us' JID — get it from whatsapp_groups. [Flattened action: text]
whatsapp_sync
Refresh this account's local data from WhatsApp — pulls recent messages and refreshes the groups/contacts lists into the local store. Call it BEFORE reading (chats/groups/messages/contacts/search) when results look stale or empty (e.g. right after connecting, or an account that hasn't synced recently). Connects live, so it may take ~20–60s. Returns { messages_stored }.
whatsapp_webhook_get
Show this WhatsApp install's outbound webhook: the current URL, the subscribed events (empty = all), include_result, and the catalog of subscribable events (available_events — e.g. whatsapp.message, whatsapp.reaction, and the whatsapp.* wildcard). Owner/admin only.
whatsapp_webhook_set
Set (or remove) this WhatsApp install's outbound webhook. Owner/admin only. - To set: pass `url` (https only, not localhost). `events` is the list of subscribed events ("permissions") — e.g. ["whatsapp.message"], or ["whatsapp.*"] for every WhatsApp event, or [] / omit for ALL events. See available_events from whatsapp_webhook_get. `include_result` (default true) controls whether the tool result is included in tool.call payloads. `secret` is optional (reserved). - Subscribing to any whatsapp.* event makes the daemon hold a live connection per number and forward inbound messages to your URL. - To remove the webhook: pass `remove: true` (or an empty url).
authenticate
authenticate
MCP.AI for IDE agents (Cursor, etc.): log in in the browser, copy the access token. Best: add it to this server's config as a header `Authorization: Bearer <token>` for a permanent, non-expiring connection. Or paste it here for a session-only login: call with { token: "<jwt>" } after the user pastes, or with no args to get the link.
connect
connect
Returns connection status and URLs. When all providers are connected, returns authenticated:true and empty pending[]. When credentials are missing, returns connect_url for the toolkit and per-install URLs.
marketplace
marketplace
The official mcp.ai marketplace — the in-platform catalog of every MCP/tool, AND the way to run them. Covers capability requests like "find an MCP that does X", "consulta um CPF", "is there a tool for Y". Core flow: action=search discovers MCPs by intent → describe returns one MCP's full profile (every tool with its id + params, pricing, auth) so you pick the right tool_id → invoke RUNS that tool. KEY: invoke works even when the MCP is NOT installed — it runs the tool pontualmente (one-off), without adding the MCP to the toolkit and without bloating the tool list. If the MCP needs a credential/login, invoke returns a connect link; if it is paid and the wallet is empty, invoke returns a checkout/top-up link (the user opens it, then you retry). Use install only to make an MCP PERMANENT in the active toolkit (its tools then show up natively in future sessions); prefer invoke for a single/occasional use. list_tools lists what is callable right now. subscribe/cancel handle per-MCP billing; report_bug sends feedback; request_mcp asks us to build a NEW MCP when nothing fits. Search/describe flag installed_in_toolkit vs installed_in_workspace. Writes (install/uninstall/subscribe/cancel and the one-off install behind invoke) require workspace owner/admin. It also carries the mcp.ai PROMPT LIBRARY, which is about ready-made prompt TEXT rather than MCPs: search_prompts finds one, get_prompt returns its full text with {{variables}} filled, and publish_prompt saves a prompt and returns a shareable mcp.ai/p/<slug> link that opens without login.
report
report_bug
Report a bug, missing feature, or send feedback. Include the conversation array with recent messages for reproduction.
show
show_version
Show the current MCP platform and adapter versions.
toolkit
toolkit_info
Returns the current toolkit state: installed MCPs, their connection status, the accounts connected to each one, and how many catalog tools each exposes.

Endpoints

URLTransportStateLatencyChecked
https://api.mcp.ai/p_whatsapp streamable-http answering 1137 ms 6 min ago

Alternatives to WhatsApp

same job, measured the same way
WhatsApp Messaging API
by jevil25

Send WhatsApp messages from Claude. No Meta Business approval or WhatsApp Business account.

59 installs/wk local only
WhatsApp Connect
by idle-sync

Read, search, and send personal WhatsApp messages from any MCP client, behind a send-confirm gate.

local only
Whatsapp
by 2chat

WhatsApp (Web + Business API), SMS, contacts, and call records via 2Chat's MCP server.

answering
Leporis WhatsApp
by admin-rstechie

Send and read WhatsApp messages on your Leporis account from AI coding agents, via your own API key.

answering
SMS and WhatsApp Messaging
by hatchloop

Send WhatsApp, SMS, email or voice to a business with the compliance gate enforced.

10 tools answering
WhatsApp MCP Server
by nakulben

Manage WhatsApp Business templates and send messages via Meta Cloud API

57 installs/wk local only
Gambot WhatsApp Business API
by gambot-ai

Send WhatsApp messages & templates and manage CRM, leads & campaigns via the Gambot WhatsApp API.

152 installs/wk local only
ManyContacts - WhatsApp Business MCP
by manycontacts

WhatsApp Business MCP: send messages, manage contacts, campaigns, and AI agents.

66 installs/wk local only

WhatsApp — questions

Answers built from our own checks of this server.

What can WhatsApp do?
It exposes 47 tools, read directly from the server on our last check. Among them: authenticate, connect, marketplace, report_bug, show_version, toolkit_info and 41 more. The full list with descriptions is on this page — we take it from the server itself via tools/list, not from a README. How MCP servers expose tools in the first place →
Is WhatsApp working right now?
We send a real MCP handshake every 15 minutes. Over the last 24 hours 92 of 92 checks got a reply (100.0%), average response time 1090 ms. The bar chart above shows every period we have measured.
How do I connect WhatsApp?
Copy the ready config from this page — we generate it for Claude Code, Claude Desktop, Codex, Cursor and VS Code, each with the file path that client actually reads. It is a remote server, so there is nothing to install — the client connects to the address.
Does WhatsApp need an API key?
No. WhatsApp completed a full MCP handshake with us as an anonymous client and listed its tools without asking for anything. All 47 of them are readable on this page. This is what we observed, not what the docs claim.
How fast is WhatsApp?
It answers our handshake in 1090 ms on average, which is faster than 7% of all working MCP servers we measure. That is on the slow side — worth knowing if the tool sits inside an interactive loop. The comparison comes from our own checks across the whole registry, every 15 minutes.
Is WhatsApp open source?
Yes — it is published under the MIT licence and 0 stars on GitHub. The source link is on this page, so you can read exactly what it does with your data before you connect it.