Skip to main content
Glama
ZehuiTIAN

calibre-mcp

by ZehuiTIAN

calibre-mcp

An MCP server that gives AI assistants (Claude Code, Claude Desktop, Cursor, ...) read and write access to your local Calibre ebook library.

Search the library, browse recent additions, import new ebooks with automatic duplicate detection, and manage a "drop folder" inbox — all from chat.

  • Zero-config on a normal setup: the calibredb executable and the library your Calibre GUI is using are discovered automatically on macOS, Windows and Linux.

  • Locale-independent: all reads go through calibredb --for-machine (JSON), so results never depend on your Calibre interface language.

  • Safe by default: duplicate detection relies on Calibre itself — a book whose title + author is already in the library is skipped, never imported twice.

  • Reads book contents: a local full-text index (with CJK support) plus paged text reading, built on Calibre's own converter — great for quoting and summarising.

Tools

Tool

Description

library_info

Library path, number of books, calibre version

search_books

Full calibre query language search (author:asimov, title:"i robot", tags:python, ...)

list_books

Browse the library, defaults to most recently added first

add_books

Import ebook files or whole directories, with duplicate detection

import_inbox

Import everything in the inbox folder and file it away

build_index

One-time index of book contents for full-text search

search_in_book

Search inside book contents, returning match snippets

read_book

Read a book's plain text page by page (converted on demand)

detect_scanned_books

Find books whose PDF is scanned (no text layer)

ocr_book

OCR a scanned PDF via a cloud provider, index it, and re-typeset it into an EPUB

ocr_scanned_books

Batch-OCR every scanned book in the library (resumable)

Related MCP server: Calibre MCP Server

Requirements

  • Calibre (any version that ships calibredb; tested with 9.x)

  • Python ≥ 3.10

Installation

pipx install calibre-mcp

uv

uv tool install calibre-mcp

pip

pip install calibre-mcp

From source

git clone https://github.com/ZehuiTIAN/calibre-mcp.git
cd calibre-mcp
pip install -e ".[dev]"     # dev extras add pytest + ruff

Configuration

Everything is optional on a normal setup; each value can be pinned with an environment variable.

Variable

Meaning

Default

CALIBRE_LIBRARY_PATH

Library directory to use

The library your Calibre GUI uses (most-used library from gui.json, else the default library)

CALIBREDB_PATH

Path to the calibredb executable

calibredb on PATH, then platform install locations (macOS app bundle, C:\Program Files\Calibre2\)

CALIBRE_INBOX_DIR

Drop folder for import_inbox

Disabled (tool errors if used)

CALIBRE_TEXT_CACHE_DIR

Where converted text + search index live

OS temp dir (not persistent across reboots)

CALIBREDB_TIMEOUT

Seconds before a calibredb call is aborted

300

CALIBRE_OCR_PROVIDER

OCR backend (anthropic)

anthropic

CALIBRE_OCR_API_KEY

API key for the OCR backend

— (required for ocr_book)

CALIBRE_OCR_MODEL

Model for the OCR backend

provider default

CALIBRE_OCR_BASE_URL

Optional API base URL override (proxies/gateways)

CALIBRE_OCR_MAX_PAGES

Page cap per ocr_book run

500

Registering with Claude Code

claude mcp add calibre-mcp -- calibre-mcp

or add to ~/.claude.jsonmcpServers (user scope):

"calibre_mcp": {
  "type": "stdio",
  "command": "calibre-mcp",
  "args": [],
  "env": {
    "CALIBRE_LIBRARY_PATH": "/path/to/your/library",
    "CALIBRE_INBOX_DIR": "/path/to/your/inbox"
  }
}

Registering with Claude Desktop / Cursor

Add the same JSON block to the MCP servers section of claude_desktop_config.json (Claude Desktop) or Cursor's MCP settings.

Inbox workflow

A drop folder makes a pleasant "find → drop → archive" loop for books you download by hand:

  1. Point CALIBRE_INBOX_DIR at a folder, e.g. ~/Downloads/Calibre-Inbox.

  2. Download ebooks into that folder.

  3. Ask your assistant to run import_inbox.

Every file is added to the library; successfully added files and duplicates are filed under imported/YYYY-MM/, failures under failed/ — the inbox itself stays clean, and nothing is ever overwritten (name collisions get a -1, -2, ... suffix).

