ga4-mcp-worker
ga4-mcp-worker
Ein schreibgeschützter Google Analytics 4 MCP-Server, der auf Cloudflare Workers läuft, damit Teammitglieder GA4 direkt von Claude abfragen können – ohne dass lokal etwas installiert sein muss: kein Python, kein gcloud, keine ADC-Datei und in dieser Version auch kein gemeinsames Passwort mehr. Das Hinzufügen bedeutet, „Connect“ zu klicken, sich mit dem eigenen Google-Konto anzumelden und GA4-Fragen in der eigenen Identität zu beantworten.
Er übernimmt den Tool-Umfang des offiziellen googleanalytics/google-analytics-mcp-Stdio-Servers, ruft die Google-Analytics-REST-APIs aber direkt auf, weil die Google-Client-Bibliotheken nicht in der Workers-Laufzeit laufen.
Zuerst lesen: docs/IMPLEMENTATION-NOTES.md § Was getestet wurde und was nicht. Die Live-End-to-End-Verifikation ist drin, aber ein paar Oberflächen (die v1alpha-Endpunkte, Pagination) sind weiterhin nur über Fixtures abgedeckt.
Auth-Modus: OAuth pro Benutzer
Jedes Teammitglied meldet sich mit dem eigenen Google-Konto an. Es gibt kein geteiltes Geheimnis und keine einzige Google-Zugangsdauer, auf die sich alle verlassen – siehe PRODUCTION.md § 1 und docs/PRODUCTION-PART2.md § 8 für das vollständige Design und den Unterschied zum ausgemusterten Shared-Secret-Modus. Die Anmeldung ist auf Google-Konten mit @zuddl.com-Domäne beschränkt (ALLOWED_EMAIL_DOMAIN in wrangler.toml).
GOOGLE_CLIENT_ID und GOOGLE_CLIENT_SECRET werden weiterhin benötigt – Google verlangt, dass jede App, die Benutzerdaten anfordert, registriert ist, und genau diese beiden Werte sind die Registrierung. Sie werden einmal beim Deployment gesetzt. Was entfällt, sind das manuell geprägte Refresh-Token und das Passwort, das Teammitglieder früher eingaben.
Dokumentation
Datei | Inhalt | |
SETUP-GUIDE.md (+ Teil 2) | Erstes Deployment, von Grund auf erklärt – setzt kein OAuth-Vorwissen voraus. Google-App erstellen, deployen, testen, Claude verbinden. Hier starten. | |
PRODUCTION.md (+ Teil 2) | Das Identitätsmodell, Monitoring, GA4-Quotas, Schlüsselrotation, lokale Entwicklung, Runbook, Sicherheits-Checkliste, OAuth-Interna. Vor einem größeren Rollout lesen. | |
Stolperfallen, die diese Implementierung richtig löst, was getestet wurde und was nicht, sowie laufende Kosten. | ||
| The MCP-Server: Tools, Fetch-Helfer, Normaliser, Router. Ausführlich kommentiert. | |
| Der „Mit Google anmelden“-Handler – | |
| Worker-Konfiguration. Hinweis auf | – siehe Stolperfallen, |
| Vorlage für die lokale Entwicklung. Nach |
Related MCP server: GA4 MCP Server
Unsere GA4-Properties
Property-ID | Name | Measurement-ID | Status |
| New zuddl website GA4 property |
| Canonical – diese verwenden, sofern nichts anderes angegeben ist. |
| legacy | – | Legacy. Nur für historischideule; nicht für aktuelle Berichte verwenden. |
| legacy | – | Legacy. Nur für historische Zwecke; nicht für aktuelle Berichte. |
Der Server ist eigenschaftsagnostischeigentums-agnostisch– jedes Tool nimmt property_id entgegen und akzeptiert 314138239 oder "properties/314138239". Wenn nichts angegeben ist, verwendet er DEFAULT_PROPERTY_ID in wrangler.toml, die auf der kanonischen Property gesetzt ist – so müssen sich Teammitglieder keine Nummer werken. Mit get_account_summaries lässt sich alles auflisten, was die Zugangsdaten tatsächlich lesen können.
Tools (9)
Tool | Methode + Endpunkt | Wofür es da ist |
| POST | The Arbeitspferd. Historische Berichte. Vollständiger Parametersatz. |
| POST | Letzen ~30 Minuten. Eherpromises Schema. |
| POST | Sortierte Schrittfolgen und Abgang. |
| POST | Conversions, Werbeausgaben, ROAS, Attributionsmodell. Angenehme Feldliste. |
| GET | Eigene Felder mit dem angebbaren |
| GET | Alles, was die Zugangsdaten lesen können. Keine Argumente. |
| GET | Zeitzone, Währung, Service-Ebene. Zeitzone erklärt Abweichungen bei Datumsdaten. |
| GET | Weitere Notizen, die Spitzen erklärt. |
| ||
| GET | Verknüpfte Ads-Konten. |
run_report akzeptiert den vollständigen offiziellen Parametersatz: property_id, date_ranges (eine Liste, damit periodenvergleiche in einem Request klappen), dimensions, metrics, dimension_filter, metric_filter, order_bys, limit, offset, currency_code, return_property_quota. run_realtime_report übernimmt die gleiche Form minus date_ranges und currency_code.
Tool-Beschreibungen sind absichtlich lang – sie enthalten konkrete Beispiele für jede Filterform und sind die einzige Stelle, an der das Modell lernt, das Anfrageformat. Behandelt Änderungen an ihr als Verhaltensänderungen.
Endpoints
Endpunkt | Auth | Ziel |
| OAuth-Bearer-Token | Die MCP-Verbindung (Streamable HTTP). Es gibt kein |
| Keine | OAuth-Endpunkte, implementiert von |
| Keine | Google leitet nach der Anmeldung hierher. Nicht zum Offnen im Browser geeignet. |
| Keine | Status-Prüfung. |
| Keine | Textbasierter Statushinweis, nennt den aktuellen Auth-Modus. |
Alles andere liefert 404.
/healthbesagt im OAuth-Modus weniger. Es gibt keine einzige geteilte Anmeldedatei, die getestet werden kann. Ein200bestätigt nur, dass die App-Registrierung konfiguriert und der Grant-Speicher (OAUTH_KV) erreichbar ist – nicht, dass eine bestimmte Person noch angemeldet ist. Ein einzelner Benutzer-Grant kann abgelaufen oder entzogen sein, während/health„grün“ anzeigt. Das liegt in der Natur der Benutzer-OAuth-Verfahren und ist kein Defekt.
The Worker protokolliert pro MCP-Request, Phase eines abgelehnten Auth-Versuchs, Tool-Fehler, und pro Health-Fehler je eine JSON-Zeile, plus OAuth-spezifische Ereignisse (oauth_authorize_redirect, oauth_authorized, oauth_domain_rejected etc.). Kein Security-Material wird jemals protokolliert. Alle Google-API-Aufrufe senden einen eigenen User-Agent (ga4-mcp-worker/1.0.0 (+cloudflare-workers)) – so Quota-Nutzung eindeutig zugeordnet werden kann.
Read-only-Enforcement:
Vier unabhängige Ebenen, pro Datei vorhanden:
OAuth-Scope – jedes Token, egal aus dem alten gemeinsamen oder einem eigenen, wird ausschließlich mit
https://www.googleapis.com/auth/analytics.readonlyangefordert und sonst nichts (plusopenid/emailfür die Identität im OAuth-Modus – siehesrc/google-oauth.ts, gewähren jedoch keinen Einblick in). Google lehnt Schreiboperationen zusätzlich serverseitig sowieso ab. Dies ist die wirkliche Garantie. SETUP-GUIDE.md erklärt, wie man es mittokeninfotestet.Zulassungsliste Endpunkte – verankerte Regexes, die in den beiden Anker-Helfern vor jedem Netzaufruf geprüft werden. Ein späteres Hinzufügen eines Schreibendpunkts würde eher eine Exception werfen.
Keine schreibenden Aktionen – keine
PATCH,PUToderDELETEim gesamten Codebase. Es gibt genau drei Stellen, wofetchaufgerufen wird: das Token-Minting (POST),gaGet(GET) undgaPost(POST). gibt.
:runReport, :runRealtimeReport und :runFunnelReport sind per HTTP POST und dienen dort als Abfragen – der Body trägt die Unterlagen- oder Definition, weil diese für eine Query–Z zeile zu groß ist. In GA-4 wird nichts erzeugt oder verändert.
Kurzkommandos
npm installnpm run typecheck && npm run dry-runnpm run deploynpm run tailcurl -s https://ga4-mcp-worker.YOUR-SUBDOMAIN.workers.dev/healthDie fünf Schritte, die beiden Auth-Modi brauchen (Client-seitig und serverseitig):
npx wrangler secret put GOOGLE_CLIENT_IDnpx wrangler secret put GOOGLE_CLIENT_SECRETVerbindung zu Claude als Client – ohne Header, weil Anmeldung über den Browser läuft:
claude mcp add --transport http --scope user ga4 https://ga4-mcp-worker.YOUR-SUBDOMAIN.workers.dev/mcpDann in einer interaktiven claude-Sitzungen: /mcp ausführen, Eintrag ga4 auswählen und mit Google anmelden.
Weiteres
Fallstricke, Testabdeckung und laufende Kosten: docs/IMPLEMENTATION-NOTES.md
Erster Deploy-Durchlauf: SETUP-GUIDE.md → Teil 2
Hardening, Monitoring und das OAuth-Runbook: PRODUCTION.md → Teil 2
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.
Related MCP Servers
- AlicenseAqualityBmaintenanceConnects Google Analytics 4 data to Claude, Cursor and other MCP clients, enabling natural language queries of website traffic, user behavior, and analytics data with access to 200+ GA4 dimensions and metrics.10235MIT
- AlicenseAqualityBmaintenanceConnects MCP clients like Claude Desktop to Google Analytics 4 Data API, enabling natural language queries for reports, top pages, traffic sources, conversions, realtime users, and period comparisons.7MIT
- AlicenseNot gradedqualityDmaintenanceEnables querying Google Analytics 4 data using natural language through MCP clients like Claude and Cursor, supporting 200+ dimensions and metrics for traffic, user behavior, and e-commerce analysis.MIT
- FlicenseNot gradedqualityCmaintenanceEnables MCP clients to read Google Analytics 4 data, deployed as a Cloudflare Worker with service account authentication.1
Related MCP Connectors
WHOOP recovery, strain, sleep and workouts in Claude via official WHOOP OAuth. Free, open source.
GA4 conversion analyst inside Claude — funnel drops, traffic anomalies, device gaps, with numbers.
Garmin data in Claude & ChatGPT via the Garmin Health API. OAuth sign-in, no password sharing.
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/prashantdasari-tech/ga4-mcp-worker'
If you have feedback or need assistance with the MCP directory API, please join our Discord server