Google Tag Manager

Gestiona cuentas, contenedores y etiquetas de Google Tag Manager a través de su API, con autenticación OAuth de Google incorporada.

Documentación

Servidor MCP para Google Tag Manager

Trust Score

Una interfaz para la API de Google Tag Manager a través de MCP, en dos variantes: un servidor alojado con Google OAuth integrado, y una CLI local que se ejecuta con tus propias credenciales.

Tabla de contenidos

Estructura del repositorio

Espacio de trabajo npm con una aplicación y dos paquetes publicados:

RutaPaqueteQué es
apps/worker(privado)El Cloudflare Worker alojado en gtm-mcp.stape.ai: Google OAuth, el flujo de aprobación, las páginas públicas, la eliminación de sesiones.
packages/cligoogle-tag-manager-mcp-serverEl paquete npm: un servidor MCP local sobre stdio, que se autentica con las credenciales que tú proporcionas.
packages/coregoogle-tag-manager-mcp-coreCada herramienta y esquema de GTM, independiente de cómo se obtengan las credenciales.

Las herramientas llegan a Google a través de un GtmAuthProvider (getAccessToken(): Promise<string>) en lugar de a través de una sesión particular, lo que permite que el mismo conjunto de herramientas respalde ambos servidores — y uno privado con tu propia autenticación. Consulta el README del paquete principal.

Instalación

Este servidor viene en dos variantes: servidor alojado y CLI local. Ambos te ofrecen las mismas 18 herramientas de GTM; la diferencia es quién maneja la autenticación de Google.

Servidor alojadoCLI local
AutenticaciónGoogle OAuth en tu navegador, gestionado por nosotrosTú proporcionas una clave de cuenta de servicio, token de actualización o token de acceso
DatosPasa a través de gtm-mcp.stape.aiSolo salen de tu máquina
ConfiguraciónNingunaEstablece una variable de entorno

Si eres un colaborador que prueba un cambio no publicado en lugar de simplemente usar las herramientas, omite todo lo siguiente y consulta Prueba tus cambios localmente.

Elige tu cliente a continuación. El servidor alojado necesita el puente mcp-remote en clientes cuyo soporte MCP no complete el flujo OAuth de Google de forma nativa; donde un cliente lo hace por sí mismo, se conecta directamente a https://gtm-mcp.stape.ai/mcp.

Claude Desktop

⬇️ Haz clic para expandir ⬇️

Servidor alojado — Claude Desktop se conecta a servidores MCP HTTP remotos de forma nativa, sin necesidad de puente. Ve a Configuración → Conectores → Añadir conector personalizado, establece el nombre como gtm-mcp-server y la URL como https://gtm-mcp.stape.ai/mcp, luego guarda. Haz clic en el nuevo conector para completar el flujo OAuth de Google en la ventana del navegador que se abre.

mcp-remote también es posible para el servidor alojado, para quienes prefieran configurarlo a través del archivo de configuración JSON (Configuración -> Desarrollador -> Editar configuración) en lugar de la interfaz de Conectores — menos recomendado, pero aún compatible:

{
  "mcpServers": {
    "gtm-mcp-server": {
      "command": "npx",
      "args": [
        "-y",
        "mcp-remote",
        "https://gtm-mcp.stape.ai/mcp"
      ]
    }
  }
}

CLI local — sin flujo OAuth, sin datos a través del servidor de nadie más, tú proporcionas una clave de cuenta de servicio o un token de actualización. Abre Configuración -> Desarrollador -> Editar configuración y añade:

{
  "mcpServers": {
    "gtm-mcp-server": {
      "command": "npx",
      "args": ["-y", "google-tag-manager-mcp-server"],
      "env": {
        "GOOGLE_SERVICE_ACCOUNT_KEY": "{\"type\":\"service_account\", ... }"
      }
    }
  }
}

Consulta el README de la CLI para conocer todas las opciones de credenciales.

Claude Code

⬇️ Haz clic para expandir ⬇️

Claude Code habla HTTP directamente, incluido el protocolo de enlace OAuth, por lo que el servidor alojado no necesita puente.

Servidor alojado:

