Model Context Protocol server for Consumer Rights Wiki - exposing consumer exploitation documentation
The server defines 6 tools with complete schemas and basic descriptions. However, descriptions are generic and lack LLM-optimized guidance on WHEN to use each tool vs. alternatives. Parameter descriptions are present but minimal. Output schemas are not documented, LLMs must infer what fields will be returned. Tool naming is clear and verb-driven, but lacks composition guidance for multi-step workflows. Error handling exists but responses are not actionable for recovery. No tool annotations present.
Get all categories or pages in a specific category
Get the full content of a specific wiki page
Get metadata about a wiki page
Get the section structure of a wiki page
Get recent changes to the wiki
Search for articles in the Consumer Rights Wiki
No output schemas documented. LLMs cannot infer response structure for downstream chaining. Each tool returns hardcoded text blobs without explicit field definitions.
Tool descriptions lack LLM-selection guidance. Descriptions state WHAT each tool does but not WHEN to use it instead of alternatives. E.g., get_page_content vs get_page_info vs get_page_sections, unclear which to call when.
Parameter descriptions are minimal (6-30 chars). E.g., 'Section number to retrieve' (29 chars) lacks format/range guidance. No minimum/maximum bounds specified for numeric parameters (limit, namespace).
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-22 | D | 54 | 2026-07-28+ | v2 |
| 2026-03-09 | F | 45 | - | v1 |
No error recovery guidance. Errors throw raw InternalError with API messages. LLM cannot determine if error is retryable, user-fixable, or fatal. E.g., 'Page not found' should suggest calling search_wiki() first.
No tool composition guidance. Tools form a logical chain (search → get_page_content → get_page_sections) but descriptions do not hint at this workflow or dependencies.
No tool annotations (readOnlyHint, idempotentHint). All tools are read-only (safe to retry), but this is implicit, not declared to the client.