Skip to main content
Glama
brentwpeterson

Gmail MCP Server

README.md
# Gmail MCP Server

A Model Context Protocol (MCP) server that provides Gmail access for Claude Code and other MCP-compatible clients.

## Features

- List emails from any folder (inbox, sent, unread, starred, etc.)
- Read full email content
- Send emails with automatic signature
- Reply to threads with proper threading headers
- Search using Gmail's query syntax
- Manage labels (star, archive, mark read/unread)

## Prerequisites

- Node.js 20 or higher
- A Google Cloud project with Gmail API enabled
- OAuth 2.0 credentials (Desktop app type)

## Setup

### 1. Create a Google Cloud Project

If you don't have one already:

```bash
gcloud projects create your-project-name --name="Your MCP Tools"
gcloud config set project your-project-name
gcloud services enable gmail.googleapis.com
```

### 2. Configure OAuth Consent Screen

1. Go to [Google Cloud Console - OAuth Consent](https://console.cloud.google.com/apis/credentials/consent)
2. Select **Internal** (for Google Workspace) or **External** (for personal Gmail)
3. Add these scopes:
   - `https://www.googleapis.com/auth/gmail.readonly`
   - `https://www.googleapis.com/auth/gmail.send`
   - `https://www.googleapis.com/auth/gmail.modify`

### 3. Create OAuth Credentials

1. Go to [Google Cloud Console - Credentials](https://console.cloud.google.com/apis/credentials)
2. Click **Create Credentials** > **OAuth client ID**
3. Select **Desktop app** as the application type
4. Download the JSON file
5. Save it as `~/.mcp-gmail/credentials.json`

### 4. Install and Build

```bash
git clone https://github.com/brentwpeterson/mcp-gmail.git
cd mcp-gmail
npm install
npm run build
```

### 5. Authenticate

```bash
npm run auth
```

This opens a browser for Google OAuth. Approve the permissions, and tokens will be saved to `~/.mcp-gmail/token.json`.

### 6. Configure Your MCP Client

Add to your MCP configuration file (e.g., `.mcp.json` for Claude Code):

```json
{
  "mcpServers": {
    "gmail": {
      "command": "node",
      "args": ["/absolute/path/to/mcp-gmail/dist/index.js"]
    }
  }
}
```

Restart your MCP client to load the server.

## Available Tools

| Tool | Description |
|------|-------------|
| `gmail_list_emails` | List recent emails with optional folder and search query |
| `gmail_get_email` | Get full content of a specific email |
| `gmail_send_email` | Send a new email or reply to a thread |
| `gmail_search` | Search emails using Gmail query syntax |
| `gmail_get_thread` | Get all messages in a conversation |
| `gmail_modify_labels` | Add/remove labels (read, star, archive) |
| `gmail_list_labels` | List all available labels |

## Folder Options

The `gmail_list_emails` tool supports these folders:

| Folder | Description |
|--------|-------------|
| `inbox` (default) | Inbox emails |
| `sent` | Sent emails |
| `unread` | Unread inbox emails |
| `starred` | Starred emails |
| `important` | Important emails |
| `trash` | Deleted emails |
| `spam` | Spam folder |
| `all` | All emails (no filter) |

## Gmail Search Syntax

The `gmail_search` tool and `query` parameter support Gmail's search syntax:

- `from:user@example.com` - From specific sender
- `to:user@example.com` - To specific recipient
- `subject:meeting` - Subject contains word
- `is:unread` - Unread messages
- `is:starred` - Starred messages
- `has:attachment` - Has attachments
- `newer_than:2d` - Newer than 2 days
- `older_than:1w` - Older than 1 week
- `label:work` - Has specific label

Combine with spaces (AND) or `OR`: `from:boss@work.com is:unread`

## Configuration

Environment variables (optional):

| Variable | Description | Default |
|----------|-------------|---------|
| `GMAIL_CONFIG_DIR` | Config directory | `~/.mcp-gmail` |
| `GMAIL_CREDENTIALS_PATH` | Path to credentials.json | `~/.mcp-gmail/credentials.json` |

## How It Works

- **Signatures**: Automatically fetched from your Gmail "Send mail as" settings
- **Thread Replies**: Proper `In-Reply-To` and `References` headers for correct threading
- **Sender Name**: Uses your display name from Gmail settings

## Security

- OAuth tokens are stored locally in `~/.mcp-gmail/token.json`
- Credentials and tokens are never committed (see `.gitignore`)
- Only you can access your email through this server
- Tokens can be revoked at any time from [Google Account Permissions](https://myaccount.google.com/permissions)

## License

MIT