{"name":"io.github.caelum29/calibre-mcp","slug":"caelum29-calibre-mcp","title":null,"description":"Calibre ebook library server: search, read content, curate metadata, semantic search, gated writes.","url":"https://mcp.market/server/caelum29-calibre-mcp","rating":null,"grade":"A","score":85,"certified":false,"status":"active","category":"search","tags":["search"],"presence":{"score":43,"stars":22,"forks":4,"downloads_week":1129,"last_push_at":"2026-11-01T13:57:29.000Z","license":"MIT"},"uptime":null,"claimed":false,"transport":"npm","callable_via_gateway":false,"default_price_micros":0,"repository":"https://github.com/caelum29/calibre-mcp","website":null,"version":"0.12.0","remotes":[],"packages":[{"registryType":"npm","identifier":"calibre-mcp","version":"0.12.0","transport":{"type":"stdio"},"environmentVariables":[{"description":"Calibre Content Server base URL (default http://localhost:8080)","format":"string","name":"CALIBRE_MCP_SERVER_URL"},{"description":"Library name; empty = auto-detect the server's default library","format":"string","name":"CALIBRE_MCP_LIBRARY"},{"description":"Set to 1 to enable the write tools (update/bulk-update/add/remove); off by default","format":"boolean","name":"CALIBRE_MCP_ENABLE_WRITE"},{"description":"Path to the calibredb binary; empty = auto-discover the standard install location","format":"filepath","name":"CALIBRE_MCP_CALIBREDB_PATH"}]}],"tools":[{"name":"calibre_add_book","description":"Import a local ebook file (EPUB/PDF/MOBI/…) into the library. The file must live under an","write_action":false,"price_micros":0,"input_schema":null},{"name":"calibre_board_data","description":"Internal endpoint for the in-chat cover-board widget. Returns the cached payload of a","write_action":false,"price_micros":0,"input_schema":null},{"name":"calibre_build_index","description":"Build the semantic index for specific books (required: bookId, ids, or query — full-library indexing is deferred). A query selects ALL matching books (no 100-book cap); large selections run long and may outlive the client timeout — re-run the same call to resume, since up-to-date books are skipped. Extracts, chunks, and embeds each book. Set keywordOnly=true (or when the embedding model is absent,","write_action":false,"price_micros":0,"input_schema":null},{"name":"calibre_bulk_update","description":"Apply the same metadata changes (tags, series, publisher, etc.) to a set of books selected","write_action":true,"price_micros":0,"input_schema":null},{"name":"calibre_extract_isbn","description":"Offline scan of a book's own text for a checksum-valid ISBN → sets identifiers:isbn","write_action":false,"price_micros":0,"input_schema":null},{"name":"calibre_find_duplicates","description":"Find probable duplicate books. mode=identical (exact title+authors) or similar (fuzzy) group the library (or ids/query/filter subset — filter takes a bundle name) with a merge-safety score; mode=compare diffs 2+ ids field-by-field. Read-only — never merges.","write_action":false,"price_micros":0,"input_schema":null},{"name":"calibre_get_book","description":"Get full metadata (authors, ISBN, formats, comments, cover) for one book by its id or uuid (id and bookId are interchangeable — pass the bookId from a search result). Set include_cover=true only when the cover image itself must be inspected.","write_action":false,"price_micros":0,"input_schema":null},{"name":"calibre_get_content","description":"Extract a book's text as a capped, fenced excerpt; pass the returned nextCursor token verbatim to walk the whole book, or jump to a char position with offset (e.g. a search passage's charStart). Set structure=true for a chapter map with per-chapter cursors. To find text inside a book, use calibre_search scope=book.","write_action":false,"price_micros":0,"input_schema":null},{"name":"calibre_get_figures","description":"List a book's figures — images the text references, identified by caption (Figure 1-2 / Рис. 3.1) — with page + caption per figure, then fetch chosen ones as images via indexes (≤3 per call). Captions let you pick figures before spending image tokens. In MCP Apps hosts the fetched figures also render for the user in an in-chat viewer, so you can point at them by figure number — but describe only w","write_action":false,"price_micros":0,"input_schema":null},{"name":"calibre_list_categories","description":"Browse library categories (Authors, Tags, Series, Languages, Publisher). No field → list the categories; with a field → its values + counts, filterable via a valueFilter regex (case-insensitive by default; a leading inline flag like `(?i)` is accepted).","write_action":false,"price_micros":0,"input_schema":null},{"name":"calibre_list_libraries","description":"List the Calibre libraries available on the Content Server and which one is the default. Call this first to discover valid library names.","write_action":false,"price_micros":0,"input_schema":null},{"name":"calibre_manage_bundles","description":"List, create, update or delete Bundles — named topical filters backed by Calibre saved","write_action":false,"price_micros":0,"input_schema":null},{"name":"calibre_merge_books","description":"Merge duplicate book records: moves formats from source books into a target (target's copy","write_action":false,"price_micros":0,"input_schema":null},{"name":"calibre_open_book","description":"Internal endpoint for the in-chat widgets' Open button. Launches a book in the local","write_action":false,"price_micros":0,"input_schema":null},{"name":"calibre_ping","description":"Health check: confirms the MCP server can reach the running Calibre","write_action":false,"price_micros":0,"input_schema":null},{"name":"calibre_quality_report","description":"Scan books for metadata problems: missing fields, raw-filename titles, invalid ISBNs, author-sort mismatches, series gaps. Defaults to the whole library; narrow with ids/query/filter (a bundle name) or specific checks. Read-only.","write_action":false,"price_micros":0,"input_schema":null},{"name":"calibre_recover_metadata","description":"Propose real metadata for a book with a missing/raw-filename title via online provider lookup (ISBN from its identifiers or text, else title/author) on Open Library and Google Books. Preview only — returns a changes object for calibre_update_book; never writes.","write_action":false,"price_micros":0,"input_schema":null},{"name":"calibre_remove_book","description":"Remove books from the library. Removed books go to Calibre's Trash and can be restored from","write_action":true,"price_micros":0,"input_schema":null},{"name":"calibre_search","description":"Find books by exact title, author, ISBN, tag, or Calibre query syntax (mode=meta), or by full text (mode=fts). scope=book returns short keyword snippets from inside one book; first hits often land in TOC/front matter — for definitional or topic questions within a book prefer calibre_semantic_search scope=book (ranked passages with char offsets). Use calibre_semantic_search for meaning/topic querie","write_action":false,"price_micros":0,"input_schema":null},{"name":"calibre_semantic_search","description":"Meaning-based search over the local index. scope=library ranks books; scope=book (needs bookId) ranks passages within one book. target=figures searches figure captions instead of text — use when the user asks for a diagram/chart/schema; hits point at calibre_get_figures for the pixels. mode=hybrid (default) fuses semantic + keyword matches; mode=vector is semantic-only; mode=keyword is exact keywo","write_action":false,"price_micros":0,"input_schema":null},{"name":"calibre_update_book","description":"Replace metadata fields on one book (title, authors, tags, series, rating, identifiers, comments, or any #custom column). Omitted fields are untouched. Requires writes to be enabled.","write_action":true,"price_micros":0,"input_schema":null}],"scan":{"score":85,"grade":"A","scanned_at":"2026-11-02T06:13:44.274Z","report":{"scannerVersion":"0.1.10","scannedAt":"2026-11-02T06:13:44.233Z","components":{"code":{"score":20,"max":25,"notes":["225 source files scanned"]},"reliability":{"score":-1,"max":20,"notes":["no gateway calls yet and no remote to probe"]},"poisoning":{"score":-1,"max":15,"notes":["tools not inspected (local package is not executed); not counted"]},"auth":{"score":12,"max":15,"notes":["local package, no credentials required"]},"maintenance":{"score":15,"max":15,"notes":["last push 1 days ago"]},"identity":{"score":8,"max":10,"notes":["registry namespace matches repository owner","GitHub account older than a year"]}},"findings":[{"id":"exec.eval","severity":"medium","component":"code","title":"eval / new Function used","evidence":"dist/semantic/store.js: …une these // ONLY through the retrieval eval (test/eval/retrieval), never by feel. con…"}],"inputs":{"packages":[{"registryType":"npm","identifier":"calibre-mcp","version":"0.12.0","found":true,"license":"MIT","hasInstallScripts":false,"dependencyCount":5,"publishedAt":"2026-10-30T19:51:17.611Z","repositoryUrl":"git+https://github.com/caelum29/calibre-mcp.git","weeklyDownloads":1129}],"repo":{"found":true,"owner":"caelum29","repo":"calibre-mcp","archived":false,"pushedAt":"2026-11-01T13:57:29Z","stars":22,"forks":4,"openIssues":38,"ownerType":"User","ownerAvatarUrl":"https://avatars.githubusercontent.com/u/59194208?v=4","ownerCreatedAt":"2019-12-24T07:41:38Z","license":"MIT"},"icon":{"url":"https://avatars.githubusercontent.com/u/59194208?v=4&s=128","source":"registry"},"presence":{"stars":22,"forks":4,"downloadsWeek":1129,"license":"MIT","lastPushAt":"2026-11-01T13:57:29.000Z","score":43}}}},"grade_history":[{"kind":"restore","fromGrade":"B","toGrade":"A","reason":"score 85: eval / new Function used","createdAt":"2026-11-02T06:13:45.339Z"}],"reviews":[]}