MCP server for AVR documentation with Wiki.JS integration
Server provides three read-only Wiki.JS tools with verb-based naming (search_, list_, get_) and non-empty descriptions. All tools have properly typed input schemas using Zod with parameter descriptions. However, several gaps reduce quality: (1) descriptions are brief and lack WHEN/WHY guidance for tool selection; (2) output schemas are not explicitly documented, responses are formatted as text within content arrays but the field structure and pagination metadata are not declared upfront; (3) error handling is absent, no guidance on what happens on network failure, invalid pageId, or missing pages; (4) parameters accept numeric ranges but constraints are not enforced or validated client-side; (5) no mention of rate limits, timeout behavior, or service prerequisites (Wiki.JS URL, API key injection pattern). Tools follow composition rules well (one clear action each) and chain logically (search/list return pages, get requires pageId), but lack the production-grade robustness expected for a 70+ score.
Get a specific page from Wiki.JS by ID or path
List all available pages in Wiki.JS
Search Wiki.JS pages for specific topics or keywords
Output schemas not documented. Tool responses return formatted text within content arrays, but the expected output structure (fields, types, pagination metadata) is not declared. LLMs cannot plan downstream tool calls without knowing what fields to expect.
Tool descriptions lack WHEN/WHY guidance. Descriptions state WHAT (search pages, list pages, get page) but not WHEN to use each tool instead of alternatives or what prerequisites exist. Example: search_wiki_pages should note 'Use this to find pages by keyword. If you know the exact page path, use get_wiki_page instead.' This helps LLMs select the right tool.
No error handling or recovery guidance. If Wiki.JS is unreachable, pageId is invalid, or a search returns zero results, the tools throw or return generic failures. Error responses should guide the LLM: 'Page not found. Try search_wiki_pages() with a keyword, or list_wiki_pages() to browse.'
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-22 | F | 12 | <=2025-11-25 | v2 |
| 2026-03-09 | D | 59 | - | v1 |
Parameter constraints not enforced. Descriptions state 'max: 50' for limit and 'page number for pagination' but do not validate or reject out-of-range values. Passing limit=999 or page=0 may cause backend errors. Add validation and clear error messages: 'limit must be 1-50'.
Service initialization failure is not graceful. If WikiService() throws (e.g., invalid Wiki.JS URL or missing API key), the server exits with process.exit(1). In production, services should boot with degraded mode or return service unavailable errors rather than crashing.
No rate limiting or timeout configuration visible. Tools make HTTP calls to Wiki.JS via WikiService but no timeout, backoff, or rate limit hints are documented. An agent in a tight loop could overwhelm the backend or hang indefinitely on slow responses.