Enables AI assistants to interact with Gmail through OAuth2 authentication, providing tools for listing emails, searching messages, reading email content, creating drafts, and sending emails with safety-first draft mode by default.
Uses Google Cloud Console for OAuth2 credential setup and Gmail API access configuration to enable Gmail integration.
Click on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@Gmail MCP Serversearch for emails from Amazon in the last week"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
π§ Gmail MCP Server
A powerful MCP (Model Context Protocol) server that enables AI assistants to interact with Gmail through OAuth2 authentication with safety-first design. Built with TypeScript and designed for seamless integration with Claude Desktop and other MCP-compatible clients.
π Table of Contents
β¨ Features
π‘οΈ Safety First - Draft-only mode by default prevents accidental email sends
π Smart Drafts - Create drafts for new emails and replies with custom content
π¬ List Emails - Retrieve recent emails with advanced filtering options
π Get Email Details - Fetch complete email content including attachments info
π Search Emails - Use Gmail's powerful search syntax to find specific emails
βοΈ Send Emails - Direct sending (disabled by default, enable with caution)
π Secure OAuth2 - Industry-standard authentication with refresh token support
π― Type-Safe - Full TypeScript implementation with strict typing
π High Performance - Optimized with parallel processing and smart caching
π Prerequisites
Before you begin, ensure you have:
Node.js 18.0 or higher
npm or yarn package manager
Google Account with Gmail enabled
Google Cloud Console access
Claude Desktop (optional, for integration)
π¦ Installation
Clone the repository:
Install dependencies:
Create environment file:
π‘οΈ Security Note: By default, direct email sending is disabled for safety. The server will create drafts instead, which you can review and send manually from Gmail.
βοΈ Configuration
1. Google Cloud Console Setup
Create or select a project:
Go to Google Cloud Console
Click on the project dropdown and select "New Project"
Give your project a name (e.g., "Gmail MCP Server")
Click "Create"
Enable Gmail API:
In the sidebar, navigate to APIs & Services β Library
Search for "Gmail API"
Click on Gmail API from the results
Click Enable
Wait for the API to be enabled (usually takes a few seconds)
2. Create OAuth2 Credentials
Configure OAuth consent screen:
Go to APIs & Services β OAuth consent screen
Select "External" user type (unless you have a Google Workspace account)
Fill in the required fields:
App name: "Gmail MCP Server"
User support email: Your email
Developer contact: Your email
Add scopes:
https://www.googleapis.com/auth/gmail.readonlyhttps://www.googleapis.com/auth/gmail.sendhttps://www.googleapis.com/auth/gmail.modify
Add test users (important!):
Add your Gmail address and any other accounts you want to use
Save and continue through all steps
Create OAuth client:
Go to APIs & Services β Credentials
Click + CREATE CREDENTIALS β OAuth client ID
Application type: Web application β οΈ (NOT Desktop app)
Name: "Gmail MCP Web Client"
Configure Authorized redirect URIs:
Click + ADD URI
Add:
http://localhost:8765/oauth2callback(default port)If you plan to use a custom port, add:
http://localhost:YOUR_PORT/oauth2callback
Click Create
Download the credentials (you'll see a download button or JSON option)
Save the
client_idandclient_secretfrom the downloaded file
β οΈ Important: Desktop app type doesn't allow custom redirect URIs, but we need
localhost:PORT/oauth2callbackfor the OAuth flow to work. That's why we use Web application instead.
3. Generate Refresh Token
Add credentials to .env:
π‘ Port Configuration: The
OAUTH_REDIRECT_PORTmust match the port you configured in the Google Cloud Console redirect URI. If you usedhttp://localhost:8765/oauth2callback, keep it as 8765. If you used a different port, update this value accordingly.
Run the setup script:
Authorize the application:
A browser window will open automatically
Sign in with your Google account
Grant all requested permissions
You'll be redirected to a success page
Save the refresh token:
The terminal will display your refresh token
Copy the complete
GMAIL_REFRESH_TOKENvalueAdd it to your
.envfile
π Usage
Standalone Server
Build the project:
Start the server:
The server will start and listen for MCP commands via stdio.
Claude Desktop Integration
Build the project first:
Locate Claude Desktop config:
macOS:
~/Library/Application Support/Claude/claude_desktop_config.jsonWindows:
%APPDATA%\Claude\claude_desktop_config.jsonLinux:
~/.config/Claude/claude_desktop_config.json
Edit the configuration file:
Restart Claude Desktop
Verify the connection:
Open Claude Desktop
Look for the π icon indicating MCP connection
Try: "List my recent emails"
π οΈ Available Tools
π‘οΈ Safety Notice: Tools marked with π‘οΈ create drafts by default for your safety. Direct sending tools marked with π¨ are disabled by default.
π¬ list_emails
List recent emails with optional filtering.
Parameters:
maxResults(number, 1-100): Maximum emails to return (default: 10)query(string): Gmail search query (e.g., "is:unread")includeSpamTrash(boolean): Include SPAM/TRASH folders (default: false)
Example:
π get_email_details
Get complete details and content of a specific email.
Parameters:
emailId(string, required): The email ID to retrieveformat(string): Level of detail - "full", "minimal", or "metadata" (default: "full")
Example:
π‘οΈ create_draft
Create an email draft with optional CC/BCC recipients (recommended for AI assistants).
Parameters:
to(string, required): Recipient email addresssubject(string, required): Email subjectbody(string, required): Email body (plain text or HTML)cc(string): CC recipients (comma-separated)bcc(string): BCC recipients (comma-separated)
Example:
π¨ send_email (Disabled by Default)
Send an email directly with optional CC/BCC recipients.
β οΈ Security Warning: This tool is disabled by default. Set GMAIL_ALLOW_DIRECT_SEND=true to enable.
Parameters:
to(string, required): Recipient email addresssubject(string, required): Email subjectbody(string, required): Email body (plain text or HTML)cc(string): CC recipients (comma-separated)bcc(string): BCC recipients (comma-separated)
Example:
π search_emails
Search emails using Gmail's advanced search syntax.
Parameters:
query(string, required): Gmail search querymaxResults(number, 1-100): Maximum results (default: 10)includeSpamTrash(boolean): Include SPAM/TRASH (default: false)
Example Gmail search queries:
from:user@example.com- Emails from a specific sendersubject:"important meeting"- Emails with exact phrase in subjecthas:attachment- Emails with attachmentsis:unread- Unread emailsnewer_than:2d- Emails from last 2 dayslabel:work- Emails with specific label
π‘οΈ find_and_draft_reply
Find the latest email from a sender and create a draft reply with optional custom content.
Parameters:
senderName(string, required): Sender name or email addressreplyBody(string, optional): Custom reply content (template used if not provided)
Example:
π Examples
Basic Usage Examples
List recent emails:
Search for specific emails:
Create a draft email:
Create a draft reply:
Advanced Usage Examples
Complex search:
Draft with CC:
Get email details:
π§ Troubleshooting
Common Issues and Solutions
β Error: Missing required environment variables
Solution: Ensure all required environment variables are set in your .env file:
GMAIL_CLIENT_IDGMAIL_CLIENT_SECRETGMAIL_REFRESH_TOKENGMAIL_ALLOW_DIRECT_SEND(optional, defaults tofalse)OAUTH_REDIRECT_PORT(optional, defaults to8765)
β Error: redirect_uri_mismatch
Problem: OAuth setup fails with "The redirect URI in the request does not match the ones authorized for the OAuth client."
Solution:
Go to Google Cloud Console β APIs & Services β Credentials
Click on your OAuth client
In "Authorized redirect URIs", ensure you have:
http://localhost:8765/oauth2callbackIf using a custom port, add:
http://localhost:YOUR_PORT/oauth2callbackMake sure your
.envfile has the matchingOAUTH_REDIRECT_PORT=8765Important: OAuth client must be Web application type, not Desktop app
This error commonly occurs when following old documentation that suggests using "Desktop app" type, which doesn't support custom redirect URIs.
π‘οΈ Security: Direct email sending is disabled
This is normal and safe behavior. By default, the server creates drafts instead of sending emails directly.
Solutions:
Recommended: Use
create_drafttool instead ofsend_emailAlternative: Set
GMAIL_ALLOW_DIRECT_SEND=truein your.envfile (not recommended for AI assistants)
β Error 403: access_denied
Solution:
Go to Google Cloud Console β OAuth consent screen
Add your email as a test user
Re-run the token generation process
β Error: invalid_grant
Solution: Your refresh token has expired or is invalid
Delete the old refresh token from
.envRun
npm run setupagainComplete the authorization flow
Update
.envwith the new token
β Gmail API not enabled
Solution:
Go to Google Cloud Console
Navigate to APIs & Services β Library
Search for "Gmail API"
Click Enable
β Claude Desktop doesn't show the MCP server
Solution:
Verify the config file path is correct
Ensure all paths in the config are absolute paths
Check that the built files exist in
dist/Restart Claude Desktop completely
Check Claude Desktop logs for errors
β Rate limit exceeded
Solution:
Gmail API has quotas (250 quota units per user per second)
Implement exponential backoff for retries
Reduce the number of parallel requests
π Security Guidelines
Draft-First Approach
This server implements a safety-first design to prevent accidental email sends:
Default behavior: Creates drafts that require manual review
Protection:
send_emailtool is disabled by defaultUser control: Explicit environment variable required for direct sending
Recommended Usage
β Safe for AI assistants:
create_draft- Creates email draftsfind_and_draft_reply- Creates reply draftslist_emails,search_emails,get_email_details- Read-only operations
β οΈ Use with caution:
send_email- Only enable if you fully trust the AI assistant and understand the risks
Best Practices
Keep unless absolutely necessary
Review all drafts before sending manually from Gmail
Test thoroughly in a safe environment before production use
Monitor usage and check for unexpected behavior
π¨ Development
Available Scripts
Project Structure
Testing
Test the connection and basic functionality:
π€ Contributing
Contributions are welcome! Please feel free to submit a Pull Request.
Fork the repository
Create your feature branch (
git checkout -b feature/AmazingFeature)Commit your changes (
git commit -m 'Add some AmazingFeature')Push to the branch (
git push origin feature/AmazingFeature)Open a Pull Request
π License
This project is licensed under the MIT License - see the LICENSE file for details.
π Acknowledgments
Google Gmail API for email functionality
Model Context Protocol for the MCP specification
Anthropic for Claude and MCP development
π Support
For issues, questions, or suggestions:
Open an issue on GitHub
Check existing issues for solutions
Read the Gmail API documentation
Made with β€οΈ by Javi Ezpeleta