MCP server for WhatsApp messaging, providing tools to search contacts, list messages and chats, send messages and files, manage groups, and interact with WhatsApp conversations
WhatsApp MCP has 25 tools with consistent verb-noun naming (search_, list_, get_, send_, create_, etc.). All tools have descriptions (avg ~80 chars, within baseline 34-392 range). Input schemas are present and typed for all tools. However, descriptions are often terse and lack context about when to use each tool vs. alternatives. Output schemas are not documented, LLMs cannot predict response structure. Error handling is absent from descriptions. No tool annotations (readOnlyHint/destructiveHint) despite clear risk stratification (READ_ONLY, WRITE, DESTRUCTIVE). Parameter descriptions are minimal; many lack format/constraint guidance. No pagination guidance in list_* tools despite accepting limit/page params. Missing idempotency guarantees for write operations.
Archive a WhatsApp chat.
Check if a phone number has a WhatsApp account.
Create a new WhatsApp group.
Delete a WhatsApp message.
Download media from a WhatsApp message and get the local file path.
Edit a WhatsApp message.
Get WhatsApp chat metadata by JID.
No output schemas documented. LLMs cannot predict response structure, forcing them to guess what fields are returned and breaking tool chaining. E.g., send_message returns what? A message_id? A timestamp? Unclear.
No tool annotations (readOnlyHint, destructiveHint, idempotentHint) despite clear risk stratification. Tools marked DESTRUCTIVE (delete_message) or WRITE (send_message) should declare this in schema so agents know retry safety and confirmation requirements.
Inferred effective spec: <=2025-11-25.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | C | 60 | <=2025-11-25 | v2 |
Get all WhatsApp chats involving the contact.
Get WhatsApp chat metadata by sender phone number.
Get WhatsApp group information.
Get most recent WhatsApp message involving the contact.
Get context around a specific WhatsApp message.
Leave a WhatsApp group.
Get WhatsApp chats matching specified criteria.
Get WhatsApp messages matching specified criteria with optional context.
Mark a WhatsApp chat as read.
Mark a WhatsApp chat as unread.
React to a WhatsApp message with an emoji.
Resolve a WhatsApp contact by phone number or JID.
Search WhatsApp contacts by name or phone number.
Send any audio file as a WhatsApp audio message to the specified recipient. For group messages use the JID. If it errors due to ffmpeg not being installed, use send_file instead.
Send chat presence status to a WhatsApp chat.
Send a file such as a picture, raw audio, video or document via WhatsApp to the specified recipient. For group messages use the JID.
Send a WhatsApp message to a person or group. For group chats use the JID.
Update WhatsApp group participants (add or remove members).
Pagination parameters (limit, page) present in list_messages, list_chats, get_contact_chats but no guidance on max limits, default behavior, or total count in response. Descriptions should state 'Returns up to 20 results per page; use page param to iterate.'
Parameter descriptions lack format/constraint guidance. E.g., 'recipient' in send_message says 'phone number with country code but no + or other symbols, or a JID', this should be an enum or regex pattern in schema, not prose. LLMs cannot reliably parse prose constraints.
No error handling guidance in tool descriptions. E.g., send_message does not document what happens if recipient is invalid, network fails, or message is too long. Agents need recovery hints like 'If recipient not found, try search_contacts() first.'