Provides read-only access to Calibre's metadata.db SQLite database, enabling fulltext search across book titles, ISBNs, and comments, as well as retrieving book excerpts and metadata from a local Calibre e-book library.
Danach ist das Paket calibre_mcp_server im aktiven Python-Interpreter importierbar.
MCP-Server manuell starten
Voraussetzung: Environment-Variable CALIBRE_LIBRARY_PATH muss auf den Root deiner Calibre-Bibliothek zeigen (dort, wo metadata.db liegt).
Beispiel (Windows):
Du solltest die FastMCP-Banner-Ausgabe sehen und der Server wartet dann auf MCP-Client-Verbindungen über STDIO.
In einer MCP-fähigen IDE / einem MCP-Client (z. B. ChatGPT, Claude Desktop, Copilot Agent Mode) kann dieser Command als MCP-Server registriert werden und die Tools calibre_fulltext_search und calibre_get_excerpt verwenden.
Manuelle Tests gegen eine echte Bibliothek
1. tests/manual_test_service.py
Dieses Script testet die Domänenschicht LibraryResearchService direkt – ohne MCP und ohne Calibre-Plugin.
Anpassen in tests/manual_test_service.py:
Ausführen:
Erwartetes Verhalten:
fulltext_searchgibt eine Liste von Treffern (FulltextHit) mitbook_id,title,isbn(falls vorhanden) und einem kurzen Snippet aus Kommentaren/Titel zurück.get_excerpt_by_isbnfindet das Buch zutest_isbnüber dieidentifiers-Tabelle und gibt einen einfachen Excerpt zurück (aktuell auscommentsoder – wenn leer – dem Titel).
2. tests/inspect_metadata_isbn.py
Dieses Script hilft beim Debuggen von ISBN-Mapping und zeigt, wie Calibre die Daten in metadata.db speichert.
Konfiguration im Script:
Ausführen ohne Argument (nutzt die Default-ISBN):
Oder mit einer anderen ISBN:
Das Script zeigt u. a.:
Schema von
booksundidentifiersalle Zeilen in
books.isbn, die zur normalisierten ISBN passenalle Zeilen in
identifiers.val, die passen (inkl.book-ID und Typ)zugehörige Bücher inkl. Kommentaren (falls vorhanden)
Calibre-GUI-Plugin
Im Ordner calibre_plugin/ liegt ein einfaches GUI-Plugin, mit dem du den MCP-Server direkt aus Calibre heraus starten und stoppen kannst.
Aufbau
calibre_plugin/__init__.pybeschreibt das Plugin für Calibre (Name, Version, min. Calibre-Version, etc.)
verweist mit
actual_plugin = "action:McpInterfaceAction"auf die Implementierung
calibre_plugin/action.pydefiniert
McpInterfaceAction(Unterklasse vonInterfaceAction)fügt eine Toolbar-/Menü-Aktion "MCP Server" hinzu
beim Klick: Start/Stopp eines Subprozesses mit
python -m calibre_mcp_server.mainsetzt
CALIBRE_LIBRARY_PATHautomatisch auf die aktuell geöffnete Bibliothek (self.gui.current_db.library_path)
Manuell ein Plugin-ZIP bauen
Im Projekt-Root:
Die ZIP-Datei dist/calibre-mcp-plugin.zip enthält dann direkt __init__.py und action.py (genau so erwartet Calibre das).
Plugin in Calibre installieren
Calibre öffnen
Einstellungen → Plugins → "Plugin aus Datei laden"
calibre-mcp-plugin.zipauswählenCalibre neu starten
Danach sollte in der Toolbar oder im Menü ein Eintrag "MCP Server" vorhanden sein.
Erster Klick → startet den MCP-Server (externes
python), setztCALIBRE_LIBRARY_PATHZweiter Klick → beendet den Serverprozess
Wichtig: In der Python-Umgebung, die Calibre für python nutzt, muss das Paket calibre_mcp_server installiert sein, z. B.:
(ggf. mit dem Python, das in PATH liegt oder explizit in action.py konfiguriert wird.)
GitHub Actions: automatischer Build & Release des Plugins
Lege die Datei .github/workflows/release.yml an mit:
Was der Workflow tut:
Läuft bei
pushauf Tags, die mitvbeginnen (z. B.v0.1.0).Checkt das Repo aus.
Installiert dein Paket im Editable-Mode.
Führt einen kleinen Smoke-Test aus (
compileall).Baut
dist/calibre-mcp-plugin.zipaus dem Ordnercalibre_plugin.Erzeugt (falls nötig) einen GitHub Release zum Tag und hängt das ZIP als Asset an.
Release auslösen
Im Repo-Root:
Danach solltest du im GitHub-UI unter „Actions“ den Workflow sehen und unter „Releases“ dann den neuen Release mit angehängter calibre-mcp-plugin.zip.