MCP tool reference
Every tool exposed by the Anthra MCP server, grouped by the scope it requires. The schemas are JSON Schema, exactly as the MCP client sees them on tools/list.
books:read
list_booksList every book in this account (newest first). Returns id, title, status, visibility, slug.
Input schema
{ "type": "object", "properties": {} }get_bookFetch a single book with its full chapter list (titles, summaries, content, word counts, audio URLs).
Input schema
{ "type": "object", "properties": { "bookId": { "type": "string", "description": "Book UUID." } }, "required": [ "bookId" ] }get_chapterFetch a single chapter (full prose content included).
Input schema
{ "type": "object", "properties": { "bookId": { "type": "string" }, "chapterId": { "type": "string" } }, "required": [ "bookId", "chapterId" ] }get_planRead the book's planning surface — theme statement, reader promise, comp authors, selected beat sheet, POV/tense locks, auto-detected genre + audience confidences, and era-research citations.
Input schema
{ "type": "object", "properties": { "bookId": { "type": "string" } }, "required": [ "bookId" ] }list_beat_sheetsList every beat-sheet template (Save the Cat, Three-Act, Hero's Journey, Freytag, Kishotenketsu, Tell/Promise/Mean) with each beat's label, intent, and position.
Input schema
{ "type": "object", "properties": {} }list_charactersList the book's characters with the Truby-style want/fear/lie axes, POV flag, voice profile, and aliases.
Input schema
{ "type": "object", "properties": { "bookId": { "type": "string" } }, "required": [ "bookId" ] }list_character_conflictsList the inter-character conflict matrix. Each row is 'from <kind> to' — e.g. 'Marin blocks Alex'.
Input schema
{ "type": "object", "properties": { "bookId": { "type": "string" } }, "required": [ "bookId" ] }list_premise_pitchesList the most recent round of premise pitches.
Input schema
{ "type": "object", "properties": { "bookId": { "type": "string" } }, "required": [ "bookId" ] }list_outline_variantsList the most recent round of outline variants (#14).
Input schema
{ "type": "object", "properties": { "bookId": { "type": "string" } }, "required": [ "bookId" ] }list_outline_snapshotsList every captured outline mutation (#22) — pair with restore_outline_snapshot.
Input schema
{ "type": "object", "properties": { "bookId": { "type": "string" } }, "required": [ "bookId" ] }list_mood_referencesList tone / mood reference photos (#12) for this book.
Input schema
{ "type": "object", "properties": { "bookId": { "type": "string" } }, "required": [ "bookId" ] }list_book_documentsList writer's-bible documents (characters, plot_outline, theme_outline, style_guide, style_references, worldbuilding, research_notes, glossary, synopsis, lore, setting_bible, era_research).
Input schema
{ "type": "object", "properties": { "bookId": { "type": "string" } }, "required": [ "bookId" ] }read_book_documentRead the full content of one writer's-bible document.
Input schema
{ "type": "object", "properties": { "bookId": { "type": "string" }, "kind": { "type": "string", "enum": [ "characters", "plot_outline", "theme_outline", "style_guide", "style_references", "worldbuilding", "research_notes", "glossary", "synopsis", "lore", "setting_bible", "era_research" ] } }, "required": [ "bookId", "kind" ] }list_book_document_revisionsList saved snapshots of one writer's-bible document (newest first).
Input schema
{ "type": "object", "properties": { "bookId": { "type": "string" }, "kind": { "type": "string", "enum": [ "characters", "plot_outline", "theme_outline", "style_guide", "style_references", "worldbuilding", "research_notes", "glossary", "synopsis", "lore", "setting_bible", "era_research" ] } }, "required": [ "bookId", "kind" ] }lint_proseStatic prose linter across one or all chapters — zero LLM cost. Flags adverbs, passive voice, cliches, AI fingerprints, forbidden-word hits, etc. Returns per-chapter severity (green/yellow/red).
Input schema
{ "type": "object", "properties": { "bookId": { "type": "string" }, "chapterId": { "type": "string" } }, "required": [ "bookId" ] }find_repetitionDetect overused phrases within a chapter, or repeated sentence openers across the book.
Input schema
{ "type": "object", "properties": { "bookId": { "type": "string" }, "chapterId": { "type": "string" }, "scope": { "type": "string", "enum": [ "chapter", "openers" ] } }, "required": [ "bookId" ] }spoken_readabilityScore narration difficulty per chapter (consonant clusters, sibilants, breath length, proper nouns).
Input schema
{ "type": "object", "properties": { "bookId": { "type": "string" }, "chapterId": { "type": "string" } }, "required": [ "bookId" ] }style_driftMeasure each written chapter's voice fingerprint against the book-wide average. High drift = a chapter is out of voice.
Input schema
{ "type": "object", "properties": { "bookId": { "type": "string" } }, "required": [ "bookId" ] }list_forbidden_wordsRead the per-book forbidden-word list.
Input schema
{ "type": "object", "properties": { "bookId": { "type": "string" } }, "required": [ "bookId" ] }list_chapter_revisionsList saved snapshots of a chapter (newest first).
Input schema
{ "type": "object", "properties": { "bookId": { "type": "string" }, "chapterId": { "type": "string" } }, "required": [ "bookId", "chapterId" ] }list_collaboratorsList collaborators on a book.
Input schema
{ "type": "object", "properties": { "bookId": { "type": "string" } }, "required": [ "bookId" ] }list_voicesList the available ElevenLabs narration voices (id, name, accent, gender, age, preview URL). Use the voice id when configuring narration. Requires ELEVENLABS_API_KEY on the server.
Input schema
{ "type": "object", "properties": {} }list_chaptersList every chapter on a book (id, order, title, summary, word count, audio status, image URL). Dedicated chapter list — pair with `get_chapter` to fetch full prose.
Input schema
{ "type": "object", "properties": { "bookId": { "type": "string" } }, "required": [ "bookId" ] }export_book_markdownExport a fully written book as a single Markdown file, uploaded to Vercel Blob; returns a public download URL.
Input schema
{ "type": "object", "properties": { "bookId": { "type": "string" } }, "required": [ "bookId" ] }list_print_productsList every Lulu print-on-demand product available on this instance (key, label, trim, cover finish, page-count bounds). Use the key with `get_print_estimate`.
Input schema
{ "type": "object", "properties": {} }
books:write
create_bookCreate a draft book from a one-line premise. Returns the book id, which subsequent generation tools accept. After creating, call `generate_outline`.
Input schema
{ "type": "object", "properties": { "premise": { "type": "string", "minLength": 10, "description": "One-paragraph book idea (10–4000 chars)." }, "title": { "type": "string", "maxLength": 200 }, "genre": { "type": "string", "maxLength": 120 }, "modelTier": { "type": "string", "enum": [ "haiku", "sonnet", "opus" ], "description": "Writer model tier: haiku=fast draft, sonnet=default, opus=editorial." } }, "required": [ "premise" ] }update_bookPatch a book's metadata (title, subtitle, description, author, cover color, genre, tone). Does not touch chapters.
Input schema
{ "type": "object", "properties": { "bookId": { "type": "string" }, "title": { "type": "string" }, "subtitle": { "type": "string" }, "author": { "type": "string" }, "description": { "type": "string" }, "coverColor": { "type": "string", "pattern": "^#[0-9a-fA-F]{6}$" }, "genre": { "type": "string" }, "audience": { "type": "string" }, "toneStyle": { "type": "string" } }, "required": [ "bookId" ] }delete_bookSoft-delete a book. Recoverable within 30 days, after which the cron worker hard-deletes it.
Input schema
{ "type": "object", "properties": { "bookId": { "type": "string" } }, "required": [ "bookId" ] }set_planWrite the planning surface fields. Any omitted field is left alone; pass null to clear. Fields: themeStatement, readerPromise, compAuthors, beatSheetTemplate (id like 'save-the-cat'), povLock, tenseLock ('past'|'present'), povDepth (0-100).
Input schema
{ "type": "object", "properties": { "bookId": { "type": "string" }, "themeStatement": { "type": [ "string", "null" ] }, "readerPromise": { "type": [ "string", "null" ] }, "compAuthors": { "type": [ "string", "null" ] }, "beatSheetTemplate": { "type": [ "string", "null" ] }, "povLock": { "type": [ "string", "null" ] }, "tenseLock": { "type": [ "string", "null" ], "enum": [ "past", "present", null ] }, "povDepth": { "type": [ "integer", "null" ], "minimum": 0, "maximum": 100 } }, "required": [ "bookId" ] }create_characterCreate a character row with name + optional want/fear/lie planning axes, voice profile, bio, role, aliases, and POV flag.
Input schema
{ "type": "object", "properties": { "bookId": { "type": "string" }, "name": { "type": "string" }, "aliases": { "type": "array", "items": { "type": "string" } }, "role": { "type": [ "string", "null" ] }, "bio": { "type": [ "string", "null" ] }, "voiceProfile": { "type": [ "string", "null" ] }, "want": { "type": [ "string", "null" ] }, "fear": { "type": [ "string", "null" ] }, "lie": { "type": [ "string", "null" ] }, "isPov": { "type": "boolean" } }, "required": [ "bookId", "name" ] }update_characterPatch a character. Pass any subset of fields. Set want/fear/lie to null to clear those axes.
Input schema
{ "type": "object", "properties": { "bookId": { "type": "string" }, "characterId": { "type": "string" }, "name": { "type": "string" }, "aliases": { "type": "array", "items": { "type": "string" } }, "role": { "type": [ "string", "null" ] }, "bio": { "type": [ "string", "null" ] }, "voiceProfile": { "type": [ "string", "null" ] }, "want": { "type": [ "string", "null" ] }, "fear": { "type": [ "string", "null" ] }, "lie": { "type": [ "string", "null" ] }, "isPov": { "type": "boolean" } }, "required": [ "bookId", "characterId" ] }delete_characterRemove a character row. Conflict edges cascade.
Input schema
{ "type": "object", "properties": { "bookId": { "type": "string" }, "characterId": { "type": "string" } }, "required": [ "bookId", "characterId" ] }add_character_conflictAdd a conflict edge. Kind: blocks, rivals, loves, fears, manipulates, protects, betrays, other.
Input schema
{ "type": "object", "properties": { "bookId": { "type": "string" }, "fromCharacterId": { "type": "string" }, "toCharacterId": { "type": "string" }, "kind": { "type": "string", "enum": [ "blocks", "rivals", "loves", "fears", "manipulates", "protects", "betrays", "other" ] }, "description": { "type": [ "string", "null" ] } }, "required": [ "bookId", "fromCharacterId", "toCharacterId", "kind" ] }remove_character_conflictRemove one conflict edge.
Input schema
{ "type": "object", "properties": { "bookId": { "type": "string" }, "conflictId": { "type": "string" } }, "required": [ "bookId", "conflictId" ] }select_premise_pitchLock one premise pitch (writes book.premise).
Input schema
{ "type": "object", "properties": { "bookId": { "type": "string" }, "angle": { "type": "string", "enum": [ "A", "B", "C" ] } }, "required": [ "bookId", "angle" ] }apply_outline_variantApply one outline variant to the chapter table (snapshots first, skips locked chapters).
Input schema
{ "type": "object", "properties": { "bookId": { "type": "string" }, "variantId": { "type": "string" } }, "required": [ "bookId", "variantId" ] }restore_outline_snapshotRevert the outline to a saved snapshot in place.
Input schema
{ "type": "object", "properties": { "bookId": { "type": "string" }, "snapshotId": { "type": "string" } }, "required": [ "bookId", "snapshotId" ] }write_book_documentCreate or overwrite one writer's-bible document. The current revision is snapshotted first so the change is recoverable.
Input schema
{ "type": "object", "properties": { "bookId": { "type": "string" }, "kind": { "type": "string", "enum": [ "characters", "plot_outline", "theme_outline", "style_guide", "style_references", "worldbuilding", "research_notes", "glossary", "synopsis", "lore", "setting_bible", "era_research" ] }, "title": { "type": "string" }, "content": { "type": "string" } }, "required": [ "bookId", "kind", "content" ] }restore_book_document_revisionRoll a writer's-bible document back to a saved snapshot. The current content is snapshotted first so the restore is itself undoable.
Input schema
{ "type": "object", "properties": { "revisionId": { "type": "string" } }, "required": [ "revisionId" ] }set_forbidden_wordsSet or clear the per-book forbidden-word list. The linter flags hits and the writer prompt avoids them.
Input schema
{ "type": "object", "properties": { "bookId": { "type": "string" }, "words": { "type": "array", "items": { "type": "string" } } }, "required": [ "bookId", "words" ] }dismiss_sensitivity_flagMark one sensitivity flag as dismissed.
Input schema
{ "type": "object", "properties": { "flagId": { "type": "string" } }, "required": [ "flagId" ] }set_chapter_metaUpdate a chapter's title, summary, or target word count without touching the prose.
Input schema
{ "type": "object", "properties": { "bookId": { "type": "string" }, "chapterId": { "type": "string" }, "title": { "type": "string" }, "summary": { "type": [ "string", "null" ] }, "targetWords": { "type": [ "integer", "null" ], "minimum": 0 } }, "required": [ "bookId", "chapterId" ] }reorder_chaptersAtomically reorder chapters. orderedIds must list every chapter id in the new order.
Input schema
{ "type": "object", "properties": { "bookId": { "type": "string" }, "orderedIds": { "type": "array", "items": { "type": "string" } } }, "required": [ "bookId", "orderedIds" ] }restore_chapter_revisionRoll a chapter back to a saved snapshot. The current content is snapshotted first.
Input schema
{ "type": "object", "properties": { "revisionId": { "type": "string" } }, "required": [ "revisionId" ] }invite_collaboratorInvite a collaborator by email. Role: 'reader' (comments only) or 'editor' (edit access).
Input schema
{ "type": "object", "properties": { "bookId": { "type": "string" }, "email": { "type": "string" }, "role": { "type": "string", "enum": [ "reader", "editor" ] } }, "required": [ "bookId", "email", "role" ] }remove_collaboratorRemove a collaborator from a book.
Input schema
{ "type": "object", "properties": { "bookId": { "type": "string" }, "email": { "type": "string" } }, "required": [ "bookId", "email" ] }update_chapterOverwrite a chapter's prose (and optionally its title/summary/notes). Snapshots the prior content so the change is recoverable, resets audio status if the content changed.
Input schema
{ "type": "object", "properties": { "bookId": { "type": "string" }, "chapterId": { "type": "string" }, "title": { "type": "string", "maxLength": 300 }, "summary": { "type": [ "string", "null" ], "maxLength": 1000 }, "content": { "type": "string", "maxLength": 100000 }, "notes": { "type": [ "string", "null" ], "maxLength": 4000 } }, "required": [ "bookId", "chapterId" ] }split_chapterSplit a chapter into two. Inserts a new (empty) chapter immediately after the original; later chapters' order numbers shift up by 1.
Input schema
{ "type": "object", "properties": { "bookId": { "type": "string" }, "chapterId": { "type": "string" }, "newTitle": { "type": "string", "minLength": 1 }, "newSummary": { "type": [ "string", "null" ] } }, "required": [ "bookId", "chapterId", "newTitle" ] }merge_chaptersMerge two adjacent chapters into one. The second chapter is removed; its content is appended to the first with a blank line separator. Snapshots both halves first so it's reversible.
Input schema
{ "type": "object", "properties": { "bookId": { "type": "string" }, "firstChapterId": { "type": "string" }, "secondChapterId": { "type": "string" } }, "required": [ "bookId", "firstChapterId", "secondChapterId" ] }cancel_generationCancel the active book-generation workflow run for one book (the long-running outline-and-write pipeline). Idempotent — succeeds with ok:true even when no run is active. Reverts book status to `draft`.
Input schema
{ "type": "object", "properties": { "bookId": { "type": "string" } }, "required": [ "bookId" ] }
generation:run
generate_outlineRun the outliner: replaces any existing chapters with a fresh outline, sets title/subtitle/description/coverColor on the book, and advances status to `writing`. Synchronous — may take 10–60s.
Input schema
{ "type": "object", "properties": { "bookId": { "type": "string" }, "research": { "type": "boolean", "description": "Force-enable the Perplexity research pass before outlining. Defaults to the account-wide flag." } }, "required": [ "bookId" ] }write_chapterGenerate prose for one chapter and persist it. Returns the new content. Streaming is not exposed over MCP — this call resolves when the chapter is fully written and saved. Call chapters in `order` so the writer has continuity.
Input schema
{ "type": "object", "properties": { "bookId": { "type": "string" }, "chapterId": { "type": "string" } }, "required": [ "bookId", "chapterId" ] }rewrite_chapterApply a directive to revise one chapter (e.g., "punch up the dialogue", "shorten by 30%"). Snapshots the prior text so the change is recoverable, then overwrites the chapter and invalidates audio.
Input schema
{ "type": "object", "properties": { "bookId": { "type": "string" }, "chapterId": { "type": "string" }, "directive": { "type": "string", "minLength": 3, "description": "Editorial instructions for the rewrite." } }, "required": [ "bookId", "chapterId", "directive" ] }narrate_chapterSynthesize ElevenLabs narration for a chapter and upload the MP3 to Vercel Blob. Returns the audio URL. Requires ELEVENLABS_API_KEY + BLOB_READ_WRITE_TOKEN on the server.
Input schema
{ "type": "object", "properties": { "bookId": { "type": "string" }, "chapterId": { "type": "string" } }, "required": [ "bookId", "chapterId" ] }premise_interviewPremise-sharpening interview. action='read' returns saved state; 'generate' produces 3-5 questions; 'save' merges answers (q1, q2, …); 'apply' rewrites book.premise from answers.
Input schema
{ "type": "object", "properties": { "bookId": { "type": "string" }, "action": { "type": "string", "enum": [ "read", "generate", "save", "apply" ] }, "answers": { "type": "object" } }, "required": [ "bookId", "action" ] }generate_premise_pitchesThree competing premise pitches (A/B/C angles for the same idea). Use select_premise_pitch to lock one.
Input schema
{ "type": "object", "properties": { "bookId": { "type": "string" } }, "required": [ "bookId" ] }detect_genreAuto-detect genre + audience from the current premise. apply:true writes the result to the book.
Input schema
{ "type": "object", "properties": { "bookId": { "type": "string" }, "apply": { "type": "boolean" } }, "required": [ "bookId" ] }research_eraEra / period research with citation links. Writes a Markdown brief into the era_research writer's-bible document and saves the citations to book.researchCitations.
Input schema
{ "type": "object", "properties": { "bookId": { "type": "string" }, "eraHint": { "type": [ "string", "null" ] } }, "required": [ "bookId" ] }grade_outlineScore the current outline 0-100 across arc / pacing / stakes / characters / ending, with a paragraph-level critique and 2-8 fix suggestions. force:true regrades even if cached.
Input schema
{ "type": "object", "properties": { "bookId": { "type": "string" }, "force": { "type": "boolean" } }, "required": [ "bookId" ] }generate_outline_variantsThree competing outline variants (each with a one-line angle + a full chapter list). Costs three outline-LLM calls.
Input schema
{ "type": "object", "properties": { "bookId": { "type": "string" } }, "required": [ "bookId" ] }draft_book_documentAuto-draft one writer's-bible document from the premise + chapters. If a document already exists for that kind, pass confirm:true to overwrite it.
Input schema
{ "type": "object", "properties": { "bookId": { "type": "string" }, "kind": { "type": "string", "enum": [ "characters", "plot_outline", "theme_outline", "style_guide", "style_references", "worldbuilding", "research_notes", "glossary", "synopsis", "lore", "setting_bible", "era_research" ] }, "confirm": { "type": "boolean" }, "hint": { "type": [ "string", "null" ] } }, "required": [ "bookId", "kind" ] }critique_chapterLLM editorial pass on one written chapter — pacing, voice, continuity, line-level diagnostics. Read-only.
Input schema
{ "type": "object", "properties": { "bookId": { "type": "string" }, "chapterId": { "type": "string" } }, "required": [ "bookId", "chapterId" ] }check_continuityRun a continuity check across the whole book. Flags cross-chapter inconsistencies (names, dates, prop placement, motivation).
Input schema
{ "type": "object", "properties": { "bookId": { "type": "string" } }, "required": [ "bookId" ] }suggest_cliche_replacementsFind clichés in one chapter and propose specific replacements via the LLM.
Input schema
{ "type": "object", "properties": { "bookId": { "type": "string" }, "chapterId": { "type": "string" } }, "required": [ "bookId", "chapterId" ] }run_sensitivity_scanScan one or all written chapters for sensitive content (race, gender, religion, disability, violence, …) and persist flags.
Input schema
{ "type": "object", "properties": { "bookId": { "type": "string" }, "chapterId": { "type": "string" } }, "required": [ "bookId" ] }choose_cover_colorPick a tasteful cover background color (6-digit hex) for a book based on its mood, genre, and tone, and save it. Cheap LLM call.
Input schema
{ "type": "object", "properties": { "bookId": { "type": "string" }, "mood": { "type": "string", "description": "Optional mood hint (e.g. \"stormy\", \"warm and hopeful\")." } }, "required": [ "bookId" ] }generate_chapter_imageGenerate an illustration for one chapter via the AI Gateway image pipeline, store it in Vercel Blob, and set it as the chapter's lead image. PAID — charges one illustration credit; refunds on failure.
Input schema
{ "type": "object", "properties": { "bookId": { "type": "string" }, "chapterId": { "type": "string" }, "styleHint": { "type": "string", "description": "Art-direction hint (e.g. \"muted watercolor\")." }, "prompt": { "type": "string", "description": "Override the distilled prompt." } }, "required": [ "bookId", "chapterId" ] }generate_cover_artGenerate one or more cover-art variants via the AI Gateway image pipeline, store in Vercel Blob, and set the first as the book's active cover. PAID — charges per variant (1-3); refunds the unspent portion on partial failure.
Input schema
{ "type": "object", "properties": { "bookId": { "type": "string" }, "styleHint": { "type": "string", "description": "Art-direction (e.g. \"moody oil painting\")." }, "prompt": { "type": "string", "description": "Hand-crafted prompt override." }, "variants": { "type": "integer", "minimum": 1, "maximum": 3 } }, "required": [ "bookId" ] }generate_back_coverGenerate a back-cover panel via the AI Gateway image pipeline. Uses the marketing blurb when present, otherwise the premise. PAID — one illustration credit.
Input schema
{ "type": "object", "properties": { "bookId": { "type": "string" }, "prompt": { "type": "string" }, "styleHint": { "type": "string" } }, "required": [ "bookId" ] }generate_spineGenerate a spine panel via the AI Gateway image pipeline. Narrow aspect ratio sized for paperback spines. PAID — one illustration credit.
Input schema
{ "type": "object", "properties": { "bookId": { "type": "string" }, "prompt": { "type": "string" }, "styleHint": { "type": "string" } }, "required": [ "bookId" ] }compose_cover_spreadCompose the existing front cover, spine, and back cover into one print-ready wraparound spread (PNG). Uploads to Vercel Blob and records as a `cover_spread` image. Requires all three panels to exist already (run `generate_cover_art`, `generate_back_cover`, `generate_spine` first).
Input schema
{ "type": "object", "properties": { "bookId": { "type": "string" } }, "required": [ "bookId" ] }narrate_bookSynthesize narration for every written, un-narrated chapter on a book. Runs serially per chapter (long — minutes per chapter). PAID — ElevenLabs charges per chapter.
Input schema
{ "type": "object", "properties": { "bookId": { "type": "string" }, "overwriteExisting": { "type": "boolean", "description": "Re-narrate chapters that already have audio (default false)." } }, "required": [ "bookId" ] }translate_bookCreate a new book that is a translation of an existing one into the target language (BCP-47 like "fr", "es", "pt-BR"). Clones metadata, seeds chapter shells, then translates each written chapter. EXPENSIVE — N LLM calls. Returns the new bookId.
Input schema
{ "type": "object", "properties": { "bookId": { "type": "string" }, "targetLanguage": { "type": "string", "minLength": 2 }, "sourceLanguage": { "type": "string" }, "glossary": { "type": "string", "description": "Optional Markdown list of canonical translations for proper names / specialty terms." } }, "required": [ "bookId", "targetLanguage" ] }produce_bookRender a fully written book to EPUB / DOCX (synchronous — bytes returned via blob URL) or PDF (async — dispatches a workflow job, returns jobId; poll with `get_production_job_status`).
Input schema
{ "type": "object", "properties": { "bookId": { "type": "string" }, "format": { "type": "string", "enum": [ "epub", "docx", "pdf" ] } }, "required": [ "bookId", "format" ] }preview_voice_sampleSynthesize a short (~30s) ElevenLabs sample using the opening paragraph of chapter 1 so the caller can hear the voice before committing to whole-book narration. PAID but cheap.
Input schema
{ "type": "object", "properties": { "bookId": { "type": "string" } }, "required": [ "bookId" ] }export_audiobookConcatenate every ready-state chapter MP3 into a single M4B audiobook with embedded chapter markers, ambience, and intro/outro stings (if configured on the book). Requires every chapter to be narrated first. Uploads to Vercel Blob and returns the URL.
Input schema
{ "type": "object", "properties": { "bookId": { "type": "string" } }, "required": [ "bookId" ] }
publish:write
publish_bookPublish a book at /read/{slug}. Every chapter must have content. Returns the public reader URL.
Input schema
{ "type": "object", "properties": { "bookId": { "type": "string" }, "visibility": { "type": "string", "enum": [ "private", "unlisted", "public" ], "description": "Defaults to the book's current visibility." } }, "required": [ "bookId" ] }unpublish_bookRevert a published book to status `ready`. Reader page stops resolving.
Input schema
{ "type": "object", "properties": { "bookId": { "type": "string" } }, "required": [ "bookId" ] }
account:read
get_usageLifetime + 30-day rollups of LLM token usage across this account, grouped by call kind (outline, chapter, rewrite, …).
Input schema
{ "type": "object", "properties": {} }list_author_preferencesRead the author's saved preferences (POV, em-dash usage, voice prefs, etc.) — applied across every book.
Input schema
{ "type": "object", "properties": {} }set_author_preferenceSave a durable author preference (applied across every book).
Input schema
{ "type": "object", "properties": { "key": { "type": "string" }, "value": { "type": "string" } }, "required": [ "key", "value" ] }get_credit_balanceRead the account's current credit balance (number of generation credits remaining). One illustration is one credit; chapter writes and narration draw multiple credits depending on size.
Input schema
{ "type": "object", "properties": {} }
analytics:read
get_reader_analyticsPer-chapter reader stats for a published book (views, audio starts, completions, drop-off).
Input schema
{ "type": "object", "properties": { "bookId": { "type": "string" } }, "required": [ "bookId" ] }list_sensitivity_flagsList sensitivity flags for a book.
Input schema
{ "type": "object", "properties": { "bookId": { "type": "string" } }, "required": [ "bookId" ] }list_jobsList background jobs (outline / write / narrate / pdf). status: 'all' | 'active' | 'finished'.
Input schema
{ "type": "object", "properties": { "bookId": { "type": "string" }, "status": { "type": "string", "enum": [ "all", "active", "finished" ] }, "limit": { "type": "integer", "minimum": 1, "maximum": 50 } } }get_job_statusLook up one background job.
Input schema
{ "type": "object", "properties": { "jobId": { "type": "string" } }, "required": [ "jobId" ] }get_production_job_statusPoll a production (PDF/audiobook) job by id.
Input schema
{ "type": "object", "properties": { "jobId": { "type": "string" } }, "required": [ "jobId" ] }get_print_estimateGet a retail print-on-demand quote from Lulu for the book with the chosen product, quantity, shipping option, and destination address. Read-only — no order is placed. Page count is estimated from word count; the real value may shift by a few pages after `produce_book` runs the PDF render.
Input schema
{ "type": "object", "properties": { "bookId": { "type": "string" }, "productKey": { "type": "string", "description": "A key from `list_print_products` (e.g. \"paperback-6x9-bw\")." }, "quantity": { "type": "integer", "minimum": 1, "maximum": 500 }, "shippingLevel": { "type": "string", "enum": [ "MAIL", "PRIORITY_MAIL", "GROUND", "EXPEDITED", "EXPRESS" ] }, "shippingAddress": { "type": "object", "description": "Lulu-style address (name, street1, city, state_code, postcode, country_code, …)." } }, "required": [ "bookId", "productKey", "quantity", "shippingLevel", "shippingAddress" ] }