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.
Public tool metadata for what this MCP can expose to an agent.
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 paramsAdds and/or removes specified gmail labels for a message; ensure `message id` and all `label ids` are valid (use 'listlabels' for custom label ids).
user_idstringmessage_idstringadd_label_idsarrayremove_label_idsarrayGMAIL_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 paramsCreates a gmail email draft, supporting to/cc/bcc, subject, plain/html body (ensure `is html=true` for html), attachments, and threading.
ccarraybccarraybodystringis_htmlbooleansubjectstringuser_idstringthread_idstringattachmentobjectrecipient_emailstringextra_recipientsarrayGMAIL_CREATE_LABELCreates a new label with a unique name in the specified user's gmail account.6 paramsCreates a new label with a unique name in the specified user's gmail account.
user_idstringlabel_namestringtext_colorstringbackground_colorstringlabel_list_visibilitystringmessage_list_visibilitystringGMAIL_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 paramsPermanently deletes a specific gmail draft using its id; ensure the draft exists and the user has necessary permissions for the given `user id`.
user_idstringdraft_idstringGMAIL_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 paramsPermanently 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.
user_idstringmessage_idstringGMAIL_FETCH_EMAILSFetches a list of email messages from a gmail account, supporting filtering, pagination, and optional full content retrieval.9 paramsFetches a list of email messages from a gmail account, supporting filtering, pagination, and optional full content retrieval.
querystringuser_idstringverbosebooleanids_onlybooleanlabel_idsarraypage_tokenstringmax_resultsintegerinclude_payloadbooleaninclude_spam_trashbooleanGMAIL_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 paramsFetches a specific email message by its id, provided the `message id` exists and is accessible to the authenticated `user id`.
formatstringuser_idstringmessage_idstringGMAIL_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 paramsRetrieves messages from a gmail thread using its `thread id`, where the thread must be accessible by the specified `user id`.
user_idstringthread_idstringpage_tokenstringGMAIL_GET_ATTACHMENTRetrieves a specific attachment by id from a message in a user's gmail mailbox, requiring valid message and attachment ids.4 paramsRetrieves a specific attachment by id from a message in a user's gmail mailbox, requiring valid message and attachment ids.
user_idstringfile_namestringmessage_idstringattachment_idstringGMAIL_GET_CONTACTSFetches contacts (connections) for the authenticated google account, allowing selection of specific data fields and pagination.4 paramsFetches contacts (connections) for the authenticated google account, allowing selection of specific data fields and pagination.
page_tokenstringperson_fieldsstringresource_namestringinclude_other_contactsbooleanGMAIL_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 paramsRetrieves 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.
page_sizeintegerpage_tokenstringsync_tokenstringperson_fieldsstringresource_namestringother_contactsbooleanGMAIL_GET_PROFILERetrieves key gmail profile information (email address, message/thread totals, history id) for a user.1 paramsRetrieves key gmail profile information (email address, message/thread totals, history id) for a user.
user_idstringGMAIL_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 paramsRetrieves 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.
user_idstringverbosebooleanpage_tokenstringmax_resultsintegerGMAIL_LIST_LABELSRetrieves a list of all system and user-created labels for the specified gmail account.1 paramsRetrieves a list of all system and user-created labels for the specified gmail account.
user_idstringGMAIL_LIST_THREADSRetrieves a list of email threads from a gmail account, identified by `user id` (email address or 'me'), supporting filtering and pagination.5 paramsRetrieves a list of email threads from a gmail account, identified by `user id` (email address or 'me'), supporting filtering and pagination.
querystringuser_idstringverbosebooleanpage_tokenstringmax_resultsintegerGMAIL_MODIFY_THREAD_LABELSAdds or removes specified existing label ids from a gmail thread, affecting all its messages; ensure the thread id is valid.4 paramsAdds or removes specified existing label ids from a gmail thread, affecting all its messages; ensure the thread id is valid.
user_idstringthread_idstringadd_label_idsarrayremove_label_idsarrayGMAIL_MOVE_TO_TRASHMoves an existing, non-deleted email message to the trash for the specified user.2 paramsMoves an existing, non-deleted email message to the trash for the specified user.
user_idstringmessage_idstringGMAIL_PATCH_LABELPatches the specified label.6 paramsPatches the specified label.
idstringnamestringcolorobjectuserIdstringlabelListVisibilitystringmessageListVisibilitystringGMAIL_REMOVE_LABELPermanently deletes a specific, existing user-created gmail label by its id for a user; cannot delete system labels.2 paramsPermanently deletes a specific, existing user-created gmail label by its id for a user; cannot delete system labels.
user_idstringlabel_idstringGMAIL_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 paramsSends 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`.
ccarraybccarrayis_htmlbooleanuser_idstringthread_idstringattachmentobjectmessage_bodystringrecipient_emailstringextra_recipientsarrayA 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.
To install Gmail AutoAuth for Claude Desktop automatically via Smithery:
npx -y @smithery/cli install @gongrzhe/server-gmail-autoauth-mcp --client claude
Create a Google Cloud Project and obtain credentials:
a. Create a Google Cloud Project:
b. Create OAuth 2.0 Credentials:
http://localhost:3000/oauth2callback to the authorized redirect URIsgcp-oauth.keys.jsonRun 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:
gcp-oauth.keys.json in the current directory or ~/.gmail-mcp/~/.gmail-mcp/~/.gmail-mcp/credentials.jsonNote:
- 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/oauth2callbackto your authorized redirect URIs
Configure in Claude Desktop:
{
"mcpServers": {
"gmail": {
"command": "npx",
"args": [
"@gongrzhe/server-gmail-autoauth-mcp"
]
}
}
}
If you prefer using Docker:
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
{
"mcpServers": {
"gmail": {
"command": "docker",
"args": [
"run",
"-i",
"--rm",
"-v",
"mcp-gmail:/gmail-server",
"-e",
"GMAIL_CREDENTIALS_PATH=/gmail-server/credentials.json",
"mcp/gmail"
]
}
}
}
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
Configure Reverse Proxy:
gmail.gongrzhe.com) to this portDNS Configuration:
Google Cloud Platform Setup:
https://gmail.gongrzhe.com/oauth2callback) to the authorized redirect URIs listRun Authentication:
npx @gongrzhe/server-gmail-autoauth-mcp auth https://gmail.gongrzhe.com/oauth2callback
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.
The server provides the following tools that can be used through Claude Desktop:
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>"
}
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"]
}
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...)
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 attachmentattachmentId: 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)search_emails)Searches for emails using Gmail search syntax.
{
"query": "from:sender@example.com after:2024/01/01 has:attachment",
"maxResults": 10
}
modify_email)Adds or removes labels from emails (move to different folders, archive, etc.).
{
"messageId": "182ab45cd67ef",
"addLabelIds": ["IMPORTANT"],
"removeLabelIds": ["INBOX"]
}
delete_email)Permanently deletes an email.
{
"messageId": "182ab45cd67ef"
}
list_email_labels)Retrieves all available Gmail labels.
{}
create_label)Creates a new Gmail label.
{
"name": "Important Projects",
"messageListVisibility": "show",
"labelListVisibility": "labelShow"
}
update_label)Updates an existing Gmail label.
{
"id": "Label_1234567890",
"name": "Urgent Projects",
"messageListVisibility": "show",
"labelListVisibility": "labelShow"
}
delete_label)Deletes a Gmail label.
{
"id": "Label_1234567890"
}
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"
}
batch_modify_emails)Modifies labels for multiple emails in efficient batches.
{
"messageIds": ["182ab45cd67ef", "182ab45cd67eg", "182ab45cd67eh"],
"addLabelIds": ["IMPORTANT"],
"removeLabelIds": ["INBOX"],
"batchSize": 50
}
batch_delete_emails)Permanently deletes multiple emails in efficient batches.
{
"messageIds": ["182ab45cd67ef", "182ab45cd67eg", "182ab45cd67eh"],
"batchSize": 50
}
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"]
}
}
list_filters)Retrieves all Gmail filters.
{}
get_filter)Gets details of a specific Gmail filter.
{
"filterId": "ANe1Bmj1234567890"
}
delete_filter)Deletes a Gmail filter.
{
"filterId": "ANe1Bmj1234567890"
}
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
}
}
You can create filters based on various criteria:
| Criteria | Example | Description |
|---|---|---|
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 |
hasAttachment | true | Emails with attachments |
size | 10485760 | Email size in bytes |
sizeComparison | "larger" | Size comparison (larger, smaller) |
Filters can perform the following actions:
| Action | Example | Description |
|---|---|---|
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 |
The server includes pre-built templates for common filtering scenarios:
fromSender)Filters emails from a specific sender and optionally archives them.
{
"template": "fromSender",
"parameters": {
"senderEmail": "newsletter@company.com",
"labelIds": ["Label_Newsletter"],
"archive": true
}
}
withSubject)Filters emails with specific subject text and optionally marks as read.
{
"template": "withSubject",
"parameters": {
"subjectText": "[URGENT]",
"labelIds": ["Label_Urgent"],
"markAsRead": false
}
}
withAttachments)Filters all emails with attachments.
{
"template": "withAttachments",
"parameters": {
"labelIds": ["Label_Attachments"]
}
}
largeEmails)Filters emails larger than a specified size.
{
"template": "largeEmails",
"parameters": {
"sizeInBytes": 10485760,
"labelIds": ["Label_Large"]
}
}
containingText)Filters emails containing specific text and optionally marks as important.
{
"template": "containingText",
"parameters": {
"searchText": "invoice",
"labelIds": ["Label_Finance"],
"markImportant": true
}
}
mailingList)Filters mailing list emails and optionally archives them.
{
"template": "mailingList",
"parameters": {
"listIdentifier": "dev-team",
"labelIds": ["Label_DevTeam"],
"archive": true
}
}
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"]
}
}
The search_emails tool supports Gmail's powerful search operators:
| Operator | Example | Description |
|---|---|---|
from: | from:john@example.com | Emails from a specific sender |
to: | to:mary@example.com | Emails sent to a specific recipient |
subject: | subject:"meeting notes" | Emails with specific text in the subject |
has:attachment | has:attachment | Emails with attachments |
after: | after:2024/01/01 | Emails received after a date |
before: | before:2024/02/01 | Emails received before a date |
is: | is:unread | Emails with a specific state |
label: | label:work | Emails with a specific label |
You can combine multiple operators: from:john@example.com after:2024/01/01 has:attachment
The server provides comprehensive attachment functionality:
attachments array when sending or drafting emailsSupported File Types: All standard file types including PDF, DOCX, XLSX, PPTX, images (PNG, JPG, GIF), archives (ZIP, RAR), and more.
The server intelligently extracts email content from complex MIME structures:
The server fully supports non-ASCII characters in email subjects and content, including:
The server provides a complete set of tools for managing Gmail labels:
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.
The server includes efficient batch processing capabilities:
~/.gmail-mcp/)OAuth Keys Not Found
gcp-oauth.keys.json is in either your current directory or ~/.gmail-mcp/Invalid Credentials Format
web or installed credentialsPort Already in Use
Batch Operation Failures
Attachment Issues
Contributions are welcome! Please feel free to submit a Pull Request.
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
MIT
If you encounter any issues or have questions, please file an issue on the GitHub repository.
io.github.mindstone/mcp-server-microsoft-teams
com.mintmcp/outlook-email
helbertparanhos/resend-email-mcp
marlinjai/email-mcp
io.github.mindstone/mcp-server-email-imap
io.github.osamahassouna/email-playbook-mcp