{"ok":true,"site":{"host":"greggman.github.io","url":"https://greggman.github.io/sedon/","type":"live","desc":"Sedon","tools":[{"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},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute","page":"/sedon/"},{"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},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute","page":"/sedon/"},{"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},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute","page":"/sedon/"},{"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},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute","page":"/sedon/"},{"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},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute","page":"/sedon/"},{"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},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute","page":"/sedon/"},{"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},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute","page":"/sedon/"},{"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},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute","page":"/sedon/"},{"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},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute","page":"/sedon/"},{"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},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute","page":"/sedon/"},{"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},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute","page":"/sedon/"},{"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},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute","page":"/sedon/"},{"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},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute","page":"/sedon/"},{"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},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute","page":"/sedon/"},{"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},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute","page":"/sedon/"},{"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},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute","page":"/sedon/"},{"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},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute","page":"/sedon/"}],"category":"Developer Tools","favicon":"/favicons/greggman.github.io.ico","apiSurface":"spec","toolCount":17}}