wuapi MCP server
OfficialServer Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
| WUAPI_API_KEY | Yes | Your wuapi API key, e.g. wu_live_... Required for authentication. | |
| WUAPI_PROJECT | No | Act inside one project: its id or ext:<externalId>. Sent as Wuapi-Project. | |
| WUAPI_BASE_URL | No | API base URL. Must be https (or http on localhost). | https://api.wuapi.dev |
| WUAPI_MCP_READ_ONLY | No | Set to true to register only read-only tools. | false |
Instructions
Guidance the server publishes about itself, which clients place ahead of the tool catalog so the model reads it before choosing anything.
This server publishes no instructions, or was last inspected before Glama recorded them.
Capabilities
Features and capabilities supported by this server
Protocol revision2025-11-25
| Capability | Details |
|---|---|
| tools | {
"listChanged": true
} |
| prompts | {
"listChanged": true
} |
| resources | {
"listChanged": true
} |
Tools
Functions exposed to the LLM to take actions
| Name | Description |
|---|---|
| get_current_keyA | The organization, API key (name and last 4 characters, never the key) and project this server acts as. Call it first when you are unsure whether the key is an organization key or a project key. |
| list_accountsA | List the linked WhatsApp numbers (accounts), newest first, with their status: |
| get_accountA | One account: status, linked phone number, profile name, proxy location, disconnect reason and last error. |
| get_account_qr_codeA | The QR code to scan in WhatsApp (Settings > Linked devices > Link a device), as an image. Waits a few seconds for one when the account is still starting. QR codes rotate about every 20 seconds: call again if it expired. Returns the status instead when the account is already linked, and the pairing code when it links by phone number. |
| create_accountA | Start linking a new WhatsApp number. Pick |
| request_pairing_codeA | Link by phone number instead of QR code: returns an 8-character code the owner types in WhatsApp. It lives about 160 seconds. Fails with |
| reconnect_accountA | Restart the account's session. Use it when an account is |
| list_proxy_locationsA | Countries and cities a new number's proxy can exit from, for create_account and create_invitation. Search with |
| send_textA | Send a text message from a linked number to a contact, group or channel. The message is queued and sent at the account's pace; the result has its id and |
| send_mediaA | Send a file from a public URL: an image, video, audio, voice note (ogg/opus), document or sticker, with an optional caption. wuapi downloads the URL itself. |
| send_locationB | Send a map pin, with an optional place name and address. |
| send_contactA | Send one contact card, or up to 20 in one message. |
| send_pollA | Send a poll with 2 to 12 options. Votes arrive as |
| reply_to_messageA | Reply with text to a message, quoting it, in the same chat and from the same account. Works for messages in direct chats and groups. |
| react_to_messageA | React to a message with an emoji, as the account that received or sent it. An empty string removes the reaction. |
| get_messageA | One message with its status ( |
| list_messagesA | Messages wuapi stored, newest first: sent and received. Filter by account, chat and direction to read a conversation. There is no endpoint that lists chats; recent messages show who wrote. |
| edit_messageA | Change the text of an outbound text message, within WhatsApp's edit window (about 15 minutes). A message still queued is sent with the new text. |
| delete_messageA | Delete an outbound message for everyone (or only on the linked devices with |
| cancel_messageA | Stop a message that is still |
| mark_chat_readA | Clear (or set, with |
| send_read_receiptsA | Send read receipts (blue ticks) for inbound messages in a chat: the given ids, or every unread inbound message wuapi stores for it. |
| archive_chatB | Archive a chat on the linked devices, or unarchive it with |
| pin_chatA | Pin a chat to the top on the linked devices, or unpin it with |
| mute_chatA | Mute a chat's notifications for a while or until unmuted, or unmute it with |
| check_numbersA | Which of these phone numbers have WhatsApp, with their contact id, business name and username when known. Check before sending to a new number. |
| lookup_contactsA | About text, WhatsApp username, business name and device count of 1 to 50 contacts. Usernames cannot be searched: WhatsApp does not let a linked device resolve an @username, so look contacts up by number or |
| list_groupsA | Every group the account is in, read live from WhatsApp, with the participant count. Use get_group for the participants. |
| get_groupB | A group's name, description, settings and participants with their roles (member, admin, owner). |
| create_groupA | Create a WhatsApp group with the account as owner. Participants whose privacy settings refuse being added get an invite code instead (see the result). |
| add_group_participantsA | Add participants to a group the account administers. Each result says whether it worked; someone who cannot be added directly comes back with an invite code. |
| remove_group_participantsA | Remove participants from a group the account administers. |
| promote_group_participantsB | Make participants admins of a group the account administers. |
| demote_group_participantsA | Turn group admins back into regular members. |
| get_group_invite_linkA | The group's |
| reset_group_invite_linkA | Revoke the group's invite link and return a new one. Anyone holding the old link can no longer join with it. |
| leave_groupA | Make the account leave a group. To come back it has to be added or invited again. |
| post_storyA | Post a story from the account: text on a colored background, or an image or video from a public URL with an optional caption. |
| list_webhooksA | The webhook endpoints that receive events: URL, events and whether active. Signing secrets are never shown here. |
| create_webhookA | Register a public https URL to receive events as signed POST requests. The signing secret is not returned through this tool, to keep it out of the conversation: the user reveals it in the wuapi dashboard (Webhooks, rotate the endpoint's secret) and stores it with their server. |
| update_webhookA | Change a webhook endpoint's URL or events, or pause it ( |
| delete_webhookA | Delete a webhook endpoint. Its events stop at once, including deliveries still retrying. |
| list_projectsB | Projects: one per customer of a platform, each with its own numbers, keys, webhooks and usage. Organization keys only. |
| get_projectA | One project: name, external id, status, account limit and count. Organization keys only. |
| create_projectA | Create a project for one of your customers. Set |
| create_invitationA | Create a branded page ( |
| list_invitationsB | Invitations and their status: |
| get_invitationA | One invitation's status, and the linked |
| cancel_invitationA | Cancel an invitation: its link stops working. Completed invitations cannot be cancelled. |
| get_usageA | The current month's bill so far: billable numbers, proxy traffic, and the total in cents (USD). Organization keys only. |
| get_usage_by_projectA | Numbers, proxy traffic and messages sent and received per project for a month, for rebilling your customers. With |
Prompts
Interactive templates invoked by user choice
| Name | Description |
|---|---|
| send_message | Send a message to a number or group from one of your linked numbers. |
| setup_webhook | Register an https endpoint to receive incoming messages and delivery updates. |
| invite_customer | Create a project for a customer (if needed) and an invitation link they open to connect their own WhatsApp. |
Resources
Contextual data attached and managed by the client
| Name | Description |
|---|---|
| openapi | Every endpoint of the wuapi REST API with its parameters, bodies, responses and error codes. |
| docs | The complete wuapi docs as one Markdown file: conventions, every endpoint, webhook events and signature verification. |
| docs-index | A short index of the wuapi docs with links to each section. |
| webhook-events | Every event type a webhook endpoint can subscribe to. |
TDQS
Scored across 51 tools
Every tool targets a specific resource and action (send_*, get_*, list_*, create_*, etc.), with near-zero overlap in purpose. Even similar operations like cancel_message, delete_message, and edit_message are sharply distinguished by message state and intent.
All tool names follow a strict verb_noun snake_case pattern with precise resource nouns (cancel_message, list_groups, send_read_receipts). There are no mixed conventions, vague verbs, or camelCase deviations.
With 51 tools, this exceeds the 50+ threshold explicitly classified as an extreme mismatch for an MCP server. The domain is broad, but the sheer surface area is overwhelming for agents and likely exceeds what is needed in most interactions.
The surface covers the vast majority of WhatsApp API operations: messaging, media, accounts, groups, contacts, webhooks, projects, invitations, and usage. Minor gaps exist (no group rename/dissolve, no account unlink, no chat listing endpoint), but these are either acknowledged workarounds or uncommon operations.