claude mcp add --transport http gtm-mcp-server https://gtm-mcp.stape.ai/mcp

Se abre una ventana del navegador para el flujo OAuth de Google la primera vez que se usa una herramienta. Ejecuta /mcp dentro de Claude Code para confirmar que se conectó.

CLI local:

claude mcp add gtm-mcp-server -e GOOGLE_SERVICE_ACCOUNT_KEY='{"type":"service_account", ... }' -- npx -y google-tag-manager-mcp-server

Ambos escriben en .mcp.json / tu configuración MCP de Claude Code.

VS Code

⬇️ Haz clic para expandir ⬇️

El cliente MCP de VS Code admite servidores HTTP y su flujo OAuth de forma nativa, sin necesidad de mcp-remote. Añade esto a .vscode/mcp.json:

Servidor alojado:

{
  "servers": {
    "gtm-mcp-server": {
      "type": "http",
      "url": "https://gtm-mcp.stape.ai/mcp"
    }
  }
}

CLI local:

{
  "servers": {
    "gtm-mcp-server": {
      "type": "stdio",
      "command": "npx",
      "args": ["-y", "google-tag-manager-mcp-server"],
      "env": {
        "GOOGLE_SERVICE_ACCOUNT_KEY": "{\"type\":\"service_account\", ... }"
      }
    }
  }
}

GitHub Copilot

⬇️ Haz clic para expandir ⬇️

GitHub Copilot Chat en VS Code usa el propio cliente MCP de VS Code, por lo que lee el mismo archivo .vscode/mcp.json — consulta VS Code arriba. No se necesita configuración adicional.

Copilot CLI

⬇️ Haz clic para expandir ⬇️

Copilot CLI también completa OAuth de forma nativa para servidores HTTP remotos. Añade esto a ~/.copilot/mcp-config.json:

Servidor alojado:

{
  "mcpServers": {
    "gtm-mcp-server": {
      "type": "http",
      "url": "https://gtm-mcp.stape.ai/mcp"
    }
  }
}

CLI local:

{
  "mcpServers": {
    "gtm-mcp-server": {
      "command": "npx",
      "args": ["-y", "google-tag-manager-mcp-server"],
      "env": {
        "GOOGLE_SERVICE_ACCOUNT_KEY": "{\"type\":\"service_account\", ... }"
      }
    }
  }
}

Consulta la documentación de GitHub para el subcomando copilot mcp add equivalente.

Cursor

⬇️ Haz clic para expandir ⬇️

Cursor también habla HTTP directamente, sin necesidad de mcp-remote. Añade esto a .cursor/mcp.json (a nivel de proyecto) o ~/.cursor/mcp.json (global — Configuración → MCP → Añadir nuevo servidor MCP global):

Servidor alojado:

{
  "mcpServers": {
    "gtm-mcp-server": {
      "url": "https://gtm-mcp.stape.ai/mcp"
    }
  }
}

Se abre una ventana del navegador para el flujo OAuth de Google la primera vez que se usa una herramienta.

CLI local:

{
  "mcpServers": {
    "gtm-mcp-server": {
      "command": "npx",
      "args": ["-y", "google-tag-manager-mcp-server"],
      "env": {
        "GOOGLE_SERVICE_ACCOUNT_KEY": "{\"type\":\"service_account\", ... }"
      }
    }
  }
}

Antigravity

⬇️ Haz clic para expandir ⬇️

