WASync · Developers

MCP

Connect Claude, Cursor or any MCP client to the remote WASync server. Six tools, no code on your side.

WASync runs a remote MCP server over Streamable HTTP. Add it to an MCP client and the agent gets WhatsApp tools with no code on your side.

MCP server URL
https://cloudapi.wasync.app/api/mcp

That host is deliberate. The REST base URL and every human-facing link use developers.wasync.app, but the MCP server URL, the OAuth endpoints and the /.well-known/… documents are protocol identifiers clients have already registered — they stay on cloudapi.wasync.app and must match byte-for-byte. Do not "normalise" them.

Connect a client

For clients that read a config file (Claude Desktop, Cursor, …):

mcp config
{
  "mcpServers": {
    "wasync": {
      "url": "https://cloudapi.wasync.app/api/mcp"
    }
  }
}

Authentication is OAuth 2.0 with PKCE, handled by the client: the first call opens a browser, you approve, and the client stores the tokens. There is no key to paste.

A client without native remote-MCP support can bridge over stdio:

npx mcp-remote https://cloudapi.wasync.app/api/mcp

Find it in the registry

WASync is listed in the official MCP Registry as:

app.wasync/whatsapp

Clients and directories that read the registry can find the server by name instead of pasting the URL.

The tools

ToolWhat it doesNeeds
list_whatsapp_connectionsLists the connections the grant may use, with status and licence state. Every other tool takes a connection id from here.read
get_whatsapp_connectionThe current state of one connection: online or not, licence status and expiry. Read-only.read
read_whatsapp_messagesStored messages, newest first, across every shared connection or one of them; paged with nextCursor. Nothing is sent and no read receipt is shown.read
send_whatsapp_messageSends a text message from one connection to one recipient. The tool's description tells the model to confirm recipient and wording first: a WhatsApp message cannot be recalled.send
send_whatsapp_fileSends a file (document, image, audio or video, up to 5 MB) with an optional caption. Give a direct https link in url (preferred) or base64 in data. Same confirm-first rule: it cannot be recalled.send
mark_whatsapp_messages_readMarks one customer's inbound messages as read (blue ticks), by phone number or by a message id.send

They map onto GET /connections, GET /connections/{id}, GET /messages, POST /messages (text and media) and POST /messages/read, and they obey the same scopes — an agent can only do what the grant allows.

Sending a file

send_whatsapp_file takes exactly one of url or data:

send_whatsapp_file arguments
{
  "connectionId": "conn_123",
  "to": "40700000000",
  "url": "https://files.example.com/offers/offer-2026.pdf",
  "filename": "offer-2026.pdf",
  "caption": "Here is the offer we discussed."
}
  • url must be a direct https:// link to a file that anyone on the internet can open without logging in. WASync downloads it (up to 5 MB, 20 seconds) and takes the mimetype from the file server's answer unless you pass one. Links that point at private networks, at WASync itself, or at a web page instead of a file are refused.
  • data is the file as plain base64 (no data: prefix), at most 5 MB decoded, and then mimetype is required. Prefer url: moving file bytes through a model's conversation is slow and costly.
  • filename is what the recipient sees (no slashes); caption is optional, up to 1024 characters.

Failures come back as tool errors with a stable code at the start of the message: invalid_url, url_not_allowed, download_failed, file_too_large, invalid_media, or send_failed: <reason> when WASync refused the send.

MCP or the REST API?

Use MCP when a human-supervised agent should be able to reach WhatsApp: answering from a chat client, drafting replies, looking things up. Use the REST API when your own software owns the behaviour and needs webhooks, idempotency keys, files larger than 5 MB or provisioning — none of which MCP exposes.

An OAuth grant is only ever issued over connections that already exist, so MCP cannot create a workspace's first connection. Create it with an API key first: Quickstart.

On this page