Analytics MCP server providing traffic overview, custom events, funnels, retention, and live visitor data from a Gnat analytics database
Gnat provides 5 well-named analytics tools with clear, domain-specific descriptions (avg 150 chars). All tools have explicit input schemas with type definitions and parameter descriptions. Output schemas are documented via struct tags with jsonschema annotations. Naming follows verb_noun convention (get_*). However, output schemas lack formal JSON Schema documentation in code, they are inferred from Go struct tags, making them harder to verify statically. No error handling guidance, no parameter constraints (enums), and no pagination support despite tools returning lists. Missing tool annotations (readOnlyHint, idempotentHint). Date range parameters lack format constraints or validation examples.
Custom events tracked on the site (signups, purchases, clicks, etc — excludes pageview/heartbeat) for a date range, with counts and property value breakdowns for each event.
Every saved conversion funnel, with each step's visitor count for a date range. Use for questions about conversion, drop-off, or a specific named funnel.
Visitors currently active on the site right now — no date range, always the current moment. Each entry includes their current page, country, device, browser, and how long they've been continuously active.
Visitor retention curve for a date range: what fraction of visitors came back on each of several day-offsets (day 0, 1, 3, 7, 14, 21, 30) after their first visit, aggregated across every cohort in range.
Overall site traffic for a date range: today-vs-yesterday summary stats, daily pageviews, top pages, top referrers, traffic source breakdown (direct/google/social/email/referral), and visitor breakdowns by country, device, and browser. Use for general 'how's the site doing' questions.
Output schemas documented only via Go struct tags (jsonschema annotations), not as explicit JSON Schema in tool registration. Static analysis cannot verify output structure completeness. LLMs cannot see field types or constraints.
Date range parameters (from, to) lack format constraints, validation rules, or examples. Descriptions say 'YYYY-MM-DD' but no regex pattern or enum. LLMs may pass invalid dates; no guidance on what happens if parsing fails.
No tool annotations (readOnlyHint, idempotentHint, destructiveHint). All tools are read-only but this is not declared in the tool definition. Agents cannot distinguish safe tools from destructive ones without reading descriptions.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | B | 79 | 2026-07-28+ | v2 |
No pagination support. Tools returning lists (top_pages, top_referrers, countries, devices, browsers, events, funnels, visitors) have no limit/offset parameters or total_count in response. Large result sets risk context window exhaustion.
No error handling guidance. Tool handlers return errors but descriptions do not explain what errors are possible, when they occur, or how to recover. LLMs receive raw errors with no actionable next steps.