Index / MCP servers / WhatsApp

WhatsApp MCP server

WhatsApp is a remote MCP server that gives an AI agent 47 tools, among them authenticate, connect, marketplace. It answers at https://api.mcp.ai/p_whatsapp over streamable HTTP, and it listed its tools to an anonymous client, so no sign-in was needed for that. Our probes reached it 6 of 6 times since 11 September 2026; the last check, on 22 October 2026, succeeded.

Status
Answering
Tools
47
Reliability
6 of 6 checks
Response time
464 ms
Transport
streamable HTTP
Last checked
22 October 2026

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

Description as the publisher wrote it.

The 47 tools WhatsApp offers

ToolWhat it does
authenticateMCP.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-on
Inputs: token
connectReturns 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.
marketplaceThe 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
Inputs: action, query, mcp_id, limit, tier_slug, immediate
report_bugReport a bug, missing feature, or send feedback. Include the conversation array with recent messages for reproduction.
Inputs: message, context, conversation
show_versionShow the current MCP platform and adapter versions.
toolkit_infoReturns the current toolkit state: installed MCPs, their connection status, the accounts connected to each one, and how many catalog tools each exposes.
whatsapp_chat_archiveChange a chat's state. action: archive/unarchive, pin/unpin, mute/unmute. Requires chat_jid. [Flattened action: archive]
Inputs: chat_jid, duration_secs, account
whatsapp_chat_metadataGet metadata for a single chat (subject/name, archived/pinned/muted state, unread count, timestamps). Requires chat_jid.
Inputs: chat_jid, account
whatsapp_chat_muteChange a chat's state. action: archive/unarchive, pin/unpin, mute/unmute. Requires chat_jid. [Flattened action: mute]
Inputs: chat_jid, duration_secs, account
whatsapp_chat_pinChange a chat's state. action: archive/unarchive, pin/unpin, mute/unmute. Requires chat_jid. [Flattened action: pin]
Inputs: chat_jid, duration_secs, account
whatsapp_chat_unarchiveChange a chat's state. action: archive/unarchive, pin/unpin, mute/unmute. Requires chat_jid. [Flattened action: unarchive]
Inputs: chat_jid, duration_secs, account
whatsapp_chat_unmuteChange a chat's state. action: archive/unarchive, pin/unpin, mute/unmute. Requires chat_jid. [Flattened action: unmute]
Inputs: chat_jid, duration_secs, account
whatsapp_chat_unpinChange a chat's state. action: archive/unarchive, pin/unpin, mute/unmute. Requires chat_jid. [Flattened action: unpin]
Inputs: chat_jid, duration_secs, account
whatsapp_chatsList WhatsApp chats (individual + group). Sorted by most recent activity.
Inputs: limit, archived, account
whatsapp_config_getShow 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_setChange 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. -
Inputs: account, values
whatsapp_contacts_getRead 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]
Inputs: query, limit, jid, account
whatsapp_contacts_listRead 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]
Inputs: query, limit, jid, account
whatsapp_group_manage_createGroup 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: '
Inputs: group_jid, name, description, participants, link_action, invite
whatsapp_group_manage_invite_linkGroup 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: '
Inputs: group_jid, name, description, participants, link_action, invite
whatsapp_group_manage_joinGroup 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: '
Inputs: group_jid, name, description, participants, link_action, invite
whatsapp_group_manage_leaveGroup 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: '
Inputs: group_jid, name, description, participants, link_action, invite
whatsapp_group_manage_requestsGroup 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: '
Inputs: group_jid, name, description, participants, link_action, invite
whatsapp_group_manage_updateGroup 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: '
Inputs: group_jid, name, description, participants, link_action, invite
whatsapp_group_membersList 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).
Inputs: group_jid, account
whatsapp_group_participants_addManage 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`. [F
Inputs: group_jid, users, account
whatsapp_group_participants_demoteManage 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`. [F
Inputs: group_jid, users, account
whatsapp_group_participants_promoteManage 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`. [F
Inputs: group_jid, users, account
whatsapp_group_participants_removeManage 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`. [F
Inputs: group_jid, users, account
whatsapp_groupsList WhatsApp groups the account belongs to — subject, jid, participants count, owner.
Inputs: account
whatsapp_history_backfillRequest 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_me
Inputs: chat_jid, count, requests, account
whatsapp_history_coverageShow 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. Option
Inputs: query, kind, limit, chat_jid, account
whatsapp_list_accountsList WhatsApp accounts paired to this install — wa_jid, phone, label, proxy on/off, status.
Inputs: account
whatsapp_message_deleteManage 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 -
Inputs: chat_jid, message_id, for_everyone, to, text, account
whatsapp_message_editManage 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 -
Inputs: chat_jid, message_id, for_everyone, to, text, account
whatsapp_message_forwardManage 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 -
Inputs: chat_jid, message_id, for_everyone, to, text, account
whatsapp_messagesList 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 sync
Inputs: chat_jid, before, after, since, order, limit
whatsapp_messages_writeMark 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.
Inputs: chat_jid, message_id, account, message_ids
whatsapp_poll_createSend 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 batch
Inputs: to, name, chat_jid, message_id, options, selectable_count
whatsapp_poll_voteSend 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
Inputs: to, name, chat_jid, message_id, options, selectable_count
7 more tools

whatsapp_react, whatsapp_search, whatsapp_send_media, whatsapp_send_text, whatsapp_sync, whatsapp_webhook_get, whatsapp_webhook_set

Add WhatsApp to your AI client

Every block below points at https://api.mcp.ai/p_whatsapp. Pick your client and copy.

Claude Code: one command in your terminal
claude mcp add --transport http whatsapp https://api.mcp.ai/p_whatsapp
Claude Desktop: claude_desktop_config.json
{
  "mcpServers": {
    "whatsapp": {
      "command": "npx",
      "args": ["-y", "mcp-remote", "https://api.mcp.ai/p_whatsapp"]
    }
  }
}
Cursor: ~/.cursor/mcp.json, or .cursor/mcp.json in a project
{
  "mcpServers": {
    "whatsapp": {
      "url": "https://api.mcp.ai/p_whatsapp"
    }
  }
}
VS Code and GitHub Copilot: .vscode/mcp.json
{
  "servers": {
    "whatsapp": {
      "type": "http",
      "url": "https://api.mcp.ai/p_whatsapp"
    }
  }
}
Zed: Zed settings.json
{
  "context_servers": {
    "whatsapp": {
      "url": "https://api.mcp.ai/p_whatsapp"
    }
  }
}
Windsurf: ~/.codeium/mcp_config.json
{
  "mcpServers": {
    "whatsapp": {
      "serverUrl": "https://api.mcp.ai/p_whatsapp"
    }
  }
}
JetBrains AI Assistant: Settings, Tools, AI Assistant, MCP, New MCP Server, as JSON
{
  "mcpServers": {
    "whatsapp": {
      "url": "https://api.mcp.ai/p_whatsapp"
    }
  }
}
Continue: .continue/mcpServers/neuronto.yaml
name: WhatsApp
version: 0.0.1
schema: v1
mcpServers:
  - name: WhatsApp
    type: streamable-http
    url: https://api.mcp.ai/p_whatsapp
Gemini CLI: ~/.gemini/settings.json
{
  "mcpServers": {
    "whatsapp": {
      "httpUrl": "https://api.mcp.ai/p_whatsapp"
    }
  }
}
Codex CLI: MCP server config
{
  "mcpServers": {
    "whatsapp": {
      "type": "http",
      "url": "https://api.mcp.ai/p_whatsapp"
    }
  }
}
Warp: MCP servers, + Add, paste JSON
{
  "mcpServers": {
    "whatsapp": {
      "url": "https://api.mcp.ai/p_whatsapp"
    }
  }
}
Goose: a one-click extension link
goose://extension?url=https%3A%2F%2Fapi.mcp.ai%2Fp_whatsapp&type=streamable_http&id=whatsapp&name=WhatsApp

Is WhatsApp up right now?

It answered our last check on 22 October 2026 in 464 ms. Over 6 checks since 11 September 2026 it answered 6. Status here comes from Neuronto's own probes, not from the publisher.

MCP servers similar to WhatsApp

Questions about WhatsApp

How many tools does WhatsApp have?

47, as returned by the server's own tools/list on 17 September 2026: authenticate, connect, marketplace, report_bug, show_version, toolkit_info, whatsapp_chat_archive, whatsapp_chat_metadata, and 39 more.

Is WhatsApp down?

It answered our last check on 22 October 2026 in 464 ms. Over 6 checks since 11 September 2026 it answered 6.

How do I add WhatsApp to Cursor?

Put the server under mcpServers in ~/.cursor/mcp.json with the URL https://api.mcp.ai/p_whatsapp. The exact JSON is above, with the same setup for Claude Code, Claude Desktop, VS Code, Windsurf, Zed, Gemini CLI and the rest.

Does WhatsApp need an API key?

It listed its tools to an anonymous client, so reading the tool list needs no key. Individual tools can still ask for credentials in their own inputs.

Where this comes from

Publisher: io.github.mcp-dir. Endpoint host: api.mcp.ai. ARD identifier: urn:air:io.github.mcp-dir:mcp:whatsapp-mcp. First indexed 10 September 2026. The tools are exactly what the server returned; nothing on this page is inferred from its name. Ranking in Neuronto search is never for sale.

Is this your server? Get a message the day it stops answering or its tools change: monitoring, 14 days free. Or claim the domain to manage how it is listed.