MCP server for Umami Analytics — 61 tools, 4 prompts, 3 resources. Cloud and self-hosted.
21 tools with consistent verb-noun naming (get_*, all READ_ONLY). All have descriptions (10-200 chars, well within baseline). Input schemas present with Zod validation and descriptions for all parameters. However, output schemas are NOT documented, responses are JSON-stringified without field-level documentation. No error handling guidance, no recovery hints, no tool annotations. Pagination present (page/page_size) but no total_count or next_cursor documented. Missing idempotent/readOnly hints despite all tools being safe. Descriptions are functional but generic, lack 'when to use' context and dependency hints (e.g., 'Call get_websites first').
Current active visitors in real-time. No date parameters needed.
Available data date range (earliest and latest dates) for a website.
Get event data for a specific individual event by its ID.
Get event names, their properties, and counts. Optionally filter by event name.
Get event property and value counts for all events.
Get event name and property counts.
Output schemas not documented. Tools return JSON.stringify(data) with no field-level documentation. LLMs cannot plan downstream calls or extract specific fields without trial-and-error.
No error handling guidance. Tools return raw API errors without recovery hints. LLMs cannot self-correct on invalid dates, missing websites, or API failures.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | C | 61 | 2026-07-28+ | v2 |
Get event data counts for a specific event and property combination.
List individual event details within a time range. Paginated, with optional search.
Event data over time. Returns 'x' (event name), 't' (timestamp), 'y' (count).
Aggregated event statistics with optional period comparison.
Get information about the current authenticated user: token info, user details.
Breakdown by path, referrer, browser, OS, device, country, city, language, screen, event, UTM params, etc. Returns 'x' (value) and 'y' (count).
Expanded metrics with per-item stats: pageviews, visitors, visits, bounces, totaltime.
Time-series pageview and session data grouped by time unit.
Individual session details: browser, OS, device, country, city, views, visits. Paginated.
Aggregated session statistics: total pageviews, unique visitors, visits, unique countries, events.
Session heatmap: 7 arrays (Mon-Sun) x 24 values (hours). Identify peak traffic times.
Aggregated stats: pageviews, visitors, visits, bounces, totaltime. Supports period comparison.
Get detailed information about a specific website by its ID.
List all tracked websites with IDs, names, domains and creation dates. CRITICAL: Always call this FIRST before any analytics queries.
Verify the current authentication token and get user info. Self-hosted only — Cloud uses get_me instead.
Descriptions lack 'when to use' context and dependency hints. get_websites description says 'Always call this FIRST' but other tools don't mention this prerequisite. LLMs may call analytics tools without fetching website IDs first.
No tool annotations (readOnlyHint, idempotentHint). All 21 tools are READ_ONLY and safe to retry, but this is not declared. Agents cannot optimize retry logic or understand safety guarantees.
Pagination parameters (page, page_size) present but no total_count or next_cursor documented. LLMs cannot determine if more results exist or how many pages to fetch.