Tool tree
Collaborative analysis canvas for humans and AI agents with WebMCP in-browser tools, DuckDB SQL, and human-in-the-loop proposal queue.
Implementation
gradeNot graded
gradeNot graded
get_canvas_stateAnswer
Return a compact index of canvas nodes, edges, and pending proposal count. Use this before mutating. Does not include cell data.
View tool JSON
{
"name": "get_canvas_state",
"kind": "answer",
"impl": "imperative",
"description": "Return a compact index of canvas nodes, edges, and pending proposal count. Use this before mutating. Does not include cell data.",
"inputSchema": {
"type": "object",
"properties": {},
"additionalProperties": false
}
}inspect_nodeAnswer
Inspect one node. Returns title, type, trust, columns or a short text preview. Not the full file.
View tool JSON
{
"name": "inspect_node",
"kind": "answer",
"impl": "imperative",
"description": "Inspect one node. Returns title, type, trust, columns or a short text preview. Not the full file.",
"inputSchema": {
"type": "object",
"properties": {
"nodeId": {
"type": "string",
"description": "The id of the node to inspect"
}
},
"required": [
"nodeId"
],
"additionalProperties": false
}
}propose_add_nodeAction
Queue a pending chart, table, or note on the canvas. It stays dashed until the user clicks Accept. It does not commit.
View tool JSON
{
"name": "propose_add_node",
"kind": "act",
"impl": "imperative",
"description": "Queue a pending chart, table, or note on the canvas. It stays dashed until the user clicks Accept. It does not commit.",
"inputSchema": {
"type": "object",
"properties": {
"type": {
"type": "string",
"enum": [
"chart",
"table",
"note"
],
"description": "Node type to create"
},
"title": {
"type": "string",
"description": "Title of the card"
},
"x": {
"type": "number",
"description": "Optional canvas X coordinate"
},
"y": {
"type": "number",
"description": "Optional canvas Y coordinate"
},
"data": {
"type": "object",
"description": "Node data payload (e.g. { text: \"...\" } for note or { kind: \"bar\", metric: \"gross_margin\", series: [...] } for chart)"
}
},
"required": [
"type",
"title",
"data"
],
"additionalProperties": false
}
}propose_update_nodeAction
Queue a patch to an existing committed node's title or data. Does not commit until the user accepts.
View tool JSON
{
"name": "propose_update_node",
"kind": "act",
"impl": "imperative",
"description": "Queue a patch to an existing committed node's title or data. Does not commit until the user accepts.",
"inputSchema": {
"type": "object",
"properties": {
"nodeId": {
"type": "string",
"description": "ID of the existing committed node to update"
},
"title": {
"type": "string",
"description": "New title for the node"
},
"data": {
"type": "object",
"description": "New data fields to merge into the node"
}
},
"required": [
"nodeId"
],
"additionalProperties": false
}
}propose_link_nodesAction
Queue an edge between two committed nodes. Relation is derived-from or annotates. Does not commit until accepted.
View tool JSON
{
"name": "propose_link_nodes",
"kind": "act",
"impl": "imperative",
"description": "Queue an edge between two committed nodes. Relation is derived-from or annotates. Does not commit until accepted.",
"inputSchema": {
"type": "object",
"properties": {
"from": {
"type": "string",
"description": "Source node id"
},
"to": {
"type": "string",
"description": "Target node id"
},
"relation": {
"type": "string",
"enum": [
"derived-from",
"annotates"
],
"description": "Relationship type"
}
},
"required": [
"from",
"to",
"relation"
],
"additionalProperties": false
}
}load_datasetAction
Register an uploaded CSV already on the canvas as a queryable DuckDB table. Does not read files from disk. Returns table name and columns.
View tool JSON
{
"name": "load_dataset",
"kind": "act",
"impl": "imperative",
"description": "Register an uploaded CSV already on the canvas as a queryable DuckDB table. Does not read files from disk. Returns table name and columns.",
"inputSchema": {
"type": "object",
"properties": {
"nodeId": {
"type": "string",
"description": "Node id of the dataset to register with DuckDB"
}
},
"required": [
"nodeId"
],
"additionalProperties": false
}
}