Skip to main content
Glama
TheMossConcept

Gmail Sender MCP Server

README.md
# Gmail Sender MCP Server

An MCP (Model Context Protocol) server that enables sending emails and creating drafts through the Gmail API.

## Features

- **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

## Prerequisites

- Node.js v18 or higher
- A Google Cloud project with Gmail API enabled
- OAuth 2.0 credentials (Client ID and Client Secret)

### Setting up Google Cloud Credentials

1. Go to the [Google Cloud Console](https://console.cloud.google.com/)
2. Create a new project or select an existing one
3. Enable the Gmail API for your project
4. Go to **Credentials** and create an **OAuth 2.0 Client ID**
5. Set the application type to **Web application**
6. Add `http://localhost:3500/oauth2callback` as an authorized redirect URI
7. Save your Client ID and Client Secret

## Installation & Usage

### Run with npx (Recommended)

The easiest way to use this server is with `npx`. No installation required:

```bash
GMAIL_CLIENT_ID=your_client_id GMAIL_CLIENT_SECRET=your_client_secret npx gmail-sender-mcp-server
```

### Install Globally

```bash
npm install -g gmail-sender-mcp-server
```

Then run:

```bash
GMAIL_CLIENT_ID=your_client_id GMAIL_CLIENT_SECRET=your_client_secret gmail-sender-mcp-server
```

### Install Locally (for development)

```bash
git clone <repository-url>
cd Gmail_MCP_server
npm install
GMAIL_CLIENT_ID=your_client_id GMAIL_CLIENT_SECRET=your_client_secret npm start
```

## Authentication

On first run, the server will start an OAuth server on port 3500:

1. Visit `http://localhost:3500/auth` in your browser
2. Sign in with your Google account and grant permissions
3. 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.

## Environment Variables

| 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 |

## MCP Configuration

To use this server with an MCP client (like Claude Desktop), add it to your MCP configuration:

```json
{
  "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"
      }
    }
  }
}
```

## Available Tools

### sendEmail

Send an email immediately through Gmail.

**Parameters:**
- `recipient` (required): Email address of the recipient
- `subject` (required): Subject line of the email
- `body` (required): Body content of the email (plain text)
- `attachmentPath` (optional): Absolute path to a file to attach

**Example:**
```json
{
  "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"
}
```

### createDraft

Create an email draft in Gmail (not sent automatically).

**Parameters:**
- `recipient` (required): Email address of the recipient
- `subject` (required): Subject line of the email
- `body` (required): Body content of the email (plain text)
- `attachmentPath` (optional): Absolute path to a file to attach

**Example:**
```json
{
  "recipient": "example@email.com",
  "subject": "Draft Email",
  "body": "This is a draft that can be reviewed and sent later.",
  "attachmentPath": "/path/to/image.png"
}
```

## Supported Attachment Types

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`

## OAuth Scopes

The server uses the `https://www.googleapis.com/auth/gmail.compose` scope, which allows:
- Creating and sending emails
- Creating drafts
- Modifying drafts

## File Structure

```
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)
```

## Security Notes

- OAuth tokens are stored in `~/.config/gmail-sender-mcp-server/token.json` and 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

## Troubleshooting

### Authentication Issues
- Ensure your OAuth client is configured with `http://localhost:3500/oauth2callback` as a redirect URI
- Check that the Gmail API is enabled in your Google Cloud project
- Verify your `GMAIL_CLIENT_ID` and `GMAIL_CLIENT_SECRET` environment variables are set correctly

### Token Issues
- If authentication fails, delete `~/.config/gmail-sender-mcp-server/token.json` and re-authenticate
- Tokens may expire; re-authenticate if you get authorization errors

### File Attachment Issues
- 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)

## License

MIT
# Gmail_MCP_server

TDQS

A3.9/5.0

Scored across 2 tools

Disambiguation5/5

The two tools have clearly distinct purposes: creating a draft vs sending an email. An agent can easily differentiate between them.

Naming Consistency5/5

Both tool names follow a consistent verb_noun pattern using camelCase (createDraft, sendEmail), demonstrating strong naming consistency.

Tool Count5/5

With only 2 tools, the server is tightly scoped to its purpose of sending emails and creating drafts. Each tool earns its place.

Completeness3/5

The server covers core email sending and draft creation but lacks common operations like listing, deleting drafts, or managing attachments. There are notable gaps for a full workflow.

Maintenance

ActivityInactive
ResponsivenessNo issues