MCP App Store
by KeenEthics
Entertainment
Archivist AI icon

Archivist AI

by Archivist AI, LLC

Overview

Archivist AI helps tabletop role-playing groups find campaign history, ask questions across their lore, and manage campaigns, sessions, characters, world details, quests, journals, relationships, highlights, and entity images through ChatGPT.

Tools

ask-campaign-tool

ChatGPT
RAG ask endpoint for campaign questions.

complete-image-upload-tool

ChatGPT
STEP 2 of the direct-upload flow. Call after successfully PUTting bytes to the presigned upload_url returned by init_image_upload. The API validates the object (size cap, image signature) and runs the same NSFW moderation pipeline used by the product UI — flagged uploads are deleted and the tool returns an error. When attach is true (default), the entity's image field is set to the resulting public_url. Returns {url, attached}.

create-beat-tool

ChatGPT
Create a new story beat in a campaign. Beats organize the campaign timeline (major/minor/step) and can be attached to one or more sessions or nested under a parent beat. IMPORTANT: Like sessions, beat descriptions use the explicit-link contract — new [[wikilinks]] in description are silently dropped unless a matching Link already exists for this beat. To reference an entity, create the beat first, then call create_link with from_type="Beat", then update_beat to include [[alias]] in the description.

create-campaign-tool

ChatGPT
Create a new MyArchivist campaign. Title is required; description, system (e.g. "D&D 5e"), summary, language, and tone fields are optional. Campaign creation is limited by the account's subscription tier; if the tier limit is exceeded the API returns a 403 with the tier name and cap.

create-character-tool

ChatGPT
Create a new character (PC or NPC) in a campaign. After drafting description (and backstory for characters), before calling create: for each entity name referenced in the text, run list_characters/list_factions/list_locations/list_items with search=<candidate name>, read only character_name or name plus aliases from matches, wrap confirmed records per the markup rules below, then include the linked text in the create payload. Compendium writes auto-create Link rows. Wikilink markup rules: [[Target Name|Alias]] uses the left side only to resolve the entity; the right side becomes Link.alias (if omitted, both sides are the same string). The app renders links by matching bracket text to Link.alias — not by guessing from prose typography. Default to [[Exact Name From API]] with no pipe, copying character_name or name byte-for-byte from list_* results. Use [[Target Name|Alias]] only when the prose uses a shorter or different label than the entity name (e.g. [[Queen Whatsherface|the queen]]). Never write [[Name|Name]], never put the canonical name on the left and a prose variant on the right when both refer to the same entity, and never mix straight/curly apostrophes or other look-alike characters between sides. Re-wrapped aliases from list_links must match the stored alias string exactly inside the brackets.

create-faction-tool

ChatGPT
Create a new faction in a campaign. After drafting description (and backstory for characters), before calling create: for each entity name referenced in the text, run list_characters/list_factions/list_locations/list_items with search=<candidate name>, read only character_name or name plus aliases from matches, wrap confirmed records per the markup rules below, then include the linked text in the create payload. Compendium writes auto-create Link rows. Wikilink markup rules: [[Target Name|Alias]] uses the left side only to resolve the entity; the right side becomes Link.alias (if omitted, both sides are the same string). The app renders links by matching bracket text to Link.alias — not by guessing from prose typography. Default to [[Exact Name From API]] with no pipe, copying character_name or name byte-for-byte from list_* results. Use [[Target Name|Alias]] only when the prose uses a shorter or different label than the entity name (e.g. [[Queen Whatsherface|the queen]]). Never write [[Name|Name]], never put the canonical name on the left and a prose variant on the right when both refer to the same entity, and never mix straight/curly apostrophes or other look-alike characters between sides. Re-wrapped aliases from list_links must match the stored alias string exactly inside the brackets.

create-hero-award-tool

ChatGPT
Create a hero award attached to a session. Requires title and description. Optional character_name, player_name, style (default verdant), variant (default square-v2), tone_mode (default), award_mode (moment or theme), and custom_theme. Hero awards do not use wikilinks. Card images are rendered by the app, not uploaded via init_image_upload.

create-item-tool

