World & codex
23 MCP tools. Each applies to the one project the server was launched with; every mutating call is one undo step and saves immediately.
add_comment
Adds a review comment on a named object (Markdown body permitted).
| Parameter | Type | Required | Description |
|---|---|---|---|
anchor | string | no | An optional locator within the target (e.g. a quoted snippet). |
author | string | no | The display author; defaults to "Claude". |
body | string | yes | The comment text. |
target | string | yes | The annotated object's title or name. |
target_id | string | no | The annotated object's id, when the name is ambiguous. |
Example call
{
"name": "add_comment",
"arguments": {
"target": "<target>",
"body": "<body>"
}
}
add_field
Defines a typed field on a codex category's schema (or replaces the same-named field already on it). "type" is text (default), number, boolean, date, reference, choice, or url; a choice field needs an "options" list. The field then applies to every entity in the category and its subcategories.
| Parameter | Type | Required | Description |
|---|---|---|---|
category | string | yes | The category to add the field to (by name). |
description | string | no | Optional help text for the field. |
label | string | yes | The field's display label, e.g. "Eye Color". |
options | array | no | Allowed values (choice fields only). |
required | boolean | no | Whether entities must supply a value. |
type | string | no | text | number | boolean | date | reference | choice | url. |
Example call
{
"name": "add_field",
"arguments": {
"category": "<category>",
"label": "<label>"
}
}
convert_field
Changes a category's OWN field to a new type (text/number/boolean/date/reference/choice/url) -- the way to make a field created as text (e.g. "Father") into a Reference. Entity values migrate where safe: text->reference resolves each value that names a unique entity to that entity (values naming no entity are kept as text and reported); reference->text replaces each id with its target's name. One undo step.
| Parameter | Type | Required | Description |
|---|---|---|---|
category | string | yes | The category whose field to convert (by name). |
field | string | yes | The field's label or key (must be the category's own field). |
options | array | no | Allowed values when converting to a choice field. |
type | string | yes | The new type: text, number, boolean, date, reference, choice, or url. |
Example call
{
"name": "convert_field",
"arguments": {
"category": "<category>",
"field": "<field>",
"type": "<type>"
}
}
create_category
Creates a codex category (with a standard Summary field). Pass "parent" to nest it under another category (the parent is created when absent). A category that already exists is a valid no-op.
| Parameter | Type | Required | Description |
|---|---|---|---|
name | string | yes | The new category's name. |
parent | string | no | Optional parent category to nest it under (by name). |
Example call
{
"name": "create_category",
"arguments": {
"name": "<name>"
}
}
create_entity
Creates a codex entity, optionally with its aliases, tags, lifespan, and references in the SAME call (one undo step) -- no follow-up update_entity needed. The category is created when absent; "fields" values are created as text fields on it (a built-in property named there is refused -- use its own key). References target existing entities by name.
| Parameter | Type | Required | Description |
|---|---|---|---|
aliases | array | no | Alternate names/nicknames. |
born | string | no | Birth date in the project calendar. |
category | string | yes | The category to file it under. |
died | string | no | Death date in the project calendar. |
fields | object | no | CUSTOM field values as label -> value. A bare value sets a text field (or an existing field's own type). To create and set a typed field in one call, use an object {"value", "type", "options"} -- type is number/boolean/date/choice/url/text (a Reference field goes through "references"; a Choice needs "options"). |
name | string | yes | The new entity's name (must not exist yet). |
references | object | no | Reference field values as label -> target entity name (the target must already exist). |
summary | string | no | A one-paragraph summary. |
tags | array | no | Cross-cutting tags. |
timed_values | array | no | State-over-time: objects of {field, when, value}, dates in the project calendar. |
Example call
{
"name": "create_entity",
"arguments": {
"name": "<name>",
"category": "<category>"
}
}
delete_object
Deletes any titled object (entity, document, map, spreadsheet, timeline event, ...) by name and states what type it deleted. One undo step.
| Parameter | Type | Required | Description |
|---|---|---|---|
id | string | no | The object's id, when the name is ambiguous. |
name | string | yes | The object's title or name. |
Example call
{
"name": "delete_object",
"arguments": {
"name": "<name>"
}
}
get_category
Shows a category's parent, subcategories, entity count, and its full field schema (each field's type, options, whether required, and own vs inherited) -- the read side of add_field / remove_field / move_field.
| Parameter | Type | Required | Description |
|---|---|---|---|
category | string | yes | The category's name. |
Example call
{
"name": "get_category",
"arguments": {
"category": "<category>"
}
}
get_entity
One entity in full: category, aliases, tags, lifespan in the project calendar, field values (references resolved to names), state over time, gallery size, and where it is mentioned.
| Parameter | Type | Required | Description |
|---|---|---|---|
id | string | no | The entity's id, when the name is ambiguous. |
name | string | yes | The entity's name or alias. |
Example call
{
"name": "get_entity",
"arguments": {
"name": "<name>"
}
}
get_project_overview
The project at a glance: object counts per content type, the category tree with entity counts, the calendar, the audience registry, and the mounted libraries with their permissions.
No parameters.
Example call
{
"name": "get_project_overview",
"arguments": {}
}
get_relationships
The codex relationship graph as text: the Reference-field links between entities (spanning mounted libraries). With no "entity", lists every relationship; with an "entity", lists its neighborhood within "depth" hops (default 2, 0 = all) in "direction" both/outgoing/incoming (default both). Each line reads "Source --[label]--> Target".
| Parameter | Type | Required | Description |
|---|---|---|---|
depth | integer | no | Hops from the focus to include (default 2; 0 = all). |
direction | string | no | both (default), outgoing, or incoming. |
entity | string | no | Optional focus entity (name or alias); omit for the whole graph. |
id | string | no | The focus entity's id, when its name is ambiguous. |
Example call
{
"name": "get_relationships",
"arguments": {
"depth": 0,
"direction": "<direction>"
}
}
list_category
Lists the entities of a named codex category with one-line summaries.
| Parameter | Type | Required | Description |
|---|---|---|---|
category | string | yes | The category's name. |
Example call
{
"name": "list_category",
"arguments": {
"category": "<category>"
}
}
list_comments
Lists comment threads: for one target, or grouped by target across the whole project. Only threads with open work unless include_resolved is true.
| Parameter | Type | Required | Description |
|---|---|---|---|
include_resolved | boolean | no | Include fully resolved threads too. |
target | string | no | Limit to one object's comments (title or name). |
target_id | string | no | The target's id, when the name is ambiguous. |
Example call
{
"name": "list_comments",
"arguments": {
"include_resolved": true,
"target": "<target>"
}
}
merge_entities
Merges the source entity into the target: fills gaps in the target, re-points every reference from the source, then removes the source. One undo step.
| Parameter | Type | Required | Description |
|---|---|---|---|
source | string | yes | The entity to merge away. |
source_id | string | no | The source's id, when its name is ambiguous. |
target | string | yes | The entity that survives. |
target_id | string | no | The target's id, when its name is ambiguous. |
Example call
{
"name": "merge_entities",
"arguments": {
"source": "<source>",
"target": "<target>"
}
}
move_field
Reorders a field within a codex category's own schema, changing the order fields are shown. "position" is a 0-based index (clamped to the valid range).
| Parameter | Type | Required | Description |
|---|---|---|---|
category | string | yes | The category to edit (by name). |
field | string | yes | The field's label or key. |
position | integer | yes | The 0-based index to move it to. |
Example call
{
"name": "move_field",
"arguments": {
"category": "<category>",
"field": "<field>",
"position": 0
}
}
remove_field
Removes a field from a codex category's own schema. Existing entity values under the field are kept (so the removal is reversible). An inherited field must be removed from the parent category that defines it.
| Parameter | Type | Required | Description |
|---|---|---|---|
category | string | yes | The category to edit (by name). |
field | string | yes | The field's label or key. |
Example call
{
"name": "remove_field",
"arguments": {
"category": "<category>",
"field": "<field>"
}
}
reply_comment
Posts a threaded reply to an existing comment (address it by the id list_comments prints). The reply shares the original's target and joins its thread.
| Parameter | Type | Required | Description |
|---|---|---|---|
author | string | no | The display author; defaults to "Claude". |
body | string | yes | The reply text. |
comment | string | yes | The id of the comment to reply to. |
Example call
{
"name": "reply_comment",
"arguments": {
"comment": "<comment>",
"body": "<body>"
}
}
resolve_comment
Marks a comment resolved (or reopens it with resolved: false). Address it by the id list_comments prints.
| Parameter | Type | Required | Description |
|---|---|---|---|
comment | string | yes | The id of the comment to resolve. |
resolved | boolean | no | true (default) to resolve, false to reopen. |
Example call
{
"name": "resolve_comment",
"arguments": {
"comment": "<comment>"
}
}
search
Searches every content type by title/name and entity aliases, plus document body text, across the project and its mounted libraries. Returns up to 50 matches with one-line context and says so honestly when capped.
| Parameter | Type | Required | Description |
|---|---|---|---|
query | string | yes | What to find; matched case-insensitively. |
Example call
{
"name": "search",
"arguments": {
"query": "<query>"
}
}
set_ai_exclusion
Toggles whether an object is excluded from AI features (per-object privacy). When excluded, its content is withheld from the agent's world snapshot, the semantic/RAG index, and canon-consistency checks. Pass "excluded": false to include it again.
| Parameter | Type | Required | Description |
|---|---|---|---|
excluded | boolean | yes | true to hide it from AI, false to include it again. |
id | string | no | The object's id, when the name is ambiguous. |
name | string | yes | The object's title or name. |
Example call
{
"name": "set_ai_exclusion",
"arguments": {
"name": "<name>",
"excluded": true
}
}
set_visibility
Restricts an object to the named audiences (an empty array makes it visible to everyone). Audience names the project has not seen yet are added to its registry.
| Parameter | Type | Required | Description |
|---|---|---|---|
audiences | array | yes | The audiences that may see the object; empty means everyone. |
id | string | no | The object's id, when the name is ambiguous. |
name | string | yes | The object's title or name. |
Example call
{
"name": "set_visibility",
"arguments": {
"name": "<name>",
"audiences": []
}
}
split_entity
Carves a new entity off an existing one (the inverse of merge_entities): the new entity is created in the source's category, copying the chosen fields (and optionally the lifespan). The source is left intact -- you then divide the references between the two by hand.
| Parameter | Type | Required | Description |
|---|---|---|---|
copy_lifespan | boolean | no | Also copy the source's birth/death instants. |
fields | array | no | Field labels/keys to copy into the new entity (omit to copy none). |
new_name | string | yes | The new entity's name (must not collide with an existing one). |
source | string | yes | The entity to split (name or alias). |
source_id | string | no | The source's id, when its name is ambiguous. |
Example call
{
"name": "split_entity",
"arguments": {
"source": "<source>",
"new_name": "<new_name>"
}
}
update_category
Renames, moves, or deletes a codex category. Provide "category" (the one to change) and one of: "new_name" to rename; "parent" to move it under another category (an empty string makes it top-level; the parent is created when absent); or "delete": true to remove it, promoting its subcategories and entities to its parent. A move that would nest a category inside its own subcategory is refused.
| Parameter | Type | Required | Description |
|---|---|---|---|
category | string | yes | The category to change (by name). |
delete | boolean | no | Delete the category (promotes its contents to its parent). |
new_name | string | no | A new name for the category. |
parent | string | no | Move it under this category (empty = top-level). |
Example call
{
"name": "update_category",
"arguments": {
"category": "<category>"
}
}
update_entity
Sparse update of one entity: only the provided keys change, absent keys leave the entity untouched. "new_name" renames it; "category" moves it to another category (created when absent). "aliases" and "tags" replace their whole set; an empty "born"/"died" string clears that date. "fields" is for CUSTOM fields only -- a built-in property named there is refused.
| Parameter | Type | Required | Description |
|---|---|---|---|
aliases | array | no | The replacement alias set. |
born | string | no | Birth date in the project calendar; "" clears it. |
category | string | no | Move the entity into this category (created when absent). |
died | string | no | Death date in the project calendar; "" clears it. |
entity | string | yes | The entity's name or alias. |
fields | object | no | CUSTOM text field values as label -> value. |
id | string | no | The entity's id, when the name is ambiguous. |
new_name | string | no | Rename the entity to this (must not collide with another entity). |
references | object | no | Reference field values as label -> target entity name. |
tags | array | no | The replacement tag set. |
timed_values | array | no | The replacement state-over-time set: objects of {field, when, value}, dates in the project calendar; [] clears it. |
Example call
{
"name": "update_entity",
"arguments": {
"entity": "<entity>"
}
}