An MCP (Model Context Protocol) server that enables sending emails and creating drafts through the Gmail API.
- sendEmail: Send emails through your Gmail account with optional file attachments
- createDraft: Create email drafts with optional file attachments
- OAuth 2.0 authentication with Google
- Support for file attachments of various types (PDF, DOC, images, etc.)
- Run anywhere with
npx- no local installation required
- Node.js v18 or higher
- A Google Cloud project with Gmail API enabled
- OAuth 2.0 credentials (Client ID and Client Secret)
- Go to the Google Cloud Console
- Create a new project or select an existing one
- Enable the Gmail API for your project
- Go to Credentials and create an OAuth 2.0 Client ID
- Set the application type to Web application
- Add
http://localhost:3500/oauth2callbackas an authorized redirect URI - Save your Client ID and Client Secret
The easiest way to use this server is with npx. No installation required:
GMAIL_CLIENT_ID=your_client_id GMAIL_CLIENT_SECRET=your_client_secret npx gmail-sender-mcp-servernpm install -g gmail-sender-mcp-serverThen run:
GMAIL_CLIENT_ID=your_client_id GMAIL_CLIENT_SECRET=your_client_secret gmail-sender-mcp-servergit clone <repository-url>
cd Gmail_MCP_server
npm install
GMAIL_CLIENT_ID=your_client_id GMAIL_CLIENT_SECRET=your_client_secret npm startOn first run, the server will start an OAuth server on port 3500:
- Visit
http://localhost:3500/authin your browser - Sign in with your Google account and grant permissions
- The authentication token will be saved to
~/.config/gmail-sender-mcp-server/token.json
The token is stored in your home directory, so it persists across npx runs and works across different machines once authenticated.
| Variable | Required | Description |
|---|---|---|
GMAIL_CLIENT_ID |
Yes | Your Google OAuth 2.0 Client ID |
GMAIL_CLIENT_SECRET |
Yes | Your Google OAuth 2.0 Client Secret |
To use this server with an MCP client (like Claude Desktop), add it to your MCP configuration:
{
"mcpServers": {
"gmail-sender": {
"type": "stdio",
"command": "npx",
"args": ["gmail-sender-mcp-server"],
"env": {
"GMAIL_CLIENT_ID": "your_client_id",
"GMAIL_CLIENT_SECRET": "your_client_secret"
}
}
}
}Send an email immediately through Gmail.
Parameters:
recipient(required): Email address of the recipientsubject(required): Subject line of the emailbody(required): Body content of the email (plain text)attachmentPath(optional): Absolute path to a file to attach
Example:
{
"recipient": "example@email.com",
"subject": "Hello from MCP",
"body": "This is a test email sent via the Gmail MCP server.",
"attachmentPath": "/path/to/document.pdf"
}Create an email draft in Gmail (not sent automatically).
Parameters:
recipient(required): Email address of the recipientsubject(required): Subject line of the emailbody(required): Body content of the email (plain text)attachmentPath(optional): Absolute path to a file to attach
Example:
{
"recipient": "example@email.com",
"subject": "Draft Email",
"body": "This is a draft that can be reviewed and sent later.",
"attachmentPath": "/path/to/image.png"
}The server automatically detects file types based on extension:
- Documents: PDF, DOC, DOCX, TXT
- Images: JPG, JPEG, PNG, GIF
- Archives: ZIP
- Other files are sent as
application/octet-stream
The server uses the https://www.googleapis.com/auth/gmail.compose scope, which allows:
- Creating and sending emails
- Creating drafts
- Modifying drafts
gmail-sender-mcp-server/
├── src/
│ └── index.js # Main server implementation
├── package.json # Dependencies and scripts
└── README.md # This file
~/.config/gmail-sender-mcp-server/
└── token.json # OAuth tokens (created after authentication)
- OAuth tokens are stored in
~/.config/gmail-sender-mcp-server/token.jsonand should be kept secure - Client ID and Secret should be passed via environment variables, not committed to version control
- The OAuth server only runs on localhost (port 3500)
- Consider using a secrets manager for production deployments
- Ensure your OAuth client is configured with
http://localhost:3500/oauth2callbackas a redirect URI - Check that the Gmail API is enabled in your Google Cloud project
- Verify your
GMAIL_CLIENT_IDandGMAIL_CLIENT_SECRETenvironment variables are set correctly
- If authentication fails, delete
~/.config/gmail-sender-mcp-server/token.jsonand re-authenticate - Tokens may expire; re-authenticate if you get authorization errors
- Use absolute paths for attachments
- Ensure the file exists and is readable
- Check that the file size is within Gmail's limits (25MB for attachments)
MIT