byrich627· 1 MCP server
Claude Code WhatsApp channel plugin — run AI directly from WhatsApp, voice transcription, remote tool approval, access control. No API keys, no Docker, just a linked device.
$git clone https://github.com/rich627/whatsapp-claude-pluginInstalls into the current project.
Install whatsapp-claude-plugin by running `git clone https://github.com/rich627/whatsapp-claude-plugin`, then use it for the current task and follow its documentation at https://github.com/rich627/whatsapp-claude-plugin.
| 1 | # WhatsApp Channel for Claude Code |
| 2 | |
| 3 | Drive your Claude Code session from WhatsApp — your personal number, no bots, no API keys. |
| 4 | |
| 5 | The plugin connects to WhatsApp as a **linked device** (the same protocol as WhatsApp Web, via Baileys) and exposes it to Claude Code as an MCP channel. Incoming messages reach your session in real time; Claude replies from your own number, so recipients see a normal chat. Everything runs locally on your machine — messages travel directly between WhatsApp and your session, with no third-party servers in between. Once paired, it keeps working while your phone is off; only the Claude Code session needs to stay open, and reconnects never require re-pairing. |
| 6 | |
| 7 | [](https://claude.com/plugins) |
| 8 | [](https://claude.com/plugins) |
| 9 | [](https://modelcontextprotocol.io) |
| 10 | [](https://opensource.org/licenses/Apache-2.0) |
| 11 | |
| 12 | > Published on the [Anthropic Official Plugin Marketplace](https://claude.com/plugins) — the first community-built WhatsApp channel plugin reviewed and published by Anthropic. |
| 13 | |
| 14 |  |
| 15 | |
| 16 | ## Installation |
| 17 | |
| 18 | ```sh |
| 19 | claude plugin marketplace add Rich627/whatsapp-claude-plugin |
| 20 | claude plugin install whatsapp-claude-channel@whatsapp-claude-plugin |
| 21 | claude --dangerously-load-development-channels plugin:whatsapp-claude-channel@whatsapp-claude-plugin |
| 22 | ``` |
| 23 | |
| 24 | The `--dangerously-load-development-channels` flag matters: it registers the plugin as a **channel**, so an inbound WhatsApp message wakes your session immediately. Without it the tools still load, but nothing wakes the session when messages arrive — they sit unanswered until you (or a [watchdog](./scripts/watchdog.sh)) prompt Claude to check. `--channels` does not accept this plugin yet (it is not on the research-preview allowlist), so the development flag is currently the only way. |
| 25 | |
| 26 | Inside the session, set your number and pair: |
| 27 | |
| 28 | ```text |
| 29 | /whatsapp-claude-channel:configure <phone> # country code + number, no + |
| 30 | ``` |
| 31 | |
| 32 | A pairing code is printed on first launch. On your phone: WhatsApp → Settings → Linked Devices → Link a Device → **Link with phone number instead** → enter the code. No WhatsApp Business API, Meta developer account, or API key is involved — it links to your regular account. |
| 33 | |
| 34 | ## Features |
| 35 | |
| 36 | - **Bidirectional messaging.** Send and receive from the session; long replies are chunked to WhatsApp's limits or sent as a document attachment past a configurable threshold. |
| 37 | - **@-mentions.** `reply` can tag people so they actually get notified — ids are accepted as phone, LID, or full JID, and mentions attach only to the chunk that names them. |
| 38 | - **Full media support.** Photos, voice notes, video, documents, and stickers, in both directions. |
| 39 | - **Voice transcription.** Incoming voice notes are transcribed locally via mlx-whisper (see [setup](#voice-transcription-optional)); without the script they arrive as plain attachments. |
| 40 | - **Access control.** Pairing codes, allowlists, and per-group policies gate every inbound message — strangers never reach your session. Managed via `/whatsapp-claude-channel:access`. |
| 41 | - **Per-group personalities.** Each group gets its own `config.md` with a custom personality and conversation memory. |
| 42 | - **Permission relay.** Approve or deny Claude's tool requests from WhatsApp with an emoji reaction (👍 / 👎). |
| 43 | - **Cron tasks.** A `## Cron Jobs` section in a group's `config.md` schedules recurring server-side tasks. |
| 44 | - **Context recovery.** After a restart, the `catch_up` tool replays recent two-way conversation per chat, unreplied counts, and open tasks from `tasks.md`, so a fresh session resumes mid-flight work. |
| 45 | - **Dual accounts.** Run personal and business numbers side by side with separate state and behaviors. |
| 46 | - **Self-diagnosis.** `/whatsapp-claude-channel:doctor` checks the server process, device link, singleton lock, and config, then walks you through the fixes — no more guessing why replies stopped. |
| 47 | |
| 48 | ## How it works |
| 49 | |
| 50 | ```text |
| 51 | WhatsApp (phone) <──Baileys──> MCP Server <──stdio──> Claude Code |
| 52 | ``` |
| 53 | |
| 54 | The server (a single Bun process) holds the linked-device connection and forwards inbound messages to the session as channel notifications after they pass the access gate. Claude acts through MCP tools — `reply`, `react`, `edit_message`, `download_attachment`, `status`, `unreplied`, `catch_up`, `list_groups`. Runtime state (auth, allowlists, group configs, inbox) lives in `~/.whatsapp-channel/`, never in the repo. |
| 55 | |
| 56 | Messages sent by Clau |