MCP Server for Hackage documentation. Provides tools to search Hoogle, list package modules, and fetch Markdown docs for Haskell modules from Hackage.
Three tools with explicit schemas and basic descriptions, but significant gaps in parameter documentation and output schema clarity. All tools are read-only and properly named with action verbs (search_, list_, get_). However, parameter descriptions are minimal (10-20 chars), output schemas are undocumented, and error handling lacks recovery guidance. The module_name parameter in get_module_docs has a detailed constraint description (hyphen-casing requirement), which is good, but other parameters lack similar specificity. No tool annotations (readOnlyHint, etc.) present. Schemas are properly typed but sparse.
Fetch LLM-friendly Markdown docs for a module in a package.
List exposed modules in a Hackage package.
Search Hoogle for identifiers, types, or packages.
Output schemas completely undocumented. Tools return ContentText but LLMs cannot infer structure (JSON, markdown, plain text?), field names, or pagination. Breaks downstream tool chaining and forces LLMs to parse unstructured output.
Parameter descriptions are too brief (10-20 chars). 'Hoogle search query' and 'Exact Hackage package name' lack guidance on format, constraints, or examples. LLMs cannot infer whether to pass 'Data.List' or 'data-list' without explicit format hints.
No tool annotations (readOnlyHint, destructiveHint, idempotentHint). All three tools are read-only and idempotent, but this is not declared in the schema. Agents cannot infer safety properties without explicit hints.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | D | 55 | 2026-07-28+ | v2 |
Error handling returns generic InternalError without recovery guidance. When a package or module is not found, the LLM receives no hint to try search_hoogle or list_package_modules. Errors should guide next steps.
No pagination support. If search_hoogle or list_package_modules return large result sets, there is no limit parameter or cursor. Results could exhaust context window without truncation.