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 APIuni-msg MCP
Getting startedApplication, business verification, a providerLink your number as a companion device
Time to first messageDays to weeksAbout two minutes
Message templatesSubmitted for approvalNone — you write the message
BillingPer conversation, ongoingFlat plan
The numberA new business numberThe 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_key

ChatGPT

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: none

Prefer 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. 1

    create_device with a name and the number in international format

  2. 2

    connect_device returns an eight-character pairing code

  3. 3

    On the phone WhatsApp → 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.