oto_node_rows
One PAGE of rows of a table node, by OPAQUE cursor — never an offset. Send cursor back exactly as received; nextCursor: null means there is nothing left. columns travel with every page (they describe the whole list, not the page) and total is the count WITH filters applied — that is what a footer shows. Cells are strings already rendered by the server. Optional q (full text), sort + direction (a column KEY, never its title), filter as key:value entries. A node that does not exist, that you cannot see, or that is not a table all answer the SAME 404 — telling them apart would leak what a node is. PROVISIONAL surface.
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_rows"
}
}Input Schema
| Name | Required | Description | Default |
|---|---|---|---|
| q | No | free-text search over the row. Every WORD of `q` must be found, in any order, either by meaning (French stemming, accents and case folded: `cahiers` finds "Le Cahier", `corp acme` finds "ACME Corp") or as a literal FRAGMENT (a piece of a SIREN, an URL or a reference pasted as is). Without an explicit sort, best matches come first (rows matched by meaning, then rows matched only by fragment); an explicit sort stays yours. Where to search is `q_scope`. | |
| _org | No | ||
| sort | No | ||
| limit | No | ||
| cursor | No | ||
| filter | No | ||
| node_id | Yes | ||
| q_scope | No | where `q` searches: `values` = only the values a reader is served (no column names, no layers — `origine`/`comment`/`link` — no JSON quoting); `all` = the whole stored row, names and layers included (finds a row by its `comment`). Default `all`. Any other value is refused. | |
| direction | No |