by Rich627
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.
# Add to your Claude Code skills
git clone https://github.com/Rich627/whatsapp-claude-pluginGuides for using ai agents skills like whatsapp-claude-plugin.
Last scanned: 9/28/2026
{
"issues": [
{
"type": "npm-audit",
"message": "@whiskeysockets/baileys: Baileys has message upsert / hist sync spoofing and app state corruption when using maliciously crafted protocolMessage payload",
"severity": "critical"
}
],
"status": "FAILED",
"scannedAt": "2026-09-28T10:37:21.290Z",
"npmAuditRan": true,
"pipAuditRan": true,
"promptInjectionRan": true
}See how whatsapp-claude-plugin compares with popular alternatives.
whatsapp-claude-plugin is an open-source ai agents skill for AI coding assistants such as Claude Code, Codex CLI, and ChatGPT, built by Rich627. 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. It has 119 GitHub stars.
whatsapp-claude-plugin failed SkillsLLM's automated security scan, which flagged one or more high-severity issues. Review the Security Report section carefully before using it.
Clone the repository with "git clone https://github.com/Rich627/whatsapp-claude-plugin" and add it to your Claude Code skills directory (see the Installation section above).
whatsapp-claude-plugin is primarily written in TypeScript. It is open-source under Rich627 on GitHub, so you can review or fork the full source.
Yes. SkillsLLM lists many other AI Agents skills you can browse and compare side by side. Open the AI Agents category from the badge at the top of this page, or use the Related Skills and comparison links further down to weigh whatsapp-claude-plugin against similar tools.
No comments yet. Be the first to share your thoughts!
Requires a passing catalog security scan.
⚠️ Third-Party Software Notice
This skill is third-party open-source software developed and hosted independently on GitHub. SkillsLLM is an informational directory and does not control or maintain the underlying repository.
Any security checks, ratings, or warnings displayed by SkillsLLM are automated and limited in scope. They do not constitute a security certification or guarantee that the software is safe, error-free, or free from malicious code, vulnerabilities, compromised dependencies, or prompt-injection risks.
Review the source code, permissions, dependencies, and configuration before installing or running any third-party skill. Use is at your own risk. To the maximum extent permitted by applicable law, SkillsLLM is not liable for losses arising from third-party software.
Drive your Claude Code session from WhatsApp. Choose a linked device for a personal account or the official WhatsApp Cloud API for business DMs.
The default Baileys provider connects like WhatsApp Web: pair your phone, then Claude replies from your own number. Existing installations keep this provider. The optional Cloud API provider uses Meta's business API and a public HTTPS webhook, with its own credentials, messaging policies and applicable fees. Both providers feed the same MCP channel and access gate.
Community project. This plugin is not made or endorsed by Anthropic or Meta. Its Baileys provider uses an unofficial linked-device protocol, which may conflict with WhatsApp's terms and put the number at risk. The optional Cloud provider uses official API transport; confirm your use is permitted under Meta's business and AI-provider rules before enabling it.
claude plugin marketplace add Rich627/whatsapp-claude-plugin
claude plugin install whatsapp-channel@whatsapp-claude-plugin
claude --dangerously-load-development-channels plugin:whatsapp-channel@whatsapp-claude-plugin
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) 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.
Know what this flag does. Claude Code warns against loading downloaded channels this way: a loaded channel can put text from other people straight into your session. Read this plugin's code before you use it, keep the allowlist to people you trust, and keep permission prompts on. Never combine it with
--dangerously-skip-permissions: with prompts off, anyone in an allowlisted chat could get Claude to run commands on your computer.
Inside the session, choose your connection:
/whatsapp-channel:setup
/whatsapp-channel:configure provider
The wizard runs in your own terminal so Cloud credentials never pass through
chat. Or run bun scripts/provider.ts choose from the plugin directory.
| Connection | Setup | Main limits |
|---|---|---|
Linked device (baileys, default) |
Pair your phone; no Meta API credentials | Unofficial protocol; existing personal/group behavior |
Official (cloud-api) |
Meta business number, token, app secret, verify token, public HTTPS webhook | DMs only in this implementation; service window/templates and Meta fees/policies apply |
For linked-device pairing, save your number with
/whatsapp-channel:configure <phone> (country code + number, no +). Enter the
printed pairing code in WhatsApp → Settings → Linked Devices → Link a Device →
Link with phone number instead, or scan the QR.
For official business DMs, follow Cloud API setup. This
provider does not yet support groups, message editing, phone history/address-book
import or coexistence synchronization. Add an explicitly allowed personal owner;
the business number is never auto-added, and the owner must be set explicitly with
/whatsapp-channel:access set owner <jid>. A non-empty key saved in
~/.whatsapp-channel/.env by the terminal tools wins over plugin /config values
for that key; remove it from .env to return it to plugin management.
Configuration readiness is not proof
that the public webhook works. Rates vary; consult
Meta pricing and
FAQ.
The server is a plain stdio MCP server, so any MCP client can run it. Two things are Claude Code specific and worth knowing before you start:
notifications/claude/channel, a Claude Code extension. MCP has no standard equivalent that reaches the model, and other clients drop unknown notifications silently. Elsewhere the plugin is poll-based: call wait_for_messages (parks up to 40s; the first call on a connection returns whatever is already unreplied, later calls only what arrived since) or catch_up / unreplied. Most tool results also carry a count of unreplied messages, so a client finds out there is traffic on its next call. Three do not: unreplied and wait_for_messages, which just returned those very messages, and catch_up with no arguments, which is that count already./whatsapp-channel:access and friends are Claude Code skills. Use bun scripts/access.ts instead (see Access control from a terminal).Register the server with an absolute path — ${CLAUDE_PLUGIN_ROOT} is substituted by Claude Code only:
Codex CLI (~/.codex/config.toml)
[mcp_servers.whatsapp]
command = "bun"
args = ["run", "--cwd", "/absolute/path/to/whatsapp-channel", "start"]
startup_timeout_sec = 30 # default 10 is tight for a first Baileys connect
tool_timeout_sec = 120 # default 60; wait_for_messages parks for up to 40s
Gemini CLI (~/.gemini/settings.json)
{
"mcpServers": {
"whatsapp": {
"command": "bun",
"args": ["run", "--cwd", "/absolute/path/to/whatsapp-channel", "start"],
"timeout": 600000
}
}
}
Cursor (~/.cursor/mcp.json for all projects, .cursor/mcp.json for one)
{
"mcpServers": {
"whatsapp": {
"type": "stdio",
"command": "bun",
"args": ["run", "--cwd", "/absolute/path/to/whatsapp-channel", "start"]
}
}
}
Only one client at a time can hold a state directory’s singleton lock. With Baileys, two connections using the same linked-device auth would kick each other off. Use separate state directories for separate numbers. A second server does not fail silently — it stays up and serves a single whatsapp_unavailable tool naming the process that holds the connection.
Everything the access skill does, without Claude Code:
bun scripts/access.ts status # policy, allowlist, pending codes, groups
bun scripts/access.ts policy pairing # open the door
bun scripts/access.ts pair <code> # approve someone who messaged you
bun scripts/access.ts allow <jid> # add directly
bun scripts/access.ts remove <jid>
bun scripts/access.ts group add <groupJid> [--mention] [--allow jid1,jid2]
bun scripts/access.ts set replyToMode first # ackReaction, textChunkLimit, chunkMode, mentionPatterns
Approving always needs the specific code, even when only one pairing is waiting: anyone can create a pending entry just by messaging the account, so "approve the pending one" is exactly what a prompt-injected request looks like. For the same reason this is a terminal command and deliberately not an MCP tool, so nothing arriving over WhatsApp can reach it.
The list below describes the default linked-device provider. See the provider capability comparison for the initial Cloud API scope. Shared DM access, attachment processing, transcription and context recovery also work with Cloud API.
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.send_poll asks a chat a question with up to 12 options; every vote comes back to the session as a message (linked device)./whatsapp-channel:access in Claude Code, or bun scripts/access.ts anywhere.config.md with a custom personality and conversation memory.## Cron Jobs section in a group's config.md schedules recurring server-side tasks.catch_up with no arguments says how many messages are waiting per chat - counts only, no message text - plus open tasks from `t