WhatsApp MCP server has 15 tools with consistent naming (verb_noun pattern: get_, list_, search_, send_) and clear descriptions (avg ~80 chars). All tools have input schemas with type definitions and parameter descriptions. However, output schemas are not documented, responses are wrapped in createJsonResult() but the actual structure is opaque to the LLM. Parameter descriptions are minimal (e.g., 'Target chat ID.' lacks format/constraint details). No error handling guidance, no pagination metadata (limit/offset/total), and no tool annotations (readOnlyHint/destructiveHint). Missing idempotency guarantees for write operations. Descriptions are adequate but fall short of LLM-optimized length (50-200 chars baseline); most are 30-50 chars.
Get details for a chat by ID, including participants for groups.
Fetch recent messages from a chat for context.
List participants in a group chat. Returns an empty list for non-group chats.
Get details for a specific contact by contact ID.
Return the LID mapping for a contact ID, when available from the current client.
Return the current session details for the connected WhatsApp user.
Get a message snapshot by message ID.
Output schemas not documented. Tools return createJsonResult() wrapper but LLM cannot see what fields are in the response. This forces the LLM to guess at downstream field names and breaks tool chaining.
No tool annotations (readOnlyHint, destructiveHint, idempotentHint). Write tools (whatsapp_send_message, whatsapp_send_media_from_base64) lack destructiveHint, and read tools lack readOnlyHint. LLM cannot distinguish safe from unsafe operations.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | C | 60 | 2026-07-28+ | v2 |
Return the current connection status for this WhatsApp profile.
List all chats available in the connected WhatsApp account.
List all contacts available in the connected WhatsApp account.
Look up whether a number is registered on WhatsApp and return normalized metadata for it.
Search contacts by name, pushname, short name, number, or ID using query and optional limit parameters.
Search messages globally or within a chat using query and optional chatId, page, and limit parameters.
Send media to a WhatsApp chat using a base64 payload plus MIME type and optional filename/caption.
Send a plain text message to a WhatsApp chat or group.
Parameter descriptions lack format/constraint details. E.g., 'Target chat ID.' does not specify format (e.g., '[email protected]'), length, or character restrictions. LLMs cannot validate input without explicit constraints.
No error handling guidance. Tools do not document what errors can occur, whether they are retryable, or what the LLM should do next. E.g., whatsapp_send_message does not explain what happens if the chat is not found or the user lacks permission.
List tools lack pagination metadata. whatsapp_list_chats, whatsapp_list_contacts, and whatsapp_search_messages accept limit but do not document total count, next_cursor, or whether results are truncated. Large result sets will blow context window.