WhatsApp MCP Server
Server Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
| WEBHOOK_URL | No | Webhook for incoming messages | http://localhost:8769/whatsapp/webhook |
| FORWARD_SELF | No | Forward messages sent by self | false |
| WHATSAPP_API_URL | No | Go bridge REST API URL | http://localhost:8080/api |
| WHATSAPP_DB_PATH | No | Path to SQLite database | ../whatsapp-bridge/store/messages.db |
| WHATSMEOW_DB_PATH | No | whatsmeow DB used for LID ↔ phone resolution | ../whatsapp-bridge/store/whatsapp.db |
| WHATSAPP_BRIDGE_PORT | No | Port for Go bridge REST API | 8080 |
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": false
} |
| prompts | {
"listChanged": false
} |
| resources | {
"subscribe": false,
"listChanged": false
} |
| experimental | {} |
Tools
Functions exposed to the LLM to take actions
| Name | Description |
|---|---|
| search_contactsB | Search WhatsApp contacts by name or phone number. Args: query: Search term to match against contact names or phone numbers |
| get_contactA | Look up a WhatsApp contact by phone number, LID, or full JID. Automatically detects the identifier type and queries appropriately. Args:
identifier: Phone number, LID, or full JID. Examples:
- "12025551234" (phone number)
- "184125298348272" (LID - long numeric)
- "12025551234@s.whatsapp.net" (phone JID)
- "184125298348272@lid" (LID JID)
phone_number: Backward-compatible alias for Returns: Dictionary with jid, name, display_name, is_lid, and resolved status |
| list_messagesA | Get WhatsApp messages matching specified criteria with optional context. Each message includes sender_display showing "Name (phone)" for easy identification. Args: after: ISO-8601 date string (e.g., "2026-01-01" or "2026-01-01T09:00:00") before: ISO-8601 date string (e.g., "2026-01-09" or "2026-01-09T18:00:00") sender_phone_number: Phone number to filter by sender (e.g., "12025551234") chat_jid: Chat JID to filter by (e.g., "12025551234@s.whatsapp.net" or group JID) query: Search term to filter messages by content limit: Max messages to return (default 50, max 500) page: Page number for pagination (default 0) include_context: Include surrounding messages for context (default True) context_before: Messages to include before each match (default 1) context_after: Messages to include after each match (default 1) sort_by: "newest" (default, most recent first) or "oldest" (chronological) |
| list_chatsB | Get WhatsApp chats matching specified criteria. Args: query: Search term to filter chats by name or JID limit: Max chats to return (default 50, max 200) page: Page number for pagination (default 0) include_last_message: Include the last message in each chat (default True) sort_by: "last_active" (default, most recent first) or "name" (alphabetical) |
| get_chatC | Get WhatsApp chat metadata by JID. Args: chat_jid: The JID of the chat to retrieve include_last_message: Whether to include the last message (default True) |
| get_direct_chat_by_contactB | Get WhatsApp chat metadata by sender phone number. Args: sender_phone_number: The phone number to search for |
| get_contact_chatsB | Get all WhatsApp chats involving the contact. Args: jid: The contact's JID to search for limit: Maximum number of chats to return (default 20) page: Page number for pagination (default 0) |
| get_last_interactionB | Get the most recent WhatsApp message involving the contact. Args: jid: The JID of the contact to search for Returns: Message dictionary with id, timestamp, sender, content, etc. or empty dict if not found. |
| get_message_contextA | Get context around a specific WhatsApp message. Args: message_id: The ID of the message to get context for before: Number of messages to include before the target message (default 5) after: Number of messages to include after the target message (default 5) chat_jid: Chat containing the message; required when its ID occurs in multiple chats |
| send_messageA | Send a WhatsApp message to a person or group. For group chats use the JID. Args: recipient: The recipient — either a phone number with country code but no + or other symbols, or a JID (e.g., "123456789@s.whatsapp.net" or a group JID like "123456789@g.us") message: The message text to send Returns: A dictionary containing success status and a status message |
| send_fileA | Send a file (image / raw audio / video / document) via WhatsApp. For group messages use the JID. Args: recipient: The recipient — either a phone number with country code but no + or other symbols, or a JID (e.g., "123456789@s.whatsapp.net" or a group JID like "123456789@g.us") media_path: The absolute path to the media file to send (image, video, document) Returns: A dictionary containing success status and a status message |
| send_audio_messageA | Send any audio file as a WhatsApp audio message. For group messages use the JID. If ffmpeg isn't installed, use Args: recipient: The recipient — either a phone number with country code but no + or other symbols, or a JID (e.g., "123456789@s.whatsapp.net" or a group JID like "123456789@g.us") media_path: The absolute path to the audio file (will be converted to Opus .ogg if needed) Returns: A dictionary containing success status and a status message |
| download_mediaA | Download media from a WhatsApp message and get the local file path. Args: message_id: The ID of the message containing the media chat_jid: The JID of the chat containing the message Returns: A dictionary containing success status, a status message, and the file path if successful |
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 13 tools
Most tools have clear, distinct purposes, but the chat-retrieval set has some overlap: list_chats, get_chat, get_direct_chat_by_contact, and get_contact_chats can be confusing depending on whether the agent has a contact, phone number, or JID. send_audio_message and send_file also overlap for audio files, though the description clarifies the distinction.
All tools use consistent snake_case verb_noun naming (search_contacts, get_chat, list_messages, send_message, download_media, etc.). The pattern is predictable throughout despite a few longer names.
At 13 tools, the set is well-scoped for a WhatsApp MCP server. Each tool maps to a meaningful contact, chat, message, send, or media operation without excessive surface area.
The surface covers the core WhatsApp workflows: contact lookup, chat listing, message reading/context, sending text/files/audio, and media download. Minor gaps remain around message editing/deletion, reactions, and group administration, but the main agent workflows are supported.