A comprehensive MCP server providing 24 tools for full Gmail management
Gmail MCP Server
A comprehensive Model Context Protocol (MCP) server for Gmail, providing 24 tools for full email management including sending, receiving, labels, filters, attachments, and batch operations.
Features
- 24 Gmail Tools: Full email operations, label management, filters, batch operations, and attachments
- Multi-Account Support: Manage multiple Gmail accounts with
--accountflag - OAuth Authentication: Secure authentication with automatic token refresh
- Attachment Support: Download and send attachments
- Batch Operations: Efficiently modify or delete up to 1000 emails at once
- Filter Templates: Pre-built filter templates for common use cases
- MCP Resources: Access messages, threads, and labels via URI
Prerequisites
- Node.js 18+
- A Google Cloud Project with Gmail API enabled
- OAuth 2.0 credentials (Desktop app type)
Setup
1. Create Google Cloud OAuth Credentials
- Go to Google Cloud Console
- Create a new project or select an existing one
- Enable the Gmail API:
- Navigate to "APIs & Services" > "Library"
- Search for "Gmail API"
- Click "Enable"
- Create OAuth credentials:
- Go to "APIs & Services" > "Credentials"
- Click "Create Credentials" > "OAuth Client ID"
- If prompted, configure the OAuth consent screen:
- Choose "External" user type (or "Internal" for Workspace)
- Fill in required fields (app name, user support email, developer email)
- Add scopes:
gmail.modifyandgmail.settings.basic - Add your email as a test user
- Select "Desktop app" as the application type
- Name it (e.g., "Gmail MCP")
- Click "Create"
- Download the JSON credentials file
2. Install and Configure
# Clone or download the project
cd gmail-mcp
# Install dependencies
npm install
# Build the project
npm run build
# Create config directory and save credentials
mkdir -p ~/.gmail-mcp
cp /path/to/downloaded/credentials.json ~/.gmail-mcp/credentials.json
# Authenticate (for a single account)
node dist/index.js auth
# Or authenticate with a named account (for multi-account support)
node dist/index.js auth --account work
node dist/index.js auth --account personal
The auth command will:
- Open your browser to Google's OAuth consent page
- Ask you to authorize the application
- Save the tokens to
~/.gmail-mcp/tokens/<account>.json
To list authenticated accounts:
node dist/index.js list
3. Add to Claude Code
For a single account:
claude mcp add gmail -- node /path/to/gmail-mcp/dist/index.js
For multiple accounts, add each with its own name:
claude mcp add gmail-work -- node /path/to/gmail-mcp/dist/index.js --account work
claude mcp add gmail-personal -- node /path/to/gmail-mcp/dist/index.js --account personal
Or add manually to your Claude Code MCP settings:
{
"mcpServers": {
"gmail-work": {
"command": "node",
"args": ["/path/to/gmail-mcp/dist/index.js", "--account", "work"]
},
"gmail-personal": {
"command": "node",
"args": ["/path/to/gmail-mcp/dist/index.js", "--account", "personal"]
}
}
}
Available Tools
Email Operations (7 tools)
| Tool | Description |
|---|---|
search_emails |
Search with Gmail query syntax, pagination |
read_email |
Full message with headers, body, attachment info |
send_email |
Send with to/cc/bcc, attachments, threading |
draft_email |
Create draft without sending |
delete_email |
Trash or permanent delete |
modify_email |
Add/remove labels from message |
get_thread |
Get full conversation thread |
Label Management (6 tools)
| Tool | Description |
|---|---|
list_labels |
All labels (system + user) |
create_label |
Create with color, visibility |
update_label |
Rename, change settings |
delete_label |
Remove custom label |
get_or_create_label |
Idempotent label creation |
get_label |
Get single label details |
Filter Management (5 tools)
| Tool | Description |
|---|---|
list_filters |
All Gmail filters |
get_filter |
Single filter details |
create_filter |
Custom criteria + actions |
delete_filter |
Remove filter |
create_filter_from_template |
Preset templates |
Batch Operations (2 tools)
| Tool | Description |
|---|---|
batch_modify_emails |
Bulk add/remove labels (50 at a time) |
batch_delete_emails |
Bulk delete with fallback |
Attachments (2 tools)
| Tool | Description |
|---|---|
download_attachment |
Save to local filesystem |
list_attachments |
Get attachment metadata for message |
Utilities (2 tools)
| Tool | Description |
|---|---|
get_profile |
User email address, history ID |
get_quota |
Storage usage info |
Resources
| Resource | URI Pattern |
|---|---|
| Message | `gmail://messa |
Tools (24)
search_emailsSearch with Gmail query syntax, paginationread_emailFull message with headers, body, attachment infosend_emailSend with to/cc/bcc, attachments, threadingdraft_emailCreate draft without sendingdelete_emailTrash or permanent deletemodify_emailAdd/remove labels from messageget_threadGet full conversation threadlist_labelsAll labels (system + user)create_labelCreate with color, visibilityupdate_labelRename, change settingsdelete_labelRemove custom labelget_or_create_labelIdempotent label creationget_labelGet single label detailslist_filtersAll Gmail filtersget_filterSingle filter detailscreate_filterCustom criteria + actionsdelete_filterRemove filtercreate_filter_from_templatePreset templatesbatch_modify_emailsBulk add/remove labels (50 at a time)batch_delete_emailsBulk delete with fallbackdownload_attachmentSave to local filesystemlist_attachmentsGet attachment metadata for messageget_profileUser email address, history IDget_quotaStorage usage infoConfiguration
{
"mcpServers": {
"gmail": {
"command": "node",
"args": ["/path/to/gmail-mcp/dist/index.js"]
}
}
}