CCM
/MCP
SkillsMCPMarketplacesDigestLearnAdvertise

This week in Claude

Every Monday: Claude Code, Agent SDK, MCP, and the Anthropic platform moves worth your time.

Skills by Category
Frontend DevelopmentBackend & APIsTesting & QASecurityDevOps & CI/CDGit & Pull RequestsDocumentationCode Review & QualityAI & Agent BuildingSkill Development
MCP Servers by Category
Sales & MarketingWeb & Browser AutomationDatabasesAI & LLM ToolsCloud & InfrastructureCommunication & MessagingDeveloper ToolsDesign & CreativeDocuments & KnowledgeSearch & Web Crawling
Marketplaces by Category
AI Agents & OrchestrationLLM IntegrationDevelopment ToolsFrontend & UIBackend & APIsDatabasesTesting & Code QualityDevOps & CloudSecurity & ComplianceGit & Version Control

Claude Code Marketplaces

Discover Claude Code plugins, extensions, and tools. Automatically updated directory of Anthropic Claude AI marketplaces with development tools, productivity plugins, and integrations.

Resources

  • Browse Skills
  • Browse MCP Servers
  • Browse Marketplaces
  • Plugins Reference

Community

  • About
  • Learn
  • Feedback
  • Privacy Policy
  • Advertise

Built for the Claude Code community with Claude Code by @mertduzgun

Independent project, not affiliated with Anthropic

Gmail

gongrzhe/gmail-mcp-server
1.1k20 tools
Summary

The Gmail AutoAuth MCP Server enables Claude Desktop to interact with Gmail through natural language by providing tools for sending emails with attachments, reading and searching messages, managing labels, and performing batch operations on emails. It handles authentication via OAuth2 with automatic browser-based login and stores credentials globally for convenience. This server solves the problem of allowing AI assistants to manage email workflows without manual API configuration or authentication steps.

CodeRabbit
CodeRabbit
AI writes the code. CodeRabbit catches the slop.
Try For Free →
Make your agent a DeFi expert
Make your agent a DeFi expert
Agent, run crypto. Access onchain data & trade routes via 1inch.
Install now →
Make money from your Skills
Make money from your Skills
On Capafy, your Skill runs online 24/7 as an agent product, and you get paid every time someone uses it.
Start earning →
AppSignal
AppSignal
Monitor with ease. Code with confidence.
Start Free Trial →
Vibe Prospecting MCPVibe Prospecting MCP
Vibe Prospecting MCP
Connect Claude to +800M contacts, +150M companies. Find & Enrich leads in chat.
Try For Free →
Context.devContext.dev
Context.dev
Integrate web data into your AI product. One API to scrape website & brand data.
Get API Key Now →
CodeRabbit
CodeRabbit
AI writes the code. CodeRabbit catches the slop.
Try For Free →
Make your agent a DeFi expert
Make your agent a DeFi expert
Agent, run crypto. Access onchain data & trade routes via 1inch.
Install now →
Make money from your Skills
Make money from your Skills
On Capafy, your Skill runs online 24/7 as an agent product, and you get paid every time someone uses it.
Start earning →
AppSignal
AppSignal
Monitor with ease. Code with confidence.
Start Free Trial →
Vibe Prospecting MCPVibe Prospecting MCP
Vibe Prospecting MCP
Connect Claude to +800M contacts, +150M companies. Find & Enrich leads in chat.
Try For Free →
Context.devContext.dev
Context.dev
Integrate web data into your AI product. One API to scrape website & brand data.
Get API Key Now →

Tools

Public tool metadata for what this MCP can expose to an agent.

20 tools
GMAIL_ADD_LABEL_TO_EMAILAdds and/or removes specified gmail labels for a message; ensure `message id` and all `label ids` are valid (use 'listlabels' for custom label ids).4 params

Adds and/or removes specified gmail labels for a message; ensure `message id` and all `label ids` are valid (use 'listlabels' for custom label ids).

Parameters* required
user_idstring
User's email address or 'me' for the authenticated user.default: me
message_idstring
Immutable ID of the message to modify (e.g., from 'fetchEmails' or 'fetchMessagesByThreadId').
add_label_idsarray
Label IDs to add. For custom labels, obtain IDs via 'listLabels'. System labels (e.g., 'INBOX', 'SPAM') can also be used.
remove_label_idsarray
Label IDs to remove. For custom labels, obtain IDs via 'listLabels'. System labels can also be used.
GMAIL_CREATE_EMAIL_DRAFTCreates a gmail email draft, supporting to/cc/bcc, subject, plain/html body (ensure `is html=true` for html), attachments, and threading.10 params

Creates a gmail email draft, supporting to/cc/bcc, subject, plain/html body (ensure `is html=true` for html), attachments, and threading.

