MCP server providing tools to interact with WhatsApp through a bridge service. Enables searching contacts, listing/retrieving messages and chats, sending messages and files, and downloading media.
The server defines 12 tools with reasonable naming conventions (all verb-noun style: search_contacts, list_messages, send_message, etc.). Input schemas are present and mostly well-formed with type declarations. However, descriptions are consistently brief and lack LLM-optimization guidance. Output schemas are not documented, the code does not show what fields are returned. Error handling is absent from visible code. Tool composition is reasonable (read operations separate from writes), but several tools lack actionable parameter guidance. The server uses HTTP transport with FastAPI, which is production-ready, but the actual tool implementations are imported from a 'whatsapp' module not shown in source, making verification of output structure and error handling impossible.
Download media from a WhatsApp message.
Get WhatsApp chat metadata by JID.
Get all WhatsApp chats involving the contact.
Get WhatsApp chat metadata by sender phone number.
Get most recent WhatsApp message involving the contact.
Get context around a specific WhatsApp message.
Output schemas are not documented. No visible field definitions for what each tool returns. LLMs cannot plan chained calls or extract specific data without knowing response structure.
Descriptions are too brief (avg ~45 chars, min 'Get WhatsApp chat metadata by JID'). Below the 50-200 char LLM-optimized baseline. Missing context on when to call each tool vs alternatives, prerequisites, and what to expect.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-22 | C | 69 | 2026-07-28+ | v2 |
| 2026-03-09 | D | 50 | - | v1 |
Get WhatsApp chats matching specified criteria.
Get WhatsApp messages matching specified criteria with optional context.
Search WhatsApp contacts by name or phone number.
Send an audio message (voice note) to a WhatsApp contact or group.
Send a file to a WhatsApp contact or group.
Send a WhatsApp message to a person or group. For group chats use the JID.
No error handling documentation or recovery guidance in code. Visible tool implementations are imported from external 'whatsapp' module, error categorization, retryability, and user-fixable vs fatal errors are opaque.
Sensitive tools (send_message, send_file, send_audio_message) lack confirmation/dry-run patterns. No visible permission checks or audit logging. An LLM could send arbitrary messages without safeguards.
Parameter constraints not formally declared. 'sort_by' accepts 'last_active' or 'name' but is typed as string with no enum. 'limit' and 'page' have no min/max bounds. LLMs may pass invalid values; server must validate and return actionable errors.
JID and phone number formats are documented inline but not formally constrained (e.g., regex, pattern). 'chat_jid' description says 'JID' but gives no format hint. 'sender_phone_number' format is implied but not explicit. LLMs may guess wrong.
Pagination tokens/cursors not mentioned. Tools like list_messages and list_chats accept 'page' (offset-based), but no 'total', 'next_page', or 'has_more' fields documented. LLMs cannot know when to stop iterating.