The most capable Calibre MCP server — full read/write tool surface plus library- and book-scoped semantic search.
calibre-mcp provides 2 tools with reasonable naming and clear descriptions, but critical gaps in schema documentation and parameter validation reduce confidence. The calibre_ping tool has a minimal empty input schema with no parameter descriptions. The calibre_build_index tool has comprehensive parameter definitions with types and helpful descriptions, but output schemas are not documented in the visible code. Tool descriptions are substantial (150-200+ chars) and explain purpose well, following the chat data model (e.g., 'Build the semantic index for specific books'). However, parameter descriptions lack specificity on formats, ranges, and error conditions. The server demonstrates good intent around domain complexity (semantic search, library indexing, embedding models) but falls short of production-grade rigor expected for tools modifying state (calibre_build_index is WRITE). Security and error recovery guidance are largely absent.
Build the semantic index for specific books (required: bookId, ids, or query — full-library indexing is deferred). Extracts, chunks, and embeds each book. Set keywordOnly=true (or when the embedding model is absent, it happens automatically) to build a keyword-only index that powers mode:"keyword" search with zero ML dependencies. Re-run after adding books; use force to re-index unchanged ones. Set prune=true to also drop index entries for books that no longer exist in the library (removals/merges leave searchable orphans behind).
Health check: confirms the MCP server can reach the running Calibre Content Server via calibredb, and reports semantic-search status (embedding model, dependency, index vector count). Returns library categories on success.
calibre_ping has empty input schema ({}) but no documentation of what the tool returns on success (mentioned 'returns library categories' in description but no formal output schema definition visible in code)
calibre_build_index parameters lack validation constraints: 'query' has maxLength=512 but no pattern or format hint; 'library' has no description of allowed values or default behavior; 'bookId' described as 'optional numeric book identifier' but type is string, creating potential type confusion for LLMs
No documented output schema for either tool. LLMs cannot reason about downstream tool chains or field availability. calibre_ping claims to return 'library categories' but structure is not specified; calibre_build_index return type is undocumented
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | D | 58 | 2025-06-18+ | v2 |
WRITE tool (calibre_build_index) lacks error recovery guidance. No documentation of what happens on partial failures (e.g., some books index successfully, others fail), no guidance for LLM on retryability, and no dry-run or confirmation pattern for destructive operations (prune=true deletes index entries)
Parameter dependencies undocumented: 'bookId', 'ids', and 'query' are marked optional but description says 'required: bookId, ids, or query', this is not enforced in schema and creates ambiguity for LLM about which combinations are valid
calibre_build_index description contains implementation details ('Set keywordOnly=true ... it happens automatically', 'Re-run after adding books') that obscure the core action for LLMs. Format should prioritize WHAT and WHEN, not implementation caveats
No documented limits on indexing scope or time. LLM has no way to know if requesting full-library index (omitting bookId/ids/query) is feasible or will time out. Description mentions 'full-library indexing is deferred' but no guidance on expected duration or batch size