ChatGPT
Create a new item in a campaign. After drafting description (and backstory for characters), before calling create: for each entity name referenced in the text, run list_characters/list_factions/list_locations/list_items with search=<candidate name>, read only character_name or name plus aliases from matches, wrap confirmed records per the markup rules below, then include the linked text in the create payload. Compendium writes auto-create Link rows. Wikilink markup rules: [[Target Name|Alias]] uses the left side only to resolve the entity; the right side becomes Link.alias (if omitted, both sides are the same string). The app renders links by matching bracket text to Link.alias — not by guessing from prose typography. Default to [[Exact Name From API]] with no pipe, copying character_name or name byte-for-byte from list_* results. Use [[Target Name|Alias]] only when the prose uses a shorter or different label than the entity name (e.g. [[Queen Whatsherface|the queen]]). Never write [[Name|Name]], never put the canonical name on the left and a prose variant on the right when both refer to the same entity, and never mix straight/curly apostrophes or other look-alike characters between sides. Re-wrapped aliases from list_links must match the stored alias string exactly inside the brackets.

create-journal-folder-tool

ChatGPT
Create a new journal folder in a campaign. Folders organize journal entries hierarchically; path is a "/"-separated string that must be unique within the campaign. Only campaign owners/admins can create folders.

create-journal-tool

ChatGPT
Create a new journal entry in a campaign. Returns {success, id} on success. content is plain text; content_rich accepts a ProseMirror-style JSON document. Journals participate in the wikilinks system on serialization only: [[wikilinks]] in stored content are rendered when you fetch with with_links=true, but on write the API does not create Link rows from the text automatically. Create Link rows explicitly with create_link (from_type="Journal", from_id=journal_id) if you want persistent link tracking. Setting is_public and status="published" can make the entry publicly visible.

create-location-tool

ChatGPT
Create a new location in a campaign. Locations can nest (parent_id references another Location in the same campaign). After drafting description (and backstory for characters), before calling create: for each entity name referenced in the text, run list_characters/list_factions/list_locations/list_items with search=<candidate name>, read only character_name or name plus aliases from matches, wrap confirmed records per the markup rules below, then include the linked text in the create payload. Compendium writes auto-create Link rows. Wikilink markup rules: [[Target Name|Alias]] uses the left side only to resolve the entity; the right side becomes Link.alias (if omitted, both sides are the same string). The app renders links by matching bracket text to Link.alias — not by guessing from prose typography. Default to [[Exact Name From API]] with no pipe, copying character_name or name byte-for-byte from list_* results. Use [[Target Name|Alias]] only when the prose uses a shorter or different label than the entity name (e.g. [[Queen Whatsherface|the queen]]). Never write [[Name|Name]], never put the canonical name on the left and a prose variant on the right when both refer to the same entity, and never mix straight/curly apostrophes or other look-alike characters between sides. Re-wrapped aliases from list_links must match the stored alias string exactly inside the brackets.

create-moment-tool

ChatGPT
Create a Key Moment (Moment) attached to a session. For a Key Moment card, set categories=["key-moment"] and approved=true, pending=false. Optional image is a URL; to upload a file, create first then use init_image_upload with entity_type=moment. metadata holds presentation fields such as style, customTheme, and variant. IMPORTANT: Unlike Characters/Factions/Locations/Items, moment content does NOT auto-resolve new [[wikilinks]]. Only aliases that already have Link rows (created via create_link or authored during transcript upload) are wrapped in the stored content. To add a wikilink referring to an entity, first call create_link with from_type="Moment" and from_id set to the moment id, then update_moment to include [[alias]] in content.

create-quest-tool

ChatGPT
Create a new quest entry in a campaign's quest log. Objectives is a list of objects with {text, status} where status is pending/in-progress/completed/failed/blocked. related_characters/factions/locations/items are lists of entity ids or names. Quests use snake_case field names in their body. Quests do NOT participate in the wikilinks system: text fields (success_definition, failure_conditions, next_action, resolution) are stored verbatim without link syncing.

create-quote-tool

