Unified MCP server for Google Analytics 4, Search Console, Sheets, Tag Manager, and PageSpeed — browser OAuth, no config files
Server has 27 tools with consistent naming (verb_noun pattern: ga4_*, gsc_*, gtm_*, psi_*) and descriptions present for all. However, input schemas lack depth: most parameters are minimally typed (string/array/number only), lack format constraints (dates as free-form strings), and descriptions are often generic. Output schemas are not documented. Error handling is minimal, no recovery guidance or actionable error messages visible in code. Tool composition is sound (each does one thing), but parameter validation and LLM-optimized descriptions are weak. Baseline: 194 chars avg description; these average ~120 chars and lack 'when to use' context.
Show performance by UTM campaign, source, and medium. Use to evaluate paid and organic campaign effectiveness.
Show traffic split by GA4 default channel groupings: Organic Search, Direct, Paid Search, Email, Referral, Social, and others.
Get live GA4 data for the last 30 minutes — active users, current pages, and real-time event counts. Use for dashboards and live monitoring.
Run a fully custom GA4 report with any dimensions and metrics you choose. Use this when none of the specific report tools cover your exact needs. Dimensions and metrics must use GA4 API field names (e.g. "pagePath", "sessions").
Get a high-level traffic summary: sessions, users, new users, pageviews, bounce rate, and average session duration. Use as a first step when assessing overall site performance for a date range.
Date parameters lack format constraints. 'startDate' and 'endDate' accept free-form strings ('2024-01-01', '28daysAgo', 'today') with no schema validation. LLMs cannot infer valid formats and may pass invalid dates.
Output schemas not documented. No tool describes what fields it returns, their types, or structure. LLMs cannot plan downstream tool calls or extract required data (e.g., does ga4_run_report return 'rows' or 'data'? Is 'sessions' a number or string?).
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | D | 56 | 2026-07-28+ | v2 |
Break down traffic by source and medium (e.g. google/organic, direct/none). Use to understand where your sessions are coming from.
Check authentication status and confirm which Google account is connected. Run this first to verify the MCP server is working correctly.
Fetch the complete GSC dataset for a date range and dimension set, automatically paginating through all results. Capped at 25,000 rows. Use when you need the full dataset rather than a top-N slice.
Break down search performance by country — clicks, impressions, CTR, and average position per country. Use to understand geographic search distribution.
Show search performance split by device type: mobile, desktop, and tablet. Use to compare organic search behaviour across devices.
Run a fully custom Search Console query with any combination of dimensions, date range, row limit, and optional dimension filters. Use when the specific GSC tools do not cover your exact breakdown.
Show the top pages on your site by organic search clicks, with impressions, CTR, and average position. Use to identify your best-performing content in search.
Show the top search queries driving clicks to your site, with impressions, CTR, and average position. Use to understand which keywords are performing best.
Audit a GTM workspace and return a structured report of issues: orphaned triggers (not used by any tag), duplicate tag names, and unused variables (not referenced by any tag or trigger). Defaults to the first workspace if workspaceId is not provided.
Get full details for a single GTM tag by ID, including all parameters and trigger bindings. Use after gtm_list_tags to inspect a specific tag in depth.
List all GTM accounts accessible with the connected Google account. Use to find your GTM_ACCOUNT_ID if you do not know it.
List all GTM containers in the configured account. Use to find your GTM_CONTAINER_ID and the public GTM-XXXXXX ID.
List all tags in a GTM workspace — name, type, firing triggers, and paused state. Defaults to the first workspace if workspaceId is not provided.
List all triggers in a GTM workspace — name, type, and trigger ID. Defaults to the first workspace if workspaceId is not provided.
List all variables in a GTM workspace — name and type. Defaults to the first workspace if workspaceId is not provided.
List all workspaces in the configured GTM container. Returns workspace IDs and names. Use to find the workspaceId for other GTM tools.
Run a full PageSpeed Insights analysis on a URL. Returns Lighthouse category scores (performance, accessibility, best practices, SEO), lab Core Web Vitals (LCP, TBT, CLS, FCP, Speed Index, TTI), and real-world field data from CrUX if available. Defaults to mobile strategy.
Analyse multiple URLs sequentially and return scores and Core Web Vitals for each. Requests are spaced 2 seconds apart to avoid rate limiting. Set PSI_API_KEY in your environment for higher rate limits — without a key, bulk analysis of more than a few URLs may be throttled.
Analyse the same URL on both mobile and desktop simultaneously and return scores and Core Web Vitals side by side. Use to understand the performance gap between mobile and desktop experiences.
Return Core Web Vitals for a URL — both lab measurements (from Lighthouse) and real-world field data (from CrUX, p75). Includes pass/fail category for each metric. Use to diagnose CWV issues or check if a page passes the CWV thresholds.
Return the four Lighthouse category scores for a URL: performance, accessibility, best practices, and SEO. Scores are 0–100. Use for a quick quality check or to compare pages without needing the full Core Web Vitals breakdown.
Clear the stored Google token and restart the login flow. Use this if you need to switch accounts or if authentication has stopped working.
No error handling guidance. Code shows try-catch blocks but no recovery hints. If a tool fails (e.g., 'Invalid date range'), LLMs receive no actionable next step, no suggestion to retry, adjust parameters, or call a discovery tool first.
Numeric limits not specified. 'limit' parameters (default 20) lack min/max constraints. 'rowLimit' in gsc_search_analytics says 'max: 25000' in description but not in schema. LLMs may pass invalid values.
Descriptions lack 'when to use' context. Most descriptions state WHAT the tool does but not WHEN to call it vs. similar tools. E.g., ga4_run_report vs. ga4_traffic_overview, when should an LLM pick one over the other? Descriptions should guide tool selection.