GA4 Analytics MCP V2
GA4 Analytics MCP V2
Conector multioperador de Google Analytics 4 para Claude.ai Custom Connectors, alojado en Google Cloud Run.
Esta es la versión 2. Es una aplicación independiente de V1. No reutilices los secretos, los clientes OAuth, los servicios de Cloud Run ni los remotos de Git de V1.
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 APIsNo hay ningún servidor stdio local ni Supabase.
Arquitectura
Hay dos capas OAuth vinculadas:
Claude → V2: MCP OAuth 2.1 (metadatos de recurso protegido, DCR, CIMD, PKCE).
V2 → Google: el inicio de sesión de Google ocurre dentro de la autorización MCP. El
subdel token de acceso MCP es el sujeto (sub) de la cuenta de Google. El correo electrónico es solo informativo.
Cada operador tiene:
su propio token de actualización de Google cifrado
su propia lista de propiedades GA4 accesibles (de la API de administración de Google)
su propia propiedad activa persistida
El operador A no puede usar la credencial de Google del operador B ni seleccionar una propiedad a la que la cuenta de Google A no pueda acceder.
Herramientas MCP
Herramienta | Propósito |
| Operador autenticado (correo electrónico + operatorId interno). Sin tokens. |
| Propiedades visibles para esa cuenta de Google, con |
| Propiedad seleccionada actualmente |
| Cambia tras una comprobación en tiempo real de la lista de permitidos |
| Dimensiones/métricas de la propiedad activa o recién autorizada |
| Informe histórico de GA4 |
| Últimos ~30 minutos |
Las herramientas de informes usan la propiedad activa almacenada cuando se omite propertyId. Un propertyId proporcionado solo se acepta si la cuenta de Google autenticada puede acceder a él y, en ese caso, se convierte en la nueva propiedad activa.
Desarrollo local
cd D:\MCP_Servers\Ga4McpV2
npm install
copy .env.example .env.localRellena .env.local con valores de V2. No copies secretos de V1.
Emulador de Firestore opcional:
gcloud emulators firestore start --host-port=localhost:8080Establece FIRESTORE_EMULATOR_HOST=localhost:8080 y FIRESTORE_PROJECT_ID en .env.local.
npm run dev
npm test
npm run buildApp:
http://localhost:3000MCP:
http://localhost:3000/mcpSalud:
http://localhost:3000/healthCallback de Google:
http://localhost:3000/oauth/google/callback
Claude.ai no puede acceder a localhost. Despliega V2 en Cloud Run antes de añadir el Custom Connector.
Variables de entorno
Variable | Obligatoria | Propósito |
| Sí | Origen público, sin barra final |
| Sí | Cliente web OAuth de Google de V2 |
| Sí | Secreto OAuth de Google de V2 |
| No | Por defecto, |
| Sí | Firma los JWT de MCP |
| Sí | Firma el estado de Google y cifra las cookies de autorización pendientes |
| Sí | Cifra los tokens de actualización de Google en reposo |
| Producción | Proyecto de Firestore |
| Local/pruebas | Host del emulador de Firestore |
| No | Cliente confidencial de Claude opcional preregistrado |
| No | Par del cliente confidencial opcional |
V2 no usa GOOGLE_REFRESH_TOKEN ni MCP_AUTH_TOKEN.
Configuración de Google Cloud
Usa un proyecto nuevo de Google Cloud cuando sea posible. Si compartes un proyecto con V1, crea igualmente un servicio de Cloud Run, un repositorio de Artifact Registry, un cliente OAuth y secretos distintos.
Habilita:
Cloud Run
Cloud Build
Artifact Registry
Firestore
Secret Manager
Google Analytics Admin API
Google Analytics Data API
Nombres de recursos sugeridos (marcadores de posición — sustitúyelos por los de tu proyecto):
Servicio de Cloud Run:
ga4-mcp-v2Artifact Registry:
ga4-mcp-v2Colección de Firestore:
operators
La cuenta de servicio de Cloud Run debe tener:
roles/datastore.useren la base de datos de Firestore de V2roles/secretmanager.secretAccessorsolo en los secretos de V2
No concedas a la cuenta de servicio el rol de administrador de Secret Manager ni acceso a los secretos de V1.
Cliente OAuth de Google (solo V2)
Crea una aplicación web OAuth nueva. No edites el cliente de V1.
Pantalla de consentimiento:
Tipo de usuario: Externo (o Interno para uso exclusivo de Workspace)
Nombre de la aplicación: algo como
GA4 MCP Connector V2Ámbitos:
openidemailhttps://www.googleapis.com/auth/analytics.readonly
Añade usuarios de prueba mientras la aplicación esté en modo de pruebas
La publicación es obligatoria para los usuarios que no sean de prueba porque los ámbitos de Analytics son sensibles
URI de redirección autorizada:
https://<v2-cloud-run-url>/oauth/google/callbackLocalmente:
http://localhost:3000/oauth/google/callbackCustom Connector de Claude
Despliega V2 y establece
APP_BASE_URLcomo la URL de Cloud Run.En Claude, añade un Custom Connector.
URL:
https://<v2-host>/mcpCada operador completa el inicio de sesión de Google desde su propia cuenta de Claude.
Si la cuenta de Google tiene varias propiedades GA4, elige una. Esa elección persiste hasta que la cambie.
Pruebas
npm testLas pruebas unitarias cubren:
Metadatos OAuth de MCP, DCR, PKCE y
subdel JWT vinculado a GoogleAislamiento de operadores (credenciales y listas de propiedades permitidas)
Propiedad activa persistente
Actualización / rotación de tokens
Concesiones de Google revocadas
Redacción de registros estructurados
No se usan credenciales V1 reales.
Despliegue (no ejecutar hasta que se solicite)
Solo documentado. El despliegue de V1 debe permanecer intacto.
.\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_KEYPrefiere referencias de Secret Manager para los secretos de producción en lugar de valores de entorno en texto plano al configurar el servicio.
Después del despliegue:
Añade la URI de devolución de llamada de Cloud Run al cliente OAuth de V2.
Confirma que Firestore se creó en modo nativo.
Añade
https://<v2-host>/mcpen Claude.
Consideraciones de seguridad
Los tokens de actualización se cifran con AES-256-GCM antes de escribirse en Firestore.
Las herramientas MCP nunca devuelven tokens de acceso, tokens de actualización ni códigos de autorización.
Los registros redactan tokens, secretos, cookies y códigos de autorización.
Los ID de propiedad de Claude se verifican contra la lista en tiempo real de la API de administración de ese operador.
Las herramientas fallan en modo cerrado si no hay ningún contexto de operador vinculado a la solicitud.
Cookies solo HTTPS en producción.
Git
Este repositorio es solo de V2. El remoto de V1 es
git@github.com:devopsbrandmirchi/Ga4McpServer.gity nunca debe añadirse aquí. Crea un repositorio nuevo de GitHub cuando estés listo para publicar V2.
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