Gmail MCP Server

Gmail MCP Server

A privacy-focused MCP server that grants Claude read-only access to Gmail using strict, user-defined filters to control which emails are exposed. It enables searching and fetching email metadata while ensuring data security through OAuth and localized filter enforcement.

Category
Visit Server

README

Gmail MCP Server

Python 3.9+ License: MIT MCP

A privacy-first Model Context Protocol server that gives Claude controlled, read-only access to your Gmail inbox. You define exactly which emails Claude can see — nothing else is exposed.

Why this is different

Most Gmail MCP servers give Claude unrestricted access to your entire inbox. This one doesn't.

Feature gmail-mcp Others
Filter by sender domain Yes No
Filter by label, date, subject, size Yes No
Block specific subject keywords Yes No
Per-request body privacy control Yes No
Access log (no email content) Yes No
Read-only OAuth scope Yes Some

Your config/filters.yaml acts as a firewall — Claude's query is always ANDed with your rules, and it cannot be bypassed even if Claude tries to access a specific message ID directly.


Prerequisites

1. Google API credentials

  1. Go to Google Cloud Console
  2. Create a new project (or select an existing one)
  3. Enable the Gmail API: APIs & Services → Enable APIs → search "Gmail API" → Enable
  4. Create OAuth credentials: APIs & Services → Credentials → Create Credentials → OAuth Client ID
    • Application type: Desktop app
    • Download the JSON file
  5. Save it to ~/.gmail_mcp/credentials.json

2. Configure your filters

Edit config/filters.yaml to control which emails Claude can access. The file is heavily commented — every option is explained inline.

filters:
  from_addresses: ["trusted@example.com"]   # Only emails from these senders
  labels: ["INBOX"]                          # Only emails with these labels
  unread_only: false                         # Set true for unread only
  date_after: "2025-01-01"                   # Ignore older emails
  subject_exclude: ["unsubscribe"]           # Skip marketing emails
  max_results: 50                            # Cap per request

privacy:
  allow_full_body: false                     # Keep false unless you need it

Option A — Claude Desktop (local, no tunnel needed)

Best for: everyday use with the Claude Desktop app on Mac or Windows.

The server runs as a local subprocess over stdio — no port, no URL, no Docker required.

Install:

git clone https://github.com/dhagash2310/gmail-mcp.git
cd gmail-mcp
python3 -m venv .venv
source .venv/bin/activate   # Windows: .venv\Scripts\activate
pip install -e .

First run (OAuth login):

gmail-mcp

A browser window opens. Log in and grant access. Your token is saved to ~/.gmail_mcp/token.json.

Add to Claude Desktop:

Edit ~/Library/Application Support/Claude/claude_desktop_config.json (Mac) or %APPDATA%\Claude\claude_desktop_config.json (Windows):

{
  "mcpServers": {
    "gmail": {
      "command": "/path/to/gmail-mcp/.venv/bin/gmail-mcp",
      "env": {
        "GMAIL_CREDENTIALS_PATH": "/Users/you/.gmail_mcp/credentials.json",
        "GMAIL_FILTER_CONFIG_PATH": "/path/to/gmail-mcp/config/filters.yaml"
      }
    }
  }
}

Restart Claude Desktop. The Gmail tools will appear automatically.


Option B — Docker + ngrok (Claude.ai browser version)

Best for: using the server with Claude.ai in your browser, or any other MCP-compatible web client (ChatGPT, etc.).

Claude.ai is a cloud app and cannot reach localhost directly, so you run the server in HTTP mode and use ngrok to give it a public HTTPS URL.

Step 1 — Complete OAuth login (first time only)

The container handles headless auth — it prints a URL for you to open in your browser and paste the code back.

mkdir -p ~/.gmail_mcp
cp /path/to/your/credentials.json ~/.gmail_mcp/credentials.json

docker compose run --rm gmail-mcp
# Opens a URL — open it in your browser, approve access, paste the code back
# Token is saved to ~/.gmail_mcp/token.json

Step 2 — Start the server

docker compose up -d
# Server runs at http://localhost:8000/mcp

Step 3 — Expose with ngrok

# Install ngrok: https://ngrok.com/download  or  brew install ngrok
ngrok http 8000
# You'll see a public URL like: https://abc123.ngrok-free.app

Step 4 — Connect Claude.ai

  1. Go to claude.ai → Settings → Connectors
  2. Click Add custom connector
  3. Enter your ngrok URL with the /mcp path:
    https://abc123.ngrok-free.app/mcp
    
  4. Save — the Gmail tools will appear in your next conversation.

Note: The ngrok URL changes each time you restart ngrok (on the free plan). You'll need to update the connector URL in Claude.ai when that happens. A paid ngrok plan gives you a stable domain.

Updating filters without restarting

The config/filters.yaml file is mounted into the container. Edit it on your host machine and call the apply_filters tool in Claude to reload it — no restart needed.


Available Tools

Tool Description
preview_filters Show active filter rules without fetching any email
apply_filters Reload and display the current filter configuration
fetch_emails Fetch emails matching your filter config
search_emails Search emails — your query is ANDed with the active filters
get_email_metadata Get details for a specific email (filter-verified)

Privacy & Security

  • Read-only access: Only gmail.readonly scope is requested — Claude cannot send, delete, or modify emails
  • Filter enforcement: Every tool call enforces your filters.yaml rules before returning data
  • No body by default: Only metadata and 200-character snippets are returned unless you enable allow_full_body in filters.yaml
  • Access logging: Every tool call is logged to ~/.gmail_mcp/access.log (no email content in the log)
  • Local only: No data is sent to any third-party service — the server runs entirely on your machine

Recommended Servers

playwright-mcp

playwright-mcp

A Model Context Protocol server that enables LLMs to interact with web pages through structured accessibility snapshots without requiring vision models or screenshots.

Official
Featured
TypeScript
Magic Component Platform (MCP)

Magic Component Platform (MCP)

An AI-powered tool that generates modern UI components from natural language descriptions, integrating with popular IDEs to streamline UI development workflow.

Official
Featured
Local
TypeScript
Audiense Insights MCP Server

Audiense Insights MCP Server

Enables interaction with Audiense Insights accounts via the Model Context Protocol, facilitating the extraction and analysis of marketing insights and audience data including demographics, behavior, and influencer engagement.

Official
Featured
Local
TypeScript
VeyraX MCP

VeyraX MCP

Single MCP tool to connect all your favorite tools: Gmail, Calendar and 40 more.

Official
Featured
Local
graphlit-mcp-server

graphlit-mcp-server

The Model Context Protocol (MCP) Server enables integration between MCP clients and the Graphlit service. Ingest anything from Slack to Gmail to podcast feeds, in addition to web crawling, into a Graphlit project - and then retrieve relevant contents from the MCP client.

Official
Featured
TypeScript
Kagi MCP Server

Kagi MCP Server

An MCP server that integrates Kagi search capabilities with Claude AI, enabling Claude to perform real-time web searches when answering questions that require up-to-date information.

Official
Featured
Python
E2B

E2B

Using MCP to run code via e2b.

Official
Featured
Neon Database

Neon Database

MCP server for interacting with Neon Management API and databases

Official
Featured
Exa Search

Exa Search

A Model Context Protocol (MCP) server lets AI assistants like Claude use the Exa AI Search API for web searches. This setup allows AI models to get real-time web information in a safe and controlled way.

Official
Featured
Qdrant Server

Qdrant Server

This repository is an example of how to create a MCP server for Qdrant, a vector search engine.

Official
Featured