Endpoints: 28,729MCP servers: 18,413Payout addresses: 2,071Paid calls: 1,541Letters: 14Defects: 1,323counted 2 min ago
teppi

Server definition

Hash
sha256:92310b8a338bd922d309f1f30734cec05e51898de628331fede2e2434c990308
What it is
What a remote MCP server returned when asked what it offers: 2 tools

The blob, as servednamed by its sha256

{ "instructions": "Use ebook_check when the user supplies one EPUB (a publicly fetchable URL or a file attached in the conversation) and asks whether the EPUB has specification problems, including problems that may explain a store-upload rejection. A rejection citing accessibility, WCAG or accessibility metadata belongs to Ebook Accessibility Check; EPUBCheck does not predict bookstore acceptance. Use ebook_compare only when the user supplies exactly two EPUB builds (two public URLs or two attached files) and asks what changed between builds, whether a re-export regressed, or which build has fewer machine-checkable problems. Pass attachments through the file parameter (files for ebook_compare), never as URLs, give each tool exactly one source kind per call, and never ask the user to host an attached file publicly. These tools fetch the source artifact and run the official EPUBCheck engine; they do not render the book in a reading system, judge accessibility (that is the sibling Ebook Accessibility Check), or predict a specific distributor's extra metadata rules. A single check or two-build comparison can take up to 110 seconds, bounded by the existing call deadline; tell the user before the call. Lead with pass/fail, EPUB version, and the most severe rule finding, then summarize error/warning counts, structural inventory, and truncation. When ebook_compare reports no evidenced winner, say that plainly instead of naming a better build, and when it reports that the two files declare different titles, surface that before any regression talk. Never repeat EPUB URL query strings, attachment download-URL tokens, or credentials in narration.", "tools": [ { "description": "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.", "inputSchema": { "additionalProperties": false, "properties": { "file": { "additionalProperties": false, "description": "An EPUB file attached in chat, up to 25 MB, validated from its exact bytes. Provide either this attachment or url, never both.", "properties": { "download_url": { "description": "Temporary authorized download URL supplied by ChatGPT; fetch it only while handling this tool call", "type": "string" }, "file_id": { "description": "ChatGPT file id for the attached file", "type": "string" }, "file_name": { "description": "Original file name when ChatGPT knows it", "type": "string" }, "mime_type": { "description": "MIME type when ChatGPT knows it", "type": "string" } }, "required": [ "download_url", "file_id" ], "type": "object" }, "maxMessages": { "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", "maximum": 500, "minimum": 1, "type": "integer" }, "url": { "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", "pattern": "^https?://", "type": "string" } }, "type": "object" }, "name": "ebook_check", "outputSchema": { "additionalProperties": false, "properties": { "bytes": { "description": "Downloaded EPUB size in bytes", "type": "number" }, "contentType": { "description": "Content-Type the server returned", "type": "string" }, "counts": { "additionalProperties": false, "description": "Counts of EPUBCheck findings grouped by severity", "properties": { "error": { "description": "Error messages: spec violations that fail validation and typically block store uploads", "type": "number" }, "fatal": { "description": "Fatal messages: the container could not be fully processed", "type": "number" }, "usage": { "description": "Usage messages: informational notices about optional or unusual constructs", "type": "number" }, "warning": { "description": "Warning messages: advisory issues that do not fail validation", "type": "number" } }, "required": [ "fatal", "error", "warning", "usage" ], "type": "object" }, "engineVersion": { "description": "EPUBCheck engine version that produced the verdict", "type": "string" }, "epubVersion": { "description": "Detected EPUB version, e.g. 2.0.1 or 3.0; omitted when the engine could not detect it", "type": "string" }, "epubVersionDetected": { "description": "Distinguished state: false means the version could not be detected, distinct from a detected-but-invalid version", "type": "boolean" }, "fetchedAt": { "description": "ISO timestamp the EPUB was fetched and validated", "type": "string" }, "finalUrl": { "description": "URL after redirects, with query string and fragment stripped", "type": "string" }, "findings": { "description": "Bounded spec findings, most severe first, capped by maxMessages", "items": { "additionalProperties": false, "properties": { "additionalLocations": { "description": "How many further locations share this finding beyond the one shown", "type": "number" }, "column": { "description": "Column number of the issue, when the engine reports one", "type": "number" }, "label": { "description": "Short display identity combining the EPUBCheck rule id with its primary file path and reported line", "type": "string" }, "line": { "description": "Line number of the issue, when the engine reports one", "type": "number" }, "message": { "description": "What the rule reports", "type": "string" }, "path": { "description": "File path inside the EPUB where the issue was found", "type": "string" }, "ruleId": { "description": "EPUBCheck message id, e.g. RSC-005, OPF-014, HTM-004", "type": "string" }, "severity": { "description": "FATAL, ERROR, WARNING, or USAGE", "type": "string" }, "suggestion": { "description": "Engine-provided remediation hint, when present", "type": "string" } }, "required": [ "label", "ruleId", "severity", "message", "additionalLocations" ], "type": "object" }, "type": "array" }, "humanReviewItems": { "description": "Checks only a qualified human can perform", "items": { "type": "string" }, "type": "array" }, "humanReviewRequired": { "description": "Always true: automated conformance never covers how the book reads or renders", "type": "boolean" }, "inventory": { "additionalProperties": false, "description": "Structural inventory reported for the EPUB container", "properties": { "containerEntryCount": { "description": "Total ZIP entries in the container", "type": "number" }, "containerItemCount": { "description": "Number of manifest/container items EPUBCheck inspected", "type": "number" }, "decompressedBytes": { "description": "Total declared decompressed size of the container in bytes", "type": "number" }, "embeddedFontCount": { "description": "Number of fonts embedded in the container", "type": "number" }, "fixedFormat": { "description": "True for fixed-layout publications", "type": "boolean" }, "hasAudio": { "description": "True when the publication embeds audio", "type": "boolean" }, "hasEncryption": { "description": "True when the container declares encryption", "type": "boolean" }, "hasVideo": { "description": "True when the publication embeds video", "type": "boolean" }, "mediaTypes": { "description": "Distinct declared media types present in the publication", "items": { "type": "string" }, "type": "array" }, "remoteResources": { "additionalProperties": false, "description": "Detected remote-resource references and referenced font count", "properties": { "referencedFontCount": { "description": "Count of remotely referenced fonts", "type": "number" }, "state": { "anyOf": [ { "const": "referenced", "description": "Distinguished state: 'referenced' when remote resources or remote fonts are used, 'none-detected' when the engine found none (absence of evidence, not a guarantee of none)", "type": "string" }, { "const": "none-detected", "description": "Distinguished state: 'referenced' when remote resources or remote fonts are used, 'none-detected' when the engine found none (absence of evidence, not a guarantee of none)", "type": "string" } ], "description": "Distinguished state: 'referenced' when remote resources or remote fonts are used, 'none-detected' when the engine found none (absence of evidence, not a guarantee of none)" } }, "required": [ "state", "referencedFontCount" ], "type": "object" }, "scripted": { "description": "True when the publication contains scripting", "type": "boolean" }, "spineItemCount": { "description": "Number of reading-order spine items", "type": "number" } }, "required": [ "spineItemCount", "containerItemCount", "mediaTypes", "scripted", "fixedFormat", "hasAudio", "hasVideo", "hasEncryption", "embeddedFontCount", "remoteResources", "containerEntryCount", "decompressedBytes" ], "type": "object" }, "nonclaims": { "description": "What this automated result does not establish", "items": { "type": "string" }, "type": "array" }, "pass": { "description": "True when the EPUB has no fatal or error messages against the automated profile", "type": "boolean" }, "processingMs": { "description": "Total processing time in milliseconds", "type": "number" }, "redirects": { "description": "Redirect hops followed", "type": "number" }, "requestedUrl": { "description": "The checked EPUB source: the submitted URL with query and fragment stripped, or the attached file's name", "type": "string" }, "ruleProfileDate": { "description": "Release date of the pinned EPUBCheck rule profile", "type": "string" }, "sha256": { "description": "SHA-256 hash of the exact validated bytes", "type": "string" }, "truncation": { "additionalProperties": false, "description": "Finding totals and the applied limit on returned findings", "properties": { "findingsTruncated": { "description": "True when more findings exist than were returned", "type": "boolean" }, "maxMessages": { "description": "The applied per-call findings cap", "type": "number" }, "returnedFindings": { "description": "Findings actually returned after the maxMessages cap", "type": "number" }, "totalFindings": { "description": "Total findings the engine produced", "type": "number" } }, "required": [ "findingsTruncated", "totalFindings", "returnedFindings", "maxMessages" ], "type": "object" } }, "required": [ "requestedUrl", "finalUrl", "redirects", "sha256", "bytes", "fetchedAt", "engineVersion", "ruleProfileDate", "pass", "epubVersionDetected", "counts", "findings", "inventory", "humanReviewRequired", "humanReviewItems", "nonclaims", "truncation", "processingMs" ], "type": "object" } }, { "description": "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.", "inputSchema": { "additionalProperties": false, "description": "STRICT RULE: Ebook compare failed: the two sources must be distinct builds", "properties": { "files": { "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.", "items": { "additionalProperties": false, "description": "An EPUB build file attached in chat, up to 25 MB, validated from its exact bytes.", "properties": { "download_url": { "description": "Temporary authorized download URL supplied by ChatGPT; fetch it only while handling this tool call", "type": "string" }, "file_id": { "description": "ChatGPT file id for the attached file", "type": "string" }, "file_name": { "description": "Original file name when ChatGPT knows it", "type": "string" }, "mime_type": { "description": "MIME type when ChatGPT knows it", "type": "string" } }, "required": [ "download_url", "file_id" ], "type": "object" }, "maxItems": 2, "minItems": 2, "type": "array" }, "maxMessages": { "description": "Maximum findings to collect per build for the comparison (default 150)", "maximum": 300, "minimum": 1, "type": "integer" }, "urls": { "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", "items": { "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", "pattern": "^https?://", "type": "string" }, "maxItems": 2, "minItems": 2, "type": "array" } }, "type": "object" }, "name": "ebook_compare", "outputSchema": { "additionalProperties": false, "properties": { "comparedAt": { "description": "ISO timestamp of the comparison", "type": "string" }, "documents": { "description": "Per-build hashes, versions, and verdicts in submitted order (baseline first, revised second)", "items": { "additionalProperties": false, "properties": { "bytes": { "description": "Downloaded EPUB size in bytes", "type": "number" }, "counts": { "additionalProperties": false, "description": "Counts of EPUBCheck findings grouped by severity for this build", "properties": { "error": { "description": "Error messages: spec violations that fail validation and typically block store uploads", "type": "number" }, "fatal": { "description": "Fatal messages: the container could not be fully processed", "type": "number" }, "usage": { "description": "Usage messages: informational notices about optional or unusual constructs", "type": "number" }, "warning": { "description": "Warning messages: advisory issues that do not fail validation", "type": "number" } }, "required": [ "fatal", "error", "warning", "usage" ], "type": "object" }, "epubVersion": { "description": "Detected EPUB version", "type": "string" }, "failed": { "description": "Why this build could not be validated, when it could not", "type": "string" }, "findingsTruncated": { "description": "True when this build's findings were capped by maxMessages", "type": "boolean" }, "pass": { "description": "True when the build has no fatal or error messages", "type": "boolean" }, "sha256": { "description": "SHA-256 hash of the exact validated bytes", "type": "string" }, "url": { "description": "The checked EPUB source: the submitted URL with query and fragment stripped, or the attached file's name", "type": "string" } }, "required": [ "url" ], "type": "object" }, "type": "array" }, "engineVersion": { "description": "EPUBCheck engine version that produced the verdicts", "type": "string" }, "fixed": { "description": "Rules removed or reduced in the revised build versus the baseline", "items": { "additionalProperties": false, "properties": { "baselineCount": { "description": "Occurrences in the first (baseline) build", "type": "number" }, "description": { "description": "Representative message text for the rule", "type": "string" }, "revisedCount": { "description": "Occurrences in the second (revised) build", "type": "number" }, "ruleId": { "description": "EPUBCheck message id that differs between builds", "type": "string" }, "severity": { "description": "Severity of the rule in the build where it appears", "type": "string" } }, "required": [ "ruleId", "severity", "description", "baselineCount", "revisedCount" ], "type": "object" }, "type": "array" }, "humanReviewItems": { "description": "Checks only a qualified human can perform", "items": { "type": "string" }, "type": "array" }, "humanReviewRequired": { "description": "Always true: automated conformance never covers how either build reads or renders", "type": "boolean" }, "limits": { "description": "Conclusions this automated comparison cannot support", "items": { "type": "string" }, "type": "array" }, "nonclaims": { "description": "What these automated results do not establish", "items": { "type": "string" }, "type": "array" }, "processingMs": { "description": "Total processing time in milliseconds", "type": "number" }, "ranking": { "description": "Builds ranked by pass state then fewer blocking findings; unvalidatable builds last", "items": { "additionalProperties": false, "properties": { "blockingCount": { "description": "Fatal + error messages for this build", "type": "number" }, "failed": { "description": "Why this build could not be validated, when it could not", "type": "string" }, "pass": { "description": "Automated pass verdict", "type": "boolean" }, "rank": { "description": "1-based rank by automated conformance evidence", "type": "number" }, "url": { "description": "Build source: the submitted URL query- and fragment-stripped, or the attached file's name", "type": "string" } }, "required": [ "rank", "url" ], "type": "object" }, "type": "array" }, "regressions": { "description": "Rules that appear or worsen in the revised build versus the baseline", "items": { "additionalProperties": false, "properties": { "baselineCount": { "description": "Occurrences in the first (baseline) build", "type": "number" }, "description": { "description": "Representative message text for the rule", "type": "string" }, "revisedCount": { "description": "Occurrences in the second (revised) build", "type": "number" }, "ruleId": { "description": "EPUBCheck message id that differs between builds", "type": "string" }, "severity": { "description": "Severity of the rule in the build where it appears", "type": "string" } }, "required": [ "ruleId", "severity", "description", "baselineCount", "revisedCount" ], "type": "object" }, "type": "array" }, "ruleProfileDate": { "description": "Release date of the pinned EPUBCheck rule profile", "type": "string" }, "truncated": { "description": "True when either build's findings were truncated, which can make the difference table incomplete", "type": "boolean" } }, "required": [ "engineVersion", "ruleProfileDate", "documents", "regressions", "fixed", "ranking", "limits", "humanReviewRequired", "humanReviewItems", "nonclaims", "truncated", "processingMs", "comparedAt" ], "type": "object" } } ] }
Verify it yourselfcurl -s https://api.teppi.xyz/v1/evidence/sha256:92310b8a338bd922d309f1f30734cec05e51898de628331fede2e2434c990308 | sha256sum