Epublys
EPUB/PDF tools: merge, split, compress, convert, edit metadata, validate ebooks.
Should I use this
Quality & Safety
Findings (13)
- HIGH
- MEDIUMin merge_epub
- MEDIUMin split_epub
- MEDIUMin compress_epub
- MEDIUMin read_epub_metadata
- MEDIUMin edit_epub_metadata
- MEDIUMin epub_to_pdf
- MEDIUMin pdf_to_epub
- MEDIUMin markdown_to_epub
- MEDIUMin docx_to_epub
Based on automated analysis of tool definitions and protocol compliance.
Context Cost
This is the approximate number of tokens consumed each time the server's tools are loaded into a model's context. Higher counts reduce the attention available for other tasks.
Install
One-Click Install
Add this to your `claude_desktop_config.json` file:
{
"mcpServers": {
"epublys": {
"url": "https://epublys.com/mcp"
}
}
}Remote endpoints
https://epublys.com/mcpstreamable-httpWhat it can do
Tool inventory
Tools (13)
⚪merge_epub(files, names, title, author, dividers)
Merge multiple EPUB files into a single ebook with table of contents and chapter dividers. Accepts 2+ base64-encoded EPUB files. Free tier: 5MB/file (10MB for pdf-to-epub, 15MB for split), 3 operations/day, 15 req/min, output includes Epublys branding. Pro ($9/mo): 30MB per operation, unlimited daily operations, 60 req/min, no branding. When a call is refused with daily_limited or a Pro-only error, call the `upgrade_to_pro` tool — it returns a checkout link to hand the user. Details: https://epublys.com/pricing
Input Schema
{
"type": "object",
"properties": {
"files": {
"type": "array",
"items": {
"type": "string",
"description": "Base64-encoded EPUB file content"
},
"minItems": 2,
"description": "Array of base64-encoded EPUB files to merge (order preserved)"
},
"names": {
"type": "array",
"items": {
"type": "string"
},
"description": "Original filenames, in the same order as files — the output is named after them (\"A + B.epub\", or \"A + N more.epub\" past two); without them it is merged.epub"
},
"title": {
"type": "string",
"maxLength": 300,
"description": "Title for the merged EPUB (optional)"
},
"author": {
"type": "string",
"maxLength": 300,
"description": "Author for the merged EPUB (optional)"
},
"dividers": {
"type": "boolean",
"default": true,
"description": "Insert divider pages between books"
}
},
"required": [
"files"
]
}⚪split_epub(file, name, chapterStart, chapterEnd, keepMetadata)
Split an EPUB. With a chapter range (chapterStart and/or chapterEnd) the result is ONE base64-encoded EPUB of exactly those chapters, in order, with the book's metadata, a table of contents limited to them and the fonts and images they use. Without a range the result is a base64-encoded ZIP archive holding one EPUB per chapter. Free tier: 5MB/file (10MB for pdf-to-epub, 15MB for split), 3 operations/day, 15 req/min, output includes Epublys branding. Pro ($9/mo): 30MB per operation, unlimited daily operations, 60 req/min, no branding. When a call is refused with daily_limited or a Pro-only error, call the `upgrade_to_pro` tool — it returns a checkout link to hand the user. Details: https://epublys.com/pricing
Input Schema
{
"type": "object",
"properties": {
"file": {
"type": "string",
"description": "Base64-encoded EPUB file content"
},
"name": {
"type": "string",
"description": "Original filename — the output is named after its stem (e.g. \"Book.epub\" gives \"Book (compressed).epub\"); without it the output keeps a fixed name"
},
"chapterStart": {
"type": "integer",
"minimum": 1,
"description": "First chapter to include (1-indexed, optional). Giving either bound returns one EPUB of the range instead of a ZIP"
},
"chapterEnd": {
"type": "integer",
"minimum": 1,
"description": "Last chapter to include (inclusive, optional)"
},
"keepMetadata": {
"type": "boolean",
"default": true,
"description": "Preserve the original author, publisher and description in the output"
}
},
"required": [
"file"
]
}⚪compress_epub(file, name, level, stripUnused)
Compress an EPUB file to reduce its size. Can optionally strip unused assets (images, fonts not referenced by any chapter). Free tier: 5MB/file (10MB for pdf-to-epub, 15MB for split), 3 operations/day, 15 req/min, output includes Epublys branding. Pro ($9/mo): 30MB per operation, unlimited daily operations, 60 req/min, no branding. When a call is refused with daily_limited or a Pro-only error, call the `upgrade_to_pro` tool — it returns a checkout link to hand the user. Details: https://epublys.com/pricing
Input Schema
{
"type": "object",
"properties": {
"file": {
"type": "string",
"description": "Base64-encoded EPUB file content"
},
"name": {
"type": "string",
"description": "Original filename — the output is named after its stem (e.g. \"Book.epub\" gives \"Book (compressed).epub\"); without it the output keeps a fixed name"
},
"level": {
"type": "integer",
"minimum": 1,
"maximum": 9,
"default": 6,
"description": "Compression level (1=fastest, 9=smallest)"
},
"stripUnused": {
"type": "boolean",
"default": false,
"description": "Remove assets not referenced by any chapter"
}
},
"required": [
"file"
]
}🟢read_epub_metadata(file)
Read metadata from an EPUB file (title, author, language, publisher, description, series, cover status, etc.). Returns JSON — no file output. Free tier: 5MB/file (10MB for pdf-to-epub, 15MB for split), 3 operations/day, 15 req/min, output includes Epublys branding. Pro ($9/mo): 30MB per operation, unlimited daily operations, 60 req/min, no branding. When a call is refused with daily_limited or a Pro-only error, call the `upgrade_to_pro` tool — it returns a checkout link to hand the user. Details: https://epublys.com/pricing
Input Schema
{
"type": "object",
"properties": {
"file": {
"type": "string",
"description": "Base64-encoded EPUB file content"
}
},
"required": [
"file"
]
}🟡edit_epub_metadata(file, name, title, author, authors, ...)
Edit metadata fields in an EPUB file (title, author, language, publisher, description, series, cover image, etc.). Returns the modified EPUB. Free tier: 5MB/file (10MB for pdf-to-epub, 15MB for split), 3 operations/day, 15 req/min, output includes Epublys branding. Pro ($9/mo): 30MB per operation, unlimited daily operations, 60 req/min, no branding. When a call is refused with daily_limited or a Pro-only error, call the `upgrade_to_pro` tool — it returns a checkout link to hand the user. Details: https://epublys.com/pricing
Input Schema
{
"type": "object",
"properties": {
"file": {
"type": "string",
"description": "Base64-encoded EPUB file content"
},
"name": {
"type": "string",
"description": "Original filename — the output is named after its stem (e.g. \"Book.epub\" gives \"Book (compressed).epub\"); without it the output keeps a fixed name"
},
"title": {
"type": "string"
},
"author": {
"type": "string"
},
"authors": {
"type": "string",
"description": "Comma-separated list of authors"
},
"language": {
"type": "string"
},
"publisher": {
"type": "string"
},
"description": {
"type": "string"
},
"series": {
"type": "string"
},
"seriesPosition": {
"type": "string"
},
"subjects": {
"type": "string",
"description": "Comma-separated list of subjects/tags"
},
"date": {
"type": "string"
},
"isbn": {
"type": "string"
},
"cover": {
"type": "string",
"description": "Base64-encoded cover image (JPEG or PNG, max 5MB)"
}
},
"required": [
"file"
]
}⚪epub_to_pdf(file, name, pageSize, margins, fontFamily, ...)
Convert an EPUB ebook to PDF. Supports page size, margins, font, and page number options. Pro ($9/mo) is strongly recommended for PDF conversion — the 30MB limit handles illustrated or academic books that exceed the free 5MB cap. Upgrade at https://epublys.com/pricing
Input Schema
{
"type": "object",
"properties": {
"file": {
"type": "string",
"description": "Base64-encoded EPUB file content"
},
"name": {
"type": "string",
"description": "Original filename — the output is named after its stem (e.g. \"Book.epub\" gives \"Book (compressed).epub\"); without it the output keeps a fixed name"
},
"pageSize": {
"type": "string",
"enum": [
"a4",
"letter"
],
"default": "a4"
},
"margins": {
"type": "integer",
"default": 60,
"description": "Page margins in points"
},
"fontFamily": {
"type": "string",
"enum": [
"serif",
"sans"
],
"default": "serif"
},
"fontSize": {
"type": "integer",
"minimum": 6,
"maximum": 48,
"default": 11,
"description": "Font size in points"
},
"pageNumbers": {
"type": "boolean",
"default": true
}
},
"required": [
"file"
]
}⚪pdf_to_epub(file, name, language, chapterMode, pagesPerChapter, ...)
Convert a PDF document to EPUB ebook format. Supports automatic chapter detection, image extraction (Pro), and custom chapter grouping. Free tier supports up to 10MB per PDF. Pro ($9/mo) is strongly recommended for PDF conversion — the 30MB limit handles most scanned or illustrated PDFs. Upgrade at https://epublys.com/pricing
Input Schema
{
"type": "object",
"properties": {
"file": {
"type": "string",
"description": "Base64-encoded PDF file content"
},
"name": {
"type": "string",
"description": "Original filename — the output is named after its stem (e.g. \"Book.epub\" gives \"Book (compressed).epub\"); without it the output keeps a fixed name"
},
"language": {
"type": "string",
"default": "en",
"description": "Language code for the output EPUB"
},
"chapterMode": {
"type": "string",
"enum": [
"auto",
"every-n",
"single"
],
"default": "auto",
"description": "How to split into chapters"
},
"pagesPerChapter": {
"type": "integer",
"default": 10,
"description": "Pages per chapter (only for every-n mode)"
},
"extractImages": {
"type": "boolean",
"default": true,
"description": "Pro only — ignored on free tier"
}
},
"required": [
"file"
]
}⚪markdown_to_epub(files, title, author, language)
Build a valid EPUB3 ebook from Markdown files — one file per chapter, in array order. Understands YAML frontmatter (title/author) and Obsidian [[wikilinks]]; cross-file .md links are rewritten to chapter links inside the book. No Pandoc required. Free tier: 5MB/file (10MB for pdf-to-epub, 15MB for split), 3 operations/day, 15 req/min, output includes Epublys branding. Pro ($9/mo): 30MB per operation, unlimited daily operations, 60 req/min, no branding. When a call is refused with daily_limited or a Pro-only error, call the `upgrade_to_pro` tool — it returns a checkout link to hand the user. Details: https://epublys.com/pricing
Input Schema
{
"type": "object",
"properties": {
"files": {
"type": "array",
"items": {
"type": "object",
"properties": {
"name": {
"type": "string",
"description": "Filename (used for chapter title fallback and cross-file link rewrites; the first one names the output)"
},
"content": {
"type": "string",
"description": "Base64-encoded Markdown content"
}
},
"required": [
"content"
]
},
"minItems": 1,
"description": "Markdown files, one per chapter, in reading order"
},
"title": {
"type": "string",
"maxLength": 300,
"description": "Book title (defaults to frontmatter or first heading)"
},
"author": {
"type": "string",
"maxLength": 300,
"description": "Author (defaults to frontmatter)"
},
"language": {
"type": "string",
"default": "en"
}
},
"required": [
"files"
]
}⚪docx_to_epub(file, name, title, author, language, ...)
Convert a Word document (.docx) to a valid EPUB3 ebook. Chapters split on the document's top heading level (Heading 1 in a normal manuscript), or on page breaks, or not at all. Keeps bold/italic, lists, tables, inline images (PNG/JPEG/GIF/WebP), hyperlinks and footnotes; reads the title and author from the document's properties. No Pandoc, no Calibre. Free tier: 5MB/file (10MB for pdf-to-epub, 15MB for split), 3 operations/day, 15 req/min, output includes Epublys branding. Pro ($9/mo): 30MB per operation, unlimited daily operations, 60 req/min, no branding. When a call is refused with daily_limited or a Pro-only error, call the `upgrade_to_pro` tool — it returns a checkout link to hand the user. Details: https://epublys.com/pricing
Input Schema
{
"type": "object",
"properties": {
"file": {
"type": "string",
"description": "Base64-encoded .docx file content"
},
"name": {
"type": "string",
"description": "Original filename — used as the title fallback; the output is named after its stem"
},
"title": {
"type": "string",
"maxLength": 300,
"description": "Book title (defaults to the document title, then its first heading)"
},
"author": {
"type": "string",
"maxLength": 300,
"description": "Author (defaults to the document author)"
},
"language": {
"type": "string",
"default": "en",
"description": "dc:language of the generated EPUB (BCP 47)"
},
"chapterMode": {
"type": "string",
"enum": [
"headings",
"page-breaks",
"single"
],
"default": "headings",
"description": "Where chapters start"
}
},
"required": [
"file"
]
}⚪epub_to_markdown(file, name, includeImages)
Convert an EPUB ebook to Markdown. Returns a ZIP with one Markdown file per chapter (YAML frontmatter with title/book/author/chapter), an index.md with book metadata and a linked table of contents, and the referenced images. Plain CommonMark — drops straight into an Obsidian vault or any notes pipeline. Free tier: 5MB/file (10MB for pdf-to-epub, 15MB for split), 3 operations/day, 15 req/min, output includes Epublys branding. Pro ($9/mo): 30MB per operation, unlimited daily operations, 60 req/min, no branding. When a call is refused with daily_limited or a Pro-only error, call the `upgrade_to_pro` tool — it returns a checkout link to hand the user. Details: https://epublys.com/pricing
Input Schema
{
"type": "object",
"properties": {
"file": {
"type": "string",
"description": "Base64-encoded EPUB file content"
},
"name": {
"type": "string",
"description": "Original filename — the output is named after its stem (e.g. \"Book.epub\" gives \"Book (compressed).epub\"); without it the output keeps a fixed name"
},
"includeImages": {
"type": "boolean",
"default": true,
"description": "Copy referenced images into an images/ folder"
}
},
"required": [
"file"
]
}🟢validate_epub(file, deepScan, autoFix)
Validate an EPUB file for errors, compatibility issues, and spec compliance. Returns JSON with check results. Can optionally auto-fix common issues. Free tier: 5MB/file (10MB for pdf-to-epub, 15MB for split), 3 operations/day, 15 req/min, output includes Epublys branding. Pro ($9/mo): 30MB per operation, unlimited daily operations, 60 req/min, no branding. When a call is refused with daily_limited or a Pro-only error, call the `upgrade_to_pro` tool — it returns a checkout link to hand the user. Details: https://epublys.com/pricing
Input Schema
{
"type": "object",
"properties": {
"file": {
"type": "string",
"description": "Base64-encoded EPUB file content"
},
"deepScan": {
"type": "boolean",
"default": true,
"description": "Perform deep scan (XHTML well-formedness, broken links, etc.)"
},
"autoFix": {
"type": "boolean",
"default": false,
"description": "Auto-fix common issues and return repaired EPUB"
}
},
"required": [
"file"
]
}🟢generate_cover(description, genre, title, author, seed)
Generate an AI book cover image using FLUX. Describe your vision, pick a genre, and get a portrait JPEG cover — 768×1152 when the model honours the requested size, otherwise its default square. The AI enhances your prompt with professional composition guidance while preserving your creative vision. Pro only ($9/mo). Upgrade at https://epublys.com/pricing
Input Schema
{
"type": "object",
"properties": {
"description": {
"type": "string",
"maxLength": 2000,
"description": "Creative description of the desired book cover (max 2000 chars). Either description or title is required."
},
"genre": {
"type": "string",
"enum": [
"fantasy",
"romance",
"thriller",
"sci-fi",
"literary",
"non-fiction",
"horror",
"children",
"poetry",
"minimalist"
],
"description": "Book genre — affects style and composition"
},
"title": {
"type": "string",
"maxLength": 200,
"description": "Book title — used to synthesize a cover concept when no description is given (not rendered on cover)"
},
"author": {
"type": "string",
"maxLength": 200,
"description": "Author name (for context, not rendered on cover)"
},
"seed": {
"type": "integer",
"description": "Random seed for reproducible generation"
}
},
"required": []
}🟢upgrade_to_pro(plan)
Get a checkout link so the user can upgrade THIS account to Epublys Pro. Call this when another tool is refused with `daily_limited` or a Pro-only error, or when the user asks to upgrade. Returns a Stripe checkout URL to hand to the user — they complete payment in their own browser. Creates no charge by itself, and the link is bound to the account that owns the API key being used, so it cannot be used to pay for anyone else. If the account is already Pro it says so and returns no link. Needs an API key: without one it returns the pricing URL instead of a checkout link. Free: 3 operations/day, 5MB per file. Pro: unlimited daily operations, 30MB per operation, 60 req/min, no branding on output.
Input Schema
{
"type": "object",
"properties": {
"plan": {
"type": "string",
"enum": [
"monthly",
"yearly"
],
"default": "monthly",
"description": "monthly is $9/month; yearly is $72/year (4 months free, 33% off). Defaults to monthly."
}
},
"required": []
}Community
Evidence