One MCP server for Google Analytics 4 AND Google Tag Manager, with read and write access: reports, realtime, custom dimensions/metrics, key events, audiences, Measurement Protocol, and full GTM tag/trigger/variable/version management.
Server has 7 tools with clear action verbs and mostly complete schemas. Descriptions are present and reasonably detailed (avg ~150 chars), exceeding the 10-char minimum. All tools have typed input parameters with descriptions. However, output schemas are not formally documented, responses are inferred from code inspection. Parameter descriptions lack constraint details (ranges, formats, enums). Error handling is minimal; no recovery guidance or actionable error messages visible. Tool composition is sound (single responsibility), but some tools could benefit from richer context (e.g., run_report lacks examples of valid metric/dimension names). Security is handled server-side via GOOGLE_APPLICATION_CREDENTIALS, which is correct.
Create a custom dimension. parameter_name is the event parameter / user property key; scope is 'EVENT', 'USER' or 'ITEM'. display_name may contain only letters, numbers, underscores and spaces.
Get configuration details for one GA4 property (name, time zone, currency, industry, create time).
List every GA4 account and its properties the service account can see. Returns account name/id plus each property's display name and numeric id. Call this first to discover property ids for the other GA4 tools.
List custom dimensions defined on a GA4 property.
List the data streams (web/app) on a GA4 property. The stream id (last path segment of 'name') is needed by the Measurement Protocol secret tools.
Output schemas not formally documented. Code inspection reveals return types (dicts, lists), but LLMs cannot see structured schema definitions. Responses lack pagination info, total counts, or next_cursor for large result sets.
run_report and run_realtime_report lack constraint documentation for metrics/dimensions. Descriptions mention 'GA4 API names' but do not list valid values, ranges, or format rules. LLMs will hallucinate invalid metric names.
No error handling guidance. Code does not show try-catch blocks, error classification, or recovery hints. If a property_id is invalid or credentials fail, LLMs receive raw exceptions with no actionable next steps.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | C | 60 | 2026-07-28+ | v2 |
Run a GA4 realtime report (last ~30 minutes). Example: metrics ['activeUsers'], dimensions ['country','unifiedScreenName'].
Run a GA4 report. metrics/dimensions are GA4 API names (e.g. metrics ['activeUsers','conversions'], dimensions ['date','sessionDefaultChannelGroup']). Dates accept YYYY-MM-DD or relative forms like '28daysAgo' / 'today'.
create_custom_dimension description mentions 'letters, numbers, underscores, spaces only' for display_name but does not specify length limits or provide a regex pattern. Parameter validation rules are incomplete.
No pagination support visible. list_* tools return all results without limit/offset or next_cursor. Large GA4 accounts could return hundreds of properties, exhausting context windows.