Google Analytics Mcp

io.github.surendranbPublished by GitHub account surendranbv2.11.7Updated Nov 3, 2026

GA4 MCP server for AI agents: schema discovery, server-side aggregation, analysis-ready defaults.

VerifiedSTDIODesktop onlyData & AnalyticsBusiness & Commerce

Overview

AI-generated overview

Local MCP server that lets an assistant discover a GA4 property's schema and run Google Analytics 4 reports with correct dimension and metric names.

What you can do
  • Discover schema: search dimensions and metrics by keyword, browse dimension and metric categories, or pull the full property schema.
  • Query data: run multi-dimensional GA4 reports with date ranges and limits, with server-side aggregation and totals.
  • Explore properties: list GA4 properties and accounts available to the configured credentials.
  • Get guidance: fetch analytical playbooks and recipes, plus built-in troubleshooting guides for setup, IAM and schema errors.
  • Fix setup: walk through missing property ID or credential problems interactively, and check for newer package versions.
When to use it
Useful when you want an assistant to answer questions about website or app traffic, channels, conversions or e-commerce from Google Analytics 4, and to avoid guessing field names that changed after Universal Analytics. Also handy for guided analyses such as diagnosing traffic drops.
Requirements
Runs locally over stdio, typically via uvx or npx, or as a Python module. Needs a GA4 property ID in GA4_PROPERTY_ID and a Google Cloud service account JSON key path in GOOGLE_APPLICATION_CREDENTIALS, with that service account granted access to the property. Network access to Google APIs is required.
Before you install
Requires a service account key file whose path is given in GOOGLE_APPLICATION_CREDENTIALS; treat that file as a secret and grant it read-only GA4 access. The server reports anonymous diagnostic telemetry by default, which can be disabled with DO_NOT_TRACK or MCP_TELEMETRY_OPT_OUT. Some README-listed tools load skills from GitHub, and the full property schema can be very large.

Installation

In SourceWeft

  1. Open Google Analytics 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 MCP Logo]

Google Analytics 4 (GA4) MCP Server 📊

Model Context Protocol (MCP) server for Google Analytics 4: real-time query exploration, schema discovery, metric aggregation, and audience insights for AI agents.

[CI] [PyPI version] [npm version] [OpenSSF Scorecard] [License: MIT]

🌐 Live Documentation & Web Portal: https://ga4mcp.com/


⚡ Quickstart

bash
# 1-Line Universal Installer (Auto-configures Claude Desktop, Cursor, Claude Code, Antigravity, VS Code, Zed, Windsurf)curl -fsSL "https://ga4.builditwithai.xyz/install" | bash
# Or run directly via your preferred runtime:uvx google-analytics-mcpuvx --from google-analytics-mcp ga4-mcp-serverpython -m ga4_mcpnpx -y @surendranb/google-analytics-mcp


🤖 Client Setup

A. Claude Code (CLI)

bash
claude mcp add google-analytics -- uvx google-analytics-mcp

B. Cursor & Google Antigravity (mcp.json)

json
{  "mcpServers": {    "google-analytics": {      "command": "uvx",      "args": ["google-analytics-mcp"]    }  }}

C. Claude Desktop (claude_desktop_config.json)

json
{  "mcpServers": {    "google-analytics": {      "command": "uvx",      "args": ["google-analytics-mcp"],      "env": {        "GA4_PROPERTY_ID": "your_ga4_property_id",        "GOOGLE_APPLICATION_CREDENTIALS": "/path/to/service_account.json"      }    }  }}

D. VS Code (Cline / Roo Code / Continue)

json
{  "mcpServers": {    "google-analytics": {      "command": "npx",      "args": ["-y", "@surendranb/google-analytics-mcp"]    }  }}

🛠️ Tools & Capabilities

