MCP.Market

WhatsApp MCP server

online · 100% uptime
by mcp-dir·io.github.mcp-dir/whatsapp-mcp·v0.1.0

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

B79/100grade B
What users say
No reviews yet
Be the first
Safety scan
B79/100

full report

Adoption
New

0 stars

Reviews

Write one

Nobody has reviewed WhatsApp yet.

If you have run it, two minutes of your experience saves the next person an afternoon.

WhatsApp tools (47, 9 write)

write = sends, deletes, buys or posts
  • authenticateFree

    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.

  • connectFree

    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.

  • marketplaceFree

    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_bugFree

    Report a bug, missing feature, or send feedback. Include the conversation array with recent messages for reproduction.

  • show_versionFree

    Show the current MCP platform and adapter versions.

  • toolkit_infoFree

    Returns the current toolkit state: installed MCPs, their connection status, the accounts connected to each one, and how many catalog tools each exposes.

  • whatsapp_chat_archiveFree

    Change a chat's state. action: archive/unarchive, pin/unpin, mute/unmute. Requires chat_jid. [Flattened action: archive]

  • whatsapp_chat_metadataFree

    Get metadata for a single chat (subject/name, archived/pinned/muted state, unread count, timestamps). Requires chat_jid.

  • whatsapp_chat_muteFree

    Change a chat's state. action: archive/unarchive, pin/unpin, mute/unmute. Requires chat_jid. [Flattened action: mute]

  • whatsapp_chat_pinFree

    Change a chat's state. action: archive/unarchive, pin/unpin, mute/unmute. Requires chat_jid. [Flattened action: pin]

  • whatsapp_chat_unarchiveFree

    Change a chat's state. action: archive/unarchive, pin/unpin, mute/unmute. Requires chat_jid. [Flattened action: unarchive]

  • whatsapp_chat_unmuteFree

    Change a chat's state. action: archive/unarchive, pin/unpin, mute/unmute. Requires chat_jid. [Flattened action: unmute]

  • whatsapp_chat_unpinFree

    Change a chat's state. action: archive/unarchive, pin/unpin, mute/unmute. Requires chat_jid. [Flattened action: unpin]

  • whatsapp_chatsFree

    List WhatsApp chats (individual + group). Sorted by most recent activity.

  • whatsapp_config_getFree

    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_setFree

    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_getFree

    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_listFree

    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_createwrite actionFree

    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_linkFree

    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_joinFree

    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_leaveFree

    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_requestsFree

    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_updatewrite actionFree

    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_membersFree

    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_addFree

    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_demoteFree

    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_promoteFree

    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_removewrite actionFree

    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_groupsFree

    List WhatsApp groups the account belongs to — subject, jid, participants count, owner.

  • whatsapp_history_backfillFree

    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_coverageFree

    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_accountsFree

    List WhatsApp accounts paired to this install — wa_jid, phone, label, proxy on/off, status.

  • whatsapp_message_deletewrite actionFree

    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_editFree

    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_forwardFree

    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_messagesFree

    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_writewrite actionFree

    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_createwrite actionFree

    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_votewrite actionFree

    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_reactFree

    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_searchFree

    Full-text search across all stored messages (SQLite FTS5). Optional chat_jid to scope. Returns matches with context.

  • whatsapp_send_mediawrite actionFree

    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 ('5511999999999@s.whatsapp.net', '<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_textwrite actionFree

    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 ('5511999999999@s.whatsapp.net', '<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_syncFree

    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_getFree

    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_setFree

    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).

Public scan report

scanner v0.1.10 · 2026-11-01 · same rubric, same numbers if you re-run it

1 high
  • –Code scanremote-only server, no package to scann/a
  • Live reliabilityremote reachable in 1614ms20/20
  • Tool poisoning47 tool descriptions checked15/15
  • Auth qualityopen endpoint exposes 9 write-action tools with no auth3/15
  • Maintenancelast push 63 days ago12/15
  • Maintainer identityregistry namespace matches repository owner; GitHub account older than a year9/10

Findings (1)

  • highWrite-action tools reachable without authenticationauth.open-write
Overall 79/100. Components that don't apply are left out of the denominator. Any critical finding is an F.RubricAppeal a findingJSON

How WhatsApp compares

Against every graded MCP server, from our own scans and uptime checks. Updated after each scan run.

Safety score
79/100
higher than 58% of 48,273 servers
Tools
47
the typical server has 7
Tools that change things
19%
typical: 0%. Fewer write tools means less an agent can break
Uptime
100%
of our recent checks; the typical remote server answers 100%
Response time
32 ms
faster than 94% of 30,037 servers

What its tools let an agent do: 37 read · 10 change

Install WhatsApp in Claude Code, Cursor or VS Code

claude mcp add --transport http whatsapp-mcp https://api.mcp.ai/p_whatsapp
Add to Cursor

What the publisher says

From the WhatsApp repository's README, as published. We do not edit it. Read it on GitHub

WhatsApp

WhatsApp para Claude, ChatGPT e agentes de IA

Conecte uma conta de WhatsApp pessoal/Business via pareamento por QR (multi-device, como o WhatsApp Web). Envie e leia mensagens, listas chats, contatos, grupos e faça busca full-text no histórico. Suporte opcional a proxy SOCKS5/HTTPS por conexão, recomendado para evitar bloqueios em IPs de datacenter (Cloudflare/AWS).

  • 📊 41 ferramentas
  • ✏️ Leitura e escrita
  • 💬 Funciona com qualquer cliente MCP: Claude Desktop, Cursor, VS Code, Cline, Continue
  • 🔑 Login via magic-link (sem senha)

English version · Documentação completa · Skill pra agentes

Instalar em 1 clique

Claude (Web e Desktop)

A Anthropic unificou a instalação de MCPs em claude.ai/customize/connectors. O mesmo link serve pra Claude Web e Claude Desktop (basta estar logado):

➕ Abrir no Claude e conectar

Manual (se o deeplink não abrir): claude.ai/customize/connectors → + → Adicionar conector personalizado → cole Nome WhatsApp e URL https://api.mcp.ai/p_whatsapp.

Cursor

➕ Instalar WhatsApp no Cursor

VS Code (Copilot Chat)

➕ Instalar WhatsApp no VS Code

ChatGPT, Manus, OpenClaw e mais 40+ clientes

Funciona em qualquer cliente MCP que suporte MCP over HTTP. A URL do servidor é sempre:

https://api.mcp.ai/p_whatsapp

Detalhes por cliente: INSTALL.md.

Exemplos de uso

Liste meus últimos 20 chats no WhatsApp
Busque no histórico todas as mensagens que mencionem 'reunião'
Envie 'Cheguei!' para +5511999999999

41 ferramentas disponíveis

Shortened. The full README is on GitHub.

Nothing above is checked by us. What we check is on the safety report.

WhatsApp: common questions

Is WhatsApp MCP server safe?
Mostly: it is graded B (79/100). Read the WhatsApp safety report
How do I install WhatsApp?
It runs remotely at api.mcp.ai. Add it to Claude Code, Cursor, VS Code or Claude Desktop with the snippets above, or call it through the mcp.market gateway without installing anything.
Does WhatsApp need an API key?
Not as far as the registry entry and our scan can tell: no credentials are declared or required.
Is WhatsApp maintained?
The last commit was 64 days ago (2026-08-30). The latest release is v0.1.0.
Is WhatsApp up?
100% of our last 28 checks got an answer. We check remote servers about four times a day.
How does WhatsApp compare with other MCP servers?
safety score 79/100 (higher than 58% of 48,273 servers); tools 47 (the typical server has 7); tools that change things 19% (typical: 0%. Fewer write tools means less an agent can break). Full comparison.

More from mcp-dir →