change_character_name
ChatGPTChange a character's name.
create_book_project
ChatGPTStart a new book from an idea, with the writer. Write the four parts from what the writer tells you: the title; the premise, the story in a sentence or two; the genre, a free-text label (e.g. 'Thriller', 'Dark Fantasy'); and the plot outline's six parts, a few sentences each (exposition, inciting incident, rising action, dilemma, climax, denouement). The book then appears in the writer's Chaptershift app and in list_book_projects; its characters, places, scenes and chapters come after, through their own tools, with the returned book_project_id.
create_character
ChatGPTCreate a character from a name; flesh out the rest with update_character_attributes.
create_location
ChatGPTAdd a location to the story world (management operation, not an in-story change; it exists from the given scene onward, or from the start of the story when no scene is given).
create_scene
ChatGPTCreate a scene with an optional title: in a canonical slot of an act (the slot must be empty) or as an extra scene at a position among the act's entries. The scene comes with its six canonical beats, empty; fill them, and add participants and a location, with update_scene. The result reports after_in_timeline: the scene the new timeline entry follows (null = the entry comes first).
delete_character
ChatGPTErase a character from the project, permanently: their place in the cast, their part in every scene they appeared in, their voice notes and their portrait all go with them. This is a data deletion, not a death in the story. The protagonist cannot be deleted — hand the role to someone else with make_protagonist first.
delete_location
ChatGPTErase a location AND its entire change history from the project — a data-management deletion, not an in-story event. For in-story destruction use record_location_removal.
delete_scene
ChatGPTDelete a scene. Its canonical slot stays in place, empty; an extra scene's entry disappears.
download_manuscript
ChatGPTA short-lived download link for the manuscript as .docx — give it to the user to click. Requires the chapter grouping to exist (save_chapters). The link expires after the minutes reported in expires_in_minutes; call again for a fresh one.
fetch_cover_result
ChatGPTFetch a completed cover generation result. Call once after get_cover_status reports completed. The new cover is displayed to the user in an inline panel that renders everything in display — don't describe display.picture_url or tell the user to open it; only share the link if they explicitly ask for the file.
generate_character_portrait
ChatGPTGenerate an AI portrait for a character in the project's picture style. Costs credits. The portrait is stored on the character and shown in the Chaptershift app. The new portrait is shown to the user in an inline panel that renders everything in display — don't describe display.picture_url or tell the user to open it; only share the link if they explicitly ask for the file.
generate_cover
ChatGPTStart AI cover generation (background job — poll with get_cover_status). Uses the project's premise, title, genre, and picture style. Costs credits; a failed generation is not charged. The finished cover is set on the project and shown in the Chaptershift app.
generate_location_picture
ChatGPTGenerate an AI picture for a location as it looks at a scene of the timeline (omit for the start of the story), attached to one of its change records (get change ids from get_location). Costs credits; the picture appears in the Chaptershift app. The new picture is shown to the user in an inline panel that renders everything in display — don't describe display.picture_url or tell the user to open it; only share the link if they explicitly ask for the file.
get_character
ChatGPTA character's full sheet: every attribute group and their insights. Their portrait is shown to the user in an inline panel that renders everything in display — don't describe display.picture_url or tell the user to open it; only share the link if they explicitly ask for the file.
get_core_elements
ChatGPTThe story's core elements: premise, genre, central conflict, plot outline, point of view, world definition.
get_cover
ChatGPTThe project's current cover, displayed to the user in an inline panel. The panel already renders everything in display — don't describe display.picture_url or tell the user to open it; only share the link if they explicitly ask for the file. When there is no cover yet, generate one with generate_cover.
get_cover_status
ChatGPTPoll the status of a cover generation job (idle | generating | completed | failed).
get_location
ChatGPTA location's state as of a scene of the timeline (omit for the start of the story) plus its change history — change ids anchor record_* edits and generate_location_picture. The inline panel already renders everything in display — don't describe display.picture_url or tell the user to open it; only share the link if they explicitly ask for the file.
get_location_tree
ChatGPTThe location hierarchy as of a scene of the timeline (omit for the start of the story). Use get_location for one location's full state and change history.
get_scene
ChatGPTA scene in full (summary, participants, beat spine) plus its place in the structure and the state of its location.
get_scene_content
ChatGPTThe drafted prose of a scene, one section per active beat (empty when nothing has been drafted yet). A skipped beat has no section, even when it was drafted before being skipped.
get_style_profile
ChatGPTThe project's prose style profile (register, sentence style, narrator voice, audience, devices, avoidances, character voice notes); null when not set up yet.
get_timeline
ChatGPTThe story order: every scene once, in timeline order, with its free-text time label (positions are 0-based). Different from list_scenes' reading order, which follows the acts and slots.
list_book_projects
ChatGPTList your book projects with their ids — the entry point for every other tool.
list_chapters
ChatGPTThe manuscript's chapter grouping — each chapter with its resolved scene ids, plus act titles.
list_characters
ChatGPTList the project's characters with ids, the protagonist flag, and one-line summaries.
list_scenes
ChatGPTThe book's reading order: Act I, II and III, each listing its nine canonical slots (filled or empty) and its extra scenes, in order.
make_protagonist
ChatGPTMake this character the protagonist. The current protagonist, if any, loses the flag in the same operation — there is at most one per book.
move_in_timeline
ChatGPTMove a scene in story order: position counts the other scenes only, 0 = first. Every scene moves, canonical included, and the reading order is untouched — use move_scene for a reading-order move.
move_scene
ChatGPTMove an extra scene to a position in any act. Canonical scenes never move.
record_location_change
ChatGPTRecord an in-story (diegetic) change to a location at a scene of the timeline — e.g. damage, renovation, renaming. History before that scene is untouched.
record_location_removal
ChatGPTRecord that a location ceases to exist in-story at a scene of the timeline (destroyed, demolished…). It remains part of the world's history before that scene — this is not a data deletion.
save_beat_content
ChatGPTSave (or clear, with empty content) the prose for one scene beat. A skipped or removed beat has no section: the save fails with section.not_found until the beat is restored (its previous prose, if any, is still in storage).
save_chapters
ChatGPTSave the full chapter grouping: each chapter names the scene id it starts at, in reading order. Populated acts the list leaves uncovered get untitled chapters.
save_style_profile
ChatGPTSave the project's prose style profile (replaces the whole profile; set is_draft=false when it is final).
set_time_label
ChatGPTSet the free-text time label on a scene's timeline entry. It carries no semantics and is never judged; an empty string clears it.
update_central_conflict
ChatGPTUpdate the central conflict driving the story.
update_character_attributes
ChatGPTMerge attribute groups into a character (only the groups you provide are touched).
update_character_insights
ChatGPTChange a character's insights one by one: set, add or remove, each by id.
update_genre
ChatGPTUpdate the genre (free-text label, e.g. 'Thriller', 'Dark Fantasy').
update_plot_outline
ChatGPTUpdate the plot outline (exposition, inciting incident, rising action, dilemma, climax, denouement).
update_point_of_view
ChatGPTUpdate the book-level narrative point of view, and through whose eyes a single_character book is told (omit pov_character_id for the protagonist).
update_premise
ChatGPTUpdate the story premise.
update_scene
ChatGPTUpdate a scene. Only the fields you include are changed — omitted fields keep their current values (no need to resend the whole scene). Explicit null clears point_of_view, pov_character_id or location_id. pov_character_id (whose eyes the scene is told through) must be one of the scene's participants; removing that participant clears it. Write beats with beat_changes, one entry per beat you touch, by the beat ids get_scene returns: set changes a beat's label, description or skipped flag, insert adds an extra beat after after_beat_id (null = first), remove drops an extra beat. Canonical beats are skipped, never removed.
update_title
ChatGPTRename a book project.
update_world_definition
ChatGPTUpdate the world definition. time_period and world_type are always required; the optional fields (world_rules, cultural_context, atmosphere_keywords) keep their current values when omitted — explicit null clears them.
whoami
ChatGPTThe Chaptershift account behind this connection and whether it can use these tools.