Tool NameParametersDescriptionReturn Type
get_ga4_datadimensions (list), metrics (list), date_ranges (list), limit (int)Runs multi-dimensional GA4 reports with automated metric totals and server-side aggregation.JSON / Markdown
list_accounts(none)Lists all accessible Google Analytics accounts and permission levels.JSON
list_propertiesaccount_id (optional)Lists all GA4 properties associated with an account.JSON
get_property_metadataproperty_id (optional)Fetches complete dimension and metric schemas, custom definitions, and compatibility rules.JSON
run_realtime_reportmetrics (list), dimensions (list)Queries real-time active users and event counts from the last 30 minutes.JSON
search_skillsquery (string)Searches built-in GA4 analytical playbooks (e-commerce, channel attribution, bot filtering).Markdown
skill_readskill_name (string)Dynamically loads procedural skills and analytical guides from GitHub.Markdown
skills_list(none)Lists all available live GA4 analytical skills.JSON

🧠 Dynamic Skills & Guided Playbooks

This server ships with built-in analytical recipes that load dynamically from GitHub:

  • traffic-diagnosis: Step-by-step root cause analysis for sudden traffic drops.
  • channel-acquisition: Best-practice channel grouping and attribution modeling.
  • ecommerce-analysis: Revenue, item purchase rate, and conversion funnel analysis.
  • ai-referral-analysis: Tracks and isolates referral traffic from ChatGPT, Claude, Perplexity, and Gemini.

🔒 Telemetry & Privacy

This package collects anonymous, non-PII diagnostic telemetry (command executions, latency, error codes) to improve tool reliability. No queries, user credentials, personal data, source code, or environment variables are ever collected or stored.

You can opt out anytime by setting either of the following environment variables:

bash
export DO_NOT_TRACK=1# orexport MCP_TELEMETRY_OPT_OUT=1

📄 License

MIT License. See LICENSE for details.

Source: README.md at commit d8afdf5

Tools

12

check_for_updates

Check PyPI for newer versions of this MCP server and get upgrade instructions.

Takes no parameters.

list_properties

List all GA4 properties associated with an account.

Parametersaccount_id

search_schema

Search for a keyword across all dimensions and metrics for this property. Returns a ranked list of up to 10 matching fields scored by relevance. Returns: {"top_results": {"DIMENSION: api_name": score, "METRIC: api_name": score, ...}} Use this when you have a concept ("engagement", "revenue", "channel") and need exact API field names before calling get_ga4_data. Use list_dimension_categories or list_metric_categories instead if you want to browse all available fields without a specific keyword. Args: keyword: One or more keywords to search for (e.g., "user", "campaign revenue").

Parameterskeywordrequired

get_property_schema

Returns the complete schema for the configured GA4 property, including all available dimensions and metrics (standard and custom). Warning: This can be a very large object (10k+ tokens). Use search_schema for most discovery tasks.

Takes no parameters.

list_dimension_categories

List all dimension categories for this GA4 property, with a count of dimensions in each category. Returns: {"dimension_categories": {"Category Name": count, ...}} Use this as the first step in dimension exploration — browse categories, then call get_dimensions_by_category with the name that fits your analysis. Use search_schema instead if you already have a keyword to search for.

Takes no parameters.

list_metric_categories

List all metric categories for this GA4 property, with a count of metrics in each category. Returns: {"metric_categories": {"Category Name": count, ...}} Use this as the first step in metric exploration — browse categories, then call get_metrics_by_category with the name that fits your analysis. Use search_schema instead if you already have a keyword to search for.

Takes no parameters.

get_dimensions_by_category

Return all dimensions in a specific category with their API names and descriptions. Returns: {"dimension_api_name": "description", ...} The category name must exactly match a value returned by list_dimension_categories. Use search_schema instead if you already have a keyword — it is faster and more targeted than browsing by category. Args: category: Exact category name from list_dimension_categories (case-insensitive).

Parameterscategoryrequired

get_metrics_by_category

Return all metrics in a specific category with their API names and descriptions. Returns: {"metric_api_name": "description", ...} The category name must exactly match a value returned by list_metric_categories. Use search_schema instead if you already have a keyword — it is faster and more targeted than browsing by category. Args: category: Exact category name from list_metric_categories (case-insensitive).

