Server has well-structured Pydantic schemas with type definitions and descriptions for all parameters. Tool names follow verb_noun convention (gmail_login, gmail_search, etc.). Descriptions are present and contextual, averaging ~150 chars. However, output schemas are not documented, responses are inferred from code, not declared. HITL approval flow for destructive operations is well-designed but lacks explicit error recovery guidance. Missing parameter constraints (e.g., enums for label_list_visibility). No documented return types or field mappings for chaining tools.
Add or remove labels from messages. This is idempotent and read-safe.
Archive emails by removing them from inbox. Requires human approval.
Enable natural language queries about inbox contents.
Create a new Gmail label. Requires human approval.
Permanently delete emails. Requires human approval.
Download an email as .eml file, saves HTML body as .html, and extracts file attachments to a local directory.
Output schemas not documented. Tool descriptions state what is returned (e.g., 'Returns structured data suitable for AI summarization') but do not specify field names, types, or structure. LLMs cannot plan downstream tool calls or extract required fields without explicit schema documentation.
gmail_search and gmail_chat_inbox have minimal descriptions (<60 chars). 'Search emails using Gmail's query syntax' and 'Enable natural language queries about inbox contents' lack context for when to use each tool vs. alternatives, and do not explain what data is returned.
gmail_organize_labels accepts 'operations' as array of generic objects with no schema. Parameter description states format as '[{"action": "rename", "label_id": "...", "new_name": "..."}]' but does not define allowed actions, required fields per action, or validation rules. LLMs cannot construct valid payloads without explicit enum/schema.
Inferred effective spec: 2026-07-28+.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | C | 61 | 2026-07-28+ | v2 |
Get context for drafting a reply to a thread. Fetches the latest message in a thread and returns structured context to help draft a reply.
Check if the user is authenticated with Gmail. Returns the authentication status, user email, server mode, and scope information. If token scopes don't match the current mode's expected scopes, scope_mismatch will be True and the user should re-authenticate with gmail_login.
Sign in to Gmail using local server OAuth flow. Opens a browser to the Google consent page. After the user approves, the callback is received on localhost and tokens are stored.
Sign out of Gmail by clearing stored credentials. Removes the stored OAuth token and invalidates any cached Gmail API service. The user will need to re-authenticate using gmail_login to use other Gmail tools.
Perform batch label operations (rename, nest, delete). Requires human approval due to destructive nature. Operations format: [{"action": "rename", "label_id": "...", "new_name": "..."}]
Search emails using Gmail's query syntax.
Send an email to specified recipients. Requires human approval before execution. The two-step HITL flow: 1. First call (approval_id=None): Returns preview for user confirmation 2. Second call (approval_id set): Executes the send after validation
Get all messages in a thread for summarization. Fetches a full thread with all messages and returns structured data suitable for AI summarization. Each message includes headers and body content (truncated to prevent token overflow).
Triage inbox by categorizing emails by urgency and importance. Analyzes inbox messages and categorizes them into: - urgent: Time-sensitive emails requiring immediate attention - other: Regular emails (personal, work correspondence) - social: Social media notifications - newsletter: Marketing emails and newsletters Results are sorted by priority (urgent first) then by date (newest first).
Unsubscribe from mailing lists using List-Unsubscribe header. Requires human approval.
gmail_create_label parameters 'label_list_visibility' and 'message_list_visibility' default to strings ('labelShow', 'show') but lack enum constraints or documentation of valid values. LLMs may hallucinate invalid values like 'hidden' or 'labelHide'.
HITL approval flow (gmail_send_email, gmail_delete_email, etc.) lacks explicit error recovery guidance. If approval_id validation fails or expires, tool description does not tell LLM what to do next (retry step 1? ask user? abort?).