calibre-mcp
calibre-mcp
Локальный MCP-сервер (stdio), который позволяет LLM-хосту — Claude Desktop, Claude Code или любому MCP-совместимому клиенту — управлять библиотекой электронных книг Calibre в диалоговом режиме: поиск, редактирование метаданных, добавление, конвертация, дедупликация, удаление и отправка книг по электронной почте — всё с безопасностью, предполагающей участие человека.
Большинство MCP-серверов для Calibre доступны только для чтения — они ищут и перечисляют. Этот пишет — и делает это безопасно. Редактирование метаданных, добавление, конвертация и удаление книг — это те операции, где инструмент может реально повредить или потерять вашу библиотеку, поэтому каждое изменение здесь проходит через архитектуру, созданную так, чтобы сделать это невозможным по случайности:
План → подтверждение для каждого разрушительного действия. Первый вызов возвращает читаемое человеком описание изменений и
confirmation_token; ничего не меняется, пока вы не вызовете повторно с этим точным токеном.Автоматическое резервное копирование
metadata.dbперед каждой записью (скользящее, последние 20).Восстановимые удаления — копия в корзину и корзина Calibre, никогда не жёсткое удаление.
Чтение не может ничего повредить — SQLite-соединение открывается в режиме
mode=ro.
Создан, чтобы перестать кликать по интерфейсу Calibre и управлять библиотекой из чата — и намеренно спроектирован как демонстрация того, как создать инструмент, которому разрешено удалять файлы пользователя: гибридный дизайн ввода-вывода, явная таксономия ошибок, шлюзы одобрения человеком для каждого разрушительного действия и набор тестов, который никогда не касается реальных пользовательских данных. См. PRODUCT.md о том, что он делает и почему, и ARCHITECTURE.md для полного описания дизайна.
Почему гибридный дизайн
Чтение (
search,list,view, поиск дубликатов) обращается кmetadata.dbнапрямую, только для чтения — быстро и структурно неспособно повредить библиотеку (SQLite-соединение открывается в режимеmode=ro).Запись (
edit,add,remove,convert,email) выполняется через собственные CLI-инструменты Calibre (calibredb,ebook-convert,calibre-smtp) — никогда не через сырой SQL, — поэтому Calibre остаётся авторитетом для своей собственной базы данных.Каждой записи предшествует автоматическое резервное копирование
metadata.db(скользящее, хранит последние 20).Удаление обратимо: файлы копируются в управляемую папку корзины и книга отправляется в корзину Calibre — никогда не постоянное удаление.
Каждый изменяющий или внешний инструмент является двухэтапным (план → подтверждение): первый вызов возвращает читаемое человеком описание плюс
confirmation_token; ничего не меняется — и ничего не отправляется — пока вы не вызовете повторно с этим точным токеном.
Полное обоснование, границы модулей и журнал решений, стоящих за этими выборами, находятся в ARCHITECTURE.md.
Related MCP server: calibre-mcp
Требования
Calibre установлен, с
calibredbиebook-convertв вашемPATH(calibredb --version).calibre-smtpтакже требуется, если вы хотите использоватьemail_book.Python ≥ 3.12 и
uv.
Установка
Без клонирования (рекомендуется) — uv собирает и запускает его прямо из
репозитория, без ручного клонирования:
uvx --from git+https://github.com/gustavofsousa/calibre-mcp calibre-mcpИз локального клона (для разработки или для фиксации конкретного состояния):
git clone https://github.com/gustavofsousa/calibre-mcp calibre-mcp
cd calibre-mcp
uv syncНастройка
Сервер управляет одной библиотекой, задаваемой через переменную окружения:
Переменная | Обязательная | По умолчанию | Назначение |
| да | — | Путь к каталогу вашей библиотеки Calibre (папка, содержащая |
| нет |
| Где хранятся резервные копии перед записью и перемещённые в корзину файлы. |
Сервер быстро завершается при запуске с понятной ошибкой, если CALIBRE_LIBRARY_PATH не задан или
в каталоге нет metadata.db.
email_book дополнительно требует учётные данные SMTP-релея (загружаются лениво — сервер запускается нормально
без них, и только email_book завершится ошибкой, если они отсутствуют):
Переменная | Обязательная | По умолчанию | Назначение |
| для email | — | Хост SMTP-релея. |
| для email | — | Имя пользователя SMTP. |
| для email | — | Пароль SMTP. Никогда не логируется, никогда не возвращается в выводе инструментов. |
| для email | — | Адрес отправителя. |
| нет |
| Порт SMTP. |
| нет |
| Одно из |
Claude Desktop / Claude Code
Добавьте в ваш MCP-конфиг (например, claude_desktop_config.json). Без клонирования — запускается прямо из
репозитория через uvx:
{
"mcpServers": {
"calibre": {
"command": "uvx",
"args": ["--from", "git+https://github.com/gustavofsousa/calibre-mcp", "calibre-mcp"],
"env": {
"CALIBRE_LIBRARY_PATH": "/absolute/path/to/your/Calibre Library"
}
}
}
}Или из локального клона:
{
"mcpServers": {
"calibre": {
"command": "uv",
"args": ["--directory", "/absolute/path/to/calibre-mcp", "run", "calibre-mcp"],
"env": {
"CALIBRE_LIBRARY_PATH": "/absolute/path/to/your/Calibre Library"
}
}
}
}Запуск вручную
CALIBRE_LIBRARY_PATH="/path/to/Calibre Library" uv run calibre-mcp
# or equivalently:
CALIBRE_LIBRARY_PATH="/path/to/Calibre Library" uv run python -m calibre_mcpСервер общается через stdio (JSON-RPC); он ничего не выводит в stdout, кроме MCP-кадрирования — все логи идут в stderr, намеренно (см. ARCHITECTURE.md).
Инструменты
Инструмент | Что делает | Шлюз |
| Разрешает поисковый запрос Calibre ( | только чтение |
| Постраничный, сортируемый список — работает даже когда GUI Calibre удерживает блокировку записи. | только чтение |
| Полные метаданные для одного id книги. | только чтение |
| Консультативный отчёт о вероятных дубликатах книг по нормализованным (название, автор). Никогда не объединяет. | только чтение |
| Редактирует разрешённый набор полей (название, авторы, теги, серия, рейтинг, комментарии, …). | план → подтверждение |
| Применяет изменение поля к N книгам одним пакетом ( | план → подтверждение (пакет) |
| Добавляет книгу из локального пути к файлу; честно показывает дубликаты. | один шаг (с резервной копией) |
| Рекурсивно импортирует все файлы электронных книг, найденные в каталоге. | аддитивный (с резервной копией) |
| Конвертирует в новый формат ( | один шаг (с резервной копией) |
| Конвертирует N книг в один целевой формат одним вызовом. | аддитивный (с резервной копией) |
| Восстановимое удаление: копия в корзину + корзина Calibre, никогда не жёсткое удаление. | план → подтверждение |
| Отправляет файл книги по электронной почте через | план → подтверждение |
Плюс один MCP-ресурс, calibre://library/stats — агрегированный профиль библиотеки (итоги,
смесь форматов/языков, полнота метаданных, флаги качества данных), читаемый без вызова инструментов.
Полный контракт каждого инструмента (крайние случаи, условия ошибок, точный список разрешённых полей) документирован в
его docstring в server.py — эти docstring — то, что видит LLM-хост,
поэтому они также служат справочником по API.
Разработка
uv run ruff check src tests # lint
uv run pytest # full suite (unit + integration + e2e)
uv run pytest -m unit # fast unit tests only137 тестов в трёх уровнях (unit, integration, e2e); тесты записи никогда не касаются реальной
библиотеки — см. ARCHITECTURE.md.
Структура проекта
src/calibre_mcp/
├── server.py # FastMCP tool surface — the only stdio/MCP-aware module
├── library.py # CalibreLibrary facade — orchestrates every tool's business logic
├── sqlite_reader.py # Read-only metadata.db access (the only sqlite3 call site)
├── calibredb_runner.py # calibredb subprocess wrapper (search/edit/add/remove/add_format)
├── ebook_convert_runner.py # ebook-convert subprocess wrapper
├── calibre_smtp_runner.py # calibre-smtp subprocess wrapper
├── backup.py # metadata.db snapshots + recoverable trash
├── confirmation.py # plan→confirm token derivation/verification
├── config.py # env-driven startup config, fail-fast validation
└── errors.py # the failure taxonomy every layer maps toДорожная карта
Реализовано: полный цикл чтения/курирования/распространения (поиск, список, просмотр, редактирование, добавление, удаление,
конвертация, дедупликация, email). Что дальше — самопознание библиотеки, массовые операции, обогащение обложек/метаданных,
синхронизация устройств — отслеживается в .specs/ROADMAP.md, включая обоснование
последовательности и что явно вне области действия.
Вклад
См. CONTRIBUTING.md для рабочего процесса разработки, инвариантов, которые должен сохранять PR, и как работает процесс, управляемый спецификациями, лежащий в основе этого репозитория.
Лицензия
MIT © Gustavo F Sousa.
This server cannot be installed
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Servers
- AlicenseBqualityCmaintenanceConnects AI agents to Calibre ebook libraries for searching, reading, and managing digital collections. It supports metadata updates, format conversion, and full-text content searches while providing granular permission controls for library access.721MIT
- AlicenseNot gradedqualityDmaintenanceEnables searching, reading, and managing a Calibre ebook library through natural language, with features like metadata search, full-text search, content extraction, and library management.241Apache 2.0
- AlicenseAqualityCmaintenanceAn MCP server to manage and organize a Calibre ebook library, enabling metadata editing, search, conversion, and more through AI assistants.174MIT
- AlicenseNot gradedqualityAmaintenanceEnables semantic search over local Calibre libraries via MCP, allowing AI assistants to query books, annotations, and export bibliographies while keeping data private.8MIT
Related MCP Connectors
Agentic search over your Dewey document collections from any MCP-compatible client.
OCR, transcription, file extraction, and image generation for AI agents via MCP.
Books MCP — wraps Open Library API (free, no auth)
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/gustavofsousa/calibre-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server