oto_node
Open ONE node by its opaque id: name, type, the TRAIL from the root (each crumb carrying its siblings, so a breadcrumb popover needs no extra call), and — for a page — its BODY as ordered blocks with STABLE ids you can cite. Opening a TABLE returns its column schema, never its rows (rows have their own cursor-paginated surface). Unknown id and forbidden id answer the SAME 404 on purpose: a 403 would reveal that the node exists. Pass rev for a conditional read (304 / {not_modified}). non_servi lists what this version cannot answer yet — read it before concluding that a node has no sharing or no dependants. edit_surface names the canonical surface that writes this node (node | doc | project | procedure | datastore | guide): it says WHERE to write, not WHETHER you may, and only node is written through oto_node_edit. Projects and their pages are read live from their own store (ids nod_prj_<id> / nod_doc_<id>): write them through POST /api/me/docs, and do not anchor on their block ids, which are derived from position and source. PROVISIONAL surface: shape contracted, not frozen.
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": {
"node_id": "<node_id>"
},
"name": "oto_node"
}
}Input Schema
| Name | Required | Description | Default |
|---|---|---|---|
| rev | No | ||
| _org | No | ||
| node_id | Yes |