eBook Doctor

App privacy policy

This is the complete privacy policy for eBook Doctor, the app for ChatGPT operated by Global Scholar Press (a trading name of Nobtrex LLC, United States) at https://globalscholarpress.com/mcp. It states every category of data the app receives, what each tool sends back to ChatGPT, why we process it, who else sees it, how long we keep it, and how you delete it.

Contact: gsp@walzone.com · Support · Terms · Privacy policy of the website and the book-writing service

What we receive
The EPUB (and any cover or replacement file) you attach in ChatGPT, and the arguments of the tool calls ChatGPT makes on your behalf.
What we send back
Only the results of the tool you called, made of the fields listed one by one in section 4. Our server removes anything else before a result leaves it.
Why
Only to carry out the operation you asked for, to keep the service working and secure, and to count usage in aggregate.
Who else sees it
OpenAI, because ChatGPT is the channel; IONOS, our hosting provider; Google Fonts serves a web font to your browser if you open your book page. No one else.
How long
Your book and everything produced from it are erased 24 hours after the last activity — or immediately, when you ask.
Your controls
“Close the book” in chat, or Erase my book from this server on your book page.
Never
No account, no sign-in, no payment. We never train AI models on your book, never advertise to you from the app, never profile you and never sell or share your data.

1. What the app is

eBook Doctor is a set of 52 tools that ChatGPT calls on our server to inspect, repair, validate, convert and prepare EPUB files, and to help you review the writing chapter by chapter. Our server runs no AI model of its own: it executes exactly the operations ChatGPT requests, using deterministic programs (our EPUB engine, the official EPUBCheck validator and Calibre for format conversion). It is free and needs no account.

This policy covers the app endpoint /mcp, the download endpoint /dl/… and the book pages /book/…. The rest of globalscholarpress.com — the marketing site, the free online EPUB editor and the paid book-writing service — is covered by the website privacy policy.

2. Categories of data we collect

2.1 The files you attach

The EPUB you attach in ChatGPT, and any cover image or replacement file you ask ChatGPT to put into the book. ChatGPT passes our server a temporary download link and we fetch the file from it; files up to 80 MB are accepted. Two fallbacks exist for the same purpose: you can give a public URL (our server then makes an ordinary web request to that address, so the site hosting it sees our server’s request, not your device) or small files can be passed inline as base64. Your original upload is stored untouched and is never modified.

2.2 The arguments of the tool calls

ChatGPT sends the arguments each tool needs. Across the whole app these are:

Nothing else is requested. The tools ask for no profile data, no “just in case” fields and no conversation context beyond the arguments of the call.

2.3 Identifiers we create

When a book is opened we generate a random 32-character workspace identifier, and when files are delivered a random book-page token. They are not derived from you or your device, they identify one book, and they exist only as long as the workspace does.

2.4 Technical request data

Our web server and application record, for each request, the time, the endpoint or tool name, the HTTP status, the size of the response, the browser identification string and the network address the request came from. Tool calls arrive from OpenAI’s servers, so for the app that address is OpenAI’s infrastructure, not your device. If ChatGPT sends an MCP session header we log only its first 12 characters; at the time of writing ChatGPT sends none. Opening your book page in your own browser is an ordinary web request, so that one does carry your address.

2.5 What we never receive

We do not receive your OpenAI account, your name, e-mail address or phone number, your chat history, or anything you type in ChatGPT that is not an argument of a tool call. We create no account, set no cookie and store no identifier in your browser from the app. We ask for no location, no payment details, no government identifiers, no credentials and no health data. Please do not place such data in a tool call; if you do, it is deleted with the workspace.

3. What the tools send back to ChatGPT

Every tool result goes to ChatGPT, which shows or summarises it for you; OpenAI then processes it under its own privacy policy. Results are limited to what answers the call. A result can contain:

The complete field-by-field list of what a result can contain is in section 4. It is enforced by our server: every result is checked against that list and any field not on it is removed before it is sent.

