An MCP server for WhatsApp management via Evolution API, enabling instance creation, message sending, group management, and connection state monitoring
This server has 30 tools with generally present input schemas and descriptions, but significant quality gaps prevent a higher score. Most tool descriptions are brief and lack strategic context (e.g., 'Send a plain text message' vs 'Send a plain text message to a WhatsApp contact or group, requires active connection from connect_evolution_instance'). Parameter descriptions are minimal and lack constraints, types, or validation guidance. No output schemas are documented in the source, only input. Error handling is minimal, no recovery guidance, no classification of error types, and no actionable messages visible. The tool set is well-named with consistent verb_noun patterns (send_*, get_*, fetch_*, find_*), which is a strength. However, composition issues exist: tools like send_plain_text, send_media, send_audio, send_sticker, send_location, send_contact are highly repetitive and could benefit from a unified send_message tool accepting a content_type parameter and payload. Several tools (e.g., fetch_evolution_instances, find_chats, find_contacts) accept optional 'where' or similar filter objects with inline documentation but no formal schema definition visible. Tool annotations (readOnlyHint, destructiveHint, idempotentHint) are manually tracked in the provided risk field but not implemented in the code visible here.
Connect to a WhatsApp instance to start a session
Create a new WhatsApp instance using Evolution API
Permanently delete a WhatsApp instance from the server
Retrieves all WhatsApp groups for a given instance
Get a list of all WhatsApp instances or a specific one by name
Find WhatsApp chats with optional filtering by ID, name, or archive status
No documented output schemas for any tool. LLMs cannot plan downstream tool calls or extract required fields without knowing what these tools return. Current state forces agents to guess at response structure.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-22 | F | 46 | 2026-07-28+ | v2 |
| 2026-03-09 | F | 44 | - | v1 |
Find WhatsApp contacts with optional filtering by ID or name
Find a WhatsApp group by its JID (Group ID)
Find all members of a WhatsApp group by its JID (Group ID)
Check the connection state of a WhatsApp instance (connected or disconnected)
Get information about the Evolution API server, including version and status
Retrieve the current behavior settings for a WhatsApp instance including call handling, message receipts, and online status settings
Retrieve the current webhook configuration for a WhatsApp instance
Logout from a WhatsApp instance (disconnect without deleting the instance)
Restart a WhatsApp instance to reset connections or apply changes
Send a message with interactive buttons to a WhatsApp contact or group
Send contact information to a WhatsApp contact or group
Send a list message to a WhatsApp contact or group
Send a location/coordinates to a WhatsApp contact or group
Send a media file (image, video, audio) to a WhatsApp contact or group
Send a plain text message to a WhatsApp contact or group
Send a poll/voting message to a WhatsApp contact or group
Send an emoji reaction to a WhatsApp message
Send a status update (story) to WhatsApp
Send a sticker to a WhatsApp contact or group
Send an audio file to a WhatsApp contact or group
Set the presence/online status of a WhatsApp instance
Update the behavior settings for a WhatsApp instance
Set or update the webhook configuration for a WhatsApp instance
An example tool
Parameter descriptions are minimal and lack constraint information. For example, 'presence' in set_evolution_presence lists examples ('available', 'unavailable', 'typing') in the description instead of using an enum schema constraint. Parameters like 'events' in set_evolution_webhook and 'settings' in set_evolution_settings have vague descriptions ('Array of events', 'Settings object') with no detail on allowed values or structure.
Repetitive send_* tools (send_media, send_audio, send_sticker, send_location, send_contact, send_reaction, send_poll, send_list, send_buttons) each do nearly the same thing with different payload types. These should be unified into a single send_message tool accepting a content_type enum and typed payload, reducing cognitive load on the LLM and improving composability.
Parameter descriptions lack clarity on dependencies and prerequisites. For example, many tools require an 'instanceName' but don't document that the instance must first be created with create_evolution_instance and connected with connect_evolution_instance. This forces agents to guess the correct sequence.
No visible error handling, recovery guidance, or error classification in tool implementations. Code samples are incomplete, but no evidence of actionable error messages, retry hints, or categorization of errors as retryable vs user-fixable vs fatal.
Tool 'some_function' appears to be a placeholder example that should not be exposed to agents. Its description 'An example tool' and trivial 'name' parameter provide no value and confuse the tool catalog.
Filter parameters (e.g., 'where' in find_chats, find_contacts) and optional object parameters (e.g., 'settings' in set_evolution_settings, 'events' array in set_evolution_webhook) lack formal schema definitions. Descriptions state 'Optional filter object' or 'Settings object' without detailing allowed properties, types, or format.
No indication of which operations support dry-run, confirmation, or rollback. Destructive tools like delete_evolution_instance should clearly state whether they require explicit confirmation and should offer an idempotent delete (do not error if already deleted).