El soporte OAuth propio de Antigravity para servidores HTTP remotos aún no alcanza de forma fiable un token al servidor (antigravity-cli#25), así que usa mcp-remote para el servidor alojado aquí también. Añade esto a ~/.gemini/config/mcp_config.json (global) o .agents/mcp_config.json (local al espacio de trabajo) — accesible desde el panel de agentes del editor mediante … → MCP Servers → Manage MCP Servers → View raw config:

Servidor alojado:

{
  "mcpServers": {
    "gtm-mcp-server": {
      "command": "npx",
      "args": [
        "-y",
        "mcp-remote",
        "https://gtm-mcp.stape.ai/mcp"
      ]
    }
  }
}

CLI local:

{
  "mcpServers": {
    "gtm-mcp-server": {
      "command": "npx",
      "args": ["-y", "google-tag-manager-mcp-server"],
      "env": {
        "GOOGLE_SERVICE_ACCOUNT_KEY": "{\"type\":\"service_account\", ... }"
      }
    }
  }
}

ChatGPT

⬇️ Haz clic para expandir ⬇️
  1. En ChatGPT, activa el modo Desarrollador: Configuración → Apps y conectores → Configuración avanzada → Modo desarrollador.
  2. Ve a Configuración → Conectores → Crear, y establece la URL del servidor como https://gtm-mcp.stape.ai/mcp.
  3. Establece Autenticación en OAuth y completa el inicio de sesión de Google en la ventana del navegador que se abre.

ChatGPT solo alcanza servidores a través de internet pública, no puede iniciar un proceso local — así que no hay opción de CLI local aquí, solo el servidor alojado.

Otros clientes MCP

⬇️ Haz clic para expandir ⬇️

Cualquier otro cliente compatible con MCP que espere una configuración de tipo stdio command/args puede usar el mismo bloque mcp-remote para el servidor alojado:

{
  "mcpServers": {
    "gtm-mcp-server": {
      "command": "npx",
      "args": [
        "-y",
        "mcp-remote",
        "https://gtm-mcp.stape.ai/mcp"
      ]
    }
  }
}

O la CLI local directamente, con tus credenciales:

{
  "mcpServers": {
    "gtm-mcp-server": {
      "command": "npx",
      "args": ["-y", "google-tag-manager-mcp-server"],
      "env": {
        "GOOGLE_SERVICE_ACCOUNT_KEY": "{\"type\":\"service_account\", ... }"
      }
    }
  }
}

Solución de problemas

Límite de longitud del nombre del servidor MCP

Algunos clientes MCP (como Cursor AI) tienen un límite de 60 caracteres para la longitud combinada del nombre del servidor MCP + nombre de la herramienta. Si usas un nombre de servidor más largo en tu configuración (por ejemplo, gtm-mcp-server-your-additional-long-name), algunas herramientas pueden filtrarse.

Para evitar este problema:

  • Usa nombres de servidor más cortos en tu configuración MCP (por ejemplo, gtm-mcp-server)

Borrado de la caché MCP

Si te conectas a través de mcp-remote (Antigravity, o Claude Desktop configurado de esa manera), almacena toda la información de credenciales dentro de ~/.mcp-auth (o donde apunte tu MCP_REMOTE_CONFIG_DIR). Si tienes problemas persistentes, intenta ejecutar:

rm -rf ~/.mcp-auth

Luego, reinicia tu cliente MCP.

Prueba tus cambios localmente

Qué flujo de trabajo necesitas depende de lo que hayas cambiado. La mayoría de los cambios están en la primera categoría — recurre a la segunda solo si estás tocando el propio Worker.

Cambios en packages/core o packages/cli

Esta es la lógica de las herramientas en sí (esquemas, llamadas a la API de GTM, manejo de errores) — casi todo lo que corregirías o añadirías vive aquí. No necesitas un cliente OAuth de Google Cloud ni configuración de Worker: compila desde el código fuente y ejecuta la CLI directamente con credenciales que ya tengas.

git clone https://github.com/stape-io/google-tag-manager-mcp-server
cd google-tag-manager-mcp-server
gh pr checkout <PR number>   # or: git checkout <your-branch>
npm install
npm run build

Apunta tu cliente MCP a la compilación local en lugar de npx — mismas opciones de credenciales que el ejemplo de CLI local de Claude Desktop arriba, un token de acceso del OAuth Playground es la forma más rápida de probar un solo cambio:

{
  "mcpServers": {
    "gtm-mcp-local": {
      "command": "node",
      "args": ["/absolute/path/to/google-tag-manager-mcp-server/packages/cli/dist/index.js"],
      "env": {
        "GOOGLE_ACCESS_TOKEN": "..."
      }
    }
  }
}

Consulta el README de la CLI para conocer todas las opciones de credenciales.

Cambios en apps/worker

Solo se necesita para el código propio del servidor alojado: el flujo OAuth, el enrutamiento, el manejo de sesiones, las páginas de aprobación y estado. Esto ejecuta ese código en tu propia máquina contra tus propias credenciales OAuth de Google Cloud en lugar de gtm-mcp.stape.ai.

1. Configura un cliente OAuth de Google Cloud

  1. En la Google Cloud Console, crea o selecciona un proyecto, luego habilita la API de Tag Manager.
  2. Ve a APIs y servicios > Pantalla de consentimiento de OAuth y configúrala (Externa está bien). Mientras la aplicación esté en estado de publicación Prueba, solo las cuentas listadas como usuarios de prueba pueden iniciar sesión.
  3. Ve a Audiencia, bajo Usuarios de prueba añade tu propia cuenta de Google.
  4. Ve a APIs y servicios > Credenciales > Crear credenciales > ID de cliente de OAuth, tipo Aplicación web.
  5. Bajo URIs de redireccionamiento autorizados, añade http://localhost:8788/callback. (Puedes dejar Orígenes de JavaScript autorizados vacío — este flujo es solo del lado del servidor, ningún JS del navegador llama a Google directamente.)
  6. Guarda, luego copia el ID de cliente y el Secreto de cliente generados.

2. Configura las variables de entorno locales

Copia el archivo de ejemplo y completa los valores del paso anterior:

cp apps/worker/.dev.vars.example apps/worker/.dev.vars
GOOGLE_CLIENT_ID="<your client ID>"
GOOGLE_CLIENT_SECRET="<your client secret>"
COOKIE_ENCRYPTION_KEY="<any random string, at least 32 chars, e.g. output of: openssl rand -hex 32>"
WORKER_HOST="http://localhost:8788"
HOSTED_DOMAIN=""

.dev.vars está en git-ignore — solo se usa localmente y nunca se confirma.

3. Inicia el servidor

npm install
npm run build
npm run dev

npm run build compila el paquete principal contra el que se agrupa el Worker; npm run dev inicia el Worker en http://localhost:8788.

4. Apunta tu cliente MCP al servidor local

Los conectores personalizados de Claude Desktop necesitan una URL accesible públicamente, por lo que mcp-remote es la única opción para apuntar a localhost:

{
  "mcpServers": {
    "gtm-mcp-server-local": {
      "command": "npx",
      "args": ["-y", "mcp-remote", "http://localhost:8788/mcp"]
    }
  }
}

Reinicia Claude Desktop. Se abrirá una ventana del navegador para el flujo OAuth de Google; inicia sesión con la cuenta que añadiste como usuario de prueba en el paso 1.

Nota: si te has conectado previamente al servidor alojado (o alternas entre local y alojado), borra primero la caché de mcp-remote (consulta Solución de problemas arriba) y reinicia completamente tu cliente MCP, de lo contrario podría reutilizar una conexión obsoleta/en caché.

Publicación de versiones

Las versiones y los registros de cambios se gestionan con Changesets. Junto con un cambio que deba publicarse, añade:

npm run changeset

Al fusionar en main el flujo de trabajo de publicación abre un PR de "Version Packages"; fusionar ese PR publica en npm, primero el paquete principal y luego la CLI que depende de él. El Worker es privado y nunca se publica — se despliega desde main en cada push.

Desarrollo

npm install
npm run build      # core, then the CLI, then the Worker's generated version
npm run typecheck
npm run lint
npm run smoke      # starts the built CLI and runs an MCP handshake against it

Las solicitudes de extracción ejecutan todo lo anterior más una verificación del paquete del Worker, y marcan cambios en un paquete publicado que lleguen sin un changeset. Tanto @modelcontextprotocol/sdk como agents están fijados a versiones exactas en apps/worker. El SDK identifica los esquemas de herramientas con instanceof, por lo que todo el espacio de trabajo debe resolver una única copia, y las versiones de agents fijan la versión del SDK contra la que fueron compiladas. Actualízalos juntos y despliega con cuidado.

Recursos útiles

Código abierto

El Servidor MCP para Google Tag Manager es desarrollado y mantenido por Stape Team bajo la licencia Apache 2.0.