MCP App Store
by KeenEthics

Overview

NoveLand is a writing tool built for working with AI, specialized in storytelling such as novels and scripts. A design that lets AI read your story accurately and diagrams that show the flow of your story at a glance support your everyday writing. Works, story details, and relationship diagrams you create in Claude open as they are in the NoveLand web editor, where you can keep writing them yourself. Within the same work, you can move between the parts you leave to AI and the parts you write yourself. More about the editor: https://novel-land.com/editor-introduction ■ AI that can draw on your story details when answering To create a story together with AI, the AI also needs information beyond the body text, such as your characters' personalities and worldbuilding details. NoveLand links the body text to the relevant story details, so AI can choose and read only the details it needs. ■ See your story as diagrams Relationship diagrams, graphs, timelines, family trees, and charts of per-episode figures appear right in the conversation, so you can spot structural imbalances or missing relationships at a glance. Relationship diagrams are saved to the work; other diagrams are not. ■ A foundation for manga and anime scripts The body text is structured as narration, dialogue tagged with speakers, and scene breaks, the same structure as a script or screenplay. ■ What you can do from Claude ・Create and edit works, chapters, and episodes ・Register characters, terms, and reference documents ・Create relationship diagrams and display other diagrams ・Register foreshadowing and keep track of the episodes where it pays off ・Search the body text and preview episodes ■ AI use and limits AI use through the connector is recorded per work. As it accumulates, the work's AI-usage classification shown to readers can rise, and creating or updating an episode counts as AI-generated body text right away. The connector cannot publish or unpublish works, or delete published content.

Tools

noveland_assign_speaker

ChatGPT
Assigns or removes speakers of paragraphs in an episode, in a batch. A single change is also passed as one entry in assignments. Paragraph text is not modified. Paragraphs are identified only by paragraphId, which is the blockId returned by get_episode(contentFormat="blocks"). all-or-nothing: if any paragraphId is unknown, the whole call fails and nothing is changed. Repeating the same paragraphId is an error. updated_paragraphs is returned in input order.

noveland_create_attribute_key

ChatGPT
Creates an attribute key (custom field). options is required when valueType is select and not allowed for other value types.

noveland_create_character

ChatGPT
Creates characters in a novel. Pass an array, even for a single character. memo is NoveLand Markdown (supports :code: embeds and [[doc:id|label]] links, where id is a UUID returned by list_documents). attributes sets values for attribute keys, which must already exist (created with create_attribute_key). all-or-nothing: if any item fails, the whole batch is rolled back. On error, the response includes failedIndex (0-based) and totalCount; failedIndex is the position of the failed item.

noveland_create_diagram

ChatGPT
Creates a relationship diagram.

noveland_create_document

ChatGPT
Creates a document (author's notes not included in the body text) in a novel. The content is NoveLand Markdown (supports :code: embeds of characters and objects (worldbuilding terms), and [[doc:id|label]] links to documents, where id is a UUID returned by list_documents).

noveland_create_episode

ChatGPT
Creates a new episode in a novel. content is NoveLand Markdown. Required: every body-text paragraph starts with [p] (narration) or [speaker:code] (dialogue). A new paragraph starts only at a paragraph marker; blank lines make no difference. Other block syntax ([scene-marker:...] / [illust ...]) is also allowed. Details: resource noveland://docs/scene-editor-syntax. :code: becomes a reference only for an existing code; other text between colons, such as 12:30:00, is saved as is, and no backslash escapes are needed. An unregistered :code: is saved as plain text and, unless attached to letters or digits, listed in unresolvedCodes in the response. Codes in [speaker:code] and appearances must exist; an unknown one is an error. Format example: [speaker:taro]"Hello." [p]:taro: said. NoveLand shows readers how AI was used in each novel. Calling this tool, with or without content, marks the novel as "AI used to generate body text" (text_generated) right away. Details: resource noveland://docs/ai-usage-classification. When available, the result's editorUrl is the episode's writing page in the NoveLand web editor.

noveland_create_foreshadowing

ChatGPT
Creates a foreshadowing entry. Setup and payoff episodes are linked afterwards with noveland_link_foreshadowing_episode.

noveland_create_novel

ChatGPT
Creates a new novel. Novels created here always start at the AI-feature level text_generated (AI can write body text). The result's aiFeatureLevel includes a notice and, when available, settingsUrl (the novel's settings page), where the author can lower the level. When available, the result's editorUrl is the novel's plot page in the NoveLand web editor, where the author continues writing it.