ChatGPT
Create a memorable quote attached to a session. Requires text. Optional speaker, character_name, context, style (default verdant), and custom_theme. A recap pipeline is created for the session if one does not exist. Quotes do not use wikilinks.

create-spotlight-tool

ChatGPT
Create a recap spotlight attached to a session. Requires title. Optional description, character_name, player_name, style (default verdant), custom_theme, and source_moment_id. A recap pipeline is created for the session if one does not exist. Spotlights do not use wikilinks. This is a GEMS card, not a session-handout spotlight.

delete-beat-tool

ChatGPT
Delete a story beat. Child beats have their parent_id cleared. Any Link rows sourced from this beat are removed.

delete-character-tool

ChatGPT
Delete a character. The API cleans up all outgoing and inbound Link rows and unbrackets [[alias]] markup in every referring text field (Character descriptions, session summaries, beat descriptions, moment content, journal entries) so no dangling wikilinks remain.

delete-entity-image-tool

ChatGPT
Remove an image within a campaign. Provide EITHER entity_type + entity_id (detaches the image from that record AND deletes the underlying object) OR a managed image_url (deletes just that object). Valid entity types: campaign, world, character, faction, location, item, moment, session, gamesession. Returns {removed: bool}.

delete-faction-tool

ChatGPT
Delete a faction. The API cleans up all outgoing and inbound Link rows and unbrackets [[alias]] markup for this faction in every referring text field.

delete-hero-award-tool

ChatGPT
Delete a hero award.

delete-item-tool

ChatGPT
Delete an item. The API cleans up all outgoing and inbound Link rows and unbrackets [[alias]] markup for this item in every referring text field.

delete-journal-folder-tool

ChatGPT
Delete a journal folder. Journal entries in the folder are NOT deleted; their folder_id is set to null (they move to the campaign root).

delete-journal-tool

ChatGPT
Delete a journal entry. Returns {success: true}. Vector embeddings for the entry are best-effort deleted alongside the row. Deleting a published public entry removes its publicly visible content.

delete-location-tool

ChatGPT
Delete a location. Child locations are unlinked (their parent_id is cleared). The API cleans up all outgoing and inbound Link rows and unbrackets [[alias]] markup for this location in every referring text field.

delete-moment-tool

