WhatsApp MCP server: the three kinds
Three different things are called a WhatsApp MCP server. One of them can cost you your number. This page says which is which, then installs the one that needs no number of your own.
What is a WhatsApp MCP server?
An MCP server that hands an AI agent WhatsApp as a tool. There are three kinds and they are not interchangeable: one logs into your personal account through an unofficial client, one drives a WhatsApp Business account of your own through Meta's Cloud API, and one borrows a sender somebody else has already had approved.
The three kinds, and what each can do
| Kind | What it connects to | Can read your chats | Needs your own number | The catch |
|---|---|---|---|---|
| Unofficial client QR-linked, usually built on whatsmeow or Baileys |
Your personal WhatsApp, as a linked device | Yes | Yes — your own, personal one | WhatsApp's terms do not permit it, and the number can be banned |
| Your own Cloud API | A WhatsApp Business account you registered | No — only conversations on that business number | Yes, plus business verification and approved templates | Days of setup before the first message, and a template review each time the wording changes |
| A borrowed sender what @jabee/mcp is |
Jabee's approved sender | No | No | It asks and tells your own verified people. It cannot reach your customers |
Why the ban risk is named first
The GitHub projects you find by searching for whatsapp mcp are mostly the first kind: a Go or Node client that scans a QR code, registers as a linked device, stores your history in a local SQLite file and exposes it as MCP tools. They are genuinely impressive, and several of them say the risk out loud in their own READMEs.
The risk is not the software, it is the account. WhatsApp's terms do not permit third-party clients, and the enforcement lands on the phone number — which is the number your family messages you on. That is the trade: a personal account is the only way to read your own chats from an agent, and it is also the only thing at stake.
This is not a disinterested opinion and it would be silly to pretend otherwise: Jabee sells the third kind. The rule it keeps for itself is in the open — no unofficial library has ever been in this product, because the first portfolio that tried one is how the lesson was learned. See how Jabee compares.
Install the one with no number of your own
npx @jabee/mcp, or ai.jabee/mcp if your client installs from
the official MCP registry. Make a key under Management, then Approvals at
app.jabee.ai — it
begins jak_ and is shown once:
JABEE_API_KEY=jak_... npx @jabee/mcp
Then in your MCP client's configuration, which is the same three lines whichever client it is:
{
"mcpServers": {
"jabee": {
"command": "npx",
"args": ["-y", "@jabee/mcp"],
"env": { "JABEE_API_KEY": "jak_..." }
}
}
}
That file is .mcp.json in a project for Claude Code, the MCP settings for
Claude Desktop, and ~/.codex/config.toml in TOML form for Codex. Anything that
speaks MCP over stdio can run it.
The three tools
tell_person— one line on WhatsApp when a long job finishes, in the agent's own words. Returns as soon as it is sent.ask_person— asks for a decision and waits. The person gets Approve, Skip and an optional Edit button that returns free text, because the answer is usually "yes, but not that branch". Blocks forwait_seconds, 120 by default.check_approval— reads a request back by id, for an agent that returned while the request was still pending. It also reports a request that was withdrawn, so a late agent does not act on a decision somebody has since taken back.
Agents do not call tools they were not told about. Put this in your
CLAUDE.md, or whatever your agent reads:
When a long task finishes, call tell_person with one line on what
changed. Before anything irreversible — a force push, a production
deploy, a migration, deleting a branch, spending money — call
ask_person and wait for the answer.
The Claude Code permission prompt, on your phone
The same package ships a second entry point. As a Claude Code channel, the permission prompt itself arrives on WhatsApp with Approve, Skip and Edit, and the first answer wins — keyboard or phone, whichever you reach first:
{
"mcpServers": {
"jabee": {
"command": "npx",
"args": ["-y", "--package=@jabee/mcp", "jabee-channel"],
"env": { "JABEE_API_KEY": "jak_..." }
}
}
}
JABEE_API_KEY=jak_... claude --dangerously-load-development-channels server:jabee
The flag is required and that is not our choice: channels are a research preview, and during it Claude Code registers only channels on an Anthropic-maintained allowlist or an organisation's own. Without one, the channel is silently not registered. Full page: Claude Code on WhatsApp.
Which one you actually want
| What you are trying to do | Use |
|---|---|
| Read, search or summarise your own WhatsApp history | An unofficial client, knowing the number is at risk. No official route can do this |
| Have an agent ask you before it does something irreversible | @jabee/mcp |
| Be told on WhatsApp when a long run finishes | @jabee/mcp, or a heartbeat check for a job that might not finish at all |
| Message your own customers at scale from your brand | Your own WhatsApp Business account. Jabee runs that for you if you would rather not build it |
| One notification to one phone, for free | Not this. CallMeBot's free API and ntfy exist, and $29 is not worth paying for one line a week |
Limits worth knowing before you build on it
- Three sends are free, so you can watch one arrive before paying for anything. After that it is the $29 plan: 500 a month, then 3¢ each.
- 200 new requests per business in any 24 hours, and 60 API calls a
minute per key. A repeated
external_iddoes not count, so retries are free. - One handset per business. The account owner's verified phone by default, or an ops phone you link in the dashboard under Where alerts go. To reach several people, connect your own WhatsApp number and send from there.
- Your customers cannot be reached this way at all. A shared sender messaging people who never asked is what gets senders banned, so the API refuses it.
Questions
Can a WhatsApp MCP server get my number banned?
The QR-linked kind can. WhatsApp's terms do not permit unofficial clients and the enforcement lands on the number, not the software. The other two kinds send over Meta's own API, where sending is the point.
Which one can read my own messages?
Only the unofficial kind. Meta's API has no access to your personal chats, so no official route — Jabee included — can read them. Anything that offers to is in the first column of the table above.
Does this work with Codex and other clients?
Yes. It is stdio MCP with no client-specific behaviour: Claude Code, Claude Desktop, Codex and anything else that speaks the protocol. The Claude Code channel is the one piece that is client-specific.
Is it open source?
The package is MIT and published on npm as @jabee/mcp, and listed in the
official MCP registry as ai.jabee/mcp — a domain namespace, which means
the registry checked that whoever published it controls jabee.ai. The service behind it is
not open source: it is a WhatsApp sender with a Meta-approved template on it, which is the
part you cannot npm-install.
What happens if nobody answers?
The request expires rather than hanging your agent for ever, and
check_approval says so. For the Claude Code channel, an unanswered prompt sends
no verdict at all — the terminal dialog is still waiting, because an invented denial
would kill a job no person refused.