Comprehensive Gmail integration for Claude Code - provides MCP tools for reading, searching, sending emails, managing labels, creating drafts, and OAuth authentication with Gmail API
The server defines 9 tools with complete naming following verb_noun convention, but exhibits significant gaps in parameter descriptions, output schema documentation, and error handling. Tool names are clear and action-oriented (read_emails, send_email, search_emails, etc.), but parameter descriptions are inconsistent, some parameters like 'message_ids' in mark_as_read and add_labels lack detailed format guidance. No output schemas are documented for any tool, forcing LLMs to infer result structure. Error handling is absent from the provided code; no recovery guidance or error categorization visible. The server follows the MCP SDK patterns but lacks polish in descriptions and schema completeness expected of production-grade agents tools.
Add labels to emails
Create a draft email in Gmail (saves to drafts folder without sending)
Get OAuth2 authorization URL for Gmail API access (for initial setup)
Get a complete email thread/conversation by thread ID
Get all Gmail labels/folders
Mark emails as read
Read emails from Gmail inbox with optional filters and limits
No output schemas documented for any tool. LLMs cannot predict result structure, forcing them to infer field names and types. This violates the response-shaper pattern and wastes LLM tokens on discovery.
Error handling completely absent. No recovery guidance, categorization (retryable vs. fatal), or actionable error messages visible in code. Tools throw generic errors without context for LLM recovery.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-22 | F | 47 | 2026-07-28+ | v2 |
| 2026-03-09 | F | 0 | - | v1 |
Search emails with advanced Gmail search syntax
Send an email through Gmail
Parameter descriptions lack detail on format, constraints, and valid values. 'message_ids' (used in mark_as_read and add_labels) has no guidance on format or source. 'label_ids' similarly underdocumented.
Descriptions for get_labels and get_auth_url are minimal (under 30 chars), providing insufficient context for LLM tool selection.
No idempotency guarantees or confirmation workflow for destructive operations. send_email and create_draft are write operations but lack confirmation/dry-run pattern. Agents may accidentally send multiple copies.
No pagination guidance in read_emails or search_emails despite max_results capping at 100. No documentation of cursor, offset, or next_page behavior when results exceed limit.
OAuth2 credential flow (get_auth_url, token.json path, credentials.json) exposes token file paths and requires manual credential setup. No runtime validation or clear error messages if token is missing/expired.