Gmail MCP Server
Provides read-only access to Gmail inbox with natural language search, email categorization, daily summaries organized by category (Navy, Kids, Financial, Action Items), and inbox statistics.
Uses Google Cloud Console for OAuth credential management and Gmail API access configuration to authenticate and interact with Gmail services.
Exposes REST API endpoints for Home Assistant sensors to monitor unread email counts by category, trigger daily summary notifications via webhooks, and integrate Gmail data into Home Assistant automations.
Click on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@Gmail MCP Servershow me unread emails from yesterday"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
Gmail MCP Server
A Model Context Protocol (MCP) server for Gmail that provides natural language interaction with your inbox, daily summaries organized by category, and Home Assistant integration.
Features
π Natural Language Search - Search emails using plain language or Gmail query syntax
π Category-Based Summaries - Automatic categorization: Navy, Kids, Financial, Action Items
π± Home Assistant Integration - REST API with sensors and notifications support
π³ Docker Support - Easy deployment with Docker Compose
π Read-Only - Currently read-only access to your inbox (safe!)
Related MCP server: Gmail MCP Server
Quick Start
1. Google Cloud Setup
Go to Google Cloud Console
Create a new project or select existing
Enable the Gmail API:
Navigate to "APIs & Services" β "Enable APIs"
Search for "Gmail API" and enable it
Create OAuth credentials:
Go to "APIs & Services" β "Credentials"
Click "Create Credentials" β "OAuth client ID"
Choose "Web application" (or "Desktop app")
For Web application, add
http://localhost:8080to Authorized redirect URIsCopy the Client ID and Client Secret
2. Configuration
# Clone and enter directory
cd mcp_gmail
# Copy example environment file
cp .env.example .env
# Edit .env with your credentials
# GOOGLE_CLIENT_ID=your-client-id.apps.googleusercontent.com
# GOOGLE_CLIENT_SECRET=your-client-secret3. Initial Authentication (OAuth)
For the first-time setup, you need to authenticate with Google:
# Run the auth setup container
docker compose --profile setup run --rm gmail-mcp-authThis will:
Open a browser window for Google authentication
Request permission to read your Gmail
Save the OAuth token to
./credentials/token.json
4. Start the Server
# Start the main server
docker compose up -d
# Check logs
docker compose logs -f gmail-mcpThe REST API will be available at http://localhost:8000
API Endpoints
Health & Status
Endpoint | Description |
| Health check with auth status |
| Inbox statistics |
Email Data (for Home Assistant Sensors)
Endpoint | Description |
| Total unread count |
| Unread count per category |
Summaries
Endpoint | Description |
| Full daily summary (JSON) |
| Daily summary as text |
| Category-specific summary |
Home Assistant Integration
Endpoint | Description |
| Send summary to HA webhook |
Home Assistant Configuration
REST Sensors
Add to your configuration.yaml:
sensor:
- platform: rest
name: Gmail Unread
resource: http://gmail-mcp:8000/api/unread
value_template: "{{ value_json.unread }}"
scan_interval: 300
json_attributes:
- timestamp
- platform: rest
name: Gmail Categories
resource: http://gmail-mcp:8000/api/unread/categories
value_template: "{{ value_json.total }}"
scan_interval: 300
json_attributes:
- navy
- kids
- financial
- action_required
- otherTemplate Sensors (from attributes)
template:
- sensor:
- name: "Gmail Navy Unread"
state: "{{ state_attr('sensor.gmail_categories', 'navy') }}"
icon: mdi:anchor
- name: "Gmail Kids Unread"
state: "{{ state_attr('sensor.gmail_categories', 'kids') }}"
icon: mdi:human-child
- name: "Gmail Financial Unread"
state: "{{ state_attr('sensor.gmail_categories', 'financial') }}"
icon: mdi:currency-usd
- name: "Gmail Action Required"
state: "{{ state_attr('sensor.gmail_categories', 'action_required') }}"
icon: mdi:alert-circleAutomation: Daily Summary Notification
automation:
- alias: "Daily Email Summary"
trigger:
- platform: time
at: "07:00:00"
action:
- service: rest_command.gmail_summary
- service: notify.mobile_app
data:
title: "π§ Email Summary"
message: "{{ states('sensor.gmail_summary_text') }}"
rest_command:
gmail_summary:
url: "http://gmail-mcp:8000/api/webhook/trigger"
method: POSTWebhook Integration
Configure in your .env:
HA_WEBHOOK_URL=http://homeassistant.local:8123/api/webhook/gmail_summary
HA_LONG_LIVED_TOKEN=your-long-lived-access-tokenThen create an automation triggered by the webhook:
automation:
- alias: "Gmail Webhook Handler"
trigger:
- platform: webhook
webhook_id: gmail_summary
action:
- service: notify.mobile_app
data:
title: "π§ {{ trigger.json.event_type }}"
message: "{{ trigger.json.data.text_summary }}"MCP Server Usage
The MCP server can be used with Claude Desktop, Home Assistant, or other MCP clients via SSE transport.
Claude Desktop Configuration
Add to your Claude Desktop config (claude_desktop_config.json):
{
"mcpServers": {
"gmail": {
"command": "npx",
"args": ["-y", "mcp-remote", "http://YOUR_SERVER_IP:8001/mcp/sse", "--allow-http"]
}
}
}Home Assistant MCP Integration
The server exposes SSE endpoints for MCP connections:
/mcp/sse- Primary MCP SSE endpoint/sse- Alias endpoint for Home Assistant compatibility
Available MCP Tools
Tool | Description |
| Search emails with query and optional filters |
| Get full email content by ID |
| List unread emails with optional category filter |
| Generate categorized daily summary |
| Summary for a specific category |
| Current inbox statistics |
| List all Gmail labels |
| Create a new Gmail label |
| Delete a Gmail label |
| Show configured categories |
| Mark specific emails as read by IDs |
| Mark emails matching a query as read |
| Send an email (plain text or HTML) |
| Add labels to messages |
| Remove labels from messages |
Example Queries
"What unread emails do I have about Navy?"
"Show me my daily email summary"
"Are there any action items I need to handle?"
"Search for emails from the school"
"What financial emails came in this week?"
Customizing Categories
Edit config/categories.yaml to customize email categorization:
categories:
navy:
name: "Navy / Military"
priority: high
matchers:
senders:
- "@navy.mil"
- "@mail.mil"
subjects:
- "orders"
- "deployment"
labels:
- "Navy"Matcher Types
senders: Partial match on sender email/name
subjects: Partial match on subject line
labels: Exact match on Gmail labels
Development
Local Setup (without Docker)
# Create virtual environment
python -m venv venv
source venv/bin/activate # or `venv\Scripts\activate` on Windows
# Install in development mode
pip install -e ".[dev]"
# Run authentication
mcp-gmail-auth
# Run the API server
mcp-gmail-api
# Or run the MCP server (stdio)
mcp-gmailRunning Tests
pytest
pytest --cov=mcp_gmailArchitecture
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β Gmail MCP Server β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ€
β MCP Interface (stdio) REST API (FastAPI) β
β βββ Tools for Claude βββ Endpoints for HA β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ€
β Gmail Client β
β βββ Search & List βββ Categorization β
β βββ OAuth2 Auth βββ Summary Generation β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ€
β Gmail API β
β βββ google-api-python-client β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββRoadmap
Read-only email access
Category-based summaries
Home Assistant REST API
Docker deployment
Email sending
Gmail labels management (create, delete, add to messages, remove from messages)
Mark emails as read
SSE transport with session isolation
Gemini-compatible tool schemas
Scheduled summary notifications
IMAP fallback option
License
MIT License
Troubleshooting
OAuth Token Expired
# Re-run authentication
docker compose --profile setup run --rm gmail-mcp-authContainer Won't Start
Check that credentials exist:
ls -la credentials/
# Should contain token.jsonHome Assistant Can't Connect
Ensure the container is on the same Docker network or use the host IP:
resource: http://192.168.1.100:8000/api/unreadAvailable Tools
20 toolsgmail_add_label_to_messagesB
Add a label to one or more messages. Can specify messages by IDs or by search query.
| Name | Required | Description | Default |
|---|---|---|---|
| label_name | No | Name of the label to add. Provide either label_name or label_id. | |
| label_id | No | ID of the label to add. Provide either label_name or label_id. | |
| message_ids | No | Comma-separated list of message IDs to add the label to. | |
| query | No | Gmail search query to find messages. Alternative to message_ids. | |
| max_messages | No | Maximum messages to modify when using query. Default 100, max 500. | |
| confirm | Yes | Must be true to actually modify. Set false to preview. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It mentions the action ('Add a label') and selection methods, but lacks details on permissions needed, rate limits, error handling, or what happens if the label doesn't exist. For a mutation tool with zero annotation coverage, this is a significant gap.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, efficient sentence that front-loads the core purpose and key usage methods. Every word earns its place with no redundancy or unnecessary elaboration.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's moderate complexity (6 parameters, mutation operation) and lack of annotations or output schema, the description is minimally adequate. It covers the basic purpose and selection methods but misses behavioral details like side effects or return values, leaving gaps for an AI agent.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents all parameters thoroughly. The description adds minimal value by mentioning 'IDs or by search query', which aligns with the schema's message_ids and query parameters. Baseline 3 is appropriate when the schema does the heavy lifting.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('Add a label') and target ('to one or more messages'), distinguishing it from sibling tools like gmail_remove_label_from_messages. However, it doesn't explicitly differentiate from other labeling tools like gmail_create_label or gmail_rename_label, which keeps it from a perfect score.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage by specifying two methods for selecting messages (IDs or search query), but it doesn't provide explicit guidance on when to use this tool versus alternatives like gmail_mark_as_read_by_ids or gmail_remove_label_from_messages. No exclusions or prerequisites are mentioned.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
gmail_category_summaryC
Get a summary of unread emails in one specific category. Returns email count and list of emails matching that category.
| Name | Required | Description | Default |
|---|---|---|---|
| category | Yes | Category to summarize. Must be one of: navy, kids, financial, action_required. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden of behavioral disclosure. It mentions the tool returns 'email count and list of emails matching that category,' which adds some context about output behavior. However, it lacks critical details: it doesn't specify if this is a read-only operation (implied by 'Get' but not explicit), whether it requires authentication or permissions, any rate limits, or how the list is formatted (e.g., pagination, fields included). For a tool with no annotations, this is insufficient.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is appropriately sized with two sentences that are front-loaded: the first states the purpose, and the second specifies the return values. There's no wasted text, and it efficiently conveys core information. However, it could be slightly more structured by explicitly separating purpose from behavior, but it's still concise and clear.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool has one parameter with full schema coverage and no output schema, the description is moderately complete. It covers the basic purpose and return values, but lacks depth: it doesn't explain the category semantics, authentication needs, or error handling. For a simple read operation, this is adequate but has clear gaps, especially in behavioral context due to missing annotations.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, with the schema fully documenting the single parameter 'category' and its allowed values. The description adds no additional meaning beyond what the schema providesβit doesn't explain the semantics of categories (e.g., what 'navy' or 'action_required' mean) or provide usage examples. With high schema coverage, the baseline is 3, as the description doesn't compensate but doesn't detract either.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose: 'Get a summary of unread emails in one specific category.' It specifies the verb ('Get a summary') and resource ('unread emails in one specific category'), and distinguishes it from siblings like 'gmail_list_unread' by focusing on categorization. However, it doesn't explicitly differentiate from 'gmail_get_categories' (which might list categories) or 'gmail_daily_summary' (which might summarize by time), so it's not fully sibling-aware.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus alternatives. It doesn't mention when to choose this over 'gmail_list_unread' (which lists all unread emails) or 'gmail_get_categories' (which might provide category information). There's no context about prerequisites, such as needing unread emails in the specified category, or exclusions. Usage is implied by the purpose but not explicitly stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
gmail_create_labelB
Create a new Gmail label with optional custom colors. Returns the new label's ID.
| Name | Required | Description | Default |
|---|---|---|---|
| label_name | Yes | Name for the new label. Use forward slashes for nested labels (e.g., 'Projects/Work'). | |
| background_color | No | Hex color code for label background (e.g., '#16a765'). Optional. | |
| text_color | No | Hex color code for label text (e.g., '#ffffff'). Optional. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries full burden for behavioral disclosure. It states the tool creates a new label and returns an ID, but lacks critical details: it doesn't mention authentication requirements, rate limits, error conditions (e.g., duplicate label names), or whether the operation is idempotent. For a mutation tool with zero annotation coverage, this is a significant gap.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, efficient sentence that front-loads the core purpose ('Create a new Gmail label') and includes key details (optional colors, return value) without any wasted words. Every part earns its place by adding value.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given this is a mutation tool with no annotations and no output schema, the description is incomplete. It mentions the return value (ID) but lacks other critical context: authentication needs, error handling, or behavioral traits like idempotency. For a tool that modifies Gmail state, this leaves significant gaps for an AI agent.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already fully documents all three parameters (label_name, background_color, text_color) with descriptions and optionality. The description adds no additional parameter semantics beyond what's in the schema, such as format examples or constraints, so it meets the baseline of 3.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the specific action ('Create a new Gmail label') and resource ('Gmail label'), distinguishing it from siblings like gmail_list_labels (read) or gmail_delete_label (delete). It also mentions the optional feature of custom colors, adding specificity beyond just the basic creation function.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus alternatives. It doesn't mention prerequisites (e.g., needing authentication), compare it to similar tools like gmail_rename_label for modifying existing labels, or specify scenarios where creating a label is appropriate versus unnecessary.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
gmail_daily_summaryC
Generate a summary of recent emails organized by category. Shows unread counts and top emails in each category (Navy, Kids, Financial, Action Items).
| Name | Required | Description | Default |
|---|---|---|---|
| hours | No | How many hours back to look for emails. Default is 24 hours. | |
| include_read | No | Whether to include already-read emails. Default is false (unread only). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It mentions 'shows unread counts and top emails' but doesn't specify what 'top emails' means (e.g., by recency, importance), whether this is a read-only operation, if it requires authentication, or any rate limits. For a tool that processes email data, this leaves critical behavioral aspects undocumented.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise and front-loaded, stating the core purpose in the first sentence. The second sentence adds useful detail about the summary content. Both sentences earn their place by clarifying the tool's output, though it could be slightly more structured (e.g., explicitly separating purpose from features).
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the complexity of email summarization, no annotations, and no output schema, the description is incomplete. It doesn't explain the return format (e.g., structured data vs. text), how categories are determined, or what 'top emails' entails. For a tool with behavioral nuances and no structured output documentation, this leaves significant gaps for the agent.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema fully documents both parameters (hours and include_read). The description adds no parameter-specific information beyond what's in the schema, such as how hours affects categorization or the implications of include_read. With high schema coverage, the baseline score of 3 is appropriate as the description doesn't enhance parameter understanding.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose: 'Generate a summary of recent emails organized by category' with specific categories listed (Navy, Kids, Financial, Action Items). It distinguishes from siblings like gmail_list_unread or gmail_inbox_stats by focusing on categorized summaries rather than raw lists or statistics. However, it doesn't explicitly differentiate from gmail_category_summary, which appears similar.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus alternatives. It doesn't mention when to choose this over gmail_category_summary, gmail_inbox_stats, or gmail_list_unread, nor does it specify prerequisites or exclusions. The lack of usage context leaves the agent guessing about appropriate scenarios.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
gmail_delete_labelA
Delete a Gmail label by name or ID. Cannot delete system labels. Requires confirmation.
| Name | Required | Description | Default |
|---|---|---|---|
| label_name | No | Name of the label to delete. Provide either label_name or label_id. | |
| label_id | No | ID of the label to delete. Provide either label_name or label_id. | |
| confirm | Yes | Must be true to actually delete. Set false to preview what would be deleted. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It adds useful context beyond the schema by stating the tool cannot delete system labels and requires confirmation, which are behavioral traits. However, it does not cover other aspects like error handling, permissions needed, or what happens on deletion (e.g., if messages lose the label).
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded with the core purpose in the first sentence, followed by two concise constraints. Every sentence earns its place by adding critical information (deletion action, system label restriction, confirmation need) without redundancy or fluff.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given no annotations and no output schema, the description is moderately complete for a destructive tool. It covers the action, constraints, and safety mechanism, but lacks details on return values, error cases, or side effects (e.g., impact on labeled messages). For a deletion tool with 3 parameters, this leaves some gaps in contextual understanding.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents all parameters thoroughly. The description adds minimal value beyond the schema by implying the 'confirm' parameter is for safety, but does not provide additional semantics like format examples or edge cases. Baseline 3 is appropriate as the schema does the heavy lifting.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the specific action ('Delete a Gmail label') and resource ('by name or ID'), distinguishing it from siblings like 'gmail_rename_label' or 'gmail_create_label'. It explicitly mentions constraints ('Cannot delete system labels') that differentiate its scope from other label-related tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides clear context on when to use this tool (to delete labels) and when not to (for system labels), but does not explicitly name alternatives like 'gmail_rename_label' or 'gmail_remove_label_from_messages' for different operations. It implies usage through the confirmation requirement but lacks explicit comparison to siblings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
gmail_get_categoriesA
List the configured email categories and their matching rules. Shows how emails are automatically categorized based on sender, subject, and labels.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries full burden. It describes what the tool does (list categories and rules) but lacks behavioral details like whether this requires authentication, if it's a read-only operation, rate limits, or what format the output takes. It doesn't contradict annotations, but provides minimal behavioral context.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two concise sentences that efficiently convey the tool's purpose. The first sentence states the core function, and the second elaborates on what it shows. Every word earns its place with no redundancy or fluff.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with 0 parameters and no output schema, the description adequately explains what it does. However, without annotations or output schema, it lacks details about return format, authentication needs, or error handling. It's complete enough for basic understanding but misses advanced contextual information.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has 0 parameters with 100% schema description coverage, so no parameter documentation is needed. The description doesn't discuss parameters, which is appropriate. Baseline for 0 parameters is 4, as it doesn't need to compensate for any gaps.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose with specific verbs ('List', 'Shows') and resources ('configured email categories and their matching rules', 'how emails are automatically categorized'). It distinguishes from siblings like gmail_list_labels (which lists labels) and gmail_category_summary (which might summarize categories differently).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage for understanding email categorization rules, but doesn't explicitly state when to use this tool versus alternatives like gmail_category_summary or gmail_get_priorities. No exclusions or prerequisites are mentioned, leaving usage context somewhat vague.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
gmail_get_emailA
Get the full content of a specific email by its Gmail message ID. Returns subject, sender, recipients, date, labels, and full body text.
| Name | Required | Description | Default |
|---|---|---|---|
| email_id | Yes | The Gmail message ID obtained from search or list results. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It discloses the tool's read-only nature by stating 'Get' and listing return fields, but it doesn't mention behavioral traits like error handling (e.g., invalid IDs), authentication needs, rate limits, or whether it retrieves attachments. The description adds some context but leaves gaps for a tool with no annotation coverage.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded with the core purpose in the first sentence and efficiently lists return fields in the second. Every sentence earns its place by adding critical information without redundancy, making it appropriately sized and easy to parse.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given no annotations and no output schema, the description is moderately complete for a simple read operation. It covers the purpose, parameter semantics, and return fields, but lacks details on error cases, authentication, or behavioral nuances. For a tool with 1 parameter and no complex outputs, it's adequate but has clear gaps in transparency.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has 1 parameter with 100% coverage, providing a clear description. The description adds value by specifying that the email_id is 'obtained from search or list results,' which clarifies its source beyond the schema's technical definition. This compensates well, though it doesn't detail format constraints beyond what's implied.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the specific action ('Get the full content'), resource ('a specific email'), and key identifier ('by its Gmail message ID'). It distinguishes from siblings like gmail_search (which finds emails) and gmail_list_unread (which lists emails) by focusing on retrieving detailed content for a single identified message.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage when you need detailed email content for a known message ID, but it doesn't explicitly state when to use this versus alternatives like gmail_search (which might return summaries) or prerequisites like needing the ID from another tool. It provides basic context but lacks explicit guidance on exclusions or named alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
gmail_get_packagesA
Get package delivery and shipping notification emails. Finds tracking info from Amazon, UPS, FedEx, USPS, and other carriers. Always includes read emails since you want to track all pending deliveries.
| Name | Required | Description | Default |
|---|---|---|---|
| days_back | No | How many days back to search for package emails. Default is 14 days. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It usefully adds that the tool 'Always includes read emails since you want to track all pending deliveries,' which clarifies scope beyond what the parameter schema indicates. However, it doesn't mention other important behaviors like rate limits, authentication needs, or what happens if no emails are found, leaving gaps for a mutation-free tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is efficiently structured in two sentences: the first states the core purpose, and the second adds crucial behavioral context about including read emails. Every sentence earns its place with no wasted words, making it easy to parse and front-loaded with key information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple read-only tool with one well-documented parameter and no output schema, the description is mostly complete. It clearly explains what the tool does and includes important behavioral context (including read emails). The main gap is lack of output format details, which would be helpful since there's no output schema, but this is partially mitigated by the tool's straightforward purpose.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has 100% description coverage for its single parameter (days_back), so the schema already fully documents it. The description doesn't add any parameter-specific information beyond what's in the schema, such as format details or examples. This meets the baseline of 3 when schema coverage is high.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose with specific verbs ('Get package delivery and shipping notification emails') and resources ('emails from Amazon, UPS, FedEx, USPS, and other carriers'). It distinguishes itself from siblings like gmail_search or gmail_get_email by focusing exclusively on package-related emails with tracking info, not general email retrieval.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides clear context for when to use this tool: to find package tracking emails from specific carriers. It implies an alternative to general search tools by specifying this specialized focus. However, it doesn't explicitly state when NOT to use it or name specific sibling alternatives, which prevents a perfect score.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
gmail_get_prioritiesA
Get priority emails based on the 'known_priorities' category in categories.yaml. Searches for emails matching configured senders (Navy, schools, family) and subjects (orders, deployments, scouts, financial alerts). Automatically excludes routine items like autopay confirmations.
| Name | Required | Description | Default |
|---|---|---|---|
| days_back | No | How many days back to search for priority emails. Default is 7 days. | |
| include_read | No | Whether to include already-read emails. Default is false (unread only). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It describes what the tool does (searches for priority emails with specific criteria) and mentions automatic exclusion of routine items, which is useful behavioral context. However, it doesn't disclose important behavioral aspects like whether this requires specific permissions, rate limits, or what the response format looks like.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is efficiently structured in two sentences that each earn their place. The first sentence states the core purpose and configuration source, while the second provides important behavioral details about search criteria and exclusions. No wasted words or redundant information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with 2 parameters, 100% schema coverage, but no annotations and no output schema, the description provides adequate context about what the tool does and its search criteria. However, it doesn't describe the return format or structure of results, which would be important for an email retrieval tool. The description is complete enough for basic understanding but lacks output details.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already fully documents both parameters (days_back and include_read). The description doesn't add any parameter-specific information beyond what's in the schema. The baseline score of 3 is appropriate when the schema does all the parameter documentation work.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose with specific verb ('Get priority emails') and resource ('based on the known_priorities category in categories.yaml'), and distinguishes it from siblings by specifying it searches for emails matching configured senders and subjects while automatically excluding routine items. This is more specific than generic search tools like gmail_search.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides clear context about when to use this tool - for finding priority emails based on configured categories, senders, and subjects. It distinguishes from generic search by mentioning the automatic exclusion of routine items. However, it doesn't explicitly state when NOT to use it or name specific alternatives among the sibling tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
gmail_inbox_statsB
Get current inbox statistics including total messages, unread count, starred count, and important message count.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden of behavioral disclosure. It states what data is returned but doesn't describe how it behaves: e.g., whether it requires specific permissions, if it's a read-only operation (implied by 'get' but not explicit), potential rate limits, data freshness (real-time or cached), or error conditions. The description adds minimal context beyond the basic output metrics.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, efficient sentence that front-loads the core purpose ('Get current inbox statistics') and then lists the specific metrics. Every word earns its place with no redundancy or unnecessary details, making it easy to scan and understand quickly.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's low complexity (0 parameters, no annotations, no output schema), the description is minimally adequate. It explains what the tool returns but lacks details on behavioral aspects like permissions, rate limits, or data sourcing. For a simple read operation, this might suffice, but the absence of annotations means the description should ideally cover more operational context to be fully complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has 0 parameters with 100% coverage, so no parameter documentation is needed. The description appropriately doesn't discuss parameters, focusing instead on the output semantics. This meets the baseline for tools with no parameters, as there's nothing to compensate for.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose: 'Get current inbox statistics' with specific metrics listed (total messages, unread count, starred count, important message count). It distinguishes itself from siblings like gmail_list_unread or gmail_get_priorities by focusing on aggregated statistics rather than listing or retrieving specific emails. However, it doesn't explicitly contrast with all siblings (e.g., gmail_category_summary might overlap in summarizing data).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus alternatives. It doesn't mention prerequisites (e.g., authentication), timing considerations (e.g., real-time vs cached data), or compare it to siblings like gmail_daily_summary or gmail_get_categories that might provide related summary information. Usage is implied by the purpose but not explicitly defined.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
gmail_list_labelsA
List all Gmail labels including both system labels (INBOX, SENT, etc.) and user-created labels. Returns label names and IDs.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden. It discloses the return format ('label names and IDs') and scope of labels included, which is helpful behavioral context. However, it lacks details on permissions needed, rate limits, pagination, or error handling, leaving gaps for a read operation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, well-structured sentence that efficiently conveys purpose, scope, and return values without any wasted words. It is front-loaded with the core action and maintains clarity throughout.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's simplicity (0 parameters, no output schema, no annotations), the description is largely completeβit explains what the tool does, what it returns, and the label types included. However, it could benefit from mentioning any limitations (e.g., label count constraints) to achieve full completeness.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has 0 parameters with 100% schema description coverage, so the schema fully documents the lack of inputs. The description adds no parameter information, which is appropriate here, earning a baseline score above 3 due to the zero-parameter scenario.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the specific action ('List all Gmail labels') and distinguishes what it includes ('both system labels... and user-created labels'), differentiating it from siblings like gmail_get_categories or gmail_list_unread. It specifies the resource (Gmail labels) with scope details.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage for retrieving all labels, but provides no explicit guidance on when to use this tool versus alternatives like gmail_get_categories or gmail_search. There's no mention of prerequisites, exclusions, or specific contexts where this tool is preferred.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
gmail_list_unreadB
List unread emails from the inbox. Optionally filter by a pre-configured category such as navy, kids, financial, or action_required.
| Name | Required | Description | Default |
|---|---|---|---|
| category | No | Filter by category name. Must be one of: navy, kids, financial, action_required. Leave empty for all unread emails. | |
| max_results | No | Maximum number of emails to return. Default is 20. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries full burden but only states what the tool does, not behavioral traits like whether it's read-only, requires authentication, has rate limits, or returns paginated results. It mentions 'pre-configured categories' but doesn't explain how these are set up or their impact.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two concise sentences with zero waste. The first sentence states the core purpose, and the second adds optional functionality. It's front-loaded and appropriately sized for a simple listing tool.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read operation with 2 parameters and 100% schema coverage but no output schema or annotations, the description is minimally adequate. It covers what the tool does but lacks context about return format, error handling, or behavioral constraints that would be helpful for an agent.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already fully documents both parameters. The description adds marginal value by mentioning 'pre-configured category' and listing examples, but doesn't provide additional semantics beyond what's in the schema descriptions. Baseline 3 is appropriate when schema does the heavy lifting.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb ('List') and resource ('unread emails from the inbox'), making the purpose immediately understandable. It distinguishes from siblings like 'gmail_search' by focusing specifically on unread emails, though it doesn't explicitly contrast with 'gmail_get_priorities' or 'gmail_inbox_stats' which might also involve email retrieval.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage for listing unread emails with optional category filtering, but provides no explicit guidance on when to use this tool versus alternatives like 'gmail_search' or 'gmail_get_priorities'. It mentions categories but doesn't explain when to filter by them versus using other tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
gmail_mark_as_read_by_idsA
Mark specific emails as read using their message IDs. Requires confirmation to execute.
| Name | Required | Description | Default |
|---|---|---|---|
| message_ids | Yes | Comma-separated list of Gmail message IDs to mark as read. | |
| confirm | Yes | Must be true to actually mark as read. Set false to preview. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It adds useful context about the confirmation requirement and preview capability (via confirm=false), which are not obvious from the schema alone. However, it does not cover other behavioral aspects like permissions needed, rate limits, or what happens on success/failure, leaving gaps for a mutation tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences, front-loaded with the core purpose and followed by a crucial behavioral note. Every word earns its place with zero waste, making it highly efficient and easy to parse.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a mutation tool with no annotations and no output schema, the description is adequate but incomplete. It covers the purpose and confirmation behavior but lacks details on permissions, error handling, or return values. Given the complexity (modifying email states), more context would be beneficial for safe usage.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already fully documents both parameters (message_ids and confirm). The description does not add any additional semantic meaning beyond what the schema provides, such as format examples or edge cases. Baseline 3 is appropriate when the schema does the heavy lifting.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the specific action ('Mark specific emails as read') and the resource ('using their message IDs'), distinguishing it from sibling tools like 'gmail_mark_as_read_by_query' (which uses queries) and 'gmail_mark_as_unread_by_ids' (which does the opposite). It precisely conveys the verb+resource combination.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides clear context for usage by stating 'Requires confirmation to execute,' which implies a prerequisite (setting confirm=true). However, it does not explicitly mention when to use this tool versus alternatives like 'gmail_mark_as_read_by_query' or 'gmail_mark_as_unread_by_ids,' so it lacks explicit sibling differentiation.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
gmail_mark_as_read_by_queryA
Mark emails matching a search query as read. Use Gmail query syntax. Requires confirmation.
| Name | Required | Description | Default |
|---|---|---|---|
| query | Yes | Gmail search query to find emails to mark as read. Examples: 'from:newsletter@example.com', 'older_than:7d is:unread'. | |
| max_emails | No | Maximum number of emails to mark as read. Default 100, max 500. | |
| confirm | Yes | Must be true to actually mark as read. Set false to preview what would be marked. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It mentions the confirmation requirement ('Requires confirmation'), which is a critical safety feature for a mutation tool. However, it doesn't disclose other important behaviors like whether the operation is reversible, what permissions are needed, rate limits, or what happens on success/failure. The description adds some value but leaves significant gaps.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is perfectly concise with just two sentences that each earn their place. The first sentence states the core purpose, and the second adds critical behavioral context (confirmation requirement). There's zero wasted language, and the information is front-loaded appropriately.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given this is a mutation tool with no annotations and no output schema, the description should do more to be complete. While it covers the basic purpose and confirmation requirement, it lacks information about what the tool returns, error conditions, side effects, or detailed behavioral constraints. The description is adequate but has clear gaps for a tool that modifies email state.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents all three parameters thoroughly. The description adds no additional parameter information beyond what's in the schema. According to the scoring rules, when schema coverage is high (>80%), the baseline is 3 even with no param info in the description, which applies here.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the specific action ('mark as read') and target resource ('emails matching a search query'), distinguishing it from siblings like gmail_mark_as_read_by_ids (which uses IDs instead of queries) and gmail_mark_as_unread_by_query (which performs the opposite action). The verb+resource combination is precise and unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides clear context for when to use this tool ('mark emails matching a search query as read') and mentions the 'Requires confirmation' prerequisite. However, it doesn't explicitly state when NOT to use it or name alternatives like gmail_mark_as_read_by_ids for ID-based operations, which would be helpful for sibling differentiation.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
gmail_mark_as_unread_by_idsA
Mark specific emails as unread using their message IDs. Requires confirmation to execute.
| Name | Required | Description | Default |
|---|---|---|---|
| message_ids | Yes | Comma-separated list of Gmail message IDs to mark as unread. | |
| confirm | Yes | Must be true to actually mark as unread. Set false to preview. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It adds value by stating the confirmation requirement, which hints at a safety mechanism, but lacks details on permissions, rate limits, or what happens if IDs are invalid. It doesn't contradict annotations, but more behavioral context would be helpful for a mutation tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded with the core purpose in the first sentence and adds a crucial behavioral note in the second. Both sentences earn their place by providing essential information without redundancy, making it efficient and well-structured.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity (a mutation operation with 2 required parameters) and no annotations or output schema, the description is adequate but has gaps. It covers the action and a key behavioral trait (confirmation), but lacks details on error handling, return values, or integration with sibling tools, which could improve completeness.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the input schema fully documents both parameters (message_ids and confirm). The description doesn't add any additional meaning beyond what the schema provides, such as format examples or edge cases. Baseline 3 is appropriate as the schema handles the heavy lifting.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the specific action ('Mark specific emails as unread') and the resource ('using their message IDs'), distinguishing it from siblings like gmail_mark_as_unread_by_query which uses queries instead of IDs. The verb+resource combination is precise and unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides clear context by specifying 'Requires confirmation to execute,' which indicates a prerequisite for use. However, it doesn't explicitly differentiate when to use this tool versus alternatives like gmail_mark_as_unread_by_query or gmail_mark_as_read_by_ids, leaving some ambiguity in sibling tool selection.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
gmail_mark_as_unread_by_queryA
Mark emails matching a search query as unread. Use Gmail query syntax. Requires confirmation.
| Name | Required | Description | Default |
|---|---|---|---|
| query | Yes | Gmail search query to find emails to mark as unread. Examples: 'from:newsletter@example.com', 'subject:important'. | |
| max_emails | No | Maximum number of emails to mark as unread. Default 100, max 500. | |
| confirm | Yes | Must be true to actually mark as unread. Set false to preview what would be marked. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It mentions the confirmation requirement, which is useful context, but lacks details on permissions, rate limits, or what happens to emails (e.g., if it affects all matching emails up to max_emails). It doesn't contradict annotations, but could be more informative.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences, front-loaded with the core purpose and followed by essential usage guidance. Every word earns its place, with no redundancy or fluff, making it highly efficient and easy to parse.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a mutation tool with no annotations and no output schema, the description is adequate but has gaps. It covers the purpose and confirmation need, but lacks details on behavioral aspects like error handling or return values. Given the complexity and lack of structured data, it's minimally viable but not fully comprehensive.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents all parameters thoroughly. The description adds no additional parameter semantics beyond what's in the schema, such as explaining Gmail query syntax further or elaborating on the confirmation logic. Baseline 3 is appropriate given high schema coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the specific action ('mark emails matching a search query as unread'), identifies the resource (emails), and distinguishes it from siblings like 'gmail_mark_as_unread_by_ids' by specifying the query-based approach. It's precise and avoids tautology.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides clear context for when to use this tool (to mark emails as unread based on a search query) and mentions a prerequisite ('Requires confirmation'), but it doesn't explicitly state when not to use it or name alternatives like 'gmail_mark_as_unread_by_ids' for ID-based operations.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
gmail_remove_label_from_messagesB
Remove a label from one or more messages. Can specify messages by IDs or by search query.
| Name | Required | Description | Default |
|---|---|---|---|
| label_name | No | Name of the label to remove. Provide either label_name or label_id. | |
| label_id | No | ID of the label to remove. Provide either label_name or label_id. | |
| message_ids | No | Comma-separated list of message IDs to remove the label from. | |
| query | No | Gmail search query to find messages. Alternative to message_ids. | |
| max_messages | No | Maximum messages to modify when using query. Default 100, max 500. | |
| confirm | Yes | Must be true to actually modify. Set false to preview. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries full burden. It mentions the action ('remove') and optional preview mode via 'confirm', but doesn't disclose behavioral traits like required permissions, rate limits, whether removal is reversible, effects on message organization, or error handling. For a mutation tool with zero annotation coverage, this is a significant gap.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is appropriately sized with two sentences that are front-loaded with the core purpose. Every sentence earns its place by covering the action and target methods, though it could be slightly more structured (e.g., explicitly listing parameters). No wasted words or redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given 6 parameters with full schema coverage but no annotations or output schema, the description is minimally complete. It covers the what and how but lacks context on behavioral aspects (e.g., safety, side effects) and doesn't explain return values. For a mutation tool, this leaves gaps that could hinder agent understanding.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema fully documents all 6 parameters. The description adds minimal value beyond the schema, only implying parameter usage ('Can specify messages by IDs or by search query') without explaining semantics like label_name/label_id exclusivity or query syntax. Baseline 3 is appropriate when schema does the heavy lifting.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb ('remove') and resource ('a label from one or more messages'), distinguishing it from siblings like gmail_add_label_to_messages (adds label) and gmail_delete_label (deletes label entirely). It specifies the operation's scope with 'one or more messages' and identifies target selection methods.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage by mentioning alternative methods (IDs vs. query) but doesn't explicitly state when to use this tool versus alternatives like gmail_remove_label_from_messages (no direct alternative for removal) or differentiate from gmail_mark_as_read/unread operations. It lacks guidance on prerequisites, error conditions, or integration with sibling tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
gmail_rename_labelA
Rename an existing Gmail label. Cannot rename system labels.
| Name | Required | Description | Default |
|---|---|---|---|
| label_name | No | Current name of the label to rename. Provide either label_name or label_id. | |
| label_id | No | ID of the label to rename. Provide either label_name or label_id. | |
| new_name | Yes | New name for the label. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It adds some context by specifying the system label constraint, but does not cover other behavioral aspects like permissions needed, error handling, or what happens if the new name conflicts. It adequately describes the mutation nature but lacks depth for a tool with no annotation support.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, efficient sentence that is front-loaded with the core purpose and includes a critical constraint. There is no wasted language, and every word earns its place, making it highly concise and well-structured.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's moderate complexity (mutation with 3 parameters), no annotations, and no output schema, the description is minimally adequate. It covers the purpose and a key constraint but lacks details on behavioral traits, error cases, or return values, leaving gaps for an agent to operate effectively.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents all three parameters thoroughly. The description does not add any additional meaning beyond what the schema provides, such as format details or examples. Baseline 3 is appropriate when the schema does the heavy lifting.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the specific action ('Rename') and resource ('an existing Gmail label'), and distinguishes it from siblings by specifying it cannot rename system labels. It precisely identifies what the tool does without being vague or tautological.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides clear context by stating 'Cannot rename system labels,' which implicitly guides when not to use it. However, it does not explicitly mention when to use this tool versus alternatives like gmail_create_label or gmail_delete_label, or provide prerequisites beyond the system label restriction.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
gmail_searchA
Search emails using Gmail query syntax. Returns a list of matching emails with subject, sender, date, and snippet. Use Gmail search operators like 'from:', 'to:', 'subject:', 'is:unread', 'has:attachment', 'after:', 'before:'.
| Name | Required | Description | Default |
|---|---|---|---|
| query | Yes | Gmail search query string. Examples: 'from:john@example.com', 'subject:meeting is:unread', 'after:2024/01/01 has:attachment'. | |
| max_results | No | Maximum number of emails to return. Must be between 1 and 100. Default is 20. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It discloses that the tool returns a list of emails with specific fields (subject, sender, date, snippet) and mentions Gmail search operators, which adds useful context. However, it lacks details on permissions needed, rate limits, pagination, or error handling for a search operation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is appropriately sized and front-loaded, with two sentences that efficiently convey purpose, return value, and usage examples without unnecessary details. Every sentence earns its place by providing essential information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's moderate complexity (search with two parameters), no annotations, and no output schema, the description is mostly complete. It covers purpose, usage, and return fields, but could improve by addressing behavioral aspects like permissions or limitations. It compensates well for the lack of structured data.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already fully documents the two parameters (query and max_results). The description adds minimal value beyond the schema by mentioning Gmail search operators, which are implied in the schema's examples. Baseline score of 3 is appropriate as the schema does the heavy lifting.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose with specific verb ('Search') and resource ('emails'), and distinguishes it from siblings by focusing on search functionality rather than labeling, reading, sending, or other operations. It explicitly mentions what it returns (list of matching emails with specific fields).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides clear context for when to use this tool (searching emails with Gmail query syntax) and includes examples of search operators. However, it does not explicitly state when not to use it or name specific alternatives among the sibling tools (e.g., gmail_list_unread for a simpler unread list).
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
gmail_send_emailB
Send an email. Can send new emails or reply to existing threads. Requires confirmation before sending.
| Name | Required | Description | Default |
|---|---|---|---|
| to | Yes | Comma-separated list of recipient email addresses. | |
| subject | Yes | Email subject line. | |
| body | Yes | Email body text in plain text format. | |
| cc | No | Comma-separated list of CC recipient email addresses. Optional. | |
| bcc | No | Comma-separated list of BCC recipient email addresses. Optional. | |
| reply_to_message_id | No | Message ID to reply to for threading. Optional. | |
| confirm | Yes | Must be true to actually send the email. Set false to preview. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It adds valuable context: 'Requires confirmation before sending' indicates a safety mechanism, and 'Can send new emails or reply to existing threads' clarifies functionality. However, it misses details like rate limits, authentication needs, error handling, or what happens on failure. For a mutation tool with zero annotation coverage, this is a moderate but incomplete effort.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise and front-loaded: two sentences that directly state the purpose and a key behavioral trait. Every sentence earns its place by adding value, with no redundant or vague language. It could be slightly more structured (e.g., separating functionality and requirements), but it's efficient overall.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity (a mutation tool for sending emails with 7 parameters), no annotations, and no output schema, the description is moderately complete. It covers the basic purpose and a confirmation requirement but lacks details on return values, error cases, or advanced usage. For a tool with this level of responsibility, more context would be beneficial to fully guide an agent.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has 100% description coverage, so parameters like 'to', 'subject', 'body', etc., are well-documented in the schema. The description adds no additional parameter semantics beyond what the schema provides (e.g., no extra syntax or format details). According to the rules, with high schema coverage, the baseline is 3 even with no param info in the description.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose: 'Send an email. Can send new emails or reply to existing threads.' It specifies the verb ('send') and resource ('email'), distinguishing it from sibling tools like labeling, searching, or reading operations. However, it doesn't explicitly differentiate from hypothetical similar tools (e.g., 'send_email_with_attachments'), which keeps it from a perfect score.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides some usage context by mentioning 'Can send new emails or reply to existing threads,' which implies when to use it for different scenarios. However, it lacks explicit guidance on when to choose this tool over alternatives (e.g., vs. other email-sending tools if they existed) or any prerequisites beyond confirmation. No exclusions or clear alternatives are named, making it implied rather than explicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
TDQS
Most tools have distinct purposes, such as gmail_get_email for retrieving full content and gmail_search for querying emails. However, some overlap exists between gmail_list_unread and gmail_category_summary, which both handle unread emails by category, potentially causing confusion. Overall, descriptions help clarify boundaries, but minor ambiguities remain.
All tool names follow a consistent snake_case pattern with a 'gmail_' prefix and descriptive verb_noun combinations, such as gmail_create_label and gmail_send_email. This predictability makes it easy for agents to understand and select tools without confusion or inconsistency in naming conventions.
With 20 tools, the count is borderline high for a Gmail-focused server, as it may feel heavy and could indicate over-specialization. While the tools cover various aspects like labels, summaries, and email management, a more streamlined set might improve usability without sacrificing functionality.
The tool set provides comprehensive coverage for Gmail operations, including CRUD for labels (create, delete, rename), email lifecycle management (send, read/unread, search), and specialized functions like summaries and package tracking. No significant gaps are apparent, ensuring agents can handle most email-related tasks effectively.
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Connectors
Manage Gmail end-to-end: search, read, send, draft, label, and organize threads. Automate workflowβ¦
Connect any mailbox to Claude, ChatGPT & AI: read, send, reply, schedule & search emails.
Permissioned access to Gmail, Drive and Calendar via the user's own Google account
Manage Gmail messages, threads, labels, drafts, and settings from your workflows. Send and organizβ¦
Related MCP Servers
- AlicenseNot gradedqualityDmaintenanceEnables interaction with Gmail through the Gmail API to read, send, and manage emails. Supports multiple Gmail accounts with real-time monitoring and advanced features for email search and attachment handling.17Apache 2.0
- FlicenseNot gradedqualityDmaintenanceEnables interaction with Gmail through the Gmail API with OAuth2 authentication. Supports reading, sending, searching emails, and managing read status through natural language.
- AlicenseNot gradedqualityNot gradedmaintenanceEnables AI assistants to interact with Gmail through natural language, supporting email sending/reading, searching, draft management, label organization, and batch operations with secure OAuth authentication.
- FlicenseNot gradedqualityNot gradedmaintenanceEnables interaction with Gmail through the Gmail API, allowing users to list, read, search emails, create and send drafts, and get email summaries through natural language commands with OAuth2 authentication.
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/murphy360/mcp_gmail'
If you have feedback or need assistance with the MCP directory API, please join our Discord server