The migration note says it directly: 40 granular tools became 5, with behaviour selected by an argument. For a model that has to hold every tool definition in context, that is the difference between usable and expensive. The thing to plan for is authentication — Basic Auth is inherited from REST and covers local clients, while remote connectors like Claude's need the OAuth path enabled explicitly, and OAuth here does not protect the REST or UI routes.
A self-hosted WhatsApp gateway whose REST server also serves an MCP endpoint. The tool design is deliberate: rather than one tool per operation, five tools take a `type` or `action` argument, which keeps the tool list short in the model's context.
- Sending of every message kind through one tool: `text`, `image`, `video`, `audio`, `document`, `sticker`, `location`, `contact`, `poll`, `link` and `forward` — `whatsapp_send`
- Message operations: react, edit, revoke, delete, mark read, mark played, star, unstar and download media — `whatsapp_message`
- Chats and contacts listed, message history read, and chats archived — `whatsapp_chat`
- Full group administration: create, join by link, leave, read info and participants, add, remove, promote and demote, manage the invite link, set name, topic and settings, and handle join requests — `whatsapp_group`
- Account state: status, QR and code login, logout and reconnect — `whatsapp_app`
- Multi-device support, where the `X-Device-Id` header on the connection picks the device for every call, overridable per call with a `device_id` argument
Your own server running `./whatsapp rest` — MCP is served by the REST process itself at `http://localhost:3000/mcp` over streamable HTTP, enabled by default and turned off with `MCP_ENABLED=false`. It inherits the REST server's Basic Auth, so the client sends the same `Authorization` header. For remote clients that cannot attach one, OAuth 2.1 is available but off by default: set `APP_BASIC_AUTH`, `MCP_ENABLED=true`, `MCP_OAUTH_ENABLED=true` and a public HTTPS `MCP_OAUTH_ISSUER_URL`. And a WhatsApp account to link, via QR or pairing code.
One command — docker run --detach \ --publish 3000:3000 \ --name whatsapp \ --restart always \ --volume whatsapp-storages:/app/storages \ --volume whatsapp-statics:/app/statics \ aldinokemal2104/go-whatsapp-web-multidevice \ rest --autoreply="Don't reply to this message, please"
