← WebMCP Directory

Tool tree

canvasflow-two.vercel.app

Productivity & BusinessTools verified
Website
Collaborative analysis canvas for humans and AI agents with WebMCP in-browser tools, DuckDB SQL, and human-in-the-loop proposal queue.
Explore capabilities
    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
      }
    }