An MCP server for Gmail integration that provides email sending and inbox reading capabilities via Google's Gmail API
GmailMCPServer has only 1 tool (send_email) with a basic but incomplete schema. The tool has a verb-based name (send_email) and minimal parameter descriptions. The schema is visible and typed, but descriptions are terse (under 20 chars for most fields) and lack actionable guidance. The tool does not explain when to use it, what happens on error, or recovery paths. No idempotency guidance, no rate-limit documentation, no dry-run/confirmation pattern despite being a write operation. The resource (read_recent_inbox) is present but tool-specific scoring focuses on send_email. Overall, this server provides basic structure but falls short of production-grade quality for an agent-facing tool.
send_email description is minimal (12 characters inferred from code), does not explain WHAT the tool does, WHEN to use it, or what to do if it fails.
Parameter descriptions are missing or trivial. 'to', 'subject', and 'body' have minimal inline descriptions ('Recipient email address', 'Email subject line', 'Email body content'), each under 50 chars, offering no format guidance, validation rules, or error recovery hints.
No error handling or recovery guidance. If send_email fails (invalid email, auth error, rate limit), the code returns a generic success string with no indication of actual outcome. LLM has no way to know if the call succeeded or failed, and no guidance on what to do next.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-22 | F | 49 | 2026-07-28+ | v2 |
| 2026-03-09 | F | 41 | - | v1 |
No idempotency or confirmation pattern. send_email is a destructive write operation (sends email to recipient) with no dry-run, no confirmation step, and no idempotency guarantee. Agents retrying on transient errors may send duplicate emails.
No input validation. The code does not validate 'to' as a valid email address, 'subject' or 'body' for content length, or handle edge cases (empty strings, special characters). Invalid input from LLM passes through to Gmail API and may fail silently or with unhelpful errors.
Output schema not documented. The function returns a string 'Email sent to {to}', but there is no formal documentation of the response structure, success indicators, or failure codes. LLM must infer meaning from the raw string.
Credentials hardcoded in runtime (token.json). The server expects a pre-existing token.json file but does not validate its existence or handle missing credentials gracefully. If token.json is missing or expired, the tool fails with a cryptic error instead of guiding the user/agent to regenerate it.
No rate limiting or throttling. Gmail API has rate limits; repeated calls from an agent could trigger rate-limit errors. No guidance on backoff, retry delay, or quota exceeded handling.