GA4 Analytics MCP V2
GA4 Analytics MCP V2
Multi-Operator-Connector für Claude Custom Connectors, gehostet auf Google Cloud Run.
Dies ist Version 2. Es handelt sich um eine separate Anwendung zu V1. Verwenden Sie nicht die V1-Secrets, V1-OAuth-Clients, V1-Cloud-Run-Dienste oder V1-Git-Remotes.
Operator A or Operator B
→ same Claude Custom Connector URL
→ https://<v2-host>/mcp
→ MCP OAuth (Claude → V2)
→ Google OAuth (operator's own Google account)
→ operator credentials + active GA4 property in Firestore
→ GA4 Admin / Data APIsEs gibt keinen lokalen stdio-Server und kein Supabase.
Architektur
Zwei OAuth-Ebenen sind miteinander verknüpft:
Claude → V2: MCP OAuth 2.1 (Metadaten der geschützten Ressource, DCR, CIMD, PKCE).
V2 → Google: Die Google-Anmeldung erfolgt innerhalb der MCP-Autorisierung. Der
subist der eindeutige Google-Account-Identifier (sub) im MCP-Zugriffstoken. Die E-Mail-Adresse dient nur zur Anzeige.
Jeder Betreiber hat:
seinen eigenen verschlüsselten Google-Refresh-Token
seine eigene zugreifbare GA4-Property-Liste (aus der Google Admin API)
seine eigene gespeicherte aktive Property
Betreiber A kann weder die Google-Anmeldedaten von Betreiber B verwenden noch eine Property auswählen, auf die Google-Konto A keinen Zugriff hat.
MCP-Werkzeuge
Tool | Zweck |
| Anmeldedaten des Betreibers (e-mail + internes |
| Für dieses Google-Konto sichtbare Properties, mit |
| Aktuell ausgewählte Property |
| Umschalten nach einer Live-Allowlist-Prüfung |
| Dimensionen/Metriken für die aktive oder neu autorisierte Property |
| Historischer GA4-Bericht |
| Letzte ca. 30 Minuten |
Report-Tools verwenden die gespeicherte Aktive Property, wenn propertyId nicht angegeben wird. Eine übergebene propertyId wird nur akzeptiert, wenn das authentifizierte Google-Konto darauf zugreifen kann, und wird dann zur neuen Aktiven Property.
Lokale Entwicklung
cd D:\MCP_Servers\Ga4McpV2
npm install
copy .env.example .env.localFülle .env.local mit V2-Werten aus. Kopiere keine V1-Secrets.
Optionaler Firestore-Emulator:
gcloud emulators firestore start --host-port=localhost:8080Setze FIRESTORE_EMULATOR_HOST=localhost:8080 und FIRESTORE_PROJECT_ID in .env.local.
npm run dev
npm test
npm run buildApp:
http://localhost:3000MCP:
http://localhost:3000/mcpHealth:
http://localhost:3000/healthGoogle-Redirect:
http://localhost:3000/oauth/google/callback
Claude.ai kann localhost nicht erreichen. Stelle V2 auf Cloud Run bereit, bevor du den Custom Connector hinzufügst.
Environment-Variablen
Variable | Required | Zweck |
| Ja | Öffentliche Origin, ohne Slash am Ende |
| Ja | V2-Google-OAuth-Webclient |
| Ja | V2-Google-OAuth-Secret |
| Nein | Standard: |
| Ja | Signiert MCP-JWTs |
| Ja | Signiert und verschlüsselt Pending-Authorize-Cookies |
| Ja | Verschlüsselt Google Refresh-Tokens im Ruhezustand |
| Produktion | Firestore-Projekt |
| Lok/Test | Host des Firestore-Emulators |
| Nein | Optional vorab registrierter Claude-Client-Client |
| Nein | Passends Secret dazu |
V2 verwendet weder GOOGLE_REFRESH_TOKEN noch MCP_AUTH_TOKEN.
Google-Cloud-Konfiguration
Verwende wenn möglich ein neues Google-Cloud-Projekt. Wenn du ein Projekt mit V1 teilst, erstelle trotzdem einen getrennten Cloud-Run-Dienst, ein eigenes Artifact-Registry-Repo, einen eigenen OAuth-Client und eigene Secrets.
Aktiviere:
Cloud Run
Cloud Build
Artifact Registry
Firestore
Secret Manager
Google Analytics Admin API
Google Analytics Data API
Vorgeschlagene Ressourcennamen (Platzhalter – ersetze sie durch dein Projekt):
Cloud-Run-Dienst:
ga4-mcp-v2Artifact Registry:
ga4-mcp-v2Firestore collection:
operators
Das Cloud-Run-Dienstkonto sollte folgende Berechtigungen haben:
roles/datastore.userauf der V2-Firestore-Datenbankroles/secretmanager.secretAccessornur auf V2-Secrets
Gewähre dem Dienstkonto nicht Secret-Manager-Admin oder Zugriff auf V1-Secrets.
Google OAuth-Client (nur V2)
Erstelle einen neuen OAuth-Web-Client. Bearbeite nicht den V1-Client.
Zustimmungsbildschirm:
Benutzertyp: External (oder Internal für nur-Workspace)
App-Name: z. B.
GA4 MCP Connector V2Scopes:
openidemailhttps://www.googleapis.com/auth/analytics.readonly
Testnutzer hinzufügen, solange der App-Status "Testing" ist
Veröffentlichung erforderlich für Nicht-Testnutzer, da Analytics-Scope sensibel sind
Autorisierte Redirect-URI:
https://<v2-cloud-run-url>/oauth/google/callbackLokal:
http://localhost:3000/oauth/google/callbackClaude – Custom Connector
Starte V1 und setze
APP_BASE_URLauf die Cloud-Run-URL.In Claude einen Custom Connector hinzufügen.
URL:
https://<v2-host>/mcpJeder Betreiber führt sein eigenes Google Sign-In aus.
Wenn das Google-Konto mehrere GA 4-Produkte hat, wählt er eines aus. Diese Auswahl bleibt erhalten, bis er wechselt.
Tester
npm testMCP OAuth2-Metadaten, DCR, PKCE und JWT
sub-Zuordnung zu GoogleDatenisolation zwischen Betreibern
Persistente Auswahl von Properties
Token-Refresh / -Rotation
Widerrufene Google-Grants
Überarbeitung von Logs
Für Tests werden keine echten V1-Credentials verwendet.
Deployment (nicht ausführen, bis Sie es anfordern)
Nur als Doku. Die V1-Bereitstellung ist nicht betroffen.
Wichtig: für Produktion Secrets raten:
Bevorzugt Secret-Manager-Referenzen statt Klartext-Environment-Variablen
Sicherstellen, dass Firestore im nativen Modus eingerichtet ist
Redirect-URIs nach dem Deployment anpassen
.\scripts\cloud-run-setup.ps1 -ProjectId YOUR_V2_PROJECT_ID
.\scripts\cloud-run-deploy.ps1 -ProjectId YOUR_V2_PROJECT_ID
.\scripts\cloud-run-set-env.ps1 `
-ProjectId YOUR_V2_PROJECT_ID `
-AppBaseUrl https://YOUR_V2_CLOUD_RUN_URL `
-GoogleClientId YOUR_V2_CLIENT_ID `
-GoogleClientSecret YOUR_V2_CLIENT_SECRET `
-McpTokenSecret YOUR_MCP_TOKEN_SECRET `
-OauthStateSecret YOUR_OAUTH_STATE_SECRET `
-TokenEncryptionKey YOUR_TOKEN_ENCRYPTION_KEYSecurity
Refresh-Tokens sind mit AES-256-GCM verschlüsselt (Firestore)
MCP-Tools geben niemals Access-Tokens, Refresh-Tokens oder Authorisation-Codes weiter
Logs redigieren Tokens, Secrets, Cookies und Services
Property-IDs werden live über die Google Admin API geprüft
Bei fehlendem Operator-Kontext lehnt MCP die Anfrage ab
Git
Das Repo ist nur für V2. Der V1-Git-Remote (git@github.com:devopsbrandmirchi/Ga4McpServer.git) darf nicht verwendet werden.
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 Connectors
GA4 conversion analyst inside Claude — funnel drops, traffic anomalies, device gaps, with numbers.
WHOOP recovery, strain, sleep and workouts in Claude via official WHOOP OAuth. Free, open source.
Self-hosted MCP gateway: turn any API, database or MCP server into AI connectors — no code.
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/devopsbrandmirchi/Ga4McpV2'
If you have feedback or need assistance with the MCP directory API, please join our Discord server