Events only reach SQLite while `serve` is alive; after a gap, WhatsApp's own multidevice retention decides what can be recovered, and `request_sync` backfills a specific chat for shorter gaps. The author is direct about the security shape too: this is exactly the lethal-trifecta setup, so prompt injection arriving in an incoming message is a real exfiltration path, and log redaction is described as obfuscation rather than anonymisation.
A single-binary Go server wrapping whatsmeow to expose a personal WhatsApp account. It runs as a long-lived HTTP daemon on 127.0.0.1:8765 that MCP clients connect to, so closing and reopening your client reconnects rather than respawning a process. Messages are cached in local SQLite and only travel to the model when a tool is called.
- Reading: `search_contacts`, `list_messages` with context windows, `list_chats`, `get_chat`, `get_message_context`, `download_media`, and `request_sync` to backfill one chat's history on demand
- Sending: `send_message`, `send_file` with an optional view-once flag, `send_audio_message`, `send_contact_card`, and polls via `send_poll`, `send_poll_vote` and `get_poll_results`
- Message actions: `mark_read`, `mark_chat_read`, `send_reaction`, `send_reply`, `edit_message`, `delete_message` and `send_typing`
- Groups: `create_group`, `leave_group`, `list_groups`, `get_group_info`, `update_group_participants` for add, remove, promote and demote, `set_group_name`, `set_group_topic`, `set_group_announce`, `set_group_locked`, `get_group_invite_link` and `join_group_with_link`
- Blocklist and privacy: `get_blocklist`, `block_contact`, `unblock_contact`, `send_presence`, `get_privacy_settings`, `set_privacy_setting` and `set_status_message`
- Admin: `is_on_whatsapp` batch-checks numbers, `get_status` reports the connection, and `pairing_status` returns a structured setup state including the linking QR
Go 1.25+ to build (`make build` writes `./bin/whatsapp-mcp`); the runtime needs only the binary. Pair once by starting the daemon and opening http://127.0.0.1:8765/pair to scan the QR with WhatsApp on your phone — the session persists to `store/whatsapp.db` and needs re-pairing roughly every 20 days. Clients connect over HTTP to http://127.0.0.1:8765/mcp. `WHATSAPP_MCP_MEDIA_ROOT` sets the only directory files may be read from or written to, defaulting to `./store/uploads/`. `-allow-remote` requires `WHATSAPP_MCP_TOKEN`. ffmpeg is optional, needed only to convert non-Opus audio for voice notes. Windows requires CGO.
