The server defines 6 tools with complete input schemas and descriptions visible in src/index.ts. Naming follows verb_noun patterns (get_*, search_*, clean_*). Descriptions are present and between 10-200 characters, but lack operational guidance and context about when to use each tool vs alternatives. Parameter descriptions exist but are generic. Output schemas are not documented, LLMs cannot predict what fields are returned. The tools are READ_ONLY dominated (5 of 6), with minimal error handling guidance. No input validation constraints (enums, ranges) beyond defaults. The WeReadApi integration is opaque, actual return structures are invisible in the source provided.
Clean expired cache entries based on TTL
Get popular reviews for a specific book
Get all highlights and notes for a specific book, organized by chapter
Get all books in the user's bookshelf with comprehensive statistics and categorization information
Get cache statistics showing number of cached items
Search for books in the user's bookshelf by keywords and return matching books with details and reading progress
Output schemas not documented. The tool definitions list input schemas (good) but nowhere in the visible code are return types specified. LLMs cannot predict what fields get_bookshelf, search_books, etc. actually return, forcing them to guess about downstream chaining and data extraction.
Parameter constraints missing. Parameters like 'count' (get_book_best_reviews), 'max_results' (search_books) have no min/max bounds declared. An LLM could pass count=999999 or max_results=0 without validation. No enums for highlight_style filter either.
Tool descriptions lack operational context. 'Search for books in the user's bookshelf...' describes WHAT but not WHEN to use it or how it differs from get_bookshelf (which also returns books). No guidance on fuzzy vs exact matching trade-offs or result limits.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-22 | F | 49 | 2026-07-28+ | v2 |
| 2026-03-09 | F | 0 | - | v1 |
No error recovery guidance. Tool descriptions do not explain what failures mean or what to do next. E.g., what happens if book_id is invalid? Should the agent retry, search for the book first, or ask the user?
WeReadApi implementation opaque. The WeReadApi class (imported but not shown) handles the actual API calls, caching, and error handling. Without seeing that code, cannot verify input sanitization, secret injection, rate limiting, or resilience.
No pagination documentation in tool descriptions. get_book_best_reviews accepts 'max_idx' and 'synckey' for pagination, but the description does not explain what these mean, how to iterate, or what the total result count is. Agents cannot reason about multi-page traversal.