Results never contain: our server’s file paths or directory names, program or converter logs, process exit codes, stack traces, the network address the call came from, internal diagnostic, debug or telemetry fields (such as byte offsets, internal issue ids or editor status flags), or anything belonging to another person’s book. If you want ChatGPT to see less of your book, ask it to read only the files or chapters you name.

4. Tool-by-tool data map

All 52 tools, grouped by what they do. “Receives” lists the arguments in addition to the workspace identifier.

ToolsReceivesReturns to ChatGPT
open_book, get_book_summary, get_book_page, close_book Your attached EPUB (or a URL / base64 of it) and its file name. The workspace identifier, file name, size, EPUB version, the book’s metadata, counts of files and chapters, the issue list, the book-page link — and, for close_book, confirmation that everything was deleted.
list_resources, read_resource, get_resource_info, find_text, get_package, get_manifest, get_spine, get_navigation, list_checkpoints, diff_book, diff_checkpoint, diff_resource File paths, resource kinds, line ranges, search terms or regular expressions, checkpoint ids. The requested part of your book: file lists and sizes, file text, image dimensions, search hits with context, the package, manifest, reading order and table of contents, checkpoint lists and differences between versions.
apply_patch, replace_text, replace_resource, create_resource, delete_resource, rename_resource A file path, the exact old text and the new text, or a whole replacement file (attached, URL or base64), or the new path. Whether the edit applied, what changed, and whether the file still parses.
update_manifest_properties, update_spine, update_navigation, rebuild_navigation, normalize_doctypes, fix_xml_entities, remove_missing_resources, ensure_identifier, repack_book The reading order, a table-of-contents label and target, or an identifier value; most take nothing else. What was changed and the resulting structure — reading order, table-of-contents entries, identifier, packaging state.
run_epubcheck, validate_resource, validate_css, kdp_check A file path or a severity filter. Validation messages with code, severity, file, line and column; the EPUBCheck version; our plain-language diagnosis; before/after error counts with the time of each check; the KDP readiness checklist.
create_checkpoint, restore_checkpoint A label, or the checkpoint id to roll back to. The checkpoint id, label, kind and creation time, and the issue counts after a rollback.
list_chapters, get_chapter, update_chapter, mark_chapter_reviewed A chapter number or path, how many words per part, the paragraph-addressed edits, and your review status, note and issue count. The chapter list with titles, kinds, word and paragraph counts and review status; the chapter’s text as numbered paragraphs (or its raw markup); the result of each edit; the review note you stored and when you stored it.
update_metadata, write_metadata_into_epub Title, author, language, publisher, description, rights, subjects, date, identifier. Which fields were written into the book file, and the metadata as it now stands.
suggest_metadata, bisac_lookup, save_metadata, get_metadata A category search term, and the listing metadata to save: title, subtitle, series, authors, publisher, language, description, 7 keywords, 3 BISAC codes, prices, page count, trim size, ISBNs, target audience, copyright statement, AI-disclosure answer. Your book’s existing metadata, its headings and a sample of its text, and the store’s limits, so that ChatGPT — not our server — writes the listing; matching BISAC codes; the validation result and the list of files saved next to your book.
cover_spec, set_cover The cover image you or ChatGPT produced (attached, URL or base64) and where to put it. The current cover status, the store’s cover requirements, an image-prompt skeleton containing your title and author, and the dimensions and any warnings for the installed cover.
export_book, convert_book The output format, and whether to include the readiness reports. The validation result that had to pass first, the produced file’s name and size, the book-page link and how long it lasts. The converter’s own log is not returned.
paperback_cover_geometry Trim size, page count and paper type. It touches no book and no workspace. Spine width and full cover dimensions in inches and pixels.

Every field a tool result can contain (337)