Supported extensions: .epub .pdf .mobi .azw .azw3 .djvu .cbz .cbr .fb2 .txt .md .docx .rtf .lit .prc .pdb .chm .htmlz.

Full-text search & reading

To search inside book contents or quote a passage, index the library once:

  1. (Optional) point CALIBRE_TEXT_CACHE_DIR at a persistent location — the default cache lives in the OS temp directory.

  2. Ask your assistant to run build_index. A first run converts every book with Calibre's converter; expect roughly a second or two per book (PDFs take longer). Later calls skip books that are already indexed.

Then:

  • search_in_book("机器学习与深度学习", book_id=42) — substring search, works for Chinese without word segmentation and for English; queries shorter than three characters fall back to a linear scan so two-character Chinese words still match.

  • read_book(42, offset=0, limit=12000) — paged plain-text reading; responses carry next_offset and total_chars.

The index and converted texts live outside the library (a cache directory); the library itself is never modified by these tools. Note that calibre's own built-in full-text search is not used: its background indexing does not reliably extract text outside the GUI on some platforms, and a self-contained index behaves identically everywhere.

OCR for scanned PDFs

Calibre has no OCR: a scanned PDF (pages are photos, no text layer) converts to an EPUB full of page images and stays unsearchable. calibre-mcp closes that gap with a pluggable cloud OCR pipeline:

pip install "calibre-mcp[ocr]"     # adds pymupdf + the anthropic SDK
  1. Set CALIBRE_OCR_API_KEY (and optionally CALIBRE_OCR_PROVIDER / CALIBRE_OCR_MODEL / CALIBRE_OCR_BASE_URL).

  2. detect_scanned_books() — lists books whose PDF has no usable text layer (no key needed for detection).

  3. ocr_book(42) — renders the pages, sends them to the provider (default: the Anthropic Messages API, 8 pages per request), caches the structured markdown, indexes it for search_in_book / read_book, then typesets a clean EPUB with pandoc and attaches it to the existing book record (replacing any previous EPUB).

  4. ocr_scanned_books(limit=10) — batch mode: OCR every scanned book in the library, skipping already-OCR'd ones. Repeat the call to work through a large library; per-batch caching makes every interruption resumable.

The provider interface is two methods (ocr_pages); adding Azure Document Intelligence or Aliyun/Baidu OCR means implementing that interface and registering it in ocr.PROVIDERS.

Provider choice: for Chinese books, Alibaba Cloud Bailian qwen-vl-ocr is the default recommendation — purpose-built document OCR with layout output, priced at roughly ¥0.3 for a 200-page book (≈1/20 the cost of a general vision LLM). Full comparison, official links and sign-up steps: docs/OCR_PROVIDERS.md(中文).

API key isolation: keys are per-user — set them in your MCP client config only, never in the repository. Nothing in this project reads keys from files or embeds them; each user brings their own key.

Caveats

  • Database lock: while the Calibre GUI has the library open, write operations (add_books, import_inbox) can fail with a database lock error. Read-only tools keep working. Close Calibre (or switch it to another library) before importing.

  • Large libraries: add_books/import_inbox snapshot the full set of book ids around each add, which is fast in practice but is O(number of books) per import.

  • This tool only organizes your library. It contains no search or download functionality; use it with content you have the right to hold.

Development

pip install -e ".[dev]"
ruff check .
pytest -m "not integration"      # unit tests, run anywhere
pytest                           # + integration tests (need local calibre)

Integration tests create throwaway libraries under /tmp and never touch your real library.

License

MIT — see LICENSE.


中文速览

把本地 Calibre 书库接给 Claude/Cursor 等 AI 助手的 MCP 服务器:十二个工具 (元数据搜索/浏览/导入查重/收件箱归档 + build_index/search_in_book/ read_book 全文检索与读正文 + detect_scanned_books/ocr_book/ ocr_scanned_books 扫描书云端 OCR 与批量重排版),自动发现 calibredb 和 书库位置,全平台(Windows/macOS/Linux)开箱即用。仓库自带 CLAUDE.md, AI 助手拉下来即可按指引完成安装与 API 配置。

pipx install calibre-mcp
claude mcp add calibre-mcp -- calibre-mcp

