# WhatsApp (by mcp.ai) Muse connector

From musedirectory.ai, the independent directory of Meta Muse connectors. Not affiliated with Meta.

## WhatsApp (by mcp.ai)

Send and receive WhatsApp messages, manage groups, and search your chat history.

- Record: https://musedirectory.ai/connector/whatsapp-by-mcp-ai
- Category: Productivity
- Developer: mcp.ai
- Muse status: Extra setup. Not in Muse's Connectors list yet. Muse can still use it: its page gives you a request to paste into Muse.
- Health: Working, 329ms, checked 2026-09-28T07:45:54Z
- Endpoint: https://api.mcp.ai/p_whatsapp
- Auth: No account needed; Pricing: unknown
- Screening: Screened, no issues found (2026-09-25T12:51:33Z)
- Source: Found in the official MCP Registry (io.github.mcp-dir/whatsapp-mcp) https://registry.modelcontextprotocol.io/v0/servers?search=io.github.mcp-dir%2Fwhatsapp-mcp

Connect your personal or business WhatsApp account via QR pairing. Send text and media messages, manage group membership and settings, read and search message history, and react to messages.

Example request: "Send a message to my family group chat about tonight's dinner plans."

How to connect: Not in Muse's Connectors list yet, but Muse can still use it. Paste this into Muse: "Use WhatsApp (by mcp.ai) to help me. It is a free service with an MCP server at https://api.mcp.ai/p_whatsapp. It does not need an API key. Ask me before you share anything with it." Muse asks before it shares anything with the app's site. Meta does not review apps used this way, so only use ones you trust. We tested this in the Muse app on September 24, 2026: Muse used an app's link directly this way and returned a live answer.

Tools:
- whatsapp_list_accounts: List WhatsApp accounts paired to this install — wa_jid, phone, label, proxy on/off, status.
- 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 h
- 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 ('5511999999999@s.whatsapp.net', '<id>@g.us')
- 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 ('5511999999999@s.whatsapp.net', '<id>@g.us')
- whatsapp_chats: List WhatsApp chats (individual + group). Sorted by most recent activity.
- 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
- 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_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_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_groups: List WhatsApp groups the account belongs to — subject, jid, participants count, owner.
- 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_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_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_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_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_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_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 } — 
- 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 } — 
- 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 } — 
- whatsapp_chat_metadata: Get metadata for a single chat (subject/name, archived/pinned/muted state, unread count, timestamps). Requires chat_jid.
- whatsapp_chat_archive: Change a chat's state. action: archive/unarchive, pin/unpin, mute/unmute. Requires chat_jid. [Flattened action: archive]
- whatsapp_chat_unarchive: Change a chat's state. action: archive/unarchive, pin/unpin, mute/unmute. Requires chat_jid. [Flattened action: unarchive]
- whatsapp_chat_pin: Change a chat's state. action: archive/unarchive, pin/unpin, mute/unmute. Requires chat_jid. [Flattened action: pin]
- whatsapp_chat_unpin: Change a chat's state. action: archive/unarchive, pin/unpin, mute/unmute. Requires chat_jid. [Flattened action: unpin]
- whatsapp_chat_mute: Change a chat's state. action: archive/unarchive, pin/unpin, mute/unmute. Requires chat_jid. [Flattened action: mute]
- whatsapp_chat_unmute: Change a chat's state. action: archive/unarchive, pin/unpin, mute/unmute. Requires chat_jid. [Flattened action: unmute]
- 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 } (invi
- 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 } (invi
- 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 } (invi
- 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 } (invi
- 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 } (invi
- 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 } (invi
- whatsapp_search: Full-text search across all stored messages (SQLite FTS5). Optional chat_jid to scope. Returns matches with context.
- 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, lim
- 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`). "partia
- 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 ev
- 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.

Screening checks:
- MCP handshake: pass (Answered in 240ms)
- Domain against threat feeds (Cloudflare security DNS): pass (api.mcp.ai not flagged)
- Published packages against the OSV malicious-package database: n/a (No npm or PyPI package published)
- Hidden instructions or invisible characters in tool text: pass (47 tools read, nothing found)
- Inputs asking for passwords, card numbers or seed phrases: pass (None found)
- Domain and redirects: pass (No redirects off the domain)
- AI review of purpose and tool behavior: pass (No concerns)
