Gmail MCP server with auto authentication support
Gmail MCP server has 15 tools with complete input schemas and descriptions, but quality is inconsistent. Tool names follow verb_noun convention (send_email, read_email, delete_email). Descriptions are present but generic, most are 20-50 chars, below the 50-200 char baseline for LLM optimization. Parameter descriptions exist but lack actionable constraints (e.g., no format specs, no enum values for visibility fields). Output schemas are not documented. Error handling is absent from visible code. No tool annotations (readOnlyHint, destructiveHint, idempotentHint) despite clear risk levels. Composition is reasonable, tools are single-purpose, but some parameter relationships are undocumented (e.g., labelIds vs addLabelIds vs removeLabelIds in modify_email).
Create a new Gmail filter
Create a new Gmail label
Delete an email message permanently
Delete a Gmail filter
Delete a Gmail label
Find a Gmail label by name
Get a specific Gmail filter by ID
Descriptions are too short (20-50 chars) and lack actionable context. E.g., 'Modify email labels and properties' does not explain when to use modify_email vs other tools or what 'properties' means. LLMs cannot reliably select the right tool.
No output schemas documented. Tools return data but LLMs cannot plan downstream calls without knowing field names and types. E.g., search_emails returns results but structure is invisible.
Parameter descriptions lack constraints. E.g., messageListVisibility and labelListVisibility in create_label have no enum values, format specs, or valid options documented. LLMs will hallucinate invalid values.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | D | 56 | 2026-07-28+ | v2 |
Get an existing label or create it if it doesn't exist
List all Gmail filters
List all Gmail labels
Modify email labels and properties
Read a specific email message
Search for emails using Gmail search query
Send an email message
Update an existing Gmail label
No tool annotations (readOnlyHint, destructiveHint, idempotentHint) despite clear risk levels. delete_email and delete_filter are destructive but unmarked. Agents cannot distinguish safe from dangerous operations.
Parameter relationships undocumented. modify_email accepts labelIds, addLabelIds, and removeLabelIds, are they mutually exclusive? Can you pass all three? LLMs will guess wrong.