MCP server for interacting with Google Analytics 4 (GA4) via the GA4 Data API
Three tools with basic descriptions and partial schemas. All tools have descriptions (10-50 chars range, below the 50-200 char LLM-optimized baseline), and input schemas are present but lack rigor. Parameters are documented but descriptions are minimal. Error handling returns raw exception strings rather than actionable recovery guidance. No tool annotations (readOnlyHint, destructiveHint, idempotentHint). Output schemas are not formally documented, only inferred from code comments. Naming is clear (verb_noun pattern: run_report, run_realtime_report, get_metadata), but parameter descriptions lack format constraints, ranges, and examples of valid values.
Retrieve available metrics and dimensions for a GA4 property.
Get real-time data for the past 30 minutes.
Run a standard GA4 report with configurable metrics, dimensions, and date ranges.
Parameter descriptions lack format constraints and valid value guidance. E.g., 'date_range' accepts union of dict or string presets, but description does not specify which presets are valid or the exact dict key names required.
Error handling returns raw exception strings ('Error running report: {str(e)}') instead of actionable recovery guidance. LLM cannot determine if error is retryable, user-fixable, or fatal.
Output schema not formally documented. Tool descriptions mention 'Formatted report data' and 'Formatted markdown table' but do not specify field names, types, or structure. LLM cannot plan downstream tool calls or extract specific fields.
Inferred effective spec: <=2025-11-25.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | D | 55 | <=2025-11-25 | v2 |
Tool descriptions are 30-50 characters, well below the 50-200 char LLM-optimized baseline. Descriptions lack context on WHEN to use each tool and what distinguishes run_report from run_realtime_report.
No tool annotations (readOnlyHint, destructiveHint, idempotentHint). All three tools are read-only and idempotent, but this is not declared in the schema, forcing LLM to infer safety properties.