导入时自动查重(书名+作者相同的书不会被重复导入);配合 CALIBRE_INBOX_DIR 收件箱目录,把下载的书丢进去、说一句"导入收件箱"即可 归档,处理完的文件自动归类到 imported/failed/

想引用书里内容:先跑一次 build_index 建全文索引(中文子串可直接搜), 之后 search_in_book 定位段落、read_book 分页读正文。

注意:Calibre 桌面程序打开着同一书库时,写入操作可能因数据库锁失败, 导入前先关闭 Calibre。

Available Tools

11 tools
add_booksA

Import ebook files (or directories of ebooks) into the library.

Books whose title + author are already in the library are skipped by calibre and reported as "duplicate". The Calibre GUI must not hold the library open while adding.

Args: paths: Absolute paths to ebook files or folders containing ebooks.

ParametersJSON Schema
NameRequiredDescriptionDefault
pathsYes

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.1/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the full burden of behavioral disclosure. It does reveal two useful traits: books with matching title+author are skipped and reported as 'duplicate', and the Calibre GUI must not hold the library open. However, it does not mention whether files are copied or moved, whether directory traversal is recursive, what happens on partial failure, or any other side effects, leaving notable behavioral gaps.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is compact and well-structured: a one-line purpose statement, two concise behavioral caveats, and an Args section with a single parameter definition. No sentence is wasted, and the most important usage constraints are front-loaded before the parameter details.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple single-parameter import tool with an output schema present, the description covers the essential prerequisites: absolute path semantics, file-or-directory inputs, duplicate handling, and the GUI-lock constraint. It does not mention whether folders are processed recursively or which ebook formats are supported, but these are minor gaps given the tool's simplicity and the availability of an output schema.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema only defines 'paths' as an array of strings with no description (0% schema coverage). The description fully compensates by specifying that paths must be 'Absolute paths' and can point to 'ebook files or folders containing ebooks.' This directly adds crucial meaning that the schema lacks, making the parameter semantics clear and unambiguous.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb, 'Import', and a clear resource, 'ebook files (or directories of ebooks) into the library.' It clearly differentiates from most siblings like search_books, list_books, and read_book. However, it does not explicitly distinguish itself from the sibling 'import_inbox', which may represent an overlapping alternative, so the differentiation is not complete.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides clear operational context, explicitly stating that the Calibre GUI must not hold the library open while adding. It also explains the duplicate-skipping behavior, which helps an agent anticipate outcomes. However, it does not mention any alternative tools or conditions under which a sibling like import_inbox would be more appropriate, so exclusions are absent.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

build_indexA

Index book contents for full-text search (one-time, cached).

Converts each book's text with calibre's converter and stores it in a local SQLite FTS5 index kept outside the library. Only books that are not indexed yet are processed; an initial run over a whole library can take several minutes.

Args: book_ids: Optional list of book ids to index; default: all books that are not indexed yet. limit: Optional cap on how many books to index in this call.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNo
book_idsNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.8/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full burden of behavioral disclosure, and it delivers: it explains that the tool converts book text via calibre's converter, stores data in a local SQLite FTS5 index outside the library, only processes unindexed books, and may take several minutes initially. This gives the agent a strong understanding of side effects, persistence, and cost.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is well-structured with a concise summary up front followed by an Args section. Every sentence adds value: the operation, the caching behavior, the storage location, the idempotency, the time cost, and parameter semantics. There is no filler or repetition of the schema.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a tool with only two optional parameters and an output schema, the description covers the important operational details: what gets built, where it is stored, which books are eligible, and the potential long runtime. The agent can confidently decide when to call it and what to expect, even without annotations.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema provides only titles and defaults with 0% coverage, so the description fully compensates by explaining both parameters: book_ids defaults to all unindexed books, and limit caps how many books are processed in a single call. This is exactly the semantic information an agent needs to invoke the tool correctly.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with 'Index book contents for full-text search', which is a specific verb and resource that clearly distinguishes build_index from sibling search tools like search_books and search_in_book. The parenthetical 'one-time, cached' further clarifies its role as a maintenance/indexing operation rather than a query operation.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description clearly establishes when this tool is relevant: it is a one-time cached indexing step that processes only unindexed books, and warns that an initial full-library run can take minutes. It does not explicitly name alternatives or state when not to use it, but the context is clear enough for an agent to recognize this as the setup step for full-text search.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

detect_scanned_booksA