noveland_create_object

ChatGPT
Creates objects (worldbuilding terms: proper nouns such as places, items and organizations) in a novel. Pass an array, even for a single object. memo is NoveLand Markdown (supports :code: embeds and [[doc:id|label]] links, where id is a UUID returned by list_documents). attributes sets values for attribute keys, which must already exist (created with create_attribute_key). For an object with an object type, only the keys of that object type are accepted. all-or-nothing: if any item fails, the whole batch is rolled back. On error, the response includes failedIndex (0-based) and totalCount; failedIndex is the position of the failed item.

noveland_create_object_type

ChatGPT
Creates an object type (term category) in a novel. It is added at the end of the display order.

noveland_create_section

ChatGPT
Creates a section (chapter) in a novel. detail is NoveLand Markdown (supports :code: embeds of characters and objects (worldbuilding terms), and [[doc:id|label]] links to documents, where id is a UUID returned by list_documents).

noveland_delete_attribute_key

ChatGPT
Deletes an attribute key. All values entered for it and all its options are deleted as well.

noveland_delete_character

ChatGPT
Deletes a character. A character cannot be deleted while it is published, or while episode body text uses it as a speaker, a reference, or through a nickname.

noveland_delete_diagram

ChatGPT
Deletes a diagram along with its nodes and edges. A published diagram cannot be deleted.

noveland_delete_document

ChatGPT
Deletes a document. A published document cannot be deleted.

noveland_delete_episode

ChatGPT
Deletes an episode. A published episode cannot be deleted.

noveland_delete_foreshadowing

ChatGPT
Deletes a foreshadowing entry along with its links to episodes. The body text of the episodes is not affected.

noveland_delete_object

ChatGPT
Deletes an object. An object cannot be deleted while it is published, or while episode body text references it directly or through a nickname.

noveland_delete_object_type

ChatGPT
Deletes an object type. Objects in it are kept without an object type. The attribute keys defined for this object type, and the values entered for them on every object, are deleted and cannot be restored.

noveland_delete_section

ChatGPT
Deletes a section (chapter). stashEpisodes=true (default): the episodes in the section are moved to the stock before the section is deleted. stashEpisodes=false: the section and all its episodes are deleted. A section that contains published episodes cannot be deleted. Those episodes are the ones with isPublished: true in noveland_list_episodes(sectionId=...); the deletion succeeds after they are unpublished. With stashEpisodes=true, a section that contains scheduled episodes cannot be deleted. Those episodes are the ones with a non-null scheduledPublishAt in noveland_list_episodes(sectionId=...).

noveland_draw_chart

ChatGPT
Draws elements of a novel as a bar or line chart: length per episode, appearances per character, and anything else compared by numbers. The drawing is not saved. Important: up to 100 categories, 8 series, and 300 points across all series together (exceeding a limit is an error; nothing is omitted automatically). kind is bar (side-by-side comparison) or line (a trend along the order of categories). Important: the horizontal axis is categories, and the points of each series refer to them by categoryId. An unknown categoryId, or the same categoryId twice within a series, is an error. A categoryId missing from a series is treated as missing data, not as 0 (the bar is left empty and the line breaks). Important: the server does not compute the values; the caller supplies them. Text length and the number of characters (people) appearing per episode are available in one call from noveland_list_episodes (plainTextLength / speakerCharacterCount for characters who speak / referencedCharacterCount for characters referenced with :code:, by name or by nickname). Important: real characters, objects (worldbuilding terms) and episodes are given by ID in the ref of categories; the server resolves their official names (avatars appear on the axis only for characters and objects; episodes show the official name only). Elements written with label are shown distinctly, as elements placed by the AI.

noveland_draw_family_tree

