CAT
/MCP
SkillsMCPMarketplacesDigestToolsAdvertise

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

Cross AI Tools

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
  • Tools
  • Feedback
  • Privacy Policy
  • Advertise

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

Independent project, not affiliated with Anthropic

Gmail

domdomegg/gmail-mcp
720 toolsauthSTDIO, HTTPregistry active
Summary

This connects Claude to Gmail via OAuth, exposing the full Gmail API as MCP tools. You get message and thread operations (list, get, send, forward, modify), draft management, labels, filters, attachments, and vacation responders. The server acts as an OAuth proxy so you don't store tokens yourself. It runs locally over HTTP and handles the Google OAuth dance automatically. Reach for this when you want Claude to handle email workflows like finding receipts for expense reports, tracking packages by digging through shipping notifications, or setting up vacation mode across multiple services. The thread-based tools are generally preferred over individual message operations for better context.

CodeRabbit
CodeRabbit
AI writes the code. CodeRabbit catches the slop.
Try For Free →
Keep your Mac awake
Keep your Mac awake
Keep your Mac awake while Claude Code and 40+ AI agents run. Sleeps when they're idle.
One time payment $9 →
Context.devContext.dev
Context.dev
Integrate web data into your AI product. One API to scrape website & brand data.
Get API Key Now →
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 →
CodeRabbit
CodeRabbit
AI writes the code. CodeRabbit catches the slop.
Try For Free →
Keep your Mac awake
Keep your Mac awake
Keep your Mac awake while Claude Code and 40+ AI agents run. Sleeps when they're idle.
One time payment $9 →
Context.devContext.dev
Context.dev
Integrate web data into your AI product. One API to scrape website & brand data.
Get API Key Now →
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 →

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-mcp

MCP server for Gmail - read, send, archive, and manage emails.

Use Cases

Flight check-in: "Check me in for my flight tomorrow" → finds your confirmation email, extracts the booking reference, and completes check-in with browser use.

Expense submission: "Submit my Amazon purchases from last week as expenses" → finds receipts, extracts amounts/categories, and files them in your expense system.

Package tracking: "Where's my package from Acme?" → finds the shipping notification, extracts the tracking number, and fetches current delivery status.

Find that attachment: "What did we settle on for the budget? Michelle sent me something yesterday" → locates the email and opens the attached spreadsheet.

Vacation mode: "I'm on holiday Dec 20-Jan 2" → sets up Gmail auto-reply, blocks your calendar, and updates your Slack status in one go.

Meeting follow-up: After a call, your assistant reads the Gemini transcript, summarizes key decisions, and drafts a follow-up email with action items.

(These are just examples - any workflow that needs email search, reading, or sending can use this.)

Setup

1. Create Google OAuth credentials

  1. Go to Google Cloud Console
  2. Create a new project (or use existing)
  3. Enable the Gmail API
  4. Go to APIs & Services → OAuth consent screen, set up consent screen
  5. Go to APIs & Services → Credentials → Create Credentials → OAuth client ID
  6. Choose Web application
  7. Add http://localhost:3000/callback to Authorized redirect URIs
  8. Note your Client ID and Client Secret

2. Run the server

GOOGLE_CLIENT_ID='your-client-id' \
GOOGLE_CLIENT_SECRET='your-client-secret' \
MCP_TRANSPORT=http \
npm start

The server runs on http://localhost:3000 by default. Change with PORT=3001.

3. Add to your MCP client

claude mcp add --transport http gmail-mcp http://localhost:3000/mcp

Architecture

This server acts as an OAuth proxy to Google:

graph LR
    A[MCP client] <--> B[gmail-mcp] <--> C[Google OAuth/API]
  1. Server advertises itself as an OAuth authorization server via /.well-known/oauth-authorization-server
  2. /register returns the Google OAuth client credentials
  3. /authorize redirects to Google, encoding the client's callback URL in state
  4. /callback receives the code from Google and forwards to the client's callback
  5. /token proxies token requests to Google, injecting client credentials
  6. /mcp handles MCP requests, using the bearer token to call Gmail API

The server holds no tokens or state - it just proxies OAuth to Google.

Tools

ToolDescription
gmail_get_profileGet user's email address and profile info
Messages
gmail_messages_listSearch/list messages (consider gmail_threads_list instead)
gmail_message_getGet a single message
gmail_message_sendSend an email
gmail_message_forwardForward an email to new recipients
gmail_message_modifyAdd/remove labels
gmail_message_archiveArchive (remove from inbox)
gmail_message_trashMove to trash
gmail_message_untrashRestore from trash
gmail_message_deletePermanently delete
gmail_messages_batch_modifyBulk label changes
gmail_messages_batch_deleteBulk permanent delete
Threads
gmail_threads_listSearch/list threads (recommended)
gmail_thread_getGet all messages in a thread (recommended)
gmail_thread_modifyAdd/remove labels
gmail_thread_trashMove to trash
gmail_thread_untrashRestore from trash
gmail_thread_deletePermanently delete
Drafts
gmail_drafts_listList drafts
gmail_draft_getGet a draft
gmail_draft_createCreate a draft
gmail_draft_updateUpdate a draft
gmail_draft_sendSend a draft
gmail_draft_deleteDelete a draft
Labels
gmail_labels_listList all labels
gmail_label_getGet a label
gmail_label_createCreate a label
gmail_label_updateUpdate a label
gmail_label_deleteDelete a label
Attachments
gmail_attachment_getDownload attachment
Filters
gmail_filters_listList email filters
gmail_filter_getGet a filter
gmail_filter_createCreate a filter
gmail_filter_deleteDelete a filter
Settings
gmail_vacation_getGet vacation auto-reply settings
gmail_vacation_setSet vacation auto-reply settings

Gmail API Scopes

  • gmail.readonly - Read messages and labels
  • gmail.send - Send messages
  • gmail.modify - Modify messages (archive, labels, trash)

Contributing

Pull requests are welcomed on GitHub! To get started:

  1. Install Git and Node.js
  2. Clone the repository
  3. Install dependencies with npm install
  4. Run npm run test to run tests
  5. Build with npm run build

Releases

Versions follow the semantic versioning spec.

To release:

  1. Use npm version <major | minor | patch> to bump the version
  2. Run git push --follow-tags to push with tags
  3. Wait for GitHub Actions to publish to the NPM registry.
Featured
CodeRabbit
CodeRabbit
AI writes the code. CodeRabbit catches the slop.
Try For Free →
Keep your Mac awake
Keep your Mac awake
Keep your Mac awake while Claude Code and 40+ AI agents run. Sleeps when they're idle.
One time payment $9 →
Context.devContext.dev
Context.dev
Integrate web data into your AI product. One API to scrape website & brand data.
Get API Key Now →
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 →

Configuration

GOOGLE_ACCESS_TOKEN*secret

Google OAuth access token with Gmail scopes.

MCP_TRANSPORT*

Transport type.

GOOGLE_CLIENT_ID*

Google OAuth client ID.

GOOGLE_CLIENT_SECRET*secret

Google OAuth client secret.

Categories
Communication & Messaging
Registryactive
Packagegmail-mcp
TransportSTDIO, HTTP
AuthRequired
UpdatedMay 25, 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.