Find library books whose PDF has no usable text layer (scanned pages).

Such books stay unsearchable until OCR'd with ocr_book. Requires the ocr extra (pip install 'calibre-mcp[ocr]'); no API key needed.

Args: limit: Maximum number of scanned books to report (1-200).

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.6/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the burden of behavioral disclosure. It usefully discloses the ocr-extra requirement and the no-API-key fact, and the verb 'Find' implies a non-mutating scan of PDFs. It does not explicitly state side-effect-free behavior or performance costs, but the core behavior is transparent.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three compact sentences deliver purpose, follow-up context, prerequisites, and parameter documentation without filler. The purpose is front-loaded and every sentence earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

This is a single-optional-parameter tool with an output schema, so return-value documentation is not needed. The description covers the task, prerequisite, parameter range, and next-step tool, making it complete for an agent to select and invoke correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 0%, but the description fully documents the only parameter: 'limit: Maximum number of scanned books to report (1-200).' This adds meaning and a validation range that the input schema completely lacks.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with a specific verb and resource: 'Find library books whose PDF has no usable text layer (scanned pages).' This clearly distinguishes the tool from siblings like list_books and search_books, and connects it to the OCR workflow.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It states when this tool matters ('Such books stay unsearchable until OCR'd') and names the follow-up tool ocr_book, plus the installation prerequisite. It lacks an explicit when-not-to-use statement, but the context is clear enough for an agent to select it appropriately.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

import_inboxA

Import every ebook file in the configured inbox folder into the library.

Requires the CALIBRE_INBOX_DIR environment variable. Successfully added files and duplicates are moved to <inbox>/imported/YYYY-MM/; files that fail to import are moved to <inbox>/failed/ for inspection.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.7/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description fully carries the behavioral burden and does so well. It discloses the environment variable requirement and the exact file disposition side effects: successful files and duplicates move to `<inbox>/imported/YYYY-MM/`, while failed files move to `<inbox>/failed/` for inspection. This is strong transparency for a tool that mutates the filesystem.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is compact and front-loaded with the primary purpose, followed by prerequisites and side effects. Every sentence earns its place, with no filler or repetition of schema content.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a zero-parameter tool with an output schema present, the description is complete: it states what is imported, what configuration is required, and what happens to files in each outcome case. An agent has enough information to invoke the tool correctly and predict its effects.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

There are no input parameters, so the schema requires no explanation. The description still adds relevant operational context by referencing the CALIBRE_INBOX_DIR environment variable, which effectively serves as the tool's input. Baseline 4 is appropriate for a zero-parameter tool.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description names a specific verb and resource: 'Import every ebook file in the configured inbox folder into the library.' It clearly distinguishes this from siblings like add_books by emphasizing batch import from a configured inbox folder rather than individual file addition.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The context is clear: this tool processes all ebook files in the inbox folder, and the CALIBRE_INBOX_DIR prerequisite is stated. However, it does not explicitly name alternatives or state when not to use it relative to add_books or other sibling tools, so it stops just short of full routing guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

library_infoA

Show the active library: its path on disk, number of books, calibre version.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.3/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the burden of behavioral disclosure. The verb 'Show' and the listed output items convey a read-only informational operation. It does not explicitly state that nothing is modified, but the phrasing is unambiguous and sufficient for a stateless info tool.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single, front-loaded sentence that names the action, target, and expected output without any filler. Every word contributes meaning.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a zero-parameter informational tool with an output schema present, the description fully covers what the agent needs to know: what the tool does and what information it returns. No additional context is required.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool takes zero parameters, so the baseline is 4. The description focuses on output rather than parameters, which is appropriate since there are none to document.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses a specific verb ('Show') and resource ('the active library'), and enumerates exactly what is displayed: path on disk, number of books, and calibre version. This clearly distinguishes it from siblings like search_books or add_books, which perform different operations.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The purpose implies when to use it (whenever library-level metadata is needed), but it does not explicitly state alternatives or when not to use it. The sibling tools are functionally distinct enough that misrouting is unlikely, but there is no direct usage guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_booksA

Browse books in the library; defaults to most recently added first.

Args: limit: Maximum number of results (1-200, default 20). sort_by: calibre field to sort by, e.g. id, title, authors, timestamp. order: "desc" (default) or "asc". search: Optional calibre search expression to filter the listing.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNo
orderNodesc
searchNo
sort_byNoid

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A3.7/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the burden of disclosing behavioral traits. It conveys listing behavior, default sort order, and filtering support, which is good for a read-oriented tool. However, it does not explicitly state that the operation is read-only/idempotent or describe any limitations beyond parameter ranges.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is compact and well-structured. The opener is one sentence, followed by a clear Args list where every line adds meaningful detail without redundancy or filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a read-only listing tool with an output schema and four optional parameters, the description covers the key invocation details: defaults, sorting, and filtering. The main omission is guidance about when to use this tool instead of the search-related siblings, but that gap is largely a usage-guidelines issue rather than a completeness failure.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, but the description thoroughly documents all four parameters with defaults, allowed values, and examples (e.g., limit range 1-200, sort_by fields, order values, calibre search expression). This fully compensates for the bare schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a clear operation ('Browse books in the library') and gives the resource and default ordering. It differentiates itself from sibling tools like search_books mostly through the verb 'browse', but it does not explicitly contrast with them, and the 'search' parameter introduces some overlap.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance is given about when to use this tool versus alternatives such as search_books or search_in_book. The description only implies a listing/filtering use case but never states exclusions or the preferred tool for complex search scenarios.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

ocr_bookA

OCR a scanned PDF via the configured cloud provider and index the text.

Detection → page rendering → provider transcription → cache → full-text index → (by default) pandoc re-typeset EPUB attached to the book's existing record. Books with a usable text layer are left untouched.

Configuration: CALIBRE_OCR_PROVIDER (default "anthropic"), CALIBRE_OCR_API_KEY, CALIBRE_OCR_MODEL, CALIBRE_OCR_BASE_URL, CALIBRE_OCR_MAX_PAGES.

Args: book_id: Book whose PDF format should be OCR'd. typeset: Also build a re-typeset EPUB with pandoc (default True). import_format: Attach the EPUB to the book record (default True).

ParametersJSON Schema
NameRequiredDescriptionDefault
book_idYes
typesetNo
import_formatNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.4/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full burden and does so admirably. It discloses the complete processing pipeline (detection, rendering, provider transcription, cache, full-text index, optional pandoc re-typeset EPUB attachment), the side effect on the book record, and the no-op condition for books with a text layer. It also surfaces relevant configuration variables, giving the agent insight into provider and model dependencies.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is structured with a lead purpose sentence, a compact pipeline outline, a configuration list, and an Args section. Each section earns its place and the main action is front-loaded. The configuration block is somewhat lengthy for an agent that may not need these details, but it remains concise enough given the tool's complexity.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a three-parameter tool with no schema descriptions, the description covers the parameters, the operation pipeline, side effects, and the no-op condition. An output schema exists, so return values do not need explanation. The only notable gap is explicit routing to batch alternatives, but that is a usage-guidance nuance rather than a completeness blocker. Overall, the definition is sufficiently complete for correct invocation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must compensate, and it does. Each parameter is explicitly explained: book_id identifies the PDF to OCR, typeset controls pandoc re-typesetting, and import_format controls whether the EPUB is attached. Defaults are also noted, fully bridging the schema's lack of descriptions.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with a specific verb and resource: 'OCR a scanned PDF via the configured cloud provider and index the text.' This clearly identifies the operation and distinguishes it from siblings like detect_scanned_books, which only detects, and ocr_scanned_books, which implies batch processing. The singular 'book_id' argument further anchors it as a per-book tool.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description establishes clear context: the tool targets a single scanned PDF book and leaves books with a usable text layer untouched. However, it never explicitly names alternatives like ocr_scanned_books for batch OCR or build_index for indexing-only operations. The usage guidance is implied by the singular argument and pipeline, but not stated as when-to-use versus alternatives.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

ocr_scanned_booksA

OCR all scanned-PDF books in the library, in resumable batches.

Detects scanned books, skips any that already have OCR output cached, and runs the full ocr_book pipeline (OCR → index → optional re-typeset EPUB) on up to limit remaining books. Repeat the call to work through the whole library; per-batch caching makes interruptions safe.

Args: limit: Maximum books to OCR in this call (1-100, default 10). typeset: Also build re-typeset EPUBs with pandoc (default True). import_format: Attach the EPUBs to book records (default True).

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNo
typesetNo
import_formatNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.6/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the full disclosure burden and does it well: it skips books with cached OCR output, runs the full pipeline, attaches EPUBs when import_format is set, and is resumable. It does omit failure-mode or side-effect detail, but for a batch tool this is substantial.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description opens with a one-sentence purpose, follows with a compact behavior paragraph, and ends with a terse Args list. Every sentence adds necessary information and there is no filler or repetition.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a three-parameter batch tool with an output schema present, the description covers the what, the how (repeat calls), the safety of interruption, and detailed parameter semantics. The only minor omission is an explicit comparison to the single-book sibling, but nothing needed for correct invocation is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description fully compensates by documenting all three parameters with meaningful behavior, defaults, and constraints. For example, 'limit' gets a range and default, 'typeset' explains the pandoc EPUB step, and 'import_format' clarifies attaching to book records.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific action ('OCR'), a clear resource ('all scanned-PDF books in the library'), and a key mode ('resumable batches'). It also distinguishes itself from siblings by mentioning it runs the full ocr_book pipeline rather than just detection or a single book.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explains the intended invocation pattern: call repeatedly to work through the library, and per-batch caching makes interruptions safe. It does not explicitly contrast with single-book ocr_book or detect_scanned_books, but the batch scope and repeat-call guidance are clear.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

read_bookA

Read a page of a book's plain text, converted on demand by calibre.

The first call converts the book (a copy in a cache directory — the library is never modified); later calls reuse the cache. Returns the chunk plus next_offset for paging and total_chars for context.

Args: book_id: The book's id (find it with search_books). offset: Character offset to start reading from (0 = beginning). limit: Maximum characters to return (1-40000, default 12000).

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNo
offsetNo
book_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full burden and does well: it discloses on-demand conversion by calibre, cache reuse across calls, and explicitly states the library is never modified. It also mentions the return structure (chunk, next_offset, total_chars). This is strong behavioral context, though it omits potential error conditions or performance implications of first-time conversion.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is efficiently structured: a one-sentence purpose, a short behavioral note, and a bullet-point Args list. Every sentence earns its place, and the most important information is front-loaded. No filler or redundant restatement of the tool name.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the low complexity (one required integer parameter and two optional integers) and the existence of an output schema, the description is complete. It covers purpose, conversion/caching behavior, parameter semantics, and the key return fields needed for paging. There is nothing an agent needs to invoke and page through the book that is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must fully compensate, and it does. The Args block explains book_id ('find it with search_books'), offset as a character offset with the 0 meaning, and limit with range (1-40000) and default (12000). This adds substantive meaning beyond the raw schema properties.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with a specific verb and resource: 'Read a page of a book's plain text, converted on demand by calibre.' This clearly identifies what the tool does. It does not explicitly contrast with siblings like search_in_book, but the verb 'read' plus 'plain text' strongly implies the distinction, so it falls just short of a 5.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies when to use the tool: whenever you need to read a book's text content, with paging via offset/limit. It also tells the user to find book_id via search_books. However, it does not explicitly state when not to use it or mention alternatives such as search_in_book for searching within the text, so the guidance is present but not thorough.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

search_booksA

Search the library with calibre's query language.

Args: query: A calibre search expression, e.g. author:asimov, title:"i robot", tags:python. An empty string matches everything. limit: Maximum number of results (1-200, default 20).

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNo
queryYes

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the full burden of behavioral disclosure. It discloses genuinely useful traits: the accepted query language, the empty-string-matches-everything edge case, and the limit bounds (1-200). It does not explicitly assert read-only safety, but 'Search' makes that evident.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded one-line summary followed by a compact Args block. No filler sentences; every element carries information and the examples are illustrative without bloat. Clean and scannable, though the docstring format is a conventional choice rather than exceptional craft.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 2-parameter tool with an output schema present, the description covers query syntax, the empty-string edge case, and result limits — while the output schema handles return-value expectations. The only omissions are minor (behavior on malformed queries, result ordering), which do not undermine correct invocation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must compensate — and it does so thoroughly. Each parameter gains real meaning: query is explained with three calibre expressions plus empty-string behavior, and limit is given a range and default beyond the schema's bare type and default. This exceeds the compensation baseline for low coverage.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb ('Search'), resource ('the library'), and distinctive mechanism ('calibre's query language'). The library-level scope implicitly differentiates it from sibling search_in_book, and the query-language detail adds precision. However, it does not explicitly name sibling tools or draw the contrast, so it just misses the top score.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives concrete how-to guidance — three worked query examples and the note that an empty string matches everything — which implies when the tool applies. But it never states when to prefer this over list_books or search_in_book, and offers no exclusions or conditions. Usage is implied rather than explicit.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