This is the complete list. Before a result leaves our server, every field that is not on it is removed, so a result can hold only these fields, nested exactly as named (a.b is field b inside a; a[] is each item of list a; a.* is a count keyed by severity or kind). There are no hidden, debug or diagnostic fields. Most fields appear only in the results of the tools that need them.

Workspace and the uploaded file

FieldContains
book_idthe random workspace identifier of the open book
new_book_idthe workspace identifier of a converted copy
filenamethe file name you uploaded, or the name of the produced file
size_bytesfile size in bytes
epub_versionEPUB version declared by the book (2.0 / 3.0)
closedtrue when the workspace and all its files were deleted
edits_appliedhow many edits were made in this workspace
manifest_countnumber of files listed in the book's package
spine_countnumber of documents in the reading order

Book metadata read from your file

FieldContains
metadata.titletitle
metadata.subtitlesubtitle
metadata.authorauthor name(s) as written in the book
metadata.authors[]author names in a saved listing
metadata.publisherpublisher
metadata.languagelanguage code
metadata.identifierthe book's identifier (ISBN, UUID or URL)
metadata.isbnISBN in a saved listing
metadata.datepublication date
metadata.rightsrights statement
metadata.subjectsubjects / categories
metadata.descriptiondescription or blurb
metadata.seriesseries name
metadata[].indexposition of a package metadata entry
metadata[].kindentry type (Dublin Core element or meta)
metadata[].nameelement name (title, creator, identifier …)
metadata[].valuethe entry's value as written in the book
metadata[].idthe entry's XML id
metadata[].refineswhich entry it refines
metadata[].propertymeta property name
metadata[].schemeidentifier scheme
metadata[].rolecontributor role
metadata[].file_assort form of a name
metadata[].languagelanguage of the entry
fields_written[]which metadata fields were written into the book
identifierthe identifier now set in the book
unique_identifierthe id of the package's unique identifier

Saved store-listing package (save_metadata / get_metadata)

FieldContains
savedwhether a listing package exists for the book
files[]names of the files in the listing package
bisac[].codeBISAC category code you chose
bisac[].nameits official name
problems[]listing values that break a store rule
metadata.generated_atwhen the package was saved
metadata.generated_bythe constant text “eBook Doctor (Global Scholar Press)”
metadata.ai_disclosureyour answer to the store's AI-disclosure question
metadata.listing.bisac_categories[].codeBISAC codes
metadata.listing.bisac_categories[].nameBISAC names
metadata.listing.keywords[]the 7 store keywords
metadata.listing.copyrightcopyright statement
metadata.listing.description_charslength of the description
metadata.listing.description_filefile holding the description
metadata.listing.keywords_filefile holding the keywords
metadata.listing.explicit_contentexplicit-content answer
metadata.listing.publication_datepublication date
metadata.listing.target_audiencetarget audience
metadata.ebook.epub_filee-book file name
metadata.ebook.cover_filee-book cover file name
metadata.ebook.price_usde-book list price
metadata.paperback.interior_filepaperback interior file name
metadata.paperback.cover_filepaperback cover file name
metadata.paperback.isbnpaperback ISBN
metadata.paperback.pagespage count
metadata.paperback.trim_sizetrim size
metadata.paperback.paperpaper type
metadata.paperback.inkink type
metadata.paperback.price_usdpaperback list price

Facts handed to ChatGPT to draft a listing (suggest_metadata)

FieldContains
facts.title[]title(s) found in the book
facts.creator[]author(s) found in the book
facts.language[]language(s)
facts.description[]existing description
facts.subjects[]existing subjects
headings[]chapter headings
sample_text[]a few opening paragraphs of the book
constraints.*the store's limits for each listing field (fixed text)
bisac_hinthow to look up categories (fixed text)
results[].codematching BISAC code
results[].nameits official name
total_codessize of the official BISAC list

Files and content of your book

