← всі звіти · google-ads-mcp-vs-our-stack-2026-05-01.md

Google Ads MCP vs наш стек — оцінка інтеграції

Дата: 2026-05-01 Автор: Claude (research) Контекст: Сергій побачив google-marketing-solutions/google_ads_mcp у звіті GitHub TOP-20 і питає, чи варто інтегрувати в ad-analytics-hub.


TL;DR

google_ads_mcp — це MCP-сервер на Python 3.12 від команди Google Marketing Solutions, який дозволяє LLM (Gemini CLI / Claude / Cursor) робити GAQL-запити та мутації до Google Ads API напряму через OAuth (user credentials + developer_token). Це НЕ заміна нашому ETL — це інтерактивний layer для агентів, що доповнює Search Campaign Builder. Рекомендація — варіант Б (доповнює стек), інтегрувати ПІСЛЯ того, як Сергій завершить OAuth-setup для Search Campaign Builder v2 (бо вони потребують ОДНІ Й ТІ САМІ credentials: client_id + client_secret + refresh_token + developer_token). Інтеграція MVP — 0.5–1 робочий день після того, як OAuth готовий. ⚠️ Офіційний дисклеймер репо: «NOT an officially supported Google product, experimental, not for production».


Що таке google_ads_mcp

Репозиторій: https://github.com/google-marketing-solutions/google_ads_mcp Ліцензія: Apache 2.0 Зрілість: 189 stars, 58 forks, останній реліз v0.6.4 (на момент звіту) Статус: experimental, не production-grade (явний дисклеймер у README)

Тех-стек

Як підключається до Google Ads API

Через user OAuth + developer_token — стандартна схема google-ads-python SDK. У домашній директорії потрібен файл google-ads.yaml:

client_id: ...
client_secret: ...
refresh_token: ...
developer_token: ...
login_customer_id: ...   # optional, recommended (для MCC)

Service Account — НЕ підтримується (типове обмеження Google Ads API: SA працює тільки для Workspace-доменних акаунтів через delegation, що нерелевантно для рекламних кабінетів масового користувача).

MCC підтримується через login_customer_id — це той самий механізм, що ми вже плануємо у Search Campaign Builder v2.

Які операції підтримує

Read-only (завжди увімкнено):

Mutation (вимкнено за замовчуванням, вмикається ADS_MCP_ENABLE_MUTATIONS=true):

⚠️ У README немає згадок про:

Env vars

Як запускається


Наш стек зараз (рекап)

Компонент Метод Тригер
MCC CSV downloader VNC + cookies (/srv/passepartout/google/cookies-google-ads.json) cron 0 3 * * *
BigQuery ad-analytics-hub.ad_data SA ad-pipeline-worker@, ключ bigquery-sa.json cron-ETL з CSV
Daily Delta Monitor BigQuery → Notion алерти cron 30 4
Search Campaign Builder v2 Google Ads API (google-ads SDK) через OAuth 🔴 OAuth setup чекає Сергія (Client ID + Secret з GCP ad-analytics-hub, Desktop app type)
Looker Studio Cookies-сесія manual / scheduled email
Google Ads Crew (5 агентів) Gemini CLI, аналіз CSV-даних manual run

Архітектура: batch ETL (cookies) → BigQuery → дашборди / алерти. Інтерактив через LLM — поки що тільки на cached даних, не на live API.


Порівняльна таблиця

Аспект Наш стек (зараз) google_ads_mcp
Метод підключення кабінетів Cookies через VNC (MCC dashboard CSV) + (планується) Google Ads API через OAuth Google Ads API через OAuth (google-ads-python)
Авторизація Cookies для CSV; Service Account для BigQuery; OAuth для Search Builder (todo) User OAuth: client_id + client_secret + refresh_token + developer_token
Хто ініціює запит Cron (3:00, 3:30, 4:30) — батчевий ETL LLM (Gemini/Claude) у real-time, через MCP-stdio
Read / Write Read-only (CSV download); Search Builder — read keywords (read-only KeywordPlanIdeaService) Read GAQL завжди; Write (create campaign/budget/ad group/ad/keyword) опційно
MCC support Так (через MCC dashboard у браузері) Так (через login_customer_id у yaml)
Latency T+1 день (нічний cron) Real-time (секунди — пряма API)
Витрати на operational support Cookies протухають → Сергій логиниться руками періодично; VNC моніториться Refresh-токен живе довго (роки), мінімум support; ризик — invalid_grant при відкликанні доступу
Глибина даних Тільки те, що Google показує у MCC dashboard CSV (стандартні стовпці) Усе, що віддає Google Ads API — кастомні GAQL-запити, segments, keyword_view, search_term_view, etc.
Інтеграція з n8n / REST CSV у файлах + BigQuery (n8n легко читає) Stdio MCP only — для n8n потрібна обгортка (FastAPI wrapper або Gemini CLI як runner)
Production-readiness Працює, але fragile (cookies) Experimental per disclaimer; коду 189★, малий community
Транспорт HTTP (CSV download) + BigQuery API stdio (subprocess)
Vendor lock-in Низький (CSV — універсальний формат) Низький (sdk google-ads — open source, можна переписати на власні скрипти за 1 день)

