# Google Analytics (unofficial) (remote · api.safe-mcp.com)

Connect Google Analytics to ChatGPT. Query GA4 data in plain English and get instant insights.

- Trust score: 76/100 (medium)
- Change this week: +9
- Registry status: active
- Liveness: live
- Owner verified: no
- Last scored: 2026-08-03

## Components

- remote · `api.safe-mcp.com`: 76/100 (this document), [markdown](https://verifymcp.io/servers/com-safe-mcp-google-analytics-unofficial/api.md), [page](https://verifymcp.io/servers/com-safe-mcp-google-analytics-unofficial/api)

## Channel facts

- Endpoint: `https://api.safe-mcp.com/mcp`
- Transports: `streamable-http`
- Auth: `none`
- Version: `1.0.0`

## Trust breakdown

How this component scores in each security and reliability category. Every signal is checked automatically against the live server, and we only credit what we can confirm. Scores are 0–100 per category. Scoring method: https://verifymcp.io/docs/scoring (what has changed: https://verifymcp.io/docs/scoring/changelog)

Scored 2026-08-03.

- **Endpoint Security**: 89/100
  - The endpoint's TLS certificate is valid, in date, and uses a strong key.
  - Authorisation is enforced on tool calls, advertised via RFC 9728 protected-resource metadata. Discovery is public, which costs nothing: no tool can be invoked without a token.
  - HTTPS is enforced; there's no plaintext access path.
  - HSTS check failed: the Strict-Transport-Security header is absent.
  - DNSSEC check failed: this domain isn't protected by DNSSEC.
  - The authorisation server offers only Dynamic Client Registration (RFC 7591), which MCP 2026-07-28 deprecated in favour of Client ID Metadata Documents.
- **Transport & Reachability**: 100/100
  - Verified streamable-http transport via a live MCP handshake.
- **Schema Quality & AI Usability**: 65/100
  - 100% of prompts and resources have a non-trivial description (not blank, and not just the item's name).
  - AI-judged instruction clarity (fair).
  - Context-footprint check failed: tool/resource definitions use about 1450 tokens (~241/item across 6 items; 5 tools + 1 resources), over budget; trim descriptions and params.
  - Usage-examples check failed: none of the tools include examples.
- **Stability & Change Management**: 27/100
  - Stability observed for 8 of 30 days with no destabilising changes; credit accrues until the full window elapses.
- **Tool Coverage**: 81/100
  - 100% of tools have a non-trivial description (not blank, and not just the tool's name).
  - 33% of tool parameters carry a description.
  - Structured output schemas are declared (100% of tools); any adoption earns full credit.
- **Capabilities**: 100/100
  - Implements a supported MCP spec version (2025-11-25); the latest is 2026-07-28.
  - Supports UI / widget rendering.

## Install

### Claude

```bash
claude mcp add --transport http com-safe-mcp-google-analytics-unofficial https://api.safe-mcp.com/mcp
```

### Codex

```toml
[mcp_servers.com-safe-mcp-google-analytics-unofficial]
url = "https://api.safe-mcp.com/mcp"
```

### opencode

```json
{
  "$schema": "https://opencode.ai/config.json",
  "mcp": {
    "com-safe-mcp-google-analytics-unofficial": {
      "type": "remote",
      "url": "https://api.safe-mcp.com/mcp",
      "enabled": true
    }
  }
}
```

### OpenClaw

```bash
openclaw mcp add com-safe-mcp-google-analytics-unofficial --url https://api.safe-mcp.com/mcp --transport streamable-http
```

### Hermes

```yaml
mcp_servers:
  com-safe-mcp-google-analytics-unofficial:
    url: "https://api.safe-mcp.com/mcp"
```

### Other

```json
{
  "mcpServers": {
    "com-safe-mcp-google-analytics-unofficial": {
      "type": "http",
      "url": "https://api.safe-mcp.com/mcp"
    }
  }
}
```

The mcpServers block is a cross-client convention. Remote transports vary, so check your client's docs.

## Changelog

Every change recorded for this component, newest first. Days that predate change tracking, or that we cannot explain, say so: "we were watching and nothing happened" and "we were not watching" are different claims.

### 2026-08-03 (score 76, +1)

No change was recorded against any check on this day. Stability & Change Management went from 23 to 27. That category is still filling its 30-day observation window: 7 days of observed history at the previous scan, 8 at this one. The score rises as the window fills, whether or not the server changes.

### 2026-08-01 (score 75, +1)

No change was recorded against any check on this day. Stability & Change Management went from 17 to 20. That category is still filling its 30-day observation window: 5 days of observed history at the previous scan, 6 at this one. The score rises as the window fills, whether or not the server changes.

### 2026-07-31 (score 74, +5)

- [functional] We updated how we score, so this day's move reflects our rubric, not a change to the server

### 2026-07-30 (score 69, +1)

No change was recorded against any check on this day. Stability & Change Management went from 10 to 13. That category is still filling its 30-day observation window: 3 days of observed history at the previous scan, 4 at this one. The score rises as the window fills, whether or not the server changes.

### 2026-07-28 (score 68, +1)

No change was recorded against any check on this day. Stability & Change Management went from 3 to 7. That category is still filling its 30-day observation window: 1 days of observed history at the previous scan, 2 at this one. The score rises as the window fills, whether or not the server changes.

### 2026-07-27 (score 67, +1)

- [functional] We updated how we score, so this day's move reflects our rubric, not a change to the server

### 2026-07-26 (score 66)

First indexed and scored.

## MCP tools (5)

### `marketing_get_sources` (~77 tokens)

Discover marketing data sources

Lists connected and missing GA4, Google Analytics properties, property IDs, web streams, app streams, measurement IDs, Firebase app IDs, Google Search Console sites, Bing Webmaster sites, and current analysis surface mappings. Use this before reporting when property/site selectors are unknown.

Input parameters:

- `sources` (array)
- `surfaceId` (string)

Output parameters:

- `sources`
- `surface` (object)

### `marketing_get_catalog` (~105 tokens)

List supported marketing reporting sources, metrics, and dimensions

Use this when the user wants to discover the canonical marketing reporting graph, available sources, supported metrics, supported dimensions, or which connectors are live today. Each source also reports a `passthrough` field describing whether native fields beyond the curated list are accepted (GA4 accepts any native dimension/metric; Search Console accepts any native dimension; Bing is limited to the curated fields). Do not use this for GA4 account discovery or data retrieval.

Input parameters:

- `source` (string)

Output parameters:

- `dimensions` (array)
- `metrics` (array)
- `sources` (array)
- `version` (string)

### `marketing_get_report` (~775 tokens)

Get holistic marketing report data

Primary reporting tool for a given GA4 property or site. Use for totals, trends, and breakdowns by dimension across GA4 website traffic and app analytics, Google Search Console site traffic, and Bing Webmaster — including last-30-days summaries, revenue, leads, sessions, users, engagement/time-on-page (average_session_duration, user_engagement_duration), and period-over-period comparisons. Drill deep: GA4 supports up to 9 grouped dimensions (date/hour, geo, device/browser/OS, source/medium/channel, landing_page/page_path, etc.). Defaults to all mapped connected sources merged into one standardized view, aligned on the shared grain (typically landing_page) so a page row blends GA4 sessions+engagement with Search Console/Bing clicks/impressions/CTR/position; per-source detail (e.g. full query lists) stays in sourceSections. Note GA4 has no `query` dimension and Search Console/Bing have no sessions/engagement, so those cannot share one row — query is a Search Console/Bing breakdown. Narrow with sources or sourceMode='single'. Any GA4 dimension/metric name not in the catalog is passed through to the GA4 API automatically; metricMode='source_native' forces a pure GA4-native report. Pass one date range for a single window or two date ranges for period-over-period comparison.

Input parameters:

- `app` (object): Optional app or web stream selector. Use this when the user identifies the GA4 source by stream ID, measurement ID, Firebase app ID, or stream name.
- `appStreamId` (string): GA4 app or web data stream ID when the request targets a specific app stream or website stream.
- `dateRanges` (array, required): One or more GA4 date ranges. Use two date ranges for period-over-period comparisons or significance checks.
- `dimensionFilterExpression` (object)
- `dimensionFilters` (array)
- `dimensions` (array): Optional GA4 dimensions such as date, country, deviceCategory, landingPagePlusQueryString, or dateRange. Omit entirely for aggregate totals (renders as KPI widget). Only include when the user asks fo…
- `keepEmptyRows` (boolean)
- `limit` (integer)
- `maxRows` (integer)
- `metricFilterExpression`
- `metricFilters` (array)
- `metricMode` (string)
- `metrics` (array, required): GA4 metric API names such as sessions, activeUsers, conversions, eventCount, totalRevenue, or engagedSessions. Include explicit numerator and denominator metrics when requesting significance context.
- `offset` (integer)
- `orderBys` (array): Optional sort order. Each entry requires fieldName (a GA4 API name like sessions or date) and optional desc (true for descending). Example: [{ fieldName: "sessions", desc: true }].
- `pageSize` (integer)
- `property`: Google Analytics property identifier. Accepts a numeric GA4 property ID like 481373915 or a resource name like properties/481373915.
- `propertyId`: Numeric Google Analytics 4 property ID for website analytics or app analytics. Use this when the user references a GA4 property directly.
- `returnAllRows` (boolean)
- `significance` (object): Optional significance context for GA4 rate comparisons. Use this only when the user asks whether a change is statistically significant or meaningful.
- `site` (string)
- `siteUrl` (string)
- `source` (string)
- `sourceMode` (string)
- `sourceOptions` (object)
- `sources` (array)
- `surfaceId` (string): Optional analysis surface ID. When omitted, the default surface is used if no explicit selector is provided.

Output parameters:

- `analyticsLinks`
- `chart` (object)
- `comparison`
- `confidence`
- `lineage`
- `metrics`
- `reportSummary`
- `resolvedEntities`
- `rows`
- `scope`
- `significance`
- `sourceState` (object)
- `warnings` (array)

### `marketing_get_funnel` (~384 tokens)

Get marketing funnel data

Use for ordered conversion-step analysis: GA4 ordered_steps step funnels (e.g. session_start → add_to_cart → purchase) and cross-source holistic_bundle landing-page funnels joining GA4, Google Search Console, and Bing Webmaster. Covers funnel drop-off between steps (e.g. from landing on the site to adding to cart to purchasing), conversion paths, and acquisition-to-conversion context. Pass one date range for a single window or two date ranges for period-over-period comparison.

Input parameters:

- `app` (object): Optional app or web stream selector. Use this when the user identifies the GA4 source by stream ID, measurement ID, Firebase app ID, or stream name.
- `appStreamId` (string): Optional data stream ID when the funnel should run against a specific app or website stream.
- `bingSiteUrl` (string)
- `dateRanges` (array, required): One or more GA4 date ranges. Use two date ranges for period-over-period comparisons or significance checks.
- `funnel` (object): Multi-step funnel definition. Use this only for ordered step analysis, not for general website analytics reporting.
- `funnelBreakdown` (object)
- `funnelNextAction` (object)
- `funnelVisualizationType` (string)
- `ga4PropertyId`: Google Analytics property identifier. Accepts a numeric GA4 property ID like 481373915 or a resource name like properties/481373915.
- `limit` (integer)
- `property`: Google Analytics property identifier. Accepts a numeric GA4 property ID like 481373915 or a resource name like properties/481373915.
- `propertyId`: Numeric GA4 property ID for the funnel report.
- `returnPropertyQuota` (boolean)
- `searchConsoleSiteUrl` (string)
- `surfaceId` (string)
- `type` (string, required)

Output parameters:

- `analyticsLinks`
- `chart` (object)
- `comparison`
- `reportSummary`
- `rows` (array)
- `scope`
- `sourceState` (object)
- `warnings` (array)

### `marketing_manage_surface` (~90 tokens)

Get or update analysis surface mappings

Gets or updates persisted selectors for a website/app analysis surface. Use action='get' to inspect mappings and action='update' to persist GA4, Search Console, or Bing Webmaster selectors.

Input parameters:

- `action` (string, required)
- `mainDomain`
- `name` (string)
- `selectorSets` (object)
- `selectors` (object)
- `surfaceId` (string)

Output parameters:

- `applied` (boolean)
- `sourceState` (object)
- `surface` (object)

## Diagnostics

Captured diagnostic sections: TLS, DNSSEC, Authorisation, Transports. The full working is on the page: https://verifymcp.io/servers/com-safe-mcp-google-analytics-unofficial/api#diagnostics

## Score history

- 2026-08-03: 76
- 2026-08-02: 75
- 2026-08-01: 75
- 2026-07-31: 74
- 2026-07-30: 69
- 2026-07-29: 68
- 2026-07-28: 68
- 2026-07-27: 67
- 2026-07-26: 66

## Links

- Remote endpoint: https://api.safe-mcp.com/mcp
- Website: https://safe-mcp.com/
- Changelog RSS feed: https://verifymcp.io/servers/com-safe-mcp-google-analytics-unofficial/api/changelog.xml
- Changelog JSON feed: https://verifymcp.io/servers/com-safe-mcp-google-analytics-unofficial/api/changelog.json
- HTML version of this page: https://verifymcp.io/servers/com-safe-mcp-google-analytics-unofficial/api
