Library MCP has 6 tools with complete input schemas and descriptions. Naming follows verb_noun convention (search, get_book, list_books, enrich_*). However, descriptions lack LLM-optimization guidance (e.g., 'when to use this tool instead of similar ones'), parameter descriptions are minimal, and output schemas are undocumented. Tool annotations are present (readOnlyHint, destructiveHint) but error handling is weak, tools return plain strings without structured recovery guidance. No pagination support despite search returning potentially large result sets. Enrich tools default dry_run=true (safe) but lack confirmation patterns for destructive operations.
Enrich book metadata by searching Project Gutenberg for public domain books. Args: file_type: File type to process (default: pdf) limit: Max books to process in one run (default: 50) offset: Offset for pagination dry_run: If True, show what would be updated without writing to DB min_similarity: Minimum title match confidence 0-1 (default: 0.6) Returns: Summary of enrichment results
Enrich book metadata by querying Open Library for books with ISBNs. Args: dry_run: If True, show what would be updated without writing to DB Returns: Summary of enrichment results
Enrich book metadata by searching Open Library with title + author. Args: file_type: File type to process (default: fb2) limit: Max books to process in one run (default: 50) offset: Offset for pagination dry_run: If True, show what would be updated without writing to DB min_similarity: Minimum title match confidence 0-1 (default: 0.7) Returns: Summary of enrichment results
Get detailed information about a specific book. Args: book_id: Book database ID Returns: Detailed book information
List all books in a specific language. Args: language: Language code (en, ru, de, cs) Returns: List of books in that language
Output schemas undocumented. Tools return plain strings (e.g., search returns formatted text, not structured JSON). LLMs cannot parse results reliably or chain downstream calls. Baseline: 100% of A+ tools document return types.
No pagination support. search() accepts limit but no offset/cursor. Large result sets (e.g., 1000 books) will be truncated or blow context window. Baseline: tools returning lists should support page/offset + limit.
Descriptions lack LLM-optimization. Missing 'when to use' guidance and dependency hints. E.g., search description does not explain when to call it vs list_books, or that it requires a query. Baseline: descriptions should answer WHAT, WHEN, and WHAT IT RETURNS.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | D | 56 | 2026-07-28+ | v2 |
Search books in your library. Args: query: Search in title, author, filename language: Filter by language (en, ru, de, cs) author: Filter by author name file_type: Filter by file type (pdf, djvu, epub, fb2, doc) limit: Maximum results (default: 20) Returns: Formatted list of matching books
Error handling returns plain text without recovery guidance. E.g., 'Book with ID 999 not found' does not suggest calling search() first. Baseline: errors must tell LLM what to do next.
Enrich tools accept external API parameters (file_type, min_similarity) but lack input validation. LLM could pass invalid file_type or min_similarity > 1.0. No constraint documentation in descriptions.