Skip to main content
Glama
neutral-Stage

Gmail MCP Server

README.md
<p align="center">
  <h1 align="center">📧 Gmail MCP Server</h1>
  <p align="center">
    A powerful Gmail MCP server for AI agents — search, read, send, and organize emails via Claude Desktop, Claude Code, Cursor, and more.
  </p>
</p>

<p align="center">
  <a href="https://www.npmjs.com/package/gmail-mcp-server"><img src="https://img.shields.io/npm/v/gmail-mcp-server?color=%2300d4aa&style=flat-square" alt="npm version" /></a>
  <a href="LICENSE"><img src="https://img.shields.io/badge/license-MIT-blue?style=flat-square" alt="MIT License" /></a>
  <a href="https://nodejs.org"><img src="https://img.shields.io/badge/node-%3E%3D18-brightgreen?style=flat-square" alt="Node.js >= 18" /></a>
  <a href="https://modelcontextprotocol.io"><img src="https://img.shields.io/badge/MCP-compatible-purple?style=flat-square" alt="MCP Compatible" /></a>
</p>

<p align="center">
  <strong>⭐ If you find this project useful, please consider giving it a star on GitHub! It helps others discover it. ⭐</strong>
</p>

---

## ⚡ Quick Start

```bash
# One-command setup — auto-configures your AI client
npx gmail-mcp-server setup
```

That's it. The setup wizard will:
1. Check your Google OAuth credentials
2. Let you choose your AI client (Claude Desktop, Claude Code, Cursor, Windsurf)
3. Auto-write the config file
4. Run the OAuth authentication flow

---

## ✨ Why choose this MCP?

While Google provides workspace integrations and generic email readers exist, this MCP is explicitly built for **AI Agents acting autonomously**:

- **Zero-Config Setup**: `npx gmail-mcp-server setup` detects your OS and AI client, automatically editing your local configuration JSON. No manual path mapping required.
- **Built for AI Agents**: Includes tools like `advanced_filter` (search + bulk actions with LLM-friendly dry-runs), `batch_modify_emails` (modify 1000 emails at once), and `get_frequent_contacts` (turn an inbox into a CRM context).
- **100% Local & Private**: Bring-your-own-credentials. Tokens remain strictly on your machine. No proxy servers, no telemetry, and no third-party email routing.
- **Modular & Extensible**: Clean, deeply typed domain-driven structure (e.g., `src/tools/compose.ts`, `src/tools/search.ts`) making it extremely easy for developers to fork and extend.

---

## 🔧 Tools (20 tools)

| Category | Tool | Description |
|----------|------|-------------|
| **Search** | `search_emails` | Search with Gmail query syntax (`from:`, `is:unread`, `subject:`, etc.) |
| **Read** | `get_email` | Full email content — body, headers, attachments |
| | `get_thread` | All messages in a thread |
| **Compose** | `send_email` | Send a new email |
| | `reply_email` | Reply (or reply-all) keeping the thread |
| | `forward_email` | Forward with optional note |
| | `create_draft` | Save a draft (optionally in a thread) |
| **Organize** | `modify_email` | Add/remove labels, mark read/unread |
| | `batch_modify_emails` | Bulk modify up to 1000 emails |
| | `trash_email` | Move to trash |
| | `untrash_email` | Restore from trash |
| | `batch_trash_emails` | Bulk trash |
| | `mark_spam` | Mark as spam |
| | `advanced_filter` | Search + bulk action (archive, label, etc.) with dry-run |
| **Labels** | `list_labels` | List all labels with IDs |
| | `create_label` | Create new label (supports nesting) |
| | `delete_label` | Delete user-created label |
| **Extract** | `extract_addresses` | Extract unique addresses from search results |
| | `format_emails` | Filter, sort, reformat email data |
| **Profile** | `get_profile` | Your email address, message/thread counts |
| | `get_frequent_contacts` | Most-contacted addresses from sent mail |
| **Attachments** | `get_attachment` | Download attachment content |

---

## 🚀 Step-by-Step Setup Guide

Follow these steps to get your Gmail MCP server running in less than 5 minutes.