Parameterscategoryrequired

get_ga4_data

Retrieve GA4 data with built-in intelligence for better and safer results. Returns on success: {"data": [...], "metadata": {...}, "_skills_tip": "..."}. For multi-row pulls (a time series like ['date'], or any breakdown) the result also carries "totals": {metric: value} — GA4 server-side aggregates across all rows. Read the period figure from "totals"; do NOT sum the rows yourself. (Additive metrics sum; rate metrics are period-computed by GA4.) Returns on volume warning: {"warning": "...", "estimated_rows": N, "suggestions": [...]} Returns on error: {"error": "..."} CRITICAL WORKFLOW — follow this sequence every time: 1. DISCOVER FIELDS: NEVER guess dimension or metric names. Call `search_schema`, `list_dimension_categories`, or `list_metric_categories` FIRST to verify exact API names for this property. Guessing costs you a failed round-trip. 2. DISCOVER PATTERN: For any domain-specific analysis, call `search_skills('<topic>')` BEFORE querying to get the proven methodology — correct dimensions, metrics, filters, and how to interpret the result. One extra call prevents multiple failures. Use for: traffic diagnosis, attribution, ecommerce, channel acquisition, content performance, geo/device segmentation, AI referrals, bot detection. 3. RETRIEVE: Call get_ga4_data with the verified fields and the skill's pattern. 4. TROUBLESHOOT: On schema error, invalid field, or filter parse error — do NOT retry by guessing. Your training may predate current GA4 (UA was sunset 2023-07-01). Call `search_schema('<keyword>')` to find the current name in THIS property, or `search_skills('ua-to-ga4' | 'common-metric-names' | 'filter-structures')` for the mapping. FIELD NAMES — GA4 API names vs common wrong guesses: - 'screenPageViews' not 'uniquePageviews' or 'pageViews' - 'totalUsers' not 'users' - 'keyEvents'

Parameterslimitintentmetricsdimensionsestimate_onlydate_range_enddate_range_startdimension_filterenable_aggregationproceed_with_large_dataset

get_troubleshooting_guide

Returns the troubleshooting/setup guide for a topic, served from inside the server (no network needed). Use whenever you hit a schema error, dimension_filter parse error, IAM / 403 authorization error, or a boot-time setup error. Args: topic: One of "setup", "iam", or "schema".

Parameterstopicrequired

search_skills

Fetch analytical recipes and how-to guides from the GA4 skills library. Skills are domain-specific playbooks for common GA4 analysis patterns — exact dimensions, metrics, filters, and interpretation logic for each use case. Call this BEFORE querying get_ga4_data for any domain-specific analysis. Available skills: gcp-setup, traffic-diagnosis, attribution-scope, channel-acquisition, content-performance, geo-device-segmentation, ecommerce-analysis, ai-referral-analysis, bot-traffic-detection, common-metric-names, filter-structures, custom-dimensions, compatible-combinations, ua-to-ga4, date-ranges, ga4-limitations. Usage: - search_skills("") → returns full index of all skills - search_skills("gcp-setup") → returns the GCP service-account setup playbook - search_skills("ecommerce") → returns the ecommerce-analysis skill - search_skills("ua-to-ga4") → returns the UA→GA4 field name mapping Args: query: A skill name (exact slug) or empty string to browse the full index.

Parametersqueryrequired

setup_ga4_access

Interactively fix a broken GA4 MCP setup (missing property ID, missing or expired credentials, or missing GA4 access) by asking the user for the needed input through the client, then re-initializing without a restart. Call this whenever a configuration or authentication error is reported.

Takes no parameters.

Version history

2
  1. v2.11.7LatestOct 29, 2026
  2. v2.8.2Sep 16, 2026

Score

90% 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
  • 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 listedRequired15 pts
  • DescriptionRequired15 pts
  • Logo10 pts
  • Documentation15 pts
  • License10 pts