EPUB Reader MCP Server
Servidor MCP de lector de EPUB
Un servidor del Protocolo de Contexto de Modelo (MCP) que actúa como un "Kindle para agentes de IA", exponiendo el contenido de archivos EPUB a través de la API de herramientas de MCP.
Descripción general
El servidor MCP de lector de EPUB proporciona a los agentes de IA la capacidad de leer y navegar por archivos EPUB. Implementa el Protocolo de Contexto de Modelo (MCP) para exponer 13 herramientas que permiten abrir archivos EPUB, navegar por la tabla de contenidos y las páginas, buscar contenido, consultar notas al pie y gestionar sesiones de lectura.
Características
Abrir archivos EPUB: Validar y analizar archivos EPUB, crear sesiones de lectura
Navegar por el contenido: Moverse hacia adelante/atrás por las páginas, saltar a páginas o capítulos específicos
Descubrir contenido: Ver tabla de contenidos, metadatos y resúmenes de capítulos
Funcionalidad de búsqueda: Búsqueda de texto completo en todos los capítulos con contexto
Herramientas de referencia: Resolver referencias de notas al pie, obtener la posición de lectura
Gestión de sesiones: Listar libros abiertos, cerrar sesiones, gestionar recursos
Related MCP server: Readbook MCP Server
Requisitos previos
npm o gestor de paquetes compatible
Archivos EPUB para leer (formato
.epub)
Instalación
Desde el código fuente
git clone https://github.com/your-username/mcp-epub-reader.git
cd mcp-epub-reader
npm install
npm run buildUso
Ejecución del servidor
El servidor utiliza transporte stdio, lo que lo hace ideal para la integración con clientes MCP como Claude Desktop.
stdio (Integración local)
Para la integración con Claude Desktop u otros clientes MCP:
node build/index.jsEl servidor se comunica a través de stdin/stdout utilizando el protocolo MCP JSON-RPC.
Configuración
Configuración de Claude Desktop
Añada el servidor a su configuración de Claude Desktop (~/Library/Application Support/Claude/claude_desktop_config.json en macOS):
{
"mcpServers": {
"epub-reader": {
"command": "node",
"args": ["/absolute/path/to/mcp-epub-reader/build/index.js"],
"env": {
"LOG_LEVEL": "info"
}
}
}
}Variables de entorno
Variable | Descripción | Requerido | Predeterminado |
| Nivel de registro ( | No |
|
Referencia de herramientas
El servidor proporciona 13 herramientas para la interacción con archivos EPUB:
Herramienta | Descripción | Parámetros de entrada |
| Abrir un archivo EPUB y crear una sesión de lectura |
|
| Cerrar una sesión de lectura y liberar recursos |
|
| Listar todas las sesiones EPUB abiertas actualmente | (ninguno) |
| Mover a la página siguiente en la sesión actual |
|
| Mover a la página anterior en la sesión actual |
|
| Saltar a un número de página específico |
|
| Saltar a un capítulo específico (por título o índice) |
|
| Obtener la posición de lectura actual y el progreso |
|
| Buscar texto en todos los capítulos |
|
| Obtener la tabla de contenidos jerárquica |
|
| Obtener metadatos del EPUB (título, autor, editor, etc.) |
|
| Resolver una referencia de nota al pie por ID |
|
| Obtener un resumen del capítulo actual |
|
Detalles de las herramientas
ebook/open
Abre un archivo EPUB, analiza su contenido, crea una sesión de lectura y devuelve metadatos.
Esquema de entrada:
{
filePath: string; // Absolute or relative path to EPUB file
autoNavigate?: boolean; // Whether to auto-navigate to first page (default: false)
}Ejemplo de solicitud:
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "ebook/open",
"arguments": {
"filePath": "/path/to/book.epub",
"autoNavigate": true
}
}
}Ejemplo de respuesta:
{
"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
Cierra una sesión de lectura y libera los recursos asociados.
Esquema de entrada:
{
sessionId: string; // Session ID returned by ebook/open
}ebook/list_open_books
Lista todas las sesiones de lectura activas actualmente.
Esquema de entrada: (ninguno)
Ejemplo de respuesta:
{
"sessions": [
{
"sessionId": "sess_123",
"filePath": "/path/to/book.epub",
"metadata": {
"title": "Sample Book",
"author": "Author Name",
"currentPage": 42,
"totalPages": 250
}
}
]
}ebook/navigate_next y ebook/navigate_previous
Navega hacia adelante o hacia atrás a través de las páginas.
Esquema de entrada:
{
sessionId: string;
}Ejemplo de respuesta:
{
"sessionId": "sess_123",
"currentPage": 43,
"content": "Page content here...",
"chapterTitle": "Chapter 3: The Adventure Begins"
}ebook/jump_to_page
Salta a un número de página específico.
Esquema de entrada:
{
sessionId: string;
pageNumber: number; // 1-based page number
}ebook/jump_to_chapter
Salta a un capítulo específico por título (coincidencia parcial sin distinción entre mayúsculas y minúsculas) o índice de capítulo (basado en 1).
Esquema de entrada:
{
sessionId: string;
chapter: string | number; // Chapter title or index
}ebook/get_position
Obtiene la posición de lectura actual y las estadísticas de progreso.
Ejemplo de respuesta:
{
"sessionId": "sess_123",
"currentPage": 42,
"totalPages": 250,
"progress": 0.168,
"chapterTitle": "Chapter 3: The Adventure Begins",
"chapterIndex": 3
}ebook/search
Busca texto en todos los capítulos, con palabras de contexto opcionales.
Esquema de entrada:
{
sessionId: string;
query: string;
contextWords?: number; // Number of context words around matches (default: 50)
}Ejemplo de respuesta:
{
"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
Obtiene la tabla de contenidos jerárquica.
Ejemplo de respuesta:
{
"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
Obtiene los metadatos completos del EPUB.
Ejemplo de respuesta:
{
"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
Resuelve una referencia de nota al pie por ID.
Esquema de entrada:
{
sessionId: string;
footnoteId: string; // Footnote reference ID (e.g., "fn1")
}Ejemplo de respuesta:
{
"sessionId": "sess_123",
"footnoteId": "fn1",
"content": "Footnote content here...",
"referencingPage": 42
}ebook/get_chapter_summary
Obtiene un resumen del capítulo actual utilizando la extracción de oraciones clave.
Esquema de entrada:
{
sessionId: string;
maxSentences?: number; // Maximum sentences in summary (default: 3)
}Ejemplo de respuesta:
{
"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."
]
}Desarrollo
Estructura del proyecto
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.jsConstrucción desde el código fuente
# Install dependencies
npm install
# Build the project (TypeScript → JavaScript)
npm run build
# Output goes to `build/` directoryPruebas
# Run all tests
npm test
# Run tests with coverage
npm test -- --coverage
# Run specific test file
npm test -- tests/unit/epub/parser.test.tsAñadir una nueva herramienta
Cree un nuevo archivo en
src/tools/con la implementación de la herramienta:
// 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),
};
}Añada el esquema Zod en
src/utils/validation.ts:
export const ExampleToolSchema = z.object({
sessionId: z.string(),
// ... other parameters
});Importe y registre en
src/server/tool-registration.ts:
import { createExampleTool } from '../tools/example';
const toolFactories = {
// ... existing tools
'ebook/example': createExampleTool,
};Contribución
¡Las contribuciones son bienvenidas! Por favor, siga estos pasos:
Haga un fork del repositorio
Cree una rama de características (
git checkout -b feature/amazing-feature)Confirme sus cambios (
git commit -m 'Add amazing feature')Empuje a la rama (
git push origin feature/amazing-feature)Abra una solicitud de extracción (Pull Request)
Configuración de desarrollo
# 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 devEstándares de código
Siga las mejores prácticas de TypeScript con tipado estricto
Escriba funciones puras con inmutabilidad siempre que sea posible
Utilice inyección de dependencias para la capacidad de prueba
Incluya pruebas unitarias completas (patrón AAA)
Documente las API públicas y la lógica compleja
Licencia
Este proyecto está bajo la Licencia MIT.
Agradecimientos
Model Context Protocol por la especificación del protocolo
MCP TypeScript SDK por el SDK
epub library para el análisis de EPUB
OpenAgents por los estándares de desarrollo y flujos de trabajo
Referencias
Registro de cambios
Consulte CHANGELOG.md para ver el historial de versiones.
Nota: Este servidor está diseñado para su uso con clientes MCP como Claude Desktop. Proporciona a los agentes de IA capacidades de lectura de EPUB mientras mantiene el aislamiento de sesiones y la gestión de recursos.
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