FieldContains
resources[].pathpath of a file inside the book
resources[].extfile extension
resources[].kindfile kind (reading order, image, style …)
resources[].sizefile size
resources[].in_spinewhether it is in the reading order
resources[].spine_indexits position in the reading order
pathpath of the file a tool acted on
sizeits size
is_textwhether it is a text file
widthimage width in pixels
heightimage height in pixels
textlines of a text file you asked to read
start_linefirst line returned
end_linelast line returned
total_linesnumber of lines in the file
hits[].pathfile of a search hit
hits[].lineline of a search hit
hits[].matchthe matched text
hits[].contexttext around the match
opfpath of the package file
opf_sourcetext of the package file (only when asked)
opf_source_lengthits length
versionEPUB version in the package
manifest.hrefa file's address in the package
manifest.idits manifest id
manifest.media_typeits media type
manifest.propertiesits manifest properties
manifest.tagits manifest entry as written in the package
manifest[].hrefpackage entry: file address
manifest[].idpackage entry: id
manifest[].media_typepackage entry: media type
manifest[].propertiespackage entry: properties
manifest[].tagpackage entry as written in the package
spine[]reading-order ids
spine[].idrefreading-order id
spine[].hrefreading-order file address
spine[].pathreading-order file path
nav.has_nav_docwhether an EPUB 3 table of contents exists
nav.has_ncxwhether an EPUB 2 table of contents exists
nav.ncx_toc_entriesnumber of EPUB 2 table-of-contents entries
entries[].labeltable-of-contents label
entries[].targetwhere it points
entries[].fullfile it points to
entries[].levelnesting level
entries[].sourcewhich table of contents it comes from
kdp_tocwhether the table of contents suits Kindle (PASS / REVISE / BLOCK)

Chapters and writing review

FieldContains
chapters[].indexchapter number
chapters[].titlechapter title
chapters[].kindchapter / front matter / table of contents …
chapters[].pathchapter file
chapters[].wordsword count
chapters[].paragraphsparagraph count
chapters[].reviewreview you recorded for the chapter
chapters[].review.statusreview status
chapters[].review.notesreview note
chapters[].review.issuesissue count
chapters[].review.atwhen the review was recorded
kinds.*how many chapters of each kind
total_wordswords in the whole book
reviewedchapters reviewed so far
reviewed_totalchapters reviewed so far
indexchapter number
titlechapter title
kindchapter kind
wordschapter word count
partwhich part of a long chapter
total_partsnumber of parts
paragraph_countparagraphs in the chapter
paragraphs[].nparagraph number
paragraphs[].tagparagraph element (p, h1 …)
paragraphs[].textparagraph text
xhtmlthe chapter's markup (only when asked)
reviewthe review stored for this chapter
review.statusreview status
review.notesreview note
review.issuesissue count
review.atwhen the review was recorded
report[].paragraphparagraph an edit targeted
report[].appliedwhether it applied
report[].modehow it was applied
report[].reasonwhy it did not apply

Edits and their effect

FieldContains
changedwhether anything changed
appliednumber of edits applied
applied[]what each edit did, in words
verification.parse[].patha file the edit touched
verification.parse[].well_formedwhether that file still parses
verification.parse[].errorthe parse error, if it does not
verification.issue_counts.*structural issue counts after the edit
steps[].steprepair step name
steps[].changedwhether the step changed anything
steps[].applied[]what the step did
steps[].messagestep summary
steps[].next_stepwhat ChatGPT should do next
steps[].verification.issue_counts.*issue counts after the step
steps[].verification.parse[].patha file the step touched
steps[].verification.parse[].well_formedwhether it still parses
steps[].verification.parse[].errorthe parse error, if it does not
documents_changednumber of documents changed
fixed[].pathfile in which characters were escaped
fixed[].counthow many
removed[]files removed since a checkpoint
removed[].idmanifest id of an entry removed because its file was missing
removed[].hrefaddress of that missing file
added[]files added since a checkpoint
modified[]files modified since a checkpoint
repackedwhether the container was rewritten
first_entryfirst file in the container
storedwhether that file is uncompressed (required)
notea remark about the operation

