MCP server for WhatsApp messaging operations with local Ollama integration, enabling message search, contact management, chat browsing, and message sending
Server has 12 tools with mostly complete schemas and descriptions. Naming follows verb_noun conventions consistently (search_, list_, get_, send_, download_). Descriptions are present and reasonably detailed (average ~120 chars). Input schemas are well-formed JSON Schema with types and descriptions for all parameters. However, output schemas are not documented, LLMs cannot determine what fields to expect from responses, forcing them to reason about downstream chaining. Error handling guidance is missing entirely, tools provide no recovery hints when operations fail. Parameter descriptions lack some actionable constraints (e.g., phone number format, JID syntax rules are mentioned but not formally constrained as regex patterns or enums). Security concerns are significant: the server interacts with WhatsApp and sends messages (WRITE operations), but lacks permission gates, rate limiting, and dry-run/confirmation patterns for destructive operations. Resource composition is reasonable, tools are mostly single-responsibility, but some tools could be combined (e.g., send_message and send_file share recipient format logic).
Download media from a WhatsApp message and get the local file path.
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.
Get WhatsApp chats matching specified criteria.
Output schemas not documented. LLMs cannot determine what fields send_message, list_messages, or get_chat return. This forces agents to reason about response structure on the fly, increasing hallucination risk and preventing confident downstream chaining.
No error handling guidance. Tools provide no recovery hints (e.g., 'User not found. Try search_contacts() with partial name.'). LLMs receive raw errors with no actionable next steps, forcing retries or context loss.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-22 | D | 58 | 2026-07-28+ | v2 |
| 2026-03-09 | F | 45 | - | v1 |
Get WhatsApp messages matching specified criteria with optional context.
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 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.
Missing permission gates and confirmation patterns on destructive/sensitive operations. send_message and send_file directly send WhatsApp messages without dry-run, confirmation, or permission checks. Agents can trigger unintended communication without safeguards.
Parameter format constraints not formalized. Descriptions mention 'phone number with country code but no + or other symbols' and 'JID (e.g., 123456789@s.whatsapp.net)' as free-text examples. Should use regex patterns or enum constraints so LLMs understand valid formats precisely without relying on examples.
Pagination parameters present but total count or next_cursor missing from documented return. list_messages and list_chats support page/limit but responses don't clarify how to detect end of results or compute total pages.
Tool descriptions lack dependency hints. E.g., send_message requires a recipient in phone/JID format, but doesn't hint 'If you only have a contact name, call search_contacts() first to get their phone number.'
No audit logging or permission scope declarations. Tools lack explicit scope declarations (e.g., 'read:messages', 'write:messages') and no indication of audit trail. Compliance and incident response traceability are absent.