search_in_bookA

Full-text search inside book contents, with match snippets for quoting.

Searches the local text index; books must be indexed first with build_index (a one-time, cached step). Matching is substring-based, so Chinese and English queries both work without word segmentation.

Args: query: Text to find inside book contents. book_id: Optional book id to restrict the search to a single book. limit: Maximum number of matches to return (1-100, default 20).

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNo
queryYes
book_idNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.6/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full burden of behavioral disclosure. It reveals that matching is substring-based, works for both Chinese and English without word segmentation, queries a local text index, and returns snippets for quoting. This is meaningful context beyond the schema, though it does not state whether the operation is read-only or describe error behavior.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is tightly structured: a purpose line, prerequisite and matching semantics, then a clean Args list. Every sentence adds distinct value and there is no filler or restatement of the tool name.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 3-parameter search tool with an output schema, the description covers prerequisites, search semantics, param semantics, and output behavior (snippets for quoting). The output schema exists, so the description does not need to document return fields. Nothing essential is missing for an agent to invoke this tool correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, but the description fully compensates by documenting all three parameters: query as the text to find, book_id as an optional single-book restriction, and limit with its range and default. It even adds the 1-100 constraint not present as an explicit schema boundary.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with a specific verb and resource: "Full-text search inside book contents, with match snippets for quoting." This clearly differentiates the tool from siblings like search_books (metadata search) and read_book (reading content), so an agent can select it correctly without inspecting sibling schemas.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives a clear precondition: "books must be indexed first with build_index (a one-time, cached step)." This tells the agent when the tool is usable and names the prerequisite tool. It does not explicitly contrast with search_books or explain when not to use it, so it stops short of a perfect 5.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

  1. 11 tool updatesv0.3.0
    • First observedadd_books
    • First observedbuild_index
    • First observeddetect_scanned_books
    • First observedimport_inbox
    • First observedlibrary_info
    • First observedlist_books
    • First observedocr_book
    • First observedocr_scanned_books
    • First observedread_book
    • First observedsearch_books
    • First observedsearch_in_book

