Project & protocol

5 MCP tools. Each applies to the one project the server was launched with; every mutating call is one undo step and saves immediately.

backup_project

Writes a timestamped .ewbackup ZIP of the whole project into the user's backups folder (the same place the desktop app backs up to), keeping the 15 most recent. A safety snapshot to take before a risky batch of edits.

No parameters.

Example call

{
  "name": "backup_project",
  "arguments": {}
}

get_recent_changes

Lists what this session has changed so far, oldest first -- the honest transcript of the server's own edits.

No parameters.

Example call

{
  "name": "get_recent_changes",
  "arguments": {}
}

property_migration

The one-off tidy-up for a project built before codex properties became INHERITED rather than shared. "action": "preview" (default) reports exactly which properties would move and to whom, changing nothing; "apply" takes a full backup first and then moves them; "decline" records that the writer said no, so nothing asks again. The rule is a COUNT: a property exactly ONE entity has a value for moves down to that entity; nobody, or two or more, and it stays on the category -- two holders is the evidence that it really is shared. No value is read, written or deleted: only definitions move, so every value still has somewhere to show. It is deliberately conservative and will move little; the rest is driven by hand with entity_property and remove_field's "demote". It also carries the other repair a project can need: "duplicates" lists categories that are ONE category written two ways, because escaped text reached a create tool and "Lore & Concepts" became a second "Lore & Concepts" with the entities split between them; "merge_duplicates" backs the project up and then merges them, keeping the one holding more entities, giving it every property the other declared, moving the rest across and removing the twin. Pass "name" to merge one of them rather than all.

ParameterTypeRequiredDescription
actionstringnopreview (default) | apply | decline | duplicates | merge_duplicates.
namestringnoFor duplicates and merge_duplicates: the category name to act on, unescaped. Every one when omitted.

Example call

{
  "name": "property_migration",
  "arguments": {
    "action": "<action>",
    "name": "<name>"
  }
}

save_project

Saves the project to disk immediately. Every mutating tool already saves after its change; use this after undo_last or to be certain before handing back to the user.

No parameters.

Example call

{
  "name": "save_project",
  "arguments": {}
}

undo_last

Undoes the most recent change(s) made in this session and saves the project. Each mutating tool call is ONE undo step; the stack unwinds strictly last-in-first-out (there is no random-access undo of an earlier call -- use the desktop or re-edit for that). Pass "count" to undo several at once (default 1); it stops early, not erroring, if fewer changes remain. Fails honestly only when there is nothing to undo.

ParameterTypeRequiredDescription
countintegernoHow many of the most recent changes to undo (LIFO; default 1; stops early if fewer remain).

Example call

{
  "name": "undo_last",
  "arguments": {
    "count": 0
  }
}