ChatGPT
Draws the characters of a novel as a family tree: each generation is aligned in a row, and children descend from between their parents. Suited to an overview of blood relations and marriages. The drawing is not saved. Important: up to 60 people and 60 unions. Exceeding a limit is an error (nothing is omitted automatically). Important: a union has 1 or 2 partners (1 means a single parent). A person with several partners appears in separate unions. A person can be a child in one union only; listing them in two is an error. Important: real characters and objects (worldbuilding terms) are given by ID in ref; the server resolves their official names and avatars. Elements written with label instead of an ID are shown distinctly, as elements placed by the AI.

noveland_draw_graph

ChatGPT
Draws elements of a novel as a relationship graph: relationships between characters or factions, chains of cause and effect, and anything else expressed with names and arrows. The drawing is not saved. Important: up to 60 nodes and 150 edges. Exceeding a limit is an error (nothing is omitted automatically). Important: real characters, objects (worldbuilding terms) and episodes are given by ID in ref; the server resolves their official names and avatars. Elements written with label instead of an ID are shown distinctly, as elements placed by the AI.

noveland_draw_timeline

ChatGPT
Draws elements of a novel as a timeline (Gantt style). Each band stands for a character, faction or matter, and its segments show what state it was in from one episode to another. The drawing is not saved. Important: a band lists its segments in segments. A change of state is a new segment with its own label (e.g. episodes 1-5 "doubt" / 6-12 "wavering" / 13-20 "acceptance"). A period of absence is a gap between segments. Labels are optional; a band that only shows where something appears has a single segment. Labels fit inside the bar only when short (about 4-8 CJK characters, or roughly twice that in Latin letters); longer ones are readable only on hover. Important: up to 10 bands, 60 segments in total, and 30 arrows. Exceeding a limit is an error (nothing is omitted automatically). Important: the horizontal axis is story order (section order, then episode order within a section), not in-story dates. Episodes in the stock (not in any section) cannot be placed on the axis and cause an error. A segment's fromEpisodeId must not come after its toEpisodeId (both may be the same episode), and segments in the same band must not overlap. An arrow whose atEpisodeId falls outside the axis range derived from the segments is not an error, but its point in time is not drawn. Important: a band is named by its ref. Real characters, objects (worldbuilding terms) and episodes are given by ID in ref; the server resolves their official names and avatars. Elements written with label instead of an ID are shown distinctly, as elements placed by the AI.

noveland_embed_object_ref

ChatGPT
Converts plain text in the body text into references to characters or objects (worldbuilding terms). The displayed text stays the same. Text that already has a reference, ruby or emphasis dots is skipped, so nothing is applied twice. items takes the conversions as a batch. They are saved at once, which is faster than one call per item and less likely to hit rate limits. The single form (targetText + objectCode) exists for backward compatibility. Passing both forms, or neither, is an error. items are applied in array order (up to 200). Placing longer text first avoids matching a substring of it by mistake. all-or-nothing: if any item is not found in the body text, the whole call fails and nothing is changed. The error message lists the items that were not found (up to 50), so they can be fixed in one retry. With items, also placing targetText / objectCode / nicknameId / paragraphId / match / speakerScope at the top level is an error. paragraphId and match go inside each item. speakerScope (filtering by speaker) exists only in the single form. Text that differs from the name of the character or object and is not yet a registered nickname is registered as a nickname and then referenced. paragraphId limits the search to one paragraph (blockId from get_episode(contentFormat="blocks")). paragraphId and speakerScope are combined with AND. matched_paragraph_ids is returned in paragraph order without duplicates, and can be reused as paragraphId in later calls.

noveland_get_attribute_key_usage

ChatGPT
Gets which characters and objects (worldbuilding terms) use an attribute key, to check the impact before deleting or renaming it. usingBaseObjects is sorted by name in ascending order. type is character or object. usageCount is the number of distinct characters and objects.

noveland_get_character

ChatGPT
Gets the full details of a character, including attribute values, nicknames, first-person pronouns and memo.

noveland_get_diagram

ChatGPT
Gets the details of a diagram: the characters and objects (worldbuilding terms) on it, including those without any relationship, and the relationships between them with their names.

noveland_get_document

ChatGPT
Gets the details of a document. The content is returned as NoveLand Markdown (:code: references characters and objects (worldbuilding terms), [[doc:id|label]] links to documents), together with the list of what it references.

