Connects Claude to WhatsApp via the whatsmeow protocol with a local Go bridge and Python MCP layer. Read chats and contacts, search messages with accent-insensitive matching, transcribe voice notes locally through whisper.cpp, and send texts with a mandatory two-step confirmation flow. SQLCipher encrypts the database at rest with keys in macOS Keychain, and every inbound message passes through a prompt injection scrubber before Claude sees it. Daily CI runs govulncheck and pip-audit. Reach for this when you need WhatsApp integrated into Claude workflows but can't accept the prompt injection and instant-send risks of lighter implementations. Ships with audit logging and no telemetry.
Public tool metadata for what this MCP can expose to an agent.
manycontacts.contextGet ManyContacts account overview: WhatsApp Business channels, contact/user/tag counts, active AI agents, and enabled features. Use this first to understand the account state.Get ManyContacts account overview: WhatsApp Business channels, contact/user/tag counts, active AI agents, and enabled features. Use this first to understand the account state.
No parameter schema in public metadata yet.
manycontacts.contacts.listList WhatsApp Business contacts with filters (tags, team, date, unread, blacklist, scheduled). Returns paginated results.12 paramsList WhatsApp Business contacts with filters (tags, team, date, unread, blacklist, scheduled). Returns paginated results.
openstringpagenumbertagsstringteamstringlimitnumberstagesstringunreadstringdate_tostringblackliststringdate_fromstringscheduledstringassigned_tostringmanycontacts.contacts.getGet detailed information about a WhatsApp Business contact including tags, teams, and funnel stages.1 paramsGet detailed information about a WhatsApp Business contact including tags, teams, and funnel stages.
phonestringmanycontacts.contacts.createCreate a new WhatsApp Business contact in ManyContacts CRM.3 paramsCreate a new WhatsApp Business contact in ManyContacts CRM.
namestringnotesstringphonestringmanycontacts.contacts.updateUpdate an existing WhatsApp Business contact (name, notes, custom fields).4 paramsUpdate an existing WhatsApp Business contact (name, notes, custom fields).
namestringnotesstringphonestringcustomFieldsstringmanycontacts.contacts.deleteDelete a WhatsApp Business contact from ManyContacts CRM.1 paramsDelete a WhatsApp Business contact from ManyContacts CRM.
phonestringmanycontacts.contacts.assignAssign a WhatsApp Business contact to a team member.2 paramsAssign a WhatsApp Business contact to a team member.
phonestringuserIdstringmanycontacts.contacts.unassignUnassign a WhatsApp Business contact (remove current user assignment).1 paramsUnassign a WhatsApp Business contact (remove current user assignment).
phonestringmanycontacts.contacts.closeClose a WhatsApp Business conversation.1 paramsClose a WhatsApp Business conversation.
phonestringmanycontacts.contacts.openReopen a closed WhatsApp Business conversation.1 paramsReopen a closed WhatsApp Business conversation.
phonestringmanycontacts.contacts.tag.addAdd a tag to a WhatsApp Business contact.2 paramsAdd a tag to a WhatsApp Business contact.
phonestringtagIdstringmanycontacts.contacts.tag.removeRemove a tag from a WhatsApp Business contact.2 paramsRemove a tag from a WhatsApp Business contact.
phonestringtagIdstringmanycontacts.contacts.team.addAdd a team to a WhatsApp Business contact.2 paramsAdd a team to a WhatsApp Business contact.
phonestringteamIdstringmanycontacts.contacts.team.removeRemove a team from a WhatsApp Business contact.2 paramsRemove a team from a WhatsApp Business contact.
phonestringteamIdstringmanycontacts.contacts.set_stageMove a WhatsApp Business contact to a funnel/pipeline stage.3 paramsMove a WhatsApp Business contact to a funnel/pipeline stage.
phonestringstage_idstringfunnel_idstringmanycontacts.contacts.bulkPerform bulk operations on multiple WhatsApp Business contacts (close, open, assign, add_tag, add_team).3 paramsPerform bulk operations on multiple WhatsApp Business contacts (close, open, assign, add_tag, add_team).
valuestringactionstringphonesstringmanycontacts.messages.listList WhatsApp Business messages for a contact. Shows the conversation history with timestamps and status.3 paramsList WhatsApp Business messages for a contact. Shows the conversation history with timestamps and status.
pagenumberlimitnumberphonestringmanycontacts.messages.send.textSend a WhatsApp Business text message to a phone number.2 paramsSend a WhatsApp Business text message to a phone number.
bodystringphonestringmanycontacts.messages.send.noteSend an internal note on a WhatsApp Business contact (not visible to the contact).2 paramsSend an internal note on a WhatsApp Business contact (not visible to the contact).
bodystringphonestringmanycontacts.messages.send.templateSend a WhatsApp Business template message (for outbound messaging outside the 24h window).3 paramsSend a WhatsApp Business template message (for outbound messaging outside the 24h window).
phonestringvariablesstringtemplateIdstringmanycontacts.templates.listList WhatsApp Business message templates. Templates are required for sending messages outside the 24h conversation window.1 paramsList WhatsApp Business message templates. Templates are required for sending messages outside the 24h conversation window.
statusstringmanycontacts.templates.getGet details of a specific WhatsApp Business message template including components and configuration.1 paramsGet details of a specific WhatsApp Business message template including components and configuration.
idstringmanycontacts.templates.syncSync WhatsApp Business templates from Meta Cloud API. Fetches the latest templates from the connected WhatsApp Business account.Sync WhatsApp Business templates from Meta Cloud API. Fetches the latest templates from the connected WhatsApp Business account.
No parameter schema in public metadata yet.
manycontacts.campaigns.listList WhatsApp Business bulk messaging campaigns with statistics (sent, delivered, read, failed counts).List WhatsApp Business bulk messaging campaigns with statistics (sent, delivered, read, failed counts).
No parameter schema in public metadata yet.
manycontacts.campaigns.createCreate a WhatsApp Business bulk messaging campaign. Sends a template message to a list of phone numbers at a scheduled time.5 paramsCreate a WhatsApp Business bulk messaging campaign. Sends a template message to a list of phone numbers at a scheduled time.
datestringnamestringphonesstringvariablesstringtemplateIdstringmanycontacts.campaigns.deleteDelete a WhatsApp Business campaign.1 paramsDelete a WhatsApp Business campaign.
idstringmanycontacts.org.getGet WhatsApp Business organization/account information (name, timezone, settings).Get WhatsApp Business organization/account information (name, timezone, settings).
No parameter schema in public metadata yet.
manycontacts.org.updateUpdate WhatsApp Business organization settings (timezone, auto-reply, webhooks, etc.).10 paramsUpdate WhatsApp Business organization settings (timezone, auto-reply, webhooks, etc.).
timezonestringauto_reply_awaybooleanauto_reply_openbooleanauto_reply_closebooleanwebhooks_forwardbooleanauto_reply_away_textstringauto_reply_open_textstringwebhooks_forward_urlstringauto_reply_close_textstringauto_reply_close_minutesnumbermanycontacts.org.schedule.getGet the business hours schedule for the WhatsApp Business account.Get the business hours schedule for the WhatsApp Business account.
No parameter schema in public metadata yet.
manycontacts.org.apikeyGet the organization API key.Get the organization API key.
No parameter schema in public metadata yet.
manycontacts.channels.listList connected WhatsApp Business and Instagram channels.List connected WhatsApp Business and Instagram channels.
No parameter schema in public metadata yet.
manycontacts.tags.listList all tags for categorizing WhatsApp Business contacts.List all tags for categorizing WhatsApp Business contacts.
No parameter schema in public metadata yet.
manycontacts.tags.createCreate a new tag for WhatsApp Business contacts.2 paramsCreate a new tag for WhatsApp Business contacts.
namestringcolorstringmanycontacts.tags.updateUpdate an existing WhatsApp Business contact tag.3 paramsUpdate an existing WhatsApp Business contact tag.
idstringnamestringcolorstringmanycontacts.tags.deleteDelete a WhatsApp Business contact tag.1 paramsDelete a WhatsApp Business contact tag.
idstringmanycontacts.teams.listList teams in the WhatsApp Business organization.List teams in the WhatsApp Business organization.
No parameter schema in public metadata yet.
manycontacts.teams.createCreate a new team in the WhatsApp Business organization.1 paramsCreate a new team in the WhatsApp Business organization.
namestringmanycontacts.teams.add_memberAdd a user to a team.2 paramsAdd a user to a team.
teamIdstringuserIdstringmanycontacts.teams.remove_memberRemove a user from a team.2 paramsRemove a user from a team.
teamIdstringuserIdstringmanycontacts.teams.deleteDelete a team from the WhatsApp Business organization.1 paramsDelete a team from the WhatsApp Business organization.
idstringmanycontacts.funnels.listList sales funnels/pipelines for organizing WhatsApp Business contacts by stage.List sales funnels/pipelines for organizing WhatsApp Business contacts by stage.
No parameter schema in public metadata yet.
manycontacts.funnels.createCreate a new sales funnel/pipeline for WhatsApp Business contacts.1 paramsCreate a new sales funnel/pipeline for WhatsApp Business contacts.
namestringmanycontacts.funnels.add_stageAdd a stage to a sales funnel/pipeline.3 paramsAdd a stage to a sales funnel/pipeline.
namestringordernumberfunnelIdstringmanycontacts.funnels.update_stageUpdate a stage in a sales funnel/pipeline.3 paramsUpdate a stage in a sales funnel/pipeline.
namestringstageIdstringfunnelIdstringmanycontacts.funnels.contactsList contacts in a funnel/pipeline, optionally filtered by stage.4 paramsList contacts in a funnel/pipeline, optionally filtered by stage.
pagenumberlimitnumberfunnelIdstringstage_idstringmanycontacts.funnels.deleteDelete a sales funnel/pipeline.1 paramsDelete a sales funnel/pipeline.
idstringmanycontacts.users.listList team members/users in the WhatsApp Business organization.List team members/users in the WhatsApp Business organization.
No parameter schema in public metadata yet.
manycontacts.users.getGet details of a specific team member/user.1 paramsGet details of a specific team member/user.
idstringmanycontacts.users.updateUpdate a team member/user profile.2 paramsUpdate a team member/user profile.
idstringnamestringmanycontacts.users.inviteInvite a new team member to the WhatsApp Business organization.1 paramsInvite a new team member to the WhatsApp Business organization.
emailstringmanycontacts.users.deleteRemove a team member from the WhatsApp Business organization.1 paramsRemove a team member from the WhatsApp Business organization.
idstringmanycontacts.ai_agents.listList AI agents configured to auto-respond to WhatsApp Business messages.List AI agents configured to auto-respond to WhatsApp Business messages.
No parameter schema in public metadata yet.
manycontacts.ai_agents.getGet details of a specific WhatsApp AI agent including scenarios and configuration.1 paramsGet details of a specific WhatsApp AI agent including scenarios and configuration.
idstringmanycontacts.ai_agents.updateUpdate a WhatsApp AI agent's configuration (instructions, active status, etc.).5 paramsUpdate a WhatsApp AI agent's configuration (instructions, active status, etc.).
idstringactivebooleanblock_1stringblock_2stringblock_3stringmanycontacts.ai_agents.feedbackGet feedback/conversation logs for a WhatsApp AI agent.1 paramsGet feedback/conversation logs for a WhatsApp AI agent.
idstringA WhatsApp MCP server for Claude, built directly on whatsmeow. Encrypted at rest, prompt-injection-scrubbed, draft-and-confirm on every send, full audit trail, daily CI security gates. Actively maintained.
The most-starred WhatsApp MCP (lharries/whatsapp-mcp, 5.6K stars) is the architectural reference for this pattern, but has not shipped since July 2025 and leaves the lethal-trifecta problem entirely to the user. This implementation closes the gaps:
| Canonical | This implementation | |
|---|---|---|
| Last shipped | July 2025 | Active |
| DB encryption | Plain SQLite | SQLCipher with key in macOS Keychain |
| Prompt-injection scrubber | None | Every inbound message |
| Send safety | Fires immediately | Mandatory confirm_send between draft and delivery |
| Audit log | None | Every tool call, 30-day retention |
| Voice notes | Not transcribed | whisper.cpp local, Spanish-tuned default |
| LID alias resolution | Open issue cluster upstream | Shipped, with backfill migration for legacy threads |
| CI security | None | govulncheck + pip-audit + Dependabot, daily |
Not a fork. The Go bridge is built directly against whatsmeow; the Python MCP layer and SQLite schema are original. Other implementations (lharries, LukasHaas, verygoodplugins) were read as reference only.
Claude can:
whisper.cpp (Spanish-tuned by default)confirm_send step between draft and deliveryEverything runs locally on your machine. No cloud sync. No telemetry. Optional OpenAI Whisper backend is opt-in, off by default.
Two components, both local:
whatsapp-bridge/ (Go). Binds to 127.0.0.1 only. Wraps whatsmeow for the WhatsApp Web multidevice protocol. Owns SQLite persistence with SQLCipher encryption. Handles QR and pairing-code auth, media up/download, session recovery from StreamReplaced conflicts, call history capture. Exposes a REST API the Python MCP layer consumes.whatsapp-mcp-server/ (Python, FastMCP). Consumes the Go bridge REST API. Exposes 11 MCP tools to Claude: full read surface (chats, messages, contacts), accent-insensitive search, presence (typing, online, mark-read), and text-send + reactions + reply-quotes with mandatory confirm_send. Runs via uv and stdio transport.Open Claude Code, paste:
/plugin marketplace add adelaidasofia/whatsapp-mcp
/plugin install whatsapp-mcp@whatsapp-mcp
This installs the Python MCP server side. The Go bridge still needs the one-time QR pairing flow with your phone — see the legacy install block below for those steps.
See SETUP.md for step-by-step install. In short:
scripts/check_prerequisites.shcd whatsapp-bridge && go run ..mcp.jsonAll configurable via environment variables. See .env.example for the full list.
Key variables:
| Variable | Default | Purpose |
|---|---|---|
WHATSAPP_BRIDGE_PORT | 8080 | Go bridge REST API port |
WHATSAPP_DB_PATH | $HOME/.claude/whatsapp-mcp/store/messages.db | Encrypted SQLite database |
WHATSAPP_MEDIA_PATH | $HOME/.claude/whatsapp-mcp/media/ | Media file storage |
WHATSAPP_VAULT_CRM_PATH | empty | Absolute path to your vault CRM folder for auto-injection (e.g., Obsidian 👤 CRM/). When unset, CRM injection is disabled. |
WHATSAPP_WHISPER_BACKEND | local-cpp | local-cpp (private) or openai-api (opt-in) |
WHATSAPP_WHISPER_API_KEY | empty | Required only when backend is openai-api |
WHATSAPP_WHISPER_MODEL | large-v3 | whisper.cpp model name |
WHATSAPP_SCRUB_PROMPT_INJECTION | true | Strip known prompt-injection patterns from incoming messages before Claude sees them |
WHATSAPP_AUDIT_LOG | true | Log every tool call to audit.log |
WHATSAPP_ENCRYPT_DB | true | Enable SQLCipher DB encryption with key from macOS Keychain |
This MCP is the highest-trust component in your Claude stack because every WhatsApp message you receive flows through it. See SECURITY.md for the threat model, tool risk-tier classification, and the full list of hardening decisions.
Short version:
127.0.0.1 only, never 0.0.0.0audit.log with 30-day retentionconfirm_send step between draft and deliverywhatsmeow pinned to a specific commit; upgrades require diff reviewv0.1.0, actively maintained.
Shipped: QR + pairing-code auth, full read surface (chats, messages, contacts), accent-insensitive NFD-normalized search, LID alias resolution with backfill migration for legacy threads, Baileys-store import for one-shot history migration, vault-format markdown export, local whisper.cpp voice transcription, presence (typing, online, mark-read), text-send with mandatory confirm_send, reactions, reply-quotes, prompt-injection scrubber, SQLCipher-encrypted persistence with macOS Keychain key handling, audit log, CI security gates.
Not yet shipped: media-send (image, document), audio-message-send (FFmpeg-Opus path), group broadcast helpers.
See CHANGELOG.md for full history.
Published on the official MCP Registry under io.github.adelaidasofia/whatsapp-mcp. Two live channels:
.mcpb bundle (canonical, recommended) — one-click install in Claude Desktop / Cursor / any MCPB-aware client. Published as a GitHub release artifact at releases/latest/download/whatsapp-mcp.mcpb. The release manifest carries the SHA256 for tamper detection.adelaidasofia-whatsapp-mcp) — historical; available via uvx adelaidasofia-whatsapp-mcp for stdio-installer flows. The unprefixed names (whatsapp-mcp, whatsapp-mcp-server) are taken by unrelated projects on PyPI, hence the username-prefixed namespace.The verification marker mcp-name: io.github.adelaidasofia/whatsapp-mcp is embedded in this README (HTML comment near the top) so the registry can verify package-to-server ownership at publish time.
Publishing pipeline: built and shipped via the Mycelium MCP publishing pipeline (two-phase: .mcpb bundle build, then gh release + mcp-publisher publish). The same pipeline produced all 16 sibling MCPs in this family.
Same author, same architecture pattern (FastMCP, draft+confirm on writes where applicable, vault auto-export, MIT):
This plugin sends a single anonymous install signal to myceliumai.co the first time it loads in a Claude Code session on a given machine.
What is sent:
slack-mcp)0.1.0)What is NOT sent:
Why: Helps the maintainer know which plugins people actually install, so attention goes to the ones that get used.
Opt out: Set the environment variable MYCELIUM_NO_PING=1 before launching Claude Code. The hook will skip the network call entirely. Already-pinged installs leave a sentinel at ~/.mycelium/onboarded-<plugin> — delete it if you want to reset state.
MIT. See LICENSE.
WhatsApp is a trademark of Meta Platforms, Inc. This project is an independent open-source tool that uses WhatsApp's public web-multidevice protocol. Use of this tool may violate WhatsApp's Terms of Service. Use at your own risk. The authors provide no warranty and accept no liability for account suspension, data loss, or other consequences.
Built by Mycelium AI. MIT license.
WHATSAPP_BRIDGE_HOSTdefault: 127.0.0.1Hostname for the Go bridge REST API.
WHATSAPP_BRIDGE_PORTdefault: 8080Port for the Go bridge REST API.
WHATSAPP_VAULT_CRM_PATHAbsolute path to a vault CRM folder for auto-injection (e.g., Obsidian 'CRM/'). When unset, CRM injection is disabled.
WHATSAPP_WHISPER_BACKENDdefault: local-cppVoice-note transcription backend. 'local-cpp' (default, private) or 'openai-api' (opt-in).
WHATSAPP_WHISPER_API_KEYsecretOpenAI API key. Required only when WHATSAPP_WHISPER_BACKEND=openai-api.
WHATSAPP_WHISPER_MODELdefault: large-v3whisper.cpp model name. Only used when backend is local-cpp.
WHATSAPP_SCRUB_PROMPT_INJECTIONdefault: trueStrip known prompt-injection patterns from incoming messages before the LLM sees them.
WHATSAPP_AUDIT_LOGdefault: trueLog every tool call to audit.log.
WHATSAPP_ENCRYPT_DBdefault: trueEnable SQLCipher DB encryption with the key sourced from macOS Keychain.
io.github.mindstone/mcp-server-microsoft-teams
com.mintmcp/outlook-email
helbertparanhos/resend-email-mcp
marlinjai/email-mcp
io.github.mindstone/mcp-server-email-imap
io.github.osamahassouna/email-playbook-mcp