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.
- 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