noveland_get_episode

ChatGPT
Gets an episode's details. contentFormat selects the format of the body text. plain: plain text as readers see it noveland-markdown: NoveLand Markdown including speakers, references, ruby (reading annotations such as furigana or pinyin) and more (lossless round trip) - Paragraph start: [p] (narration) or [speaker:code] / [speaker:code1,code2] (dialogue; several speakers at once) - Paragraph break: a blank line (\n\n). The next paragraph still starts with [p] or [speaker:...] - Character or object reference: :code: or :code[nicknameId]: - Ruby: |base《reading》; emphasis dots: 《《text》》 - Illustration: [illust src="url" alt="description" appearances="code1,code2"] - Scene break: [scene-marker:title] blocks: a structured array of blocks (best for paragraphId-based edits and for finding paragraphs that still lack speakers or references) - Each blocks[] item has blockId / type / index - paragraph: text (plain) / speakerCodes / objectRefs / hasRuby / hasDots - illustration: src / alt / appearanceCodes - scene-marker: title - In blocks mode, no content string is returned (the blocks array replaces it) Every contentFormat adds paragraph stats at the top level (same keys as includeParagraphStats in list_episodes). Includes position, the episode number in story order (null in the stock).

noveland_get_me

ChatGPT
Gets the signed-in user's id, name, and avatar URL. AI-feature levels are set per novel; noveland_list_novels returns each novel's level as aiFeatureLevel. Operations beyond a novel's level return a FORBIDDEN error, and errors from per-novel operations (tools that take a novelId) include settingsUrl (the novel's settings page) when available. The AI-usage classification based on actual use (the detection axis) is separate from this permission setting. Details: resource noveland://docs/ai-usage-classification.

noveland_get_novel

ChatGPT
Gets a novel's details, including the total text length in characters across all its episodes, stock included (plainTextLength excludes whitespace; plainTextLengthIncludingWhitespace does not).

noveland_get_object

ChatGPT
Gets the full details of an object, including attribute values, nicknames and memo.

noveland_get_section

ChatGPT
Gets the details of a section (chapter). detail is returned as NoveLand Markdown.

noveland_list_attribute_keys

ChatGPT
Lists the attribute keys (custom fields) of a novel. usageCount is the number of distinct characters or objects (worldbuilding terms) that have a value for the key; 0 means the key is unused. Details: noveland_get_attribute_key_usage.

noveland_list_characters

ChatGPT
Lists the characters in a novel. Attribute values and memos are not included. Supports cursor pagination. query narrows the list to characters whose name, nickname or code contains the given text.

noveland_list_diagrams

ChatGPT
Lists the relationship diagrams of a novel. Supports cursor pagination.

noveland_list_documents

ChatGPT
Lists the documents of a novel (content is not included). Supports cursor pagination.

noveland_list_episodes

