MCP server for Umami analytics platform providing access to website statistics, page views, metrics, and active visitor data
All 5 tools have basic descriptions and input schemas, but quality is inconsistent. Descriptions are adequate (50-150 chars) but lack actionable context for LLM selection. Parameter descriptions exist but are generic ('The unique identifier of the website' repeated 4 times). No output schemas documented. No error recovery guidance. No tool annotations (readOnlyHint present in metadata but not in schema). Tools are read-only, which is good, but descriptions don't explain WHEN to use each tool vs. alternatives (e.g., when to call get_stats vs get_metrics). Parameter constraints (e.g., date format, metric_type enum values) are mentioned in descriptions but not formalized in schema. No pagination support despite analytics tools typically returning large datasets.
Get the number of currently active visitors on a website
Retrieve specific metrics for a website (e.g., top pages, referrers, browsers) within a date range
Retrieve page view data for a website over a specified time period, aggregated by a specified unit (day, week, month, etc.)
Get analytics statistics for a website within a specified date range
Retrieve all websites configured in the Umami analytics instance
No output schemas documented. LLMs cannot plan downstream calls or extract fields without knowing response structure. Handlers return generic 'content' wrapper with JSON text, not structured objects.
Parameter descriptions are generic and repeated. 'The unique identifier of the website' appears in 4 tools but doesn't explain format (UUID? slug? numeric ID?). No enum constraints for metric_type or unit values.
No pagination support. Analytics tools typically return large datasets (thousands of pageviews, metrics). No limit/offset or cursor parameters. Handlers return all results, risking context window exhaustion.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | D | 55 | 2026-07-28+ | v2 |
No error recovery guidance. Handlers return generic error messages ('Failed to get stats: <error>') without actionable next steps. LLM cannot determine if error is retryable, user-fixable, or fatal.
Tool descriptions lack context for selection. No explanation of WHEN to use get_stats vs get_metrics, or get_pageviews vs get_stats. LLM must guess based on name alone.