Email MCP Server for Gmail - Send emails via Gmail API
Two tools with basic schemas and descriptions, but significant gaps in parameter documentation and error guidance. send_email has a complete input schema with 6 properties (to, subject, body, cc, bcc, attachments) and descriptions for each. draft_email has 5 properties with descriptions. However, parameter descriptions are minimal (10-30 chars), lacking format constraints, validation rules, or dependency hints. No output schemas documented. Error handling returns generic text responses without recovery guidance. Tool descriptions mention 'Requires approval' for send_email but provide no mechanism or detail. Missing idempotency guidance for a tool that performs irreversible actions (send_email marked IRREVERSIBLE). No tool annotations (destructiveHint, idempotentHint) present.
Create a draft email in Gmail (does not send)
Send an email via Gmail API. Requires approval before sending.
Parameter descriptions are too brief (10-30 chars) and lack format constraints. 'Recipient email address' for 'to' does not specify valid email format, whether multiple recipients are supported, or error handling for invalid addresses.
No output schema documented. Callers cannot predict response structure (fields, types, pagination). Error responses return plain text with 'isError: true' but no structured error codes or recovery guidance.
send_email description claims 'Requires approval before sending' but no approval mechanism is visible in the code. Tool executes immediately without confirmation or dry-run support, contradicting the description.
No tool annotations present. send_email (IRREVERSIBLE) and draft_email (WRITE) lack destructiveHint and idempotentHint annotations to signal to LLMs that these are state-modifying operations requiring caution.
Inferred effective spec: <=2025-11-25.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | F | 48 | <=2025-11-25 | v2 |
Error handling returns generic text ('Error sending email: <message>') without actionable recovery steps. LLM cannot determine if error is retryable, user-fixable, or fatal.