ChatGPT
Delete a Key Moment (Moment). Any inbound/outbound Link rows for this moment are removed. Note: as a source of wikilinks, moments only appear as [[…]] in their own content (not in other entities' text), so no cross-record text rewriting is required.

delete-quest-tool

ChatGPT
Delete a quest and its objectives / progress entries / related refs.

delete-quote-tool

ChatGPT
Delete a session quote.

delete-spotlight-tool

ChatGPT
Delete a recap spotlight.

get-beat-tool

ChatGPT
Get a specific beat by ID.

get-campaign-stats-tool

ChatGPT
Get statistics for a specific campaign: character count, session count, and more.

get-campaign-tool

ChatGPT
Get a specific MyArchivist campaign by its ID.

get-character-tool

ChatGPT
Get a specific character by ID including aliases, backstory, and speaker linkage.

get-faction-tool

ChatGPT
Get a specific faction by ID.

get-hero-award-tool

ChatGPT
Get a hero award by ID, including title, description, character/player names, card style, variant, and custom theme.

get-image-usage-tool

ChatGPT
Return the calling account's image feature quota for a campaign: used/limit counts for the current billing cycle, tier name, can_access flag, and cycle window. Call this when you want to reason about headroom before an image operation that could 403 on a depleted or tier-locked quota.

get-item-tool

ChatGPT
Get a specific item by ID.

get-journal-folder-tool

ChatGPT
Get a specific journal folder by ID.

get-journal-tool

ChatGPT
Get a specific journal entry by ID including full content and the caller's effective permission level.

get-location-tool

ChatGPT
Get a specific location by ID.

get-moment-tool

ChatGPT
Get a specific moment by ID.

get-quest-tool

ChatGPT
Get a fully expanded quest by ID, including objectives, progress log, related entity refs, and session provenance.

get-quote-tool

ChatGPT
Get a session quote by ID, including speaker, text, context, character name, and card style.

get-session-cast-analysis-tool

ChatGPT
Get the cast analysis for a game session, including talk-share breakdown and core session metrics.

get-session-handout-tool

ChatGPT
Get the generated session handout for a game session, including summary, outlines, spotlights, and notable moments.

get-session-tool

ChatGPT
Get a specific game session by ID. Optionally include related beats and moments.

get-session-transcript-tool

ChatGPT
Get the cleaned transcript for a game session, including utterances, full text, and aggregate stats.

get-spotlight-tool

ChatGPT
Get a recap spotlight by ID, including title, description, character/player names, and card style. This is a GEMS spotlight card, not a session-handout spotlight.

init-image-upload-tool

ChatGPT
STEP 1 of the direct-upload flow. Ask the API to reserve an object key for the entity and presign an S3 PUT URL. content_type must be image/* (jpeg, png, gif, webp, avif, heic, heif). Returns {object_key, upload_url, public_url, expires_in_seconds}. AFTER calling this, the client MUST issue an HTTP PUT to upload_url with the raw image bytes and the same Content-Type header before it expires (typically ~5 minutes). Once the PUT is complete, call complete_image_upload to finalize (moderate and optionally attach). Agents that cannot perform arbitrary HTTP PUTs should ask a human collaborator to do the PUT step.

list-beats-tool

ChatGPT
List beats in a campaign, ordered by index. Beats represent story moments (major, minor, step).

list-campaigns-tool

ChatGPT
List your MyArchivist campaigns. Returns a paginated list of campaigns.

list-characters-tool

ChatGPT
List characters in a campaign. Optionally filter by name search, character type, and approval status.

list-factions-tool

ChatGPT
List factions in a campaign. Optionally filter by name search. Factions represent guilds, organisations, or other groups.

list-hero-awards-tool

ChatGPT
List hero awards in a campaign or session. Hero awards are player achievement cards (title, description, character, optional player name, card style). Filter by title/description/character search.

list-items-tool

ChatGPT
List items in a campaign. Optionally filter by name search. Items include weapons, armour, artefacts, and other notable objects.

list-journal-folders-tool

ChatGPT
List journal folders for a campaign. Folders are ordered by path and position for tree rendering.

list-journals-tool

ChatGPT
List journal entries in a campaign. Results are filtered to entries the caller can see. Content is omitted from the list; use get_journal to fetch full content.

list-locations-tool

ChatGPT
List locations in a campaign. Optionally filter by name search. Locations can be nested (cities, taverns, dungeons, etc.).

list-moments-tool

ChatGPT
List moments in a campaign or session. Optionally filter by label search. Moments capture memorable quotes and events.

list-quests-tool

ChatGPT
List quests in a campaign with pagination. Filter by status (planned, in-progress, blocked, failed, done, n/a) or category (main, side, faction, personal, n/a).

list-quotes-tool

ChatGPT
List memorable session quotes in a campaign or session. Quotes are recap cards (speaker, text, context, style). Filter by text/speaker/context search.

list-sessions-tool

ChatGPT
List game sessions in a campaign. Optionally filter by session type or public-only.

list-spotlights-tool

ChatGPT
List recap spotlights in a campaign or session. These are GEMS spotlight cards (title, description, character/player), not session-handout spotlights. Filter by title/description/character search.

patch-session-tool

ChatGPT
Partially update a game session (limited fields: title, session_date, summary, image). IMPORTANT: Sessions use the explicit-link contract, not the auto-resolve contract used by Character/Faction/Location/Item. On write, the API strips any [[alias]] markup whose alias does NOT already have a Link row for this session; new wikilinks in summary are silently dropped. To reference an entity, call create_link first with from_type="GameSession", then include [[alias]] in the summary. When editing summary, first fetch the session with get_session(with_links: true) to see current [[wikilinks]] and avoid losing them.

update-beat-tool

ChatGPT
Partially update a story beat. IMPORTANT: Beats use the explicit-link contract. On write, [[alias]] markup in description is only preserved if a Link row already exists for this beat with that alias; new wikilinks are silently dropped. To add a wikilink, call create_link with from_type="Beat" first, then include [[alias]] in description. When editing existing description, first fetch the beat with get_beat(with_links: true) to see the current [[wikilinks]] and avoid losing them.

update-campaign-tool

ChatGPT
Partially update a MyArchivist campaign. Only the campaign owner can update; only fields included in the request are changed. Cannot be used on archived campaigns.

update-character-tool

ChatGPT
Partially update a character. Only the fields you include are changed. When editing description or backstory, follow this order: (1) fetch the entity with with_links: true; (2) list_links with from_id set to this entity's id and from_type matching its compendium type — store every returned alias in memory (writes delete Link rows whose alias no longer appears wrapped in the text); (3) draft the new prose; (4) re-wrap each stored alias as [[alias]] wherever that alias still appears (use [[Target|alias]] only if that link originally used a distinct display alias); (5) for other entity names in the draft, run list_characters/list_factions/list_locations/list_items with search=<candidate name> and read only character_name or name plus aliases from matches — ignore long description fields; (6) wrap confirmed campaign entities using the markup rules below; compendium writes auto-create Link rows. Wikilink markup rules: [[Target Name|Alias]] uses the left side only to resolve the entity; the right side becomes Link.alias (if omitted, both sides are the same string). The app renders links by matching bracket text to Link.alias — not by guessing from prose typography. Default to [[Exact Name From API]] with no pipe, copying character_name or name byte-for-byte from list_* results. Use [[Target Name|Alias]] only when the prose uses a shorter or different label than the entity name (e.g. [[Queen Whatsherface|the queen]]). Never write [[Name|Name]], never put the canonical name on the left and a prose variant on the right when both refer to the same entity, and never mix straight/curly apostrophes or other look-alike characters between sides. Re-wrapped aliases from list_links must match the stored alias string exactly inside the brackets. Then call this update tool.

update-faction-tool

ChatGPT
Partially update a faction. When editing description or backstory, follow this order: (1) fetch the entity with with_links: true; (2) list_links with from_id set to this entity's id and from_type matching its compendium type — store every returned alias in memory (writes delete Link rows whose alias no longer appears wrapped in the text); (3) draft the new prose; (4) re-wrap each stored alias as [[alias]] wherever that alias still appears (use [[Target|alias]] only if that link originally used a distinct display alias); (5) for other entity names in the draft, run list_characters/list_factions/list_locations/list_items with search=<candidate name> and read only character_name or name plus aliases from matches — ignore long description fields; (6) wrap confirmed campaign entities using the markup rules below; compendium writes auto-create Link rows. Wikilink markup rules: [[Target Name|Alias]] uses the left side only to resolve the entity; the right side becomes Link.alias (if omitted, both sides are the same string). The app renders links by matching bracket text to Link.alias — not by guessing from prose typography. Default to [[Exact Name From API]] with no pipe, copying character_name or name byte-for-byte from list_* results. Use [[Target Name|Alias]] only when the prose uses a shorter or different label than the entity name (e.g. [[Queen Whatsherface|the queen]]). Never write [[Name|Name]], never put the canonical name on the left and a prose variant on the right when both refer to the same entity, and never mix straight/curly apostrophes or other look-alike characters between sides. Re-wrapped aliases from list_links must match the stored alias string exactly inside the brackets. Then call this update tool.

update-hero-award-tool

ChatGPT
Partially update a hero award (title, description, character/player names, style, variant, tone_mode, award_mode, custom_theme, order_index).

update-item-tool

ChatGPT
Partially update an item. When editing description or backstory, follow this order: (1) fetch the entity with with_links: true; (2) list_links with from_id set to this entity's id and from_type matching its compendium type — store every returned alias in memory (writes delete Link rows whose alias no longer appears wrapped in the text); (3) draft the new prose; (4) re-wrap each stored alias as [[alias]] wherever that alias still appears (use [[Target|alias]] only if that link originally used a distinct display alias); (5) for other entity names in the draft, run list_characters/list_factions/list_locations/list_items with search=<candidate name> and read only character_name or name plus aliases from matches — ignore long description fields; (6) wrap confirmed campaign entities using the markup rules below; compendium writes auto-create Link rows. Wikilink markup rules: [[Target Name|Alias]] uses the left side only to resolve the entity; the right side becomes Link.alias (if omitted, both sides are the same string). The app renders links by matching bracket text to Link.alias — not by guessing from prose typography. Default to [[Exact Name From API]] with no pipe, copying character_name or name byte-for-byte from list_* results. Use [[Target Name|Alias]] only when the prose uses a shorter or different label than the entity name (e.g. [[Queen Whatsherface|the queen]]). Never write [[Name|Name]], never put the canonical name on the left and a prose variant on the right when both refer to the same entity, and never mix straight/curly apostrophes or other look-alike characters between sides. Re-wrapped aliases from list_links must match the stored alias string exactly inside the brackets. Then call this update tool.

update-journal-folder-tool

ChatGPT
Update a journal folder (PUT semantics). Only owners/admins may write. path must stay unique within the campaign; setting parent_id to the folder's own id is rejected.

update-journal-tool

ChatGPT
Update an existing journal entry (PUT). Returns {success, id}. When editing content, first fetch the entry with get_journal(with_links: true) so you can see and preserve existing [[wikilinks]] — links are not auto-created from text, but existing [[…]] markup should be kept if you want them rendered as links on read. Changing is_public or status can publish or unpublish the entry.

update-location-tool

ChatGPT
Partially update a location. When editing description or backstory, follow this order: (1) fetch the entity with with_links: true; (2) list_links with from_id set to this entity's id and from_type matching its compendium type — store every returned alias in memory (writes delete Link rows whose alias no longer appears wrapped in the text); (3) draft the new prose; (4) re-wrap each stored alias as [[alias]] wherever that alias still appears (use [[Target|alias]] only if that link originally used a distinct display alias); (5) for other entity names in the draft, run list_characters/list_factions/list_locations/list_items with search=<candidate name> and read only character_name or name plus aliases from matches — ignore long description fields; (6) wrap confirmed campaign entities using the markup rules below; compendium writes auto-create Link rows. Wikilink markup rules: [[Target Name|Alias]] uses the left side only to resolve the entity; the right side becomes Link.alias (if omitted, both sides are the same string). The app renders links by matching bracket text to Link.alias — not by guessing from prose typography. Default to [[Exact Name From API]] with no pipe, copying character_name or name byte-for-byte from list_* results. Use [[Target Name|Alias]] only when the prose uses a shorter or different label than the entity name (e.g. [[Queen Whatsherface|the queen]]). Never write [[Name|Name]], never put the canonical name on the left and a prose variant on the right when both refer to the same entity, and never mix straight/curly apostrophes or other look-alike characters between sides. Re-wrapped aliases from list_links must match the stored alias string exactly inside the brackets. Then call this update tool.

update-moment-tool

ChatGPT
Partially update a Key Moment (Moment), including image, categories, kind, and presentation metadata (merged into existing metadata so provenance keys are kept). IMPORTANT: Moments use the explicit-link contract, not the auto-resolve contract used by Character/Faction/Location/Item. On write, the API strips any [[alias]] markup whose alias does NOT already have a Link row for this moment; new wikilinks in content are silently dropped. To reference an entity, call create_link first with from_type="Moment", then include [[alias]] in the content on this update. When editing existing content, fetch the moment with get_moment(with_links: true) first to see the current [[wikilinks]] and avoid inadvertently losing them.

update-quest-tool

ChatGPT
Partially update a quest. Any list you send replaces the corresponding list on the record (objectives, progress_log, related_characters, etc). Quests do NOT participate in the wikilinks system, so text fields are stored verbatim.

update-quote-tool

ChatGPT
Partially update a session quote (text, speaker, character_name, context, style, custom_theme, order_index).

update-spotlight-tool

ChatGPT
Partially update a recap spotlight (title, description, character/player names, style, custom_theme, order_index, source_moment_id).

Capabilities

Writes

App Stats

81

Tools

ChatGPT

Platforms

Category

CRM Records

Works with

ChatGPT

Data refreshed daily