Model Context Protocol server for Umami Analytics. Self-hosted, credentials never leave your environment.
Server has 4 tools with basic schemas and descriptions. All tools are READ_ONLY with proper annotations. Naming follows verb_noun pattern (umami_list, umami_get, umami_whoami). Descriptions are present but minimal (10-50 chars), below the 50-200 char LLM-optimized baseline. Input schemas exist but lack detail: pageSize and period parameters have no enums, ranges, or format constraints. Output schemas are completely undocumented, LLMs cannot predict response structure. Error handling returns generic failure messages without recovery guidance. No parameter validation rules documented (e.g., what values are valid for 'period'?). Tool composition is sound (single responsibility), but descriptions need expansion to guide LLM selection.
Get detailed metrics for a website
Get analytics statistics for a website
List all websites in Umami
Get information about the authenticated user
Output schemas completely undocumented. LLMs cannot predict response structure, forcing them to guess at field names and types for downstream tool calls or data extraction.
Parameter descriptions lack constraints. 'period' accepts values like '24h', '7d', '30d' but no enum or pattern is declared. LLMs will hallucinate invalid values like '1w' or '2months'.
Tool descriptions are too brief (10-50 chars). Baseline for LLM-optimized descriptions is 50-200 chars. Current descriptions lack context on WHEN to use each tool and what distinguishes them.
Inferred effective spec: <=2025-11-25.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | D | 51 | <=2025-11-25 | v2 |
Error handling returns generic 'tool_name failed: <error>' without recovery guidance. LLMs cannot determine if the error is retryable, user-fixable, or fatal.
pageSize parameter has no bounds. Unbounded numeric parameters let LLMs pass absurd values (e.g., pageSize=999999) that break APIs or cause timeouts.