Listed on the official MCP Registry
Give your AI assistant a WhatsApp account
uni-msg is a Model Context Protocol server for WhatsApp. Point Claude, Cursor, Gemini or ChatGPT at one endpoint and it can pair a device, read a thread, and send a reply — using your own number, with no Meta Business review in the way.
- 13
- tools exposed
- 2 min
- to pair a number
- Streamable HTTP
- or local stdio
- Bearer
- token auth
What the assistant gets
Thirteen tools, described well enough that the model picks the right one without being told. Errors come back as readable tool results rather than thrown exceptions, so it can correct itself.
Devices
Link a number and watch its connection state.
- list_devices
- get_device_status
- create_device
- connect_device
- request_pairing_code
- disconnect_device
Messaging
Send to a person or a group, text or attachments.
- send_message
- send_media
Reading
Find a conversation, then read the thread behind it.
- list_conversations
- read_thread
Contacts & groups
Look people up, keep records current, list group chats.
- list_contacts
- upsert_contact
- list_groups
Why this is not the Meta Business API
| Meta Business API | uni-msg MCP | |
|---|---|---|
| Getting started | Application, business verification, a provider | Link your number as a companion device |
| Time to first message | Days to weeks | About two minutes |
| Message templates | Submitted for approval | None — you write the message |
| Billing | Per conversation, ongoing | Flat plan |
| The number | A new business number | The one you already use |
The trade-off is real and worth stating: this pairs as a companion device, the same mechanism WhatsApp Web uses. It is not an official Meta integration, and throughput is paced on purpose — a warm-up ramp, randomised delays and a daily cap — because speed is what gets numbers banned.
Connect your client
The hosted endpoint needs no install. Create a key in Dashboard → API Keys, then pick your client.
Claude Code
One command.claude mcp add --transport http uni-msg https://uni-msg.com/mcp \
--header "Authorization: Bearer wsa_your_key"Cursor
~/.cursor/mcp.json{ "mcpServers": { "uni-msg": {
"url": "https://uni-msg.com/mcp",
"headers": { "Authorization": "Bearer wsa_your_key" }
} } }Gemini CLI
~/.gemini/settings.json — httpUrl selects Streamable HTTP; url would mean SSE.{ "mcpServers": { "uni-msg": {
"httpUrl": "https://uni-msg.com/mcp",
"headers": { "Authorization": "Bearer wsa_your_key" }
} } }Claude Desktop
Settings → Connectors → Add custom connector.URL https://uni-msg.com/mcp
Header Authorization: Bearer wsa_your_keyChatGPT
Developer mode. The only client that cannot send a header, so the key goes in the path — which is why that route is never access-logged.https://uni-msg.com/mcp/wsa_your_key
Authentication: nonePrefer to run it yourself
Use this if you would rather the API calls left your own machine. Needs Node 20+.
{ "mcpServers": { "uni-msg": {
"command": "npx",
"args": ["-y", "uni-msg-mcp-server"],
"env": { "UNIMSG_API_KEY": "wsa_your_key" }
} } }Pairing a number
Three steps, and the tool descriptions walk the assistant through them.
- 1
create_devicewith a name and the number in international format - 2
connect_devicereturns an eight-character pairing code - 3
On the phoneWhatsApp → Settings → Linked devices → Link with phone number instead → type the code
The code expires in about two minutes. If it lapses, call request_pairing_code rather than reconnecting — it is cheaper and avoids churning the session.
Worth knowing first
Sends cannot be recalled
The tool descriptions tell the assistant to confirm the recipient first, but that is guidance, not a guarantee. Treat it like a shell with production access.
Only a connected device delivers
Call list_devices before a send and you avoid a confusing failure later.
Judgement stays with you
A model is good at finding, reading and drafting. It is not good at deciding whether a message should be sent at all.
Keys are redacted
Anything key-shaped in an error is stripped before it reaches the model, and diagnostics go to stderr so the JSON-RPC stream stays clean.
Connect it in about two minutes
Create an account, generate an API key, point your client at the endpoint. Plans start at no cost and scale with volume — full pricing is on the home page.