Parameters* required
ccarray
'Cc' (carbon copy) recipient email addresses.
bccarray
'Bcc' (blind carbon copy) recipient email addresses.
bodystring
Email body content (plain text or HTML); `is_html` must be True if HTML.
is_htmlboolean
Set to True if `body` is HTML, otherwise the action may fail.default: false
subjectstring
Email subject line.
user_idstring
User's email address or 'me' for the authenticated user.default: me
thread_idstring
ID of an existing Gmail thread to reply to; omit for new thread.
attachmentobject
File to attach to the email.
recipient_emailstring
Primary recipient's email address.
extra_recipientsarray
Additional 'To' recipient email addresses.
GMAIL_CREATE_LABELCreates a new label with a unique name in the specified user's gmail account.6 params

Creates a new label with a unique name in the specified user's gmail account.

Parameters* required
user_idstring
The email address of the user in whose account the label will be created.default: me
label_namestring
The name for the new label. Must be unique within the account, non-blank, maximum length 225 characters, cannot contain ',' or '/', not only whitespace, and must not be a reserved system label (e.g., INBOX, DRAFTS, SENT).
text_colorstring
The text color of the label, in hex (e.g., "#000000").
background_colorstring
The background color of the label, in hex (e.g., "#FFFFFF").
label_list_visibilitystring
Controls how the label is displayed in the label list in the Gmail sidebar.default: labelShow
message_list_visibilitystring
Controls how messages with this label are displayed in the message list.default: show
GMAIL_DELETE_DRAFTPermanently deletes a specific gmail draft using its id; ensure the draft exists and the user has necessary permissions for the given `user id`.2 params

Permanently deletes a specific gmail draft using its id; ensure the draft exists and the user has necessary permissions for the given `user id`.

Parameters* required
user_idstring
User's email address or 'me' for the authenticated user; 'me' is recommended.default: me
draft_idstring
Immutable ID of the draft to delete, typically obtained when the draft was created.
GMAIL_DELETE_MESSAGEPermanently deletes a specific email message by its id from a gmail mailbox; for `user id`, use 'me' for the authenticated user or an email address to which the authenticated user has delegated access.2 params

Permanently deletes a specific email message by its id from a gmail mailbox; for `user id`, use 'me' for the authenticated user or an email address to which the authenticated user has delegated access.

Parameters* required
user_idstring
User's email address. The special value 'me' refers to the authenticated user.default: me
message_idstring
Identifier of the email message to delete.
GMAIL_FETCH_EMAILSFetches a list of email messages from a gmail account, supporting filtering, pagination, and optional full content retrieval.9 params

Fetches a list of email messages from a gmail account, supporting filtering, pagination, and optional full content retrieval.

Parameters* required
querystring
Gmail advanced search query (e.g., 'from:user subject:meeting'). Supports operators like 'from:', 'to:', 'subject:', 'label:', 'has:attachment', 'is:unread', 'after:YYYY/MM/DD', 'before:YYYY/MM/DD', AND/OR/NOT. Use quotes for exact phrases. Omit for no query filter.
user_idstring
User's email address or 'me' for the authenticated user.default: me
verboseboolean
If false, uses optimized concurrent metadata fetching for faster performance (~75% improvement). If true, uses standard detailed message fetching. When false, only essential fields (subject, sender, recipient, time, labels) are guaranteed.default: true
ids_onlyboolean
If true, only returns message IDs from the list API without fetching individual message details. Fastest option for getting just message IDs and thread IDs.default: false
label_idsarray
Filter by label IDs; only messages with all specified labels are returned. Common IDs: 'INBOX', 'SPAM', 'TRASH', 'UNREAD', 'STARRED', 'IMPORTANT', 'CATEGORY_PRIMARY' (alias 'CATEGORY_PERSONAL'), 'CATEGORY_SOCIAL', 'CATEGORY_PROMOTIONS', 'CATEGORY_UPDATES', 'CATEGORY_FORUMS'. Use 'listLabels' action for custom IDs.
page_tokenstring
Token for retrieving a specific page, obtained from a previous response's `nextPageToken`. Omit for the first page.
max_resultsinteger
Maximum number of messages to retrieve per page.default: 1
include_payloadboolean
Set to true to include full message payload (headers, body, attachments); false for metadata only.default: true
include_spam_trashboolean
Set to true to include messages from 'SPAM' and 'TRASH'.default: false
GMAIL_FETCH_MESSAGE_BY_MESSAGE_IDFetches a specific email message by its id, provided the `message id` exists and is accessible to the authenticated `user id`.3 params

Fetches a specific email message by its id, provided the `message id` exists and is accessible to the authenticated `user id`.

Parameters* required
formatstring
Format for message content: 'minimal' (ID/labels), 'full' (complete data), 'raw' (base64url string), 'metadata' (ID/labels/headers).default: full
user_idstring
User's email address or 'me' for the authenticated user.default: me
message_idstring
Unique ID of the email message to retrieve, obtainable from actions like 'List Messages'.
GMAIL_FETCH_MESSAGE_BY_THREAD_IDRetrieves messages from a gmail thread using its `thread id`, where the thread must be accessible by the specified `user id`.3 params

