Skip to main content
Glama

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.

docs/IMPLEMENTATION-NOTES.md

Detalles que esta implementación implementa correctamente, qué se ha probado y qué no, y costes de funcionamiento.

src/index.ts

El servidor MCP: herramientas, helpers de fetch, normalizador y router. Muy comentado.

src/google-oauth.ts

El handler del «iniciar sesión con Google» — /authorize y `. OAuth. Heavilycommentary.

wrangler.toml

Config del Worker. Fíjate en nodejs_compat – ver gotchas.

.dev.vars.example

Plantilla para desarrollo local. Copiar a .dev.vars (gitignorado).


Related MCP server: GA4 MCP Server

Propiedades de GA4 para uso interno

ID de propiedad

Nombre

ID de medición

Estado

314138239

Nueva propiedad del sitio web de zuddl

G-XXXXX

Aprobada — usa esta al menos que te indiquen otra.

260479909

legada

Heredada. Solo histórico; no uses para informar hoy.

328977581

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

run_report

POST analyticsdata.googleapis.com/v1beta/properties/{id}:runReport

La herramienta principal. Informes históricos. Con todos los parámetros.

run_realtime_report

POST .../v1beta/properties/{id}:runRealtimeReport

Últimos ~30 minutos. Cuadro esquemático más pequeño.

run_funnel_report

POST .../v1alpha/properties/{id}:runFunnelReport

Secuencias ordenadas de pasos y abandono paso a paso.

run_conversions_report

POST .../v1alpha/properties/{id}:runReport

Conversiones, gastos en anuncios, ROAS y modelo de atribución. Con campos limitados.

get_custom_dimensions_and_metric

GET .../v1beta/properties/{id}/metadata

Los campos personalizados junto al apiName consultable. Llámala antes de usar campos locales.

get_account_summaries

GET analyticsadmin.googleapis.com/v1beta/accountSummaries

Todo lo que las credenciales pueden ver. Sin argumentos.

get_property_details

GET .../v1beta/properties/{id}

Zona horaria, moneda y nivel de servicio. La zona horaria explica los difer actual dates.

list_property_annotations

GET .../v1alpha/properties/{id}/reportingDataAnnotations

Notas con fecha que explican picos y descensos.

list_google_ads_links

GET .../v1beta/properties/{id}/googleAdsLinks

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

POST /mcp

bearer-token de OAuth

La conexión MCP (Streamable HTTP). No hay /sse.

GET /authorize, POST /token, POST /register

Endpoints OAuth, usando @cloudflare/workers-oauth-provider.

GET /callback

Google redirige aquí después de iniciar sesión. No debe abrirse manualmente.

GET /health

Ninguna

Comprueba el estado. 200 {"status":"ok","auth":"oauth", ...} o 503 con detalle. Mira la nota: significa desde aquí menos que en el modo con contraseña. No expone datos. Apúntale un monitor de actividad.

GET /

Ninguna

Texto de estado. Indica el modo de autenticación vigente.

Todo lo demás devuelve 404.

En modo OAuth, /health significa menos. No hay una credencial compartida que se pueda comprobar, así que un 200 solo confirma que hay registro de aplicación y que OAUTH_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 /health está 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:

  1. Alcance OAuth. Todo token (el viejo token de modo o el de una integrante) se solicita con https://www.googleapis.com/auth/analytics.readonly y nada más (solo openid/email para verificar la identidad en el modo OAuth — ver src/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 con tokeninfo.

  2. 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.

  3. Cero verbos mutantes. No hay ningún PATCH, PUT ni DELETE en el repositorio. Solo hay tres usos de fetch mediante el código: la fábrica del token (POST), gaGet (GET) y gaPost (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 install
npm run typecheck && npm run dry-run
npm run deploy
npm run tail
curl -s https://ga4-mcp-worker.YOUR-SUBDOMAIN.workers.dev/health

Define 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_ID
npx wrangler secret put GOOGLE_CLIENT_SECRET

Conecta 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/mcp

Luego, en una sesión interactiva de claude, ejecuta /mcp, elige ga4 y auténtica con tu cuenta Google.


Más

F
license - not found
Not graded
quality - not tested
C
maintenance

Maintenance

Maintainers
Response time
Release cycle
Releases (12mo)
Commit activity

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

  • A
    license
    A
    quality
    B
    maintenance
    Connects 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.
    10
    235
    MIT
  • A
    license
    A
    quality
    B
    maintenance
    Connects 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.
    7
    MIT
  • A
    license
    Not graded
    quality
    D
    maintenance
    Enables 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

View all related MCP servers

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.

View all MCP Connectors

Latest Blog Posts

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