### 1. Create Google Cloud Project & Enable API
1.  Open the [Google Cloud Console](https://console.cloud.google.com/).
2.  **Create a New Project**: Click the project dropdown (top left) → "New Project" → Name it `Gmail MCP` → "Create".
3.  **Enable Gmail API**: Search for "Gmail API" in the search bar → Click it → Click **Enable**.

### 2. Configure OAuth Consent Screen
1.  Go to **APIs & Services** → **OAuth consent screen**.
2.  Select **User Type**: "External" (or "Internal" if you have a Google Workspace) → Click **Create**.
3.  **App Information**: Fill in "App name" (e.g., `Gmail MCP`) and "User support email".
4.  **Developer Contact**: Fill in your email address.
5.  Click **Save and Continue** until you reach the **Summary**.
6.  **Add Test Users**: Go back to the "OAuth consent screen" tab → Under "Test users" → Click **+ ADD USERS** → Enter your Gmail address → Click **Save**.

### 3. Generate Credentials
1.  Go to **APIs & Services** → **Credentials**.
2.  Click **+ CREATE CREDENTIALS** → Select **OAuth client ID**.
3.  **Application type**: Select **Desktop app**.
4.  **Name**: Give it a name (e.g., `Gmail MCP Client`).
5.  Click **Create**.
6.  **Download JSON**: In the "OAuth 2.0 Client IDs" list, click the download icon (↓) for your new client.
7.  **Rename & Move**: Save this file as `credentials.json` in your project folder (or keep it ready for the setup wizard).

### 4. Run the Setup Wizard
Open your terminal and run:
```bash
npx gmail-mcp-server setup
```
The wizard will guide you through:
-   Finding your `credentials.json`.
-   Selecting your AI client (Claude, Cursor, etc.).
-   Authorizing the app via your browser.

---

## 🖥️ Client Configuration

### Claude Desktop

```bash
npx gmail-mcp-server setup   # Select "Claude Desktop"
```

Or manually add to `~/Library/Application Support/Claude/claude_desktop_config.json`:

```json
{
  "mcpServers": {
    "gmail": {
      "command": "npx",
      "args": ["-y", "gmail-mcp-server"]
    }
  }
}
```

### Claude Code

```bash
npx gmail-mcp-server setup   # Select "Claude Code"
```

Or add to `~/.claude/mcp.json`:

```json
{
  "mcpServers": {
    "gmail": {
      "command": "npx",
      "args": ["-y", "gmail-mcp-server"]
    }
  }
}
```

### Cursor

```bash
npx gmail-mcp-server setup   # Select "Cursor"
```

Or add to `.cursor/mcp.json`:

```json
{
  "mcpServers": {
    "gmail": {
      "command": "npx",
      "args": ["-y", "gmail-mcp-server"]
    }
  }
}
```

### Windsurf

```bash
npx gmail-mcp-server setup   # Select "Windsurf"
```

---

## 🛠️ CLI Commands

```bash
npx gmail-mcp-server setup      # Interactive setup wizard
npx gmail-mcp-server auth       # Run OAuth flow
npx gmail-mcp-server serve      # Start MCP server (default)
npx gmail-mcp-server doctor     # Diagnose issues
npx gmail-mcp-server --help     # Show help
npx gmail-mcp-server --version  # Show version
```

---

## 🩺 Troubleshooting

If you run into issues, try the following:

1.  **Run the Doctor**: `npx gmail-mcp-server doctor` will diagnose common problems with your credentials, tokens, and system.
2.  **Missing `credentials.json`**: Ensure you've downloaded the file from Google Cloud Console and it's named exactly `credentials.json` in your current directory.
3.  **Invalid Grant / Expired Token**: If the server can't connect, try running `npx gmail-mcp-server auth` to reset your OAuth tokens.
4.  **Port 3000 Busy**: The auth flow uses port 3000. If it's busy, the flow might fail. Ensure no other apps are using port 3000 during setup.

---

## 💬 Usage Examples

Once configured, ask your AI agent:

- *"Search my emails for unread messages from GitHub"*
- *"Get the full content of email ID 18abc123"*
- *"Show me the whole thread for this conversation"*
- *"Reply to that email saying thanks"*
- *"Forward the invoice to accounting@company.com"*
- *"Create a draft reply for that message"*
- *"Mark all newsletters from last month as read"*
- *"Extract all email addresses from my last 50 emails"*
- *"Who do I email most frequently?"*
- *"Download the PDF attachment from that email"*

---

## 🔒 Security

- `credentials.json` — **never committed** (in `.gitignore`)
- Tokens stored in `~/.gmail-mcp/token.json` — outside the project, auto-refreshed
- OAuth scope: `gmail.modify` (read + modify, no permanent delete or admin)
- All data stays local — no external servers, no telemetry

---

## 🌍 Environment Variables

| Variable | Default | Description |
|----------|---------|-------------|
| `GMAIL_CREDENTIALS_PATH` | `./credentials.json` | Path to your OAuth credentials file |
| `GMAIL_MCP_DIR` | `process.cwd()` | Base directory for credentials lookup |

---

## 🤝 Contributing

We welcome contributions! See [CONTRIBUTING.md](CONTRIBUTING.md) for guidelines.

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

---

## 📄 License

[MIT](LICENSE) — use it however you want.

TDQS

A3.7/5.0

Scored across 22 tools

Disambiguation5/5

Each tool has a distinct purpose: email CRUD, label management, batch operations, search with bulk actions, etc. Even similar tools like send_email vs create_draft vs reply_email are clearly differentiated by their descriptions.

Naming Consistency4/5

Most tools follow a verb_noun pattern in snake_case (e.g., create_draft, send_email). However, 'advanced_filter' breaks the pattern as an adjective_noun, and 'batch_modify_emails' uses a prefix, but overall the naming is largely consistent.

Tool Count4/5

With 22 tools, the server covers a comprehensive set of Gmail operations. While slightly above the typical 3-15 range, each tool appears justified and contributes to the complete email management workflow.

Completeness5/5

The tool set covers the full lifecycle of emails: create, send, receive, reply, forward, trash, untrash, label management, batch operations, attachment handling, search with advanced filtering, and contacts. No obvious gaps.

Maintenance

ActivityInactive
ResponsivenessNo issues