Retrieves messages from a gmail thread using its `thread id`, where the thread must be accessible by the specified `user id`.

Parameters* required
user_idstring
The email address of the user.default: me
thread_idstring
Unique ID of the thread, obtainable from actions like 'listThreads' or 'fetchEmails'.
page_tokenstring
Opaque page token for fetching a specific page of messages if results are paginated.default:
GMAIL_GET_ATTACHMENTRetrieves a specific attachment by id from a message in a user's gmail mailbox, requiring valid message and attachment ids.4 params

Retrieves a specific attachment by id from a message in a user's gmail mailbox, requiring valid message and attachment ids.

Parameters* required
user_idstring
User's email address ('me' for authenticated user).default: me
file_namestring
Desired filename for the downloaded attachment.
message_idstring
Immutable ID of the message containing the attachment.
attachment_idstring
ID of the attachment to retrieve.
GMAIL_GET_CONTACTSFetches contacts (connections) for the authenticated google account, allowing selection of specific data fields and pagination.4 params

Fetches contacts (connections) for the authenticated google account, allowing selection of specific data fields and pagination.

Parameters* required
page_tokenstring
Token to retrieve a specific page of results, obtained from 'nextPageToken' in a previous response.
person_fieldsstring
Comma-separated person fields to retrieve for each contact (e.g., 'names,emailAddresses').default: emailAddresses,names,birthdays,genders
resource_namestring
Identifier for the person resource whose connections are listed; use 'people/me' for the authenticated user.default: people/me
include_other_contactsboolean
Include 'Other Contacts' (interacted with but not explicitly saved) in addition to regular contacts; if true, fetches from both endpoints and merges results.default: true
GMAIL_GET_PEOPLERetrieves either a specific person's details (using `resource name`) or lists 'other contacts' (if `other contacts` is true), with `person fields` specifying the data to return.6 params

Retrieves either a specific person's details (using `resource name`) or lists 'other contacts' (if `other contacts` is true), with `person fields` specifying the data to return.

Parameters* required
page_sizeinteger
The number of 'Other Contacts' to return per page. Applicable only when `other_contacts` is true.default: 10
page_tokenstring
An opaque token from a previous response to retrieve the next page of 'Other Contacts' results. Applicable only when `other_contacts` is true and paginating.default:
sync_tokenstring
A token from a previous 'Other Contacts' list call to retrieve only changes since the last sync; leave empty for an initial full sync. Applicable only when `other_contacts` is true.default:
person_fieldsstring
A comma-separated field mask to restrict which fields on the person (or persons) are returned. Consult the Google People API documentation for a comprehensive list of valid fields.default: emailAddresses,names,birthdays,genders
resource_namestring
Resource name identifying the person for whom to retrieve information (like the authenticated user or a specific contact). Used only when `other_contacts` is false.default: people/me
other_contactsboolean
If true, retrieves 'Other Contacts' (people interacted with but not explicitly saved), ignoring `resource_name` and enabling pagination/sync. If false, retrieves information for the single person specified by `resource_name`.default: false
GMAIL_GET_PROFILERetrieves key gmail profile information (email address, message/thread totals, history id) for a user.1 params

Retrieves key gmail profile information (email address, message/thread totals, history id) for a user.

Parameters* required
user_idstring
The email address of the Gmail user whose profile is to be retrieved, or the special value 'me' to indicate the currently authenticated user.default: me
GMAIL_LIST_DRAFTSRetrieves a paginated list of email drafts from a user's gmail account. use verbose=true to get full draft details including subject, body, sender, and timestamp.4 params

Retrieves a paginated list of email drafts from a user's gmail account. use verbose=true to get full draft details including subject, body, sender, and timestamp.

Parameters* required
user_idstring
User's mailbox ID; use 'me' for the authenticated user.default: me
verboseboolean
If true, fetches full draft details including subject, sender, recipient, body, and timestamp. If false, returns only draft IDs (faster).default: false
page_tokenstring
Token from a previous response to retrieve a specific page of drafts.default:
max_resultsinteger
Maximum number of drafts to return per page.default: 1
GMAIL_LIST_LABELSRetrieves a list of all system and user-created labels for the specified gmail account.1 params

Retrieves a list of all system and user-created labels for the specified gmail account.

