ModelContextProtocol server for Ref - documentation search and URL reading tools with support for public and private documentation sources
Server defines 4 tools with basic schemas and descriptions, but exhibits significant quality gaps. Tool naming is inconsistent (search/fetch vs ref_search_documentation/ref_read_url), suggesting client-specific branching rather than clean composition. Descriptions are present but generic (avg ~120 chars, below 194-char baseline). Parameter descriptions lack detail on format/constraints. No output schema documentation. Error handling is minimal, no recovery guidance or actionable error messages. The dual naming pattern indicates the server conflates tool identity with client compatibility, violating single-responsibility principle.
Read the content of a url as markdown. The entire exact URL from a Ref 'search' result should be passed to this tool to read it.
Read the content of a url as markdown. The entire exact URL from a Ref 'ref_search_documentation' result should be passed to this tool to read it.
Search for documentation on the web or github as well from private resources like repos and pdfs. Use Ref 'ref_read_url' to read the content of a url.
Search for documentation on the web or github as well from private resources like repos and pdfs. Use Ref 'fetch' to read the content of a url.
Duplicate tool definitions with client-specific naming. Server registers both 'search'/'fetch' (for OpenAI) and 'ref_search_documentation'/'ref_read_url' (default), violating single-responsibility and creating confusion. LLMs must reason about which pair to use.
Parameter descriptions lack actionable constraints. 'query' param says 'Should include programming language and framework' but does not specify format, length limits, or what happens if omitted. 'url' param has no format validation hint (must be valid HTTP/HTTPS URL).
No output schema documented. Tools return results but LLMs cannot plan downstream calls without knowing response structure. Missing: field names, types, pagination info, required vs optional fields.
Inferred effective spec: <=2025-11-25.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | D | 52 | <=2025-11-25 | v2 |
Error handling is absent. No try-catch blocks visible in tool implementations (code truncated), no error classification (retryable vs fatal), no recovery guidance. LLMs cannot self-correct on failures.
Tool naming inconsistency. 'search' vs 'ref_search_documentation' and 'fetch' vs 'ref_read_url' are semantically identical but named differently. LLMs conflate similar names, this forces unnecessary reasoning overhead and risks wrong tool selection.