Run EPUBCheck for EPUB specification errors and compare two exports.
Maintain this server? Claim it
Call this server's tools from your browser. Nothing to install.
Requests go through mcptry because browsers can't call most MCP servers directly. Header values are sent to the server for that request only and are never stored or logged.
Tool list from our last check. Connect live to refresh it.
Validates one EPUB (a directly hosted public URL or a file attached in chat) against the EPUB 2/3 specification using a pinned local EPUBCheck 5.4.0 engine run in a no-network sandbox. Each call takes exactly one source: the url parameter or the file attachment, never both. Returns the automated verdict: pass boolean, EPUB version, message counts by severity (fatal/error/warning/usage), findings grouped most-severe-first with EPUBCheck rule id (RSC-005, OPF-014, …), file path and line/column, plus a structural inventory (spine items, media types, remote-resource state), SHA-256 of the exact bytes, and truncation metadata. Use for one-file readiness and diagnosis: 'is this ebook valid', 'does this EPUB have specification problems before upload', 'what is wrong with it'. A pass means only that the bytes satisfied the automated profile; it never renders the book, judges accessibility, or guarantees any store will accept it, and human review of how the book reads and looks is always required. Downloads and validates a live EPUB under a 110-second call deadline; tell the user before the call.
Direct public HTTP(S) URL to the EPUB file bytes, including the protocol, not a ChatGPT file id, local path, cloud-drive share, archive/viewer page, or authenticated URL needing a login. Each call takes either URL sources or attached-file sources, never both STRICT RULE: Ebook check failed: provide either an EPUB URL or an attached EPUB file, not both STRICT RULE: Ebook check failed: provide a public EPUB URL or attach the EPUB file
An EPUB file attached in chat, up to 25 MB, validated from its exact bytes. Provide either this attachment or url, never both.
Maximum spec findings to return, most severe first (default 200); raise it to see more of a very noisy book, lower it to keep the answer short
Validates one EPUB (a directly hosted public URL or a file attached in chat) against the EPUB 2/3 specification using a pinned local EPUBCheck 5.4.0 engine run in a no-network sandbox. Each call takes exactly one source: the url parameter or the file attachment, never both. Returns the automated verdict: pass boolean, EPUB version, message counts by severity (fatal/error/warning/usage), findings grouped most-severe-first with EPUBCheck rule id (RSC-005, OPF-014, …), file path and line/column, plus a structural inventory (spine items, media types, remote-resource state), SHA-256 of the exact bytes, and truncation metadata. Use for one-file readiness and diagnosis: 'is this ebook valid', 'does this EPUB have specification problems before upload', 'what is wrong with it'. A pass means only that the bytes satisfied the automated profile; it never renders the book, judges accessibility, or guarantees any store will accept it, and human review of how the book reads and looks is always required. Downloads and validates a live EPUB under a 110-second call deadline; tell the user before the call.
| Argument | Type | Description |
|---|---|---|
| url | string | Direct public HTTP(S) URL to the EPUB file bytes, including the protocol, not a ChatGPT file id, local path, cloud-drive share, archive/viewer page, or authenticated URL needing a login. Each call takes either URL sources or attached-file sources, never both STRICT RULE: Ebook check failed: provide either an EPUB URL or an attached EPUB file, not both STRICT RULE: Ebook check failed: provide a public EPUB URL or attach the EPUB file |
| file | object | An EPUB file attached in chat, up to 25 MB, validated from its exact bytes. Provide either this attachment or url, never both. |
| maxMessages | integer | Maximum spec findings to return, most severe first (default 200); raise it to see more of a very noisy book, lower it to keep the answer short |
{
"type": "object",
"properties": {
"url": {
"type": "string",
"pattern": "^https?://",
"description": "Direct public HTTP(S) URL to the EPUB file bytes, including the protocol, not a ChatGPT file id, local path, cloud-drive share, archive/viewer page, or authenticated URL needing a login. Each call takes either URL sources or attached-file sources, never both\n\nSTRICT RULE: Ebook check failed: provide either an EPUB URL or an attached EPUB file, not both\nSTRICT RULE: Ebook check failed: provide a public EPUB URL or attach the EPUB file"
},
"file": {
"type": "object",
"required": [
"download_url",
"file_id"
],
"properties": {
"file_id": {
"type": "string",
"description": "ChatGPT file id for the attached file"
},
"file_name": {
"type": "string",
"description": "Original file name when ChatGPT knows it"
},
"mime_type": {
"type": "string",
"description": "MIME type when ChatGPT knows it"
},
"download_url": {
"type": "string",
"description": "Temporary authorized download URL supplied by ChatGPT; fetch it only while handling this tool call"
}
},
"description": "An EPUB file attached in chat, up to 25 MB, validated from its exact bytes. Provide either this attachment or url, never both.",
"additionalProperties": false
},
"maxMessages": {
"type": "integer",
"maximum": 500,
"minimum": 1,
"description": "Maximum spec findings to return, most severe first (default 200); raise it to see more of a very noisy book, lower it to keep the answer short"
}
},
"additionalProperties": false
}Runs the identical pinned EPUBCheck 5.4.0 validation over exactly two EPUB builds (directly hosted public URLs or files attached in chat, baseline first, revised second) sequentially under one shared 110-second deadline, then reports which spec findings regressed or were fixed between them. Returns per-build hashes, EPUB versions, pass verdicts and severity counts, a regressions list (rules that appear or worsen in the revised build) and a fixed list (rules removed or reduced), and a ranking by pass state then fewer blocking findings. Use for 'did my re-export get worse', 'which build has fewer problems', and revision-over-revision questions. The ranking orders automated conformance only (it never means one build renders, reads, or sells better), and when both builds tie on pass state and blocking count it names no winner rather than crowning the first submission. It also flags when the two files declare different titles, since that usually means they are not two builds of one book. Human review remains required for both builds. A comparison can take up to 110 seconds under its shared deadline; tell the user before the call.
| Argument | Type | Description |
|---|---|---|
| urls | array | Exactly two distinct direct public HTTP(S) EPUB URLs: the baseline build first, the revised build second. Provide either these URLs or files, never both. STRICT RULE: Ebook compare failed: provide either two EPUB URLs or two attached EPUB files, not both STRICT RULE: Ebook compare failed: provide two public EPUB URLs or attach two EPUB build files |
| files | array | Exactly two distinct EPUB builds attached in chat: the baseline build first, the revised build second. Provide either these attachments or urls, never both. |
| maxMessages | integer | Maximum findings to collect per build for the comparison (default 150) |
{
"type": "object",
"properties": {
"urls": {
"type": "array",
"items": {
"type": "string",
"pattern": "^https?://",
"description": "Direct public HTTP(S) URL to the EPUB file bytes, including the protocol, not a ChatGPT file id, local path, cloud-drive share, archive/viewer page, or authenticated URL needing a login. Each call takes either URL sources or attached-file sources, never both"
},
"maxItems": 2,
"minItems": 2,
"description": "Exactly two distinct direct public HTTP(S) EPUB URLs: the baseline build first, the revised build second. Provide either these URLs or files, never both.\n\nSTRICT RULE: Ebook compare failed: provide either two EPUB URLs or two attached EPUB files, not both\nSTRICT RULE: Ebook compare failed: provide two public EPUB URLs or attach two EPUB build files"
},
"files": {
"type": "array",
"items": {
"type": "object",
"required": [
"download_url",
"file_id"
],
"properties": {
"file_id": {
"type": "string",
"description": "ChatGPT file id for the attached file"
},
"file_name": {
"type": "string",
"description": "Original file name when ChatGPT knows it"
},
"mime_type": {
"type": "string",
"description": "MIME type when ChatGPT knows it"
},
"download_url": {
"type": "string",
"description": "Temporary authorized download URL supplied by ChatGPT; fetch it only while handling this tool call"
}
},
"description": "An EPUB build file attached in chat, up to 25 MB, validated from its exact bytes.",
"additionalProperties": false
},
"maxItems": 2,
"minItems": 2,
"description": "Exactly two distinct EPUB builds attached in chat: the baseline build first, the revised build second. Provide either these attachments or urls, never both."
},
"maxMessages": {
"type": "integer",
"maximum": 300,
"minimum": 1,
"description": "Maximum findings to collect per build for the comparison (default 150)"
}
},
"description": "STRICT RULE: Ebook compare failed: the two sources must be distinct builds",
"additionalProperties": false
}