EPUB Reader MCP Server
EPUB Reader MCP-Server
Ein Model Context Protocol (MCP) Server, der als „Kindle für KI-Agenten“ fungiert und EPUB-Dateiinhalte über die Tools-API von MCP bereitstellt.
Übersicht
Der EPUB Reader MCP-Server bietet KI-Agenten die Möglichkeit, EPUB-Dateien zu lesen und darin zu navigieren. Er implementiert das Model Context Protocol (MCP), um 13 Tools bereitzustellen, die das Öffnen von EPUB-Dateien, die Navigation durch Inhaltsverzeichnisse und Seiten, die Suche in Inhalten, das Überprüfen von Fußnoten und die Verwaltung von Lesesitzungen ermöglichen.
Funktionen
EPUB-Dateien öffnen: Validierung und Analyse von EPUB-Dateien, Erstellung von Lesesitzungen
Inhaltsnavigation: Vorwärts-/Rückwärtsblättern, Springen zu bestimmten Seiten oder Kapiteln
Inhalt entdecken: Anzeigen von Inhaltsverzeichnissen, Metadaten und Kapitelzusammenfassungen
Suchfunktion: Volltextsuche über Kapitel hinweg mit Kontext
Referenz-Tools: Auflösen von Fußnotenreferenzen, Abrufen der Leseposition
Sitzungsverwaltung: Auflisten offener Bücher, Schließen von Sitzungen, Verwalten von Ressourcen
Related MCP server: Readbook MCP Server
Voraussetzungen
npm oder ein kompatibler Paketmanager
EPUB-Dateien zum Lesen (
.epub-Format)
Installation
Aus dem Quellcode
git clone https://github.com/your-username/mcp-epub-reader.git
cd mcp-epub-reader
npm install
npm run buildVerwendung
Starten des Servers
Der Server verwendet den stdio-Transport, was ihn ideal für die Integration mit MCP-Clients wie Claude Desktop macht.
stdio (Lokale Integration)
Zur Integration mit Claude Desktop oder anderen MCP-Clients:
node build/index.jsDer Server kommuniziert über stdin/stdout unter Verwendung des MCP JSON-RPC-Protokolls.
Konfiguration
Claude Desktop-Konfiguration
Fügen Sie den Server zu Ihrer Claude Desktop-Konfiguration hinzu (~/Library/Application Support/Claude/claude_desktop_config.json unter macOS):
{
"mcpServers": {
"epub-reader": {
"command": "node",
"args": ["/absolute/path/to/mcp-epub-reader/build/index.js"],
"env": {
"LOG_LEVEL": "info"
}
}
}
}Umgebungsvariablen
Variable | Beschreibung | Erforderlich | Standard |
| Protokollierungsebene ( | Nein |
|
Tools-Referenz
Der Server bietet 13 Tools für die Interaktion mit EPUB-Dateien:
Tool | Beschreibung | Eingabeparameter |
| Öffnet eine EPUB-Datei und erstellt eine Lesesitzung |
|
| Schließt eine Lesesitzung und gibt Ressourcen frei |
|
| Listet alle aktuell offenen EPUB-Sitzungen auf | (keine) |
| Geht zur nächsten Seite in der aktuellen Sitzung |
|
| Geht zur vorherigen Seite in der aktuellen Sitzung |
|
| Springt zu einer bestimmten Seitenzahl |
|
| Springt zu einem bestimmten Kapitel (nach Titel oder Index) |
|
| Ruft die aktuelle Leseposition und den Fortschritt ab |
|
| Durchsucht alle Kapitel nach Text |
|
| Ruft das hierarchische Inhaltsverzeichnis ab |
|
| Ruft EPUB-Metadaten ab (Titel, Autor, Verlag, etc.) |
|
| Löst eine Fußnotenreferenz anhand der ID auf |
|
| Ruft eine Zusammenfassung des aktuellen Kapitels ab |
|
Tool-Details
ebook/open
Öffnet eine EPUB-Datei, analysiert deren Inhalt, erstellt eine Lesesitzung und gibt Metadaten zurück.
Eingabeschema:
{
filePath: string; // Absolute or relative path to EPUB file
autoNavigate?: boolean; // Whether to auto-navigate to first page (default: false)
}Beispielanfrage:
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "ebook/open",
"arguments": {
"filePath": "/path/to/book.epub",
"autoNavigate": true
}
}
}Beispielantwort:
{
"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
Schließt eine Lesesitzung und gibt zugehörige Ressourcen frei.
Eingabeschema:
{
sessionId: string; // Session ID returned by ebook/open
}ebook/list_open_books
Listet alle aktuell aktiven Lesesitzungen auf.
Eingabeschema: (keine)
Beispielantwort:
{
"sessions": [
{
"sessionId": "sess_123",
"filePath": "/path/to/book.epub",
"metadata": {
"title": "Sample Book",
"author": "Author Name",
"currentPage": 42,
"totalPages": 250
}
}
]
}ebook/navigate_next und ebook/navigate_previous
Navigieren Sie vorwärts oder rückwärts durch die Seiten.
Eingabeschema:
{
sessionId: string;
}Beispielantwort:
{
"sessionId": "sess_123",
"currentPage": 43,
"content": "Page content here...",
"chapterTitle": "Chapter 3: The Adventure Begins"
}ebook/jump_to_page
Springen Sie zu einer bestimmten Seitenzahl.
Eingabeschema:
{
sessionId: string;
pageNumber: number; // 1-based page number
}ebook/jump_to_chapter
Springen Sie zu einem bestimmten Kapitel anhand des Titels (teilweise Übereinstimmung, Groß-/Kleinschreibung wird ignoriert) oder des Kapitelindex (1-basiert).
Eingabeschema:
{
sessionId: string;
chapter: string | number; // Chapter title or index
}ebook/get_position
Ruft die aktuelle Leseposition und Fortschrittsstatistiken ab.
Beispielantwort:
{
"sessionId": "sess_123",
"currentPage": 42,
"totalPages": 250,
"progress": 0.168,
"chapterTitle": "Chapter 3: The Adventure Begins",
"chapterIndex": 3
}ebook/search
Durchsuchen Sie alle Kapitel nach Text, mit optionalen Kontextwörtern.
Eingabeschema:
{
sessionId: string;
query: string;
contextWords?: number; // Number of context words around matches (default: 50)
}Beispielantwort:
{
"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
Ruft das hierarchische Inhaltsverzeichnis ab.
Beispielantwort:
{
"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
Ruft vollständige EPUB-Metadaten ab.
Beispielantwort:
{
"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
Löst eine Fußnotenreferenz anhand der ID auf.
Eingabeschema:
{
sessionId: string;
footnoteId: string; // Footnote reference ID (e.g., "fn1")
}Beispielantwort:
{
"sessionId": "sess_123",
"footnoteId": "fn1",
"content": "Footnote content here...",
"referencingPage": 42
}ebook/get_chapter_summary
Ruft eine Zusammenfassung des aktuellen Kapitels durch Extraktion der wichtigsten Sätze ab.
Eingabeschema:
{
sessionId: string;
maxSentences?: number; // Maximum sentences in summary (default: 3)
}Beispielantwort:
{
"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."
]
}Entwicklung
Projektstruktur
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.jsErstellen aus dem Quellcode
# Install dependencies
npm install
# Build the project (TypeScript → JavaScript)
npm run build
# Output goes to `build/` directoryTesten
# Run all tests
npm test
# Run tests with coverage
npm test -- --coverage
# Run specific test file
npm test -- tests/unit/epub/parser.test.tsHinzufügen eines neuen Tools
Erstellen Sie eine neue Datei in
src/tools/mit der Tool-Implementierung:
// 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),
};
}Fügen Sie das Zod-Schema in
src/utils/validation.tshinzu:
export const ExampleToolSchema = z.object({
sessionId: z.string(),
// ... other parameters
});Importieren und registrieren Sie es in
src/server/tool-registration.ts:
import { createExampleTool } from '../tools/example';
const toolFactories = {
// ... existing tools
'ebook/example': createExampleTool,
};Mitwirken
Beiträge sind willkommen! Bitte befolgen Sie diese Schritte:
Forken Sie das Repository
Erstellen Sie einen Feature-Branch (
git checkout -b feature/amazing-feature)Commiten Sie Ihre Änderungen (
git commit -m 'Add amazing feature')Pushen Sie den Branch (
git push origin feature/amazing-feature)Öffnen Sie einen Pull Request
Entwicklungseinrichtung
# 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 devCodestandards
Befolgen Sie TypeScript-Best-Practices mit strenger Typisierung
Schreiben Sie reine Funktionen mit Unveränderlichkeit, wo möglich
Verwenden Sie Dependency Injection für Testbarkeit
Fügen Sie umfassende Unit-Tests hinzu (AAA-Muster)
Dokumentieren Sie öffentliche APIs und komplexe Logik
Lizenz
Dieses Projekt ist unter der MIT-Lizenz lizenziert.
Danksagungen
Model Context Protocol für die Protokollspezifikation
MCP TypeScript SDK für das SDK
epub library für die EPUB-Analyse
OpenAgents für Entwicklungsstandards und Workflows
Referenzen
Changelog
Siehe CHANGELOG.md für die Versionshistorie.
Hinweis: Dieser Server ist für die Verwendung mit MCP-Clients wie Claude Desktop konzipiert. Er bietet KI-Agenten EPUB-Lesefunktionen bei gleichzeitiger Wahrung der Sitzungsisolierung und Ressourcenverwaltung.
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