A client application that connects to a WhatsApp MCP server to enable AI agents (via Agno or Pydantic AI) to interact with WhatsApp through MCP tools. Acts as a consumer of MCP tools, not a server.
This MCP client demonstrates poor definition quality across multiple dimensions. While tool names follow verb-noun convention (search_contacts, list_messages, send_message), descriptions are present but lack depth and actionable guidance. Most critically, no output schemas are documented anywhere in the visible source code. Parameters have type definitions and basic descriptions, but lack constraints, ranges, enums, or guidance on how values should be formatted. The tool definitions appear to be inferred from the agent's instruction text and MCPTools wrapper rather than explicitly visible schema registration. Error handling is absent, no recovery guidance, retryability classification, or actionable error messages. The send_message tool (the only WRITE operation) has no confirmation or dry-run pattern despite its destructive nature. Security concerns: no mention of permission gates, audit logging, or secret injection patterns.
Get chat metadata by JID
Get all chats involving a specific contact
Get chat metadata by sender phone number
Get most recent message involving a contact
Get context around a specific message
Get chats matching criteria
Get messages matching criteria with optional context
Search contacts by name or phone number
No output schemas documented. Tools lack specification of what fields they return and their types. LLMs cannot plan downstream tool calls or extract relevant data without knowing response structure.
Parameter constraints missing. Numeric parameters (limit, page, before, after) lack min/max bounds. Enum parameters like sort_by lack defined valid options. Format specifications absent (e.g., phone_number format, date_range syntax, JID format).
send_message lacks confirmation/dry-run pattern. As the only WRITE operation with potential irreversible consequences (sending to wrong recipient), it should support a confirmation step to prevent agent mistakes. No destructive hint annotation visible.
Inferred effective spec: <=2025-11-25.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-22 | F | 38 | <=2025-11-25 | v2 |
| 2026-03-09 | F | 31 | - | v1 |
Send a message to a person or group
No error handling guidance. Tools have no documented error responses, recovery steps, or error classification (retryable vs user-fixable vs fatal). Error messages like 'Invalid query' or 'Chat not found' would provide no actionable guidance to the LLM.
Descriptions too generic and lack context. 'Search contacts by name or phone number' (54 chars) and 'Get messages matching criteria' (30 chars) do not explain WHEN to call these tools, what prerequisites exist, or how they differ from similar tools. Most descriptions fall below the 50-200 char production baseline.
Tool definitions inferred rather than explicitly registered. Source code shows tool names and parameters only in agno_mcp_agent.py instructions and comments, not in explicit schema registration code. Actual MCP schema definitions not visible in provided source.
No pagination result limits enforced. list_messages and list_chats accept limit parameters but do not specify caps. Missing guidance on default limits, maximum acceptable values, and total result count in responses.
Response chaining IDs undocumented. Tools like list_chats and list_messages likely need to return chat_jid and message_id to enable agent follow-up calls, but no schema visible to confirm these fields are included.
No security documentation. No mention of permission gates, secret injection, audit logging, scope declarations, or input sanitization. send_message appears to accept raw user input (recipient, message) with no visible validation or sanitization against injection attacks.