WhatsApp integration via Baileys (QR-code auth). Ships a CLI (`whatsapp`) for on-demand send and an MCP server (`mcp-whatsapp`) for long-running integrations.
Server has 8 tools with complete schemas and descriptions. Naming follows verb_noun convention (send_*, get_*, list_, read_). Descriptions are present (avg ~80 chars) but lack LLM-optimized guidance on WHEN to use each tool vs alternatives. Parameters are typed with enums where appropriate (mediaType, document_type). Error handling uses centralized fail() helper with type/message structure. Key gaps: no output schemas documented, no pagination guidance for list_chats/read_chat, no idempotency hints for write operations, descriptions don't explain prerequisites or recovery paths.
Get the delivery status of a previously sent message
List recent chats with activity since server start
Read message history from a specific chat
Send a templated billing alert message to a WhatsApp recipient
Send a templated document reminder message to a WhatsApp recipient
Send a media message (image, document, audio, or video) to a WhatsApp recipient
Send a plain text message to a WhatsApp recipient
Disconnect from WhatsApp and clear the session. Requires re-pairing on next connection.
Output schemas not documented. LLMs cannot infer what fields send_message, get_message_status, list_chats, or read_chat return. This forces agents to guess at response structure and breaks downstream tool chaining.
Descriptions lack WHEN/WHY guidance. 'Send a plain text message' does not explain when to use send_message vs send_media_message vs send_document_reminder. LLMs waste reasoning cycles choosing between similar tools.
No pagination or result-limit guidance for list_chats and read_chat. Descriptions do not state max results returned or how to fetch additional pages. Large chat histories could blow context window.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | D | 53 | 2026-07-28+ | v2 |
Write operations (send_*) lack idempotency or confirmation hints. Descriptions do not warn that repeated calls will send duplicate messages. No dry-run or confirmation pattern offered.
Error messages in fail() helper do not guide recovery. A validation error returns only type and message; no hint on what values are valid or what to try next.