Висновок і рекомендація

Варіант Б — «Доповнює частину нашого стеку, варто інтегрувати, але не зараз»

Що доповнює

  1. Інтерактивний доступ для Google Ads Crew (5 Gemini-агентів). Зараз вони аналізують CSV-знімки T-1. Через MCP вони зможуть на льоту запитати «покажи топ-10 search terms за вчора по кампанії X» — без чекати наступного cron-runу.
  2. Розширення Search Campaign Builder v2. Той самий OAuth-токен, той самий SDK — після Builder ми отримуємо «безкоштовно» можливість read-будь-яких GAQL-запитів через MCP.
  3. Заміна частини логіки Crew, що пише GAQL вручну. MCP уже містить «вбудовану документацію GAQL» — це знижує % галюцинацій агентів при складанні запитів.

Що НЕ замінить

Чому НЕ зараз (блокери)

  1. 🔴 OAuth ще не настроєний — Сергій повинен зробити Client ID + Secret + refresh-token у GCP ad-analytics-hub (Desktop app type). Це блокер №1 для Search Builder, і той самий блокер для MCP.
  2. Developer token approval level невідомий — для боєвих API-викликів треба Basic/Standard token. Це окремий запит у Google Ads (1–2 тижні очікування). Без нього MCP працює тільки в test-account режимі.
  3. Experimental disclaimer — Google прямо каже «не для production». Для R&D / Crew-агентів це OK, для бойових мутацій (create campaign) — ні.

Чому ВАРТО (плюси)


План інтеграції (якщо приймемо)

Передумови (блокер — зараз чекає Сергія)

Етап 1 — MVP (read-only) — 0.5 дня

  1. apt install pipx; pipx install uv на VPS.
  2. git clone https://github.com/google-marketing-solutions/google_ads_mcp /srv/tools/google-ads-mcp.
  3. cd /srv/tools/google-ads-mcp && uv pip sync.
  4. Скопіювати yaml: cp /srv/passepartout/google/google-ads.yaml ~/.google-ads.yaml (або через GOOGLE_ADS_CREDENTIALS=/srv/passepartout/...).
  5. Smoke-test: uv run -m ads_mcp.server → у Claude Code прописати mcpServers запис.
  6. Тестовий запит: «list campaigns for customer X» → перевірити, що MCC login_customer_id працює.
  7. Підключити до Google Ads Crew (5 Gemini-агентів) як додатковий tool.

Етап 2 — інтеграція в Crew workflow — 0.5 дня

  1. Оновити промпти Google Ads Crew: «якщо потрібна свіжа цифра — викликай MCP gaql_query, не CSV».
  2. Додати приклади GAQL у Crew system prompt.
  3. Прогнати на 7 брендах, порівняти точність vs CSV-only baseline.

Етап 3 (опційно, через 2–4 тижні) — mutations

Ризики

Ризик Митigation
Refresh-token відкликано (invalid_grant) Моніторинг + alert у Notion при першій помилці
Experimental status — breaking changes у v0.7+ Pin до v0.6.4, оновлювати свідомо
Розкриття developer_token yaml у passepartout з restrictive perms (600)
Gemini галюцинує GAQL → 400 помилка OK, не data-loss; tracing у логах
Quota Google Ads API Basic token = 15k operations/day; для read-only нашої скейли вистачить

Питання до Сергія

  1. Коли плануєш зробити OAuth-setup для Search Campaign Builder v2? Це блокер №1 і для MCP теж. Якщо в найближчі 2 тижні — інтегруємо MCP одразу за ним. Якщо ні — переносимо MCP у backlog.
  2. Developer_token: ти вже подавав запит на Basic approval? Без нього MCP працює тільки у test-режимі (фейкові кампанії).
  3. Чи треба підключити MCP до n8n / Pediatric News? Якщо так — потрібна додаткова FastAPI-обгортка (≈ +0.5 дня). Якщо тільки для Claude Code / Gemini Crew — stdio достатньо.
  4. Mutations enable чи ні? Моя рекомендація — НЕ вмикати; create-кампаній лишаємо за Search Builder v2 з review-gate.
  5. Хостити MCP на VPS чи на Сергієвому laptop? Stdio запускається там, де клієнт. Для Claude Code на VPS — на VPS. Для Gemini CLI у Сергія локально — у нього.

Альтернативи, які варто згадати

MCP займає унікальну нішу: real-time Google Ads API для LLM-агентів, без власного API-коду.