Gmail MCP Server — read, send, search and manage Gmail through Claude using Google's official API and OAuth 2.0. 19 tools for emails, drafts, labels, threads, and attachments.
This Gmail MCP server provides 19 tools with complete input schemas and descriptions. Tool names follow the verb_noun convention (gmail_search, gmail_send, etc.) and are clear. However, there are significant gaps in parameter descriptions, missing output schema documentation, and no error handling guidance. Most tools lack information about what fields they return, pagination behavior, or what errors users should expect. Descriptions are adequate (mostly 50-150 chars) but could be more actionable. Parameter validation constraints (ranges, formats, enums) are largely absent. The server is functional but needs refinement for production-grade LLM interaction.
Create a draft email
Create a new label
Delete a draft email
Delete a label
Download an attachment from an email (returns base64 encoded data)
Get the full content of a specific email by its ID
Get the user's Gmail profile (email address, total messages, etc.)
Missing output schema documentation for all tools. Code shows inputSchema but no documented return types. LLMs cannot plan downstream operations without knowing what fields a tool returns.
No pagination documented for list/search tools. gmail_search and gmail_list_drafts accept maxResults but do not document cursor, offset, or total_count in return. Large result sets risk context window exhaustion.
No error handling guidance in descriptions. Destructive tools (gmail_delete_draft, gmail_delete_label) and write operations (gmail_send, gmail_create_draft) lack recovery hints or confirmation steps. LLMs cannot determine whether to retry, what error messages mean, or how to undo mistakes.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-22 | D | 58 | 2026-07-28+ | v2 |
| 2026-03-09 | F | 0 | - | v1 |
Get all messages in an email thread
List all attachments in an email
List all draft emails
List all labels in the mailbox
Mark an email as read
Mark an email as unread
Add or remove labels from an email
Search for emails using Gmail search syntax. Supports queries like 'from:example@gmail.com', 'subject:meeting', 'is:unread', 'after:2024/01/01', etc.
Send an email
Send an existing draft
Move an email to trash
Remove an email from trash
Parameter format constraints missing. 'to', 'cc', 'bcc' in gmail_send and gmail_create_draft lack email format validation hints. 'threadId' and 'messageId' lack documentation about their format or required pattern. LLMs may pass invalid or hallucinated IDs.
No response chaining support documented. If gmail_search returns messageId, the tool description should indicate that messageId can be passed to gmail_get_message to fetch full content. Missing chaining hints force extra discovery calls.
No idempotency guarantees stated. gmail_send and gmail_create_draft could create duplicates if retried. No indication of whether these operations are idempotent or support deduplication via request IDs.
Parameters named ambiguously. 'threadId' and 'messageId' are opaque system IDs. Users say 'reply to the email from Bob about the meeting', not 'reply to threadId abc123'. Tool should accept natural identifiers (subject lines, timestamps) or document how to obtain IDs.
No batch operations for label management. Adding labels to 10 emails requires 10 separate gmail_modify_labels calls. A batch variant would reduce token waste and latency.
No confirmation mechanism for destructive operations. Agents can call gmail_delete_draft or gmail_delete_label without intermediate verification. One hallucinated parameter could delete all labels or drafts.