Google Tag Manager
Gerencie contas, contêineres e tags do Google Tag Manager via sua API, com Google OAuth integrado.
Documentação
Servidor MCP para Google Tag Manager
Uma interface para a API do Google Tag Manager via MCP, em duas versões: um servidor hospedado com OAuth do Google integrado e uma CLI local que roda com suas próprias credenciais.
Sumário
- Servidor MCP para Google Tag Manager
Estrutura do repositório
Workspace npm com um aplicativo e dois pacotes publicados:
| Caminho | Pacote | O que é |
|---|---|---|
apps/worker | (privado) | O Cloudflare Worker hospedado em gtm-mcp.stape.ai: OAuth do Google, fluxo de aprovação, páginas públicas, remoção de sessão. |
packages/cli | google-tag-manager-mcp-server | O pacote npm: um servidor MCP local via stdio, autenticando com credenciais fornecidas por você. |
packages/core | google-tag-manager-mcp-core | Todas as ferramentas e esquemas do GTM, independentes de como as credenciais são obtidas. |
As ferramentas acessam o Google por meio de um GtmAuthProvider (getAccessToken(): Promise<string>) em vez de qualquer sessão específica, o que permite que o mesmo conjunto de ferramentas alimente ambos os servidores — e um privado com sua própria autenticação. Consulte o README do pacote principal.
Instalação
Este servidor vem em duas versões: Servidor hospedado e CLI local. Ambos oferecem as mesmas 18 ferramentas do GTM; a diferença é quem lida com a autenticação do Google.
| Servidor hospedado | CLI local | |
|---|---|---|
| Autenticação | OAuth do Google no seu navegador, tratado para você | Você fornece uma chave de conta de serviço, token de atualização ou token de acesso |
| Dados | Passa por gtm-mcp.stape.ai | Nunca sai da sua máquina |
| Configuração | Nenhuma | Defina uma variável de ambiente |
Se você é um colaborador testando uma alteração não publicada em vez de apenas usar as ferramentas, ignore tudo abaixo e consulte Teste suas alterações localmente.
Escolha seu cliente abaixo. O servidor hospedado precisa da ponte mcp-remote em clientes cujo suporte a MCP não conclui o fluxo OAuth do Google nativamente; onde um cliente faz isso sozinho, ele se conecta diretamente a https://gtm-mcp.stape.ai/mcp.
Claude Desktop
⬇️ Clique para expandir ⬇️
Servidor hospedado — O Claude Desktop conecta-se a servidores MCP HTTP remotos nativamente, sem necessidade de ponte. Vá para Configurações → Conectores → Adicionar conector personalizado, defina o nome como gtm-mcp-server e a URL como https://gtm-mcp.stape.ai/mcp, depois salve. Clique no novo conector para concluir o fluxo OAuth do Google na janela do navegador que abrir.
mcp-remotetambém é possível para o servidor hospedado, para quem preferir configurá-lo por meio do arquivo de configuração JSON (Configurações → Desenvolvedor → Editar configuração) em vez da interface de Conectores — menos recomendado, mas ainda suportado:{ "mcpServers": { "gtm-mcp-server": { "command": "npx", "args": [ "-y", "mcp-remote", "https://gtm-mcp.stape.ai/mcp" ] } } }
CLI local — sem fluxo OAuth, sem dados passando pelo servidor de terceiros; você fornece uma chave de conta de serviço ou um token de atualização. Abra Configurações → Desenvolvedor → Editar configuração e adicione:
{
"mcpServers": {
"gtm-mcp-server": {
"command": "npx",
"args": ["-y", "google-tag-manager-mcp-server"],
"env": {
"GOOGLE_SERVICE_ACCOUNT_KEY": "{\"type\":\"service_account\", ... }"
}
}
}
}
Consulte o README da CLI para todas as opções de credenciais.
Claude Code
⬇️ Clique para expandir ⬇️
O Claude Code fala HTTP diretamente, incluindo o handshake OAuth, então o servidor hospedado não precisa de ponte.
Servidor hospedado:
claude mcp add --transport http gtm-mcp-server https://gtm-mcp.stape.ai/mcp
Uma janela do navegador abre para o fluxo OAuth do Google na primeira vez que uma ferramenta é usada. Execute /mcp dentro do Claude Code para confirmar a conexão.
CLI local:
claude mcp add gtm-mcp-server -e GOOGLE_SERVICE_ACCOUNT_KEY='{"type":"service_account", ... }' -- npx -y google-tag-manager-mcp-server
Ambos gravam em .mcp.json / sua configuração MCP do Claude Code.
VS Code
⬇️ Clique para expandir ⬇️
O cliente MCP do VS Code suporta servidores HTTP e seu fluxo OAuth nativamente, sem necessidade de mcp-remote. Adicione isto a .vscode/mcp.json:
Servidor hospedado:
{
"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
⬇️ Clique para expandir ⬇️
O GitHub Copilot Chat no VS Code usa o próprio cliente MCP do VS Code, então ele lê o mesmo arquivo .vscode/mcp.json — consulte VS Code acima. Nenhuma configuração separada é necessária.
Copilot CLI
⬇️ Clique para expandir ⬇️
O Copilot CLI também conclui OAuth nativamente para servidores HTTP remotos. Adicione isto a ~/.copilot/mcp-config.json:
Servidor hospedado:
{
"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\", ... }"
}
}
}
}
Consulte a documentação do GitHub para o subcomando copilot mcp add equivalente.
Cursor
⬇️ Clique para expandir ⬇️
O Cursor também fala HTTP diretamente, sem necessidade de mcp-remote. Adicione isto a .cursor/mcp.json (nível de projeto) ou ~/.cursor/mcp.json (global — Configurações → MCP → Adicionar novo servidor MCP global):
Servidor hospedado:
{
"mcpServers": {
"gtm-mcp-server": {
"url": "https://gtm-mcp.stape.ai/mcp"
}
}
}
Uma janela do navegador abre para o fluxo OAuth do Google na primeira vez que uma ferramenta é usada.
CLI local:
{
"mcpServers": {
"gtm-mcp-server": {
"command": "npx",
"args": ["-y", "google-tag-manager-mcp-server"],
"env": {
"GOOGLE_SERVICE_ACCOUNT_KEY": "{\"type\":\"service_account\", ... }"
}
}
}
}
Antigravity
⬇️ Clique para expandir ⬇️
O suporte OAuth próprio do Antigravity para servidores HTTP remotos ainda não entrega um token de forma confiável ao servidor (antigravity-cli#25), então use mcp-remote para o servidor hospedado aqui também. Adicione isto a ~/.gemini/config/mcp_config.json (global) ou .agents/mcp_config.json (local ao workspace) — acessível pelo painel de agentes do editor via … → MCP Servers → Manage MCP Servers → View raw config:
Servidor hospedado:
{
"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
⬇️ Clique para expandir ⬇️
- No ChatGPT, ative o modo Desenvolvedor: Configurações → Apps e Conectores → Configurações avançadas → Modo Desenvolvedor.
- Vá para Configurações → Conectores → Criar e defina a URL do servidor como
https://gtm-mcp.stape.ai/mcp. - Defina Autenticação como OAuth e conclua o login do Google na janela do navegador que abrir.
O ChatGPT só alcança servidores pela internet pública; ele não pode iniciar um processo local — então não há opção de CLI local aqui, apenas o servidor hospedado.
Outros clientes MCP
⬇️ Clique para expandir ⬇️
Qualquer outro cliente compatível com MCP que espere uma configuração no estilo stdio command/args pode usar o mesmo bloco mcp-remote para o servidor hospedado:
{
"mcpServers": {
"gtm-mcp-server": {
"command": "npx",
"args": [
"-y",
"mcp-remote",
"https://gtm-mcp.stape.ai/mcp"
]
}
}
}
Ou a CLI local diretamente, com suas credenciais:
{
"mcpServers": {
"gtm-mcp-server": {
"command": "npx",
"args": ["-y", "google-tag-manager-mcp-server"],
"env": {
"GOOGLE_SERVICE_ACCOUNT_KEY": "{\"type\":\"service_account\", ... }"
}
}
}
}
Solução de problemas
Limite de comprimento do nome do servidor MCP
Alguns clientes MCP (como o Cursor AI) têm um limite de 60 caracteres para o comprimento combinado do nome do servidor MCP + nome da ferramenta. Se você usar um nome de servidor mais longo em sua configuração (por exemplo, gtm-mcp-server-your-additional-long-name), algumas ferramentas podem ser filtradas.
Para evitar esse problema:
- Use nomes de servidor mais curtos em sua configuração MCP (por exemplo,
gtm-mcp-server)
Limpando o cache MCP
Se você estiver conectando por meio de mcp-remote (Antigravity ou Claude Desktop configurado dessa forma), ele armazena todas as informações de credenciais dentro de ~/.mcp-auth (ou onde seu MCP_REMOTE_CONFIG_DIR aponta). Se você estiver tendo problemas persistentes, tente executar:
rm -rf ~/.mcp-auth
Em seguida, reinicie seu cliente MCP.
Teste suas alterações localmente
Qual fluxo de trabalho você precisa depende do que você alterou. A maioria das alterações está na primeira categoria — recorra à segunda apenas se estiver mexendo no próprio Worker.
Alterações em packages/core ou packages/cli
Esta é a lógica das ferramentas em si (esquemas, chamadas à API do GTM, tratamento de erros) — quase tudo que você corrigiria ou adicionaria está aqui. Você não precisa de um cliente OAuth do Google Cloud nem de configuração do Worker: compile a partir do código-fonte e execute a CLI diretamente com credenciais que você já possui.
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
Aponte seu cliente MCP para o build local em vez de npx — mesmas opções de credenciais do exemplo da CLI local do Claude Desktop acima; um token de acesso do OAuth Playground é a maneira mais rápida de testar uma única alteração:
{
"mcpServers": {
"gtm-mcp-local": {
"command": "node",
"args": ["/absolute/path/to/google-tag-manager-mcp-server/packages/cli/dist/index.js"],
"env": {
"GOOGLE_ACCESS_TOKEN": "..."
}
}
}
}
Consulte o README da CLI para todas as opções de credenciais.
Alterações em apps/worker
Necessário apenas para o código do próprio servidor hospedado: o fluxo OAuth, roteamento, tratamento de sessão, as páginas de aprovação e status. Isso executa esse código em sua própria máquina com suas próprias credenciais OAuth do Google Cloud em vez de gtm-mcp.stape.ai.
1. Configure um cliente OAuth do Google Cloud
- No Google Cloud Console, crie ou selecione um projeto e ative a API Tag Manager.
- Vá para APIs e Serviços > Tela de consentimento OAuth e configure-a (Externo é suficiente). Enquanto o aplicativo estiver no status de publicação Teste, apenas contas listadas como usuários de teste podem fazer login.
- Vá para Público, em Usuários de teste adicione sua própria conta do Google.
- Vá para APIs e Serviços > Credenciais > Criar credenciais > ID do cliente OAuth, tipo Aplicativo da web.
- Em URIs de redirecionamento autorizados, adicione
http://localhost:8788/callback. (Você pode deixar Origens de JavaScript autorizadas vazio — este fluxo é apenas no lado do servidor, nenhum JS do navegador chama o Google diretamente.) - Salve e copie o ID do cliente e o Segredo do cliente gerados.
2. Configure as variáveis de ambiente locais
Copie o arquivo de exemplo e preencha os valores da etapa 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 é ignorado pelo git — é usado apenas localmente e nunca é commitado.
3. Inicie o servidor
npm install
npm run build
npm run dev
npm run build compila o pacote principal contra o qual o Worker é empacotado; npm run dev inicia o Worker em http://localhost:8788.
4. Aponte seu cliente MCP para o servidor local
Os conectores personalizados do Claude Desktop precisam de uma URL publicamente acessível, então mcp-remote é a única opção para apontar para localhost:
{
"mcpServers": {
"gtm-mcp-server-local": {
"command": "npx",
"args": ["-y", "mcp-remote", "http://localhost:8788/mcp"]
}
}
}
Reinicie o Claude Desktop. Uma janela do navegador abrirá para o fluxo OAuth do Google; faça login com a conta que você adicionou como usuário de teste na etapa 1.
Observação: se você já se conectou ao servidor hospedado (ou alterna entre local e hospedado), limpe o cache do mcp-remote primeiro (consulte Solução de problemas acima) e reinicie completamente seu cliente MCP; caso contrário, ele pode reutilizar uma conexão obsoleta/em cache.
Publicação
Versões e changelogs são gerenciados com Changesets. Junto com uma alteração que deve ser publicada, adicione:
npm run changeset
Ao mesclar em main, o fluxo de trabalho de publicação abre um PR "Version Packages"; mesclar esse PR publica no npm, primeiro o pacote principal e depois a CLI que depende dele. O Worker é privado e nunca é publicado — ele é implantado a partir de main a cada push.
Desenvolvimento
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
Pull requests executam tudo acima mais uma verificação do bundle do Worker e sinalizam alterações em um pacote publicado que chegam sem um changeset.
Ambos @modelcontextprotocol/sdk e agents estão fixados em versões exatas no apps/worker. O SDK identifica os esquemas de ferramentas com instanceof, então todo o workspace precisa resolver uma única cópia, e os lançamentos do agents fixam a versão do SDK contra a qual foram compilados. Atualize-os juntos e faça a implantação com cuidado.
Recursos úteis
Código aberto
O MCP Server para Google Tag Manager é desenvolvido e mantido pela Stape Team sob a licença Apache 2.0.