Skip to main content
Glama
YimingYAN

gmail-labels-mcp-server

by YimingYAN
README.md
# Gmail Labels MCP Server

An MCP server for Gmail label management. Fills the gap in the official Gmail MCP connector, which lacks label/tag operations.

Handles OAuth2 automatically — authenticate once, and the server refreshes tokens forever.

## Tools

| Tool | Description |
|------|-------------|
| `gmail_list_labels` | List all labels with IDs, names, and message counts |
| `gmail_create_label` | Create a new label (supports nesting with `/`) |
| `gmail_delete_label` | Delete a user-created label |
| `gmail_get_message_labels` | Get current labels on a specific message |
| `gmail_modify_message_labels` | Add/remove labels on a specific message |
| `gmail_modify_thread_labels` | Add/remove labels on an entire thread |
| `gmail_bulk_label_by_search` | Search messages and bulk apply label changes |

## Setup

### 1. Create a Google Cloud project and enable the Gmail API

1. Go to the [Google Cloud Console](https://console.cloud.google.com/)
2. Create a new project (or select an existing one)
3. Navigate to **APIs & Services > Library**
4. Search for **Gmail API** and click **Enable**

### 2. Create OAuth2 credentials

1. Go to **APIs & Services > Credentials**
2. Click **Create Credentials > OAuth Client ID**
3. If prompted, configure the **OAuth consent screen** first:
   - Choose **External** user type (or **Internal** if using Google Workspace)
   - Fill in the app name (e.g. "Gmail Labels MCP") and your email
   - Add the scope `https://mail.google.com/`
   - Add your email as a test user
   - Save and go back to creating credentials
4. Select **Desktop app** as the application type
5. Give it a name (e.g. "Gmail Labels MCP")
6. Click **Create** and copy the **Client ID** and **Client Secret**

### 3. Install and authenticate

**Option A: Install from npm (recommended)**

```bash
npm install -g gmail-labels-mcp-server
GOOGLE_CLIENT_ID=your_client_id GOOGLE_CLIENT_SECRET=your_client_secret gmail-labels-mcp-server --auth
```

**Option B: Clone and build from source**

```bash
git clone https://github.com/YimingYAN/gmail-labels-mcp-server.git
cd gmail-labels-mcp-server
npm install && npm run build
GOOGLE_CLIENT_ID=your_client_id GOOGLE_CLIENT_SECRET=your_client_secret npm run auth
```

This opens a browser for Google consent. Approve Gmail access, and credentials are saved to `~/.gmail-labels-mcp/credentials.json`. You only need to do this once.

### 4. Configure your client

#### Claude Code

```bash
claude mcp add gmail-labels -- npx gmail-labels-mcp-server
```

Or if installed from source:

```bash
claude mcp add gmail-labels -- node /path/to/gmail-labels-mcp-server/dist/index.js
```

#### Claude Desktop

Add to `~/Library/Application Support/Claude/claude_desktop_config.json`:

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

No env vars needed — the server reads credentials from `~/.gmail-labels-mcp/credentials.json` and auto-refreshes tokens.

## Example Usage

- "List all my Gmail labels"
- "Create a label called 'Crypto/Compliance'"
- "Tag message [id] with the Finance label"
- "Mark message [id] as read" (removes UNREAD label)
- "Archive all emails from newsletter@example.com"
- "Star message [id]" (adds STARRED label)
- "What labels does message [id] currently have?"

## Notes

- System label IDs: `INBOX`, `SENT`, `TRASH`, `SPAM`, `STARRED`, `IMPORTANT`, `UNREAD`
- User label IDs follow the format `Label_XXXXXXXXXX`
- Use `gmail_list_labels` first to discover label IDs before modifying messages
- "Mark as read" = remove `UNREAD` label; "Mark as unread" = add `UNREAD` label
- To re-authenticate: delete `~/.gmail-labels-mcp/credentials.json` and re-run the auth step

## License

MIT

TDQS

A4.4/5.0

Scored across 7 tools

Disambiguation5/5

Each tool targets a distinct resource and action: label CRUD, message label operations, thread label operations, and bulk search modifications. There is no overlap between tools; even the three modifying tools differ by scope (single message, single thread, bulk search).

Naming Consistency5/5

All tool names follow a consistent gmail_ prefix with a verb_noun pattern (e.g., list_labels, create_label, modify_message_labels). Even 'bulk_label_by_search' uses a clear action-object-modifier structure. The naming is uniform and predictable.

Tool Count5/5

Seven tools is well-scoped for a Gmail label management server. It covers label administration and all common ways to apply/remove labels without excess overlap or missing essentials. The set feels neither sparse nor bloated.

Completeness4/5

The tool set provides label CRUD (list, create, delete) and comprehensive label modification via message, thread, and bulk search. The only notable gap is the lack of an update/rename label operation, which is a minor omission that agents can work around by creating a new label and migrating.

Maintenance

ActivityInactive
ResponsivenessNo issues