docbridge presents a simple STDIO-based documentation search server with 4 tools. All tools are explicitly registered via @mcp.tool() decorators with visible implementations. However, the server has significant definition quality gaps: (1) Tool descriptions are extremely brief (7-38 chars), well below the 194-char baseline and below the 20-char minimum threshold for acceptable description scoring. (2) Input schemas ARE present and properly typed in FastMCP decorators, but parameter descriptions are minimal or absent (e.g., library param in list_files lacks any description of what constitutes a valid library name). (3) Output schemas are not documented, tools return plain strings rather than structured JSON, forcing LLMs to parse unstructured text. (4) Error handling is implicit (returns error strings like 'No libraries found'), with no guidance on next steps or recovery. (5) No tool annotations (readOnlyHint, etc.) despite all tools being read-only. All 4 tools have identical weaknesses.
Get the content of a specific documentation file
List all files in a specific library
List all available documentation libraries
Search across all docs or within a specific library
Tool descriptions far below baseline (7-38 chars vs 194-char median). list_libraries='List all available documentation libraries' is only 38 chars, lacks WHEN/WHY context for LLM selection.
Parameter descriptions missing or insufficient. list_files and get_file accept 'library' param with no description of what constitutes a valid library name, expected format, or examples. LLMs cannot infer.
Output schema not documented. All tools return plain strings (e.g., 'No libraries found\n- lib1\n- lib2'). No structured JSON. LLMs must parse free-text output, error-prone and wastes tokens.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | D | 50 | 2026-07-28+ | v2 |
Error handling is implicit and non-actionable. 'Library not found or empty' and 'Nothing found' provide no recovery guidance. No suggestion to try search_docs() or list_libraries() to discover alternatives.
No tool annotations. All tools are read-only (verified from source: no file writes, deletes, or external side effects), but no readOnlyHint annotation present. LLMs cannot distinguish safe tools from destructive ones without this metadata.
search_docs optional 'library' parameter lacks clarity. Description says 'Optional library name to search within' but does not explain: Is it a library name or path? What if library doesn't exist? Should I call list_libraries() first?
No pagination or result limits documented in search_docs. Code caps results at 30 (line 'if len(results) >= 30: return results'), but this limit is not mentioned in the description. LLMs cannot reason about result truncation.