Google Analytics 4 MCP

io.scalablyPublished by scalably.iov1.0.1Updated Oct 24, 2026

Google Analytics 4 MCP: reports, realtime, funnels, pivots, metadata, admin lists. 17 tools.

VerifiedSTDIODesktop onlyData & AnalyticsBusiness & Commerce

Overview

AI-generated overview

Read-only MCP server that lets an assistant query Google Analytics 4 reports and list Admin API settings for properties the service account can access.

What you can do
Run standard, batch, pivot, realtime and funnel reports on a GA4 property, with dimension and metric filters and compatibility checks against the metadata catalog. List accounts and properties, property details, data streams, custom dimensions and metrics, key events, audiences, Google Ads links and annotations. Audit who read what on a property over the last 12 months. Return structured JSON with status, quota and data-quality warnings, and pagination offsets for partial results.
When to use it
Useful when you want an assistant to pull GA4 traffic, event or funnel numbers, inspect a property's configuration, or audit access without opening the GA4 interface. Suited to analysts and developers who already have a Google Cloud project and service account.
Requirements
Runs locally as a Python package via uvx or as a Claude Desktop bundle. Needs a Google Cloud project with the Analytics Data and Admin APIs enabled, a service-account JSON key, and the GOOGLE_APPLICATION_CREDENTIALS environment variable pointing to that file. The service account must be added as a Viewer on each GA4 property. Optional GA4_LOG_LEVEL.
Before you install
Requires a service-account private key file referenced by GOOGLE_APPLICATION_CREDENTIALS; treat it as a secret. Access is read-only, but the access report exposes who read what on a property. Results may be sampled, thresholded or collapsed into (other), and quota is shared per property, so heavy querying can hit limits. Funnel reporting is v1alpha and may change.

Installation

In SourceWeft

  1. Open Google Analytics 4 MCP in the dashboard and add it to a workspace.
  2. Enable the server for the chats that should use its tools.

Desktop only via STDIO. STDIO servers start a local process, so they need the SourceWeft desktop host.

Other MCP clients

Follow the launch instructions in the repository.

README

Google Analytics 4 MCP

Read-only MCP server for Google Analytics 4. Seventeen tools cover the read surface of both the Data API and the Admin API: standard, batch, pivot, realtime and funnel reports; the metadata catalog and compatibility check; and admin lists for properties, streams, custom dimensions and metrics, key events, audiences, Google Ads links, annotations and access reports. We run this server in production for every analytics client.

Install

Claude Code:

bash
claude mcp add ga4 -e GOOGLE_APPLICATION_CREDENTIALS=/path/to/service-account.json -- uvx scalably-ga4-mcp

Codex:

bash
codex mcp add ga4 --env GOOGLE_APPLICATION_CREDENTIALS=/path/to/service-account.json -- uvx scalably-ga4-mcp

Claude Desktop: download ga4-mcp.mcpb from the latest GitHub release and open it.

Setup

  1. In Google Cloud, create or pick a project and enable the Google Analytics Data API and the Google Analytics Admin API on it (APIs and Services, Library).
  2. Create a service account in that project and download its JSON key.
  3. Add the service account's email as a Viewer on each GA4 property you want to query (Admin, Property access management).

No OAuth consent screen is needed; the server authenticates as the service account with the analytics.readonly scope. One service account can read any property that grants it access, so there is no per-client configuration beyond step 3 above.

Call ga4_list_account_summaries first to discover which property_id values the service account can see, then pass one into the reporting or admin tools.

Tools (17)

