oto_node_edit
Write a node in the NEW content universe (op=create | update | move | delete). THREE kinds, and only three: page, tableau, ligne (default page). A table row is a node too: create it with kind='ligne', parent_id of its table, and data holding the cell values — data is where user values live, never props, so a column named title cannot overwrite the node's own title. A table's column schema is columns, optional (a free table is a valid table), and re-posting it REPLACES it. Nodes written here are NATIVE: they have no source in the old world, nothing refreshes them, and the old surfaces (oto_doc, oto_project) do not see them — the two universes live side by side during the transition. A page BODY is stored as ordered blocks with STABLE ids, so editing a title never re-identifies the paragraphs and citations survive. scope picks the owner (platform | org | group | user, default user — the node is PERSONAL: no other member sees it, and only an admin of your personal org can view it, read-only and traced: name a scope to make it your org's or your team's) and follows the SAME write ladder as guides; a row has no owner of its own, it takes its table's. move changes parent and rank WITHOUT changing identity — that is what makes children, blocks and inbound references survive. You may only write, move or delete a node you OWN, and only file one under a parent you own: anything else answers the SAME 404 as reading it, unknown and forbidden being indistinguishable. Editing a node that is a COPY of the old world is refused (409): it is edited on its own surface. So is a context layer (a guide, 409), the refusal naming the oto_guide call that writes it. On update, an empty or blank title is refused (400): omit title to keep it. PROVISIONAL surface, like its read side.
Tool call template
Replace each placeholder with a value matching the input schema. Only required parameters are included; add optional parameters as needed.
{
"id": 1,
"jsonrpc": "2.0",
"method": "tools/call",
"params": {
"arguments": {
"op": "<op>"
},
"name": "oto_node_edit"
}
}Input Schema
| Name | Required | Description | Default |
|---|---|---|---|
| op | Yes | ||
| _org | No | ||
| data | No | ||
| kind | No | ||
| scope | No | ||
| title | No | ||
| body_md | No | ||
| columns | No | ||
| node_id | No | ||
| after_id | No | ||
| owner_id | No | ||
| parent_id | No | ||
| description | No |