list_account_summaries
List every GA4 account you can access, with a summary of its properties. Start here to find the account_id and property_id the other tools need.
无需输入参数。

io.github.GermaniU由 GitHub 账号 GermaniU 发布v0.1.2更新于 Nov 7, 2026
Set up and audit site measurement: GA4, Search Console and PageSpeed. Read-only unless enabled.
本地 MCP 服务器,连接 GA4、Search Console 与 PageSpeed Insights:读取报表、审计 SEO 数据,并可选地完成站点测量配置。
Desktop only,通过 STDIO。 STDIO 服务会启动本地进程,因此需要 SourceWeft 桌面宿主。
参照 仓库 中的启动说明。
English · Español
Get a site's measurement ready end to end: GA4 + Search Console + PageSpeed, with optional, guarded writes. An open source Model Context Protocol server for Google Analytics 4 & Search Console. Most MCP servers for Google read your data; this one can also set it up: property, web stream, key events, custom dimensions, Search Console DNS verification, sitemap and a PageSpeed baseline — read-only until you say otherwise.
[License: MIT] [MCP] [Python] [CI] [PRs Welcome]
Tags: mcp-server · ga4 · google-analytics · search-console · seo · pagespeed · core-web-vitals · keyword-research · claude-code · cursor
Real run: psi_audit on a public site and bootstrap_site_measurement(apply=False) planning a new site. The demo script redacts the account ID.
Launching a site means the same chores every time: create the GA4 property and its web stream, mark the key events, register custom dimensions, add the domain to Search Console, publish a DNS TXT record, verify it, submit the sitemap, and record a PageSpeed baseline. ga4-seo-mcp turns that into one plan your agent shows you, and one confirmation.
Based on each project's README on 2026-10-19; "—" means we did not find it documented. Corrections welcome. Those projects go wider than this one (Bing, AdSense, WordPress, GEO audits…); this one goes deeper on setting up measurement.
This server is built and maintained by Germani Uicab. If you'd rather not run it yourself, ServerStack Solutions can get your GA4 + Search Console measurement ready: a written plan, property and key events configured, the DNS verification and sitemap in place, and a PageSpeed baseline — with a QA pass before handover.
Extras: optional keyword research with DataForSEO (exact long-tail volumes) and Google Ads Keyword Planner (free, bucketed volumes), with es-MX defaults that you can override.
1. Install uv 0.13.4 or newer — the client launches the server with uvx; nothing else to install.
2. Log in with the minimum scopes. The CLI prints the exact gcloud command for the toolsets you enable:
Run the printed command. Google blocks Analytics and Search Console scopes on gcloud's built-in OAuth client, so you need your own (a one-time, few-minute setup) or a service account — both are explained in docs/AUTH.md.
3. Check everything before connecting a client (read-only, changes nothing):
4. Add it to your client (Claude Code shown; others below):
Ask: "List my GA4 properties and show last week's sessions for the first one."
Enable only what you need with --toolsets (or GA4SEO_TOOLSETS). Default: admin,data,gsc,psi. Only the tools of active toolsets are registered, and the OAuth scopes follow.
Tool counts from the real registry: 24 with the defaults, 37 with --enable-writes, 8 with --toolsets data, 41 with every toolset and writes. The full list with descriptions is in docs/TOOLS.md (generated from the registry and checked in CI).
Prompts: audit_ga4_setup, seo_360_audit, portfolio_performance_digest and launch_site_measurement (the guided flow: plan → your confirmation → apply → DNS verification → sitemap → PageSpeed baseline).
bootstrap_site_measurementapply=False (default): a plan. Read-only and always registered. It finds the existing property and web stream by the site's domain, the key events and custom dimensions already declared, and the Search Console domain property, and lists what would be created.apply=True: executes the plan. Only works when the server runs with --enable-writes; otherwise it fails before touching anything. Idempotent: it skips what exists, so you can re-run it. Returns a step-by-step report with the measurement ID (G-…) and the DNS TXT token.sc_verify_site_dns) and the sitemap (sc_submit_sitemap) stay explicit follow-up steps: you have to publish the TXT record first.Defaults are safe for a single user on a laptop. Details and threat model: SECURITY.md.
--enable-writes (or GA4SEO_ENABLE_WRITES=1), tools that create, update, delete, submit or verify are not registered at all — the model cannot call what does not exist.readOnlyHint on reads, destructiveHint on deletes and updates, idempotentHint where repeating is harmless, openWorldHint everywhere. Clients that honor them can auto-approve reads and ask before writes.auth-command asks only for the scopes of your toolsets.--transport streamable-http): binds to 127.0.0.1, DNS-rebinding protection on, CORS off unless MCP_CORS_ORIGINS, and an optional bearer token MCP_AUTH_TOKEN (401 without it). Listening on 0.0.0.0 without a token prints a warning, and LAN clients need MCP_ALLOWED_HOSTS or the rebinding protection answers 421.chmod 600 file, and are never logged or returned in errors.Copy .env.example as a starting point.
Every client launches the server over stdio. Add --enable-writes to args only for the session where you actually want to set up a site.
Claude Code
Claude Desktop (claude_desktop_config.json) and Cursor (~/.cursor/mcp.json)
VS Code (.vscode/mcp.json)
Docker (stdio). Mount your credentials file read-only — the ADC file from gcloud or a service account key — and run as your own user so the container can read a 0600 file:
HTTP (several clients sharing one server):
MIT. Not affiliated with or endorsed by Google. Google Analytics, Search Console and PageSpeed Insights are trademarks of Google LLC.
来源:README.md,提交 7c23c3c
List every GA4 account you can access, with a summary of its properties. Start here to find the account_id and property_id the other tools need.
无需输入参数。
List the GA4 properties under an account. Args: account_id: numeric account ID or 'accounts/123456789'. include_deleted: also return properties in the trash (soft-deleted, kept 35 days).
account_id必填include_deletedGet the full settings of a GA4 property (time zone, currency, industry, type).
property_id必填List the data streams (web, iOS, Android) of a GA4 property. Web streams include their measurement ID (G-XXXXXXX) and default URI.
property_id必填Get one data stream, including the measurement ID of a web stream.
stream_id必填property_id必填List the key events (formerly conversions) declared on a GA4 property.
property_id必填List the custom dimensions declared on a GA4 property, with their scope.
property_id必填List the links between a GA4 property and Google Ads accounts.
property_id必填Plan, and optionally apply, the full measurement setup of a website. With apply=False (default) nothing is changed: it detects what already exists for the site (GA4 property and web stream matched by the site's domain, key events, custom dimensions, Search Console domain property) and returns the steps that would run. Show this plan to the user and get explicit confirmation before calling apply=True. With apply=True (requires the server to run with --enable-writes) it creates only the missing pieces, skipping what exists, so it is safe to re-run. It returns a step-by-step report with the GA4 measurement ID (G-...) and the DNS TXT token for Search Console. DNS verification and sitemap submission stay manual follow-up steps (sc_verify_site_dns, sc_submit_sitemap) because the TXT record must be published first. Args: site_url: the site, e.g. 'https://example.com'. account_id: GA4 account that owns (or will own) the property; see list_account_summaries. property_display_name: name for a new property; also used to find an existing one. time_zone: IANA time zone for a new property, e.g. 'America/Mexico_City'. currency_code: ISO 4217 currency for a new property, e.g. 'USD'. key_events: event names to mark as key events, e.g. ['generate_lead']. custom_dimensions: parameters to register as custom dimensions. apply: False = plan only (default); True = execute the plan.
applysite_url必填time_zone必填account_id必填key_eventscurrency_code必填custom_dimensionsproperty_display_name必填Run a flexible GA4 report. Args: property_id: numeric ID or 'properties/123456789'. metrics: e.g. ['sessions', 'activeUsers', 'keyEvents']. Catalog: https://developers.google.com/analytics/devguides/reporting/data/v1/api-schema#metrics dimensions: optional, e.g. ['date', 'sessionSource', 'pagePath']. Catalog: https://developers.google.com/analytics/devguides/reporting/data/v1/api-schema#dimensions date_start: 'YYYY-MM-DD', 'today', 'yesterday' or 'NdaysAgo' (e.g. '28daysAgo'). date_end: same formats as date_start. limit: maximum rows (default 25). order_by_metric: sort by this metric, e.g. 'sessions'. order_desc: sort descending (default True). Returns the dimension and metric names, the date range, row_count and the rows.
limitmetrics必填date_enddate_startdimensionsorder_descproperty_id必填order_by_metricRealtime report for the last 30 minutes. Useful to confirm that a new event fires in production right after a deploy. Args: metrics: default ['activeUsers']; 'eventCount' also works. dimensions: default ['eventName']; also 'unifiedScreenName', 'country', 'deviceCategory'.
limitmetricsdimensionsproperty_id必填Top pages by sessions, with active users, bounce rate and average session duration.
limitdate_enddate_startproperty_id必填Count of every event that fired, to audit what is actually being measured. Compare it with list_key_events to find key events that never fire.
limitdate_enddate_startproperty_id必填Top traffic sources (source / medium) with sessions, active users and conversions.
limitdate_enddate_startproperty_id必填Conversions and total users per event name: a summary of the active key events.
date_enddate_startproperty_id必填Core Web Vitals reported by your own site as GA4 events. Requires the site to send web-vitals events with the parameters `web_vital_metric` and `web_vital_rating`, both registered as event-scoped custom dimensions. For Google's field data use psi_field_data_only instead.
date_enddate_startproperty_id必填Summary metrics for several GA4 properties in one call. Returns sessions, active users, conversions, bounce rate and average session duration per property, plus the properties that failed and why. Args: property_ids: e.g. ['123456789', '987654321'].
date_enddate_startproperty_ids必填List the Search Console sites you can access. Each entry has `siteUrl` ('sc-domain:example.com' for domain properties or a URL prefix like 'https://example.com/') and `permissionLevel` ('siteOwner', 'siteFullUser', 'siteRestrictedUser' or 'siteUnverifiedUser').
无需输入参数。
Top search queries with clicks, impressions, CTR (%) and average position. Args: site_url: 'sc-domain:example.com' or 'https://example.com/', exactly as in sc_list_sites. date_start: 'YYYY-MM-DD'. date_end: 'YYYY-MM-DD'. Search Console data lags 2-3 days. limit: rows to return (max 25000). country: optional ISO 3166-1 alpha-3 code to filter by, e.g. 'mex' or 'usa'.
limitcountrydate_end必填site_url必填date_start必填Top pages in Google Search by clicks, with impressions, CTR (%) and average position.
limitdate_end必填site_url必填date_start必填Which search queries bring traffic to one specific page. Useful to decide which keywords to strengthen in that page's content.
limitdate_end必填page_url必填site_url必填date_start必填List the sitemaps submitted for a Search Console site, with errors and warnings.
site_url必填Run a PageSpeed Insights audit (Lighthouse lab test + CrUX field data) on a public URL. Takes 30-90 seconds. Without PAGESPEED_API_KEY the anonymous quota is small and Google may answer 429; set the key for regular use. Args: url: absolute public URL, e.g. 'https://example.com/'. strategy: 'mobile' (default) or 'desktop'. categories: subset of ['performance', 'accessibility', 'best-practices', 'seo']. Default: all four. Returns 0-100 category scores, lab Core Web Vitals (LCP, FCP, CLS, TBT, SI, TTFB) and, when Chrome has enough real-user traffic, CrUX p75 field data for the URL and its origin.
url必填strategycategoriesOnly the CrUX field data (real Chrome users, p75 over 28 days) for a URL and its origin. PageSpeed Insights still runs a performance-only Lighthouse pass, so expect 15-40 seconds. `overall_category` is FAST, AVERAGE or SLOW; it is null when the page has too little traffic.
url必填strategy已满足适用检查项的 90%
该评分衡量此收录条目的完整程度,依据注册中心条目、端点与公开来源计算得出。它不是对服务器本身的评价,也不表示服务器安全或当前可用:可连通性是带日期的检查结果,评分也不包含安装量或用户评价。
请在注册中心条目中声明凭据请求头,或保持端点能够响应探测,以便判定其认证方式。
uvx ga4-seo-mcp auth-command --client-id-file=oauth-client.json# gcloud auth application-default login --client-id-file=oauth-client.json --scopes=https://www.googleapis.com/auth/cloud-platform,https://www.googleapis.com/auth/analytics.readonly,https://www.googleapis.com/auth/webmasters.readonlyuvx ga4-seo-mcp doctor# [ok] credentials found: Credentials via Application Default Credentials# [ok] access token refreshed# [ok] token has the 2 scope(s) these toolsets need# [ok] admin: <n> account(s) visible on the first page# [ok] data: responded (<n> metrics in the schema)# [ok] gsc: <n> site(s) visible# [ok] psi: no Google login needed; PAGESPEED_API_KEY set# all checks passedclaude mcp add ga4-seo -- uvx ga4-seo-mcpbootstrap_site_measurement(site_url="https://example.com", account_id="123456789", property_display_name="Example", time_zone="America/Mexico_City", currency_code="USD", key_events=["generate_lead"], custom_dimensions=[{"parameter_name": "plan_type", "display_name": "Plan type"}])claude mcp add ga4-seo -- uvx ga4-seo-mcp# with options:claude mcp add ga4-seo -e PAGESPEED_API_KEY=your-key -- uvx ga4-seo-mcp --toolsets admin,data,gsc,psi{ "mcpServers": { "ga4-seo": { "command": "uvx", "args": ["ga4-seo-mcp"], "env": { "PAGESPEED_API_KEY": "your-key" } } }}{ "servers": { "ga4-seo": { "type": "stdio", "command": "uvx", "args": ["ga4-seo-mcp"] } }}docker run -i --rm --user "$(id -u):$(id -g)" \ -v ~/.config/gcloud/application_default_credentials.json:/creds/credentials.json:ro \ -e GOOGLE_APPLICATION_CREDENTIALS=/creds/credentials.json \ ghcr.io/germaniu/ga4-seo-mcpMCP_AUTH_TOKEN=$(openssl rand -hex 32) uvx ga4-seo-mcp --transport streamable-http# endpoint: http://127.0.0.1:8000/mcp (send Authorization: Bearer <token>)uv sync --all-extrasuv run ruff check . && uv run ruff format --check . && uv run pytestuv run python scripts/smoke_stdio.py --expect 24 # real stdio initialize + tools/list