Epublys

EPUB/PDF tools: merge, split, compress, convert, edit metadata, validate ebooks.

Should I use this

Quality & Safety

B
Description quality
100%
Schema completeness
96%
Naming quality
85%
Poisoning risk
0%
Permission match
100%
Protocol compliance
100%

Findings (13)

  • HIGHTool poisoning patterns detected
  • MEDIUMTool description contains URL to non-standard domainin merge_epub
  • MEDIUMTool description contains URL to non-standard domainin split_epub
  • MEDIUMTool description contains URL to non-standard domainin compress_epub
  • MEDIUMTool description contains URL to non-standard domainin read_epub_metadata
  • MEDIUMTool description contains URL to non-standard domainin edit_epub_metadata
  • MEDIUMTool description contains URL to non-standard domainin epub_to_pdf
  • MEDIUMTool description contains URL to non-standard domainin pdf_to_epub
  • MEDIUMTool description contains URL to non-standard domainin markdown_to_epub
  • MEDIUMTool description contains URL to non-standard domainin docx_to_epub

Based on automated analysis of tool definitions and protocol compliance.

Context Cost

~3,794Tokens (tool definitions)
~1.7 KBTypical response size
Significant attention impact (2.96% of 128k context)

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

What it can do

Tool inventory

Tools (13)

🟢 Read-only🟡 Write🔴 Delete⚪ Unknown
⚪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

Rate this Server

Evidence

Recent observations

verifiedversion not recorded13 tools
auth requiredversion not recorded—
auth requiredversion not recorded—
auth requiredversion not recorded—
auth requiredversion not recorded—
auth requiredversion not recorded—