Checkpoints and differences

FieldContains
checkpoint.idcheckpoint id
checkpoint.labelcheckpoint label
checkpoint.kindoriginal / automatic / manual
checkpoint.created_atcreation time
checkpoints[].idcheckpoint id
checkpoints[].labelcheckpoint label
checkpoints[].kindcheckpoint kind
checkpoints[].created_atcreation time
checkpoint_idcheckpoint compared against
restoredcheckpoint rolled back to
diffline-by-line difference of a file
truncatedwhether a long answer was cut short
files[].pathchanged file
files[].statusadded / removed / modified
files[].textwhether it is a text file
files[].old_sizesize before
files[].new_sizesize after
files[].diffdifference of that file
files[].diff_truncatedwhether that difference was cut short
summary.addedfiles added
summary.modifiedfiles modified
summary.removedfiles removed
summary.totalfiles changed
ledger[].idchange id
ledger[].typechange type
ledger[].summarywhat the change did
ledger[].files[]files it touched
ledger[].checkpointcheckpoint taken before it
ledger[].created_atwhen it was made

Validation

FieldContains
validwhether the book or file is valid
fatalEPUBCheck fatal count
errorsEPUBCheck error count
warningsEPUBCheck warning count
warnings[]warnings about an installed cover
counts.*message counts per severity
epubcheck_versionEPUBCheck version used
messages[].codeEPUBCheck message code
messages[].severityseverity
messages[].messagethe validator's message
messages[].resourcefile it refers to
messages[].lineline
messages[].columncolumn
messages[].suggestionthe validator's suggestion
epubcheck_messages[].coderemaining blocking message code
epubcheck_messages[].severityits severity
epubcheck_messages[].messageits text
epubcheck_messages[].resourceits file
epubcheck_messages[].lineits line
epubcheck_messages[].columnits column
epubcheck_messages[].suggestionits suggestion
history[].attime of an earlier check in this workspace
history[].fatalits fatal count
history[].errorsits error count
history[].warningsits warning count
diagnosis.headlineone-sentence verdict
diagnosis.blocking_countblocking problems
diagnosis.defects[].codedefect code
diagnosis.defects[].severityseverity
diagnosis.defects[].countoccurrences
diagnosis.defects[].where[]file:line of each
diagnosis.defects[].what_is_wrongplain-language explanation (fixed text)
diagnosis.defects[].what_it_breaksconsequence (fixed text)
diagnosis.defects[].fix_withwhich tools repair it (fixed text)
diagnosis.defects[].epubcheck_saysthe validator's message
diagnosis.truncatedwhether the list was cut short
diagnosis.next_stepwhat ChatGPT should do next
issue_counts.*structural issue counts per severity
issues[].severityseverity of a structural issue
issues[].messagewhat is wrong
issues[].locationfile it concerns
well_formedwhether a file parses
parse.well_formedwhether a file parses
parse.errorthe parse error
has_doctypewhether a DOCTYPE is present
has_titlewhether a title element is present
has_xhtml_nswhether the XHTML namespace is declared
images_without_altimages missing alternative text
okwhether the check passed
cleanwhether a style sheet has no problems
checked_bytessize of the style sheet checked
error_countstyle-sheet errors
warn_countstyle-sheet warnings
info_countstyle-sheet notes
countnumber of items returned

Amazon KDP readiness and cover

