Calibre MCP Server
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.
README
# Calibre MCP Server
Ein experimenteller [Model Context Protocol (MCP)](https://github.com/modelcontextprotocol) Server, der auf eine lokale [Calibre](https://calibre-ebook.com/) Bibliothek zugreift. Ziel ist es, KI-Agenten (z. B. ChatGPT, Copilot, Claude Desktop) ein Research-API auf deine E-Book-Sammlung zu geben – inklusive Fulltext-Suche und strukturierten Excerpts.
Zusätzlich gibt es ein Calibre-GUI-Plugin, das den MCP-Server direkt aus Calibre heraus startet und stoppt.
---
## Features (aktueller Stand)
- MCP-Server auf Basis von `fastmcp`
- Tool `calibre_fulltext_search`
- Tool `calibre_get_excerpt`
- Zugriff auf Calibre-`metadata.db` via SQLite (read-only)
- Volltext-ähnliche Suche über Titel, ISBN und Kommentare (`books` + `comments`)
- Auflösen von Büchern über ISBN (inkl. `identifiers`-Tabelle)
- Domänenschicht `LibraryResearchService` als zentrale API
- Calibre-GUI-Plugin, das den MCP-Server als Subprozess startet/stoppt
- Zwei kleine Testskripte zum manuellen Testen gegen eine echte Bibliothek
---
## Repository-Struktur
Wichtige Verzeichnisse/Dateien:
- `pyproject.toml` – Projekt- und Dependency-Definitionen
- `src/calibre_mcp_server/` – MCP-Server und Domänencode
- `core/models.py` – einfache Domain-Modelle (`FulltextHit`, `Excerpt` …)
- `core/service.py` – `LibraryResearchService`, zentrale Research-API
- `infra/metadata_sqlite.py` – Zugriff auf `metadata.db` über SQLite
- `tools/ft_search_tool.py` – MCP-Tool `calibre_fulltext_search`
- `tools/excerpt_tool.py` – MCP-Tool `calibre_get_excerpt`
- `main.py` – Einstiegspunkt für den MCP-Server (`python -m calibre_mcp_server.main`)
- `calibre_plugin/` – Calibre-GUI-Plugin
- `__init__.py` – Plugin-Metadaten für Calibre
- `action.py` – GUI-Action, startet/stoppt den MCP-Server
- `tests/` – manuelle Testskripte
- `manual_test_service.py` – einfacher End-to-End-Test für den Service
- `inspect_metadata_isbn.py` – Debug-Script, das zeigt, wie eine ISBN in `metadata.db` gespeichert ist
---
## Voraussetzungen
- Python 3.10+ (getestet mit 3.12)
- Eine lokale Calibre-Bibliothek
- z. B. `X:\E-Books` mit `metadata.db` im Root
- Entwicklungsabhängigkeiten (werden über `pip` installiert):
- `fastmcp`
- `pydantic`
- plus alles, was in `pyproject.toml` steht
---
## Installation (Development Setup)
```bash
# Repository klonen
git clone https://github.com/Miguel0888/mcp-server.git
cd mcp-server
# Optional: virtuelles Environment anlegen
python -m venv .venv
# Windows:
.venv\Scripts\activate
# Linux/macOS:
# source .venv/bin/activate
# Paket im Editable-Mode installieren (inkl. Dependencies)
python -m pip install -e .
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):
set CALIBRE_LIBRARY_PATH=X:\E-Books
python -m calibre_mcp_server.main
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:
library_path = r"X:\E-Books" # Pfad zu deiner Calibre-Bibliothek
# Eine Query, von der du erwartest, dass sie Treffer liefert
query = "der"
# Eine echte ISBN aus deiner Bibliothek
test_isbn = "9783446429338"
Ausführen:
python tests\manual_test_service.py
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:
library_root = r"X:\E-Books"
# Default-ISBN (kann per CLI-Argument überschrieben werden)
raw_isbn = "9783446429338"
Ausführen ohne Argument (nutzt die Default-ISBN):
python tests\inspect_metadata_isbn.py
Oder mit einer anderen ISBN:
python tests\inspect_metadata_isbn.py 9781484265611
Das Script zeigt u. a.:
- Schema von
booksundidentifiers - alle Zeilen in
books.isbn, die zur normalisierten ISBN passen - alle 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__.py- beschreibt das Plugin für Calibre (Name, Version, min. Calibre-Version, etc.)
- verweist mit
actual_plugin = "action:McpInterfaceAction"auf die Implementierung
-
calibre_plugin/action.py- definiert
McpInterfaceAction(Unterklasse vonInterfaceAction) - fügt eine Toolbar-/Menü-Aktion "MCP Server" hinzu
- beim Klick: Start/Stopp eines Subprozesses mit
python -m calibre_mcp_server.main - setzt
CALIBRE_LIBRARY_PATHautomatisch auf die aktuell geöffnete Bibliothek (self.gui.current_db.library_path)
- definiert
Manuell ein Plugin-ZIP bauen
Im Projekt-Root:
mkdir -p dist
cd calibre_plugin
zip -r ..\dist\calibre-mcp-plugin.zip .
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ählen- Calibre 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_PATH - Zweiter 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.:
python -m pip install -e .
(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:
name: Release Calibre MCP Server
on:
push:
tags:
- 'v*'
jobs:
build-and-release:
runs-on: ubuntu-latest
steps:
- name: Checkout repository
uses: actions/checkout@v4
- name: Set up Python
uses: actions/setup-python@v5
with:
python-version: '3.12'
- name: Install package (editable)
run: |
python -m pip install --upgrade pip
python -m pip install -e .
- name: Smoke test (compile sources)
run: |
python -m compileall src
- name: Build Calibre plugin zip
run: |
mkdir -p dist
cd calibre_plugin
zip -r ../dist/calibre-mcp-plugin.zip .
- name: Create GitHub Release
uses: softprops/action-gh-release@v2
with:
files: dist/calibre-mcp-plugin.zip
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
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:
# Version bump + commit (optional)
git commit -am "Bump version to v0.1.0"
# Tag erstellen
git tag v0.1.0
# Tag pushen
git push origin v0.1.0
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.
推荐服务器
Baidu Map
百度地图核心API现已全面兼容MCP协议,是国内首家兼容MCP协议的地图服务商。
Playwright MCP Server
一个模型上下文协议服务器,它使大型语言模型能够通过结构化的可访问性快照与网页进行交互,而无需视觉模型或屏幕截图。
Magic Component Platform (MCP)
一个由人工智能驱动的工具,可以从自然语言描述生成现代化的用户界面组件,并与流行的集成开发环境(IDE)集成,从而简化用户界面开发流程。
Audiense Insights MCP Server
通过模型上下文协议启用与 Audiense Insights 账户的交互,从而促进营销洞察和受众数据的提取和分析,包括人口统计信息、行为和影响者互动。
VeyraX
一个单一的 MCP 工具,连接你所有喜爱的工具:Gmail、日历以及其他 40 多个工具。
graphlit-mcp-server
模型上下文协议 (MCP) 服务器实现了 MCP 客户端与 Graphlit 服务之间的集成。 除了网络爬取之外,还可以将任何内容(从 Slack 到 Gmail 再到播客订阅源)导入到 Graphlit 项目中,然后从 MCP 客户端检索相关内容。
Kagi MCP Server
一个 MCP 服务器,集成了 Kagi 搜索功能和 Claude AI,使 Claude 能够在回答需要最新信息的问题时执行实时网络搜索。
e2b-mcp-server
使用 MCP 通过 e2b 运行代码。
Neon MCP Server
用于与 Neon 管理 API 和数据库交互的 MCP 服务器
Exa MCP Server
模型上下文协议(MCP)服务器允许像 Claude 这样的 AI 助手使用 Exa AI 搜索 API 进行网络搜索。这种设置允许 AI 模型以安全和受控的方式获取实时的网络信息。