Skip to main content
Glama
anitalklausen

gmail-multi-mcp

gmail-multi-mcp

An open-source MCP server that connects any number of Gmail accounts to Claude (or any MCP client) in one place. Everything runs locally, and your tokens never leave your machine.

Tools

Tool

What it does

list_accounts

Lists the connected accounts, with alias and read-only status

search_emails

Runs a Gmail search query on one account or all of them at once

read_email / read_thread

Reads one message or a whole conversation as plain text, with a list of attachments

list_labels

Lists the labels for an account

list_send_as

Lists the addresses an account can send from (Gmail's "Send mail as")

send_email

Sends mail from a chosen account, including threaded replies. from_address picks one of the account's "Send mail as" addresses

create_draft

Saves a draft instead of sending

modify_labels

Marks mail read or unread, archives, stars, or adds and removes labels

trash_email

Moves a message to Trash (recoverable)

Every tool takes an account argument, which can be the full email address or an alias such as work.

Sender addresses: if an account has extra addresses under Gmail's Settings → Accounts → Send mail as, send_email and create_draft can send from any of them with from_address. Without it, a reply goes out from the address the original was sent to, and a new mail goes out from Gmail's default sender.

Related MCP server: gmail-mcp-server

1. Create a Google OAuth client (once)

  1. Open https://console.cloud.google.com/ and create a project.

  2. APIs & Services → Library → enable the Gmail API.

  3. APIs & Services → OAuth consent screen: choose External and fill in the app name and your email. Under Test users, add every Gmail address you want to connect.

  4. APIs & Services → Credentials → Create credentials → OAuth client ID → Desktop app. Download the JSON file.

  5. Save the file as ~/.config/gmail-multi-mcp/credentials.json.

Tip: while the app is in Testing status, Google expires refresh tokens after 7 days. For personal use you can click Publish app on the consent screen. It stays unverified, so you'll see an "unverified app" warning when you sign in, but the tokens stop expiring.

One OAuth client works for all your accounts.

2. Install

Install uv. It also installs Python for you:

curl -LsSf https://astral.sh/uv/install.sh | sh

Then install the server straight from GitHub:

uv tool install https://github.com/anitalklausen/gmail-multi-mcp/archive/refs/heads/main.zip

To install from a local clone instead, run uv tool install . in the project folder.

This puts gmail-multi-mcp in ~/.local/bin.

3. Connect accounts

Run this once per account. A browser opens where you choose the Google account:

gmail-multi-mcp add --alias private
gmail-multi-mcp add --alias work
gmail-multi-mcp add --alias shop --read-only
gmail-multi-mcp list

Remove an account with gmail-multi-mcp remove work. New accounts are picked up by the running server without a restart.

4. Add it to Claude

Claude Desktop: go to Settings → Developer → Edit Config and add the server to claude_desktop_config.json:

{
  "mcpServers": {
    "gmail": {
      "command": "/Users/YOUR_USERNAME/.local/bin/gmail-multi-mcp"
    }
  }
}

Use the absolute path, because Claude Desktop does not read your shell's PATH. Restart Claude Desktop afterwards.

Claude Code:

claude mcp add gmail --scope user -- ~/.local/bin/gmail-multi-mcp

Configuration

Environment variable

Effect

GMAIL_MCP_HOME

Config/token folder. The default is ~/.config/gmail-multi-mcp.

GMAIL_MCP_CREDENTIALS

Path to the OAuth client JSON

GMAIL_MCP_READ_ONLY=1

Hides every write tool (send, draft, labels, trash) for all accounts

Security

  • Tokens are stored in tokens/<email>.json with 600 permissions. Treat them like passwords.

  • The default scope is gmail.modify: read, send, and change labels, but never permanent deletion. Accounts added with --read-only get gmail.readonly.

  • The server tells the model to confirm with you before sending, and Claude also asks for approval on every tool call.

See also the privacy policy.

License

MIT

Available Tools

9 tools
create_draftB

Save an email as a draft in the given account (not sent).

ParametersJSON Schema
NameRequiredDescriptionDefault
ccNo
toYes
bccNo
bodyYes
accountYes
subjectYes
reply_to_message_idNo

TDQS

B3/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full behavioral burden. It does disclose the key outcome, that the email is saved as a draft and not sent, but omits permission requirements, whether the draft is later visible or editable, and any mutation 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.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single front-loaded sentence with no filler or repetition. It is very concise, though arguably too sparse given the tool's 7 parameters and lack of annotations.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given 7 parameters, no annotations, no output schema, and 0% schema description coverage, the description is incomplete. It establishes purpose and draft-vs-send behavior, but leaves major gaps in parameter meaning, usage routing, and behavioral expectations.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters1/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0% across 7 parameters. The description mentions only 'the given account' and a generic 'email', leaving required fields like to, subject, and body plus optional fields like cc, bcc, and reply_to_message_id completely undocumented.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses a specific verb and resource: 'Save an email as a draft in the given account.' The parenthetical '(not sent)' distinguishes it from the sibling send_email tool, so an agent can identify its purpose without opening the schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The phrase '(not sent)' implies this tool is for drafting rather than sending, but the description does not explicitly state when to choose it over send_email or other siblings. No prerequisites, account constraints, or exclusions are given beyond the not-sent clarification.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_accountsA

List all connected Gmail accounts with their alias and read-only status.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.1/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

There are no annotations, so the description must carry the behavioral burden. It implies a read-only listing and discloses that alias and read-only status are returned, but it does not explicitly confirm that the operation is non-destructive, mention authentication requirements, or clarify pagination or ordering behavior.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The definition is a single, front-loaded sentence with no wasted words. It communicates the essential information efficiently.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's low complexity, zero parameters, and the presence of an output schema, the description is complete enough. It succinctly describes what is listed and highlights the key returned fields without redundant detail.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool takes zero parameters and schema coverage is effectively 100% for the empty object. The description does not need to explain parameter semantics, so a baseline of 4 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb ('List') and resource ('connected Gmail accounts') and adds the returned fields (alias, read-only status). It clearly distinguishes this account-listing tool from the email and label operation siblings without needing a sibling reference.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Usage is implied by the description: call this tool when you need to enumerate connected Gmail accounts. However, it does not explicitly state when to choose this tool over alternatives or any prerequisites, leaving the agent to infer the context.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_labelsC

List labels (system and user-created) for an account.

ParametersJSON Schema
NameRequiredDescriptionDefault
accountYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

C2.8/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full behavioral burden. It discloses only the label scope (system vs user-created); nothing about permissions/auth requirements, pagination, or result limits for what could be a large label set.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single efficient sentence with the resource and scope front-loaded. No wasted words, though it is arguably too terse to carry the required detail.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists, so return values need not be explained, and a one-parameter list tool is inherently simple. Still, the account format and usage context are absent, leaving gaps for an agent to call it correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 0% and the single 'account' parameter has no description in the schema. The phrase 'for an account' only vaguely gestures at it and does not clarify the expected format (ID, email, or name), so the description fails to compensate for the coverage gap.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb (List) and resource (labels) plus scope (system and user-created, for an account). It implicitly separates from the sibling modify_labels by being a read operation, but never names or contrasts with any sibling explicitly.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No when-to-use guidance, no prerequisites, and no mention of alternatives such as modify_labels or how this relates to search_emails filtering. The agent must infer usage entirely.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

modify_labelsB

Add/remove labels by name or id. Examples: mark read = remove ['UNREAD']; archive = remove ['INBOX']; star = add ['STARRED'].

ParametersJSON Schema
NameRequiredDescriptionDefault
accountYes
add_labelsNo
message_idYes
remove_labelsNo

TDQS

B3.2/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full behavioral burden, and it largely does not: it is a mutation tool but says nothing about reversibility, permissions, error behavior on unknown labels, or whether unmentioned labels are preserved. The examples do convey that Gmail semantics collapse 'archive' into label removal, which is useful but narrow.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences, operation stated first, then three dense examples. Every clause earns its place and nothing is padded.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a mutation tool with zero annotation coverage, no output schema, and 0% parameter documentation, the description should at minimum clarify the required identifiers and the response/error surface. It leaves both the account/message_id semantics and the result shape unstated, so an agent cannot call it confidently without trial and error.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must compensate. 'By name or id' does clarify the value format for add_labels/remove_labels, but the two required parameters (account, message_id) are entirely undefined in both schema and description — an agent cannot tell whether account is an email, an alias, or an id.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb pair (add/remove) and resource (labels), with concrete examples that pin down the Gmail label semantics. It does not explicitly name the sibling it is distinguished from (list_labels), but the 'archive = remove [INBOX]' example implicitly separates it from trash_email.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The three worked examples (mark read, archive, star) map common intents directly onto the call, which is strong implied guidance for when to use it. However it never states when NOT to use it, nor which tool handles the related intents it does not cover.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

read_emailB

Read one email in full (headers, plain-text body, attachment list).

ParametersJSON Schema
NameRequiredDescriptionDefault
accountYes
message_idYes
max_body_charsNo

TDQS

B3/5.0
Behavior3/5

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 helpfully discloses the shape of the payload (headers, plain-text rather than HTML body, attachment names rather than attachment contents), but omits whether reading marks the message as read or requires any specific auth/scope, which are meaningful side effects for an email read.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single front-loaded sentence with the resource, scope, and payload contents, and no filler. Every clause earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema, no annotations, and 0% schema coverage, the description is the only source of truth, yet it leaves parameter meaning, truncation behavior, and side effects unspecified. An agent cannot confidently determine how to obtain message_id or whether a 20000-char cap applies.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so all three parameters (account, message_id, max_body_chars) are undocumented, and the description adds no meaning for account or where message_id comes from. It also says 'in full' while the schema exposes max_body_chars defaulting to 20000, leaving truncation behavior unexplained.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description names a specific verb and resource ('Read one email in full') and scopes it to a single message with an enumerated content set (headers, plain-text body, attachment list), which distinguishes it from read_thread at a glance. It stops short of naming any sibling explicitly, so an agent must infer the boundary rather than read it.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no when-to-use guidance and no exclusions. With siblings like search_emails and read_thread available, the description never says whether to call this after a search or how it differs from reading an entire thread.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

read_threadC

Read every message in a conversation thread, oldest first.

ParametersJSON Schema
NameRequiredDescriptionDefault
accountYes
thread_idYes
max_body_charsNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

C2.9/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full behavioral burden. It usefully discloses that messages are returned 'oldest first', but says nothing about permissions, pagination, or the fact that message bodies may be truncated — despite a max_body_chars parameter existing.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single front-loaded sentence with no filler, and 'oldest first' is the kind of detail that earns its place. It is slightly under-specified rather than bloated, which is the safer failure mode.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists, so return values need not be described, but for a no-annotation tool with 0% parameter coverage and a truncating parameter, the description is too thin. Truncation behavior and read permissions are the notable omissions.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0% across three parameters, so the description must compensate and does not. Neither 'account' nor 'thread_id' nor the meaningful 'max_body_chars' (default 8000, evidently a truncation control) is explained anywhere.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description gives a specific verb (Read) and resource (every message in a conversation thread) plus the ordering, so the scope is clear. It implicitly distinguishes itself from read_email (single message) and search_emails, but never names a sibling to make the distinction explicit.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Usage is only implied: the phrase 'every message in a conversation thread' suggests this is for whole-thread retrieval rather than a single message. There is no explicit when-to-use, when-not-to-use, or named alternative among read_email or search_emails.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

search_emailsA

Search email using Gmail search syntax (e.g. 'is:unread from:bob newer_than:7d').

Args: query: Gmail search query. Empty returns the newest messages. account: Email or alias. Omit to search ALL connected accounts. max_results: Max messages per account (1-50).

ParametersJSON Schema
NameRequiredDescriptionDefault
queryNo
accountNo
max_resultsNo

TDQS

A3.5/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full disclosure burden. It does disclose useful behavior (empty query returns newest messages, omitting account fans out across ALL connected accounts, max_results range 1-50), but says nothing about output shape, pagination across accounts, rate limits, or auth scope.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with the purpose and a syntax example, then a compact per-parameter block. Every line earns its place; the Args formatting is slightly schema-like but not wasteful.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a read-only search tool with no annotations and no output schema, the description covers inputs well but never indicates what comes back (message IDs, snippets, thread grouping?) or how results behave when multiple accounts are searched. That gap is minor for a search primitive but real.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must compensate, and it does: it defines the query dialect, explains that an empty query returns newest messages, clarifies that account accepts an email or alias and that omitting it searches every connected account, and adds a 1-50 bound not present in the schema. Only max_results' default behavior is left implicit.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb (Search) and resource (email) and pins down the query dialect with a concrete Gmail-syntax example ('is:unread from:bob newer_than:7d'), which cleanly separates it from read_email/read_thread/list_accounts. It stops short of explicitly naming a sibling or stating when this is preferred over them, so it lands at 4 rather than 5.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Usage is implied by the syntax example and by the hints that an empty query 'returns the newest messages' and omitting account searches all accounts, which is genuinely useful context. However, there is no explicit when-to-use vs when-not guidance and no reference to alternatives such as read_email, so it stays at the minimum-viable level.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

send_emailA

Send an email from the given account. Confirm content with the user first.

Args: account: Sender account (email or alias). to: Comma-separated recipients. subject: Subject. May be empty when replying (uses 'Re: '). body: Plain-text body. reply_to_message_id: Message id to reply to; keeps the thread intact.

ParametersJSON Schema
NameRequiredDescriptionDefault
ccNo
toYes
bccNo
bodyYes
accountYes
subjectYes
reply_to_message_idNo

TDQS

A3.5/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full burden. It does disclose two useful traits — that user confirmation is required before sending, and that reply_to_message_id preserves the thread — but says nothing about irreversibility, required send permissions, or rate/account limits, which matter for an outbound mutation.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with purpose and the confirmation rule, then a compact Args block; each line carries information rather than filler. It is appropriately sized for a 7-parameter tool.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Covers purpose, most parameters, and one behavioral rule for a mutation tool with no annotations and no output schema. It stops short of the sibling differentiation (create_draft) and permission/irreversibility context that would make the definition fully self-sufficient.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must compensate, and it documents 5 of 7 parameters with genuine semantic detail: account as email-or-alias, to as comma-separated, subject allowed empty when replying with the 'Re: <original>' behavior, and thread preservation for reply_to_message_id. Only cc and bcc are left undocumented, and those are largely self-explanatory.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Send an email from the given account'), which is unambiguous on its own. It does not, however, differentiate itself from the sibling create_draft, which an agent must choose between for outbound mail.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

'Confirm content with the user first' is a real usage directive and gives a prerequisite for invocation. But there is no explicit when-to-use guidance against the closest alternative, create_draft, nor any note on when a reply path (reply_to_message_id) should be preferred over a fresh send.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

trash_emailB

Move a message to Trash (recoverable for 30 days).

ParametersJSON Schema
NameRequiredDescriptionDefault
accountYes
message_idYes

TDQS

B3.1/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full burden. It usefully discloses the recoverability window ('recoverable for 30 days'), which is real behavioral context beyond the name, but says nothing about required scopes, whether labels are stripped, or whether the action triggers notifications.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single short sentence with the action front-loaded and the retention caveat appended. Nothing is wasted and it is easy to scan.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For such a simple two-parameter tool with no output schema, the description covers the action and its reversibility, which is the key fact. It remains incomplete on parameter meaning and on how this differs from sibling mutation tools.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0% for both required parameters. The description alludes to 'a message' (message_id) but never mentions the required 'account' parameter or clarifies format/identity expectations, so it does not compensate for the documentation gap.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb+resource ('Move a message to Trash'), so the agent knows exactly what the tool does. It does not explicitly differentiate itself from the sibling modify_labels, which could plausibly also remove a message from the inbox, so it falls short of a 5.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No when-to-use, prerequisites, or alternatives are given. The agent must infer usage purely from the name and the verb, and nothing tells it why to prefer trash_email over modify_labels for removing a message.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

  1. 9 tool updatesv0.2.0
    • First observedcreate_draft
    • First observedlist_accounts
    • First observedlist_labels
    • First observedmodify_labels
    • First observedread_email
    • First observedread_thread
    • First observedsearch_emails
    • First observedsend_email
    • First observedtrash_email

TDQS

B3.4/5.0

Scored across 9 tools

Disambiguation4/5

Each tool has a fairly distinct purpose: reading, searching, sending, drafting, trashing, and label management are all clearly separated. The only mild overlap is between modify_labels (which can apply TRASH/UNREAD labels) and trash_email, plus list_labels vs modify_labels, but descriptions make the intended use clear.

Naming Consistency5/5

All nine tools follow a strict verb_noun snake_case pattern (list_accounts, search_emails, read_email, read_thread, list_labels, modify_labels, trash_email, send_email, create_draft). No camelCase or vague verbs mixed in.

Tool Count5/5

Nine tools is a well-scoped surface for a multi-account Gmail server, covering the core mailbox operations without bloat. Every tool maps to a distinct mailbox workflow.

Completeness4/5

Core lifecycle is well covered: list/search/read/read thread, send, draft, trash, and label management across accounts. Minor gaps remain — no attachment download, no permanent delete (only trash), and no explicit forward or mark-spam/unspam tool, though these can be approximated with existing tools.

Maintenance

ActivityMaintained
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers

  • A
    license
    Not graded
    quality
    D
    maintenance
    A Model Context Protocol (MCP) server that enables Claude Desktop to interact with Gmail through secure OAuth 2.0 authentication. Send emails, search messages, read emails, and manage multiple Gmail accounts directly from Claude Desktop.
    46 npm
    MIT
  • A
    license
    A
    quality
    D
    maintenance
    Connects multiple Gmail accounts to Claude Desktop via MCP, enabling email search, labeling, drafts, and confirmed sending through natural language.
    13
    46 npm
    MIT
  • A
    license
    Not graded
    quality
    D
    maintenance
    A local MCP server that gives Claude access to multiple Gmail accounts simultaneously for search, read, draft, send, label, and a scheduled cross-inbox digest, with enforced send policies per mailbox.
    MIT
  • A
    license
    Not graded
    quality
    A
    maintenance
    A local MCP server that lets Claude Desktop search, read, draft, and send email across multiple Gmail accounts with configurable safeguards, including two-step sending and no permanent deletion.
    MIT