FieldContains
readywhether the book passes the checklist
fail_countfailed checks
checks[].checkcheck name
checks[].statuspass / warn / fail
checks[].detailthe measured value and the rule
epubcheck.validvalidation result
epubcheck.fatalfatal count
epubcheck.errorserror count
epubcheck.warningswarning count
epubcheck_before.fatalfatal count when the book was opened
epubcheck_before.errorserror count when the book was opened
epubcheck_before.warningswarning count when the book was opened
kdp_rules.*KDP's published limits (fixed numbers)
kdp_rules.cover_min_px[]minimum cover size
kdp_rules.ebook_70pct_royalty_price_usd[]70 % royalty price band
cover.presentwhether a cover is marked
cover.idits manifest id
cover.hrefits address
cover.pathits path
cover.nameits file name
cover.media_typeits media type
cover.sizeits size
cover.issues[]cover problems
cover.images[]images in the book
cover.images[].idimage id
cover.images[].hrefimage address
cover.images[].pathimage path
cover.images[].nameimage file name
cover.images[].is_coverwhether it is the cover
current_cover.presentwhether a cover is marked
current_cover.idits id
current_cover.issues[]cover problems
current_cover.images[]images in the book
requirements.*the store's cover requirements (fixed text)
requirements.min_px[]minimum cover size
prompt_skeletonan image-prompt outline containing your title and author
trim_in[]trim size in inches
page_countpage count
paperpaper type
spine_inspine width
bleed_inbleed
spine_text_allowedwhether spine text fits
full_cover_in[]full cover size in inches
full_cover_px_at_300dpi[]full cover size in pixels
layoutcover layout (fixed text)
safe_zone_notesafe-zone rule (fixed text)

Delivery and conversion

FieldContains
book_page_urlthe link to your book page
expires_in_hourshours the files remain
verifiedwhether the exported EPUB re-opened and parsed
verify_checks[].checkpost-export check
verify_checks[].okits result
reports[]names of readiness reports on the book page
targetconversion format
new_book_summary.epub_versionEPUB version of a converted copy
new_book_summary.issue_counts.*its issue counts
new_book_summary.kdp_tocits table-of-contents verdict
files[].namefile on the book page
files[].kindits kind
files[].sizeits size
files[].noteits description

Instructions and links

FieldContains
messagea short summary of what the tool did
next_stepwhat ChatGPT should do next (fixed text)
report_to_userhow ChatGPT should report the result (fixed text)
errorwhy a call failed
links.free_epub_editorthe GSP editor link for this workspace (utm_source=chatgpt)
links.sitethe GSP home page (utm_source=chatgpt)
links.book_writing_servicethe GSP book-writing service page (utm_source=chatgpt)

5. Why we process this, and on what basis

We never use your book or its content to train AI models, never sell or rent data, never use app data for advertising or profiling, and never make automated decisions about you. The app displays no advertising.

6. Who else sees the data

7. Where the data lives, and for how long

Each book gets its own private workspace on our server, readable only by our application, addressed only by its random identifier; workspaces are never listed and cannot be browsed. Everything produced for a book — the repaired EPUB, converted formats, the metadata package and the reports — is delivered from one book page, globalscholarpress.com/book/<random token>, which is marked noindex and carries no advertising code. Anyone who has that link can download those files, so treat the link like the files themselves.

WhatKept for
Your uploaded file, the working copy, checkpoints, exports, conversions, the metadata package, the reports and the book page24 hours after the last activity on that book, then deleted automatically. A purge runs every hour, and also whenever a book is opened.
Web-server request logs (time, endpoint, status, size, browser string, network address)Rotated daily, deleted after 14 days.
Application log (time, tool name, first 12 characters of a session header if one is sent)90 days at most.
Daily usage counts and visit statisticsCounts are kept indefinitely; the per-day list of visiting addresses behind them is erased after 90 days.

8. Your choices and rights

9. Security

All connections use HTTPS. Workspaces are stored with owner-only permissions, are isolated by unguessable identifiers, are never listed, and no login exists that could expose them. Our staff open a workspace only to investigate a problem you report to us.

10. Changes to this policy

When this policy changes we update the date below, and material changes are announced on the support page. The version of this policy in force is the one published here.

Published 22 September 2026; updated 9 October 2026 (complete field-by-field list of tool results, enforced by the server). Operator: Nobtrex LLC (Global Scholar Press), United States · gsp@walzone.com