TDQS

A4.2/5.0

Scored across 11 tools

Disambiguation4/5

Most tools target distinct actions: metadata search, browsing, full-text search, reading, and OCR are clearly separated. Minor overlap exists between list_books (which accepts a search filter) and search_books, and between ocr_scanned_books and ocr_book, but descriptions clarify the batch-vs-single distinction.

Naming Consistency4/5

The majority of tools follow a clear verb_noun pattern like search_books, add_books, build_index, and read_book. A few deviations stand out: library_info uses noun_info, search_in_book uses a preposition, and ocr_book/ocr_scanned_books use an acronym as the verb, but the overall style remains predictable.

Tool Count5/5

Eleven tools is a well-scoped size for a Calibre-focused server covering library browsing, metadata search, book import, reading, full-text search, and OCR. Each tool addresses a distinct workflow without feeling bloated or redundant.

Completeness4/5

The toolset covers the core workflows thoroughly: discovering, searching, adding, reading, indexing, and OCR-ing books. Obvious gaps like metadata editing, book deletion, or retrieving original format files are absent, but they appear to be outside the server's intended reading/OCR-oriented scope.

Maintenance

ActivityMaintained
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers

  • A
    license
    Not graded
    quality
    C
    maintenance
    Provides AI agents with research capabilities for local Calibre e-book libraries, including fulltext search across titles, ISBNs, and comments, plus structured excerpt retrieval from books.
    2
    GPL 3.0
  • A
    license
    Not graded
    quality
    D
    maintenance
    Enables searching, reading, and managing a Calibre ebook library through natural language, with features like metadata search, full-text search, content extraction, and library management.
    40 npm
    Apache 2.0
  • A
    license
    Not graded
    quality
    B
    maintenance
    Bridges your Calibre e-book library with AI assistants via the Model Context Protocol, enabling natural-language library management, semantic search, RAG, and agentic workflows.
    43
    MIT