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.
Write books, studies & commentaries with your AI — EPUB, print-ready PDF, web reader, ISBN, RTL
AgentReader (agentreader.xyz): any web page or PDF as clean Markdown for agents. Card packs or x402.
PDF, image, video, OCR, screenshot, SQL, QR and text tools for agents. No API key, no signup.
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 natural language interaction with e-books, extracting metadata, table of contents, and chapter content from EPUB and PDF files.396Apache 2.0
- AlicenseNot gradedqualityDmaintenanceEnables natural language interaction with e-books, supporting EPUB and PDF formats. Provides APIs for metadata extraction, table of contents, and content retrieval for AI-powered reading and learning.Apache 2.0