← WebMCP Directory

Tool tree

greggman.github.io

Developer ToolsTools verified
Website
Sedon
Explore capabilities
    getSedonOverviewAnswer

    Return a multi-paragraph orientation document describing what Sedon is, how it relates to Houdini and Blender, the difference between Geometry and Scene types, what subgraphs are, and how to compose graphs. Call this once at the start of a session so subsequent tool calls land in the right mental model.

    View tool JSON
    {
      "name": "getSedonOverview",
      "kind": "answer",
      "impl": "imperative",
      "description": "Return a multi-paragraph orientation document describing what Sedon is, how it relates to Houdini and Blender, the difference between Geometry and Scene types, what subgraphs are, and how to compose graphs. Call this once at the start of a session so subsequent tool calls land in the right mental model.",
      "inputSchema": {
        "type": "object",
        "properties": {},
        "additionalProperties": false
      },
      "page": "/sedon/"
    }
    listNodeKindsAnswer

    List every available node kind in the registry, each with its id, category, summary, and the names + types of its input and output sockets. This is the ground truth for what kinds exist and what their sockets are named — DO NOT guess kind ids or socket names; consult this list first. Also lists every user-authored subgraph as a node kind of the form `subgraph/<id>`.

    View tool JSON
    {
      "name": "listNodeKinds",
      "kind": "answer",
      "impl": "imperative",
      "description": "List every available node kind in the registry, each with its id, category, summary, and the names + types of its input and output sockets. This is the ground truth for what kinds exist and what their sockets are named — DO NOT guess kind ids or socket names; consult this list first. Also lists every user-authored subgraph as a node kind of the form `subgraph/<id>`.",
      "inputSchema": {
        "type": "object",
        "properties": {},
        "additionalProperties": false
      },
      "page": "/sedon/"
    }
    listGraphNodesAnswer

    List every node currently in the active graph (the one being edited — usually main, but switches when setActiveEditing is called). Each entry includes id, kind, optional name, position, and authored inputValues. Use this to see the current state before making changes; pair with `listGraphEdges` to understand wiring.

    View tool JSON
    {
      "name": "listGraphNodes",
      "kind": "answer",
      "impl": "imperative",
      "description": "List every node currently in the active graph (the one being edited — usually main, but switches when setActiveEditing is called). Each entry includes id, kind, optional name, position, and authored inputValues. Use this to see the current state before making changes; pair with `listGraphEdges` to understand wiring.",
      "inputSchema": {
        "type": "object",
        "properties": {},
        "additionalProperties": false
      },
      "page": "/sedon/"
    }
    listGraphEdgesAnswer

    List every edge currently in the active graph. Each entry has id + from (node id, socket name) + to (node id, socket name). Use this with `listGraphNodes` to fully describe the current wiring.

    View tool JSON
    {
      "name": "listGraphEdges",
      "kind": "answer",
      "impl": "imperative",
      "description": "List every edge currently in the active graph. Each entry has id + from (node id, socket name) + to (node id, socket name). Use this with `listGraphNodes` to fully describe the current wiring.",
      "inputSchema": {
        "type": "object",
        "properties": {},
        "additionalProperties": false
      },
      "page": "/sedon/"
    }
    getNodeInputValueAnswer

    Read the authored value of a specific input socket on a specific node. Returns null when the socket has no authored value (in which case the node uses the input's default value from its NodeDef). Use this before calling setInputValue to know what you are changing.

    View tool JSON
    {
      "name": "getNodeInputValue",
      "kind": "answer",
      "impl": "imperative",
      "description": "Read the authored value of a specific input socket on a specific node. Returns null when the socket has no authored value (in which case the node uses the input's default value from its NodeDef). Use this before calling setInputValue to know what you are changing.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "nodeId": {
            "type": "string",
            "description": "id of the node to inspect"
          },
          "name": {
            "type": "string",
            "description": "input socket name"
          }
        },
        "required": [
          "nodeId",
          "name"
        ],
        "additionalProperties": false
      },
      "page": "/sedon/"
    }
    getActiveEditingAnswer

    Return the id of the graph currently being edited — "main" or a subgraph id. Use this to confirm where subsequent addNode / connect calls will land.

    View tool JSON
    {
      "name": "getActiveEditing",
      "kind": "answer",
      "impl": "imperative",
      "description": "Return the id of the graph currently being edited — \"main\" or a subgraph id. Use this to confirm where subsequent addNode / connect calls will land.",
      "inputSchema": {
        "type": "object",
        "properties": {},
        "additionalProperties": false
      },
      "page": "/sedon/"
    }
    listActionsAnswer

    List every registered application action — the same set the menu bar and command palette expose. Each entry includes id (use this with runAction), label (user-facing text from the palette, usually category-prefixed like "Edit: Undo"), optional shortcut hint, and an `enabled` flag (false means calling runAction will refuse). Refresh between mutations because some actions toggle enabled with live state (e.g. edit.undo follows the undo-stack length, and add.subgraph/<id> appears the moment you create a subgraph).

    View tool JSON
    {
      "name": "listActions",
      "kind": "answer",
      "impl": "imperative",
      "description": "List every registered application action — the same set the menu bar and command palette expose. Each entry includes id (use this with runAction), label (user-facing text from the palette, usually category-prefixed like \"Edit: Undo\"), optional shortcut hint, and an `enabled` flag (false means calling runAction will refuse). Refresh between mutations because some actions toggle enabled with live state (e.g. edit.undo follows the undo-stack length, and add.subgraph/<id> appears the moment you create a subgraph).",
      "inputSchema": {
        "type": "object",
        "properties": {},
        "additionalProperties": false
      },
      "page": "/sedon/"
    }
    addNodeAction

    Add a node to the active graph. `kind` is the node id from `listNodeKinds` (e.g. "geom/sphere", "subgraph/chair"). `id` is optional — when omitted a fresh uuid is generated. `position` is the canvas position in pixels (default origin). `inputValues` is an optional map of authored values keyed by input socket name; any sockets not listed inherit their NodeDef default. UNDOABLE.

    View tool JSON
    {
      "name": "addNode",
      "kind": "act",
      "impl": "imperative",
      "description": "Add a node to the active graph. `kind` is the node id from `listNodeKinds` (e.g. \"geom/sphere\", \"subgraph/chair\"). `id` is optional — when omitted a fresh uuid is generated. `position` is the canvas position in pixels (default origin). `inputValues` is an optional map of authored values keyed by input socket name; any sockets not listed inherit their NodeDef default. UNDOABLE.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "kind": {
            "type": "string",
            "description": "node kind id (e.g. \"geom/sphere\")"
          },
          "id": {
            "type": "string",
            "description": "optional explicit node id; uuid generated if omitted"
          },
          "name": {
            "type": "string",
            "description": "optional cosmetic display name"
          },
          "position": {
            "type": "object",
            "properties": {
              "x": {
                "type": "number"
              },
              "y": {
                "type": "number"
              }
            },
            "required": [
              "x",
              "y"
            ],
            "additionalProperties": false
          },
          "inputValues": {
            "type": "object",
            "description": "optional authored input values keyed by socket name",
            "additionalProperties": true
          }
        },
        "required": [
          "kind"
        ],
        "additionalProperties": false
      },
      "page": "/sedon/"
    }
    removeNodesAction

    Remove one or more nodes from the active graph by id. Any edges incident to a removed node are also removed (and rolled back on undo). UNDOABLE.

    View tool JSON
    {
      "name": "removeNodes",
      "kind": "act",
      "impl": "imperative",
      "description": "Remove one or more nodes from the active graph by id. Any edges incident to a removed node are also removed (and rolled back on undo). UNDOABLE.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "ids": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "description": "node ids to remove"
          }
        },
        "required": [
          "ids"
        ],
        "additionalProperties": false
      },
      "page": "/sedon/"
    }
    connectAction

    Connect an output socket on one node to an input socket on another. Both ends are specified as { node: <id>, socket: <name> }. The call returns `{ ok: false, error: { code, message, detail } }` if either node or socket does not exist, the types are incompatible, the source and target are the same node, or the requested edge id is taken — call `listNodeKinds` and `listGraphNodes` first to confirm socket names and types. When the target input socket is already connected, the existing edge is REPLACED (this is the same single-edge-per-input convention the canvas enforces). UNDOABLE.

    View tool JSON
    {
      "name": "connect",
      "kind": "act",
      "impl": "imperative",
      "description": "Connect an output socket on one node to an input socket on another. Both ends are specified as { node: <id>, socket: <name> }. The call returns `{ ok: false, error: { code, message, detail } }` if either node or socket does not exist, the types are incompatible, the source and target are the same node, or the requested edge id is taken — call `listNodeKinds` and `listGraphNodes` first to confirm socket names and types. When the target input socket is already connected, the existing edge is REPLACED (this is the same single-edge-per-input convention the canvas enforces). UNDOABLE.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "from": {
            "type": "object",
            "description": "source output socket",
            "properties": {
              "node": {
                "type": "string",
                "description": "node id"
              },
              "socket": {
                "type": "string",
                "description": "socket name"
              }
            },
            "required": [
              "node",
              "socket"
            ],
            "additionalProperties": false
          },
          "to": {
            "type": "object",
            "description": "target input socket",
            "properties": {
              "node": {
                "type": "string",
                "description": "node id"
              },
              "socket": {
                "type": "string",
                "description": "socket name"
              }
            },
            "required": [
              "node",
              "socket"
            ],
            "additionalProperties": false
          },
          "id": {
            "type": "string",
            "description": "optional edge id; uuid generated if omitted"
          }
        },
        "required": [
          "from",
          "to"
        ],
        "additionalProperties": false
      },
      "page": "/sedon/"
    }
    removeEdgesSensitive Action

    Remove edges by id. To find edge ids, call `listGraphEdges`. UNDOABLE.

    View tool JSON
    {
      "name": "removeEdges",
      "kind": "transact",
      "impl": "imperative",
      "description": "Remove edges by id. To find edge ids, call `listGraphEdges`. UNDOABLE.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "ids": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "description": "edge ids to remove"
          }
        },
        "required": [
          "ids"
        ],
        "additionalProperties": false
      },
      "page": "/sedon/"
    }
    setInputValueAction

    Authored a specific input socket value on a specific node. Pass `value` as the raw type the input expects (number, array of numbers, string, …). The previous value is captured for undo; consecutive setInputValue calls on the same (node, input) coalesce into ONE undo step by default — pass `coalesce: false` to make each call its own undo step. UNDOABLE.

    View tool JSON
    {
      "name": "setInputValue",
      "kind": "act",
      "impl": "imperative",
      "description": "Authored a specific input socket value on a specific node. Pass `value` as the raw type the input expects (number, array of numbers, string, …). The previous value is captured for undo; consecutive setInputValue calls on the same (node, input) coalesce into ONE undo step by default — pass `coalesce: false` to make each call its own undo step. UNDOABLE.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "nodeId": {
            "type": "string"
          },
          "name": {
            "type": "string",
            "description": "input socket name"
          },
          "value": {
            "description": "raw authored value; type depends on the input"
          },
          "coalesce": {
            "type": "boolean",
            "default": true,
            "description": "when false, this call is its own undo entry instead of being coalesced"
          }
        },
        "required": [
          "nodeId",
          "name",
          "value"
        ],
        "additionalProperties": false
      },
      "page": "/sedon/"
    }
    renameNodeAction

    Set or clear the cosmetic display name of a node. Pass an empty string to clear (the canvas falls back to the kind default). Purely visual — does NOT change the node id or affect the eval cache. UNDOABLE.

    View tool JSON
    {
      "name": "renameNode",
      "kind": "act",
      "impl": "imperative",
      "description": "Set or clear the cosmetic display name of a node. Pass an empty string to clear (the canvas falls back to the kind default). Purely visual — does NOT change the node id or affect the eval cache. UNDOABLE.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "nodeId": {
            "type": "string"
          },
          "name": {
            "type": "string"
          }
        },
        "required": [
          "nodeId",
          "name"
        ],
        "additionalProperties": false
      },
      "page": "/sedon/"
    }
    createSubgraphAction

    Create a brand-new empty subgraph with the given id and label, and switch the editing context to it so subsequent addNode / connect calls land inside it. Caller is responsible for picking a unique id — collisions silently shadow an existing subgraph. After creating, use addSubgraphSocket to give it inputs and outputs. UNDOABLE.

    View tool JSON
    {
      "name": "createSubgraph",
      "kind": "act",
      "impl": "imperative",
      "description": "Create a brand-new empty subgraph with the given id and label, and switch the editing context to it so subsequent addNode / connect calls land inside it. Caller is responsible for picking a unique id — collisions silently shadow an existing subgraph. After creating, use addSubgraphSocket to give it inputs and outputs. UNDOABLE.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "description": "unique subgraph id (kebab-case recommended)"
          },
          "label": {
            "type": "string",
            "description": "human-readable display name"
          }
        },
        "required": [
          "id",
          "label"
        ],
        "additionalProperties": false
      },
      "page": "/sedon/"
    }
    addSubgraphSocketAction

    Add an input or output socket to an existing subgraph. The new socket appears on the subgraph-input or subgraph-output boundary node inside the subgraph AND on every wrapper instance (subgraph/<id>) in parent graphs. Specify `side` as "input" or "output". UNDOABLE.

    View tool JSON
    {
      "name": "addSubgraphSocket",
      "kind": "act",
      "impl": "imperative",
      "description": "Add an input or output socket to an existing subgraph. The new socket appears on the subgraph-input or subgraph-output boundary node inside the subgraph AND on every wrapper instance (subgraph/<id>) in parent graphs. Specify `side` as \"input\" or \"output\". UNDOABLE.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "subgraphId": {
            "type": "string"
          },
          "side": {
            "type": "string",
            "enum": [
              "input",
              "output"
            ]
          },
          "label": {
            "type": "string"
          },
          "socketType": {
            "type": "string",
            "description": "type name (e.g. \"Float\", \"Vec3\", \"Scene\")"
          },
          "description": {
            "type": "string"
          }
        },
        "required": [
          "subgraphId",
          "side",
          "label",
          "socketType"
        ],
        "additionalProperties": false
      },
      "page": "/sedon/"
    }
    setActiveEditingAction

    Switch which graph is currently being edited. Pass "main" for the project root graph, or a subgraph id (the id used in createSubgraph) to drill into a subgraph. Clears undo/redo because commands don't carry across editing contexts.

    View tool JSON
    {
      "name": "setActiveEditing",
      "kind": "act",
      "impl": "imperative",
      "description": "Switch which graph is currently being edited. Pass \"main\" for the project root graph, or a subgraph id (the id used in createSubgraph) to drill into a subgraph. Clears undo/redo because commands don't carry across editing contexts.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "description": "\"main\" or a subgraph id"
          }
        },
        "required": [
          "id"
        ],
        "additionalProperties": false
      },
      "page": "/sedon/"
    }
    runActionAction

    Fire a registered action by its id (see listActions). Equivalent to clicking the matching menu item or picking the entry in the command palette — same undo behavior, same side effects. Returns { ok: true } when the action ran (synchronously or once its returned promise settled). Refuses with an error if the action is unknown or currently disabled. Some actions depend on UI focus (e.g. assets.copy needs the asset view focused, view.frame-selected needs a canvas active); those become no-ops when nothing is focused — not an error, just nothing visibly happens. Prefer narrower MCP tools (addNode / connect / setInputValue) when you need precise control; reach for runAction for menu-level operations like view.cleanup, file.new, edit.undo, or add.new-subgraph that have no direct MCP equivalent.

    View tool JSON
    {
      "name": "runAction",
      "kind": "act",
      "impl": "imperative",
      "description": "Fire a registered action by its id (see listActions). Equivalent to clicking the matching menu item or picking the entry in the command palette — same undo behavior, same side effects. Returns { ok: true } when the action ran (synchronously or once its returned promise settled). Refuses with an error if the action is unknown or currently disabled. Some actions depend on UI focus (e.g. assets.copy needs the asset view focused, view.frame-selected needs a canvas active); those become no-ops when nothing is focused — not an error, just nothing visibly happens. Prefer narrower MCP tools (addNode / connect / setInputValue) when you need precise control; reach for runAction for menu-level operations like view.cleanup, file.new, edit.undo, or add.new-subgraph that have no direct MCP equivalent.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "description": "Action id from listActions (e.g. \"view.cleanup\", \"edit.undo\", \"add.new-subgraph\")."
          }
        },
        "required": [
          "id"
        ],
        "additionalProperties": false
      },
      "page": "/sedon/"
    }