EPUB Reader MCP Server
MCP-сервер для чтения EPUB
Сервер протокола контекста модели (MCP), который выступает в роли «Kindle для ИИ-агентов», предоставляя доступ к содержимому файлов EPUB через API инструментов MCP.
Обзор
MCP-сервер для чтения EPUB предоставляет ИИ-агентам возможность читать файлы EPUB и перемещаться по ним. Он реализует протокол контекста модели (MCP) и предоставляет 13 инструментов, которые позволяют открывать файлы EPUB, перемещаться по оглавлению и страницам, искать контент, проверять сноски и управлять сеансами чтения.
Функции
Открытие файлов EPUB: проверка и разбор файлов EPUB, создание сеансов чтения
Навигация по контенту: перемещение вперед/назад по страницам, переход к конкретным страницам или главам
Обнаружение контента: просмотр оглавления, метаданных и кратких обзоров глав
Функциональность поиска: полнотекстовый поиск по главам с контекстом
Инструменты ссылок: разрешение ссылок на сноски, получение позиции чтения
Управление сеансами: список открытых книг, закрытие сеансов, управление ресурсами
Related MCP server: Readbook MCP Server
Предварительные требования
npm или совместимый менеджер пакетов
Файлы EPUB для чтения (формат
.epub)
Установка
Из исходного кода
git clone https://github.com/your-username/mcp-epub-reader.git
cd mcp-epub-reader
npm install
npm run buildИспользование
Запуск сервера
Сервер использует транспорт stdio, что делает его идеальным для интеграции с MCP-клиентами, такими как Claude Desktop.
stdio (Локальная интеграция)
Для интеграции с Claude Desktop или другими MCP-клиентами:
node build/index.jsСервер взаимодействует через stdin/stdout с использованием протокола MCP JSON-RPC.
Конфигурация
Конфигурация Claude Desktop
Добавьте сервер в конфигурацию Claude Desktop (~/Library/Application Support/Claude/claude_desktop_config.json в macOS):
{
"mcpServers": {
"epub-reader": {
"command": "node",
"args": ["/absolute/path/to/mcp-epub-reader/build/index.js"],
"env": {
"LOG_LEVEL": "info"
}
}
}
}Переменные окружения
Переменная | Описание | Обязательно | По умолчанию |
| Уровень логирования ( | Нет |
|
Справочник инструментов
Сервер предоставляет 13 инструментов для взаимодействия с файлами EPUB:
Инструмент | Описание | Входные параметры |
| Открыть файл EPUB и создать сеанс чтения |
|
| Закрыть сеанс чтения и освободить ресурсы |
|
| Список всех открытых в данный момент сеансов EPUB | (нет) |
| Перейти к следующей странице в текущем сеансе |
|
| Перейти к предыдущей странице в текущем сеансе |
|
| Перейти к конкретному номеру страницы |
|
| Перейти к конкретной главе (по названию или индексу) |
|
| Получить текущую позицию чтения и прогресс |
|
| Поиск текста по всем главам |
|
| Получить иерархическое оглавление |
|
| Получить метаданные EPUB (название, автор, издатель и т.д.) |
|
| Разрешить ссылку на сноску по ID |
|
| Получить краткий обзор текущей главы |
|
Детали инструментов
ebook/open
Открывает файл EPUB, анализирует его содержимое, создает сеанс чтения и возвращает метаданные.
Схема ввода:
{
filePath: string; // Absolute or relative path to EPUB file
autoNavigate?: boolean; // Whether to auto-navigate to first page (default: false)
}Пример запроса:
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "ebook/open",
"arguments": {
"filePath": "/path/to/book.epub",
"autoNavigate": true
}
}
}Пример ответа:
{
"jsonrpc": "2.0",
"id": 1,
"result": {
"content": [
{
"type": "text",
"text": "{\"sessionId\":\"sess_123\",\"metadata\":{\"title\":\"Sample Book\",\"author\":\"Author Name\",\"totalPages\":250,\"totalChapters\":12}}"
}
]
}
}ebook/close
Закрывает сеанс чтения и освобождает связанные ресурсы.
Схема ввода:
{
sessionId: string; // Session ID returned by ebook/open
}ebook/list_open_books
Перечисляет все активные в данный момент сеансы чтения.
Схема ввода: (нет)
Пример ответа:
{
"sessions": [
{
"sessionId": "sess_123",
"filePath": "/path/to/book.epub",
"metadata": {
"title": "Sample Book",
"author": "Author Name",
"currentPage": 42,
"totalPages": 250
}
}
]
}ebook/navigate_next и ebook/navigate_previous
Перемещение вперед или назад по страницам.
Схема ввода:
{
sessionId: string;
}Пример ответа:
{
"sessionId": "sess_123",
"currentPage": 43,
"content": "Page content here...",
"chapterTitle": "Chapter 3: The Adventure Begins"
}ebook/jump_to_page
Переход к конкретному номеру страницы.
Схема ввода:
{
sessionId: string;
pageNumber: number; // 1-based page number
}ebook/jump_to_chapter
Переход к конкретной главе по названию (частичное совпадение без учета регистра) или индексу главы (начиная с 1).
Схема ввода:
{
sessionId: string;
chapter: string | number; // Chapter title or index
}ebook/get_position
Получение текущей позиции чтения и статистики прогресса.
Пример ответа:
{
"sessionId": "sess_123",
"currentPage": 42,
"totalPages": 250,
"progress": 0.168,
"chapterTitle": "Chapter 3: The Adventure Begins",
"chapterIndex": 3
}ebook/search
Поиск текста по всем главам с дополнительными контекстными словами.
Схема ввода:
{
sessionId: string;
query: string;
contextWords?: number; // Number of context words around matches (default: 50)
}Пример ответа:
{
"sessionId": "sess_123",
"query": "adventure",
"matches": [
{
"chapterIndex": 3,
"chapterTitle": "Chapter 3: The Adventure Begins",
"pageNumber": 42,
"context": "...the great adventure began when...",
"position": 1250
}
],
"totalMatches": 1
}ebook/get_toc
Получение иерархического оглавления.
Пример ответа:
{
"sessionId": "sess_123",
"toc": [
{
"title": "Chapter 1: Introduction",
"level": 1,
"pageNumber": 1,
"children": []
},
{
"title": "Part I: The Beginning",
"level": 1,
"pageNumber": 10,
"children": [
{
"title": "Chapter 2: First Steps",
"level": 2,
"pageNumber": 12,
"children": []
}
]
}
]
}ebook/get_metadata
Получение полных метаданных EPUB.
Пример ответа:
{
"sessionId": "sess_123",
"metadata": {
"title": "Sample Book",
"author": "Author Name",
"publisher": "Publisher Name",
"description": "Book description...",
"language": "en",
"publishedDate": "2023-01-01",
"totalPages": 250,
"totalChapters": 12
}
}ebook/get_footnote
Разрешение ссылки на сноску по ID.
Схема ввода:
{
sessionId: string;
footnoteId: string; // Footnote reference ID (e.g., "fn1")
}Пример ответа:
{
"sessionId": "sess_123",
"footnoteId": "fn1",
"content": "Footnote content here...",
"referencingPage": 42
}ebook/get_chapter_summary
Получение краткого обзора текущей главы с использованием извлечения ключевых предложений.
Схема ввода:
{
sessionId: string;
maxSentences?: number; // Maximum sentences in summary (default: 3)
}Пример ответа:
{
"sessionId": "sess_123",
"chapterTitle": "Chapter 3: The Adventure Begins",
"summary": [
"The protagonist begins their journey.",
"They encounter their first challenge.",
"A mysterious figure offers guidance."
]
}Разработка
Структура проекта
mcp-epub-reader/
├── src/
│ ├── epub/ # EPUB domain logic
│ │ ├── parser.ts # EPUB parsing and metadata extraction
│ │ ├── paginator.ts # Page splitting and content retrieval
│ │ └── types.ts # EPUB domain types
│ ├── server/ # MCP server implementation
│ │ ├── index.ts # Server entry point (stdio transport)
│ │ ├── book-manager.ts # Session lifecycle management
│ │ ├── tool-registration.ts # Tool registration and routing
│ │ └── types.ts # Server-side types
│ ├── tools/ # All 13 tool implementations
│ │ ├── open.ts # ebook/open tool
│ │ ├── close.ts # ebook/close tool
│ │ ├── list-books.ts # ebook/list_open_books tool
│ │ ├── navigate.ts # Navigation tools (next/previous)
│ │ ├── jump.ts # Jump tools (page/chapter)
│ │ ├── position.ts # ebook/get_position tool
│ │ ├── search.ts # ebook/search tool
│ │ ├── toc.ts # ebook/get_toc tool
│ │ ├── metadata.ts # ebook/get_metadata tool
│ │ ├── footnote.ts # ebook/get_footnote tool
│ │ └── summary.ts # ebook/get_chapter_summary tool
│ └── utils/ # Shared utilities
│ └── validation.ts # Zod schemas and input validation
├── tests/ # Test suites
│ ├── unit/ # Unit tests
│ └── integration/ # Integration tests
├── package.json
├── tsconfig.json
└── jest.config.jsСборка из исходного кода
# Install dependencies
npm install
# Build the project (TypeScript → JavaScript)
npm run build
# Output goes to `build/` directoryТестирование
# Run all tests
npm test
# Run tests with coverage
npm test -- --coverage
# Run specific test file
npm test -- tests/unit/epub/parser.test.tsДобавление нового инструмента
Создайте новый файл в
src/tools/с реализацией инструмента:
// src/tools/example.ts
import { BookManager } from '../server/book-manager';
import { ExampleToolInput, ExampleToolOutput } from '../server/types';
export async function handleExampleTool(
input: ExampleToolInput,
bookManager: BookManager
): Promise<ExampleToolOutput> {
// Tool implementation
return { result: 'success' };
}
export function createExampleTool(bookManager: BookManager) {
return {
name: 'ebook/example' as const,
handler: (input: ExampleToolInput) => handleExampleTool(input, bookManager),
};
}Добавьте схему Zod в
src/utils/validation.ts:
export const ExampleToolSchema = z.object({
sessionId: z.string(),
// ... other parameters
});Импортируйте и зарегистрируйте в
src/server/tool-registration.ts:
import { createExampleTool } from '../tools/example';
const toolFactories = {
// ... existing tools
'ebook/example': createExampleTool,
};Вклад в проект
Мы приветствуем ваш вклад! Пожалуйста, выполните следующие шаги:
Сделайте форк репозитория
Создайте ветку для функции (
git checkout -b feature/amazing-feature)Зафиксируйте изменения (
git commit -m 'Add amazing feature')Отправьте изменения в ветку (
git push origin feature/amazing-feature)Откройте Pull Request
Настройка разработки
# Clone the repository
git clone https://github.com/your-username/mcp-epub-reader.git
cd mcp-epub-reader
# Install dependencies
npm install
# Set up environment
cp .env.example .env # if applicable
# Run development server with watch mode
npm run devСтандарты кода
Следуйте лучшим практикам TypeScript со строгой типизацией
Пишите чистые функции с неизменяемостью, где это возможно
Используйте внедрение зависимостей для тестируемости
Включайте комплексные модульные тесты (шаблон AAA)
Документируйте публичные API и сложную логику
Лицензия
Этот проект лицензирован по лицензии MIT.
Благодарности
Model Context Protocol за спецификацию протокола
MCP TypeScript SDK за SDK
библиотека epub для разбора EPUB
OpenAgents за стандарты разработки и рабочие процессы
Ссылки
Журнал изменений
См. CHANGELOG.md для истории версий.
Примечание: Этот сервер предназначен для использования с MCP-клиентами, такими как Claude Desktop. Он предоставляет ИИ-агентам возможности чтения EPUB, сохраняя при этом изоляцию сеансов и управление ресурсами.
This server cannot be deployed
Maintenance
Related MCP Connectors
Generate and read PDFs for AI agents: a generate_pdf and a read_pdf tool, priced per document.
- JunifyeOAuthpro.publifye
Write books, studies & commentaries with your AI — EPUB, print-ready PDF, web reader, ISBN, RTL
PDF, image, video, OCR, screenshot, SQL, QR and text tools for agents. No API key, no signup.
- AchriomOAuthcom.achriom
Media memory for AI agents and their humans: books, movies, music, shows, anime, podcasts, games.
Related MCP Servers
- AlicenseNot gradedqualityCmaintenanceProvides 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.2GPL 3.0
- FlicenseNot gradedqualityDmaintenanceEnables AI assistants to help users manage their reading experience by searching books, tracking reading progress, managing bookmarks, and generating personalized recommendations and summaries.-
- 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.40 npmApache 2.0
- AlicenseNot gradedqualityDmaintenanceEnables natural language interaction with e-books, extracting metadata, table of contents, and chapter content from EPUB and PDF files.390Apache 2.0