MCP server for Evolution API (WhatsApp) with instance pinning
54 tools with highly inconsistent quality. 13 tools (find_messages, get_chat_history, get_group_info, get_group_resolved_participants, get_settings, list_groups, mark_as_read, send_text, send_media, send_audio, send_sticker, send_location, send_contact) have NO visible descriptions in the provided source, these score 0 on description. Tools with descriptions (accept_invite, archive_chat, check_number, connection_state, create_group, delete_message, download_media, fetch_business_profile, fetch_invite_code, fetch_privacy, fetch_profile_picture, find_chats, find_contacts) show moderate quality: descriptions range 50 - 200 chars, input schemas present with typed parameters. However, output schemas are not documented anywhere in the source code. Error handling is absent, no recovery guidance, no categorization of retryable vs fatal errors. No tool annotations (readOnlyHint, destructiveHint, idempotentHint) despite clear risk classifications (READ_ONLY, WRITE, DESTRUCTIVE). Naming is verb-first and clear (send_text, update_profile_name, delete_message), following pattern:tool conventions. Parameter descriptions exist for documented tools but are sparse (e.g., 'Array of phone numbers' lacks format/length constraints). No pagination guidance visible despite tools like find_chats and find_contacts accepting limit/offset. Overall: ~24% of tools lack descriptions entirely; output schemas undocumented; error handling missing; tool annotations absent.
Accept a WhatsApp group invite by invite code via the pinned instance.
Archive or unarchive a WhatsApp chat via the pinned instance.
Check whether phone numbers have WhatsApp accounts. Returns exists, jid, and number for each.
Get the current connection state of the pinned WhatsApp instance (open, close, connecting).
Create a new WhatsApp group via the pinned instance.
Delete a message for everyone via the pinned WhatsApp instance.
41 of 54 tools (76%) have NO visible description in source code. This violates pattern:tool-description and prevents LLMs from selecting the right tool.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | F | 37 | 2026-07-28+ | v2 |
Download media from a WhatsApp message and write it to disk. Returns { path, mimetype, size, messageId } — NOT raw base64 (prevents context overflow). File is written to /tmp/mcp-evolution-media/<instance>-<messageId>.<ext>. Caller is responsible for cleanup (rm the file when done).
Fetch the WhatsApp Business profile information of a contact via the pinned instance.
Fetch the invite code/link for a WhatsApp group via the pinned instance.
Fetch the current privacy settings of the pinned WhatsApp instance.
Fetch the profile picture URL of a WhatsApp contact via the pinned instance.
Find chats for the pinned instance. Supports search, limit, and offset to prevent large payloads.
Find contacts for the pinned instance. Supports search (substring on pushName/name/remoteJid), limit, and offset to prevent large payloads. Returns normalized { remoteJid, pushName, profilePicUrl, isBusiness } — extra fields dropped.
No output schemas documented for any tool. LLMs cannot plan downstream calls or extract required fields (e.g., what does send_text return? Does it include message_id for later deletion?). Violates pattern:tool and pattern:response-shaper.
No error handling guidance. Tools lack recovery hints, error categorization (retryable vs fatal), or actionable error messages. E.g., delete_message (DESTRUCTIVE) has no confirmation or dry-run pattern. Violates pattern:recovery-guide and pattern:confirmation-request.
No tool annotations (readOnlyHint, destructiveHint, idempotentHint) despite clear risk classifications in metadata (READ_ONLY, WRITE, DESTRUCTIVE). LLMs cannot infer safety properties from names alone. Violates current MCP spec (2026-07-28) tool annotation requirement.
Parameter descriptions lack format/constraint details. E.g., 'Array of phone numbers' does not specify format (E.164?), length, or example. 'Group JID' does not explain JID format (@g.us suffix). Violates pattern:constrained-input and review:param-validation-rules.