WAHA WhatsApp MCP Server
Server Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
| WAHA_API_KEY | Yes | Backend API key for authentication | |
| WAHA_API_URL | No | Backend API base URL (no trailing slash) | http://localhost:8200/api |
| WAHA_SESSION | No | WAHA session name | default |
| WAHA_SEND_DELAY_MS | No | Minimum delay (ms) between outbound messages | 1000 |
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
} |
Tools
Functions exposed to the LLM to take actions
| Name | Description |
|---|---|
| whatsapp_session_statusA | Check if the WhatsApp session is connected and working. Returns the session status (WORKING, STOPPED, etc.), the connected phone number, and display name. Use this to verify connectivity before sending messages. No parameters required. Returns:
|
| whatsapp_account_infoA | Get information about the authenticated WhatsApp account. Returns the phone number, display name, and WhatsApp ID of the connected account. Use this to verify which account is connected. No parameters required. |
| whatsapp_list_chatsA | List recent WhatsApp chats with last message preview and profile pictures. Returns chat IDs, names, profile picture URLs, and a preview of the last message. Use the chat ID from results to read messages with whatsapp_read_messages. Args:
Returns array of chats with:
|
| whatsapp_read_messagesA | Read messages from a specific WhatsApp chat. Returns messages with sender, text content, timestamp, and message ID. Use the message ID from results for whatsapp_react or reply_to in whatsapp_send_text. Powered by Message Store — persistent full history with full-text search and sender filtering. Args:
Returns:
|
| whatsapp_send_textA | Send a text message to a contact (person or group). CORE tier supports text messages only (no images, video, audio, or documents). A rate limit delay is enforced between sends to avoid WhatsApp detection. Args:
Returns:
|
| whatsapp_reactA | React to a WhatsApp message with an emoji. Use an empty string for the reaction to remove an existing reaction. Args:
Returns confirmation of the reaction. |
| whatsapp_edit_messageA | Edit a previously sent text message. Only works on messages you sent (fromMe=true). WhatsApp shows an "edited" label on the message after editing. Args:
Returns confirmation with the edited message ID. |
| whatsapp_delete_messageA | Delete (unsend) a message from a contact's chat. Removes the message for everyone. WhatsApp shows "This message was deleted" in its place. Args:
Returns confirmation of deletion. |
| whatsapp_forward_messageA | Forward a message from one chat to another contact. The forwarded message shows a "Forwarded" label in WhatsApp and preserves the original sender attribution. Args:
Returns confirmation with forwarded message ID. |
| whatsapp_check_numberA | Check if a phone number is registered on WhatsApp. Use this before sending a message to a number not yet in your address book. Args:
Returns:
|
| whatsapp_list_contactsA | Unified address book — lists people you DM and groups you're in. Use the returned 'id' as contactId in any chat-targeting tool (send_text, read_messages, etc.):
Args:
Returns array of contacts with:
|
| whatsapp_get_contactA | Detail for a single contact — person OR group, by stable id. Returns shape depends on kind:
Args:
|
| whatsapp_download_mediaA | Download media (image, audio, video, document) from a WhatsApp message. Fetches the media attached to a specific message and returns it directly:
Use whatsapp_read_messages first to find messages with hasMedia=true, then pass the contactId and messageId here. Note: Old media (weeks+) may no longer be available on WhatsApp's servers. Args:
Returns:
|
| whatsapp_transcribe_audioA | Transcribe a WhatsApp voice message or audio to text. Server-side transcription via Speaches (Whisper). Optionally replies to the original message with the transcription text. Args:
Returns:
|
| whatsapp_search_messagesA | Search across all WhatsApp message history. Supports full-text search, date ranges, sender filtering, and message type filtering. Args:
Returns:
Note: sender_name may be null for some messages. |
| whatsapp_contact_graphA | Get social graph for a WhatsApp contact — shared groups, mutual connections. Args:
Returns:
|
| whatsapp_chat_summaryA | Get a readable summary of recent messages in a WhatsApp chat, including sender names and timestamps. This is optimized for readability — use whatsapp_read_messages for structured data with filtering, or whatsapp_search_messages for full-text search. Args:
Returns:
|
| whatsapp_statsA | Overview dashboard of WhatsApp activity — message totals, top chats, top contacts, and group/DM breakdown. No arguments needed. Returns:
|
| whatsapp_import_chatA | Import a WhatsApp chat export file (ZIP or TXT) into the message store. Use this to backfill historical messages from WhatsApp's "Export Chat" feature. Only inserts new messages — won't overwrite or duplicate existing data. The file should be a WhatsApp chat export:
The chat name is extracted from the filename (e.g., "Conversa do WhatsApp com NAME.zip"). You can override it with the chatName parameter. Messages are matched to existing contacts by name. If a contact doesn't exist, it's created. If the chat already exists in the store (by name), messages are added to it. Args:
Returns:
|
| whatsapp_auto_reply_enableA | Enable auto-reply with audio transcription for a contact. When the contact sends a voice note, the transcription is sent back as a quoted reply automatically. DM only — voice notes in groups are never auto-replied even if a member is flagged. The flag is contact/phone-scoped, so it follows the contact across WhatsApp's @c.us → @lid JID transitions automatically — no need to re-flag when WhatsApp migrates the JID. Args:
Returns:
|
| whatsapp_auto_reply_disableA | Disable auto-reply with audio transcription for a contact. Args:
Returns:
|
| whatsapp_auto_reply_listA | List every contact that currently has auto-reply transcription enabled, with display names from Google Contacts (when matched) or WhatsApp push name fallback. Returns:
|
Prompts
Interactive templates invoked by user choice
| Name | Description |
|---|---|
No prompts | |
Resources
Contextual data attached and managed by the client
| Name | Description |
|---|---|
No resources | |
TDQS
Scored across 22 tools
Each tool has a clearly distinct purpose, from account info to message operations to auto-reply management. No two tools appear to do the same thing, and descriptions clarify boundaries (e.g., chat_summary vs read_messages vs search_messages).
All tools share the 'whatsapp_' prefix and mostly follow a verb_noun pattern (e.g., delete_message, send_text). A few deviate slightly (e.g., account_info, stats, session_status are noun_noun or noun only), but the overall pattern is clear and consistent.
With 22 tools, the count is slightly above the ideal range but still well-scoped for a comprehensive WhatsApp server. Each tool covers a distinct operation, and none feel redundant or excessive.
The tool set covers most core WhatsApp operations: account management, contacts, chats, messages (send, read, edit, delete, forward, react, download media, transcribe), and auto-reply. Notable gaps include sending media (images, files) and group management, but the core workflow is well-supported.