gmail-multi-mcp
Manage multiple Gmail accounts with tools for searching, reading, composing, sending, labeling, archiving, and trashing emails.
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-multi-mcpsearch personal inbox for unread 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-multi-mcp
Connect multiple Gmail accounts to Claude (or any MCP client) from one local server. The official Gmail connector only supports a single Google account β this lets you search, read, draft, send, label, and organize mail across as many accounts as you like, each addressed by a friendly alias.
Your OAuth tokens are stored locally on your machine only β never uploaded anywhere.
Features
π’ Unlimited accounts β every tool takes an
accountparameter ("personal","work", β¦)π Search & read β full Gmail search syntax, thread/message reading, attachment download
βοΈ Compose β create/list/delete drafts, send mail, replies with correct threading headers
π·οΈ Organize β full label management, archive, trash
π Local-first β standard Google OAuth; tokens live in
~/.gmail-mcp/, chmod 600π§© 22 tools, works with Claude Code, Claude Desktop, Cursor, and any MCP client
Related MCP server: Multi-Gmail MCP Server
Prerequisites
Node.js β₯ 20
A Google account (and a free Google Cloud project β setup below)
1. Install
git clone https://github.com/Vinksj/claude-gmail-multi.git
cd claude-gmail-multi
npm install
npm run build2. Create your Google OAuth app (one-time, ~10 min)
You register one OAuth "app" with Google; it then works for all the accounts you connect.
Go to console.cloud.google.com β create a project (e.g.
gmail-mcp).APIs & Services β Library β search Gmail API β Enable.
APIs & Services β OAuth consent screen:
User type External β Create.
App name + your support email + your contact email β Save and Continue.
Scopes page β Save and Continue. Test users page β Save and Continue.
Publish to production: on the OAuth consent screen, set Publishing status β Publish app. (In "Testing" mode Google expires your refresh token every 7 days. Publishing avoids that. You'll click through a one-time "Google hasn't verified this app" warning per account β that's normal for a personal app: choose Advanced β Continue.)
APIs & Services β Credentials β Create Credentials β OAuth client ID:
Application type Desktop app β Create β Download JSON.
Save that file as
~/.gmail-mcp/credentials.json:mkdir -p ~/.gmail-mcp && chmod 700 ~/.gmail-mcp mv ~/Downloads/client_secret_*.json ~/.gmail-mcp/credentials.json chmod 600 ~/.gmail-mcp/credentials.json
Note: newer Google Cloud UIs put these under "Google Auth Platform" (Branding / Audience / Clients) instead of "OAuth consent screen" β same steps, different labels.
3. Connect your accounts
npm run auth -- --alias personal --email you@gmail.com
npm run auth -- --alias work --email you@company.comEach opens a browser β pick the matching Google account β approve. The optional --email flag
aborts if the wrong account gets authorized (an easy mistake with multi-login browsers). Connect
as many as you want; re-run any time a token is revoked.
4. Register with your MCP client
Claude Code:
claude mcp add --scope user gmail-multi -- node "$(pwd)/dist/index.js"Claude Desktop / other clients β add to your MCP config:
{
"mcpServers": {
"gmail-multi": {
"command": "node",
"args": ["/absolute/path/to/gmail-multi-mcp/dist/index.js"]
}
}
}Tools appear as gmail-multi's search_threads, create_draft, etc. Ask things like
"search my work inbox for unread from this week" or "draft a reply in personal to Alice."
Tools
Group | Tools |
Accounts |
|
Read |
|
Compose |
|
Labels |
|
Cleanup |
|
Every tool except list_accounts takes an account parameter (alias or email). Replies via
replyToMessageId get correct In-Reply-To/References headers and threading automatically.
How it works
One self-owned Google Cloud OAuth app (Desktop client) authorizes any number of accounts.
Single scope:
https://www.googleapis.com/auth/gmail.modify(read, search, drafts, send, labels, archive, trash β narrower than fullhttps://mail.google.com/).Per-account refresh tokens stored in
~/.gmail-mcp/tokens/<alias>.json(chmod 600); the account registry is~/.gmail-mcp/config.json. Nothing leaves your machine.
~/.gmail-mcp/
βββ credentials.json # your OAuth client (you add this)
βββ config.json # alias β email map (auto-managed)
βββ tokens/<alias>.json # per-account refresh tokens (auto-managed)Security notes
Tokens are stored as plain files readable only by your user (chmod 600). On a single-user machine with full-disk encryption this is reasonable; moving token storage to the OS keychain is a sensible future hardening step.
Never commit
~/.gmail-mcp/β it lives in your home directory, outside this repo, and the repo's.gitignoreexcludes build artifacts and dependencies regardless.The
gmail.modifyscope cannot permanently delete mail βtrash_*tools move items to Trash (recoverable for 30 days).
Development
npm run build # tsc -> dist/
npm run inspect # MCP Inspector UI against the built server
npm run auth -- --alias <name> [--email <expected>]Important: stdout is the JSON-RPC channel β never console.log in server code; use console.error.
License
MIT Β© Saurabh Jain
Available Tools
22 toolsadd_accountA
Multi-account Gmail (all connected accounts). Connect a new Gmail account via OAuth: opens a browser for authorization and stores the token locally. If this times out before the user finishes, run instead in a terminal: npm run auth -- --alias (in the gmail-mcp project).
| Name | Required | Description | Default |
|---|---|---|---|
| alias | Yes | Short friendly name for the account, e.g. "personal" or "work". | |
| No | Expected email address β aborts if a different account is authorized. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations exist, so the description fully carries the burden. It discloses that OAuth opens a browser for authorization, stores token locally, and can time out, with a provided alternative. This is highly transparent for a connection setup 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?
Two sentences with no wasted words. First sentence states purpose and mechanism, second sentence provides a contingency plan. 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 complexity of OAuth, the description explains the workflow, browser interaction, token storage, and timeout handling. No output schema exists, but the return behavior is sufficiently implied (account added or error). Siblings are all different, so no confusion.
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 baseline is 3. The description mentions 'alias' in the fallback command but adds no new semantics beyond the schema descriptions for alias and email. It provides no additional parameter guidance.
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 connects a new Gmail account via OAuth, using active verb 'Connect' and specific resource 'new Gmail account'. It distinguishes itself from siblings like list_accounts and message operations, as no other tool adds accounts.
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 explains when to use the tool (to connect an account) and provides an explicit fallback if OAuth times out (npm command). It doesn't explicitly state when not to use it, but the context and alternative are clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
archive_threadA
Multi-account Gmail (all connected accounts). Archive a thread (remove it from the inbox; it stays searchable in All Mail).
| Name | Required | Description | Default |
|---|---|---|---|
| account | Yes | Which Gmail account to use: an alias (e.g. "personal", "work") or the email address. See list_accounts. | |
| threadId | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries full burden. It explains the core behavior: archive removes from inbox but keeps searchable in All Mail. However, does not mention reversibility or side effects like label changes.
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 plus a parenthetical, front-loading the key information with no superfluous 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 two-parameter tool with no output schema, the description covers purpose and effect. However, missing details about threadId format and return value leave some gaps 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 coverage is 50% (only account has description). The description does not mention any parameters or add meaning beyond the schema. threadId lacks any description in both schema and 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 action (archive), the resource (thread), and the effect (remove from inbox, keep in All Mail). This distinguishes it from siblings like trash_thread.
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 context for when to use (to tidy inbox without deletion) but does not explicitly exclude alternatives or state when not to use. Sibling distinction is implied.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_draftA
Multi-account Gmail (all connected accounts). Create a draft email (does NOT send). Supports replies via replyToMessageId.
| Name | Required | Description | Default |
|---|---|---|---|
| account | Yes | Which Gmail account to use: an alias (e.g. "personal", "work") or the email address. See list_accounts. | |
| to | No | Recipient email addresses. Optional when replying β defaults to the original sender. | |
| cc | No | ||
| bcc | No | ||
| subject | No | Optional when replying β defaults to "Re: <original subject>". | |
| body | Yes | Plain-text message body. | |
| replyToMessageId | No | Gmail message ID being replied to. Sets correct threading headers (In-Reply-To/References) and threadId automatically. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description must cover behavioral traits. It states the tool does not send, supports replies, and sets threading headers via replyToMessageId. However, it lacks details on side effects like drafts being saved, authentication requirements, or error conditions.
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 sentences, no wasted words. The multi-account note is front-loaded. Each sentence adds meaningful 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?
The description is brief and covers core functionality, but lacks context on what happens to the draft after creation, how to manage it (list/delete/send), or error scenarios. Given the simple nature of the tool, it is minimally viable but could be more helpful.
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 high (71%), so baseline is 3. The description adds value for the 'account' parameter (multi-account context, reference to list_accounts) and explains replyToMessageId. However, cc and bcc parameters lack descriptions in both schema and 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 creates a draft email and does not send it. It mentions multi-account support and reply capability via replyToMessageId. This distinguishes it from siblings like send_draft.
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 creating unsent emails and for replies, but does not explicitly state when not to use it or list alternatives. However, the context is clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_labelC
Multi-account Gmail (all connected accounts). Create a new label.
| Name | Required | Description | Default |
|---|---|---|---|
| account | Yes | Which Gmail account to use: an alias (e.g. "personal", "work") or the email address. See list_accounts. | |
| name | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description must disclose behaviors. It only mentions multi-account capability but does not specify effects (e.g., whether duplicates are allowed, permission needs, or side effects).
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 at two sentences, but could be more informative without being verbose. It front-loads the multi-account aspect.
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 creation tool with two parameters and no output schema, the description is adequate but lacks details on validation, return values, or error conditions.
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 50% since the 'name' parameter lacks a description. The description adds context for 'account' via multi-account mention but adds nothing for 'name', leaving its purpose implicit.
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 creates a new label in Gmail and highlights multi-account support, distinguishing it from related tools like delete_label and update_label.
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 on when to use this tool versus alternatives like update_label or when not to use it (e.g., if label already exists).
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete_draftA
Multi-account Gmail (all connected accounts). Delete a draft permanently (use this to discard a draft the user rejected). Does not affect sent mail.
| Name | Required | Description | Default |
|---|---|---|---|
| account | Yes | Which Gmail account to use: an alias (e.g. "personal", "work") or the email address. See list_accounts. | |
| draftId | Yes |
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 states the action is permanent and scoped to drafts only, but lacks details on authentication, rate limits, error states, or irreversibility beyond 'permanently'.
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 front-load the multi-account context and action. Every sentence adds value with no 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 no output schema and simple function, the description covers the basic purpose and a use case. However, it omits error handling (e.g., invalid draftId) and prerequisites for obtaining draftId.
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 50% (account described, draftId not). The description does not add any parameter-specific details beyond the schema, missing an opportunity to explain draftId's origin or format.
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 deletes a draft permanently and specifies it is for drafts the user rejected, distinguishing it from sent mail. Among siblings like create_draft and send_draft, the purpose is 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?
It provides a specific use case ('discard a draft the user rejected') and clarifies it does not affect sent mail, giving context for when to use. However, it does not explicitly mention alternatives or when not to use it, such as using trash_message for sent messages.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete_labelA
Multi-account Gmail (all connected accounts). Delete a label (does not delete the emails carrying it).
| Name | Required | Description | Default |
|---|---|---|---|
| account | Yes | Which Gmail account to use: an alias (e.g. "personal", "work") or the email address. See list_accounts. | |
| labelId | Yes |
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 clearly discloses that deleting a label does not delete the emails carrying it, which is a key behavioral detail. However, it lacks information on permissions, reversibility, or side effects like cascading effects on filters.
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 no waste. It front-loads important context ('Multi-account Gmail') and then states the action and key nuance. 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 has two required parameters and no output schema, the description covers the core behavior. However, it does not mention prerequisites (e.g., label must exist) or return values. It is adequate for a simple tool but leaves some gaps.
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 50% (account has a good description, labelId lacks one). The tool description does not provide any additional details for 'labelId' beyond the schema. Since coverage is moderate, the description should compensate but does not add meaning for the undocumented 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 explicitly states 'Delete a label' which is a specific verb and resource. It distinguishes from siblings like 'create_label' and 'update_label' by clearly indicating it is a deletion operation. The additional clarification that it does not delete emails carrying the label provides precise scope.
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 context about multi-account Gmail but does not explicitly guide when to use this tool versus alternatives. It implies usage when a label needs to be removed, but no 'when not to use' or comparison with related tools like 'trash_message' is given.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
download_attachmentA
Multi-account Gmail (all connected accounts). Download an email attachment to ~/Downloads. Get attachmentId from get_thread/get_message.
| Name | Required | Description | Default |
|---|---|---|---|
| account | Yes | Which Gmail account to use: an alias (e.g. "personal", "work") or the email address. See list_accounts. | |
| messageId | Yes | ||
| attachmentId | Yes | ||
| filename | No | Filename to save as (from the attachment metadata). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Without annotations, the description carries full burden. It discloses the download destination and multi-account support but omits details like overwrite behavior, size limits, or permissions required.
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?
Extremely concise with two sentences, no wasted words, and front-loaded 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?
Given no output schema and 4 parameters, the description covers action and key sources but could explain return values, overwrite behavior, and more details on filename 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 coverage is low (50%), and the description adds value: it explains how to get attachmentId and provides context for account and filename. However, messageId and attachmentId descriptions are absent in schema, and description doesn't fully compensate for all 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 what the tool does: download an email attachment to ~/Downloads. It specifies the destination and how to obtain the attachmentId, distinguishing it from sibling tools that do other Gmail 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?
Provides context that it works across all connected accounts and instructs to get attachmentId from get_thread/get_message. However, it lacks explicit when-not-to-use or alternatives among sibling tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_messageA
Multi-account Gmail (all connected accounts). Read a single email message in full (untruncated up to ~20k chars).
| Name | Required | Description | Default |
|---|---|---|---|
| account | Yes | Which Gmail account to use: an alias (e.g. "personal", "work") or the email address. See list_accounts. | |
| messageId | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Discloses the untruncated message length limit (~20k chars), which is important behavioral context. However, no annotations are provided, and the description does not cover authentication requirements, response format, or error conditions, leaving 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?
Two short sentences that are front-loaded with key context (multi-account) and functionality. No wasted words, though the structure could be slightly improved by integrating the two ideas.
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?
Lacks explanation of the return value structure (e.g., fields like body, headers) and does not mention that message might be part of a thread. Given the absence of an output schema, the description should provide more details on what 'in full' entails.
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 'account' parameter is described in both schema and description, but 'messageId' lacks description in both places. With 50% schema coverage, the description adds some context for account but does not fully compensate for the missing messageId explanation.
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 'Read a single email message in full' with a specific verb and resource, and distinguishes from sibling tools like get_thread and search_threads by focusing on a single message. Provides additional context about multi-account support.
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?
Implies usage for reading a full message, and mentions multi-account, but does not explicitly specify when to use this tool versus alternatives (e.g., get_thread for thread context). No 'when not to use' guidance is provided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_threadA
Multi-account Gmail (all connected accounts). Read a full email thread (all messages, bodies, attachment metadata).
| Name | Required | Description | Default |
|---|---|---|---|
| account | Yes | Which Gmail account to use: an alias (e.g. "personal", "work") or the email address. See list_accounts. | |
| threadId | Yes | ||
| includeFullBodies | No | Default true. Set false for a quick skim (300-char bodies). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the burden. It states this is a read operation (non-destructive), covers multiple accounts, and lists returned data (messages, bodies, attachment metadata). It does not mention whether reading marks as read or any rate limits, but overall provides good transparency for a read action.
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 sentences, efficient and front-loaded with scope and action. No extraneous 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?
Given no output schema and no annotations, the description covers the tool's function, scope, and return data adequately for a read tool. Could mention authentication or pagination but these are not critical for a single thread read.
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 67%, so baseline is 3. The description does not explicitly describe parameters but contextualizes that you need a threadId to specify which thread and that includeFullBodies controls detail. It adds moderate value 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?
Description clearly states the verb 'Read' and resource 'full email thread', specifying it includes all messages, bodies, and attachment metadata. It also clarifies multi-account scope, distinguishing it from sibling tools like get_message (single message) and search_threads (searching).
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 full thread content but lacks explicit guidance on when to use this tool versus alternatives like get_message or search_threads. No direct mention of prerequisites or exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
label_messageB
Multi-account Gmail (all connected accounts). Add labels to a single message.
| Name | Required | Description | Default |
|---|---|---|---|
| account | Yes | Which Gmail account to use: an alias (e.g. "personal", "work") or the email address. See list_accounts. | |
| messageId | Yes | ||
| labels | Yes | Label names or IDs. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided. Description only states the action, but does not disclose permissions, side effects, reversibility, or rate limits. For a mutation tool, more context is needed.
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?
Single sentence, front-loaded, no wasted words. Efficiency is excellent.
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?
Tool is simple but lacks essential details like prerequisites, return values, and whether labels are additive. Without annotations, the description is insufficient for complete 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 coverage is 67% (messageId lacks description). Description does not add semantic meaning beyond the schema, failing to compensate for missing parameter documentation.
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?
Description clearly states verb 'Add labels' and resource 'single message', with context 'Multi-account Gmail'. It distinguishes from sibling tools like label_thread and unlabel_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?
Implied usage: for labeling a single message, not a thread. No explicit when-to-use or alternatives, but the context of sibling tools provides some differentiation.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
label_threadB
Multi-account Gmail (all connected accounts). Add labels to a thread.
| Name | Required | Description | Default |
|---|---|---|---|
| account | Yes | Which Gmail account to use: an alias (e.g. "personal", "work") or the email address. See list_accounts. | |
| threadId | Yes | ||
| labels | Yes | Label names or IDs. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries full transparency burden. It does not disclose whether labels are added or replaced, limits, side effects, or required permissions.
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?
Extremely concise: one sentence that is front-loaded with the multi-account context. No unnecessary 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 tool that modifies state (adds labels) with no output schema and no annotations, the description is insufficient. It does not explain behavior, error cases, or idempotency, leaving the agent underinformed.
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 67% (two of three params have descriptions). The description adds no extra meaning about the parameters (e.g., threadId remains undocumented). It does not compensate for the missing parameter 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 action: 'Add labels to a thread.' It specifies the scope: 'Multi-account Gmail (all connected accounts).' This distinguishes it from sibling tools like 'label_message' or 'archive_thread'.
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 on when to use this tool versus alternatives like 'label_message' or 'unlabel_thread'. The description only states the action without context on prerequisites or exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_accountsA
Multi-account Gmail (all connected accounts). List the connected Gmail accounts (alias + email). Call this when unsure which accounts exist or what to pass as "account".
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations, so description carries full burden. It discloses it lists multiple accounts with alias and email, but does not mention read-only behavior, scalability, or authentication needs. Adequate for a simple listing 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?
Two sentences, front-loaded with purpose and usage. No filler 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?
Given zero parameters and no output schema, the description is fairly complete. It explains what is listed (alias + email) and when to use it. Lacks details on return format or integration with sibling tools, but sufficient for basic 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?
No parameters; schema coverage is 100%. Baseline 4 applies as description adds value by clarifying the output (alias + email), though not required.
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 'List the connected Gmail accounts (alias + email)' with a specific verb (list) and resource (connected accounts). It distinguishes from sibling tools like 'add_account' by focusing on enumeration.
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?
Explicitly says 'Call this when unsure which accounts exist or what to pass as 'account'', providing clear context for use. Lacks explicit when-not-to-use but is sufficient for a discovery tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_draftsA
Multi-account Gmail (all connected accounts). List saved drafts with their subjects and recipients.
| Name | Required | Description | Default |
|---|---|---|---|
| account | Yes | Which Gmail account to use: an alias (e.g. "personal", "work") or the email address. See list_accounts. | |
| maxResults | No | Default 10. |
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 lists subjects and recipients, but does not specify the complete return structure (e.g., draft ID, snippet, timestamp) or whether it only returns metadata. It is a read-only operation, but this is 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 concise, consisting of one short sentence that front-loads the multi-account capability. Every word earns its place, though it could be slightly more structured (e.g., separating the multi-account note from the listing function).
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 list tool with few parameters and no output schema, the description is adequate. It explains the core function and scope. However, it lacks details on the output format, pagination, or how drafts are ordered, which would help the AI agent fully understand the tool's behavior.
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% (both parameters described in schema). The description adds context about multi-account support but does not add meaning beyond the schema for the parameters themselves. Baseline 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 clearly states that the tool lists saved drafts, specifies it works across multiple Gmail accounts, and mentions the fields returned (subjects and recipients). This distinguishes it from sibling tools like create_draft, delete_draft, and send_draft.
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 context that it supports multiple accounts, but does not explicitly state when to use this tool versus alternatives (e.g., search_threads for finding drafts by criteria). No exclusion criteria or when-not-to-use guidance is given.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_labelsA
Multi-account Gmail (all connected accounts). List all labels in one account (system + user labels).
| Name | Required | Description | Default |
|---|---|---|---|
| account | Yes | Which Gmail account to use: an alias (e.g. "personal", "work") or the email address. See list_accounts. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds that it covers all connected accounts and lists both system and user labels, but lacks details on response format, permission requirements, or performance characteristics. With no annotations, more behavioral context would be beneficial.
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 sentences, no filler. The purpose is front-loaded and every word is informative.
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 list tool with one parameter and no output schema, the description provides sufficient context: what it returns, per-account scope, and inclusion of system/user labels. Minor gap: no mention of response structure.
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 description adds marginal value by clarifying the account parameter's role in selecting which account's labels to list. It does not add format or constraints 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 it lists all labels (system + user) for one account, and the multi-account mention distinguishes it from single-account label tools. It's specific and contrasts with siblings like create_label or delete_label.
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 vs alternatives. While it implies use before performing label operations, it does not state conditions or exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_threadsA
Multi-account Gmail (all connected accounts). Search email threads in one account using full Gmail search syntax (e.g. "from:alice is:unread newer_than:7d has:attachment subject:invoice"). Returns compact thread summaries.
| Name | Required | Description | Default |
|---|---|---|---|
| account | Yes | Which Gmail account to use: an alias (e.g. "personal", "work") or the email address. See list_accounts. | |
| query | Yes | Gmail search query. | |
| maxResults | No | Default 10, max 25. | |
| pageToken | No | From a previous result, for pagination. | |
| labelIds | No | Restrict to these label IDs (e.g. ["INBOX"]). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description explains the multi-account behavior, search syntax, and return format. It is transparent about being a read operation, though does not mention authentication or potential side effects like rate limits.
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 sentences: first sets the multi-account context, second describes functionality with an example. No wasted words, efficiently front-loaded.
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 output schema, the description explains 'compact thread summaries' which covers return values. It does not cover pagination details or account prerequisites, but schema handles parameter ranges and labels. Overall adequate.
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 baseline is 3. The description adds value by explaining the search syntax and summarizing return format, enhancing meaning beyond schema parameter 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 email threads using full Gmail syntax, and the multi-account context distinguishes it from siblings like get_thread or archive_thread. Specific verb+resource combination with explicit scope.
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 searching within a single account but provides no explicit when-to-use or when-not-to guidance, nor mentions alternatives like get_thread for a specific thread.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
send_draftA
Multi-account Gmail (all connected accounts). Send an existing draft. Sends immediately as the account's email address β only after the user approved it.
| Name | Required | Description | Default |
|---|---|---|---|
| account | Yes | Which Gmail account to use: an alias (e.g. "personal", "work") or the email address. See list_accounts. | |
| draftId | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided. Description discloses immediate sending and user approval requirement but omits details on irreversibility, permissions, or error states.
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 efficient sentences, front-loaded with key context (multi-account, send draft). 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?
No output schema, but description adequately covers purpose, account selection, and user approval. Could mention return value (e.g., message ID) or error handling.
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?
Account parameter has helpful description referencing list_accounts. DraftId parameter lacks description beyond type string; only 50% schema coverage, so description adds some value but not fully compensates.
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 it sends an existing draft and specifies the multi-account Gmail context. Distinguishes from siblings like create_draft and send_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?
Indicates user approval is required, implying appropriate use after consent. Does not explicitly list when not to use or alternatives, but context is clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
send_messageA
Multi-account Gmail (all connected accounts). Send an email immediately as the account's email address. Prefer create_draft unless the user has explicitly approved sending. Supports replies via replyToMessageId.
| Name | Required | Description | Default |
|---|---|---|---|
| account | Yes | Which Gmail account to use: an alias (e.g. "personal", "work") or the email address. See list_accounts. | |
| to | No | Recipient email addresses. Optional when replying β defaults to the original sender. | |
| cc | No | ||
| bcc | No | ||
| subject | No | Optional when replying β defaults to "Re: <original subject>". | |
| body | Yes | Plain-text message body. | |
| replyToMessageId | No | Gmail message ID being replied to. Sets correct threading headers (In-Reply-To/References) and threadId automatically. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
While the description reveals that send_message sends immediately and sets threading headers for replies, it lacks details on side effects, rate limits, authentication requirements, or undo capabilities. With no annotations, more behavioral disclosure would be beneficial.
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 sentences pack essential information without fluff. The most critical guidance (prefer create_draft) is front-loaded. Every sentence 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 7 parameters and no output schema, the description adequately covers the tool's purpose, usage guidelines, key parameter semantics, and multi-account behavior. It is sufficient for an AI agent to understand when and why to use it, though it could mention error handling or return values.
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 71%, and the description adds value beyond the schema by explaining that replyToMessageId sets threading headers and threadId automatically, and that subject and to are optional when replying. It also clarifies the account parameter's usage.
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 sends an email immediately, specifies it works with multi-account Gmail, and distinguishes from create_draft by advising to prefer draft unless user explicitly approves sending. It also mentions support for replies via replyToMessageId.
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?
Explicitly advises to prefer create_draft unless user has explicitly approved sending, providing clear guidance on when to use this tool. Also notes that replies are supported via replyToMessageId, indicating appropriate scenarios.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
trash_messageA
Multi-account Gmail (all connected accounts). Move a single message to Trash (recoverable for 30 days).
| Name | Required | Description | Default |
|---|---|---|---|
| account | Yes | Which Gmail account to use: an alias (e.g. "personal", "work") or the email address. See list_accounts. | |
| messageId | Yes |
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 discloses the 30-day recoverability and multi-account support, which are useful. However, it does not mention idempotency, error states, or required permissions. For a mutation tool, this is adequate but not comprehensive.
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 unnecessary words. It front-loads the multi-account context and the core action, making it highly efficient. Every word adds value, achieving perfect conciseness.
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, no output schema, and low parameter coverage, the description is insufficient. It does not specify the format of messageId, nor does it guide the agent on distinguishing from sibling tools like trash_thread. Essential behavioral details like rate limits or permissions are absent, making it incomplete for reliable 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 description coverage is 50% (account described, messageId not). The description does not explain what messageId is (e.g., a Gmail message ID) or its format, nor does it add meaning to account beyond what schema provides. It fails to compensate for the undocumented parameter, leaving ambiguity.
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 (move to Trash), the resource (a single message), and the context (multi-account Gmail). It explicitly mentions recoverability for 30 days, distinguishing it from archive or permanent delete. The verb is specific and the resource is well-defined, achieving high clarity.
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 trashing individual messages but does not explicitly state when to use this tool versus alternatives like trash_thread (for threads) or archive_message. It lacks when-not guidance or explicit context for selection, though the sibling tool names provide indirect differentiation.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
trash_threadB
Multi-account Gmail (all connected accounts). Move a whole thread to Trash (recoverable for 30 days).
| Name | Required | Description | Default |
|---|---|---|---|
| account | Yes | Which Gmail account to use: an alias (e.g. "personal", "work") or the email address. See list_accounts. | |
| threadId | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description reveals that trashed threads are recoverable for 30 days, which is useful transparency. However, without annotations, it fails to disclose important behaviors such as effects on labels, attachments, or cross-account implications beyond the multi-account statement.
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 extremely concise with two sentences that front-load the key information. Every word adds value with no 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?
The tool is destructive and has no output schema or usage context. The description omits details about return values, side effects, and prerequisites, leaving the agent under-informed for a simple but consequential operation.
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 50% coverage (only 'account' has description; 'threadId' lacks one). The tool description adds no additional meaning for either parameter, failing to compensate for the missing schema detail.
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 ('Move a whole thread to Trash'), the resource ('thread'), and the scope ('Multi-account Gmail (all connected accounts)'). It is specific and distinguishes from siblings like 'trash_message' and 'archive_thread'.
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 given on when to use this tool versus alternatives like 'trash_message'. The description lacks explicit context or exclusions, leaving the agent to infer.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
unlabel_messageB
Multi-account Gmail (all connected accounts). Remove labels from a single message.
| Name | Required | Description | Default |
|---|---|---|---|
| account | Yes | Which Gmail account to use: an alias (e.g. "personal", "work") or the email address. See list_accounts. | |
| messageId | Yes | ||
| labels | Yes | Label names or IDs. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description bears full responsibility for behavioral disclosure. It states the action but omits side effects, permissions, or what happens to the message (e.g., thread 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 short with two sentences, no redundancy. The first sentence provides context, the second states the action. It is appropriately lean but could merge the sentences.
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 3-parameter required tool with no output schema or annotations, the description is too brief. It lacks error conditions, return value, and prerequisites for messageId retrieval.
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 67% (messageId lacks description). The description adds context for account ('multi-account') but does not explain messageId or labels format, only repeating the action.
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 the resource 'labels from a single message', distinguishing it from sibling tools like label_message (adds labels) and unlabel_thread (operates on threads).
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 mentions multi-account support but provides no explicit guidance on when to use this tool versus alternatives like label_message or unlabel_thread. The context is implied but not directive.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
unlabel_threadB
Multi-account Gmail (all connected accounts). Remove labels from a thread.
| Name | Required | Description | Default |
|---|---|---|---|
| account | Yes | Which Gmail account to use: an alias (e.g. "personal", "work") or the email address. See list_accounts. | |
| threadId | Yes | ||
| labels | Yes | Label names or IDs. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are present, so the description must disclose behavioral traits. It states the action but does not explain idempotency, permission requirements, or what happens when labels are not present. Basic mutation is clear.
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 with no redundancy, but could briefly mention the thread-level effect for completeness.
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 output schema and moderate parameter schema coverage, the description is sparse. It does not explain return value, errors, or the scope of label removal within the thread, leaving gaps 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 67% (threadId lacks description). The tool description adds no parameter-level meaning beyond what's in the schema, such as clarifying the threadId format or how labels are matched.
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 'labels from a thread', distinguishing it from siblings like label_thread (adds) and unlabel_message (different scope). The multi-account context is also noted.
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 for removing labels from threads in multi-account Gmail, but gives no explicit guidance on when to choose this over unlabel_message or other sibling tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_labelB
Multi-account Gmail (all connected accounts). Rename a label.
| Name | Required | Description | Default |
|---|---|---|---|
| account | Yes | Which Gmail account to use: an alias (e.g. "personal", "work") or the email address. See list_accounts. | |
| labelId | Yes | ||
| name | Yes | New name. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description must disclose behavioral traits. It only says 'Rename a label' and mentions multi-account support, but does not indicate if the operation is destructive, reversible, or requires special permissions.
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 very concise with two short sentences, but it is functional and front-loaded with the key action. However, it could be slightly more 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 has three required parameters and no output schema or annotations, the description fails to provide complete context. Missing details on return values, error states, and 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?
Schema coverage is 67%, so the schema provides descriptions for account and name. The description adds no additional meaning beyond the schema, and the 'labelId' parameter is undocumented.
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 renames a label, with a specific verb ('rename') and resource ('label'). It distinguishes from sibling tools like create_label, delete_label, and list_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 given on when to use this tool versus alternatives. The agent is not told when not to use it (e.g., to change other label properties) or any prerequisites.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
TDQS
Every tool targets a distinct action and resource (accounts, threads, messages, drafts, labels, attachments). There is no ambiguity between similar operations like trash_thread vs trash_message or label_thread vs label_message, as the descriptions clearly differentiate the scope.
All tool names follow a consistent verb_noun pattern using snake_case (e.g., create_draft, list_labels, send_message). The verbs are clear and uniform, making the tool set predictable for an agent.
With 22 tools, the server covers the core Gmail API surface comprehensively, including account management. While this is above the typical 3-15 range for a well-scoped server, each tool serves a distinct purpose and the count is justified by the multi-account complexity.
The tool set covers CRUD operations for threads, messages, drafts, and labels, plus search, attachments, and account management. Minor gaps exist (e.g., no explicit mark-as-read or spam tools), but these are handled indirectly through labeling and the core workflows are well-supported.
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
Read, search, send, organize, draft and schedule email across your inboxes from any MCP client.
A MCP server for Gmail that lets you search, read, and draft emails and replies.
Email infrastructure for AI agents β send, receive, search, and reply to email over MCP.
Manage Gmail end-to-end: search, read, send, draft, label, and organize threads. Automate workflowβ¦
Related MCP Servers
- FlicenseNot gradedqualityCmaintenanceEnables interacting with multiple Gmail accounts through a single MCP server, supporting search, labels, drafts, and thread management with per-account OAuth.
- FlicenseNot gradedqualityCmaintenanceEnables searching, reading, and drafting emails across multiple Gmail accounts through a single MCP server.
- FlicenseNot gradedqualityCmaintenanceEnables reading, searching, sending, and drafting Gmail emails via MCP tools, with support for multiple accounts and background notifications.
- AlicenseNot gradedqualityCmaintenanceA local-first MCP server for managing multiple Gmail accounts with separate OAuth grants, supporting search, retrieval, labels, drafts, and attachments while deferring direct send and destructive actions for safety.MIT
Appeared in Searches
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/Vinksj/claude-gmail-multi'
If you have feedback or need assistance with the MCP directory API, please join our Discord server