ga4-mcp-worker
ga4-mcp-worker
«Только чтение» — MCP-сервер Google Analytics 4, работающий на Cloudflare Workers, чтобы коллеги могли запрашивать GA4 через Claude без каких-либо локальных установок — без Python, без gcloud, без ADC-файла, а с этой версии ещё и без общего пароля. Подключение теперь означает: нажать «Connect», войти со своим аккаунтом Google и задавать вопросы по GA4 от своего имени.
Он повторяет набор инструментов официального googleanalytics/google-analytics-mcp stdio-сервера, но вызывает REST API Google Analytics напрямую, потому что клиентские библиотеки Google не работают в среде выполнения Workers.
Сначала прочтите это: docs/IMPLEMENTATION-NOTES.md § Что проверено, а что нет. Сквозная проверка вживую уже есть, но несколько участков (endpoints v1alpha, пагинация) пока покрыты только фикстурами.
Режим авторизации: персональный OAuth
Каждый сотрудник входит под своим аккаунтом Google. Никакого общего секрета и никакого единого учётного Google-токена, на который полагаются все, — нет. Полный дизайн и отличие от отменённого режима общего секрета см. в PRODUCTION.md § 1 и docs/PRODUCTION-PART2.md § 8. Вход ограничен аккаунтами Google @zuddl.com (ALLOWED_EMAIL_DOMAIN в wrangler.toml).
GOOGLE_CLIENT_ID и GOOGLE_CLIENT_SECRET по-прежнему обязательны — Google требует, чтобы каждое приложение, запрашивающее данные пользователя, было зарегистрировано, и эти два значения и есть регистрация, они задаются один раз при деплое. Исчезли вручную сгенерированный refresh-токен и пароль, который коллеги вводили раньше.
Документация
Файл | Назначение |
Первый деплой, объясняющийся с нуля — без предварительных знаний об OAuth. Создание приложения Google, деплой, тестирование, подключение Claude. Начните тут. | |
PRODUCTION.md (+ часть 2) | Модель учётных данных, мониторинг, квоты GA4, ротация секретов, локальная разработка, runbook-процедуры, чек-лист безопасности, внутреннее устройство OAuth. Читать перед масштабным развёртыванием. |
Подводные камни, которые эта реализация корректно обходит, что проверено и что нет, а также стоимость эксплуатации. | |
| MCP-сервер: инструменты, fetch-хелперы, нормализатор, роутер. Обильно прокомментирован. |
| Обработчик «входа через Google» — |
| Конфигурация воркера. Обратите внимание на |
| Шаблон для локальной разработки. Скопируйте в |
Related MCP server: GA4 MCP Server
Наши свойства GA4
Property ID | Название | Measurement ID | Статус |
| Новое свойство GA4 веб-сайта zuddl |
| Каноническое — используйте это, если не указано иное. |
| legacy | — | Устаревшее. Только исторические данные; для текущей отчётности не использовать. |
| legacy | — | Устаревшее. Только исторические данные; для текущей отчётности не использовать. |
Сервер не привязан к property: каждый инструмент принимает property_id, и это может быть как 314138239, так и "properties/314138239". Если значение не передано, используется DEFAULT_PROPERTY_ID из wrangler.toml, который указывает на каноническое свойство, чтобы коллегам не приходилось запоминать номер. Вызовите get_account_summaries, чтобы перечислить всё, что реально доступно данным учётным данным.
Инструменты (9)
Инструмент | Метод и endpoint | Назначение |
|
| Рабочая лошадка. Историческая отчётность. Полный набор параметров. |
|
| Последние ~30 минут. Отдельная и более компактная схема. |
|
| Upорядоченные шаги и отсев пользователей. |
|
| Конверсии, расходы на рекламу, ROAS, атрибуционное моделирование. Ограниченный список полей. |
|
| Пользовательские поля с доступным для запросов |
|
| Всё, что эти учётные данные могут прочитать. Без аргументов. |
|
| Часовой пояс, валюта, уровень обслуживания. Часовой пояс объясняет расхождения дат. |
|
| Датированные заметки, объясняющие всплески и падения. |
|
| Связанные аккаунты Google Ads. Подтверждает, могут ли метрики стоимости рекламы содержать данные |
run_report принимает полный официальный набор параметров: property_id, date_ranges (это список, поэтому сравнение периодов можно делать в одном запросе), dimensions, metrics, dimension_filter, metric_filter, order_bys, limit, offset, currency_code, return_property_quota. run_realtime_report принимает ту же форму, за вычетом date_ranges и currency_code.
Описания инструментов намеренно длинные — они содержат рабочие примеры для каждой формы фильтра и являются единственным местом, где модель узнает формат запроса. Редактирование их следует рассматривать как изменение поведения программы.
Endpoint’s
Endpoint | Авторизация | Назначение |
| OAuth bearer-токен | MCP-соединение (Streamable HTTP). |
| — | OAuth-эндпоинты, реализованные через |
| — | Сюда Google перенаправляет после входа. Не предназначен для непосредственного открытия человеком. |
| нет | Проверка состояния. |
| нет | простой текстовый статус-баннер, показывающий текущий режим авторизации. |
Всё остальное возвращает 404.
/healthв OAuth-режиме доказывает меньше. Нет единого общего секрета, который можно было бы проверить, поэтому200подтверждает только то, что регистрация приложения настроена и хранилище пользовательских разрешений (OAUTH_KV) доступно, а не что вход конкретного человека всё ещё действителен. Грант отдельного пользователя может истечь или быть отозванным, в то время как/healthостаётся зелёным. Это присуще персональной авторизации, а не недостаток.
Worker пишет одну строку журнала на каждый MCP-запрос, каждую отклонённую попытку авторизации, каждую ошибку инструмента и каждое срабатывание проверки health, плюс события уровня OAuth (oauth_authorise_redirect, oauth_authorised, oauth_domain_rejected и т. д.). Никакие токенные материалы не логируются никогда. Все запросы к Google API отправляют пользовательский User-Agent (ga4-mcp-server /1.0.0 (+cloudflare-workers)), чтобы использование квот было attributable.
Защита режима «только чтение»
Три независимых уровня, все на месте:
OAuth-scope — каждый токен (старый общий или новый персональный) запрашивается только с
https://www.googleapis.com/auth/analytics.readonlyи ничем иным (плюсopenid/emailдля идентификации в OAuth-режиме — см.src/google-oauth.ts, а эти разрешения не дают доступа к данным). Записи Google отклонит на своей стороне. Это настоящая гарантия. В SETUP-GUIDE.md на шагах показана проверка черезtokeninfo.Список разрешённых эндпоинтов — except regex, которое проверяется в обоих fetch-хелперах до любого сетевого вызова. Будущая правка, добавляющая пишущий эндпоинт, вызовет исключение, а не уйдёт по сети.
Нет мутирующих глаголов — в коде нет
PATCH,PUTилиDELETE. Вызововfetchровно три: выдача токена (POST),gaGet(GET) иgaPost(POST).
:runReport, :runRealtimeReport и :runFunnelReport — это HTTP POST, но, по сути, запросы: тело должно нести описание отчёта, потому что оно слишком велико для строки запроса. В GA4 ничего не создаётся и не изменяется.
Быстрые команды
npm installnpm run typecheck && npm run dry-runnpm run deploynpm run tailcurl -s https://ga4-mcp-worker.YOUR-SUBDOMAIN.workers.dev/healthЗадайте два секрета, которые нужны в любом режиме авторизации (вставляйте интерактивно — при передачи через пайп значения ломаются):
npx wrangler secret put GOOGLE_CLIENT_IDnpx wrangler secret put GOOGLE_CLIENT_SECRETПодключение из Claude Code — заголовки не нужны, так как вход происходит через браузер:
claude mcp add --transport http --scope user ga4 https://ga4-mcp-worker.YOUR-SUBDOMAIN.workers.dev/mcpЗатем в интерактивной сессии claude выполните /mcp, выберите ga4 и войдите с помощью Google.
Дополнительно
Подводные камни, покрытие тестами и эксплуатационные расходы: docs/IMPLEMENTATION-NOTES.md
Пошаговое руководство по первому развертыванию: SETUP-GUIDE.md → часть 2
Укрепление безопасности, мониторинг и руководство по OAuth: PRODUCTION.md → часть 2
This server cannot be deployed
Maintenance
Related MCP Connectors
GA4, Google Ads and Search Console in Claude. Read-only OAuth, multi-account for agencies.
Read-only Google Analytics 4 MCP server for AI assistants.
Hosted MCP server for GA4, Google Ads and Search Console. Google OAuth, nothing to install.
Hosted BigQuery MCP server for Claude, ChatGPT and Cursor, with each action switched per account.
Related MCP Servers
- AlicenseAqualityBmaintenanceConnects 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.101,541 PyPI243MIT
- AlicenseAqualityBmaintenanceConnects 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.748 PyPIMIT
- AlicenseNot gradedqualityDmaintenanceEnables 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
- FlicenseNot gradedqualityCmaintenanceEnables MCP clients to read Google Analytics 4 data, deployed as a Cloudflare Worker with service account authentication.2-