Ida-Google
Click on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@Ida-Googleschedule a meeting with the team for next Tuesday at 3 PM"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
Ida-Google
Ein eigenständiger MCP-Server (Model Context Protocol) für Google-Dienste -- getrennt von Ida-Untis, Ida-Telegram und Ida-Memory, eigenes Repo, eigener Container. Gibt Claude 54 Werkzeuge für Google Tasks, Kontakte, Kalender, Gmail, Docs, Sheets, Slides, Chat und Meet, mit mehr Diensten in kommenden Ausbaustufen (siehe Fahrplan unten). Ziel ist, ueber die Zeit moeglichst alles abzudecken, was die jeweilige Google-API hergibt -- nicht nur eine kleine Grundauswahl.
Bewusst als ein einziger, einheitlicher Connector gebaut -- auch dort, wo
es (z.B. für Kalender, Gmail-Lesen, Drive) schon offizielle claude.ai-
Connectors gibt. Eine echte Ergänzung dazu: google_mail_senden kann
tatsächlich senden, nicht nur lesen/entwerfen wie der offizielle
Gmail-Connector.
Architektur: zwei Ports, zwei Vertrauenszonen
Google-Zugriff läuft über OAuth: einmalig im Browser bei Google anmelden und zustimmen, danach läuft alles automatisiert über einen gespeicherten Refresh-Token. Diese zwei Dinge -- der einmalige Browser-Anmelde-Flow und die laufenden, automatisierten API-Aufrufe -- laufen bewusst auf zwei getrennten Ports/Hostnamen mit unterschiedlichem Schutz:
Browser (nur du) Claude / eine Routine
| |
v v
auth.deine-domain.de google.deine-domain.de
(Cloudflare Zero Trust Access) (normaler Cloudflare Tunnel)
| |
v v
127.0.0.1:4570 (Auth-Port) 127.0.0.1:4569 (MCP-Port)
/authorize, /oauth/callback /mcp (Bearer-Token)
| |
+----------------+--------------------+
v
Docker-Container "ida-google-mcp"
|
v
/data/google_token.json (Docker-Volume)Auth-Port (4570): nur für den (seltenen) Google-Anmelde-Flow. Diese Hostname-Route sollte zusätzlich hinter Cloudflare Zero Trust Access liegen (eigene Cloudflare-Funktion, verlangt einen Login -- z.B. per E-Mail-Code -- bevor die Anfrage überhaupt beim Server ankommt), damit wirklich nur du diesen Flow je starten kannst. Ein zweites, kostenloses Sicherheitsnetz (
AUTH_TOKENals?token=) ist zusätzlich eingebaut, ersetzt Zero Trust Access aber nicht.MCP-Port (4569): die eigentlichen Google-Werkzeuge, ganz normal per Bearer-Token abgesichert wie bei den anderen drei Ida-*-Projekten -- läuft dauerhaft, keine Browser-Interaktion nötig.
Beide Ports laufen im selben Container/Prozess (app/main.py) und teilen
sich denselben gespeicherten Refresh-Token.
Related MCP server: gogcli-mcp
Voraussetzungen
Docker + Docker Compose auf dem Server
Ein bereits eingerichteter und verbundener Cloudflare Tunnel
Cloudflare Zero Trust (kostenlos bis 50 Nutzer) für den Auth-Port
Ein Google-Cloud-Projekt mit OAuth-Client (Anleitung in
.env.example)
1. Google Cloud Console einrichten
Ausführliche Schritt-für-Schritt-Anleitung steht direkt in .env.example
(OAuth-Zustimmungsbildschirm, benötigte APIs aktivieren, OAuth-Client
anlegen). Kurzfassung: neues Projekt -> Zustimmungsbildschirm (extern, dich
selbst als Testnutzer) -> benötigte APIs aktivieren (aktuell: Google Tasks
API, People API, Google Calendar API, Gmail API, Google Keep
API, Google Docs API, Google Sheets API, Google Slides API,
Google Chat API, Google Meet API) -> OAuth-Client vom Typ
"Webanwendung" mit der Redirect-URI https://auth.deine-domain.de/oauth/callback.
Nach jedem Update, das neue Google-Dienste oder zusätzliche Berechtigungen
für bestehende Dienste hinzufügt: einmal erneut /authorize?token=...
aufrufen, damit auch den neuen/erweiterten Scopes zugestimmt wird -- sonst
melden betroffene Tools "insufficient authentication scopes". Bereits
funktionierende Tools sind davon nicht betroffen.
2. Einrichten, bauen, starten
git clone https://github.com/<dein-user>/Ida-Google.git
cd Ida-Google
cp .env.example .env.env ausfüllen (siehe Kommentare darin). Image bauen lassen: Bei jedem
Push auf main baut .github/workflows/docker-publish.yml automatisch nach
ghcr.io/<dein-user>/ida-google:latest. Einmalig auf öffentlich stellen
(GitHub -> Profil -> Packages -> ida-google -> Package settings ->
Change visibility -> Public).
docker compose pull
docker compose up -d
docker compose logs -f3. An den bestehenden Cloudflare Tunnel anbinden -- zwei Hostnamen
ingress:
- hostname: google.deine-domain.de
service: http://localhost:4569
- hostname: auth.deine-domain.de
service: http://localhost:4570
- service: http_status:404Danach in Cloudflare Zero Trust (dash.teams.cloudflare.com) -> Access ->
Applications -> "Add an application" -> Self-hosted -> Domain
auth.deine-domain.de -> eine Policy, die nur deine eigene E-Mail-Adresse
zulässt. Ab dann verlangt Cloudflare selbst einen Login, bevor /authorize
überhaupt erreichbar ist. google.deine-domain.de (der MCP-Port) braucht
diese Policy nicht -- der ist ganz normal per Bearer-Token abgesichert und
soll ja von Claude/Routinen erreichbar bleiben.
4. Einmalig mit Google verbinden
Im Browser aufrufen (löst den Login bei Cloudflare Access aus, falls konfiguriert):
https://auth.deine-domain.de/authorize?token=<AUTH_TOKEN>Google-Consent-Screen bestätigen ("Nicht verifiziert" ist normal für eine private App wie diese). Danach zeigt die Seite "Erfolgreich mit Google verbunden".
5. Als claude.ai Connector hinzufügen
claude.ai -> Einstellungen -> Connectors -> Add custom connector -> als URL:
https://google.deine-domain.de/mcp?token=<MCP_AUTH_TOKEN>Verfügbare MCP-Tools (55)
Vollständige Parameter/Docstrings direkt im Code (app/services/*.py) --
hier nur eine Übersicht nach Dienst gruppiert.
Dienst | Tools | Kann u.a. |
Verbindung |
| Prüft, ob überhaupt mit Google verbunden |
Tasks | 5 | Listen/Aufgaben lesen, anlegen, erledigt markieren, löschen |
Kontakte | 5 | Lesen, anlegen, bearbeiten, löschen |
Kalender | 4 | Termine lesen/anlegen/ändern/löschen, Teilnehmer einladen (echte Google-Einladungsmail) |
Gmail | 14 | Suchen, lesen, senden mit CC/BCC/Anhängen/wählbarem Absender, im Thread antworten, Anhänge herunterladen (Bilder als echtes Bild), Labels lesen/erstellen/anwenden/entfernen, Entwürfe anlegen/lesen/senden, in den Papierkorb verschieben, konfigurierte "Senden als"-Adressen auflisten |
Docs | 7 | Anlegen, lesen, Text anhängen/an Position einfügen/löschen, Suchen & Ersetzen, Fett/Kursiv/Unterstrichen |
Sheets | 8 | Anlegen, Bereich lesen/schreiben/anhängen/leeren, Tabellenblatt anlegen/umbenennen/löschen |
Slides | 5 | Anlegen, lesen, Titel+Text-Folie hinzufügen/löschen/verschieben |
Chat | 4 | Räume auflisten, Raum erstellen, Nachricht senden, Nachrichten lesen |
Meet | 2 | Meeting-Raum anlegen (Beitritts-Link), Details abrufen |
Google-Fehler (fehlender Scope, abgelaufene Berechtigung, API nicht aktiviert, ...) kommen 1:1 mit Googles eigener Fehlermeldung zurück, statt geraten zu werden.
Mail über eine andere Absenderadresse schicken
Wer bei Gmail mehrere "Senden als"-Adressen eingerichtet hat (Gmail ->
Einstellungen -> Konten -> "Senden als"), kann den optionalen Parameter
von bei google_mail_senden/google_mail_antworten/
google_mail_entwurf_erstellen nutzen, um eine dieser Adressen statt der
Hauptadresse zu verwenden. google_mail_absender_liste zeigt, welche
Adressen konfiguriert und verifiziert sind -- nur verifizierte Adressen
funktionieren tatsächlich, alles andere ignoriert Gmail und nimmt
automatisch die Hauptadresse. Neue "Senden als"-Adressen selbst einrichten
geht weiterhin nur direkt in den Gmail-Einstellungen, nicht über dieses Tool.
Bestätigungspflicht beim Löschen
Jedes Tool, das Daten unwiderruflich entfernt (Name endet auf
_loeschen, dazu google_mail_papierkorb und google_sheet_bereich_leeren),
hat einen Parameter bestaetigt (Standard False). Ohne bestaetigt=True
passiert technisch nichts -- das Tool gibt nur einen Hinweis zurück, was
gelöscht würde. Claude ist angewiesen, immer erst im Chat nachzufragen und
dann mit bestaetigt=True zu wiederholen. Das ist codeseitig erzwungen,
nicht nur eine Anweisung, der die KI folgen könnte oder auch nicht.
Ausnahme: google_termin_loeschen (Kalender-Termine). Der hat gar
keinen bestaetigt-Parameter und löscht sofort -- ausdrücklich so
gewünscht, damit Terminänderungen schnell gehen.
Mail-/Chat-Versand (google_mail_senden, google_mail_antworten,
google_mail_entwurf_senden, google_chat_nachricht_senden) hat keinen
codeseitigen Schutz (das würde bedeuten, doppelt aufrufen zu müssen, nur um
einmal zu senden) -- dafür weisen die Server-instructions Claude an, den
Inhalt vor dem Senden im Chat zu bestätigen.
Fahrplan
Ziel ist moeglichst vollstaendige Abdeckung jeder angebundenen API, nicht nur eine Grundauswahl -- wird schrittweise erweitert, mit jeweils eigener Testrunde. Bekannte, noch offene Lücken:
Gmail: Filter/Regeln verwalten, mehrere Anhänge pro Downloadaufruf.
Docs: Bilder, Tabellen, Kommentare/Vorschläge, Aufzählungslisten.
Sheets: Zellformatierung (Farben/Schrift), Diagramme, Sortieren/Filtern, Pivot-Tabellen.
Slides: freies Layout (Bilder, Positionierung, eigene Designs statt nur Titel+Text).
Kontakte: Kontaktgruppen, Volltextsuche über
searchContacts.Meet: Teilnehmerlisten, Aufzeichnungen/Transkripte (
conferenceRecords).Neue Dienste: YouTube, Apps Script.
Google Keep ist deaktiviert (Code liegt in app/services/notes.py,
aber nicht in _SERVICE_MODULES eingehängt): Googles eigene Doku
beschreibt die Keep API als für Unternehmensumgebungen gedacht, und ein
echter Authorize-Versuch mit einem privaten Google-Konto wurde von Google
mit invalid_scope abgelehnt. Kommt zurück, falls sich das mal ändert
(z.B. mit einem Workspace-Konto).
Danach die weiteren eingeschränkten Dienste, wenn das jeweils zutrifft: Google Ads (braucht einen von Google genehmigten Developer-Token), Workspace Admin SDK (braucht ein bezahltes Workspace-Konto mit Admin-Rechten), Classroom (braucht echte Classroom-Nutzung), Google Photos (seit einer Google-Richtlinienänderung eingeschränkter Lesezugriff für nicht verifizierte Apps).
Ob Chat und Meet mit einem normalen privaten Google-Konto (statt einem bezahlten Workspace-Konto) vollständig funktionieren, ließ sich nicht vorab zweifelsfrei klären -- das zeigt sich beim ersten echten Aufruf über Googles eigene Fehlermeldung, statt hier geraten zu werden.
Lokal testen ohne Cloudflare
docker compose up -d
curl "http://127.0.0.1:4570/healthz"
curl -H "Authorization: Bearer $MCP_AUTH_TOKEN" http://127.0.0.1:4569/healthzTroubleshooting
Container startet nicht:
docker compose logs-- meist fehlt eine Pflichtvariable in.env(GOOGLE_CLIENT_ID/_SECRET/GOOGLE_REDIRECT_URI).Tool meldet "Noch nicht mit Google verbunden": Schritt 4 (einmaliger Anmelde-Flow) noch nicht gemacht, oder der Container wurde ohne das
/data-Volume neu gestartet (docker compose down -vlöscht auch den gespeicherten Token -- ohne-vstarten)."Google hat keinen Refresh-Token geliefert": Google gibt nur beim ersten Zustimmen (oder mit
prompt=consent, was hier immer gesetzt ist) einen Refresh-Token zurück. Falls es trotzdem passiert: unter myaccount.google.com/permissions den Zugriff dieser App entfernen und/authorizeerneut aufrufen.Google-API-Fehler "insufficient authentication scopes" o.ä.: Nach einem Update, das neue/erweiterte Berechtigungen braucht, muss
/authorizeerneut aufgerufen werden, damit die neuen Scopes mit zugestimmt werden.Google-API-Fehler "invalid_scope" beim Aufrufen von
/authorize: einer der angeforderten Scopes lässt sich für diesen Google-Account/dieses Cloud-Projekt nicht vergeben (z.B. Keep, siehe Fahrplan) -- betrifft dann die komplette Anmeldung, da alle Scopes zusammen angefragt werden. Inapp/server.pydas entsprechende Modul aus_SERVICE_MODULESentfernen.Lösch-Tool antwortet nur mit einem Hinweis, löscht aber nichts: so gewollt -- erst mit
bestaetigt=Trueerneut aufrufen (siehe Bestätigungspflicht beim Löschen).Claude/eine KI bekommt 401 auf dem MCP-Port: Token in Client-Konfiguration und
.envvergleichen.
This server cannot be installed
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
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/L8teNever/Ida-Google'
If you have feedback or need assistance with the MCP directory API, please join our Discord server