Servidor MCP (Model Context Protocol) que transforma qualquer agente de IA em um gestor completo de trafego e performance para Google Ads.
Suporta o fluxo completo: analise de performance, criacao de campanhas (Search, Display, Shopping, PMax, Demand Gen; Video só leitura/relatório — a API não cria nem edita campanhas de Vídeo), gestao de budget, controle de status, audiencias, extensoes de anuncio, catalogo de produtos e conversoes.
Funciona em modo local (stdio) e remoto (HTTP/SSE), com suporte a deploy no Railway.
Requisitos
Node.js 20+
Conta Google Ads com acesso MCC (Manager)
Token OAuth 2.0 com escopo https://www.googleapis.com/auth/adwords (as tools da Data Manager API — upload_offline_conversions_data_manager, get_data_manager_request_status — pedem também https://www.googleapis.com/auth/datamanager no consentimento; service account já pede os dois)
Projeto Google Cloud com a Google Ads API ativada e nivel de acesso Explorer, Basic ou Standard. Desde 09/09/2026 o developer token foi descontinuado: o acesso e do projeto Cloud dono do OAuth client (ou da service account) — peca o nivel na pagina "Google Ads API Overview" do projeto. check_api_access diagnostica a configuracao.
Variaveis de ambiente
Variavel
Obrigatorio
Descricao
GOOGLE_ADS_CREDENTIALS_PATH
Sim (ou uma alternativa abaixo)
Caminho para JSON com OAuth credentials (token, refresh_token, client_id, client_secret)
GOOGLE_ADS_CREDENTIALS_JSON
Alternativa hospedada
JSON OAuth completo fornecido por secret do ambiente. Mutuamente exclusivo com GOOGLE_ADS_CREDENTIALS_PATH; refresh ocorre apenas em memória
Chave JSON de service account (JWT assinado localmente). O e-mail da service account e adicionado como usuario da conta/MCC no Google Ads — o acesso nao depende da conta de um funcionario nem de 2SV
GOOGLE_ADS_DEVELOPER_TOKEN
Nao
Descontinuado em 09/09/2026 — a API ignora o header e uma versao futura vai recusa-lo. So e enviado se definido; pode remover
GOOGLE_ADS_LOGIN_CUSTOMER_ID
Sim
ID da MCC (Manager account), sem hifens
GOOGLE_ADS_API_VERSION
Nao
Versao da API (default: v25 — v21 ja foi desligada, v22/v23 estao proximas do sunset)
MCP_API_KEY
Em qualquer modo HTTP
Chave de autenticacao (Authorization: Bearer). Obrigatoria sempre que PORT estiver definido — sem ela o endpoint aceitaria qualquer requisicao. Nao se aplica ao stdio
MCP_ALLOWED_HOSTS
Em qualquer modo HTTP
Hostnames aceitos, separados por vírgula e sem porta. Ativa proteção contra DNS rebinding
ALLOWED_CUSTOMER_IDS
Em qualquer modo HTTP
Escopo de contas. * = toda conta alcancavel pelo MCC do login (agencia/gestor com um MCC so). Ou uma lista nao vazia de IDs de 10 digitos separados por virgula (um cliente por servico). Ausencia ou vazio derruba o boot — vazio e engano de configuracao, nao curinga; e * nao se mistura com IDs. Em stdio segue opcional.
GOOGLE_ADS_READ_ONLY
Nao
Modo somente leitura (true/1). Remove as 206 tools mutáveis do catálogo e bloqueia mutações no cliente. Ausente mantém compatibilidade com o comportamento atual
GOOGLE_ADS_DRY_RUN
Nao
Dry-run (true/1). Envia validateOnly=true nos endpoints :mutate e nos uploads de conversão: a API valida o payload inteiro e devolve os mesmos erros de uma gravação real, sem alterar a conta. apply_recommendation/dismiss_recommendation não aceitam validateOnly e são recusados em dry-run (fail-closed). As criações (campanha com orçamento, asset groups, extensões, listas de negativas) vão numa operação atômica e são validadas inteiras. Só create_video_ad, create_batch_job, create_location_sync_asset_set e upload_customer_match_members ainda gravam em passos dependentes: em dry-run não validam o pedido inteiro (a API não devolve results em validateOnly) e a resposta diz o que ficou sem validar. Desligado por padrão
GOOGLE_ADS_TOOL_GROUPS
Nao
Publica so os grupos de tools listados (virgula): core (as 95 do nucleo) e as areas de Tools por área. O catalogo completo tem 345 tools e o tools/list ~640 KB; o core sozinho ~210 KB e cada area 9–31 KB. Ausente ou all = todas. Grupo desconhecido derruba o boot
PORT
Nao
Se definido, inicia servidor HTTP. Sem PORT, usa stdio
MCP_MAX_BODY
Nao
Modo HTTP: tamanho maximo do corpo de uma chamada (padrao 32mb, formato do express: 10mb, 500kb). Acima disso a resposta e um erro JSON-RPC; o corpo so e lido depois da checagem do MCP_API_KEY
Instalacao e uso
Modo local (stdio) — Cursor / Claude Code
git clone https://github.com/RaphizSanders/google-ads-mcp.git
cd google-ads-mcp
npm install
npm run build
Configure em ~/.claude.json (ou ~/.cursor/mcp.json):
Expor por HTTP exige MCP_API_KEY, MCP_ALLOWED_HOSTS e ALLOWED_CUSTOMER_IDS — o
processo recusa iniciar sem os tres, em modo de leitura ou de escrita. O modo stdio
(uso local no Cursor/Claude Code) nao passa por nenhuma dessas checagens.
URL do endpoint: https://<seu-app>.up.railway.app/mcp
Modo somente leitura
Para integrações analíticas, defina GOOGLE_ADS_READ_ONLY=true. Nesse modo:
tools/list publica somente as 139 tools classificadas como leitura;
as 206 tools de criação, edição, upload e exclusão não são registradas;
chamadas diretas à camada de mutação também são recusadas antes de qualquer acesso à API;
uma tool nova e ainda não classificada permanece bloqueada por padrão.
O modo é opt-in para não alterar deployments existentes. Em ambientes de cliente, ele exige
ALLOWED_CUSTOMER_IDS e credenciais do MCP. Valores inválidos para GOOGLE_ADS_READ_ONLY fazem o
processo falhar na inicialização, evitando configuração ambígua.
Quando o modo read-only roda por HTTP (PORT definido), MCP_API_KEY e MCP_ALLOWED_HOSTS
são obrigatórios. O processo recusa iniciar se qualquer um estiver ausente. Para hospedagem,
prefira GOOGLE_ADS_CREDENTIALS_JSON como secret write-only; o refresh token permanece somente
em memória e nunca é gravado no filesystem do container.
list_accounts filtra a descoberta pela allowlist quando o servidor está exposto por HTTP
(PORT definido). Aí a ausência ou lista vazia nunca significa wildcard: o processo recusa
iniciar e a guarda de cada tool também nega o acesso, como defesa em profundidade.
Em stdio o critério é outro, e de propósito: o processo é iniciado pelo próprio cliente com a
credencial dele, não há superfície de rede nem outro inquilino para vazar, e list_accounts é o
ponto de descoberta — o id que você precisaria colocar na allowlist é justamente o que se vem
buscar aqui. Por isso uma allowlist vazia mantém o significado original de "sem filtro". Passar
ALLOWED_CUSTOMER_IDS em stdio continua funcionando e restringe normalmente.
Tools (345 total — atualizado 2026-09-23)
As 95 do núcleo estão nesta seção; as 250 das áreas (segmentação, lances, negativas, conversões, PMax, Shopping, Demand Gen, públicos, diagnóstico, administração do MCC...) estão em Tools por área, com documentação em docs/tools/.
Descoberta de contas
Tool
Descricao
list_accounts
Lista contas-filho da MCC com nome, moeda, timezone, status
get_account_info
Detalhes de uma conta especifica
get_account_currency
Moeda da conta (ex: BRL)
Insights e analise
Tool
Descricao
get_campaign_performance
Metricas por campanha: spend, ROAS, conversoes, CTR, CPC, CPA — e se a campanha esta com AI Max (ai_max)
get_ad_group_performance
Metricas por ad group
get_ad_performance
Metricas por anuncio
get_keyword_performance
Metricas por keyword com quality score
get_shopping_products
Performance de produtos (Shopping/PMax)
get_device_breakdown
Metricas por dispositivo (Mobile, Desktop, Tablet, TV)
get_daily_trend
Tendencia diaria de metricas
get_geo_performance
Performance por localizacao geografica
get_search_terms
Termos de busca reais que acionaram anuncios, com a origem de cada termo (match_source: palavra-chave do anunciante, AI Max sem palavra-chave, AI Max broad match, DSA, PMax) e filtro por origem
get_purchase_conversions
Conversoes de COMPRA (filtra por categoria PURCHASE)
get_performance_alerts
Alertas: ROAS baixo, gasto sem conversao
get_ai_max_report
Relatorio do AI Max: termos vindos do AI Max com resumo por origem, combinacoes termo × landing page × titulo, e URLs finais do anunciante vs. escolhidas pela expansao de URL
compare_periods
Compara dois periodos com deltas absolutos e percentuais
get_change_history
Historico de alteracoes na conta
get_asset_group_performance
Metricas de asset groups (PMax)
get_asset_performance
Performance por asset: performance_label + metricas (RSA/Display) ou primary_status + metricas (PMax)
Criativos e assets
Tool
Descricao
get_ad_creatives
Detalhes de RSAs: headlines, descriptions, final URL
get_image_assets
Lista imagens da biblioteca de assets
get_video_assets
Lista videos da biblioteca
upload_image_asset
Upload de imagem (base64) para biblioteca
link_campaign_image_assets
Vincula imagens da biblioteca a uma campanha de Pesquisa como recurso de imagem (AD_IMAGE). Valida conta, campanha SEARCH e asset IMAGE; nao duplica nem reativa vinculo pausado
list_campaign_image_assets
Imagens vinculadas por campanha: URL, dimensoes/proporcao, status do vinculo, primary_status com motivos e situacao de analise/politica
upload_video_asset
Linkar video do YouTube como asset
GAQL (Query Language)
Tool
Descricao
run_gaql
Executa qualquer query GAQL — a tool mais flexivel
Criacao de campanhas
Tool
Descricao
create_campaign
Cria campanha (Search, Display, PMax, Demand Gen) com budget numa unica operacao atomica — orcamento e campanha, ou nenhum. Aceita TARGET_SPEND (Maximizar cliques) com cpcBidCeilingMicros; MANUAL_CPC sem Enhanced CPC (descontinuado em 31/03/2025). enableAiMax cria campanha de Pesquisa com AI Max ligado. Criada PAUSED.
Não suportado pela API: o Google Ads não cria nem altera campanhas de video via API (campaigns:mutate e adGroups:mutate recusam). A tool retorna erro explicativo sem tocar na conta. Video programatico = create_demand_gen_campaign. Campanhas de video existentes sao so leitura e relatorio pela API
create_shopping_campaign
Cria campanha Shopping com Merchant Center
create_demand_gen_campaign
Cria campanha Demand Gen
Ad Groups e Anuncios
Tool
Descricao
create_ad_group
Cria ad group (Search, Display, Shopping). Em campanha de CPC/CPM manual exige cpcBidMicros/cpmBidMicros — nunca cria grupo sem lance. Demand Gen vai para create_demand_gen_ad_group; PMax, create_asset_group; Vídeo é recusado (a API não cria)
update_ad_group
Edita nome, status, lances do grupo (cpcBidMicros, cpmBidMicros, targetCpaMicros) e a correspondencia de termos do AI Max (disableSearchTermMatching). Avisa lance muito baixo ou ignorado pela estrategia
create_ad
Cria RSA (Responsive Search Ad) com headlines e descriptions
create_responsive_display_ad
Cria ad responsivo de Display com imagens
create_video_ad
Tenta criar responsive video ad (YouTube) em ad group VIDEO_RESPONSIVE. A API trata campanhas de Video como so leitura: sem reserva a gravacao e recusada (MUTATE_REQUIRES_RESERVATION) e a tool explica o erro — para video por API use Demand Gen (create_demand_gen_ad). Pode deixar criado o asset YOUTUBE_VIDEO (inofensivo) antes da recusa
update_ad
Edita headlines, descriptions, final URL de um RSA existente
update_ad_status
Pausar ou ativar anuncio
Keywords
Tool
Descricao
create_keyword
Adiciona keyword a um ad group
remove_keyword
Remove keyword
update_keyword
Ajusta lance (cpcBidMicros), status (pausar/ativar) e URL final de uma palavra-chave sem apaga-la
add_negative_keyword
Adiciona keyword negativa
remove_negative_keyword
Remove negativas da campanha ou do grupo por ID (list_negative_keywords mostra o criterion_id) ou por texto + correspondencia. Exige confirm: true (sem ele, so a previa) — tirar negativa libera trafego
list_negative_keywords
Lista keywords negativas
create_shared_negative_list
Cria lista de negativos compartilhada entre campanhas
PMax — Asset Groups
Tool
Descricao
create_asset_group
Cria asset group com textos + imagens + videos
update_asset_group
Edita nome, status, final URL
list_asset_groups
Lista asset groups com ad_strength
set_listing_group_filter
Filtra produtos por marca, categoria (categoryId), tipo, canal, ID, custom attribute. Substitui a árvore numa requisição atômica; mesma dimensão em todos os filtros; com filtro de inclusão, o resto fica excluído
Targeting
Tool
Descricao
set_campaign_locations
Segmentacao geografica (pais, estado, cidade). Por padrao adiciona a existente; replace=true substitui (remove antes os criterios de LOCATION da mesma polaridade)
set_campaign_languages
Segmentacao por idioma em PMax, Display e Demand Gen. Em Pesquisa o Google removeu o idioma (set/2026): a tool recusa, e cleanup=true + confirm so remove criterios antigos
update_ad_group_targeting
Adiciona audiencia a ad group
add_placement
Adiciona placement (site, app, canal YouTube)
list_audience_segments
Lista audiencias disponiveis
create_audience_segment
Cria audiencia customizada por keywords/URLs
add_audience_signal
Adiciona sinal de audiencia ou search theme a asset group PMax
create_audience_from_lists
Cria Audience a partir de user lists existentes (para sinais PMax)
Bid Adjustments
Tool
Descricao
set_device_bid_adjustment
Ajuste de bid por dispositivo
set_location_bid_adjustment
Ajuste de bid por localizacao
set_age_bid_adjustment
Ajuste de bid por faixa etaria
set_gender_bid_adjustment
Ajuste de bid por genero
set_ad_schedule
Programacao por dia/hora
Gestao de campanha
Tool
Descricao
update_campaign
Edita nome, status, estrategia de lance (TARGET_SPEND/Maximizar cliques, MAXIMIZE_CONVERSIONS, MAXIMIZE_CONVERSION_VALUE, TARGET_IMPRESSION_SHARE, MANUAL_CPC) com seus parametros (teto de CPC, CPA/ROAS alvo, parcela de impressoes) e redes (networkSettings). So o que muda vai no updateMask
set_ai_max_settings
Liga/desliga o AI Max (Pesquisa e Shopping), personalizacao de texto, expansao de URL final, termos excluidos e restricoes de mensagem
Cria acao de conversao (WEBPAGE, UPLOAD, PHONE_CALL, AD_CALL, CLICK_TO_CALL)
update_conversion_action
Edita nome, status, categoria, contagem, atribuicao, valor e janelas de lookback
set_campaign_conversion_goals
Define quais categorias de conversao guiam o lance da campanha (biddable)
upload_offline_conversion
Importa conversoes offline por gclid/gbraid/wbraid
Planejamento e recomendacoes
Tool
Descricao
generate_keyword_ideas
Ideias de keywords com volume, concorrencia e faixa de CPC (Keyword Planner)
list_geo_targets
Busca geo target IDs por nome (para segmentacao e keyword planner)
list_recommendations
Recomendacoes do Google Ads com impacto estimado
apply_recommendation
Aplica recomendacoes (exige confirm: true)
dismiss_recommendation
Dispensa recomendacoes sem aplicar
Labels
Tool
Descricao
create_label
Cria label para organizacao
assign_label
Vincula label a campanha, ad group ou ad
list_labels
Lista labels da conta
Remarketing
Tool
Descricao
list_remarketing_lists
Lista listas de remarketing com tamanho, membership e status
create_remarketing_list
Cria lista rule-based (URL contains/equals + exclusoes). Suporta carrinho abandonado, visitantes de produto, etc.
update_remarketing_list
Edita nome, membership lifespan, descricao
Merchant Center
Tool
Descricao
list_merchant_centers
Lista Merchant Centers vinculados (fallback duplo: merchant_center_link + campaign.shopping_setting)
Tools por área (250 — módulos em src/tools/)
Além das 95 do núcleo (acima), cada área tem um módulo próprio e uma página com parâmetros, fluxos e limitações em docs/tools/. O grupo de cada área é o nome usado em GOOGLE_ADS_TOOL_GROUPS. L = leitura, E = escrita (aceita validateOnly).
Diagnóstico de acesso à Google Ads API. READ OPERATION — não altera nada.
get_account_settings
L
Configurações de conta: auto-tagging, tracking template, sufixo de URL final, relatório de chamadas,
get_gaql_fields
L
Metadados reais dos campos GAQL (GoogleAdsFieldService) — READ OPERATION, não lê dados de conta.
get_identity_verification
L
Verificação de identidade do anunciante: status (PENDING_USER_ACTION, PENDING_REVIEW, SUCCESS, FAILURE),
start_identity_verification
E
Inicia uma sessão de verificação de identidade do anunciante (programa ADVERTISER_IDENTITY_VERIFICATION)
update_account_settings
E
Altera configurações da conta (Customer): auto-tagging, tracking template, sufixo de URL final,
validate_gaql
L
Confere uma query GAQL contra os metadados reais da API ANTES de rodar (não executa a query nem lê a conta).
Administração do MCC: contas, vínculos, usuários, faturamento e edição em massa
Em HTTP com allowlist explícita, list_invoices só retorna uma fatura se todos
os seus orçamentos identificarem contas autorizadas. Uma fatura consolidada que
inclua outra conta, ou sem atribuição verificável, é recusada inteira: ocultar
nomes mas mostrar o total ainda revelaria dados financeiros externos ao escopo.
Não é calculada uma fatura parcial. O modo local/agência permanece compatível.
Diagnostico de campanha: config + tendencia + acao recomendada
customerId, campaignId
budget_optimization
Realocacao de budget baseada em ROAS
customerId
keyword_optimization
Otimizacao de keywords: quality score, match types, negativos
customerId
compare_periods
Compara performance entre dois periodos
customerId, datas
pmax_optimization
Otimizacao PMax: asset groups, produtos, sinais de audiencia
customerId, campaignId
search_terms_audit
Auditoria de termos: negativar irrelevantes, adicionar novos
customerId
creative_analysis
Analise de criativos: RSAs, headlines, fadiga
customerId
Compatibilidade com a Google Ads API (varredura 2026-09-09)
Enums e campos foram validados contra os protos oficiais da v25.
Item
Situacao
Versao default
v25. A v21 ja foi desligada; v22/v23 seguem respondendo mas estao proximas do sunset. Sobrescreva com GOOGLE_ADS_API_VERSION se precisar.
ConversionActionCategory
LEAD foi removido da API e SIGN_UP nao existe (o nome real e SIGNUP). As tools aceitam os nomes antigos como apelido e traduzem: LEAD → SUBMIT_LEAD_FORM, SIGN_UP → SIGNUP.
ConversionActionType
UPLOAD e PHONE_CALL nao existem no enum. Traduzidos para UPLOAD_CLICKS e WEBSITE_CALL. O tipo e IMUTAVEL apos a criacao.
AttributionModel
Os nomes reais tem prefixo: DATA_DRIVEN → GOOGLE_SEARCH_ATTRIBUTION_DATA_DRIVEN, LAST_CLICK → GOOGLE_ADS_LAST_CLICK. As tools aceitam os dois formatos. Os modelos baseados em regras (first click, linear, time decay, position based) foram desligados pelo Google em 2023 e nao sao mais oferecidos.
data_driven_model_status
Campo OUTPUT_ONLY — nunca e enviado no mutate (enviar causava erro na criacao).
contains_eu_political_advertising
Enviado como nome do enum (DOES_NOT_CONTAIN_EU_POLITICAL_ADVERTISING) em vez do numero 3.
asset_group_asset.performance_label
Nao existe (o rotulo LOW/GOOD/BEST so existe em ad_group_ad_asset_view). Em PMax o sinal equivalente e primary_status, e o recurso aceita metricas + segments.date.
recommendation.impact
Selecionavel como mensagem inteira; as sub-paths (impact.base_metrics.clicks) nao existem no metadata de campos.
Demais enums
Varredura completa dos 396 enums da v25: nenhum outro valor invalido no projeto.
PMax Creation — Notas Importantes (API v23+)
A criacao de campanhas Performance Max na API v23 tem particularidades criticas:
Regra
Detalhe
Brand Guidelines
Auto-ativado em PMax novas. NAO pode ser desativado via API.
Business Name + Logo
Devem ser linkados como campaignAssets (nivel campanha), NAO no asset group. O asset group herda automaticamente.
Batch atomico
Usar googleAds:mutate para criar budget + campaign + campaignAssets + assetGroup + assetGroupAssets em uma unica chamada. Evita race conditions.
salesCountry
DEPRECATED na v23. Usar feedLabel (ex: "BR").
containsEuPoliticalAdvertising
Campo obrigatorio. Usar enum numerico 3 (nao boolean ou string).
Listing group filter
Para PMax Shopping, criar separadamente apos o batch principal (problema de caseValue no batch).
Audience signals
Usar add_audience_signal apos criacao. Para remarketing, usar list_remarketing_lists para encontrar listas populadas, create_audience_from_lists para criar Audience, e depois linkar como signal.
set_ai_max_settings (enableAiMax + controles)
→ update_ad_group (disableSearchTermMatching nos grupos que nao devem expandir, ex.: marca)
→ get_ai_max_report (termos, combinacoes, landing pages)
O que cada controle faz:enableAiMax liga o AI Max; textCustomization e finalUrlExpansion sao as automacoes TEXT_ASSET_AUTOMATION e FINAL_URL_EXPANSION_TEXT_ASSET_AUTOMATION; termExclusions (ate 25, 30 caracteres) e messagingRestrictions (ate 40, 300 caracteres) orientam os textos gerados. As duas listas substituem a atual ([] limpa).
Escrita minima: o updateMask leva so os campos que mudam; valor igual ao atual nao e reenviado; os tipos de automacao nao pedidos sao preservados. Nao mexe em orcamento, lances, segmentacao nem palavras-chave.
Com AI Max ligado a API trata as palavras-chave como correspondencia ampla e trava keyword_match_type. Em Shopping, a personalizacao de texto vem sempre ligada com o AI Max.
Leitura dos relatorios:search_term_view com match_source e ai_max_search_term_ad_combination_view se sobrepoem — nunca some metricas entre elas. Termos de baixo volume ficam fora por privacidade, entao os totais ficam abaixo do total da campanha.
Imagens em campanha de Pesquisa
upload_image_asset (sobe cada imagem; guarde o resource name)
→ link_campaign_image_assets (campaignId + assetResourceNames)
→ list_campaign_image_assets (confirma vinculo e analise)
O que o vinculo faz: cria um campaignAsset com fieldType: AD_IMAGE e status: ENABLED. Nao mexe em campanha, orcamento, lances nem segmentacao.
Validacoes antes de gravar: a campanha existe na conta e e SEARCH; cada imagem existe na conta e e do tipo IMAGE; resource name de outra conta e recusado sem chamar a API.
Idempotente: imagem ja vinculada nao e recriada; vinculo PAUSED continua pausado (a tool nunca reativa). O retorno separa criados, ja existentes e erros por imagem.
Testar em producao sem gravar: rode com GOOGLE_ADS_DRY_RUN=true — a API valida o vinculo (validateOnly) e nada e gravado.
Regras do Google: ao menos uma imagem quadrada 1:1 (min. 300x300); paisagem 1.91:1 opcional (min. 600x314); ate 20 imagens por campanha; a conta precisa ser elegivel a imagens em Pesquisa. Vinculo novo fica PENDING / ASSET_UNDER_REVIEW e so veicula depois de aprovado — list_campaign_image_assets mostra isso e avisa quando falta imagem quadrada.
Video programatico: create_demand_gen_campaign → create_demand_gen_ad_group → create_demand_gen_ad
(upload_youtube_video sobe o arquivo para o YouTube, se preciso).
Campanhas VIDEO existentes: so leitura e relatorio (get_video_performance, get_placement_report) —
a API nao cria nem altera campanhas de Video.
Shopping
create_shopping_campaign (merchantId) → create_ad_group
→ Produtos puxados automaticamente do Merchant Center
Tudo PAUSED por padrao: Todas as tools de criacao criam objetos pausados.
Budgets em MICROS: R$1,00 = 1.000.000 micros. Descricoes explicitas.
MCP_API_KEY: Protege o endpoint HTTP.
ALLOWED_CUSTOMER_IDS: Escopo de contas. Obrigatoria sob HTTP (ausente/vazia derruba o boot), opcional em stdio. Use * para servir todo o MCC (agencia) ou a lista de IDs para isolar um cliente por servico.
GOOGLE_ADS_DRY_RUN: Valida payloads de escrita contra a API sem gravar (validateOnly).
validateOnly por chamada: toda tool de escrita aceita validateOnly: true — a API valida a operacao inteira (validate_only) e nada e gravado; a resposta comeca com VALIDATE-ONLY. As criacoes de campanha (Search, Display, Shopping, Demand Gen, PMax), asset groups, extensoes e listas de negativas vao num unico googleAds:mutate atomico com IDs temporarios, entao o validateOnly valida o pedido inteiro. Recusam o modo, sem enviar nada: endpoints sem validate_only (apply_recommendation, dismiss_recommendation) e as poucas tools que ainda gravam em passos dependentes (create_video_ad, create_batch_job, create_location_sync_asset_set, upload_customer_match_members).
Delete com confirmacao: confirm: true obrigatorio para remocao.
OAuth auto-refresh: Token renova automaticamente, persiste no arquivo.