Google Analytics 4 MCP Server. Provides GA4 reporting tools via the Google Analytics Data API v1. Authentication: service account JSON (GOOGLE_APPLICATION_CREDENTIALS env var).
GA4 server has solid naming (verb-first: run_report, get_metadata, mark_key_event, grant_access) and complete input schemas with type definitions. Descriptions are present but brief (avg ~60 chars, below the 194-char baseline). All parameters have descriptions, but several lack format/constraint details (e.g., 'role' in grant_access lists examples 'roles/viewer' but no enum). Tool annotations are correctly declared (readOnlyHint, destructiveHint, idempotentHint). Output schemas are not documented in the visible code, no return type specifications for any tool. Error handling is minimal; no recovery guidance or categorization visible. Rate limiting is implemented but optional. Overall: functional definitions with room for richer descriptions and output documentation.
Get available dimensions and metrics for a GA4 property
Grant access to a GA4 property (non-destructive, idempotent)
Mark an event as a key event in GA4 (non-destructive, idempotent)
Run a GA4 report with dimensions, metrics, and filters
Output schemas not documented. No return type specifications visible for any tool (run_report, get_metadata, mark_key_event, grant_access). LLMs cannot plan downstream calls or extract required fields without knowing response structure.
Parameter constraints under-specified. 'role' in grant_access shows examples ('roles/viewer', 'roles/editor') but no enum constraint. 'limit' in run_report lacks min/max bounds. LLMs cannot validate inputs without formal constraints.
Descriptions are brief (avg 60 chars vs 194-char baseline). 'Get available dimensions and metrics for a GA4 property' lacks context on WHEN to call this tool or what to do with the result. Descriptions should be 50-200 chars and answer: what, when, why.
Inferred effective spec: <=2025-11-25.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | D | 56 | <=2025-11-25 | v2 |
No error handling guidance visible. No recovery hints (e.g., 'If property_id is invalid, call get_metadata first'), no error categorization (retryable vs user-fixable), no actionable error messages. Agents cannot self-correct on failures.
Pagination not visible in run_report schema. If results can exceed 10,000 rows, tool should accept offset/limit and return total_count or next_cursor. Current 'limit' parameter alone does not enable pagination.