gmail-mcp-server
Allows reading, searching, sending, and managing emails in Gmail, including attachments, labels, drafts, and privacy redaction.
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 my latest emails"
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 comprehensive Model Context Protocol (MCP) server for Gmail, with 17 tools, an interactive CLI setup wizard, a browser-based Web UI wizard, and full Docker support.
Features
Tool | Description |
| List emails from inbox or any label with optional query filter |
| Read full email content (headers + decoded body) |
| Search using Gmail query syntax |
| List message attachments with policy-based safety checks |
| Validate one attachment against local file safety policy |
| Download attachment only if it passes safety policy checks |
| Redact sensitive text through local privacy pipeline |
| Read one email with privacy-redacted subject/snippet/body |
| Send plain-text or HTML emails |
| Create email drafts without sending |
| Reply to an email thread (preserves threading headers) |
| Trash or permanently delete an email |
| Mark email as read |
| Mark email as unread |
| Add/remove labels on an email |
| List all Gmail labels with message counts |
| Get authenticated user profile info |
Attachment safety policy defaults are defined in src/config/attachment-policy.json.
Privacy policy defaults are defined in src/config/privacy-policy.json.
Optional local privacy stack (vLLM + privacy orchestrator) can be started with Docker profiles:
docker compose --profile privacy up --buildThe privacy profile also enables optional persistent services:
Redis (
redis:6379) — token store for session-aware PII re-identification (future feature)SQLite (
audit.db) — audit log of all PII detections and redactions for compliance
See ARCHITECTURE.md for database design details.
Related MCP server: Gmail MCP Server
Prerequisites
Node.js 20+ (for local setup)
Docker (for containerised setup)
A Google Cloud project with Gmail API enabled and an OAuth2 Client ID (Desktop app type)
Google Cloud Setup (one-time)
Create or select a project
APIs & Services → Library → search "Gmail API" → Enable
APIs & Services → Credentials → Create Credentials → OAuth 2.0 Client ID
Application type: Desktop app
Add Authorized redirect URIs:
http://localhost:3333/oauth/callback← for CLI wizardhttp://localhost:3000/oauth/callback← for Web UI wizard
Note your Client ID and Client Secret (or download
credentials.json)
Quick Start
Option A — CLI Wizard (recommended for developers)
# 1. Install dependencies and build
npm install
npm run build
# 2. Run the interactive CLI setup wizard
npm run setup:cli
# 3. Start the MCP server
npm startThe CLI wizard will:
Guide you through credential input (file / paste JSON / manual entry)
Let you choose Gmail permission scopes
Open your browser for Google sign-in
Automatically capture the OAuth callback and save tokens
Validate the connection and print your email + next steps
Option B — Web UI Wizard (browser-based)
# 1. Install dependencies and build
npm install
npm run build
# 2. Start the setup wizard UI
npm run setup:ui
# 3. Open http://localhost:3000 in your browser
# Complete the 4-step wizard, then start the server:
npm startThe Web UI provides a guided 4-step flow:
Enter OAuth2 credentials
Select permission scopes
Click Authorize Gmail Access → completes Google sign-in flow
Success page with connection stats and next steps
Option C — Manual .env (CI / Docker production)
# Copy and fill in the template
cp .env.example .env
# Edit .env: set GMAIL_CLIENT_ID, GMAIL_CLIENT_SECRET, GMAIL_REFRESH_TOKEN
npm install
npm run build
npm startDocker
Build the image
docker build -t gmail-mcp-server .Run the MCP server (with env vars)
# Copy .env.example → .env and fill in credentials
cp .env.example .env
docker compose upOr pass credentials inline:
docker run -i \
-e GMAIL_CLIENT_ID=your-client-id \
-e GMAIL_CLIENT_SECRET=your-secret \
-e GMAIL_REFRESH_TOKEN=your-refresh-token \
gmail-mcp-serverRun the Web UI Setup Wizard via Docker
docker compose -f docker-compose.setup.yml upThen open http://localhost:3000 — credentials are written back to ./credentials/ on the host via volume mount.
Mount credentials files instead of env vars
docker run -i \
-v ./credentials:/app/credentials:ro \
gmail-mcp-serverEnvironment Variables
Variable | Required | Description |
| Yes* | Google OAuth2 Client ID |
| Yes* | Google OAuth2 Client Secret |
| Yes* | Long-lived refresh token (from setup wizard) |
| No | Override redirect URI (default: |
| No | Web UI setup server port (default: |
* Required when using env vars. Alternatively, use credentials/credentials.json + credentials/token.json (written by the setup wizards).
Add to MCP Client (e.g. Claude Desktop)
Edit your MCP client config:
{
"mcpServers": {
"gmail": {
"command": "node",
"args": ["/absolute/path/to/gmail-mcp-server/dist/index.js"]
}
}
}Or use Docker:
{
"mcpServers": {
"gmail": {
"command": "docker",
"args": [
"run", "-i", "--rm",
"-e", "GMAIL_CLIENT_ID=...",
"-e", "GMAIL_CLIENT_SECRET=...",
"-e", "GMAIL_REFRESH_TOKEN=...",
"gmail-mcp-server"
]
}
}
}Project Structure
├── src/
│ ├── index.ts # MCP server entry point
│ ├── gmail/
│ │ ├── auth.ts # OAuth2 credential + token management
│ │ └── client.ts # Gmail API client factory (singleton)
│ ├── tools/
│ │ ├── emails.ts # list_emails, read_email, search_emails
│ │ ├── compose.ts # send_email, create_draft, reply_to_email
│ │ ├── manage.ts # delete_email, mark_as_read/unread, set_labels
│ │ └── meta.ts # get_labels, get_profile
│ └── setup/
│ ├── oauth.ts # Shared OAuth2 URL generation + token exchange
│ ├── cli.ts # Interactive CLI setup wizard
│ └── ui-server.ts # Express Web UI setup server
├── public/
│ └── setup/
│ └── index.html # 4-step Web UI wizard (vanilla HTML/CSS/JS)
├── credentials/ # Runtime secrets — gitignored
│ └── .gitkeep
├── Dockerfile # Multi-stage build (build + runtime)
├── docker-compose.yml # MCP server runtime
├── docker-compose.setup.yml # Web UI setup wizard runtime
├── .env.example # Environment variable template
└── tsconfig.jsonSecurity Notes
credentials/is gitignored — never commitcredentials.jsonortoken.jsonCredentials are not baked into the Docker image — always injected via env vars or volume mounts
The Web UI server and CLI callback server bind to
127.0.0.1only (not publicly accessible)The runtime Docker container runs as a non-root user (
mcp)
Troubleshooting
Problem | Solution |
| Run |
| Re-run the setup wizard to re-authorize |
| Check that Client ID and Secret are correct |
| Ensure the redirect URI is added in Google Cloud Console exactly as shown in the wizard |
| Kill the process using port 3333, or temporarily change |
Token expired / | Re-run the setup wizard to get a fresh refresh token |
Docker: | Mount |
Available Tools
18 toolscreate_draftA
Create a draft email in Gmail without sending it.
| Name | Required | Description | Default |
|---|---|---|---|
| cc | No | CC address(es), comma-separated (optional) | |
| to | Yes | Recipient email address(es), comma-separated | |
| bcc | No | BCC address(es), comma-separated (optional) | |
| body | Yes | Draft body (plain text or HTML) | |
| isHtml | No | Set to true if body is HTML (default: false) | |
| subject | Yes | Email subject line | |
| attachments | No | Optional file attachments to include in the draft. |
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 does disclose the key behavior that the email is not sent, but it omits additional context such as authentication requirements, what is returned (e.g., draft ID), or whether the draft is saved to the user's drafts folder. For a simple creation tool, this is adequate but not rich.
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 sentence that is to the point, free of redundancy, and front-loads the essential information. Every word adds value: the action (create), the object (draft email), and the qualifier (without sending).
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 simplicity of the tool and the complete schema coverage, the description is mostly complete. It could mention that the draft is saved, but the lack of an output schema and the non-destructive nature of the action make this a minor gap. The presence of sibling tools also provides additional context 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?
The input schema has 100% description coverage for all 7 parameters, with each property having a clear explanation. The tool description itself adds no parameter-specific details beyond what the schema provides, so the baseline of 3 is appropriate.
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 uses a specific verb ('Create') with a clear resource ('a draft email in Gmail') and explicitly states 'without sending it,' which distinguishes it from the sibling tool send_email. It fully defines the tool's scope and action.
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 phrase 'without sending it' clearly implies that this tool is for preparing drafts rather than delivering emails, which provides a clear usage context. However, it does not explicitly name alternative tools (like send_email) or state when not to use this tool, so it lacks the strongest level of guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete_emailA
Move an email to Trash. Pass permanent: true to permanently delete (irreversible).
| Name | Required | Description | Default |
|---|---|---|---|
| messageId | Yes | The Gmail message ID | |
| permanent | No | If true, permanently delete the email (default: false — moves to Trash) |
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 clearly states the default action (move to Trash) and the optional permanent delete being 'irreversible', which is critical for a destructive operation. Missing minor details like permission requirements, but the key safety context is covered.
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, leading with the primary action and then the optional parameter. No wasted words, information is front-loaded 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 simple two-parameter tool with no output schema, the description covers the essential behavior and the key parameter nuance. It does not explain the return value, but that is not critical for a delete operation. Overall, it is sufficiently complete for the tool's complexity.
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 already describes both parameters (messageId and permanent) with full coverage. The description adds the 'irreversible' nuance for permanent, but otherwise restates what the schema provides. Baseline 3 is appropriate since 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 function: 'Move an email to Trash' with an optional permanent delete. This is a specific verb+resource combination that distinguishes it from siblings like read_email or mark_as_read.
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 makes it obvious when to use this tool (for deleting emails) but does not explicitly contrast it with alternatives or mention any prerequisites. For a straightforward delete tool, the usage is implied by the clear action, but explicit guidance is missing.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
download_attachmentB
Download a specific attachment from a Gmail message. Returns the base64-encoded attachment data and its MIME type.
| Name | Required | Description | Default |
|---|---|---|---|
| messageId | Yes | The Gmail message ID containing the attachment | |
| attachmentId | Yes | The attachment ID (from the attachments list in read_email) |
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 states that the tool returns base64-encoded data and MIME type, which is useful, but it does not clarify whether this operation is read-only, whether any safety checks are performed, or whether there are rate limits or size restrictions. Given the existence of a 'safe' variant, the lack of safety context is a notable omission.
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 long, front-loaded with the main action, and contains no fluff. Every word contributes value, and the return format is included without extraneous detail.
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 download function with two parameters and no output schema, the description states the purpose and return format adequately. However, it lacks any mention of how to obtain the required IDs (relying on schema hints), and it does not address the safety-sensitive nature of attachments, especially with a sibling 'safe' variant. This leaves the description slightly incomplete in context.
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 already has 100% coverage, describing both parameters clearly. The description adds no additional semantic meaning beyond what the schema provides, so the baseline score of 3 is appropriate. It does not clarify formats, constraints, or relationships beyond the schema.
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 ('Download') and resource ('a specific attachment from a Gmail message'), making the purpose unmistakable. It also specifies the return format (base64 data and MIME type). However, it does not explicitly distinguish from the sibling tool 'download_attachment_safe', which likely has a related but safer behavior, so it doesn't fully earn a 5.
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?
There is no guidance on when to use this tool versus its alternatives, such as 'download_attachment_safe' or 'list_attachments_with_safety'. The schema hints at needing an ID from 'read_email', but the description itself provides no context about prerequisites, exclusions, or choice criteria.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
download_attachment_safeA
Safely download one validated attachment. Blocks risky files and enforces policy checks before returning data.
| Name | Required | Description | Default |
|---|---|---|---|
| messageId | Yes | The Gmail message ID containing the attachment | |
| attachmentId | Yes | The attachment ID from read_email or list_attachments_with_safety |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden. It discloses that it blocks risky files and enforces policy checks, which is useful behavioral info. However, it does not disclose the return format, size limits, or error behavior. It says 'before returning data' but does not specify what data. While the safety behavior is disclosed, important operational details remain missing.
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 one sentence, front-loaded with the main action, and every word adds value. It is concise without being terse.
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?
The tool has a low-complexity footprint (2 params, no output schema), but it sits among closely related siblings (`download_attachment`, `validate_attachment`) and the description only vaguely distinguishes it. It does not explain the return value shape or the exact policy checks, leaving some ambiguity for an agent deciding between tools.
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 already provides full descriptions for both required parameters (messageId and attachmentId), and the description adds no additional parameter-specific context. Per calibration, schemas with >80% coverage get a baseline 3; the description does not elevate it.
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 uses a specific verb ('download') and resource ('one validated attachment'), and the phrase 'Safely' plus 'Blocks risky files' clearly distinguishes it from the plain `download_attachment` sibling. It clearly states what the tool does.
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 the tool is the safe/validated alternative to `download_attachment`, but it does not explicitly state when to use it versus `validate_attachment` or `list_attachments_with_safety`. It only implies safety context without naming alternatives or providing exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_labelsA
List all Gmail labels (system labels like INBOX, SENT and user-created labels). Returns label IDs, names, and message counts.
| 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 does disclose the return fields (label IDs, names, message counts) and notes both system and user labels, which is useful. However, it does not explicitly state read-only behavior, pagination, limits, or authentication requirements, leaving some behavioral aspects undisclosed.
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 sentence that is direct and front-loaded. It states the action, the resource, examples, and the return payload without any wasted words.
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?
The tool is simple with no parameters and no output schema. The description fully covers what it returns and the scope of labels (system and user), which is sufficient for an agent to invoke it confidently. There are no missing prerequisites or hidden side effects.
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?
There are zero parameters, so the baseline is 4. The description adds meaningful context by specifying that all labels are returned, eliminating ambiguity about what the tool covers. No parameter documentation is needed since the schema is empty.
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 uses a specific verb 'List' and identifies the resource as 'Gmail labels', clearly distinguishing it from sibling tools like set_labels. It further clarifies the scope by including both system labels (INBOX, SENT) and user-created labels.
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 use when you need to see all labels and their IDs/names/counts, but it does not explicitly contrast with alternatives or state when not to use it. There is no mention of sibling tools or exclusions, so guidance is 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.
get_profileA
Get the authenticated Gmail user profile: email address, total message count, and thread count. Useful to verify the connection.
| 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 of behavioral disclosure. It implicitly communicates a read-only, non-destructive operation through the verb 'Get', and explicitly notes the authentication requirement ('authenticated'). It also discloses the exact return values, which is the main behavioral output. It lacks explicit statements about side effects or rate limits, but the simplicity of the operation makes this acceptable.
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?
Two concise sentences with no filler. The first sentence states the action and outputs; the second gives a practical use case. Information is front-loaded and every word earns its place.
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 (no parameters, no output schema), the description fully covers what the agent needs: what the tool does, what it returns, and a use case. It is contextually complete for the tool's scope.
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 zero parameters, so the baseline is 4. The description adds value by specifying the return fields, giving the agent a clear expectation of the output even without an output schema.
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 verb ('Get'), the resource ('authenticated Gmail user profile'), and the exact fields returned (email address, total message count, thread count). It distinguishes itself from sibling email tools by focusing on account-level profile data rather than message operations.
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 phrase 'Useful to verify the connection' provides a clear use case and context for when to invoke this tool. While it doesn't explicitly exclude alternative tools or list when not to use it, the description makes its purpose evident enough that an agent can decide appropriately.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_attachments_with_safetyA
List attachments for a message and provide policy-based safety assessment for each file.
| Name | Required | Description | Default |
|---|---|---|---|
| messageId | Yes | The Gmail message ID containing attachments |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Without annotations, the description must carry the full burden of behavioral disclosure. It does add context by stating that the tool provides a 'policy-based safety assessment for each file,' which indicates the output includes safety evaluations. However, it does not explicitly state whether the operation is read-only, describe any side effects, or clarify the nature of the policy. This is adequate but not fully transparent 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, concise sentence: 'List attachments for a message and provide policy-based safety assessment for each file.' It is front-loaded with the main action, contains no redundant information, and every phrase adds 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?
The tool has a simple input schema (one parameter) but no output schema or annotations. The description conveys the core purpose but does not detail the return structure or behavior when no attachments exist. It is minimally complete for a simple tool but leaves gaps regarding output details and edge cases.
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 provides a full description for the only parameter ('The Gmail message ID containing attachments'), achieving 100% schema description coverage. The tool description adds no additional meaning beyond the schema, so the baseline score of 3 applies.
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 function: 'List attachments for a message and provide policy-based safety assessment for each file.' This specifies a concrete action (list) and resource (attachments for a message), and distinguishes from siblings like download_attachment_safe or validate_attachment by emphasizing listing plus safety assessment.
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 explicit guidance on when to use this tool versus alternatives. It does not mention any exclusions, prerequisites, or comparisons with sibling tools such as download_attachment_safe or validate_attachment. The intended use is only implied by the tool's name and description.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_emailsA
List emails from Gmail. Filter by labels and/or a search query. Returns sender, subject, date, and snippet for each message.
| Name | Required | Description | Default |
|---|---|---|---|
| query | No | Gmail search query (e.g. "from:foo@example.com is:unread") | |
| labelIds | No | Label IDs to filter by (e.g. ["INBOX", "UNREAD"]). Defaults to INBOX. | |
| maxResults | No | Maximum emails to return (default: 10, max: 50) |
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 sender, subject, date, and snippet for each message, which is helpful. However, it does not mention default behaviors (e.g., default INBOX label, maxResults limits) or any side effects. The read-only nature is implied but not explicitly stated.
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 action ('List emails from Gmail') and quickly presents filtering and return information. Every word earns its place with no redundancy or filler.
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 3 optional, fully documented parameters and no output schema, the description adequately covers the purpose, filtering options, and return format. The main gap is the lack of guidance on when to use this tool versus the sibling 'search_emails', which would improve contextual 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 baseline is 3. The description adds value by naming the return fields (sender, subject, date, snippet), which are not present in the schema. It also reinforces the filtering semantics of labelIds and query, though this is largely redundant with the schema.
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 ('List emails'), the target system ('Gmail'), and the scope ('filter by labels and/or a search query'). It also specifies the return fields (sender, subject, date, snippet). However, it does not explicitly distinguish itself from the sibling tool 'search_emails', which may perform a similar 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 implies the tool is used for listing emails with optional filters, providing context for typical use. However, it offers no explicit guidance on when to prefer this tool over alternatives like 'search_emails', nor does it mention any exclusions or use cases to avoid.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
mark_as_readA
Mark an email as read by removing the UNREAD label.
| Name | Required | Description | Default |
|---|---|---|---|
| messageId | Yes | The Gmail message ID |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden. It transparently discloses the exact behavior: removing the UNREAD label. It does not mention side effects like handling already-read messages or permissions, but the core mutation is clearly stated. This is a good level of transparency for a simple 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 a single, front-loaded sentence with no filler or redundant information. Every word earns its place, and it directly states the action and mechanism.
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 simple nature of the tool (one parameter, no output schema), the description is complete. It fully specifies what the tool does and the mechanism, making it sufficient for an agent to select and invoke correctly. No additional context is needed for this level of complexity.
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 coverage is 100% with a clear description of messageId. The tool description adds no additional parameter context beyond what the schema provides. Per the rubric, a baseline of 3 is appropriate when the schema fully documents parameters.
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 action: 'Mark an email as read by removing the UNREAD label.' It specifies a distinct verb and resource, and differentiates itself from sibling tools like mark_as_unread by explicitly mentioning the UNREAD label removal mechanism.
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 context: use when you want to mark an email as read. However, it does not explicitly state when not to use it or mention alternatives like set_labels. It's not misleading, but the guidance is minimal and inferred from the name and description.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
mark_as_unreadB
Mark an email as unread by adding the UNREAD label.
| Name | Required | Description | Default |
|---|---|---|---|
| messageId | Yes | The Gmail message ID |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden of behavioral disclosure. It reveals the label-based mechanism but does not mention side effects, idempotency, permissions, or failure modes.
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?
A single, direct sentence that efficiently communicates the tool's purpose without unnecessary 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?
For a simple one-parameter tool, the description adequately explains the core operation. Lacking an output schema or behavioral notes is a minor gap, but the low complexity makes the description sufficient.
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 coverage is 100% for the single parameter messageId, and the schema already describes it as 'The Gmail message ID'. The description adds no additional parameter meaning, aligning with the baseline for 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 action (mark as unread) and the mechanism (adding the UNREAD label), distinguishing it from sibling tools like mark_as_read and set_labels.
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?
No guidance is provided on when to use this tool versus alternatives. The description only states the action without context, exclusions, or references to similar tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
read_emailB
Read the full content of a specific email by its message ID, including headers and decoded body.
| Name | Required | Description | Default |
|---|---|---|---|
| messageId | Yes | The Gmail message ID (from list_emails or search_emails) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden. It discloses that the tool returns decoded body content and headers, which is useful. However, it does not disclose potential privacy risks, authentication requirements, or whether any transformation (besides decoding) occurs. The read operation appears safe from the name, but the description adds only moderate 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?
A single, clear, front-loaded sentence with no unnecessary words. It states the action ('Read'), object ('email'), scope ('full content'), and qualifiers ('by message ID', 'including headers and decoded body') efficiently.
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?
The tool is simple with one parameter and no output schema, so the description covers the core functionality. However, given the existence of read_email_with_privacy and other siblings, the description could be more complete by clarifying when the plain read is appropriate versus the privacy-safe version. It also doesn't indicate potential sensitivity of the returned content, which is relevant context.
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 coverage is 100%, so the parameter description already explains that messageId is a Gmail message ID from list_emails or search_emails. The description adds no new parameter-level meaning beyond repeating the message ID requirement. Baseline 3 is appropriate given complete 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 tool reads a specific email's full content by message ID, including headers and decoded body. This distinguishes it from list_emails and search_emails, though it does not explicitly differentiate from the sibling read_email_with_privacy.
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 explicit guidance on when to use this tool versus read_email_with_privacy or other alternatives. It omits any mention of privacy-sensitive content or scenarios where the privacy variant might be preferred. The only implied usage is that a message ID is needed, which is already given in the schema.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
read_email_with_privacyA
Read one email and return only privacy-redacted subject/snippet/body fields using the local privacy pipeline.
| Name | Required | Description | Default |
|---|---|---|---|
| messageId | Yes | The Gmail message ID to read with privacy redaction. |
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 that only redacted subject/snippet/body fields are returned and that a local privacy pipeline is used, adding value. However, it does not mention potential side effects, prerequisites, or error behavior, which is a gap for a privacy-sensitive 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 one concise sentence with no redundant words. It front-loads the action ('Read one email') and efficiently conveys scope and method.
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 one-parameter tool, the description adequately covers purpose, return content, and processing method. It does not specify exact output format, but that is acceptable given no output schema and the low complexity.
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% for the single parameter 'messageId', so the description adds no further parameter semantics. Baseline 3 is appropriate since the schema already fully documents the parameter.
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 reads one email and returns privacy-redacted fields. It distinguishes itself from sibling 'read_email' by explicitly mentioning the privacy-redaction and local pipeline, making its purpose specific and unique.
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 this tool is for when privacy-redacted email content is needed, contrasting with the plain 'read_email' sibling. However, it does not explicitly name alternatives or state when not to use it, but the context is clear enough.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
redact_text_localB
Redact sensitive content from provided text using local privacy pipeline (orchestrator with deterministic fallback).
| Name | Required | Description | Default |
|---|---|---|---|
| text | Yes | Input text to redact. | |
| contentType | No | Optional MIME content type for model context (default: text/plain). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden. It discloses that processing is local and includes a deterministic fallback, which is useful. However, it does not state whether the operation is read-only, has side effects, or what the output format is.
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 sentence with no redundant words. It front-loads the primary action and appends a parenthetical with technical context, making it 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?
The tool lacks an output schema and annotations, so the description should clarify return behavior and limitations. It vaguely references an 'orchestrator with deterministic fallback' but does not explain what the tool returns or any edge cases, leaving the agent with incomplete understanding for correct invocation.
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 coverage is 100% with both parameters described in the input schema. The tool description adds no parameter-specific information beyond what the schema already provides, so the baseline score of 3 applies.
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 redacts sensitive content from provided text, using a specific verb and resource. It distinguishes itself from email-oriented sibling tools by focusing on generic text processing and a local privacy pipeline.
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?
No explicit guidance on when to use this tool versus alternatives. The description implies it is for redacting text, but lacks any mention of prerequisites, exclusions, or comparison with sibling tools like read_email_with_privacy.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
reply_to_emailA
Reply to an existing email thread. Automatically sets Reply-To headers and preserves the thread.
| Name | Required | Description | Default |
|---|---|---|---|
| body | Yes | Reply body (plain text or HTML) | |
| isHtml | No | Set to true if body is HTML (default: false) | |
| messageId | Yes | The Gmail message ID to reply to | |
| attachments | No | Optional file attachments to include in the reply. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Discloses two behavioral traits (setting Reply-To headers, preserving the thread) beyond what annotations provide (none). However, it omits that this tool sends the email (vs. drafting) and does not mention other potential side effects like authentication or irreversible changes. With no annotations, more disclosure would be expected.
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?
Two concise sentences: the first states the core purpose, the second adds key behavioral details. No filler, perfectly front-loaded and efficiently written.
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 reply tool, the description covers the main intent and two behaviors, but lacks explicit confirmation that the email is actually sent (critical given send_email and create_draft siblings). With no output schema or annotations, the agent may not know the full side effects or whether a draft is created instead. More context on sending behavior would 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?
The input schema provides 100% coverage of parameter descriptions, so the baseline is 3. The tool description adds no extra parameter semantics; it only indirectly references messageId via 'thread' but does not explain parameter relationships or formatting beyond schema.
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?
Clearly states the action ('Reply to an existing email thread') and distinguishes this from sending a new email or creating a draft. The mention of 'automatically sets Reply-To headers and preserves the thread' adds specificity beyond mere naming.
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 the primary use case (replying to an existing thread) but does not explicitly contrast with sibling tools like send_email or create_draft. It gives clear context but lacks explicit when-not-to-use guidance or alternative tool names.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_emailsA
Search Gmail using the standard Gmail search syntax. Returns matching emails with sender, subject, date, and snippet.
| Name | Required | Description | Default |
|---|---|---|---|
| query | Yes | Gmail search query (e.g. "from:boss@company.com subject:report has:attachment") | |
| maxResults | No | Maximum results to return (default: 10, max: 50) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description indicates a read-only search and lists return fields, but with no annotations provided, it does not disclose limitations such as pagination, rate limits, or authorization requirements. The return info is useful but the disclosure is not extensive.
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 sentence that front-loads the verb and resource, stating what the tool does and what it returns without any redundancy or irrelevant detail.
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 simplicity of a 2-param tool with no output schema or annotations, the description covers the core functionality and return format. However, it lacks explicit confirmation of read-only nature and any potential side effects or limitations, so it is not 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 schema describes query and maxResults, but the description adds meaning by explaining the query uses Gmail syntax and specifies the returned fields (sender, subject, date, snippet), which goes beyond the schema's basic type descriptions.
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 it searches Gmail using standard Gmail search syntax and lists the return fields (sender, subject, date, snippet). This distinguishes it from sibling tools like list_emails, which likely lists without search syntax.
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 search queries with Gmail syntax but does not explicitly compare to alternatives like list_emails or provide when-not-to-use guidance. The context is clear but there are no exclusions or explicit alternative recommendations.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
send_emailC
Send an email via the authenticated Gmail account.
| Name | Required | Description | Default |
|---|---|---|---|
| cc | No | CC email address(es), comma-separated (optional) | |
| to | Yes | Recipient email address(es), comma-separated | |
| bcc | No | BCC email address(es), comma-separated (optional) | |
| body | Yes | Email body (plain text or HTML) | |
| isHtml | No | Set to true if body contains HTML markup (default: false) | |
| subject | Yes | Email subject line | |
| attachments | No | Optional file attachments to include in the email. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries full responsibility for behavioral disclosure. It fails to mention that sending is an irreversible side effect, requires an authenticated session, may have rate limits, or that emails can include HTML and attachments. The bare phrase 'Send an email' reveals no behavioral traits.
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, front-loaded sentence with no extraneous content. It is appropriately concise for the tool's purpose, though its brevity limits detail in other dimensions.
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 (supports HTML, attachments, multiple recipients) and the absence of both annotations and an output schema, the description is insufficiently complete. It does not explain side effects, authentication prerequisites, or error behavior, leaving significant gaps for safe invocation.
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 provides 100% coverage with clear descriptions for all 7 parameters (to, cc, bcc, subject, body, isHtml, attachments). The description adds no additional parameter meaning beyond the schema, so it meets the baseline for 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 tool sends an email via an authenticated Gmail account, using the verb 'send' and the resource 'email.' It is specific but does not explicitly differentiate from sibling tools like reply_to_email or create_draft, so it misses the full distinction criterion.
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?
No guidance is provided on when to use this tool versus alternatives. The description does not mention exclusions, such as using create_draft for drafts or reply_to_email for replies, and only offers a vague authentication context. This leaves usage decisions entirely to the agent.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
set_labelsA
Add and/or remove labels on an email. Use get_labels to obtain valid label IDs.
| Name | Required | Description | Default |
|---|---|---|---|
| messageId | Yes | The Gmail message ID | |
| addLabelIds | No | Label IDs to add (e.g. ["Label_123", "STARRED"]) | |
| removeLabelIds | No | Label IDs to remove (e.g. ["INBOX", "UNREAD"]) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden of behavioral disclosure. It states the core operation ('Add and/or remove labels') and implies mutation, but it does not disclose potential side effects, error conditions for invalid IDs, or any required permissions. The reference to get_labels hints at validity concerns, but lacks depth.
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, with the first sentence stating the purpose and the second providing a direct usage hint. Every word earns its place; it is appropriately sized and front-loaded with the main action.
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 (3 params, no output schema, no annotations), the description is largely complete. It covers the purpose, the prerequisite for valid IDs, and the operation. However, it could mention whether both add and remove can be performed in a single call (though 'and/or' implies yes) and any consequences of invalid IDs, which would make it fully self-contained.
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 baseline is 3. The description adds minimal semantic value beyond the schema: it explains that the tool adds and/or removes labels, which maps to addLabelIds and removeLabelIds, but it does not elaborate on parameter formats or examples beyond what the schema already provides.
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 function: 'Add and/or remove labels on an email.' It uses a specific verb (add/remove) and resource (labels on an email), and it is easily distinguished from sibling tools like get_labels, which retrieves labels rather than modifying them.
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 explicit guidance: 'Use get_labels to obtain valid label IDs.' This instructs the agent to use a specific alternative for a prerequisite action, thereby clarifying when to use set_labels (label modification) and when not to (obtaining IDs). This directly addresses usage context and alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
validate_attachmentA
Validate one attachment against local safety policy (size, MIME type, extension, filename).
| Name | Required | Description | Default |
|---|---|---|---|
| messageId | Yes | The Gmail message ID containing the attachment | |
| attachmentId | Yes | The attachment ID from read_email or list_attachments_with_safety |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden. It discloses that validation is local and lists the safety criteria, but omits the return format, error behavior, and whether any side effects occur.
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?
A single concise sentence that front-loads the action and criteria. No wasted words.
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 validation tool, the purpose and criteria are clear, but without an output schema or annotation, the return value and behavior on failure are missing, making it slightly incomplete.
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 coverage is 100%, so parameters are already well documented. The description adds no additional meaning beyond naming the attachment being validated.
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 (validate) and specific resource (one attachment against local safety policy), enumerating criteria (size, MIME type, extension, filename). This distinguishes it from sibling tools like download_attachment or list_attachments_with_safety.
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?
No guidance is provided on when to use this tool versus alternatives. It does not mention prerequisites, when not to use, or alternatives like list_attachments_with_safety or download_attachment_safe.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
TDQS
Multiple tools have overlapping purposes: list_emails and search_emails both return message lists with similar fields, read_email and read_email_with_privacy both read a single email, and download_attachment/download_attachment_safe/validate_attachment all handle attachment retrieval with safety. The descriptions help distinguish them, but the boundaries are still unclear and could cause misselection.
Most tools follow a consistent verb_noun snake_case pattern (e.g., read_email, list_emails, send_email, get_profile). However, a few tools have irregular modifiers like '_with_safety', '_safe', '_local', and '_with_privacy', which breaks the uniformity slightly but does not create chaos.
18 tools falls in the heavy range and feels slightly bloated due to redundancy. For instance, list_emails and search_emails overlap, and the attachment safety pipeline has three distinct tools that could be consolidated. Each tool has a purpose, but the count could be trimmed without losing capability.
Core Gmail workflows (read, search, send, reply, delete, labels) are covered, but there are significant gaps: create_draft has no way to send or update drafts, and get_labels exists but there are no tools to create or delete labels. This leaves workflows with dead ends, such as creating a draft that cannot be sent via the same server.
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
A MCP server for Gmail that lets you search, read, and draft emails and replies.
Read, search, send, organize, draft and schedule email across your inboxes from any MCP client.
Email infrastructure for AI agents — send, receive, search, and reply to email over MCP.
MCP server connecting AI agents to 100+ apps (Gmail, Slack, Notion, GitHub) via one-click OAuth.
Related MCP Servers
- AlicenseNot gradedqualityDmaintenanceMCP server that integrates with Gmail to enable sending, reading, and managing emails through tools like send-email, trash-email, get-unread-emails, and read-email.72GPL 3.0
- AlicenseNot gradedqualityDmaintenanceA comprehensive MCP server providing 24 tools for full Gmail management, including email operations, label organization, and batch filtering. It features multi-account support and secure OAuth authentication for interacting with mailboxes via natural language.205MIT
- FlicenseNot gradedqualityDmaintenanceA Gmail MCP server providing 19 tools for email operations, label and filter management, and attachment handling via the Gmail API.
- AlicenseNot gradedqualityAmaintenanceMCP server for Gmail that enables searching, reading, archiving, and managing email from any MCP client.541MIT
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/enoch-sit/gmail-mcp-server'
If you have feedback or need assistance with the MCP directory API, please join our Discord server