MCP server for searching and downloading books and academic articles from Anna's Archive
The server defines 4 tools with clear naming (verb-first: search, download) and explicit input schemas visible in mcpserver.go. However, descriptions are present but sparse (averaging ~100 chars, below the 194 char production baseline). Parameter descriptions exist but lack detail on formats, constraints, and error conditions. Output schemas are undocumented, responses are free-form text rather than structured objects. No tool annotations (readOnlyHint/destructiveHint) are present. Error handling is basic (error returns without recovery guidance). Security: secrets (ANNAS_SECRET_KEY, ANNAS_DOWNLOAD_PATH) are correctly injected via environment variables, not parameters. The tools are well-composed (each does one thing) and follow a consistent naming pattern.
Download an academic article/paper by its DOI. Looks up the paper, then downloads via fast download (if available) or SciDB. Requires ANNAS_DOWNLOAD_PATH environment variable.
Search for academic articles/papers by DOI or keywords. Auto-detects if input is a DOI (starts with '10.') or a search term. Returns article metadata including DOI and hash.
Download a book by its MD5 hash from search results. Requires ANNAS_SECRET_KEY and ANNAS_DOWNLOAD_PATH environment variables.
Search Anna's Archive for books by title, author, or topic. Returns book metadata including MD5 hash for downloading.
Output schemas are not documented. All tools return free-form TextContent. LLMs cannot plan downstream tool calls or extract structured data without knowing response field names and types.
Descriptions lack context on when to use each tool and dependencies between them. For example, book_download requires an MD5 hash from book_search, but the description does not state this prerequisite.
Parameter 'timeout_seconds' lacks constraints. No minimum/maximum, no default behavior documentation. An LLM could pass negative or absurdly large values; only runtime validation catches these.
Inferred effective spec: <=2025-11-25.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-22 | D | 59 | <=2025-11-25 | v2 |
| 2026-03-09 | F | 44 | - | v1 |
No tool annotations (readOnlyHint, destructiveHint). book_search and article_search are read-only; book_download and article_download are destructive (write to disk). Annotations would help LLMs reason about safety and composition.
Error responses lack recovery guidance. When a download fails or no results are found, the tool returns a bare message. Should guide the agent: 'Try a different search query', 'Verify the hash is correct', or 'Check that ANNAS_DOWNLOAD_PATH exists and is writable'.
Parameter descriptions in book_download ('Book format, for example pdf or epub') suggest example values instead of declaring an enum. LLMs may pass invalid formats like 'mobi' or 'doc'. Should define enum: ["pdf", "epub", ...].