Single tool with adequate schema but significant description and parameter documentation gaps. The tool definition is explicitly visible in src/plausible/query.ts with proper JSON Schema structure. However, parameter descriptions are confusing and overly verbose, violating the principle that descriptions should be 10-1024 chars and human-readable. The 'metrics' parameter description is a tab-separated wall of text (500+ chars) that would confuse LLMs during parsing. No enum constraint provided for metrics despite known valid values. Output schema is completely undocumented, LLMs cannot plan downstream actions without knowing what fields to expect from the response. Error handling is minimal (client.ts throws generic API errors with no recovery guidance). Tool naming is reasonable ('plausible_query' uses verb_noun pattern and is specific), but parameter naming could be clearer ('date_range' is acceptable but lacks type hints like 'ISO8601_date_range').
Query analytics data from Plausible
Metrics parameter uses unstructured pipe-delimited text instead of enum. Description is 500+ chars of tab-separated options, making it ambiguous for LLM parsing. Should declare metrics as enum: ['visitors', 'visits', 'pageviews', 'views_per_visit', 'bounce_rate', 'visit_duration', 'events', 'scroll_depth', 'percentage', 'conversion_rate', 'group_conversion_rate', 'average_revenue', 'total_revenue'].
No output schema documented. LLMs cannot know what fields the API returns (e.g., does it return 'results', 'data', 'metrics'? Are there pagination fields?). This forces agents to guess structure and risks parsing errors. Add explicit outputSchema documentation showing return type and required fields.
Date_range parameter description lists 8 valid formats but as unstructured text rather than enums or a pattern constraint. LLMs cannot parse this reliably. Should either (1) provide enum ['day', '7d', '30d', 'month', '6mo', '12mo', 'year', 'all'] for preset ranges, or (2) add a regex pattern for ISO8601 dates with clear explanation.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-22 | F | 44 | 2026-07-28+ | v2 |
| 2026-03-09 | F | 37 | - | v1 |
Error handling in client.ts is generic: 'Plausible API error: {statusText}'. Does not tell the LLM whether to retry (retryable status codes?), whether the user provided invalid input (400 vs 401 vs 403), or how to recover. Violates pattern:recovery-guide.
Metrics parameter description includes conditional requirements ('Requires event:page filter or dimension being set', 'Requires revenue goals') but these constraints are buried in a long text block rather than documented in a structured way (e.g., param dependencies section). Agents will not reliably identify when they've provided invalid metric + filter combinations.