ToolWhat it does
ga4_list_account_summariesList every GA4 account and its child properties accessible to this service account
ga4_get_property_detailsFull metadata for a single GA4 property
ga4_list_data_streamsList all data streams (web, iOS, Android) on a GA4 property
ga4_list_custom_dimensionsList custom dimensions configured on a GA4 property
ga4_list_custom_metricsList custom metrics configured on a GA4 property
ga4_list_key_eventsList key events (formerly conversions) on a GA4 property
ga4_list_audiencesList audiences defined on a GA4 property
ga4_list_google_ads_linksList Google Ads links attached to a GA4 property
ga4_list_property_annotationsList reporting annotations on a GA4 property
ga4_run_access_reportAudit log of who read what on a GA4 property, last 12 months
ga4_get_metadataFetch the full GA4 dimension and metric catalog for a property
ga4_run_reportRun a GA4 standard report, the workhorse tool
ga4_batch_run_reportsRun up to 5 GA4 reports in a single round trip
ga4_run_pivot_reportRun a GA4 pivot report
ga4_run_realtime_reportRun a GA4 real-time report covering the last 30 minutes
ga4_check_compatibilityValidate whether a dimension and metric combo can be queried together
ga4_run_funnel_reportRun a GA4 funnel report (v1alpha, drop-off analysis)

Configuration

VariableRequiredPurpose
GOOGLE_APPLICATION_CREDENTIALSyesPath to a Google service-account JSON file with the analytics.readonly scope; share each property with the service account email
GA4_LOG_LEVELnoINFO (default) or DEBUG

Filter expression shape

Every tool accepting dimension_filter / metric_filter takes a dict:

json
{"filter": {"field_name": "country", "string_filter": {"value": "US"}}}

Compose with boolean groups:

json
{"and_group": {"expressions": [  {"filter": {"field_name": "country", "string_filter": {"value": "US"}}},  {"filter": {"field_name": "deviceCategory", "string_filter": {"value": "mobile"}}}]}}

A raw {"field_name": ..., "string_filter": ...} is auto-wrapped into {"filter": {...}}.

Reply shape

Every tool returns JSON with status (succeeded, partial, no_op), operation, summary, target, result, proof, warnings, recovery. Failures surface as a tool error whose text is ga4_request_failed: <message> <hint>. proof.nextOffset on a partial status means: continue from that offset. proof.propertyQuota carries the property's remaining Data API quota so the caller can self-throttle. proof.dataQualityLimited is true when the response was sampled, thresholded, or collapsed high-cardinality rows into (other); treat such a result as directionally useful, not exact.

Limits

250,000 rows per Data API response (the server caps any higher client-supplied limit). Batch reports: up to 5 per call. Funnel reports: up to 10 steps. Realtime reports use a separate, smaller dimension and metric catalog covering only the last 30 minutes; non-realtime data typically lags 24 to 48 hours. Funnel reporting is v1alpha and its shape can change upstream. Every quota bucket (core reports, realtime, funnel) allows roughly 14,000 quota tokens per project per property per hour (a complex query can cost more than one token); 360 properties get a 10x multiplier. Re-check Google's current quota page before relying on an exact number.

Verify

Each release lists the package version, the .mcpb sha256 and the production commit it was derived from in CHANGELOG.md. CI runs the tests and a clean install of the built wheel on every push.

Privacy Policy

This server runs locally, on your machine, under your own credentials. It collects no personal data, contains no telemetry, stores nothing persistently, and talks only to the vendor API it wraps. No third party, including Scalably, receives your data. Contact: [email protected]. Canonical copy: https://scalably.io/connector-privacy.html

License

MIT. Copyright Scalably.

Source: README.md at commit 90b8c28

Tools

0
SourceWeft has not started this package in its sandbox yet, so its tools are not known.

Version history

1
  1. v1.0.1LatestSep 16, 2026

Score

50% of the applicable checks met

How complete this listing is, computed from the registry entry, the endpoint and public sources. Not a rating of the server and not a statement that it is safe or working today: reachability is a dated check, and no installs or reviews go into the score.

  • Reached in the last 30 days25 pts

    Keep the endpoint answering the MCP handshake; SourceWeft probes it every 30 days.

  • Auth declared10 pts

    Declare the credential headers in the registry entry, or keep the endpoint answering the probe so its auth can be classified.

  • Tools listed15 pts

    Answer tools/list without a credential, or ship a package that starts in a sandbox without one.

  • DescriptionRequired15 pts
  • Logo10 pts
  • Documentation15 pts
  • License10 pts