ChatGPT
Lists the episodes of a novel. Filter with sectionId or stockOnly. Supports cursor pagination. Order: by section, then by order within the section. Episodes in the stock (not in any section) come last. position: episode number in story order, counted across sections (drafts included; null in the stock). It shifts when episodes move; episode IDs stay the same. brief=true: only id, title and position per episode (lighter; up to 500 per page, otherwise 100). Without brief, each episode includes counts that help decide which episodes to work on first: - speakerCharacterCount: distinct characters who speak (have dialogue) - referencedCharacterCount: distinct characters referenced with :code: in the body text, by name or by nickname (passing mentions included) - referencedObjectCount: distinct objects (worldbuilding terms other than characters) referenced with :code: in the body text, by name or by nickname - isPublished: whether the episode is published (false for unpublished drafts) - scheduledPublishAt: the date and time the episode is scheduled to be published (ISO 8601), or null when it is not scheduled. A scheduled episode cannot be moved to the stock includeParagraphStats=true adds the following (costs more, because each episode's Lexical content is parsed): - totalParagraphCount: number of paragraphs (ParagraphBlock) - paragraphsWithSpeakerCount: number of paragraphs with at least one speaker

noveland_list_foreshadowings

ChatGPT
Lists the foreshadowing entries of a novel. episodes[].type is setup or payoff. A foreshadowing entry without a payoff is unresolved. episodes[].id matches the episode id.

noveland_list_novels

ChatGPT
Lists the novels the user can access, including each novel's aiFeatureLevel (the level of AI features permitted for that novel). Supports cursor pagination.

noveland_list_object_types

ChatGPT
Lists the object types (term categories) of a novel in display order.

noveland_list_objects

ChatGPT
Lists the objects (worldbuilding terms: proper nouns such as places, items and organizations) in a novel. Attribute values and memos are not included. Supports cursor pagination. query narrows the list to objects whose name, nickname or code contains the given text.

noveland_list_sections

ChatGPT
Lists the sections (chapters) of a novel. Supports cursor pagination.

noveland_remove_object_ref

ChatGPT
Removes references to characters or objects (worldbuilding terms) embedded in the body text, in a batch. The displayed text stays the same; only the reference is dropped. Without paragraphId, the whole episode is searched. targetText narrows the removal to references embedded with that text. all-or-nothing: if any item matches no reference, the whole call fails and nothing is changed. Items that match the same reference are also an error. A character or object that is still embedded cannot be deleted. Deleting it requires removing its references with this tool in every episode first, and removing its speaker assignments with assign_speaker.

noveland_search_episodes

ChatGPT
Searches episodes by keyword (query, PGroonga full-text search), filters (sectionIds / characterIds / objectIds), or both. Search syntax: space-separated words are combined with AND, the OR keyword combines with OR, and "quoted words" match as a phrase. Text without spaces is searched as a phrase, not split into separate AND terms. Default sort: relevance (descending) with query; story order without. characterIds matches episodes where the character speaks or is referenced by name or nickname (linked mentions only). With query, each hit has termCounts (occurrences of each term in the body text; positionsUnavailable: some could not be counted), lineCount and lines ([{n, text}]; a paragraph is one line unless it has line breaks; long lines are shortened); hits="counts" omits lines. Without query, hits="lines" gives the lines that link those targets or that the characters speak (speaks: true). context: N lines before and after each hit line (context: true), like grep -C. Lines total at most about 15,000 characters per response; when cut, next gives the offset and lineOffset to continue. With characterIds / objectIds, matches[] covers only those targets: speaks (characters; from [speaker:code] markers) and referenced (from :code: links by name or nickname). references="all" lists every speaker and reference and the episode start instead of counts and lines. limit: up to 100; up to 50 with references="all" or sectionIds alone. Includes position, the episode number in story order (null in the stock).

noveland_update_attribute_key

ChatGPT
Updates an attribute key: renames it, or adds or removes options of a key whose valueType is select. addOptions / removeOptions are accepted only when valueType is select.

noveland_update_character

ChatGPT
Updates characters. Pass an array, even for a single character. memo is NoveLand Markdown (supports :code: embeds and [[doc:id|label]] links, where id is a UUID returned by list_documents). attributes sets values for attribute keys, which must already exist (created with create_attribute_key). In nicknames / firstPersonNames, an entry with id updates it and an entry without id creates one. Deletion uses deleteIds. all-or-nothing*: if any item fails, the whole batch is rolled back. On error, the response includes failedIndex (0-based) and totalCount; failedIndex is the position of the failed item.

noveland_update_diagram

ChatGPT
Updates the title of a diagram.

noveland_update_document

ChatGPT
Updates the title or content of a document. The content is NoveLand Markdown (supports :code: embeds of characters and objects (worldbuilding terms), and [[doc:id|label]] links to documents, where id is a UUID returned by list_documents).

noveland_update_episode

ChatGPT
Updates an episode's title, body text, section, or position. The body text is NoveLand Markdown. Required: every body-text paragraph starts with [p] (narration) or [speaker:code] (dialogue). A new paragraph starts only at a paragraph marker; blank lines make no difference. Other block syntax ([scene-marker:...] / [illust ...]) is also allowed. Details: resource noveland://docs/scene-editor-syntax. :code: becomes a reference only for an existing code; other text between colons, such as 12:30:00, is saved as is, and no backslash escapes are needed. An unregistered :code: is saved as plain text and, unless attached to letters or digits, listed in unresolvedCodes in the response. Codes in [speaker:code] and appearances must exist; an unknown one is an error. When content is provided, it replaces the entire existing body text. This tool also moves an episode to another section or to the stock, and changes its position. A published or scheduled episode cannot be moved to the stock (sectionId: null). NoveLand shows readers how AI was used in each novel. Calling this tool, with or without content, marks the novel as "AI used to generate body text" (text_generated) right away. Details: resource noveland://docs/ai-usage-classification.

noveland_update_foreshadowing

ChatGPT
Updates the name or description of a foreshadowing entry.

noveland_update_novel

ChatGPT
Updates a novel's title or synopsis.

noveland_update_object

ChatGPT
Updates objects. Pass an array, even for a single object. memo is NoveLand Markdown (supports :code: embeds and [[doc:id|label]] links, where id is a UUID returned by list_documents). attributes sets values for attribute keys, which must already exist (created with create_attribute_key). For an object with an object type, only the keys of that object type are accepted. In nicknames, an entry with id updates it and an entry without id creates one. Deletion uses deleteNicknameIds. all-or-nothing: if any item fails, the whole batch is rolled back. On error, the response includes failedIndex (0-based) and totalCount; failedIndex is the position of the failed item.

noveland_update_section

ChatGPT
Updates the name, detail or position of a section. detail is NoveLand Markdown (supports :code: embeds of characters and objects (worldbuilding terms), and [[doc:id|label]] links to documents, where id is a UUID returned by list_documents).

noveland_upsert_relationship

ChatGPT
Adds, updates or deletes the relationship between two characters or objects (worldbuilding terms) in a diagram. forward (fromId -> toId) and reverse (toId -> fromId) are set independently. An empty description deletes that direction. Missing nodes are created when a relationship is added. Deleting a relationship keeps the nodes. strokeWidth / strokeStyle keep their current values when omitted.

noveland_view

ChatGPT
Used only by NoveLand widgets; not a tool for the model. The result is intermediate data for rendering and is not usable as an answer in the conversation.

noveland_apply_dots

Claude

noveland_apply_ruby

Claude

noveland_assign_speaker

Claude

noveland_create_attribute_key

Claude

noveland_create_character

Claude

noveland_create_diagram

Claude

noveland_create_document

Claude

noveland_create_episode

Claude

noveland_create_foreshadowing

Claude

noveland_create_novel

Claude

noveland_create_object

Claude

noveland_create_object_type

Claude

noveland_create_section

Claude

noveland_delete_attribute_key

Claude

noveland_delete_character

Claude

noveland_delete_diagram

Claude

noveland_delete_document

Claude

noveland_delete_episode

Claude

noveland_delete_foreshadowing

Claude

noveland_delete_object

Claude

noveland_delete_object_type

Claude

noveland_delete_section

Claude

noveland_draw_chart

Claude

noveland_draw_family_tree

Claude

noveland_draw_graph

Claude

noveland_draw_timeline

Claude

noveland_embed_object_ref

Claude

noveland_get_attribute_key_usage

Claude

noveland_get_character

Claude

noveland_get_diagram

Claude

noveland_get_document

Claude

noveland_get_episode

Claude

noveland_get_map

Claude

noveland_get_me

Claude

noveland_get_novel

Claude

noveland_get_object

Claude

noveland_get_section

Claude

noveland_list_attribute_keys

Claude

noveland_list_characters

Claude

noveland_list_diagrams

Claude

noveland_list_documents

Claude

noveland_list_episodes

Claude

noveland_list_foreshadowings

Claude

noveland_list_maps

Claude

noveland_list_novels

Claude

noveland_list_object_types

Claude

noveland_list_objects

Claude

noveland_list_sections

Claude

noveland_remove_object_ref

Claude

noveland_search_episodes

Claude

noveland_update_attribute_key

Claude

noveland_update_character

Claude

noveland_update_diagram

Claude

noveland_update_document

Claude

noveland_update_episode

Claude

noveland_update_foreshadowing

Claude

noveland_update_novel

Claude

noveland_update_object

Claude

noveland_update_section

Claude

noveland_upsert_relationship

Claude

Capabilities

InteractiveWrites

Example Prompts

Click any prompt to copy it.

Similar Apps