gmail-mcp
gmail-mcp
Gmail-Connector für MCP-Clients. Ein Server, viele Gmail-Konten über OAuth-Refresh-Tokens. Sendet echtes MIME (Dateipfad-Anhänge, Live-Signaturen, Nachweis nach dem Versand). Liest und organisiert E-Mails, ohne Megabytes an Base64 in das Modell zu kippen.
Kein Wrapper um das von Google gehostete Gmail-MCP – der Gmail-Connector erstellt RFC822 auf dem Host und spricht direkt mit gmail.googleapis.com.
Features
Multi-Konto-OAuth – Postfächer mit
accounts_addhinzufügen; Tokens werden lokal gespeichert (Modus 0600)Senden / Antworten / Weiterleiten – serverseitig erstelltes MIME, nur Dateipfade aus dem Outbox-Ordner, 25-MB-Grenze, Idempotenzschlüssel, Nachweis bei Erfolg
Lesen / Organisieren – Suche (Threads + Paginierung), Thread/Nachricht abrufen, Labels, Archivieren/Papierkorb, Entwürfe
Anhänge – aus
~/Outboxsenden (konfigurierbar); nach~/Inboxherunterladen (konfigurierbar)Doppelter Transport – stdio für lokale Umgebungen; Streamable HTTP hinter einem Gateway für entfernte Clients
Related MCP server: Gmail MCP Server
Anforderungen
Python 3.12+ (Entwicklung nutzt 3.13 via pyenv)
Google Cloud Desktop-OAuth-Client (Client-ID + Secret)
macOS für die enthaltenen LaunchAgent-Skripte (HTTP-Dienst); Linux funktioniert für manuelle Ausführungen
Schnellstart
git clone https://github.com/iXanadu/gmcp.git
cd gmcp
# Python 3.12+ (example with pyenv)
pyenv virtualenv 3.13 gmail-mcp-3.13
pyenv local gmail-mcp-3.13
pip install -e '.[dev]'
# Config (see examples/)
cp examples/.env.example .env
cp examples/.keys.example .keys
chmod 600 .keys
# Sanity check
gmail-doctorTrage deine Google-OAuth-Zugangsdaten und ein HTTP-Bearer-Token in .keys ein, bevor du den HTTP-Transport ausführst.
Google Cloud Console (einmalig)
Du benötigst einen Desktop-OAuth-Client – keinen Dienstaccount und keine domänenweite Delegierung.
Schritt | Wo | Was |
1 | APIs & Dienste → Bibliothek | Gmail API aktivieren |
2 | OAuth-Zustimmungsbildschirm | Extern ist für den persönlichen Gebrauch in Ordnung. Füge dein Google-Konto als Testnutzer hinzu, solange sich die App im Testmodus befindet. |
3 | Anmeldedaten → Erstellen | OAuth-Client-ID → Desktop-App |
4 | Client-Einstellungen | Füge die Redirect-URI |
5 |
| Füge Client-ID und Client-Secret als |
Beim ersten accounts_add fragt Google nach der Zustimmung. Die Scopes sind im Server festgelegt: E-Mails lesen/senden/organisieren sowie die Send-as-Signatur lesen (nicht zwischengespeichert).
Kein Benutzername/Passwort, kein App-Passwort und kein eingefügtes Refresh-Token im Chat.
Postfach verbinden (accounts_add)
accounts_add öffnet einen Browser für die Google-Zustimmung. Es läuft nur auf dem stdio-Transport (gmail-mcp), nicht über HTTP.
gmail-mcp # stdio — required for accounts_add and accounts_removeRufe accounts_add von deinem MCP-Client auf. Wenn die Zustimmung abgeschlossen ist, speichert der Server die von Google zurückgegebene Gmail-Adresse; diese Adresse ist der account-Schlüssel für alle anderen Tools.
Tokens landen in ~/.config/gmail-mcp/tokens/ (Modus 0600). Kopiere dieses Verzeichnis bei Bedarf auf jeden anderen Host, auf dem derselbe Server läuft.
Headless-Server (kein lokaler Browser)
Der OAuth-Callback ist http://127.0.0.1:8767/oauth/callback. Eine Maschine ohne Display benötigt für die Google-Anmeldeseite trotzdem irgendwo einen Browser. Zwei gängige Muster:
A – SSH-Portweiterleitung (Zustimmung auf deinem Laptop)
Starte auf dem Headless-Host stdio MCP / accounts_add. Von deinem Laptop aus:
ssh -L 8767:127.0.0.1:8767 user@headless-hostÖffne die vom Server ausgegebene Autorisierungs-URL (oder löse accounts_add über deinen MCP-Client aus, während der Tunnel aktiv ist). Der Callback erreicht über den Tunnel 127.0.0.1:8767 auf dem Headless-Host.
Wait, I just typed "127.0.0.1:8767" as "127.0.0.1:8767" but in the sentence above I accidentally wrote "127.0.0.1:8767" with a typo "8767"? Let's ensure.
Original: 127.0.0.1:8767. My sentence: "Der Callback erreicht über den Tunnel 127.0.0.1:8767 auf dem Headless-Host." Need correct. In my draft I wrote "127.0.0.1:8767" but I need ensure not "8767" vs "8767". The callback port is 8767. Yes original http://127.0.0.1:8767/oauth/callback. Actually original is http://127.0.0.1:8767/oauth/callback. Port is 8767 (four digits: 8-7-6-7? Wait original: http://127.0.0.1:8767/oauth/callback. Let's check source: "Add redirect URI http://127.0.0.1:8767/oauth/callback" Yes port is 8767 (eight-seven-six-seven? No, 8767: 8 7 6 7). Wait "8767" digits: 8,7,6,7. Yes. My text "8767" is correct if I write 8767. In previous line I wrote "8767" but accidentally "8767"? I'll be careful.
Also "Headless-Host" correct. In my line above I wrote "Auf dem Headless-Host." Good.
Let's restart final from that point to avoid typos.
Continue:
ssh -L 8767:127.0.0.1:8767 user@headless-hostÖffne die vom Server ausgegebene Autorisierungs-URL (oder löse accounts_add über deinen MCP-Client aus, während der Tunnel aktiv ist). Der Callback erreicht über den Tunnel 127.0.0.1:8767 auf dem Headless-Host.
B – Zustimmung auf einem Desktop, Tokens kopieren
Führe accounts_add einmal auf einem Mac oder PC mit Browser und derselben .env / .keys aus. Kopiere nach der Zustimmung ~/.config/gmail-mcp/tokens/ auf den Produktionshost (gleiche Pfade, Modus 0600). Keine erneute Zustimmung erforderlich, es sei denn, Google widerruft das Refresh-Token.
Deployment-Layout
Typische Produktionsaufteilung:
┌─────────────────────┐ ┌──────────────────────────┐
│ Operator machine │ │ MCP server (Linux/macOS) │
│ (browser for OAuth)│ │ gmail-mcp-http │
│ accounts_add │ copy │ 127.0.0.1:8879 │
│ token files ───────┼────────►│ + .env / .keys │
└─────────────────────┘ tokens └───────────┬──────────────┘
│
Cloudflare / gateway / TLS
│
Hand / remote MCP clientSetze den Laptop des Betreibers nicht für MCP HTTP dem öffentlichen Internet aus. HTTP bindet auf dem Server an Loopback (
127.0.0.1:8879); ein Reverse-Proxy beendet TLS und leitet an diesen Port weiter.OAuth findet dort statt, wo ein Browser existiert (Betreibermaschine oder SSH-Tunnel). Die Token-JSON-Dateien werden auf den Server kopiert.
Das Gateway zeigt auf den Server-Hostnamen, den du kontrollierst (z. B.
mcp.example.com), nicht auf die OAuth-Workstation.Generiere ein langes zufälliges
GMAIL_MCP_HTTP_BEARER_TOKEN; das Gateway präsentiert es alsAuthorization: Bearer ….
Nach dem Deployment: gmail-doctor, ./scripts/start.sh (macOS LaunchAgent) oder deine eigene systemd-Unit, dann accounts_list über HTTP, um die Tokens zu bestätigen.
Konfiguration
Nicht sensible Einstellungen stehen in .env; Geheimnisse in .keys (committe niemals eine der beiden Dateien, wenn sie befüllt sind). Siehe examples/.env.example und examples/.keys.example.
Variable | Datei | Zweck |
|
| Bezeichnung für Logs/Status |
|
| Log-Level des Servers |
|
| HTTP-Bind-Adresse (Standard |
|
| HTTP-Port (Standard |
|
| Wurzelverzeichnis für Anhangspfade beim Senden |
|
| Wurzelverzeichnis für |
|
| Verzeichnis für die Speicherung von OAuth-Tokens |
|
| OAuth-Loopback-Callback |
|
| Google-OAuth-Client-ID |
|
| Google-OAuth-Client-Secret |
|
| Bearer-Token für den HTTP-Transport |
Führe gmail-doctor aus, nachdem du die Konfiguration geändert hast.
Transporte
stdio (lokal)
gmail-mcpRegistriert alle Tools, einschließlich accounts_add und accounts_remove.
Binde es in die MCP-Konfiguration von Cursor / Claude Code ein, mit der gmail-mcp-Binärdatei aus der venv und cwd auf das Repository gesetzt (damit .env / .keys geladen werden).
Streamable HTTP (Gateway)
gmail-mcp-httpBindet standardmäßig an 127.0.0.1:8879. Erfordert Authorization: Bearer <GMAIL_MCP_HTTP_BEARER_TOKEN>; Anfragen ohne gültiges Token erhalten 401.
Manuelle Zulassungsliste (nur HTTP): Lese-/Organisations-Tools plus send, reply, forward, draft_create, draft_send, accounts_list und gmail_status. Die Kontoverwaltung bleibt auf stdio.
macOS-Dienst (Benutzer-LaunchAgent)
./scripts/start.sh # install plist → ~/Library/LaunchAgents, load
./scripts/stop.sh
./scripts/restart.shPasse die Pfade in launchd/com.gmail-mcp.plist an, wenn sich dein Checkout oder pyenv-Name unterscheidet. Logs liegen unter logs/.
Führe gmail-mcp-http unter Linux mit systemd und demselben Loopback-Bind aus – siehe Deployment-Layout oben.
Tools
Tool | Hinweise |
| Versions- und Konfigurationsübersicht |
| Verbundene Adressen und Token-Status |
| OAuth-Zustimmung (nur stdio) |
| Token widerrufen und verwerfen (nur stdio) |
| Gmail-Abfrage; gibt Threads zurück |
|
|
| Schreibt unter das Download-Wurzelverzeichnis |
| Nur Pfade; lehnt |
| Gleiche Regeln für Anhänge/Nachweis wie beim Senden |
| Benutzer- und Systemlabels |
| Durch Kommas getrennte Namen oder IDs |
| Auf Thread-Ebene |
Jedes Tool außer accounts_list, accounts_add und gmail_status erfordert ein account-Argument (die Gmail-Adresse).
Senderegeln (Zusammenfassung)
Anhänge:
{ "path": "/absolute/or/under/outbox/file.pdf" }– kein Inline-Base64Live-Gmail-Signatur wird beim Senden angehängt (nicht zwischengespeichert)
Optionaler
footernach der SignaturGibt einen Nachweis zurück: Größen, hrefs,
okfalse → Tool-Fehler (z. B. abgeschnittener Anhang odergoogle.com/url-Umschreibung)
Tests
pytest tests/ -vNutzt simuliertes Gmail-HTTP; kein echtes Postfach erforderlich.
Spezifikation
Produktanforderungen: docs/specs/gmail-mcp-spec.md
Lizenz
Apache-2.0
This server cannot be installed
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Connectors
Read, search, send, organize, draft and schedule email across your inboxes from any MCP client.
Email infrastructure for AI agents — send, receive, search, and reply to email over MCP.
A MCP server for Gmail that lets you search, read, and draft emails and replies.
Email inboxes for AI agents: send, receive, reply, search, and manage threaded email over MCP.
Related MCP Servers
- AlicenseNot gradedqualityCmaintenanceEnables interaction with Gmail through MCP-compatible clients to list, read, search, and send emails. It supports advanced features such as managing labels, handling threaded replies, and utilizing Gmail's native search syntax.492MIT
- AlicenseAqualityDmaintenanceProvides access to Gmail functionalities including listing unread emails, searching via query syntax, and managing messages through archiving or marking as read. It enables MCP clients to securely interact with and organize email data using the Gmail API.5MIT
- AlicenseNot gradedqualityDmaintenanceEnables interaction with Gmail through the MCP protocol, supporting sending, reading, searching, replying, forwarding, managing drafts and labels, and saving attachments.153MIT
- FlicenseNot gradedqualityCmaintenanceEnables interacting with multiple Gmail accounts through a single MCP server, supporting search, labels, drafts, and thread management with per-account OAuth.
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/iXanadu/pigeon-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server