ga4-mcp-worker
ga4-mcp-worker
Un servidor MCP de Google Analytics 4 de solo lectura que se ejecuta en Cloudflare Workers para que tus compañeros puedan consultar GA4 desde Claude sin tener nada instalado localmente: no Python, no gcloud, no archivo ADC y, con esta versión, tampoco una contraseña compartida. Sumar el servidor significa hacer clic en «Conectar», iniciar sesión con tu propia cuenta de Google y responder preguntas sobre GA4 siendo tú mismo.
Replica la superficie de herramientas del servidor
googleanalytics/google-analytics-mcp
oficial, pero llama a las API REST de Google Analytics directamente, ya que las librerías cliente oficiales
no funcionan en el runtime de Workers.
Lee esto primero: docs/IMPLEMENTATION-NOTES.md § Qué se ha probado y qué no. La verificación manual de extremo a extremo está hecha, pero algunas superficies (los endpoints v1alpha, la paginación) siguen solo respaldadas por fixtures.
Autenticación: OAuth por usuario
Cada integrante del equipo entra con su propia cuenta de Google. No hay ningún secreto compartido ni una única credencial de Google de la que todos dependan; consulta [PRODUCTION.md § I](PRODUCTION.md#el-modelo-de-en – the full identity model) y docs/PRODUCTION-PART2.md § VIII para el diseño completo y en qué se diferencia del antiguo modo contras un secreto compartido. El acceso se limita a las cuentas de Google de @zuddl.com (ALLOWED_EMAIL_DOMAIN en wrangler.toml).
GOOGLE_CLIENT_ID y GOOGLE_CLIENT_SECRET siguen siendo obligatorios: Google exige que toda aplicación que pida datos de usuario esté registrada, y esos dos valores son la clave usada en el despliegue una única vez. Lo que desaparece es el refresh token que se generaba a mano y la contraseña que los compañeros solían escribir.
Documentación de la documentación
Archivo | Descripción |
** SETUP-GUIDE.md (+ parte 2) | Primera edición explicada desde cero, sin suponer conocimientos previos sobre OAuth: crear la app de Google, desplegar, probar y conectar Claude. Empieza aquí. |
PRODUCTION.md (+ parte 2) | El modelo de identidad, monitoreo, cuotas de Analytics, rotación de secretos, desarrollo local, runbook, checklist de seguridad y los detalles de OAuth. Léetelo antes de desplegar a gran escala. |
Detalles que esta implementación implementa correctamente, qué se ha probado y qué no, y costes de funcionamiento. | |
| El servidor MCP: herramientas, helpers de fetch, normalizador y router. Muy comentado. |
| El handler del «iniciar sesión con Google» — |
| Config del Worker. Fíjate en |
| Plantilla para desarrollo local. Copiar a |
Related MCP server: GA4 MCP Server
Propiedades de GA4 para uso interno
ID de propiedad | Nombre | ID de medición | Estado |
| Nueva propiedad del sitio web de zuddl |
| Aprobada — usa esta al menos que te indiquen otra. |
| legada | — | Heredada. Solo histórico; no uses para informar hoy. |
| legada | — | Heredada. Solo histórico; no uses para informar hoy. |
El servidor es independiente de la propiedad: toda herramienta acepta el parámetro property_id, tanto con 314138239 como con "properties/314138239". Si se omite, se usará el DEFAULT_PROPERTY_ID de wrangler.toml, por defecto la propiedad destino, para que no tengas que memorizar un número. Llama a get_account_summaries para listar todo lo que las credenciales pueden ver.
Herramientas (9)
Herramienta | Método + endpoint | Qué hace |
| POST | La herramienta principal. Informes históricos. Con todos los parámetros. |
| POST | Últimos ~30 minutos. Cuadro esquemático más pequeño. |
| POST | Secuencias ordenadas de pasos y abandono paso a paso. |
| POST | Conversiones, gastos en anuncios, ROAS y modelo de atribución. Con campos limitados. |
| GET | Los campos personalizados junto al |
| GET | Todo lo que las credenciales pueden ver. Sin argumentos. |
| GET | Zona horaria, moneda y nivel de servicio. La zona horaria explica los difer actual dates. |
| GET | Notas con fecha que explican picos y descensos. |
| GET | Cuentas de Google Ads vinculadas; confirma si las métricas de costo pueden tener datos. |
run_report acepta el conjunto completo oficial de parámetros: property_id, date_ranges (una lista, para que la comparación entre periodos funcione en una sola petición), dimensions, dimension_filter, metric_filter, order_bys, limit, offset, currency_code y return_property_quota. run_realtime_report usa la misma estructura, pero sin date_ranges y currency_code.
Las descripciones de las herramientas son adrede más extensas porque ofrecen ejemplos funcionantes para cada tipo de filtro y son el único sitio de donde el modelo aprende el formato de la petición. Trata cualquier edición de las mismas como un cambio de comportamiento.
Endpoints
Punto de entrada | Autenticación | Descripción |
| bearer-token de OAuth | La conexión MCP (Streamable HTTP). No hay |
| — | Endpoints OAuth, usando |
| — | Google redirige aquí después de iniciar sesión. No debe abrirse manualmente. |
| Ninguna | Comprueba el estado. |
| Ninguna | Texto de estado. Indica el modo de autenticación vigente. |
Todo lo demás devuelve 404.
En modo OAuth,
/healthsignifica menos. No hay una credencial compartida que se pueda comprobar, así que un200solo confirma que hay registro de aplicación y queOAUTH_KV(la tienda de concesiones) es accesible; no que la sesión de una persona sigan siendo válida. Una sesión de usuario puede caducar o revocarse incluso mientras/healthestá verde. Eso es propio de la autenticación por usuario, no un fallo.
El Worker registra una línea de JSON por petición MCP, por cada rechazo de autenticación, por cada error de herramienta, por cada fallo de health, y eventos propios de OAuth (oauth_authorize_redirect, oauth_authorized, oauth_domain_rejected, etc.). No se registra ningún material del token. Todas las llamadas a Google llevan el User-Agent propio ga4-mcp-worker/1.0.0 (+cloudflare-workers) para así poder atribuir gasto de cuota.
Aplicación de modo solo lectu
Tres capas independientes, todas presentes:
Alcance OAuth. Todo token (el viejo token de modo o el de una integrante) se solicita con
https://www.googleapis.com/auth/analytics.readonlyy nada más (soloopenid/emailpara verificar la identidad en el modo OAuth — versrc/google-oauth.ts: no dan acceso a datos). Google rechaza cualquier intento de escritura desde del servidor. Esta es la garantía real. El documento SETUP-GUIDE.md sirve para comprobar eso mismo contokeninfo.Endpoints permitidos. Las expresiones regulares se revisan dentro de los dos helpers de fetch, antes de llamar por red. Si en una edición futura se introduce un endpoint de escritura, se lanza una excepción en vez de salir a la red.
Cero verbos mutantes. No hay ningún
PATCH,PUTniDELETEen el repositorio. Solo hay tres usos de fetch mediante el código: la fábrica del token (POST),gaGet(GET) ygaPost(POST).
Los puntos :runReport, :runRealtimeReport y :runFunnelReport usan HTTP POST pero se trata de peticiones de consulta: — el cuerpo contiene la definición del informe porque es demasiado para una cadena de query. En GA4 no se crea ni se modifica nada.
Comandos rápidos
npm installnpm run typecheck && npm run dry-runnpm run deploynpm run tailcurl -s https://ga4-mcp-worker.YOUR-SUBDOMAIN.workers.dev/healthDefine los dos secretos que necesitan ambos modos de autenticación (escíbelos interactivamente, ya que redireccionarlos con tubería descuida los valores):
npx wrangler secret put GOOGLE_CLIENT_IDnpx wrangler secret put GOOGLE_CLIENT_SECRETConecta desde Claude Code — no hace falta un servicio de headers, pues la autorización ocurre por el navegador:
claude mcp add --transport http --scope user ga4 https://ga4-mcp-worker.YOUR-SUBDOMAIN.workers.dev/mcpLuego, en una sesión interactiva de claude, ejecuta /mcp, elige ga4 y auténtica con tu cuenta Google.
Más
Escollos, cobertura de pruebas y costes de ejecución: docs/IMPLEMENTATION-NOTES.md
Tutorial del primer despliegue: SETUP-GUIDE.md → parte 2
Endurecimiento, monitorización y la guía de operaciones de OAuth: PRODUCTION.md → parte 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