WhatsApp, Gmail watch, and Telegram MCP servers for AI agents
Gmail tools have well-structured schemas with proper Zod validation and type definitions. Descriptions are present and moderately detailed (avg ~120 chars). However, several parameter descriptions lack actionable constraints, and output schemas are not formally documented. Tool naming follows verb_noun convention (gmail_*). Error handling exists but lacks recovery guidance. The 'gmail_send_and_watch' tool violates single-responsibility principle by combining send + watch creation, though this is intentional for race-safety. No secrets exposed in parameters (good). Annotations present for read-only and idempotent hints.
Explicitly close a Gmail logical watch when the sender appears finished and the objective is clear. Does not stop the mailbox-level Gmail users.watch infrastructure.
List Gmail logical watches without secrets.
Read the Gmail account identity used by this MCP.
Send a normal email without opening a watch.
Open a logical watch and send an email in one race-safe workflow. The watch is created before send and linked to the returned Gmail thread. If sending fails, the new watch is closed.
Update an active Gmail logical watch.
gmail_send_and_watch violates single-responsibility principle by combining email send + watch creation. While intentional for race-safety, this makes the tool harder to reason about and limits composability. Consider documenting the race-safety requirement explicitly.
Parameter descriptions lack actionable constraints. E.g., 'objective' is described as 'Watch objective' but does not explain valid formats, length limits, or examples. 'permissions' array lacks documentation of valid permission strings.
Output schemas are not formally documented. Tools return compactJson(safe(...)) but the structure of returned objects is not specified in tool definitions. LLMs cannot plan downstream calls without knowing response fields.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | C | 60 | 2026-07-28+ | v2 |
Open a persistent logical Gmail watch without sending email. Match one Gmail thread or exact correspondent addresses. The infrastructure mailbox watch remains independent.
Error handling lacks recovery guidance. Validation errors (e.g., 'gmailThreadId is required for matchMode=thread') are thrown but do not suggest corrective actions or alternative tools.
_hermesOrigin parameter is marked 'injected automatically' but is exposed in the schema. This creates confusion about whether agents should provide it. If truly injected, remove from schema; if optional, clarify when/why agents would set it.