Parameters* required
user_idstring
Identifies the Gmail account (owner's email or 'me' for authenticated user) for which labels will be listed.default: me
GMAIL_LIST_THREADSRetrieves a list of email threads from a gmail account, identified by `user id` (email address or 'me'), supporting filtering and pagination.5 params

Retrieves a list of email threads from a gmail account, identified by `user id` (email address or 'me'), supporting filtering and pagination.

Parameters* required
querystring
Filter for threads, using Gmail search query syntax (e.g., 'from:user@example.com is:unread').default:
user_idstring
The user's email address or 'me' to specify the authenticated Gmail account.default: me
verboseboolean
If false, returns threads with basic fields (id, snippet, historyId). If true, returns threads with complete message details including headers, body, attachments, and metadata for each message in the thread.default: false
page_tokenstring
Token from a previous response to retrieve a specific page of results; omit for the first page.default:
max_resultsinteger
Maximum number of threads to return.default: 10
GMAIL_MODIFY_THREAD_LABELSAdds or removes specified existing label ids from a gmail thread, affecting all its messages; ensure the thread id is valid.4 params

Adds or removes specified existing label ids from a gmail thread, affecting all its messages; ensure the thread id is valid.

Parameters* required
user_idstring
User's email address or 'me' for the authenticated user.default: me
thread_idstring
Immutable ID of the thread to modify.
add_label_idsarray
List of label IDs to add to the thread; these labels must exist.
remove_label_idsarray
List of label IDs to remove from the thread; these labels must exist.
GMAIL_MOVE_TO_TRASHMoves an existing, non-deleted email message to the trash for the specified user.2 params

Moves an existing, non-deleted email message to the trash for the specified user.

Parameters* required
user_idstring
User's email address or 'me' for the authenticated user.default: me
message_idstring
Identifier of the email message to move to trash.
GMAIL_PATCH_LABELPatches the specified label.6 params

Patches the specified label.

Parameters* required
idstring
The ID of the label to update.
namestring
The display name of the label.
colorobject
The color to assign to the label. Color is only available for labels that have their `type` set to `user`.
userIdstring
The user's email address. The special value `me` can be used to indicate the authenticated user.
labelListVisibilitystring
The visibility of the label in the label list in the Gmail web interface.
messageListVisibilitystring
The visibility of messages with this label in the message list in the Gmail web interface.
GMAIL_REMOVE_LABELPermanently deletes a specific, existing user-created gmail label by its id for a user; cannot delete system labels.2 params

Permanently deletes a specific, existing user-created gmail label by its id for a user; cannot delete system labels.

Parameters* required
user_idstring
User's email address or 'me' for the authenticated user.default: me
label_idstring
ID of the user-created label to be permanently deleted; must exist and not be a system label.
GMAIL_REPLY_TO_THREADSends a reply within a specific gmail thread using the original thread's subject, requiring a valid `thread id` and correctly formatted email addresses. supports attachments via the `attachment` parameter with valid `s3key`, `mimetype`, and `name`.9 params

Sends a reply within a specific gmail thread using the original thread's subject, requiring a valid `thread id` and correctly formatted email addresses. supports attachments via the `attachment` parameter with valid `s3key`, `mimetype`, and `name`.

Parameters* required
ccarray
CC recipients' email addresses.
bccarray
BCC recipients' email addresses (hidden from other recipients).
is_htmlboolean
Indicates if `message_body` is HTML; if True, body must be valid HTML, if False, body should not contain HTML tags.default: false
user_idstring
Identifier for the user sending the reply; 'me' refers to the authenticated user.default: me
thread_idstring
Identifier of the Gmail thread for the reply.
attachmentobject
File to attach to the reply. Just Provide file path here
message_bodystring
Content of the reply message, either plain text or HTML.
recipient_emailstring
Primary recipient's email address.
extra_recipientsarray
Additional 'To' recipients' email addresses.

Gmail AutoAuth MCP Server

A Model Context Protocol (MCP) server for Gmail integration in Claude Desktop with auto authentication support. This server enables AI assistants to manage Gmail through natural language interactions.

smithery badge

Features

  • Send emails with subject, content, attachments, and recipients
  • Full attachment support - send and receive file attachments
  • Download email attachments to local filesystem
  • Support for HTML emails and multipart messages with both HTML and plain text versions
  • Full support for international characters in subject lines and email content
  • Read email messages by ID with advanced MIME structure handling
  • Enhanced attachment display showing filenames, types, sizes, and download IDs
  • Search emails with various criteria (subject, sender, date range)
  • Comprehensive label management with ability to create, update, delete and list labels
  • List all available Gmail labels (system and user-defined)
  • List emails in inbox, sent, or custom labels
  • Mark emails as read/unread
  • Move emails to different labels/folders
  • Delete emails
  • Batch operations for efficiently processing multiple emails at once
  • Full integration with Gmail API
  • Simple OAuth2 authentication flow with auto browser launch
  • Support for both Desktop and Web application credentials
  • Global credential storage for convenience

Installation & Authentication

Installing via Smithery

To install Gmail AutoAuth for Claude Desktop automatically via Smithery:

npx -y @smithery/cli install @gongrzhe/server-gmail-autoauth-mcp --client claude

Installing Manually

  1. Create a Google Cloud Project and obtain credentials:

    a. Create a Google Cloud Project:

    • Go to Google Cloud Console
    • Create a new project or select an existing one
    • Enable the Gmail API for your project

    b. Create OAuth 2.0 Credentials:

    • Go to "APIs & Services" > "Credentials"
    • Click "Create Credentials" > "OAuth client ID"
    • Choose either "Desktop app" or "Web application" as application type
    • Give it a name and click "Create"
    • For Web application, add http://localhost:3000/oauth2callback to the authorized redirect URIs
    • Download the JSON file of your client's OAuth keys
    • Rename the key file to gcp-oauth.keys.json
  2. Run Authentication:

    You can authenticate in two ways:

    a. Global Authentication (Recommended):

    # First time: Place gcp-oauth.keys.json in your home directory's .gmail-mcp folder
    mkdir -p ~/.gmail-mcp
    mv gcp-oauth.keys.json ~/.gmail-mcp/
    
    # Run authentication from anywhere
    npx @gongrzhe/server-gmail-autoauth-mcp auth
    

    b. Local Authentication:

    # Place gcp-oauth.keys.json in your current directory
    # The file will be automatically copied to global config
    npx @gongrzhe/server-gmail-autoauth-mcp auth
    

    The authentication process will:

    • Look for gcp-oauth.keys.json in the current directory or ~/.gmail-mcp/
    • If found in current directory, copy it to ~/.gmail-mcp/
    • Open your default browser for Google authentication
    • Save credentials as ~/.gmail-mcp/credentials.json

    Note:

    • After successful authentication, credentials are stored globally in ~/.gmail-mcp/ and can be used from any directory
    • Both Desktop app and Web application credentials are supported
    • For Web application credentials, make sure to add http://localhost:3000/oauth2callback to your authorized redirect URIs
  3. Configure in Claude Desktop:

{
  "mcpServers": {
    "gmail": {
      "command": "npx",
      "args": [
        "@gongrzhe/server-gmail-autoauth-mcp"
      ]
    }
  }
}

Docker Support

If you prefer using Docker:

  1. Authentication:
docker run -i --rm \
  --mount type=bind,source=/path/to/gcp-oauth.keys.json,target=/gcp-oauth.keys.json \
  -v mcp-gmail:/gmail-server \
  -e GMAIL_OAUTH_PATH=/gcp-oauth.keys.json \
  -e "GMAIL_CREDENTIALS_PATH=/gmail-server/credentials.json" \
  -p 3000:3000 \
  mcp/gmail auth
  1. Usage:
{
  "mcpServers": {
    "gmail": {
      "command": "docker",
      "args": [
        "run",
        "-i",
        "--rm",
        "-v",
        "mcp-gmail:/gmail-server",
        "-e",
        "GMAIL_CREDENTIALS_PATH=/gmail-server/credentials.json",
        "mcp/gmail"
      ]
    }
  }
}

Cloud Server Authentication

For cloud server environments (like n8n), you can specify a custom callback URL during authentication:

npx @gongrzhe/server-gmail-autoauth-mcp auth https://gmail.gongrzhe.com/oauth2callback

Setup Instructions for Cloud Environment

  1. Configure Reverse Proxy:

    • Set up your n8n container to expose a port for authentication
    • Configure a reverse proxy to forward traffic from your domain (e.g., gmail.gongrzhe.com) to this port
  2. DNS Configuration:

    • Add an A record in your DNS settings to resolve your domain to your cloud server's IP address
  3. Google Cloud Platform Setup:

    • In your Google Cloud Console, add your custom domain callback URL (e.g., https://gmail.gongrzhe.com/oauth2callback) to the authorized redirect URIs list
  4. Run Authentication:

    npx @gongrzhe/server-gmail-autoauth-mcp auth https://gmail.gongrzhe.com/oauth2callback
    
  5. Configure in your application:

    {
      "mcpServers": {
        "gmail": {
          "command": "npx",
          "args": [
            "@gongrzhe/server-gmail-autoauth-mcp"
          ]
        }
      }
    }
    

This approach allows authentication flows to work properly in environments where localhost isn't accessible, such as containerized applications or cloud servers.

Available Tools

The server provides the following tools that can be used through Claude Desktop:

1. Send Email (send_email)

Sends a new email immediately. Supports plain text, HTML, or multipart emails with optional file attachments.

Basic Email:

{
  "to": ["recipient@example.com"],
  "subject": "Meeting Tomorrow",
  "body": "Hi,\n\nJust a reminder about our meeting tomorrow at 10 AM.\n\nBest regards",
  "cc": ["cc@example.com"],
  "bcc": ["bcc@example.com"],
  "mimeType": "text/plain"
}

Email with Attachments:

{
  "to": ["recipient@example.com"],
  "subject": "Project Files",
  "body": "Hi,\n\nPlease find the project files attached.\n\nBest regards",
  "attachments": [
    "/path/to/document.pdf",
    "/path/to/spreadsheet.xlsx",
    "/path/to/presentation.pptx"
  ]
}

HTML Email Example:

{
  "to": ["recipient@example.com"],
  "subject": "Meeting Tomorrow",
  "mimeType": "text/html",
  "body": "<html><body><h1>Meeting Reminder</h1><p>Just a reminder about our <b>meeting tomorrow</b> at 10 AM.</p><p>Best regards</p></body></html>"
}

Multipart Email Example (HTML + Plain Text):

{
  "to": ["recipient@example.com"],
  "subject": "Meeting Tomorrow",
  "mimeType": "multipart/alternative",
  "body": "Hi,\n\nJust a reminder about our meeting tomorrow at 10 AM.\n\nBest regards",
  "htmlBody": "<html><body><h1>Meeting Reminder</h1><p>Just a reminder about our <b>meeting tomorrow</b> at 10 AM.</p><p>Best regards</p></body></html>"
}

2. Draft Email (draft_email)

Creates a draft email without sending it. Also supports attachments.

{
  "to": ["recipient@example.com"],
  "subject": "Draft Report",
  "body": "Here's the draft report for your review.",
  "cc": ["manager@example.com"],
  "attachments": ["/path/to/draft_report.docx"]
}

3. Read Email (read_email)

Retrieves the content of a specific email by its ID. Now shows enhanced attachment information.

{
  "messageId": "182ab45cd67ef"
}

Enhanced Response includes attachment details:

Subject: Project Files
From: sender@example.com
To: recipient@example.com
Date: Thu, 19 Jun 2025 10:30:00 -0400

Email body content here...

Attachments (2):
- document.pdf (application/pdf, 245 KB, ID: ANGjdJ9fkTs-i3GCQo5o97f_itG...)
- spreadsheet.xlsx (application/vnd.openxmlformats-officedocument.spreadsheetml.sheet, 89 KB, ID: BWHkeL8gkUt-j4HDRp6o98g_juI...)

4. Download Attachment (download_attachment)

NEW: Downloads email attachments to your local filesystem.

{
  "messageId": "182ab45cd67ef",
  "attachmentId": "ANGjdJ9fkTs-i3GCQo5o97f_itG...",
  "savePath": "/path/to/downloads",
  "filename": "downloaded_document.pdf"
}

Parameters:

  • messageId: The ID of the email containing the attachment
  • attachmentId: The attachment ID (shown in enhanced email display)
  • savePath: Directory to save the file (optional, defaults to current directory)
  • filename: Custom filename (optional, uses original filename if not provided)

5. Search Emails (search_emails)

Searches for emails using Gmail search syntax.

{
  "query": "from:sender@example.com after:2024/01/01 has:attachment",
  "maxResults": 10
}

6. Modify Email (modify_email)

Adds or removes labels from emails (move to different folders, archive, etc.).

{
  "messageId": "182ab45cd67ef",
  "addLabelIds": ["IMPORTANT"],
  "removeLabelIds": ["INBOX"]
}

7. Delete Email (delete_email)

Permanently deletes an email.

{
  "messageId": "182ab45cd67ef"
}

8. List Email Labels (list_email_labels)

Retrieves all available Gmail labels.

{}

9. Create Label (create_label)

Creates a new Gmail label.

{
  "name": "Important Projects",
  "messageListVisibility": "show",
  "labelListVisibility": "labelShow"
}

10. Update Label (update_label)

Updates an existing Gmail label.

{
  "id": "Label_1234567890",
  "name": "Urgent Projects",
  "messageListVisibility": "show",
  "labelListVisibility": "labelShow"
}

11. Delete Label (delete_label)

Deletes a Gmail label.

{
  "id": "Label_1234567890"
}

12. Get or Create Label (get_or_create_label)

Gets an existing label by name or creates it if it doesn't exist.

{
  "name": "Project XYZ",
  "messageListVisibility": "show",
  "labelListVisibility": "labelShow"
}

13. Batch Modify Emails (batch_modify_emails)

Modifies labels for multiple emails in efficient batches.

{
  "messageIds": ["182ab45cd67ef", "182ab45cd67eg", "182ab45cd67eh"],
  "addLabelIds": ["IMPORTANT"],
  "removeLabelIds": ["INBOX"],
  "batchSize": 50
}

14. Batch Delete Emails (batch_delete_emails)

Permanently deletes multiple emails in efficient batches.

{
  "messageIds": ["182ab45cd67ef", "182ab45cd67eg", "182ab45cd67eh"],
  "batchSize": 50
}

14. Create Filter (create_filter)

Creates a new Gmail filter with custom criteria and actions.

{
  "criteria": {
    "from": "newsletter@company.com",
    "hasAttachment": false
  },
  "action": {
    "addLabelIds": ["Label_Newsletter"],
    "removeLabelIds": ["INBOX"]
  }
}

15. List Filters (list_filters)

Retrieves all Gmail filters.

{}

16. Get Filter (get_filter)

Gets details of a specific Gmail filter.

{
  "filterId": "ANe1Bmj1234567890"
}

17. Delete Filter (delete_filter)

Deletes a Gmail filter.

{
  "filterId": "ANe1Bmj1234567890"
}

18. Create Filter from Template (create_filter_from_template)

Creates a filter using pre-defined templates for common scenarios.

{
  "template": "fromSender",
  "parameters": {
    "senderEmail": "notifications@github.com",
    "labelIds": ["Label_GitHub"],
    "archive": true
  }
}

Filter Management Features

Filter Criteria

You can create filters based on various criteria:

CriteriaExampleDescription
from"sender@example.com"Emails from a specific sender
to"recipient@example.com"Emails sent to a specific recipient
subject"Meeting"Emails with specific text in subject
query"has:attachment"Gmail search query syntax
negatedQuery"spam"Text that must NOT be present
hasAttachmenttrueEmails with attachments
size10485760Email size in bytes
sizeComparison"larger"Size comparison (larger, smaller)

Filter Actions

Filters can perform the following actions:

ActionExampleDescription
addLabelIds["IMPORTANT", "Label_Work"]Add labels to matching emails
removeLabelIds["INBOX", "UNREAD"]Remove labels from matching emails
forward"backup@example.com"Forward emails to another address

Filter Templates

The server includes pre-built templates for common filtering scenarios:

1. From Sender Template (fromSender)

Filters emails from a specific sender and optionally archives them.

{
  "template": "fromSender",
  "parameters": {
    "senderEmail": "newsletter@company.com",
    "labelIds": ["Label_Newsletter"],
    "archive": true
  }
}

2. Subject Filter Template (withSubject)

Filters emails with specific subject text and optionally marks as read.

{
  "template": "withSubject",
  "parameters": {
    "subjectText": "[URGENT]",
    "labelIds": ["Label_Urgent"],
    "markAsRead": false
  }
}

3. Attachment Filter Template (withAttachments)

Filters all emails with attachments.

{
  "template": "withAttachments",
  "parameters": {
    "labelIds": ["Label_Attachments"]
  }
}

4. Large Email Template (largeEmails)

Filters emails larger than a specified size.

{
  "template": "largeEmails",
  "parameters": {
    "sizeInBytes": 10485760,
    "labelIds": ["Label_Large"]
  }
}

5. Content Filter Template (containingText)

Filters emails containing specific text and optionally marks as important.

{
  "template": "containingText",
  "parameters": {
    "searchText": "invoice",
    "labelIds": ["Label_Finance"],
    "markImportant": true
  }
}

6. Mailing List Template (mailingList)

Filters mailing list emails and optionally archives them.

{
  "template": "mailingList",
  "parameters": {
    "listIdentifier": "dev-team",
    "labelIds": ["Label_DevTeam"],
    "archive": true
  }
}

Common Filter Examples

Here are some practical filter examples:

Auto-organize newsletters:

{
  "criteria": {
    "from": "newsletter@company.com"
  },
  "action": {
    "addLabelIds": ["Label_Newsletter"],
    "removeLabelIds": ["INBOX"]
  }
}

Handle promotional emails:

{
  "criteria": {
    "query": "unsubscribe OR promotional"
  },
  "action": {
    "addLabelIds": ["Label_Promotions"],
    "removeLabelIds": ["INBOX", "UNREAD"]
  }
}

Priority emails from boss:

{
  "criteria": {
    "from": "boss@company.com"
  },
  "action": {
    "addLabelIds": ["IMPORTANT", "Label_Boss"]
  }
}

Large attachments:

{
  "criteria": {
    "size": 10485760,
    "sizeComparison": "larger",
    "hasAttachment": true
  },
  "action": {
    "addLabelIds": ["Label_LargeFiles"]
  }
}

Advanced Search Syntax

The search_emails tool supports Gmail's powerful search operators:

OperatorExampleDescription
from:from:john@example.comEmails from a specific sender
to:to:mary@example.comEmails sent to a specific recipient
subject:subject:"meeting notes"Emails with specific text in the subject
has:attachmenthas:attachmentEmails with attachments
after:after:2024/01/01Emails received after a date
before:before:2024/02/01Emails received before a date
is:is:unreadEmails with a specific state
label:label:workEmails with a specific label

You can combine multiple operators: from:john@example.com after:2024/01/01 has:attachment

Advanced Features

Email Attachment Support

The server provides comprehensive attachment functionality:

  • Sending Attachments: Include file paths in the attachments array when sending or drafting emails
  • Attachment Detection: Automatically detects MIME types and file sizes
  • Download Capability: Download any email attachment to your local filesystem
  • Enhanced Display: View detailed attachment information including filenames, types, sizes, and download IDs
  • Multiple Formats: Support for all common file types (documents, images, archives, etc.)
  • RFC822 Compliance: Uses Nodemailer for proper MIME message formatting

Supported File Types: All standard file types including PDF, DOCX, XLSX, PPTX, images (PNG, JPG, GIF), archives (ZIP, RAR), and more.

Email Content Extraction

The server intelligently extracts email content from complex MIME structures:

  • Prioritizes plain text content when available
  • Falls back to HTML content if plain text is not available
  • Handles multi-part MIME messages with nested parts
  • Processes attachments information (filename, type, size, download ID)
  • Preserves original email headers (From, To, Subject, Date)

International Character Support

The server fully supports non-ASCII characters in email subjects and content, including:

  • Turkish, Chinese, Japanese, Korean, and other non-Latin alphabets
  • Special characters and symbols
  • Proper encoding ensures correct display in email clients

Comprehensive Label Management

The server provides a complete set of tools for managing Gmail labels:

  • Create Labels: Create new labels with customizable visibility settings
  • Update Labels: Rename labels or change their visibility settings
  • Delete Labels: Remove user-created labels (system labels are protected)
  • Find or Create: Get a label by name or automatically create it if not found
  • List All Labels: View all system and user labels with detailed information
  • Label Visibility Options: Control how labels appear in message and label lists

Label visibility settings include:

  • messageListVisibility: Controls whether the label appears in the message list (show or hide)
  • labelListVisibility: Controls how the label appears in the label list (labelShow, labelShowIfUnread, or labelHide)

These label management features enable sophisticated organization of emails directly through Claude, without needing to switch to the Gmail interface.

Batch Operations

The server includes efficient batch processing capabilities:

  • Process up to 50 emails at once (configurable batch size)
  • Automatic chunking of large email sets to avoid API limits
  • Detailed success/failure reporting for each operation
  • Graceful error handling with individual retries
  • Perfect for bulk inbox management and organization tasks

Security Notes

  • OAuth credentials are stored securely in your local environment (~/.gmail-mcp/)
  • The server uses offline access to maintain persistent authentication
  • Never share or commit your credentials to version control
  • Regularly review and revoke unused access in your Google Account settings
  • Credentials are stored globally but are only accessible by the current user
  • Attachment files are processed locally and never stored permanently by the server

Troubleshooting

  1. OAuth Keys Not Found

    • Make sure gcp-oauth.keys.json is in either your current directory or ~/.gmail-mcp/
    • Check file permissions
  2. Invalid Credentials Format

    • Ensure your OAuth keys file contains either web or installed credentials
    • For web applications, verify the redirect URI is correctly configured
  3. Port Already in Use

    • If port 3000 is already in use, please free it up before running authentication
    • You can find and stop the process using that port
  4. Batch Operation Failures

    • If batch operations fail, they automatically retry individual items
    • Check the detailed error messages for specific failures
    • Consider reducing the batch size if you encounter rate limiting
  5. Attachment Issues

    • File Not Found: Ensure attachment file paths are correct and accessible
    • Permission Errors: Check that the server has read access to attachment files
    • Size Limits: Gmail has a 25MB attachment size limit per email
    • Download Failures: Verify you have write permissions to the download directory

Contributing

Contributions are welcome! Please feel free to submit a Pull Request.

Running evals

The evals package loads an mcp client that then runs the index.ts file, so there is no need to rebuild between tests. You can load environment variables by prefixing the npx command. Full documentation can be found here.

OPENAI_API_KEY=your-key  npx mcp-eval src/evals/evals.ts src/index.ts

License

MIT

Support

If you encounter any issues or have questions, please file an issue on the GitHub repository.

Featured
CodeRabbit
CodeRabbit
AI writes the code. CodeRabbit catches the slop.
Try For Free →
Make your agent a DeFi expert
Make your agent a DeFi expert
Agent, run crypto. Access onchain data & trade routes via 1inch.
Install now →
Make money from your Skills
Make money from your Skills
On Capafy, your Skill runs online 24/7 as an agent product, and you get paid every time someone uses it.
Start earning →
AppSignal
AppSignal
Monitor with ease. Code with confidence.
Start Free Trial →
Vibe Prospecting MCPVibe Prospecting MCP
Vibe Prospecting MCP
Connect Claude to +800M contacts, +150M companies. Find & Enrich leads in chat.
Try For Free →
Context.devContext.dev
Context.dev
Integrate web data into your AI product. One API to scrape website & brand data.
Get API Key Now →
Categories
Communication & MessagingSearch & Web CrawlingSecurity & Pentesting
UpdatedJan 27, 2026
View on GitHub

Related Communication & Messaging MCP Servers

View all →
Microsoft 365 Teams

io.github.mindstone/mcp-server-microsoft-teams

Microsoft 365 Teams via Graph: list chats, read/send messages, list teams/channels, presence.
8
Outlook Email

com.mintmcp/outlook-email

A MCP server for Outlook email that lets you search, read, and draft emails and replies.
8
Resend Email MCP

helbertparanhos/resend-email-mcp

Complete Resend email MCP: full API coverage + debug layer (deliverability, DNS, bounces).
Email Mcp

marlinjai/email-mcp

Unified email MCP server for Gmail, Outlook, iCloud, and IMAP with batch operations
13
Email (IMAP/SMTP)

io.github.mindstone/mcp-server-email-imap

Email IMAP/SMTP MCP server: iCloud, Gmail, Yahoo, Outlook, and custom IMAP providers
8
HTML Email Playbook

io.github.osamahassouna/email-playbook-mcp

Teaches AI to write HTML email that renders in Outlook, Gmail, and Apple Mail. 19 rules, 6 comps.