Provides tools for managing Gmail messages and labels, including reading, sending, archiving, trashing messages, creating drafts, retrieving email threads, and modifying message labels.
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
Go to Google Cloud Console
Create a new project (or use existing)
Enable the Gmail API
Go to APIs & Services → OAuth consent screen, set up consent screen
Go to APIs & Services → Credentials → Create Credentials → OAuth client ID
Choose Web application
Add
http://localhost:3000/callbackto Authorized redirect URIsNote your Client ID and Client Secret
2. Run the server
The server runs on http://localhost:3000 by default. Change with PORT=3001.
3. Add to your MCP client
Architecture
This server acts as an OAuth proxy to Google:
Server advertises itself as an OAuth authorization server via
/.well-known/oauth-authorization-server/registerreturns the Google OAuth client credentials/authorizeredirects to Google, encoding the client's callback URL in state/callbackreceives the code from Google and forwards to the client's callback/tokenproxies token requests to Google, injecting client credentials/mcphandles MCP requests, using the bearer token to call Gmail API
The server holds no tokens or state - it just proxies OAuth to Google.
Tools
Tool | Description |
| Get user's email address and profile info |
Messages | |
| Search/list messages (consider |
| Get a single message |
| Send an email |
| Add/remove labels |
| Archive (remove from inbox) |
| Move to trash |
| Restore from trash |
| Permanently delete |
| Bulk label changes |
| Bulk permanent delete |
Threads | |
| Search/list threads (recommended) |
| Get all messages in a thread (recommended) |
| Add/remove labels |
| Move to trash |
| Restore from trash |
| Permanently delete |
Drafts | |
| List drafts |
| Get a draft |
| Create a draft |
| Update a draft |
| Send a draft |
| Delete a draft |
Labels | |
| List all labels |
| Get a label |
| Create a label |
| Update a label |
| Delete a label |
Attachments | |
| Download attachment |
Filters | |
| List email filters |
| Get a filter |
| Create a filter |
| Delete a filter |
Settings | |
| Get vacation auto-reply settings |
| Set vacation auto-reply settings |
Gmail API Scopes
gmail.readonly- Read messages and labelsgmail.send- Send messagesgmail.modify- Modify messages (archive, labels, trash)
Contributing
Pull requests are welcomed on GitHub! To get started:
Install Git and Node.js
Clone the repository
Install dependencies with
npm installRun
npm run testto run testsBuild with
npm run build
Releases
Versions follow the semantic versioning spec.
To release:
Use
npm version <major | minor | patch>to bump the versionRun
git push --follow-tagsto push with tagsWait for GitHub Actions to publish to the NPM registry.