Skip to main content
Glama

Houdini MCP

Connect SideFX Houdini to Claude, Codex, Gemini, Cursor, opencode or pi.

This MCP provides Full Markdown Documentation and Viewport Screenshots support to your agents of choice, enabling strong feedback loops and autonomous workflows.

Install

Windows

powershell -c "irm https://raw.githubusercontent.com/JTCHE/houdini-mcp/main/bootstrap.bat -OutFile bootstrap.bat; .\bootstrap.bat"

macOS / Linux

curl -sSL https://raw.githubusercontent.com/JTCHE/houdini-mcp/main/bootstrap.sh | bash

uv

uv tool install houdini-mcp-server && houdinimcp-install

The installer adds the plugin to Houdini and the server to your AI clients of choice. Restart both.
pi also needs pi install npm:pi-mcp-adapter.

Claude plugin

This repository is also a Claude plugin, for Claude Code and for Cowork on your computer. It needs uv. The plugin starts a headless Houdini without setup. To connect the Houdini that you have open, ask Claude to run the houdini-setup skill.

  • uv run --frozen builds an environment from uv.lock in the plugin folder, then starts the MCP server from this repository.

  • The server talks to Houdini on localhost only. It starts hython, or houdini on request, from your Houdini install, and ffmpeg to encode a flipbook movie.

  • docs reads the documentation out of your Houdini install with houdinimd-docs. It sends nothing over the network.

  • houdini-setup writes the HoudiniMCP package into your Houdini preferences folder, after you approve it.

  • No tool sends data to a remote service. execute runs any Python that Claude writes in your Houdini session.

Related MCP server: HoudiniMCP

Tools

Read

scene_overview node_inspect geometry_inspect stage_inspect select console

Edit

node_edit parm_set connect hda batch

Run

cook render pdg playbar scene_file

See

capture: the viewport, a camera, four views or a flipbook

Code

execute: Python, HScript, expressions, VEX check

Docs

docs: the Houdini documentation of your build, offline, from houdinimd-docs

Session

session: status; starts Houdini headless or with its window

No Houdini open? The server starts a headless hython.

batch builds a whole network in one call, and it is all or nothing: a failed step undoes the steps before it. A build that works comes back with the cooked point and primitive counts, and the nodes with errors.

Warning: execute runs any Python in Houdini. Save your work.

Problem

Fix

No Houdini listens for the bridge

Start Houdini, or click Toggle MCP Server on the HoudiniMCP shelf.

No HoudiniMCP shelf

Restart Houdini. houdinimcp-install --list shows where the plugin went.

Houdini started from Git Bash has no plugin

Git Bash sets HOME. Set the user variable HOUDINI_USER_PREF_DIR to %USERPROFILE%\Documents\houdini__HVER__.

capture says there is no viewport

The session is headless. Call session with action="start_gui".

You must have a fixed port

Set HOUDINIMCP_PORT for Houdini and for the bridge. Without it, the plugin takes a free port from the operating system and tells the bridge which one.

Without a terminal, the installer asks nothing and takes the defaults.

houdinimcp-install --list          # Houdini installs and clients found, as JSON
houdinimcp-install --yes --json    # newest Houdini, every client found; JSON report
houdinimcp-install --houdini-version 22.0 --harness claude-code --yes
houdinimcp-install --dry-run --yes # change nothing
houdinimcp-install --uninstall     # remove the plugin and every client entry

Flags: --houdini-version none skips the plugin, --prefs-dir PATH names the prefs folder, --harness none|all|KEY (repeatable), --quiet-start stops the first-launch dialogs. The bootstrap scripts pass every flag through.

Manual client setup: run houdinimcp-bridge with no arguments. claude mcp add --transport stdio houdini -- houdinimcp-bridge for Claude Code.

From a clone: uv run python -m bridge.onboarding.install.

Layout: src/houdinimcp/ is the plugin, a TCP server inside Houdini on localhost:9877. src/bridge/ is the MCP server and the installer. Messages are JSON with a 4-byte length prefix. HOUDINIMCP_NO_HEADLESS=1 stops the headless start. Read AGENTS.md before you change code.

Credits

Built on blender-mcp, capoomgit/houdini-mcp, eetumartola/houdini-mcp, Houdini21MCP and fxhoudinimcp. MIT licensed.

Not affiliated with SideFX. Houdini and SideFX are trademarks of SideFX Software Inc.

Available Tools

20 tools
batchA
Destructive

Run several Houdini tools in one call.

Use it to build a network: many nodes, their wires and their parameters go
in one round trip and one undo group, and a person can undo the whole thing
with one keystroke.

Do not use it when a later step needs to read what an earlier step made.
The list runs without you in the middle, so nothing can branch on a result.

A failed batch changes nothing. Every step is checked before any step
runs, and a step with a wrong argument stops the batch. A step that fails
as it runs stops the list, and the steps before it are undone. A step whose
item failed is a failed step, and so is a parameter write that did not
apply. The error names the index of the step and its error.

Returns JSON with one result for each operation, in the order of the
operations, and the picture of every capture step.

A batch that works cooks the display node of each SOP network that it
touched: `check` gives its point and primitive counts, and the touched
nodes that have errors. Read it before you build on the result.

A capture step with no `output` writes to a file of its own, so one batch
can hold several captures.
ParametersJSON Schema
NameRequiredDescriptionDefault
operationsYesThe steps, in order. Each is {"tool": "<tool name>", "params": {...}}, with the arguments that the tool takes on its own. Any tool of this server except batch.

TDQS

A4.7/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations declare destructive/non-idempotent, and the description adds substantial context beyond them: validation-before-execution, the exact failure/rollback semantics (a failed batch changes nothing, prior steps undone), the error format naming step index, the return shape, and the side effect of cooking touched SOP networks so `check` must be read afterward.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Purpose and constraints are front-loaded in the first two paragraphs, failure semantics follow, and return behavior closes. Despite length, every paragraph carries a distinct operational fact with no filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a complex multi-step mutation tool with no output schema, the description covers the essentials: atomic rollback, error identification, return ordering, cook side effects, and capture file behavior. Nothing critical to calling it correctly is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, and the schema documents that each step is {"tool": ..., "params": ...} with any tool except batch. The description reinforces ordering ('in the order of the operations') but does not add syntax or format beyond the schema, so the baseline of 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The first sentence states a specific verb and resource: run several Houdini tools in one call. It is unmistakably the batch executor among siblings like cook, parm_set, and connect, which run one operation each.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It gives explicit when-to-use (building a network in one round trip and one undo group) and an explicit when-not-to-use condition: 'Do not use it when a later step needs to read what an earlier step made.' The branching limitation is stated as a hard rule.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

captureA
Idempotent

Make a picture of the scene and look at it.

Use it to confirm your own work: numbers in a node do not tell you that the
result looks wrong. Use it before you report that a task is done.

Do not use it for a final picture: render does that through a ROP.

The view goes back to where the user left it when the picture is written.
Nothing here changes the scene for good.

mode:
    "viewport" — the viewport as it is now.
    "quad"     — four pictures: top, front, right and perspective.
    "camera"   — through the camera node at `camera`.
    "flipbook" — a sequence over `frame_range` [start, end]. Returns the
                 path of the files, not a picture.
    "sheet"    — `node` at many frames on one picture, a tile for each
                 frame with its number, all from one camera that does not
                 move. Frames: `frames`, or `count` frames from `start`
                 (the current frame) at `step` (1). A step over 2 hides
                 movement and gives a warning: look at a short range at
                 step 1. `reference` is a picture to put first, to
                 compare. `columns`, `tile_width` set the grid. The
                 frames cook in order, forward, and the result gives
                 the cook seconds of each one.
    "movie"    — `node` over `frames` or `frame_range` (the playbar
                 range) as an MP4 at `fps`, `resolution` [width] wide.
                 Returns the path; open it in a player.
    Both draw with an OpenGL ROP, with or without a window, over a flat
    grey `background`. To see where a point attribute lives, use
    "sheet" with one frame and `color_by`, with `contour`, `slab` or
    `vectors`.

A Houdini with no window has no viewport, and there an OpenGL ROP draws the
same picture from the same arguments over a grey background. It runs in a
new hython, so the scene gets no camera and no ROP.

There is no picture of the network editor: every Houdini pane is a native
GL drawable, and Qt draws nothing into it. Read the graph with node_inspect.

Aim the view with `frame` and `fill`, with `target`, `look_from` and
`radius`, with `direction`, with `azimuth` and `elevation`, or with
`camera`.

Returns the picture, plus JSON with the state of the window: the frame, the
open file, the selection, the network in front, and which nodes carry the
display, the render and the template flag. A picture that does not change
after an edit is almost always a display flag on another node.

Houdini without a GUI has no viewport: then the result says so and names
the next action.
ParametersJSON Schema
NameRequiredDescriptionDefault
fpsNomovie: frames per second.
fillNoHow much of the picture the framed thing takes: 0.9 leaves air around it, 1.0 fills it.
modeNoOne of "viewport", "quad", "camera", "flipbook", "sheet", "movie".viewport
nodeNoThe node to look at. It gets the display flag for the picture, and the flag goes back after. The viewer shows its network, and goes back after. Without `frame`, the view also frames it.
slabNo[axis, thickness], for example ["z", 0.1]: draw only the points in a thin cut through the middle, so the inside of a solid cloud shows.
stepNosheet: the frames between tiles. Over 2 hides movement and gives a warning.
countNosheet: how many tiles, when frames is not given.
frameNoWhat to frame the view on: "selection", "all", or a node path (the box of what that node cooked).
startNosheet: the first frame. Without it, the current frame.
cameraNocamera mode: the camera node to look through. On a LOP network with `renderer`, a USD camera prim.
framesNoOne frame, a list, or {"start": 1, "end": 10, "step": 2}: one picture for each. sheet: the frames of the tiles. The playbar goes back after. A picture that holds only the background is an error.
outputNoThe file to write. Without it, a temporary file.
radiusNoThe distance between target and look_from.
settleNoSeconds that a renderer such as Karma draws before each picture. Karma starts from noise: 20 to 30 gives a clean frame. With frames or in flipbook mode it renders a sequence through the viewport, with no husk and no render license.
targetNo[x, y, z]: the point that the view turns around.
azimuthNoDegrees around the up axis, around what the view frames. 0 looks from the front. Nothing is added to the scene.
columnsNosheet: tiles in each row.
contourNosheet: a step. Colour by the fraction of the value over the step, so the lines of equal value show, for example the shells of a distance field.
shadingNoOne of "smooth", "smooth_wire", "flat", "wireframe".
vectorsNosheet: a scale. Draw a line along the color_by vector from up to about 3000 points. An empty result is an error.
color_byNosheet and movie: colour the points by this attribute, blue at the low end of color_range and red at the high end. A vector uses its length.
rendererNoThe Hydra renderer of a viewer on a LOP network, for example "Karma CPU". An unknown name lists the ones available.
directionNoThe view axis: "top", "front", "left", "right", "back", "bottom" or "persp".
elevationNoDegrees above the ground, with azimuth. 30 with azimuth 45 is a three-quarter view.
look_fromNo[x, y, z]: the point that the view looks from.
referenceNosheet: a picture file to put in the first tile, to compare.
backgroundNosheet and movie: the grey of the background, 0-255. Smoke reads best on mid grey.
resolutionNo[width, height] in pixels. The height follows the shape of the viewport, so the picture is not stretched.
tile_widthNosheet: the width of each tile in pixels.
color_rangeNo[low, high] for color_by. Without it, [0, 1].
frame_rangeNoflipbook and movie: [start, end].

TDQS

A4.7/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Goes well beyond the annotations: it discloses that the view and display flag are restored afterward ('Nothing here changes the scene for good'), that headless Houdini has no viewport and runs in a new hython with no camera or ROP, that flipbook/movie return paths rather than pictures, that frames cook in order, and that certain inputs emit warnings. This is exactly the temporary-mutation nuance that the readOnlyHint=false/destructiveHint=false annotations only hint at.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness3/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded purpose and mode list are good, but the prose is long and stylistically loose, and the headless 'no window has no viewport' point is made twice (once in the mode block, once later), which is wasted space for a 31-parameter tool.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

No output schema exists, yet the description explains the return (the picture plus JSON with frame, open file, selection, visible network, and display/render/template flags) and the headless failure path that names the next action. For a zero-required-parameter tool with 100% schema coverage, the agent has what it needs.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so baseline would be 3, but the description adds real cross-parameter routing the schema lacks: which parameters each mode consumes (sheet uses count/start/step/columns/tile_width, movie uses fps/frame_range/resolution), that step>2 hides movement and warns, and the aiming-equivalents among frame/fill/target/azimuth/elevation/camera. It stops short of documenting every parameter, so not a 5.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a concrete verb+resource ('Make a picture of the scene and look at it') and immediately distinguishes itself from the sibling that would otherwise be confusable, render, plus node_inspect for graph reading. An agent can pick this over render without opening either schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives explicit when-to-use ('confirm your own work', 'before you report that a task is done'), an explicit when-not ('Do not use it for a final picture: render does that through a ROP'), and names the alternative for the network-editor case. Nothing is left to inference.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

connectA
Idempotent

Change how nodes feed each other.

Use it after node_edit made the nodes. A list of wires goes in one undo
group and one round trip.

Do not use it to wire a node that you make now: node_edit mode "create"
takes `input_path` and wires it in the same call. Do not use it to read the
wires: scene_overview mode "network" lists them.

mode:
    "connect"    — src_path feeds dst_path. dst_input_index chooses the
                   input, src_output_index the output. Both count from 0.
                   A wire into an input that has one replaces it.
    "disconnect" — path loses the wire on input_index.
    "reorder"    — path takes its inputs in the order input_indices.

For several wires, give `items`: for "connect", each item has src_path and
dst_path, and can have dst_input_index and src_output_index; for
"disconnect", each item has path, and can have input_index.

Returns JSON, one line for each wire, with the paths that Houdini used.
An input index that the node does not have is reported, not dropped.
ParametersJSON Schema
NameRequiredDescriptionDefault
modeNoOne of "connect", "disconnect", "reorder".connect
pathNodisconnect and reorder: the node whose inputs change.
itemsNoA list of wires for "connect" or "disconnect", each a dictionary with the keys of one wire, for example {"src_path": "/obj/geo1/grid1", "dst_path": "/obj/geo1/mountain1"}. An argument outside items is the default for each one.
dst_pathNoconnect: the node whose input takes the wire.
src_pathNoconnect: the node whose output feeds the wire.
input_indexNodisconnect: the input that loses its wire, from 0.
input_indicesNoreorder: the old input indices in their new order, for example [1, 0].
dst_input_indexNoconnect: the input of dst_path, from 0.
src_output_indexNoconnect: the output of src_path, from 0.

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.8/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations cover the safety profile (readOnlyHint=false, idempotentHint=true), and the description adds genuinely new behavioral context: a wire into an occupied input is replaced, a batch of wires lands in one undo group and one round trip, and invalid input indices are reported rather than silently dropped. That is exactly the kind of operational detail the annotations do not carry.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Well front-loaded: purpose, then when-to-use/when-not-to-use, then mode semantics, then return shape. The mode block is somewhat verbose and partially duplicates schema descriptions, but every line is functional for a 9-parameter, 3-mode tool.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Covers all three modes, batching via `items`, index conventions, conflict resolution, and return format, and it even notes the outcome for invalid indices despite an output schema existing. An agent has everything needed to call it correctly on the first try.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so 3 is the floor, and the description earns above it by explaining what the indices mean behaviorally (count from 0, dst_input_index picks the input, replacement on conflict) and which keys each `items` entry takes per mode. It still restates a fair amount of what the schema already says, keeping it out of 5 territory.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The opening line names the resource (node wiring) and the mode list makes the specific operations concrete: connect, disconnect, reorder, each with the exact semantics of src_path/dst_path/indices. An agent can distinguish this from node_edit and scene_overview without opening any schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicit sequencing ('Use it after node_edit made the nodes') plus two named exclusions with the alternative to use instead: node_edit mode "create" for wiring a node made in the same call, and scene_overview mode "network" for reading wires. Nothing is left to inference.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

consoleA
Read-only

Read the Houdini log and the node errors.

Use it when something did not do what you expected. A cook error often
hides behind an empty result: the geometry has no points, and the reason is
here.

Do not use it for the errors of nodes that you cook now: cook returns them,
with the nodes upstream that failed. scene_overview mode "errors" lists every
node with a cook error, without the log.

Each call takes the log entries away, so a call returns only what is new
since the call before it.

Returns JSON.
ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoHow many log entries come back, the newest ones.
sourceNoKeep the entries whose source holds this text, for example "Python".
severityNoKeep one level only: "message", "important", "warning", "error" or "fatal".
root_pathNoThe network that node_errors walks, for example /obj or /stage./obj
node_limitNoHow many nodes with an error or a warning come back. Errors come first, and the report says how many it left out.
node_errorsNoAlso report the nodes under root_path that hold an error or a warning. False gives the log alone.

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.6/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

It discloses the crucial destructive trait absent from annotations: 'Each call takes the log entries away, so a call returns only what is new since the call before it.' This is a consumption side effect that matters operationally and is consistent with idempotentHint=false. The readOnlyHint=true annotation sits alongside, and the description clarifies the non-persistent read nature rather than contradicting it.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with purpose, then usage, then exclusions, then behavior. Every sentence earns its place except the trailing 'Returns JSON.', which is redundant given an output schema exists. Efficient overall with only that minor waste.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With an output schema present, the description need not explain return structure. It fully covers purpose, routing to siblings, and the log-consumption behavior, so an agent has everything required to call it correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so every parameter (limit, source, severity, root_path, node_limit, node_errors) is already fully documented in the schema. The description adds the relationship hint that root_path is 'the network that node_errors walks' but otherwise introduces no parameter detail beyond the schema, so the baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The opening sentence gives a specific verb (Read) and two concrete resources (the Houdini log and node errors). It is immediately distinguishable from cook (which returns live cook errors) and scene_overview (which lists erroring nodes), both named later in the description.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It states when to use it ('when something did not do what you expected', with the empty-geometry cook-error example), when NOT to use it ('Do not use it for the errors of nodes that you cook now'), and names the two alternatives (cook, scene_overview mode "errors") with the condition selecting each.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

cookA
Destructive

Force work to happen, and report what the work said and what it cost.

Use it to run a test: write a few parameters, cook a range of frames, and
read the seconds for each frame. That is one call, and it is the loop that
every look iteration needs.

Do not use it to read the result: geometry_inspect does that, and it cooks
the node as well.

mode:
    "cook"        — cook the nodes and return the errors, the warnings and
                    the time. `frames` or `frame_range` cooks over more
                    than one frame; the playbar goes back to where it was.
    "cache_write" — write the file cache of the node. frame_range is
                    [start, end]; without it the node writes its own range.
    "cache_clear" — remove the cached files of the node.
    "sim_step"    — step a DOP network num_steps frames.
    "sim_reset"   — clear the cache of a simulation, so that the next cook
                    runs it again. It accepts a DOP network and a solver
                    SOP such as a Pyro, FLIP, Vellum or RBD solver. After
                    you change anything inside a solver, reset it: the node
                    gives its old result back with no error and no warning.
                    On a solver SOP it cooks the sources first, cooks the
                    start frame after the reset, and reports the
                    primitives there. It fails when the result is empty
                    while the sources are not: that simulation stays
                    empty on every frame.

Returns JSON: the seconds in total, for each frame, and the slowest frame,
with the errors and the warnings of every node. Each frame also gives the
point count, the primitive count and the bounds of each SOP: one call
checks that a result moves or grows over a range. `ok` is false when a
node failed to cook, and `failed` then names each node upstream of it or
inside it that holds an error, with the text: the node that broke is
often another node than the one you cooked. A cook can take minutes:
the call waits, and a timeout does not stop the cook. Cook a long range in
parts of a few seconds, so that one call does not block Houdini past the
timeout.
ParametersJSON Schema
NameRequiredDescriptionDefault
modeNoOne of "cook", "cache_write", "cache_clear", "sim_step", "sim_reset". The description says what each one does.cook
forceNoCook even when Houdini thinks the node is up to date.
pathsYesThe node to cook, or a list of nodes.
framesNoOne frame, a list of frames, or {"start": 1001, "end": 1010, "step": 2}. For cook. The playbar goes back after.
num_stepsNoHow many frames sim_step steps the DOP network.
parametersNoValues to write before the cook, as {"/obj/geo1/pyro": {"divsize": 0.05}}. The result says which writes changed nothing.
frame_rangeNo[start, end]: every frame between. For cook and cache_write.

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.8/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations declare a destructive, non-idempotent mutation, and the description goes well beyond them: it explains playbar restoration, sim_reset's silent-stale-result failure mode, that a timeout does not stop the cook, and that a long cook should be split into parts. It also discloses the `ok`/`failed` upstream-error reporting and empty-simulation failure condition.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with a one-line summary, then usage, then a mode table, then returns; each section is purposeful. It is dense and occasionally restates schema text (playbar restoration, frame_range semantics), which keeps it from a 5.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a complex seven-parameter, multi-mode, destructive tool, the description covers every mode's behavior, the return contract, failure semantics, and timeout guidance. Nothing needed to invoke it correctly is missing, even though an output schema already exists.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the baseline is 3, but the description adds real meaning: it explains how mode selects the meaning of frames vs frame_range, that parameters writes report which changes had no effect, and the default range behavior for cache_write. This is above the schema-only baseline.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Force work to happen, and report what the work said and what it cost') and enumerates the five modes with distinct semantics. It explicitly differentiates itself from the sibling geometry_inspect, so an agent can select it without opening either schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives a concrete use case ('run a test: write a few parameters, cook a range of frames, and read the seconds'), and an explicit exclusion ('Do not use it to read the result: geometry_inspect does that, and it cooks the node as well'). When-to-use, when-not, and the alternative are all named.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

docsA
Read-onlyIdempotent

Read the official Houdini documentation.

This is the authority on every node, parameter, VEX function and HOM call.
Read the page before you use an API that you have not confirmed in this
session: names and enum members change between Houdini releases, and a
wrong one often fails without a message.

Do not answer from memory, and do not read sidefx.com yourself.

The pages come from the Houdini install on this machine, so they match the
build exactly. The first search on a build indexes it once, which takes a
few seconds; the index stays on disk. A page read never waits for it.

Give exactly one of `query` (search), `page` (read a page from a hit) or
`node` (the page of a node type). A node path is the only input that needs
Houdini.

Returns markdown for a page, JSON for a search.
ParametersJSON Schema
NameRequiredDescriptionDefault
nodeNoA node path in the scene, for example "/obj/geo1/attribwrangle1", or a node type name, for example "mountain". Returns the page of that node type.
pageNoA page path from a hit, for example "nodes/sop/copytopoints". A loose name or a sidefx.com address also works.
partNoA long page comes in parts of about 20,000 characters: 2, 3 and so on read the next ones.
buildNoThe Houdini build to read, for example "21.0.829". Default: the build of the attached session, then $HFS, then the newest build on this machine.
limitNoquery: how many hits come back.
queryNoWords to search, for example "copy to points". Returns the hits with their page paths.
sectionNoRead only the part of a page under one heading, for example "Quick renders and flipbooks". A long page lists its headings.
categoryNoquery: keep the search inside one folder, for example "nodes/sop", "vex/functions" or "hom/hou". node with a type name: the context, for example "sop" or "lop".

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.9/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations only cover the safe-read profile (readOnly/idempotent/not open-world). The description adds real behavior: pages come from the local install so they match the build, the first search indexes a build in a few seconds and persists to disk, and page reads never wait on the index. It also discloses return formats (markdown for a page, JSON for a search).

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with the purpose, then usage rules, then operational behavior, then the parameter contract. Short paragraphs, no filler; each sentence carries a distinct instruction or disclosure.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With an output schema present, return values need only light mention, and the description still summarizes them. Combined with the mode contract, build defaulting behavior (session build, then $HFS, then newest), and the indexing caveat, an agent has everything needed to call it correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% so the baseline is 3, but the description adds meaning beyond the schema by stating the mutually exclusive mode contract ('give exactly one of query, page, or node') which the schema does not express as a oneOf, and by noting that 'node' is the only input needing a live Houdini session. It does not add detail for part/build/section/limit/category.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Read the official Houdini documentation') and immediately scopes it ('the authority on every node, parameter, VEX function and HOM call'). This clearly separates it from all siblings, which manipulate or inspect the live scene rather than read reference docs.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicit when-to-use ('read the page before you use an API that you have not confirmed in this session'), why it matters (names and enum members change between releases and wrong ones fail silently), and explicit exclusions ('do not answer from memory, do not read sidefx.com yourself'). Nothing is left to inference.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

executeA
Destructive

Run code in Houdini, with the full hou module and no guard.

Use it for what no other tool covers, and to confirm an API in the live
session, for example `print(dir(hou.Node))`. The code runs with the rights
of the Houdini process: it can write files, delete nodes and quit Houdini.

Prefer a named tool when one exists. A write in code to a parameter that
holds an expression, that is disabled or hidden, or whose range clamps the
value changes nothing, and a write to a channel reference changes another
node. The answer lists each such write in `write_warnings`; read it. If you
write the same script twice, the named tool for it is missing: say so in
the feedback at the end of the session.

mode:
    "python"     — run `source` as Python. Returns stdout and stderr, and
                   keeps them when the script raises. Print what you want
                   to see: the value of the last line does not come back.
    "hscript"    — run `source` as an HScript command.
    "expression" — evaluate `source` as an expression. `language` is
                   "hscript" or "python".
    "vex_check"  — compile `source` as VEX and report the errors. Nothing
                   runs.
    "env"        — read the Houdini variable `name`, for example "HIP".
    "job"        — the state of the background job `job`: running, with
                   what it printed so far, or done, with its result.

Use `file` for a script that you run again with other values. Houdini
answers nothing while a script runs: for long work, such as a sweep, use
`background` with a large `timeout`. session action='interrupt' stops it.
ParametersJSON Schema
NameRequiredDescriptionDefault
jobNojob: the job id that background returned.
argsNofile: the values of sys.argv[1:].
fileNoA Python file to run instead of source, as from a shell: __file__ is its path, __name__ is "__main__", args are in sys.argv[1:]. The text travels once.
modeNoOne of "python", "hscript", "expression", "vex_check", "env", "job".python
nameNoenv: the Houdini variable to read, for example "HIP".
sourceNoThe code: Python, HScript, an expression or VEX, as mode says.
globalsNoNames that exist before the script runs, for example {"radius": 2.0}.
timeoutNoThe seconds the script may run. Past it, the script stops where it is, the answer says where, and what it changed stays.
languageNoexpression: "hscript" or "python".hscript
backgroundNopython: return at once with a job id and let the script run. Read it with mode job. Until it ends, other calls are refused.

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.8/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations declare destructive/openWorld/non-idempotent, but the description adds concrete consequences beyond them: code runs with Houdini process rights and can write files, delete nodes and quit Houdini; writes to expression-driven, disabled/hidden, or range-clamped parameters silently do nothing; channel-reference writes affect other nodes; write_warnings must be read. It also discloses blocking behavior ('Houdini answers nothing while a script runs', 'other calls are refused' during a background job) and that a timed-out script's changes persist.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with the capability, the danger, and the routing rule before the mode enumeration. Dense and mostly waste-free, though the mode list makes it long enough that some readers may skim past the write_warnings and blocking notes.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 10-parameter, output-schema-bearing power tool, it covers everything an agent needs: mode semantics, safety consequences, blocking/timeout behavior, and the write_warnings field it must read. Nothing essential is left to inference.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so baseline is 3, but the description goes further than the schema by explaining what each `mode` actually does — stdout/stderr retention on python, that vex_check compiles without running, that env reads a Houdini variable, that job reports running/output/done state. It also clarifies file/args/globals interplay and timeout persistence, adding real meaning over the terse schema strings.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Run code in Houdini') and immediately qualifies scope with 'with the full `hou` module and no guard', which distinguishes it from the named node/parameter tools. It also positions itself against siblings: 'Use it for what no other tool covers.'

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicit routing rules: 'Prefer a named tool when one exists', use `file` for re-run scripts, use `background` with a large `timeout` for long work, and session action='interrupt' to stop it. It even tells the agent what to do when it finds itself repeating a script (report the missing named tool in session feedback).

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

geometry_inspectA
Idempotent

Read the geometry that a node produces. This cooks the node.

Use it to confirm that a node made what you expected: the point count, an
attribute that a wrangle wrote, the shape of a volume, the size of the
bounding box.

Do not use it to read parameters: node_inspect does that.

mode:
    "summary"        — counts, attributes, groups, volumes, bounds. Start
                       here. An empty result carries the errors and the
                       warnings of the node, which is where the reason is.
    "points"         — `count` points from `start`, with `attribs`.
    "prims"          — `count` primitives from `start`.
    "attrib"         — the values of `attrib_name` on `attrib_class`
                       ("point", "prim", "vertex", "detail"): min, max
                       and mean of each component over every element,
                       and `limit` (10) values from `start`. A vector
                       attribute keeps its shape. unique=True returns each
                       value that occurs and how many elements carry it,
                       which is how you find the pieces in a geometry.
    "groups"         — the groups of `group_type`.
    "group_members"  — the members of `group_name`.
    "bbox"           — the bounding box.
    "intrinsics"     — the intrinsic values of primitive `prim_index`.
    "nearest"        — the point nearest to `position`, for example [0,1,0].
    "skeleton"       — a KineFX skeleton: each joint with its name, its
                       parent and its transform. `pattern` keeps the names
                       that match.
    "compare"        — the difference from the node at `against`. Points are
                       matched by `match_attrib` ("name" by default), not by
                       their order. Use it to prove that a new node gives
                       the result of the node it replaces.
    "try"            — run `steps`, a list of
                       {"node_type": ..., "parameters": {...}}, on the
                       geometry of `path` as verbs. Nothing changes in the
                       scene. Use it to learn what a node would make.
    "volume_stats"   — every volume or VDB: resolution, voxel size, the
                       extremes, the mean, the sum, percentiles. `name`
                       reads one, `bins` adds a histogram, `threshold`
                       counts the voxels below and above it and gives the
                       world box of the voxels above it.
    "volume_voxels"  — one field as an array indexed [z][y][x], with its
                       shape and its transform. `name` is the field.
                       `reduce` gives one answer instead: "sum", "mean",
                       "max", "min", or "project_x", "project_y",
                       "project_z" (the sum along that axis, a 2D array).
                       An array past `limit` numbers is thinned.
    "volume_sample"  — read `names` (fields) at `positions`, or at the
                       points of `from_node`, with no node added to the
                       scene. Returns min, max, mean, percentiles, a
                       histogram of `bins` (10), the counts on each side of
                       `threshold`, and the values when there are at most
                       `limit` (1000).
    "volume_compare" — how much of the field `name` sits in each band of the
                       field `against`. The answer to "how much smoke is
                       inside the collider". `from_node` holds `against`
                       when another node does, such as the collider SDF.
    "image"          — a COP node: resolution, planes, and `plane_name`.
    "volume"         — the VDB grids in a COP node.
    "export"         — write the geometry to disk. `format` is "obj",
                       "bgeo" or another that Houdini writes, and `output`
                       is the file path. A file that is there is
                       overwritten. The other modes write nothing.

Returns JSON. A large read is slow: keep `count` small and page with
`start`.
ParametersJSON Schema
NameRequiredDescriptionDefault
binsNovolume_stats, volume_sample, volume_compare: a count of equal bands, or a list of band edges, for example [-1, 0, 0.05, 0.15, 0.25].
modeNoOne of "summary", "points", "prims", "attrib", "groups", "group_members", "bbox", "intrinsics", "nearest", "skeleton", "compare", "try", "volume_stats", "volume_voxels", "volume_sample", "volume_compare", "image", "volume", "export".summary
nameNovolume_stats: one volume to read. volume_voxels, volume_compare: the field.
pathYesThe SOP or COP node to read, or a list. A list keeps going after a node that fails, and each result names its path.
countNopoints, prims: how many elements. Keep it small: a large read is slow.
limitNoattrib: how many values (10). volume_voxels: how many numbers before the array is thinned. volume_sample: return the values when there are at most this many (1000).
namesNovolume_sample: the fields to read.
startNopoints, prims, attrib: the first element. Page with it.
stepsNotry: a list of {"node_type": ..., "parameters": {...}} to run on the geometry as verbs. Nothing changes in the scene.
formatNoexport: the file type, for example "obj" or "bgeo".obj
framesNoRead at other frames, without moving the playbar: one frame, a list, or {"start": 1001, "end": 1010, "step": 2}. One answer for each frame.
outputNoexport: the file path to write.
reduceNovolume_voxels: one answer instead of the array: "sum", "mean", "max", "min", "project_x", "project_y" or "project_z".
uniqueNoattrib: return each value that occurs and how many elements carry it. That is how you find the pieces in a geometry.
againstNocompare: the node to compare with. volume_compare: the field whose bands hold the field `name`.
attribsNopoints: the attributes to return, for example ["P", "Cd"].
patternNoskeleton: keep the joints whose name matches.
positionNonearest: [x, y, z].
from_nodeNovolume_sample: read at the points of this node. volume_compare: the node that holds `against`, such as a collider SDF.
positionsNovolume_sample: the [x, y, z] points to read at.
thresholdNovolume_stats, volume_sample: count the voxels below and above it. volume_stats also gives the world box of the voxels above it.
group_nameNogroup_members: the group to read.
group_typeNogroups, group_members: "point", "prim", "vertex" or "edge".point
plane_nameNoimage: the COP plane to read, for example "C".C
prim_indexNointrinsics: the primitive to read.
attrib_nameNoattrib: the attribute to read.
attrib_classNoattrib: "point", "prim", "vertex" or "detail".point
match_attribNocompare: the attribute that pairs the points of the two nodes, not their order.name

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.8/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Discloses side effects beyond the annotations: cooking the node, that 'export' overwrites an existing file while 'the other modes write nothing', that 'try' leaves the scene unchanged, that an empty summary carries the node's errors/warnings, and a performance warning ('A large read is slow: keep count small and page with start'). This is consistent with readOnlyHint=false and adds real context.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with purpose, then when-to-use, then a scannable mode list, which is the right structure for a 19-mode tool. It is long, and some mode entries duplicate the schema's own parameter descriptions (bins, limit, reduce), but almost every sentence carries operational information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 28-parameter, 19-mode tool this covers the selection surface thoroughly: mode purposes, defaults, side effects, performance guidance, and multi-path/frames behavior. An output schema exists, so return-value shape is correctly left out.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is already 100%, so baseline is 3, but the description goes further by binding parameters to specific modes and explaining behavior the schema states only tersely (e.g. 'unique=True returns each value that occurs and how many elements carry it', 'An array past limit numbers is thinned', the skeleton 'pattern' filter). It is largely a restatement of the per-mode parameter map rather than new syntax detail.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Opens with a specific verb+resource ('Read the geometry that a node produces') and immediately scopes it against the closest sibling ('Do not use it to read parameters: node_inspect does that'). An agent can distinguish this from node_inspect without opening either schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly states when to use it ('confirm that a node made what you expected'), when not to ('read parameters'), and gives a recommended starting mode ('summary ... Start here'). It also routes the agent to the right mode for a given question (e.g. 'compare' to prove a replacement node matches, 'try' to learn what a node would make).

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

hdaA
Destructive

Read and change Houdini digital assets.

Use it when a node type comes from a .hda file: to find the file, to load a
new one, or to read the scripts and the help inside it.

Do not use it for the parameters of one node in the scene: node_inspect
does that.

mode:
    "list"        — the installed assets. `category` filters, for example
                    "Sop".
    "get"         — the definition of `node_type`: the file, the version
                    and the tools.
    "install"     — load the .hda file at `file_path` into the session.
    "uninstall"   — unload the .hda file at `file_path`.
    "reload"      — read the .hda file at `file_path` again, after an edit
                    on disk.
    "update"      — save the node at `node_path` back into its asset.
    "create"      — make an asset from the subnet at `node_path`, with
                    `name`, `label` and `file_path`.
    "sections"    — the section names inside `node_type`.
    "section_get" — the text of `section_name`, for example "PythonModule".
    "section_set" — write `content` into `section_name`.

Returns JSON. "install" and "uninstall" change every node of that type in
the session.
ParametersJSON Schema
NameRequiredDescriptionDefault
modeNoOne of "list", "get", "install", "uninstall", "reload", "update", "create", "sections", "section_get", "section_set".list
nameNocreate: the type name of the new asset.
labelNocreate: the name that the TAB menu shows.
contentNosection_set: the text to write into the section.
categoryNolist: keep one node category, for example "Sop".
file_pathNoinstall, uninstall, reload: the .hda file. create: the file to write.
node_pathNoupdate: the node to save into its asset. create: the subnet to make an asset from.
node_typeNoget, sections, section_get, section_set: the asset type, as list names it, for example "labs::edge_damage::1.0", or with its category, "Sop/labs::edge_damage::1.0".
section_nameNosection_get, section_set: the section, for example "PythonModule".

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already flag destructiveHint=true and readOnlyHint=false; the description adds the key scope warning that 'install' and 'uninstall' change every node of that type in the session, and notes the return type (JSON). It does not call out which modes are read-only vs mutating explicitly, but the destructive blast radius is disclosed.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with purpose and routing, then a well-structured mode-by-mode list where each line adds actionable detail. Slightly verbose overall but nearly every sentence earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists so return values needn't be explained, and the description covers all ten modes with their parameter bindings plus the session-wide side effect. Complete enough for correct invocation, with only minor gaps in per-mode read/write labeling.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the schema already binds each parameter to its modes (the baseline would be 3). The description adds semantic value by explaining what each mode does with the parameters, e.g. section_set writes `content` into `section_name` and install loads the file at `file_path`.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb+resource ('Read and change Houdini digital assets') and immediately scopes the domain to .hda files. It explicitly distinguishes itself from the sibling node_inspect, so an agent can route correctly without opening schemas.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives explicit when-to-use ('when a node type comes from a .hda file') and when-not ('Do not use it for the parameters of one node in the scene: node_inspect does that'), naming the alternative. The mode list further maps each intent to an action.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

node_editA
Destructive

Change the nodes in a network. One item, or a list in one undo group.

Use it to build a network. Then use parm_set for the values, and connect
for the wires.

Do not use it to set parameters: parm_set does that, and it reports a write
that had no effect.

mode, and the arguments that each mode reads:
    "create"           — node_type, parent_path, name, position,
                         parameters, input_path. context selects the
                         network kind: "sop" (default), "cop", "chop",
                         "lop", "material_network".
    "delete"           — path, of a node, a sticky note or a network box.
    "copy"             — paths (or path), destination_path, suffix,
                         names. Copies a set of nodes with the wires
                         between them; a wire from outside the set goes to
                         the same node. suffix is added to each name, or
                         names maps a source path or name to a new name.
                         Returns `copies`, each source path with the path
                         of its copy: use that map, never the order of a
                         list. Without destination_path the copies go to
                         the right of the sources.
    "move"             — path with destination_path to put it in another
                         network, or path with position to move it on the
                         canvas.
    "rename"           — path, new_name.
    "flags"            — path, display, render, bypass. The display flag
                         and the render flag are different flags.
    "color"            — path, color as [r, g, b] from 0 to 1.
    "layout"           — path: lay out the children of that network in
                         rows, each node under its inputs. Give `paths` to
                         place only those nodes next to what they connect
                         to. Without it the whole network moves, including
                         the nodes the user placed by hand, and the result
                         says so.
    "wrangle"          — parent_path with code to make a wrangle, or path
                         with code to write into one. code_file reads the
                         code from a file, so a long snippet travels once.
                         replace edits a snippet in place: a list of
                         {"old": ..., "new": ...}, and each `old` must
                         appear exactly once.
    "material"         — path, material_type, name, parameters.
    "assign_material"  — path, material_path.
    "take"             — name to make a take, or take_name to select one.
    "current_network"  — path: what the network editor shows.
    "note"             — parent_path, text, position, color: a sticky
                         note. Without position it goes to the right of
                         the nodes.
    "box"              — paths, text, color: a network box around those
                         nodes, with text as its comment.

Returns JSON. Houdini adds a numeric suffix when a name is already used, so
read the path in the result and use that path from then on. Never look the
node up again by the name you asked for.
ParametersJSON Schema
NameRequiredDescriptionDefault
codeNowrangle: the VEX snippet.
modeNoOne of "create", "delete", "copy", "move", "rename", "flags", "color", "layout", "wrangle", "material", "assign_material", "take", "current_network", "note", "box".create
nameNocreate, material: the name of the new node. take: the name of a new take.
pathNoThe node to change. layout: the network. delete: a node, a sticky note or a network box.
textNonote: the text of the note. box: the comment of the box.
colorNocolor, note, box: [r, g, b] from 0 to 1.
itemsNoA list of items for a repeated action, each a dictionary with the keys of one call. An argument outside items is the default for each one.
namesNocopy: a new name for each source, by source path or name.
pathsNocopy: the nodes to copy. layout: place only these nodes. box: the nodes to put in the box.
bypassNoflags: the bypass flag.
renderNoflags: the render flag, which is not the display flag.
suffixNocopy: text added to the name of each copy.
contextNocreate: the network kind, "sop" (default), "cop", "chop", "lop" or "material_network".
displayNoflags: the display flag.
replaceNowrangle: edit the snippet in place, a list of {"old": ..., "new": ...}. Each old must appear exactly once.
new_nameNorename: the new name.
positionNocreate, move, note: [x, y] on the canvas.
code_fileNowrangle: read the VEX from this file, so a long snippet travels once.
node_typeNocreate: the node type, for example "box" or "attribwrangle".
take_nameNotake: the take to make current.
input_pathNocreate: the node that feeds the new node. It saves a connect call and places the node under its input.
parametersNocreate, material: values to set on the new node, by parameter name.
parent_pathNocreate, wrangle, note: the network that gets the new node.
material_pathNoassign_material: the material node.
material_typeNomaterial: the shader type, for example "principledshader".
destination_pathNocopy, move: the network to put the nodes in.

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.6/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already flag destructiveHint=true, readOnlyHint=false. The description adds real value beyond them: undo-group batching, the warning that 'layout' moves hand-placed nodes, that delete also removes sticky notes/boxes, copy wire-following behavior, and the critical Houdini auto-suffix caveat plus 'never look the node up again by the name you asked for.'

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Long, but for a 26-param, 15-mode dispatcher the length is justified and heavily structured with a mode-to-arguments table. The purpose and the parm_set/connect routing are front-loaded. Slightly dense but no clearly wasted sentence.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's complexity, nested params, and 15 modes, the description is complete: it covers argument selection per mode, undo semantics, and the key post-call invariant about reading the returned path. An output schema exists, so return-value details are not required here.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the baseline is 3, but the description goes further by grouping arguments by mode and stating cross-parameter interactions (path vs destination_path for move, replace's 'must appear exactly once' rule, code_file for long snippets) that the flat schema does not convey.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb (change/edit) and resource (nodes in a network) and immediately distinguishes itself from siblings by naming parm_set for values and connect for wires. The mode list makes the full scope of the tool concrete.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly routes the agent: build the network with this, set values with parm_set, make wires with connect, and 'Do not use it to set parameters: parm_set does that.' This is textbook when/when-not/alternative guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

node_inspectA
Read-onlyIdempotent

Read one node, or a list of nodes, without changing anything.

Use it before you write: to confirm a parameter name, to see whether a
parameter carries an expression, and to read what a node reports after a
cook.

Do not use it to list a network: scene_overview does that.

mode:
    "info"            — type, inputs, outputs, flags, changed parameters.
    "parms"           — every parameter, or one parameter when you give
                        `parm`. The result says whether the value comes
                        from an expression.
    "schema"          — the parameter templates: types, ranges, menus.
                        Read this before you write a menu parameter.
    "changed"         — only the parameters that a person set: not at the
                        default, or with an expression or keys. Folders,
                        labels, buttons and hidden fields are left out, and
                        a ramp is one entry with its keys.
    "names"           — the names of the parameters, and nothing else. Read
                        this first when you do not know the name to write.
    "expression"      — the expression on `parm`, and its language.
    "keyframes"       — the keys on `parm`.
    "code"            — the VEX snippet in a wrangle node.
    "cook_chain"      — what this node cooks from, upstream.
    "explain"         — a short account of what the node does here.
    "material"        — the shader parameters of a material node.
    "image"           — the COP node: resolution, planes, data type.
    "channels"        — CHOP channels. `channel`, `start` and `end` read
                        the samples of one channel.
    "simulation"      — the DOP network. `object_name` reads one object,
                        with `field_name` one field of it.
    "render_settings" — the parameters of a ROP node.
    "cache"           — the file cache state of a node.
    "time_dependency" — which nodes under this one cook again on every
                        frame, and what makes each one do it. With
                        `frames` it times each one and sorts by the time.
    "validate"        — the names in the parameters of the node that name
                        nothing: a group, an attribute or a volume that the
                        input geometry does not hold. That is the failure
                        that gives a wrong result with no error.
    "layout"          — for a network: each node that sits above its input,
                        and each pair of nodes in one slot, where one name
                        covers the other. Read it after you add nodes.
    "readers"         — the parameters that read `parm` through a channel
                        reference or an expression: what else a write to
                        it changes.

A solver has hundreds of parameters: give pattern or fields.

Returns JSON. A cook error comes back in the result: an empty geometry with
no error line means the node cooked and made nothing.
ParametersJSON Schema
NameRequiredDescriptionDefault
endNochannels: the last sample frame.
modeNoOne of "info", "parms", "schema", "changed", "names", "expression", "keyframes", "code", "cook_chain", "explain", "material", "image", "channels", "simulation", "render_settings", "cache", "time_dependency", "validate", "layout", "readers".info
parmNoparms, expression, keyframes, readers: the parameter name.
pathsYesOne node path, or a list. A list keeps going after a node that fails, and each result names its path.
startNochannels: the first sample frame.
fieldsNoparms, changed: keep only these keys of each parameter, for example ["value", "expression"]. The name is always kept.
framesNoRead at another frame, or at several: one frame, a list, or {"start": 1, "end": 10, "step": 2}. With time_dependency, time each node. The playbar goes back after.
channelNochannels: the CHOP channel whose samples to read.
patternNoparms, changed: keep the parameters whose name or label holds this text or matches it as a glob. "|" separates alternatives: "time|step|cfl".
field_nameNosimulation: the field of object_name to read.
object_nameNosimulation: the DOP object to read.
has_expressionNoparms: keep only the parameters that carry an expression.
include_all_parmsNoinfo: list every parameter, not only the ones that changed.

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.8/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already cover the safety profile (readOnlyHint, idempotentHint), yet the description still adds real behavioral context: a failed node in a list does not abort the rest and each result names its path, the playbar is restored after multi-frame reads, and an empty geometry with no error line means the node cooked and produced nothing. That is disclosure beyond what the annotations provide.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with purpose, usage and exclusion before the mode reference, which is well structured as a scannable block. The size is largely justified by 20 mode values, though several lines are chatty ('and nothing else', 'Read this first when you do not know the name to write') and could be tightened.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 13-parameter, 20-mode inspection tool with an output schema and full annotation coverage, the description covers mode semantics, pre-write usage, failure behavior and list semantics. Nothing an agent needs to select a mode and call it correctly is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the per-parameter terse descriptions already exist; the description adds value by binding parameters to modes ('With `frames` it times each one', '`channel`, `start` and `end` read the samples of one channel', 'give pattern or fields' for solvers) and by expanding every `mode` value beyond the schema's flat list. It stops short of adding format/syntax detail beyond that.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Opens with a specific verb and resource plus scope: 'Read one node, or a list of nodes, without changing anything.' It then explicitly distinguishes itself from the sibling that could be confused with it: 'Do not use it to list a network: scene_overview does that.'

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives an explicit usage trigger ('Use it before you write: to confirm a parameter name, to see whether a parameter carries an expression...'), an explicit exclusion, and names the alternative tool (scene_overview) for the excluded case. It also routes within itself ('Read this first when you do not know the name to write', 'Read it after you add nodes').

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

parm_setA
Destructive

Write parameter values, or press a button. One write, or a list in one undo group.

Use it after node_inspect has confirmed the parameter name and the type.

A write can be accepted and change nothing, and Houdini says nothing. This
tool looks for all six causes and names the one it found:
  - the parameter carries an expression, which still decides the value;
  - the parameter is animated, so the value became a new key;
  - the parameter is locked;
  - another parameter disables or hides it, so the cook does not read it;
  - a strict range clamped the value;
  - the parameter reads another node through a channel reference, so the
    write would change that other node. It is refused; give
    `follow_reference=true` to write the node at the other end.
Read `warnings` and `not_applied` in the result before you report success.

mode, and the arguments that each mode reads:
    "value"           — path, parm, value. Or path and parameters, a
                        dictionary of several names and values. A menu
                        takes its token, for example "custom". A
                        bit-field menu takes a token or a list of them.
    "press"           — path, parm: press a button, for example Save to
                        Disk on a File Cache, Reload on a File SOP, or
                        Resimulate on a solver. The result holds the errors
                        and the warnings of the node after the press,
                        because work that a button starts fails later and
                        in silence.
    "expression"      — path, parm, expression, language ("hscript" or
                        "python").
    "keyframe"        — path, parm, frame, value.
    "keyframes"       — path, parm, keyframes: a list of {frame, value}.
    "delete_keyframe" — path, parm, frame.
    "revert"          — path, parm: back to the default, and the
                        expression goes away.
    "lock"            — path, parm, locked.
    "link"            — src_path, src_parm, path, parm: the parameter at
                        path follows the one at src_path.
    "spare"           — path, parameters: a list of controls to add, each
                        {name, label, type, default, min, max, strict,
                        help, value, expression, items}. type is "float",
                        "int", "vector", "toggle", "string", "menu" (with
                        items), "ramp" or "color_ramp" (default: a list of
                        [position, value]). One control can also come as
                        name, label, parm_type, default, expression.
                        On a wrangle it first does what the Create
                        Parameters button does, a parameter for each ch()
                        call, and puts every control in that folder above
                        the code. Use it instead of numbers typed into VEX:
                        the user tunes these. A control that exists is
                        replaced in place, so a second call is safe.
    "render_settings" — path, settings for a ROP node.
    "chop_export"     — chop_path, channel_name, path, parm.
    "snapshot"        — name, paths: save every parameter of these nodes,
                        with expressions, keys and the bypass flag, to the
                        record `name` on disk. "/obj/geo1/*" names every
                        node in a network. It overwrites a record of the
                        same name.
    "restore"         — name: put the record back, and list what changed.
                        `paths` limits it to some of the nodes.
    "diff"            — name: list how the scene differs from the record.
                        Changes nothing.
                        In a sweep, restore before each variant, not once
                        at the end: a variant that does not name a
                        parameter keeps the value of the one before.

Returns JSON with the value before, the value after, and a reason when the
write did not take.
ParametersJSON Schema
NameRequiredDescriptionDefault
modeNoOne of "value", "press", "expression", "keyframe", "keyframes", "delete_keyframe", "revert", "lock", "link", "spare", "render_settings", "chop_export", "snapshot", "restore", "diff".value
nameNospare: the name of one control. snapshot, restore, diff: the record on disk.
parmNoThe parameter name, for example "tx" or "divsize".
pathNoThe node that holds the parameter.
frameNokeyframe, delete_keyframe: the frame of the key.
itemsNoA list of writes, each a dictionary with the keys of one call. An argument outside items is the default for each one.
labelNospare: the label of one control.
pathsNosnapshot: the nodes to save; "/obj/geo1/*" names every node in a network. restore: put back only these nodes.
valueNovalue, keyframe: the value to write. A menu takes its token.
lockedNolock: true locks the parameter, false unlocks it.
defaultNospare: the default of one control.
languageNoexpression: "hscript" or "python".hscript
settingsNorender_settings: the ROP parameters to write, by name.
src_parmNolink: the parameter to follow.
src_pathNolink: the node to follow.
chop_pathNochop_export: the CHOP node.
keyframesNokeyframes: a list of {frame, value}.
parm_typeNospare: the type of one control, for example "float" or "toggle".
expressionNoexpression: the expression text.
parametersNovalue: several names and values in one write, as a dictionary. spare: the list of controls to add.
channel_nameNochop_export: the channel that drives the parameter.
follow_referenceNoWrite the node at the other end of a channel reference. Without it, a write through a reference is refused.

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.7/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations only supply the generic destructiveHint/readOnlyHint/idempotentHint profile; the description adds substantial non-obvious behavior: the six causes of a silently-accepted no-op write, the refusal of writes through channel references unless follow_reference=true, the instruction to read warnings and not_applied before reporting success, snapshot overwriting an existing record, and diff being a no-op. This is exactly the context annotations cannot carry.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Long, but it is front-loaded (purpose, prerequisite, failure modes, then mode-by-mode arguments) and nearly every sentence carries operational weight. The mode enumeration partly restates the schema's mode enum, which is the main redundancy, but the per-mode argument detail justifies the length for a 15-mode tool.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists, so return values need not be explained, and the description still adds the key caveat that success must be verified via warnings and not_applied. With 15 modes, 22 optional parameters and nested objects, nothing an agent needs to invoke this correctly appears to be missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so baseline is 3, but the description goes well past the schema: it maps every mode to the arguments it reads, clarifies menu/bit-field token syntax, and documents the spare control dictionary (name, label, type, default, min, max, strict, help, value, expression, items) with per-type defaults like ramp as [position, value]. That is meaning beyond the schema's per-field strings.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Opens with a specific verb and resource — 'Write parameter values, or press a button' — and immediately scopes batching ('One write, or a list in one undo group'). It also positions itself relative to sibling node_inspect ('Use it after node_inspect has confirmed the parameter name and the type'), so an agent can route between inspection and mutation without opening a schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives a real prerequisite (confirm name/type via node_inspect first), mode-selection guidance ('Use it instead of numbers typed into VEX' for spare), and workflow guidance ('In a sweep, restore before each variant, not once at the end'). It does not name alternative siblings for overlapping mutations (e.g. node_edit), so it stops short of explicit when-not-to-use routing.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

pdgA
Destructive

Cook a TOP network, and read what its work items did.

Use it for a TOP network only. A TOP node does not cook like a SOP: it
makes work items, and each item runs on its own. For a SOP or a DOP, use
cook. For a ROP, use render.

mode:
    "status"    — the counts for each state, and whether a cook runs now.
    "workitems" — the items. `state` filters, for example "failed".
    "cook"      — start the cook. The call comes back at once; read
                  "status" after it to follow the work.
    "dirty"     — mark the node dirty. `dirty_all` also removes the
                  outputs on disk.
    "cancel"    — stop the cook that runs now.

Returns JSON. A failed item holds the command and the log path: read those
before you change the network.
ParametersJSON Schema
NameRequiredDescriptionDefault
modeNoOne of "status", "workitems", "cook", "dirty", "cancel".status
pathYesThe TOP network or the TOP node.
stateNoworkitems: keep the items in this state, for example "failed" or "cooked".
dirty_allNodirty: also remove the outputs of the node on disk.

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.8/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Adds substantial behavior beyond the annotations: cook is asynchronous and returns immediately, cancel stops the currently running cook, dirty_all deletes outputs on disk (the concrete destructive action behind destructiveHint=true), and failed items carry a command plus log path. Nothing contradicts the readOnlyHint=false / destructiveHint=true / idempotentHint=false annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with purpose then routing, followed by a clean mode list — every line earns its place. The multi-line indented mode block is slightly heavy for a four-parameter tool, but there is no filler or repeated content.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists, so return values need not be spelled out, yet the description still flags the actionable failure detail (command + log path) and warns to read it before mutating the network. All five modes, the async cook lifecycle, and the destructive dirty_all path are covered.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the baseline is 3, but the description goes further by defining the semantics of each mode value and how `state` filters results (e.g. "failed") and what `dirty_all` actually removes. It stops short of documenting the `path` parameter's accepted forms beyond 'TOP network or TOP node'.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb+resource pair ('Cook a TOP network, and read what its work items did') and immediately differentiates itself from the sibling tools cook (SOP/DOP) and render (ROP). An agent can pick this over cook/render without opening either schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly scopes usage ('Use it for a TOP network only') and routes alternatives by node type: cook for SOP/DOP, render for ROP. It also enumerates every mode with a when-to-use condition, including the async cook pattern ('start the cook... read status after it to follow the work').

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

playbarA
Idempotent

Read or set the time of the session.

Use it before you read geometry that changes over time: a SOP cooks at the
current frame, so the frame decides what you see.

Do not use it only to read another frame: geometry_inspect, node_inspect
and stage_inspect take `frames` and put the playbar back after. A frame
that you set here stays for the person and for every later call, and
"range" also changes what a flipbook covers, and a ROP whose range
follows $FSTART and $FEND.

mode:
    "get"      — the current frame and time.
    "frame"    — go to `frame`.
    "range"    — set the scene frame range to `start` and `end`.
    "playback" — set the playback range inside the scene range.
    "play"     — `action` is "play", "stop", "next", "previous", "start"
                 or "end". Playback needs a GUI.

Returns JSON.
ParametersJSON Schema
NameRequiredDescriptionDefault
endNorange and playback: the last frame.
modeNoOne of "get", "frame", "range", "playback", "play".get
frameNoframe: the frame to go to.
startNorange and playback: the first frame.
actionNoplay: "play", "stop", "next", "previous", "start" or "end".

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.6/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Goes well beyond the annotations by disclosing persistent side effects: a frame set here 'stays for the person and for every later call', and 'range' also alters flipbook coverage and ROP ranges bound to $FSTART/$FEND. It also notes playback requires a GUI. It does not, however, clarify how 'get' versus mutation modes interact with the declared idempotentHint for playback actions, leaving one small behavioral ambiguity.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loads the one-line purpose and the key timing constraint before the mode enumeration, and every sentence carries information. The mode list is necessarily long for a five-mode tool, though the parenthetical explanation of the 'play' action values duplicates the schema slightly.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a multi-mode read/write session tool with an output schema available, the description covers timing, alternatives, per-mode semantics, persistence, and the GUI prerequisite. An agent has everything needed to choose a mode and call it correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the baseline is 3, but the description adds real meaning: each mode value is glossed ('range' sets the scene frame range vs 'playback' sets the playback range inside the scene range), which the schema's bare enum list does not convey. The start/end/frame/action roles are also tied to specific modes.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a precise verb pair and resource ('Read or set the time of the session') and immediately names the operational context (SOP cooks at the current frame). It is clearly distinguishable from siblings like node_edit or render, which do not touch the session playhead.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives an explicit when-to-use ('before you read geometry that changes over time') and an explicit when-not-to-use, naming three alternatives (geometry_inspect, node_inspect, stage_inspect) and the parameter ('frames') that makes them preferable. Nothing is left to inference.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

renderA

Start a render, read its settings, or watch it run.

Use it for a final picture through a ROP node. For a fast look at the
viewport, use capture instead: it is much quicker.

mode:
    "start"    — render the ROP at `path`. `frame_range` is [start, end];
                 without it the node renders its own range. A render can
                 take a long time.
    "progress" — what the ROP reports about the render.
    "settings" — the output file, the camera, the resolution and the
                 renderer of the ROP.
    "create"   — make a ROP of `render_type` ("opengl", "karma", "mantra",
                 "ifd", …) named `name` under `parent_path`.
    "watch"    — count the husk and mantra processes on this machine, and
                 say whether the file at `output_path` is there and how big
                 it is. This mode does not need Houdini, so it also works
                 while Houdini is busy with the render.

Returns JSON. A render that writes no file, with no process running, has
failed: read the node with cook to see the error.
ParametersJSON Schema
NameRequiredDescriptionDefault
modeNoOne of "start", "progress", "settings", "create", "watch".start
nameNocreate: the name of the new ROP.
pathNostart, progress, settings: the ROP node.
frame_rangeNostart: [start, end]. Without it the ROP renders its own range.
output_pathNowatch: the image file to look for on disk.
parent_pathNocreate: the network that gets the ROP./out
render_typeNocreate: the ROP kind, for example "opengl", "karma", "mantra" or "ifd".opengl

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.7/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description goes beyond the annotations by detailing each mode's behavior, such as that a render can take a long time, that 'watch' counts processes and checks file existence, and that it works even when Houdini is busy. It also explains failure conditions and how to debug. Annotations only provide generic hints, while the description adds substantial operational context.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is well-structured, front-loaded with the main purpose, then details modes, returns, and error handling. It is concise and every sentence adds value.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's complexity (7 parameters, multiple modes) and the presence of an output schema, the description provides all necessary context: mode behaviors, return format, failure diagnosis, and alternative tool. It is complete for an agent to use correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the schema already documents all parameters. The description adds some mode-specific context (e.g., what frame_range means, what output_path is for) but largely repeats what is in the schema descriptions. Baseline of 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool starts, reads, or watches a render, and it explicitly differentiates itself from the sibling 'capture' by explaining that render is for a final picture through a ROP node, while capture is a faster viewport look. This distinguishes it from siblings.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It gives explicit guidance on when to use this tool versus the alternative ('capture'), and it details the different modes and their purposes, including when to use 'watch' (for monitoring without Houdini). It also explains failure condition and how to diagnose it.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

scene_fileA
Destructive

Read, save or load the scene file, or step its undo history.

Use "save" before a change that is hard to undo, and use "info" to learn
whether the session holds work that is not saved.

mode:
    "info" — the file name, the frame range, the counts, and whether the
             session has changes that are not saved.
    "save" — save to `path`, or over the open file when `path` is empty.
    "load" — open the .hip file at `path`. Everything in the session goes
             away, and the undo history with it.
    "undo" — undo `count` steps. Each call of a tool that changes the
             scene is one step. A batch is one step, except a batch with a
             step that waits (capture, render): there each step is one.
             Returns the labels it undid and the next ones.
    "redo" — redo `count` steps.

Returns JSON.
ParametersJSON Schema
NameRequiredDescriptionDefault
modeNoOne of "info", "save", "load", "undo", "redo".info
pathNosave: the file to write; empty saves over the open file. load: the .hip file to open.
countNoundo and redo: how many steps.

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.6/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Goes well beyond the annotations (destructiveHint=true, readOnlyHint=false) by spelling out that 'load' discards everything in the session and the undo history, and by defining what constitutes an undo step (one scene-changing tool call, a batch as one step except when it waits on capture/render). This is exactly the behavioral detail annotations cannot convey.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loads the one-line purpose, then a usage hint, then a clean mode list. The undo-step paragraph is somewhat verbose but each sentence carries operational meaning, so little is wasted.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Output schema exists so return values need no elaboration, and the description still notes 'Returns JSON' plus which mode returns undone labels. Destructive 'load' behavior and undo semantics are disclosed, leaving no gap for correct invocation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% (baseline 3), but the description adds real meaning: it explains what each mode does with `path` (save over open file when empty, open .hip on load) and what `count` means per undo step. This exceeds the schema's terse per-parameter notes.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb set and resource (read/save/load the scene file, step its undo history) and enumerates all five modes with their exact effect. An agent can distinguish this from siblings like scene_overview or session without opening the schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives explicit when-to-use guidance for two modes: 'save' before a hard-to-undo change, and 'info' to check for unsaved work. It does not name alternative tools or state when NOT to use this one (e.g. versus scene_overview), so it stops short of full routing guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

scene_overviewA
Read-onlyIdempotent

List what the scene holds. Start here, before you touch a node.

Use it to find a node path, to see the shape of a network, or to learn
which node types this Houdini has.

Do not use it to read one node in detail: node_inspect does that. Do not
use it to read geometry: geometry_inspect does that.

mode:
    "scene"        — file, frame range, counts, and the top of the tree.
    "network"      — the children of one network, with their connections.
    "children"     — the children of `path`. recursive=True walks down.
    "search"       — nodes whose name matches `pattern`, under `path`.
                     node_type filters by type name.
    "node_types"   — the node types this Houdini has, for one `category`
                     such as "Sop", "Object", "Lop", "Driver".
    "errors"       — every node under `path` that has a cook error.
    "materials"    — the materials in `path` (default /mat) and the types.
    "lights"       — the lights on the USD stage of the LOP node `path`.
    "takes"        — the takes, and which take is current.
    "caches"       — file caches under `path` and their state on disk.
    "render_nodes" — the ROP nodes in /out.
    "viewports"    — the panes, and what the scene viewer shows.

Returns JSON. A path that does not exist comes back as an error, not as an
empty list.
ParametersJSON Schema
NameRequiredDescriptionDefault
modeNoOne of "scene", "network", "children", "search", "node_types", "errors", "materials", "lights", "takes", "caches", "render_nodes", "viewports".scene
pathNoA node path such as "/obj" or "/obj/geo1": the network to list or to search.
patternNosearch: the name to match, with * and ? as wildcards.
categoryNonode_types: the context, for example "Sop", "Object", "Lop" or "Driver".
node_typeNosearch: keep the nodes of this type, for example "null".
recursiveNochildren: also list the children of the children.

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.7/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already cover the safety profile (readOnly, idempotent, openWorld=false), yet the description still adds a concrete behavioral fact the annotations do not: a nonexistent path returns an error rather than an empty list. It also documents recursion behavior per mode. It stops short of cost/performance or output-shape hints, but the safety-critical ground is already covered by annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded purpose, then usage constraints, then the mode catalog, then a return-behavior caveat. The long mode list is necessary because the schema exposes mode as a free-form string with no enum, so every line earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists, so return-value detail is unnecessary; the description still notes JSON output and the error-vs-empty-list distinction. All 12 modes are enumerated and mapped to their parameters, which is exactly what is missing from the schema for this multi-purpose tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the baseline is 3, but the description meaningfully binds parameters to modes (pattern/node_type only for search, category only for node_types, recursive only for children), which the flat schema does not convey. This is genuine added meaning beyond the schema, though it largely paraphrases the per-parameter text.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific action and resource ("List what the scene holds") and positions itself as the entry point ("Start here, before you touch a node"). It explicitly names the two siblings it is not (node_inspect for one node, geometry_inspect for geometry), so an agent can discriminate without opening any schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives an explicit ordering instruction plus two explicit when-not clauses routed to named alternatives. The per-mode breakdown further tells the agent which mode to pick for which question, leaving little to inference.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

selectA
Idempotent

Read the node selection, or set it.

Use it to see what the person works on before you change the scene, and to
show them your result when you are done. Do not use it to find nodes:
scene_overview mode "search" does that.

A path is the full path of a node, for example "/obj/geo1/mountain1". A
path that is not a node stops the call with an error, and the selection
stays as it was.

Returns JSON with the selected paths.
ParametersJSON Schema
NameRequiredDescriptionDefault
pathsNoLeave it out to read the selection. One path or a list of paths replaces it. An empty list clears it.

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.6/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=false, idempotentHint=true and destructiveHint=false, so the description's job is to add context beyond that, which it does: an invalid path aborts the call and leaves the selection unchanged, and the return is JSON with the selected paths. It stops short of stating permission or concurrency implications of a mutation, so a 4 rather than a 5.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with the core read/write distinction, then usage, then the path format contract. The line-broken layout is slightly choppy but every sentence carries distinct information and none is redundant.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a single-parameter dual-mode tool with annotations covering the safety profile and an output schema covering return shape, the description supplies everything needed: both modes, usage conditions, the alternative for searching, path format, and failure behavior.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% and the schema already documents the three modes (omit to read, one/list to replace, empty list to clear). The description adds value on top of that by giving the path format with a concrete example ("/obj/geo1/mountain1") and the error behavior for a non-node path.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The opening sentence states a specific verb and resource with both modes: 'Read the node selection, or set it.' It then explicitly distinguishes itself from the sibling that could be confused for it (scene_overview mode "search"), so an agent can pick correctly without opening either schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives explicit when-to-use contexts ("see what the person works on before you change the scene, and to show them your result when you are done") and an explicit when-not-to-use with the alternative named ("Do not use it to find nodes: scene_overview mode 'search' does that"). Nothing is left to inference.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

sessionA
Destructive

Report the Houdini sessions, choose one, or start, stop or interrupt one.

Use it first when a tool says that Houdini is not reachable, and use it to
learn the Houdini version before you use an API that changed between
releases.

Several Houdini sessions can listen at the same time: the graphical one that
holds the work of the user, and a headless one for your own tests. Every
tool result names the session that answered, in `_session`. Read that line
when a scene looks empty or wrong: an empty scene is usually the wrong
session, not a lost scene.

Do not use it to read the scene: scene_overview does that.

action:
    "status"    — the session that the bridge talks to now, the other
                  sessions, and the port. Starts nothing, and always
                  answers.
    "list"      — every Houdini that runs, with its version, its process
                  id, its .hip file, whether it has a window and whether it
                  answers; and the Houdini versions installed.
    "attach"    — send every later command to the Houdini on `port`. Use it
                  when "list" shows more than one.
    "detach"    — forget the attached port and let the bridge choose again.
    "interrupt" — stop the call that runs now in the attached Houdini, or
                  in the one on `port`: a script past its budget, a loop
                  that will not end. Houdini answers again after it.
    "start"     — start a headless Houdini (hython) and attach to it.
                  `version` chooses the release, for example "21.0" or
                  "21.0.829"; without it, the version of the Houdini window
                  that runs. A Houdini that already runs is not touched, so
                  this is the safe way to test while a person works.
    "start_gui" — start Houdini with its window and wait for the plugin to
                  answer, up to 4 minutes. It opens the .hip file at `hip`
                  when you give one, it stays open when the bridge stops,
                  and the bridge attaches to it. `version` as for "start".
    "stop"      — stop the headless Houdini that this bridge started. A
                  Houdini that you started yourself, or with "start_gui", is
                  not touched.

Returns JSON. The report says what to do next when nothing answers.
ParametersJSON Schema
NameRequiredDescriptionDefault
hipNostart_gui: the .hip file to open.
portNoattach: the port of the Houdini to talk to, from list. interrupt: the Houdini to interrupt, when not the attached one.
actionNoOne of "status", "list", "attach", "detach", "interrupt", "start", "start_gui", "stop".status
versionNostart and start_gui: the Houdini release, for example "21.0" or "21.0.829".

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.8/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Despite coverage from annotations (destructiveHint=true), the description adds substantial behavioral detail: start does not touch an already-running Houdini, stop only kills the bridge-started headless instance, start_gui waits up to 4 minutes and stays open after the bridge stops, interrupt restores Houdini responsiveness. No contradiction with a process-control tool being flagged destructive.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded purpose, then guidance, then a scannable per-action breakdown. It is long, but nearly every line carries operative information; only the _session explanation edges toward repetition of the result-handling theme.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists, so return formatting need not be described, and the description still notes that results name the answering session in `_session` and that the report says what to do when nothing answers. For an eight-action stateful tool this is complete enough to invoke safely.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the baseline is 3, but the description adds meaning beyond it: version accepts a partial release like '21.0' and defaults to the running window's version, and port's role differs per action (attach vs interrupt). hip is tied specifically to start_gui.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Opens with a specific verb set and resource: reporting, choosing, starting, stopping, or interrupting Houdini sessions. It explicitly distinguishes itself from sibling scene_overview, so an agent can tell it apart without opening schemas.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives explicit triggers ('Use it first when a tool says that Houdini is not reachable') and an explicit exclusion ('Do not use it to read the scene: scene_overview does that'). Each action's use case is spelled out, e.g. attach 'when list shows more than one', interrupt for a runaway script.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

stage_inspectA
Read-onlyIdempotent

Read the USD stage at a LOP node. This cooks the node.

Use it in a Solaris (LOP) network to see the prims, the layers and the
composition that a node produces.

Do not use it for SOP geometry: geometry_inspect does that.

mode:
    "stage"       — the stage: prim count, layers, the default prim.
    "prims"       — the prim tree from `root_prim`, `max_depth` deep.
    "prim"        — one prim at `prim_path`. include_attrs=True adds its
                    attributes.
    "search"      — prims whose path matches `pattern`, filtered by
                    `type_name` such as "Mesh" or "SphereLight".
    "layer"       — the layer stack, and the layer at `layer_index`.
    "attribute"   — the value of `attr_name` on `prim_path`.
    "composition" — where the opinions on `prim_path` come from.
    "variants"    — the variant sets on `prim_path` and the selection.
    "stats"       — counts under `prim_path`.
    "modified"    — the last `count` prims that this node changed. Use it
                    to see what one LOP did.
    "lights"      — the lights on the stage.
    "transform"   — where `prim_path` is in the world: translate, rotate
                    and scale composed through every parent. With
                    `frames`, the path of a moving prim.

Returns JSON.
ParametersJSON Schema
NameRequiredDescriptionDefault
modeNoOne of "stage", "prims", "prim", "search", "layer", "attribute", "composition", "variants", "stats", "modified", "lights", "transform".stage
pathYesThe LOP node whose stage to read.
countNomodified: how many prims come back.
framesNoRead at another frame, or at several: one frame, a list, or {"start": 1, "end": 10, "step": 2}. The playbar goes back after.
patternNosearch: the prim path to match, with * as a wildcard.
attr_nameNoattribute: the attribute to read, for example "points".
max_depthNoprims: how many levels of the tree come back.
prim_pathNoprim, attribute, composition, variants, stats, transform: the prim, for example "/world/geo/rock".
root_primNoprims: the prim where the tree starts./
type_nameNosearch: keep the prims of this type, for example "Mesh" or "SphereLight".
layer_indexNolayer: which layer of the stack, from 0 (the strongest).
include_attrsNoprim: also return the attributes of the prim.

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.6/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnly, idempotent, closed-world, but the description adds two non-obvious behaviors: "This cooks the node" (a read that triggers evaluation and can have side effects) and "The playbar goes back after" for frame reads. These are real behavioral facts not derivable from the annotations, though return-shape and cost details are absent (partly covered by the output schema).

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loads the core purpose and the SOP exclusion before the long mode enumeration, and each mode entry is one tight clause. The twelve-mode block is lengthy but the entries carry distinct semantics; only light redundancy with the schema's own mode prefixes keeps it from a 5.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists so return values need not be explained, and the description covers everything else an agent needs: LOP vs SOP routing, the cooking side effect, playbar restoration, and a complete mode-to-parameter contract. Nothing required for correct invocation is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the baseline is 3, but the description goes further by mapping each mode to the parameters it consumes (e.g. "search" pairs with pattern and type_name, "modified" uses count, "prim" pairs with include_attrs) and clarifying semantics like the recursive world transform composed through every parent. This is mode-routing meaning beyond the flat per-param schema text.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ("Read the USD stage at a LOP node") and immediately scopes it to Solaris/LOP networks. It explicitly names the sibling it is not (geometry_inspect) so an agent can separate it from the SOP-geometry inspection tool without opening a schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives positive context ("Use it in a Solaris (LOP) network to see the prims, the layers and the composition") plus an explicit exclusion ("Do not use it for SOP geometry: geometry_inspect does that"), naming the alternative. The mode list further tells the agent which selection to make for each intent.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

  1. 1 tool updatev0.7.6
    • Changedconnect1 field changed
      • changedInput schema / properties / items / description
        Previous value: -"A list of wires for \"connect\" or \"disconnect\", each a dictionary with the keys of one wire. An argument outside items is the default for each one."New value: +"A list of wires for \"connect\" or \"disconnect\", each a dictionary with the keys of one wire, for example {\"src_path\": \"/obj/geo1/grid1\", \"dst_path\": \"/obj/geo1/mountain1\"}. An argument outside items is the default for each one."
  2. 2 tool updatesv0.7.5
    • Changedexecute1 field changed
      • changedInput schema / properties / background / description
        Previous value: -"python: return at once with a job id and let the script run. Read it with mode job. Other calls wait until it ends."New value: +"python: return at once with a job id and let the script run. Read it with mode job. Until it ends, other calls are refused."
    • Changedhda1 field changed
      • changedInput schema / properties / node_type / description
        Previous value: -"get, sections, section_get, section_set: the asset type, for example \"Sop/my_tool\"."New value: +"get, sections, section_get, section_set: the asset type, as list names it, for example \"labs::edge_damage::1.0\", or with its category, \"Sop/labs::edge_damage::1.0\"."
  3. 20 tool updatesv0.7.3
    • Changedbatch3 fields changed
      • addedInput schema / properties / operations / description
        Added value: +"The steps, in order. Each is {\"tool\": \"<tool name>\", \"params\": {...}}, with the arguments that the tool takes on its own. Any tool of this server except batch."
      • removedInput schema / properties / operations / title
        Removed value: -"Operations"
      • removedInput schema / title
        Removed value: -"toolArguments"
    • Changedcapture154 fields changed
      • removedInput schema / properties / azimuth / anyOf
        Removed value: -[
        -  {
        -    "type": "number"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • removedInput schema / properties / azimuth / default
        Removed value: -null
      • addedInput schema / properties / azimuth / description
        Added value: +"Degrees around the up axis, around what the view frames. 0 looks from the front. Nothing is added to the scene."
      • removedInput schema / properties / azimuth / title
        Removed value: -"Azimuth"
      • addedInput schema / properties / azimuth / type
        Added value: +"number"
      • removedInput schema / properties / background / anyOf
        Removed value: -[
        -  {
        -    "type": "integer"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / background / description
        Added value: +"sheet and movie: the grey of the background, 0-255. Smoke reads best on mid grey."
      • removedInput schema / properties / background / title
        Removed value: -"Background"
      • addedInput schema / properties / background / type
        Added value: +"integer"
      • removedInput schema / properties / camera / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • removedInput schema / properties / camera / default
        Removed value: -null
      • addedInput schema / properties / camera / description
        Added value: +"camera mode: the camera node to look through. On a LOP network with `renderer`, a USD camera prim."
      • removedInput schema / properties / camera / title
        Removed value: -"Camera"
      • addedInput schema / properties / camera / type
        Added value: +"string"
      • removedInput schema / properties / color_by / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • removedInput schema / properties / color_by / default
        Removed value: -null
      • addedInput schema / properties / color_by / description
        Added value: +"sheet and movie: colour the points by this attribute, blue at the low end of color_range and red at the high end. A vector uses its length."
      • removedInput schema / properties / color_by / title
        Removed value: -"Color By"
      • addedInput schema / properties / color_by / type
        Added value: +"string"
      • removedInput schema / properties / color_range / anyOf
        Removed value: -[
        -  {
        -    "items": {
        -      "type": "number"
        -    },
        -    "type": "array"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • removedInput schema / properties / color_range / default
        Removed value: -null
      • addedInput schema / properties / color_range / description
        Added value: +"[low, high] for color_by. Without it, [0, 1]."
      • addedInput schema / properties / color_range / items
        Added value: +{
        +  "type": "number"
        +}
      • removedInput schema / properties / color_range / title
        Removed value: -"Color Range"
      • addedInput schema / properties / color_range / type
        Added value: +"array"
      • removedInput schema / properties / columns / anyOf
        Removed value: -[
        -  {
        -    "type": "integer"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • removedInput schema / properties / columns / default
        Removed value: -null
      • addedInput schema / properties / columns / description
        Added value: +"sheet: tiles in each row."
      • removedInput schema / properties / columns / title
        Removed value: -"Columns"
      • addedInput schema / properties / columns / type
        Added value: +"integer"
      • removedInput schema / properties / contour / anyOf
        Removed value: -[
        -  {
        -    "type": "number"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • removedInput schema / properties / contour / default
        Removed value: -null
      • addedInput schema / properties / contour / description
        Added value: +"sheet: a step. Colour by the fraction of the value over the step, so the lines of equal value show, for example the shells of a distance field."
      • removedInput schema / properties / contour / title
        Removed value: -"Contour"
      • addedInput schema / properties / contour / type
        Added value: +"number"
      • removedInput schema / properties / count / anyOf
        Removed value: -[
        -  {
        -    "type": "integer"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / count / description
        Added value: +"sheet: how many tiles, when frames is not given."
      • removedInput schema / properties / count / title
        Removed value: -"Count"
      • addedInput schema / properties / count / type
        Added value: +"integer"
      • removedInput schema / properties / direction / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • removedInput schema / properties / direction / default
        Removed value: -null
      • addedInput schema / properties / direction / description
        Added value: +"The view axis: \"top\", \"front\", \"left\", \"right\", \"back\", \"bottom\" or \"persp\"."
      • removedInput schema / properties / direction / title
        Removed value: -"Direction"
      • addedInput schema / properties / direction / type
        Added value: +"string"
      • removedInput schema / properties / elevation / anyOf
        Removed value: -[
        -  {
        -    "type": "number"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • removedInput schema / properties / elevation / default
        Removed value: -null
      • addedInput schema / properties / elevation / description
        Added value: +"Degrees above the ground, with azimuth. 30 with azimuth 45 is a three-quarter view."
      • removedInput schema / properties / elevation / title
        Removed value: -"Elevation"
      • addedInput schema / properties / elevation / type
        Added value: +"number"
      • removedInput schema / properties / fill / anyOf
        Removed value: -[
        -  {
        -    "type": "number"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / fill / description
        Added value: +"How much of the picture the framed thing takes: 0.9 leaves air around it, 1.0 fills it."
      • removedInput schema / properties / fill / title
        Removed value: -"Fill"
      • addedInput schema / properties / fill / type
        Added value: +"number"
      • removedInput schema / properties / fps / anyOf
        Removed value: -[
        -  {
        -    "type": "number"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / fps / description
        Added value: +"movie: frames per second."
      • removedInput schema / properties / fps / title
        Removed value: -"Fps"
      • addedInput schema / properties / fps / type
        Added value: +"number"
      • removedInput schema / properties / frame / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • removedInput schema / properties / frame / default
        Removed value: -null
      • addedInput schema / properties / frame / description
        Added value: +"What to frame the view on: \"selection\", \"all\", or a node path (the box of what that node cooked)."
      • removedInput schema / properties / frame / title
        Removed value: -"Frame"
      • addedInput schema / properties / frame / type
        Added value: +"string"
      • removedInput schema / properties / frame_range / anyOf
        Removed value: -[
        -  {
        -    "items": {
        -      "type": "number"
        -    },
        -    "type": "array"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • removedInput schema / properties / frame_range / default
        Removed value: -null
      • addedInput schema / properties / frame_range / description
        Added value: +"flipbook and movie: [start, end]."
      • addedInput schema / properties / frame_range / items
        Added value: +{
        +  "type": "number"
        +}
      • removedInput schema / properties / frame_range / title
        Removed value: -"Frame Range"
      • addedInput schema / properties / frame_range / type
        Added value: +"array"
      • changedInput schema / properties / frames / anyOf
        Previous value: -[
        -  {
        -    "type": "number"
        -  },
        -  {
        -    "items": {
        -      "type": "number"
        -    },
        -    "type": "array"
        -  },
        -  {
        -    "additionalProperties": {
        -      "type": "number"
        -    },
        -    "type": "object"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "type": "number"
        +  },
        +  {
        +    "items": {
        +      "type": "number"
        +    },
        +    "type": "array"
        +  },
        +  {
        +    "additionalProperties": {
        +      "type": "number"
        +    },
        +    "type": "object"
        +  }
        +]
      • removedInput schema / properties / frames / default
        Removed value: -null
      • addedInput schema / properties / frames / description
        Added value: +"One frame, a list, or {\"start\": 1, \"end\": 10, \"step\": 2}: one picture for each. sheet: the frames of the tiles. The playbar goes back after. A picture that holds only the background is an error."
      • removedInput schema / properties / frames / title
        Removed value: -"Frames"
      • removedInput schema / properties / look_from / anyOf
        Removed value: -[
        -  {
        -    "items": {
        -      "type": "number"
        -    },
        -    "type": "array"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • removedInput schema / properties / look_from / default
        Removed value: -null
      • addedInput schema / properties / look_from / description
        Added value: +"[x, y, z]: the point that the view looks from."
      • addedInput schema / properties / look_from / items
        Added value: +{
        +  "type": "number"
        +}
      • removedInput schema / properties / look_from / title
        Removed value: -"Look From"
      • addedInput schema / properties / look_from / type
        Added value: +"array"
      • removedInput schema / properties / mode / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / mode / description
        Added value: +"One of \"viewport\", \"quad\", \"camera\", \"flipbook\", \"sheet\", \"movie\"."
      • removedInput schema / properties / mode / title
        Removed value: -"Mode"
      • addedInput schema / properties / mode / type
        Added value: +"string"
      • removedInput schema / properties / node / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • removedInput schema / properties / node / default
        Removed value: -null
      • addedInput schema / properties / node / description
        Added value: +"The node to look at. It gets the display flag for the picture, and the flag goes back after. The viewer shows its network, and goes back after. Without `frame`, the view also frames it."
      • removedInput schema / properties / node / title
        Removed value: -"Node"
      • addedInput schema / properties / node / type
        Added value: +"string"
      • removedInput schema / properties / output / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • removedInput schema / properties / output / default
        Removed value: -null
      • addedInput schema / properties / output / description
        Added value: +"The file to write. Without it, a temporary file."
      • removedInput schema / properties / output / title
        Removed value: -"Output"
      • addedInput schema / properties / output / type
        Added value: +"string"
      • removedInput schema / properties / radius / anyOf
        Removed value: -[
        -  {
        -    "type": "number"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • removedInput schema / properties / radius / default
        Removed value: -null
      • addedInput schema / properties / radius / description
        Added value: +"The distance between target and look_from."
      • removedInput schema / properties / radius / title
        Removed value: -"Radius"
      • addedInput schema / properties / radius / type
        Added value: +"number"
      • removedInput schema / properties / reference / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • removedInput schema / properties / reference / default
        Removed value: -null
      • addedInput schema / properties / reference / description
        Added value: +"sheet: a picture file to put in the first tile, to compare."
      • removedInput schema / properties / reference / title
        Removed value: -"Reference"
      • addedInput schema / properties / reference / type
        Added value: +"string"
      • removedInput schema / properties / renderer / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • removedInput schema / properties / renderer / default
        Removed value: -null
      • addedInput schema / properties / renderer / description
        Added value: +"The Hydra renderer of a viewer on a LOP network, for example \"Karma CPU\". An unknown name lists the ones available."
      • removedInput schema / properties / renderer / title
        Removed value: -"Renderer"
      • addedInput schema / properties / renderer / type
        Added value: +"string"
      • removedInput schema / properties / resolution / anyOf
        Removed value: -[
        -  {
        -    "items": {
        -      "type": "integer"
        -    },
        -    "type": "array"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • removedInput schema / properties / resolution / default
        Removed value: -null
      • addedInput schema / properties / resolution / description
        Added value: +"[width, height] in pixels. The height follows the shape of the viewport, so the picture is not stretched."
      • addedInput schema / properties / resolution / items
        Added value: +{
        +  "type": "integer"
        +}
      • removedInput schema / properties / resolution / title
        Removed value: -"Resolution"
      • addedInput schema / properties / resolution / type
        Added value: +"array"
      • removedInput schema / properties / settle / anyOf
        Removed value: -[
        -  {
        -    "type": "number"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • removedInput schema / properties / settle / default
        Removed value: -null
      • addedInput schema / properties / settle / description
        Added value: +"Seconds that a renderer such as Karma draws before each picture. Karma starts from noise: 20 to 30 gives a clean frame. With frames or in flipbook mode it renders a sequence through the viewport, with no husk and no render license."
      • removedInput schema / properties / settle / title
        Removed value: -"Settle"
      • addedInput schema / properties / settle / type
        Added value: +"number"
      • removedInput schema / properties / shading / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • removedInput schema / properties / shading / default
        Removed value: -null
      • addedInput schema / properties / shading / description
        Added value: +"One of \"smooth\", \"smooth_wire\", \"flat\", \"wireframe\"."
      • removedInput schema / properties / shading / title
        Removed value: -"Shading"
      • addedInput schema / properties / shading / type
        Added value: +"string"
      • removedInput schema / properties / slab / anyOf
        Removed value: -[
        -  {
        -    "items": {
        -      "anyOf": [
        -        {
        -          "type": "string"
        -        },
        -        {
        -          "type": "number"
        -        }
        -      ]
        -    },
        -    "type": "array"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • removedInput schema / properties / slab / default
        Removed value: -null
      • addedInput schema / properties / slab / description
        Added value: +"[axis, thickness], for example [\"z\", 0.1]: draw only the points in a thin cut through the middle, so the inside of a solid cloud shows."
      • addedInput schema / properties / slab / items
        Added value: +{
        +  "anyOf": [
        +    {
        +      "type": "string"
        +    },
        +    {
        +      "type": "number"
        +    }
        +  ]
        +}
      • removedInput schema / properties / slab / title
        Removed value: -"Slab"
      • addedInput schema / properties / slab / type
        Added value: +"array"
      • removedInput schema / properties / start / anyOf
        Removed value: -[
        -  {
        -    "type": "number"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • removedInput schema / properties / start / default
        Removed value: -null
      • addedInput schema / properties / start / description
        Added value: +"sheet: the first frame. Without it, the current frame."
      • removedInput schema / properties / start / title
        Removed value: -"Start"
      • addedInput schema / properties / start / type
        Added value: +"number"
      • removedInput schema / properties / step / anyOf
        Removed value: -[
        -  {
        -    "type": "number"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / step / description
        Added value: +"sheet: the frames between tiles. Over 2 hides movement and gives a warning."
      • removedInput schema / properties / step / title
        Removed value: -"Step"
      • addedInput schema / properties / step / type
        Added value: +"number"
      • removedInput schema / properties / target / anyOf
        Removed value: -[
        -  {
        -    "items": {
        -      "type": "number"
        -    },
        -    "type": "array"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • removedInput schema / properties / target / default
        Removed value: -null
      • addedInput schema / properties / target / description
        Added value: +"[x, y, z]: the point that the view turns around."
      • addedInput schema / properties / target / items
        Added value: +{
        +  "type": "number"
        +}
      • removedInput schema / properties / target / title
        Removed value: -"Target"
      • addedInput schema / properties / target / type
        Added value: +"array"
      • removedInput schema / properties / tile_width / anyOf
        Removed value: -[
        -  {
        -    "type": "integer"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / tile_width / description
        Added value: +"sheet: the width of each tile in pixels."
      • removedInput schema / properties / tile_width / title
        Removed value: -"Tile Width"
      • addedInput schema / properties / tile_width / type
        Added value: +"integer"
      • removedInput schema / properties / vectors / anyOf
        Removed value: -[
        -  {
        -    "type": "number"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • removedInput schema / properties / vectors / default
        Removed value: -null
      • addedInput schema / properties / vectors / description
        Added value: +"sheet: a scale. Draw a line along the color_by vector from up to about 3000 points. An empty result is an error."
      • removedInput schema / properties / vectors / title
        Removed value: -"Vectors"
      • addedInput schema / properties / vectors / type
        Added value: +"number"
      • removedInput schema / title
        Removed value: -"toolArguments"
    • Changedconnect42 fields changed
      • removedInput schema / properties / dst_input_index / anyOf
        Removed value: -[
        -  {
        -    "type": "integer"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / dst_input_index / description
        Added value: +"connect: the input of dst_path, from 0."
      • removedInput schema / properties / dst_input_index / title
        Removed value: -"Dst Input Index"
      • addedInput schema / properties / dst_input_index / type
        Added value: +"integer"
      • removedInput schema / properties / dst_path / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • removedInput schema / properties / dst_path / default
        Removed value: -null
      • addedInput schema / properties / dst_path / description
        Added value: +"connect: the node whose input takes the wire."
      • removedInput schema / properties / dst_path / title
        Removed value: -"Dst Path"
      • addedInput schema / properties / dst_path / type
        Added value: +"string"
      • removedInput schema / properties / input_index / anyOf
        Removed value: -[
        -  {
        -    "type": "integer"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / input_index / description
        Added value: +"disconnect: the input that loses its wire, from 0."
      • removedInput schema / properties / input_index / title
        Removed value: -"Input Index"
      • addedInput schema / properties / input_index / type
        Added value: +"integer"
      • removedInput schema / properties / input_indices / anyOf
        Removed value: -[
        -  {
        -    "items": {
        -      "type": "integer"
        -    },
        -    "type": "array"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • removedInput schema / properties / input_indices / default
        Removed value: -null
      • addedInput schema / properties / input_indices / description
        Added value: +"reorder: the old input indices in their new order, for example [1, 0]."
      • addedInput schema / properties / input_indices / items
        Added value: +{
        +  "type": "integer"
        +}
      • removedInput schema / properties / input_indices / title
        Removed value: -"Input Indices"
      • addedInput schema / properties / input_indices / type
        Added value: +"array"
      • changedInput schema / properties / items / anyOf
        Previous value: -[
        -  {
        -    "additionalProperties": true,
        -    "type": "object"
        -  },
        -  {
        -    "items": {
        -      "additionalProperties": true,
        -      "type": "object"
        -    },
        -    "type": "array"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "additionalProperties": true,
        +    "type": "object"
        +  },
        +  {
        +    "items": {
        +      "additionalProperties": true,
        +      "type": "object"
        +    },
        +    "type": "array"
        +  }
        +]
      • removedInput schema / properties / items / default
        Removed value: -null
      • addedInput schema / properties / items / description
        Added value: +"A list of wires for \"connect\" or \"disconnect\", each a dictionary with the keys of one wire. An argument outside items is the default for each one."
      • removedInput schema / properties / items / title
        Removed value: -"Items"
      • removedInput schema / properties / mode / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / mode / description
        Added value: +"One of \"connect\", \"disconnect\", \"reorder\"."
      • removedInput schema / properties / mode / title
        Removed value: -"Mode"
      • addedInput schema / properties / mode / type
        Added value: +"string"
      • removedInput schema / properties / path / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • removedInput schema / properties / path / default
        Removed value: -null
      • addedInput schema / properties / path / description
        Added value: +"disconnect and reorder: the node whose inputs change."
      • removedInput schema / properties / path / title
        Removed value: -"Path"
      • addedInput schema / properties / path / type
        Added value: +"string"
      • removedInput schema / properties / src_output_index / anyOf
        Removed value: -[
        -  {
        -    "type": "integer"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / src_output_index / description
        Added value: +"connect: the output of src_path, from 0."
      • removedInput schema / properties / src_output_index / title
        Removed value: -"Src Output Index"
      • addedInput schema / properties / src_output_index / type
        Added value: +"integer"
      • removedInput schema / properties / src_path / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • removedInput schema / properties / src_path / default
        Removed value: -null
      • addedInput schema / properties / src_path / description
        Added value: +"connect: the node whose output feeds the wire."
      • removedInput schema / properties / src_path / title
        Removed value: -"Src Path"
      • addedInput schema / properties / src_path / type
        Added value: +"string"
      • removedInput schema / title
        Removed value: -"toolArguments"
    • Changedconsole27 fields changed
      • removedInput schema / properties / limit / anyOf
        Removed value: -[
        -  {
        -    "type": "integer"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / limit / description
        Added value: +"How many log entries come back, the newest ones."
      • removedInput schema / properties / limit / title
        Removed value: -"Limit"
      • addedInput schema / properties / limit / type
        Added value: +"integer"
      • removedInput schema / properties / node_errors / anyOf
        Removed value: -[
        -  {
        -    "type": "boolean"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / node_errors / description
        Added value: +"Also report the nodes under root_path that hold an error or a warning. False gives the log alone."
      • removedInput schema / properties / node_errors / title
        Removed value: -"Node Errors"
      • addedInput schema / properties / node_errors / type
        Added value: +"boolean"
      • removedInput schema / properties / node_limit / anyOf
        Removed value: -[
        -  {
        -    "type": "integer"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / node_limit / description
        Added value: +"How many nodes with an error or a warning come back. Errors come first, and the report says how many it left out."
      • removedInput schema / properties / node_limit / title
        Removed value: -"Node Limit"
      • addedInput schema / properties / node_limit / type
        Added value: +"integer"
      • removedInput schema / properties / root_path / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / root_path / description
        Added value: +"The network that node_errors walks, for example /obj or /stage."
      • removedInput schema / properties / root_path / title
        Removed value: -"Root Path"
      • addedInput schema / properties / root_path / type
        Added value: +"string"
      • removedInput schema / properties / severity / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • removedInput schema / properties / severity / default
        Removed value: -null
      • addedInput schema / properties / severity / description
        Added value: +"Keep one level only: \"message\", \"important\", \"warning\", \"error\" or \"fatal\"."
      • removedInput schema / properties / severity / title
        Removed value: -"Severity"
      • addedInput schema / properties / severity / type
        Added value: +"string"
      • removedInput schema / properties / source / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • removedInput schema / properties / source / default
        Removed value: -null
      • addedInput schema / properties / source / description
        Added value: +"Keep the entries whose source holds this text, for example \"Python\"."
      • removedInput schema / properties / source / title
        Removed value: -"Source"
      • addedInput schema / properties / source / type
        Added value: +"string"
      • removedInput schema / title
        Removed value: -"toolArguments"
    • Changedcook31 fields changed
      • removedInput schema / properties / force / anyOf
        Removed value: -[
        -  {
        -    "type": "boolean"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / force / description
        Added value: +"Cook even when Houdini thinks the node is up to date."
      • removedInput schema / properties / force / title
        Removed value: -"Force"
      • addedInput schema / properties / force / type
        Added value: +"boolean"
      • removedInput schema / properties / frame_range / anyOf
        Removed value: -[
        -  {
        -    "items": {
        -      "type": "number"
        -    },
        -    "type": "array"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • removedInput schema / properties / frame_range / default
        Removed value: -null
      • addedInput schema / properties / frame_range / description
        Added value: +"[start, end]: every frame between. For cook and cache_write."
      • addedInput schema / properties / frame_range / items
        Added value: +{
        +  "type": "number"
        +}
      • removedInput schema / properties / frame_range / title
        Removed value: -"Frame Range"
      • addedInput schema / properties / frame_range / type
        Added value: +"array"
      • changedInput schema / properties / frames / anyOf
        Previous value: -[
        -  {
        -    "type": "number"
        -  },
        -  {
        -    "items": {
        -      "type": "number"
        -    },
        -    "type": "array"
        -  },
        -  {
        -    "additionalProperties": {
        -      "type": "number"
        -    },
        -    "type": "object"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "type": "number"
        +  },
        +  {
        +    "items": {
        +      "type": "number"
        +    },
        +    "type": "array"
        +  },
        +  {
        +    "additionalProperties": {
        +      "type": "number"
        +    },
        +    "type": "object"
        +  }
        +]
      • removedInput schema / properties / frames / default
        Removed value: -null
      • addedInput schema / properties / frames / description
        Added value: +"One frame, a list of frames, or {\"start\": 1001, \"end\": 1010, \"step\": 2}. For cook. The playbar goes back after."
      • removedInput schema / properties / frames / title
        Removed value: -"Frames"
      • removedInput schema / properties / mode / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / mode / description
        Added value: +"One of \"cook\", \"cache_write\", \"cache_clear\", \"sim_step\", \"sim_reset\". The description says what each one does."
      • removedInput schema / properties / mode / title
        Removed value: -"Mode"
      • addedInput schema / properties / mode / type
        Added value: +"string"
      • removedInput schema / properties / num_steps / anyOf
        Removed value: -[
        -  {
        -    "type": "integer"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / num_steps / description
        Added value: +"How many frames sim_step steps the DOP network."
      • removedInput schema / properties / num_steps / title
        Removed value: -"Num Steps"
      • addedInput schema / properties / num_steps / type
        Added value: +"integer"
      • addedInput schema / properties / parameters / additionalProperties
        Added value: +{
        +  "additionalProperties": true,
        +  "type": "object"
        +}
      • removedInput schema / properties / parameters / anyOf
        Removed value: -[
        -  {
        -    "additionalProperties": {
        -      "additionalProperties": true,
        -      "type": "object"
        -    },
        -    "type": "object"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • removedInput schema / properties / parameters / default
        Removed value: -null
      • addedInput schema / properties / parameters / description
        Added value: +"Values to write before the cook, as {\"/obj/geo1/pyro\": {\"divsize\": 0.05}}. The result says which writes changed nothing."
      • removedInput schema / properties / parameters / title
        Removed value: -"Parameters"
      • addedInput schema / properties / parameters / type
        Added value: +"object"
      • addedInput schema / properties / paths / description
        Added value: +"The node to cook, or a list of nodes."
      • removedInput schema / properties / paths / title
        Removed value: -"Paths"
      • removedInput schema / title
        Removed value: -"toolArguments"
    • Changeddocs39 fields changed
      • removedInput schema / properties / build / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • removedInput schema / properties / build / default
        Removed value: -null
      • addedInput schema / properties / build / description
        Added value: +"The Houdini build to read, for example \"21.0.829\". Default: the build of the attached session, then $HFS, then the newest build on this machine."
      • removedInput schema / properties / build / title
        Removed value: -"Build"
      • addedInput schema / properties / build / type
        Added value: +"string"
      • removedInput schema / properties / category / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • removedInput schema / properties / category / default
        Removed value: -null
      • addedInput schema / properties / category / description
        Added value: +"query: keep the search inside one folder, for example \"nodes/sop\", \"vex/functions\" or \"hom/hou\". node with a type name: the context, for example \"sop\" or \"lop\"."
      • removedInput schema / properties / category / title
        Removed value: -"Category"
      • addedInput schema / properties / category / type
        Added value: +"string"
      • removedInput schema / properties / limit / anyOf
        Removed value: -[
        -  {
        -    "type": "integer"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / limit / description
        Added value: +"query: how many hits come back."
      • removedInput schema / properties / limit / title
        Removed value: -"Limit"
      • addedInput schema / properties / limit / type
        Added value: +"integer"
      • removedInput schema / properties / node / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • removedInput schema / properties / node / default
        Removed value: -null
      • addedInput schema / properties / node / description
        Added value: +"A node path in the scene, for example \"/obj/geo1/attribwrangle1\", or a node type name, for example \"mountain\". Returns the page of that node type."
      • removedInput schema / properties / node / title
        Removed value: -"Node"
      • addedInput schema / properties / node / type
        Added value: +"string"
      • removedInput schema / properties / page / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • removedInput schema / properties / page / default
        Removed value: -null
      • addedInput schema / properties / page / description
        Added value: +"A page path from a hit, for example \"nodes/sop/copytopoints\". A loose name or a sidefx.com address also works."
      • removedInput schema / properties / page / title
        Removed value: -"Page"
      • addedInput schema / properties / page / type
        Added value: +"string"
      • removedInput schema / properties / part / anyOf
        Removed value: -[
        -  {
        -    "type": "integer"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / part / description
        Added value: +"A long page comes in parts of about 20,000 characters: 2, 3 and so on read the next ones."
      • removedInput schema / properties / part / title
        Removed value: -"Part"
      • addedInput schema / properties / part / type
        Added value: +"integer"
      • removedInput schema / properties / query / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • removedInput schema / properties / query / default
        Removed value: -null
      • addedInput schema / properties / query / description
        Added value: +"Words to search, for example \"copy to points\". Returns the hits with their page paths."
      • removedInput schema / properties / query / title
        Removed value: -"Query"
      • addedInput schema / properties / query / type
        Added value: +"string"
      • removedInput schema / properties / section / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • removedInput schema / properties / section / default
        Removed value: -null
      • addedInput schema / properties / section / description
        Added value: +"Read only the part of a page under one heading, for example \"Quick renders and flipbooks\". A long page lists its headings."
      • removedInput schema / properties / section / title
        Removed value: -"Section"
      • addedInput schema / properties / section / type
        Added value: +"string"
      • removedInput schema / title
        Removed value: -"toolArguments"
    • Changedexecute49 fields changed
      • removedInput schema / properties / args / anyOf
        Removed value: -[
        -  {
        -    "items": {
        -      "type": "string"
        -    },
        -    "type": "array"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • removedInput schema / properties / args / default
        Removed value: -null
      • addedInput schema / properties / args / description
        Added value: +"file: the values of sys.argv[1:]."
      • addedInput schema / properties / args / items
        Added value: +{
        +  "type": "string"
        +}
      • removedInput schema / properties / args / title
        Removed value: -"Args"
      • addedInput schema / properties / args / type
        Added value: +"array"
      • removedInput schema / properties / background / anyOf
        Removed value: -[
        -  {
        -    "type": "boolean"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / background / description
        Added value: +"python: return at once with a job id and let the script run. Read it with mode job. Other calls wait until it ends."
      • removedInput schema / properties / background / title
        Removed value: -"Background"
      • addedInput schema / properties / background / type
        Added value: +"boolean"
      • removedInput schema / properties / file / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • removedInput schema / properties / file / default
        Removed value: -null
      • addedInput schema / properties / file / description
        Added value: +"A Python file to run instead of source, as from a shell: __file__ is its path, __name__ is \"__main__\", args are in sys.argv[1:]. The text travels once."
      • removedInput schema / properties / file / title
        Removed value: -"File"
      • addedInput schema / properties / file / type
        Added value: +"string"
      • addedInput schema / properties / globals / additionalProperties
        Added value: +true
      • removedInput schema / properties / globals / anyOf
        Removed value: -[
        -  {
        -    "additionalProperties": true,
        -    "type": "object"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • removedInput schema / properties / globals / default
        Removed value: -null
      • addedInput schema / properties / globals / description
        Added value: +"Names that exist before the script runs, for example {\"radius\": 2.0}."
      • removedInput schema / properties / globals / title
        Removed value: -"Globals"
      • addedInput schema / properties / globals / type
        Added value: +"object"
      • removedInput schema / properties / job / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • removedInput schema / properties / job / default
        Removed value: -null
      • addedInput schema / properties / job / description
        Added value: +"job: the job id that background returned."
      • removedInput schema / properties / job / title
        Removed value: -"Job"
      • addedInput schema / properties / job / type
        Added value: +"string"
      • removedInput schema / properties / language / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / language / description
        Added value: +"expression: \"hscript\" or \"python\"."
      • removedInput schema / properties / language / title
        Removed value: -"Language"
      • addedInput schema / properties / language / type
        Added value: +"string"
      • removedInput schema / properties / mode / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / mode / description
        Added value: +"One of \"python\", \"hscript\", \"expression\", \"vex_check\", \"env\", \"job\"."
      • removedInput schema / properties / mode / title
        Removed value: -"Mode"
      • addedInput schema / properties / mode / type
        Added value: +"string"
      • removedInput schema / properties / name / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • removedInput schema / properties / name / default
        Removed value: -null
      • addedInput schema / properties / name / description
        Added value: +"env: the Houdini variable to read, for example \"HIP\"."
      • removedInput schema / properties / name / title
        Removed value: -"Name"
      • addedInput schema / properties / name / type
        Added value: +"string"
      • removedInput schema / properties / source / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • removedInput schema / properties / source / default
        Removed value: -null
      • addedInput schema / properties / source / description
        Added value: +"The code: Python, HScript, an expression or VEX, as mode says."
      • removedInput schema / properties / source / title
        Removed value: -"Source"
      • addedInput schema / properties / source / type
        Added value: +"string"
      • removedInput schema / properties / timeout / anyOf
        Removed value: -[
        -  {
        -    "type": "number"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / timeout / description
        Added value: +"The seconds the script may run. Past it, the script stops where it is, the answer says where, and what it changed stays."
      • removedInput schema / properties / timeout / title
        Removed value: -"Timeout"
      • addedInput schema / properties / timeout / type
        Added value: +"number"
      • removedInput schema / title
        Removed value: -"toolArguments"
    • Changedgeometry_inspect131 fields changed
      • removedInput schema / properties / against / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • removedInput schema / properties / against / default
        Removed value: -null
      • addedInput schema / properties / against / description
        Added value: +"compare: the node to compare with. volume_compare: the field whose bands hold the field `name`."
      • removedInput schema / properties / against / title
        Removed value: -"Against"
      • addedInput schema / properties / against / type
        Added value: +"string"
      • removedInput schema / properties / attrib_class / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / attrib_class / description
        Added value: +"attrib: \"point\", \"prim\", \"vertex\" or \"detail\"."
      • removedInput schema / properties / attrib_class / title
        Removed value: -"Attrib Class"
      • addedInput schema / properties / attrib_class / type
        Added value: +"string"
      • removedInput schema / properties / attrib_name / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • removedInput schema / properties / attrib_name / default
        Removed value: -null
      • addedInput schema / properties / attrib_name / description
        Added value: +"attrib: the attribute to read."
      • removedInput schema / properties / attrib_name / title
        Removed value: -"Attrib Name"
      • addedInput schema / properties / attrib_name / type
        Added value: +"string"
      • removedInput schema / properties / attribs / anyOf
        Removed value: -[
        -  {
        -    "items": {
        -      "type": "string"
        -    },
        -    "type": "array"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • removedInput schema / properties / attribs / default
        Removed value: -null
      • addedInput schema / properties / attribs / description
        Added value: +"points: the attributes to return, for example [\"P\", \"Cd\"]."
      • addedInput schema / properties / attribs / items
        Added value: +{
        +  "type": "string"
        +}
      • removedInput schema / properties / attribs / title
        Removed value: -"Attribs"
      • addedInput schema / properties / attribs / type
        Added value: +"array"
      • changedInput schema / properties / bins / anyOf
        Previous value: -[
        -  {
        -    "type": "integer"
        -  },
        -  {
        -    "items": {
        -      "type": "number"
        -    },
        -    "type": "array"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "type": "integer"
        +  },
        +  {
        +    "items": {
        +      "type": "number"
        +    },
        +    "type": "array"
        +  }
        +]
      • removedInput schema / properties / bins / default
        Removed value: -null
      • addedInput schema / properties / bins / description
        Added value: +"volume_stats, volume_sample, volume_compare: a count of equal bands, or a list of band edges, for example [-1, 0, 0.05, 0.15, 0.25]."
      • removedInput schema / properties / bins / title
        Removed value: -"Bins"
      • removedInput schema / properties / count / anyOf
        Removed value: -[
        -  {
        -    "type": "integer"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / count / description
        Added value: +"points, prims: how many elements. Keep it small: a large read is slow."
      • removedInput schema / properties / count / title
        Removed value: -"Count"
      • addedInput schema / properties / count / type
        Added value: +"integer"
      • removedInput schema / properties / format / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / format / description
        Added value: +"export: the file type, for example \"obj\" or \"bgeo\"."
      • removedInput schema / properties / format / title
        Removed value: -"Format"
      • addedInput schema / properties / format / type
        Added value: +"string"
      • changedInput schema / properties / frames / anyOf
        Previous value: -[
        -  {
        -    "type": "number"
        -  },
        -  {
        -    "items": {
        -      "type": "number"
        -    },
        -    "type": "array"
        -  },
        -  {
        -    "additionalProperties": {
        -      "type": "number"
        -    },
        -    "type": "object"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "type": "number"
        +  },
        +  {
        +    "items": {
        +      "type": "number"
        +    },
        +    "type": "array"
        +  },
        +  {
        +    "additionalProperties": {
        +      "type": "number"
        +    },
        +    "type": "object"
        +  }
        +]
      • removedInput schema / properties / frames / default
        Removed value: -null
      • addedInput schema / properties / frames / description
        Added value: +"Read at other frames, without moving the playbar: one frame, a list, or {\"start\": 1001, \"end\": 1010, \"step\": 2}. One answer for each frame."
      • removedInput schema / properties / frames / title
        Removed value: -"Frames"
      • removedInput schema / properties / from_node / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • removedInput schema / properties / from_node / default
        Removed value: -null
      • addedInput schema / properties / from_node / description
        Added value: +"volume_sample: read at the points of this node. volume_compare: the node that holds `against`, such as a collider SDF."
      • removedInput schema / properties / from_node / title
        Removed value: -"From Node"
      • addedInput schema / properties / from_node / type
        Added value: +"string"
      • removedInput schema / properties / group_name / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • removedInput schema / properties / group_name / default
        Removed value: -null
      • addedInput schema / properties / group_name / description
        Added value: +"group_members: the group to read."
      • removedInput schema / properties / group_name / title
        Removed value: -"Group Name"
      • addedInput schema / properties / group_name / type
        Added value: +"string"
      • removedInput schema / properties / group_type / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / group_type / description
        Added value: +"groups, group_members: \"point\", \"prim\", \"vertex\" or \"edge\"."
      • removedInput schema / properties / group_type / title
        Removed value: -"Group Type"
      • addedInput schema / properties / group_type / type
        Added value: +"string"
      • removedInput schema / properties / limit / anyOf
        Removed value: -[
        -  {
        -    "type": "integer"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • removedInput schema / properties / limit / default
        Removed value: -null
      • addedInput schema / properties / limit / description
        Added value: +"attrib: how many values (10). volume_voxels: how many numbers before the array is thinned. volume_sample: return the values when there are at most this many (1000)."
      • removedInput schema / properties / limit / title
        Removed value: -"Limit"
      • addedInput schema / properties / limit / type
        Added value: +"integer"
      • removedInput schema / properties / match_attrib / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / match_attrib / description
        Added value: +"compare: the attribute that pairs the points of the two nodes, not their order."
      • removedInput schema / properties / match_attrib / title
        Removed value: -"Match Attrib"
      • addedInput schema / properties / match_attrib / type
        Added value: +"string"
      • removedInput schema / properties / mode / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / mode / description
        Added value: +"One of \"summary\", \"points\", \"prims\", \"attrib\", \"groups\", \"group_members\", \"bbox\", \"intrinsics\", \"nearest\", \"skeleton\", \"compare\", \"try\", \"volume_stats\", \"volume_voxels\", \"volume_sample\", \"volume_compare\", \"image\", \"volume\", \"export\"."
      • removedInput schema / properties / mode / title
        Removed value: -"Mode"
      • addedInput schema / properties / mode / type
        Added value: +"string"
      • removedInput schema / properties / name / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • removedInput schema / properties / name / default
        Removed value: -null
      • addedInput schema / properties / name / description
        Added value: +"volume_stats: one volume to read. volume_voxels, volume_compare: the field."
      • removedInput schema / properties / name / title
        Removed value: -"Name"
      • addedInput schema / properties / name / type
        Added value: +"string"
      • removedInput schema / properties / names / anyOf
        Removed value: -[
        -  {
        -    "items": {
        -      "type": "string"
        -    },
        -    "type": "array"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • removedInput schema / properties / names / default
        Removed value: -null
      • addedInput schema / properties / names / description
        Added value: +"volume_sample: the fields to read."
      • addedInput schema / properties / names / items
        Added value: +{
        +  "type": "string"
        +}
      • removedInput schema / properties / names / title
        Removed value: -"Names"
      • addedInput schema / properties / names / type
        Added value: +"array"
      • removedInput schema / properties / output / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • removedInput schema / properties / output / default
        Removed value: -null
      • addedInput schema / properties / output / description
        Added value: +"export: the file path to write."
      • removedInput schema / properties / output / title
        Removed value: -"Output"
      • addedInput schema / properties / output / type
        Added value: +"string"
      • addedInput schema / properties / path / description
        Added value: +"The SOP or COP node to read, or a list. A list keeps going after a node that fails, and each result names its path."
      • removedInput schema / properties / path / title
        Removed value: -"Path"
      • removedInput schema / properties / pattern / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • removedInput schema / properties / pattern / default
        Removed value: -null
      • addedInput schema / properties / pattern / description
        Added value: +"skeleton: keep the joints whose name matches."
      • removedInput schema / properties / pattern / title
        Removed value: -"Pattern"
      • addedInput schema / properties / pattern / type
        Added value: +"string"
      • removedInput schema / properties / plane_name / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / plane_name / description
        Added value: +"image: the COP plane to read, for example \"C\"."
      • removedInput schema / properties / plane_name / title
        Removed value: -"Plane Name"
      • addedInput schema / properties / plane_name / type
        Added value: +"string"
      • removedInput schema / properties / position / anyOf
        Removed value: -[
        -  {
        -    "items": {
        -      "type": "number"
        -    },
        -    "type": "array"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • removedInput schema / properties / position / default
        Removed value: -null
      • addedInput schema / properties / position / description
        Added value: +"nearest: [x, y, z]."
      • addedInput schema / properties / position / items
        Added value: +{
        +  "type": "number"
        +}
      • removedInput schema / properties / position / title
        Removed value: -"Position"
      • addedInput schema / properties / position / type
        Added value: +"array"
      • removedInput schema / properties / positions / anyOf
        Removed value: -[
        -  {
        -    "items": {
        -      "items": {
        -        "type": "number"
        -      },
        -      "type": "array"
        -    },
        -    "type": "array"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • removedInput schema / properties / positions / default
        Removed value: -null
      • addedInput schema / properties / positions / description
        Added value: +"volume_sample: the [x, y, z] points to read at."
      • addedInput schema / properties / positions / items
        Added value: +{
        +  "items": {
        +    "type": "number"
        +  },
        +  "type": "array"
        +}
      • removedInput schema / properties / positions / title
        Removed value: -"Positions"
      • addedInput schema / properties / positions / type
        Added value: +"array"
      • removedInput schema / properties / prim_index / anyOf
        Removed value: -[
        -  {
        -    "type": "integer"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / prim_index / description
        Added value: +"intrinsics: the primitive to read."
      • removedInput schema / properties / prim_index / title
        Removed value: -"Prim Index"
      • addedInput schema / properties / prim_index / type
        Added value: +"integer"
      • removedInput schema / properties / reduce / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • removedInput schema / properties / reduce / default
        Removed value: -null
      • addedInput schema / properties / reduce / description
        Added value: +"volume_voxels: one answer instead of the array: \"sum\", \"mean\", \"max\", \"min\", \"project_x\", \"project_y\" or \"project_z\"."
      • removedInput schema / properties / reduce / title
        Removed value: -"Reduce"
      • addedInput schema / properties / reduce / type
        Added value: +"string"
      • removedInput schema / properties / start / anyOf
        Removed value: -[
        -  {
        -    "type": "integer"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / start / description
        Added value: +"points, prims, attrib: the first element. Page with it."
      • removedInput schema / properties / start / title
        Removed value: -"Start"
      • addedInput schema / properties / start / type
        Added value: +"integer"
      • removedInput schema / properties / steps / anyOf
        Removed value: -[
        -  {
        -    "items": {
        -      "additionalProperties": true,
        -      "type": "object"
        -    },
        -    "type": "array"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • removedInput schema / properties / steps / default
        Removed value: -null
      • addedInput schema / properties / steps / description
        Added value: +"try: a list of {\"node_type\": ..., \"parameters\": {...}} to run on the geometry as verbs. Nothing changes in the scene."
      • addedInput schema / properties / steps / items
        Added value: +{
        +  "additionalProperties": true,
        +  "type": "object"
        +}
      • removedInput schema / properties / steps / title
        Removed value: -"Steps"
      • addedInput schema / properties / steps / type
        Added value: +"array"
      • removedInput schema / properties / threshold / anyOf
        Removed value: -[
        -  {
        -    "type": "number"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • removedInput schema / properties / threshold / default
        Removed value: -null
      • addedInput schema / properties / threshold / description
        Added value: +"volume_stats, volume_sample: count the voxels below and above it. volume_stats also gives the world box of the voxels above it."
      • removedInput schema / properties / threshold / title
        Removed value: -"Threshold"
      • addedInput schema / properties / threshold / type
        Added value: +"number"
      • removedInput schema / properties / unique / anyOf
        Removed value: -[
        -  {
        -    "type": "boolean"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / unique / description
        Added value: +"attrib: return each value that occurs and how many elements carry it. That is how you find the pieces in a geometry."
      • removedInput schema / properties / unique / title
        Removed value: -"Unique"
      • addedInput schema / properties / unique / type
        Added value: +"boolean"
      • removedInput schema / title
        Removed value: -"toolArguments"
    • Changedhda45 fields changed
      • removedInput schema / properties / category / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • removedInput schema / properties / category / default
        Removed value: -null
      • addedInput schema / properties / category / description
        Added value: +"list: keep one node category, for example \"Sop\"."
      • removedInput schema / properties / category / title
        Removed value: -"Category"
      • addedInput schema / properties / category / type
        Added value: +"string"
      • removedInput schema / properties / content / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • removedInput schema / properties / content / default
        Removed value: -null
      • addedInput schema / properties / content / description
        Added value: +"section_set: the text to write into the section."
      • removedInput schema / properties / content / title
        Removed value: -"Content"
      • addedInput schema / properties / content / type
        Added value: +"string"
      • removedInput schema / properties / file_path / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • removedInput schema / properties / file_path / default
        Removed value: -null
      • addedInput schema / properties / file_path / description
        Added value: +"install, uninstall, reload: the .hda file. create: the file to write."
      • removedInput schema / properties / file_path / title
        Removed value: -"File Path"
      • addedInput schema / properties / file_path / type
        Added value: +"string"
      • removedInput schema / properties / label / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • removedInput schema / properties / label / default
        Removed value: -null
      • addedInput schema / properties / label / description
        Added value: +"create: the name that the TAB menu shows."
      • removedInput schema / properties / label / title
        Removed value: -"Label"
      • addedInput schema / properties / label / type
        Added value: +"string"
      • removedInput schema / properties / mode / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / mode / description
        Added value: +"One of \"list\", \"get\", \"install\", \"uninstall\", \"reload\", \"update\", \"create\", \"sections\", \"section_get\", \"section_set\"."
      • removedInput schema / properties / mode / title
        Removed value: -"Mode"
      • addedInput schema / properties / mode / type
        Added value: +"string"
      • removedInput schema / properties / name / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • removedInput schema / properties / name / default
        Removed value: -null
      • addedInput schema / properties / name / description
        Added value: +"create: the type name of the new asset."
      • removedInput schema / properties / name / title
        Removed value: -"Name"
      • addedInput schema / properties / name / type
        Added value: +"string"
      • removedInput schema / properties / node_path / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • removedInput schema / properties / node_path / default
        Removed value: -null
      • addedInput schema / properties / node_path / description
        Added value: +"update: the node to save into its asset. create: the subnet to make an asset from."
      • removedInput schema / properties / node_path / title
        Removed value: -"Node Path"
      • addedInput schema / properties / node_path / type
        Added value: +"string"
      • removedInput schema / properties / node_type / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • removedInput schema / properties / node_type / default
        Removed value: -null
      • addedInput schema / properties / node_type / description
        Added value: +"get, sections, section_get, section_set: the asset type, for example \"Sop/my_tool\"."
      • removedInput schema / properties / node_type / title
        Removed value: -"Node Type"
      • addedInput schema / properties / node_type / type
        Added value: +"string"
      • removedInput schema / properties / section_name / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • removedInput schema / properties / section_name / default
        Removed value: -null
      • addedInput schema / properties / section_name / description
        Added value: +"section_get, section_set: the section, for example \"PythonModule\"."
      • removedInput schema / properties / section_name / title
        Removed value: -"Section Name"
      • addedInput schema / properties / section_name / type
        Added value: +"string"
      • removedInput schema / title
        Removed value: -"toolArguments"
    • Changednode_edit131 fields changed
      • removedInput schema / properties / bypass / anyOf
        Removed value: -[
        -  {
        -    "type": "boolean"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • removedInput schema / properties / bypass / default
        Removed value: -null
      • addedInput schema / properties / bypass / description
        Added value: +"flags: the bypass flag."
      • removedInput schema / properties / bypass / title
        Removed value: -"Bypass"
      • addedInput schema / properties / bypass / type
        Added value: +"boolean"
      • removedInput schema / properties / code / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • removedInput schema / properties / code / default
        Removed value: -null
      • addedInput schema / properties / code / description
        Added value: +"wrangle: the VEX snippet."
      • removedInput schema / properties / code / title
        Removed value: -"Code"
      • addedInput schema / properties / code / type
        Added value: +"string"
      • removedInput schema / properties / code_file / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • removedInput schema / properties / code_file / default
        Removed value: -null
      • addedInput schema / properties / code_file / description
        Added value: +"wrangle: read the VEX from this file, so a long snippet travels once."
      • removedInput schema / properties / code_file / title
        Removed value: -"Code File"
      • addedInput schema / properties / code_file / type
        Added value: +"string"
      • removedInput schema / properties / color / anyOf
        Removed value: -[
        -  {
        -    "items": {
        -      "type": "number"
        -    },
        -    "type": "array"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • removedInput schema / properties / color / default
        Removed value: -null
      • addedInput schema / properties / color / description
        Added value: +"color, note, box: [r, g, b] from 0 to 1."
      • addedInput schema / properties / color / items
        Added value: +{
        +  "type": "number"
        +}
      • removedInput schema / properties / color / title
        Removed value: -"Color"
      • addedInput schema / properties / color / type
        Added value: +"array"
      • removedInput schema / properties / context / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • removedInput schema / properties / context / default
        Removed value: -null
      • addedInput schema / properties / context / description
        Added value: +"create: the network kind, \"sop\" (default), \"cop\", \"chop\", \"lop\" or \"material_network\"."
      • removedInput schema / properties / context / title
        Removed value: -"Context"
      • addedInput schema / properties / context / type
        Added value: +"string"
      • removedInput schema / properties / destination_path / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • removedInput schema / properties / destination_path / default
        Removed value: -null
      • addedInput schema / properties / destination_path / description
        Added value: +"copy, move: the network to put the nodes in."
      • removedInput schema / properties / destination_path / title
        Removed value: -"Destination Path"
      • addedInput schema / properties / destination_path / type
        Added value: +"string"
      • removedInput schema / properties / display / anyOf
        Removed value: -[
        -  {
        -    "type": "boolean"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • removedInput schema / properties / display / default
        Removed value: -null
      • addedInput schema / properties / display / description
        Added value: +"flags: the display flag."
      • removedInput schema / properties / display / title
        Removed value: -"Display"
      • addedInput schema / properties / display / type
        Added value: +"boolean"
      • removedInput schema / properties / input_path / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • removedInput schema / properties / input_path / default
        Removed value: -null
      • addedInput schema / properties / input_path / description
        Added value: +"create: the node that feeds the new node. It saves a connect call and places the node under its input."
      • removedInput schema / properties / input_path / title
        Removed value: -"Input Path"
      • addedInput schema / properties / input_path / type
        Added value: +"string"
      • changedInput schema / properties / items / anyOf
        Previous value: -[
        -  {
        -    "additionalProperties": true,
        -    "type": "object"
        -  },
        -  {
        -    "items": {
        -      "additionalProperties": true,
        -      "type": "object"
        -    },
        -    "type": "array"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "additionalProperties": true,
        +    "type": "object"
        +  },
        +  {
        +    "items": {
        +      "additionalProperties": true,
        +      "type": "object"
        +    },
        +    "type": "array"
        +  }
        +]
      • removedInput schema / properties / items / default
        Removed value: -null
      • addedInput schema / properties / items / description
        Added value: +"A list of items for a repeated action, each a dictionary with the keys of one call. An argument outside items is the default for each one."
      • removedInput schema / properties / items / title
        Removed value: -"Items"
      • removedInput schema / properties / material_path / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • removedInput schema / properties / material_path / default
        Removed value: -null
      • addedInput schema / properties / material_path / description
        Added value: +"assign_material: the material node."
      • removedInput schema / properties / material_path / title
        Removed value: -"Material Path"
      • addedInput schema / properties / material_path / type
        Added value: +"string"
      • removedInput schema / properties / material_type / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • removedInput schema / properties / material_type / default
        Removed value: -null
      • addedInput schema / properties / material_type / description
        Added value: +"material: the shader type, for example \"principledshader\"."
      • removedInput schema / properties / material_type / title
        Removed value: -"Material Type"
      • addedInput schema / properties / material_type / type
        Added value: +"string"
      • removedInput schema / properties / mode / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / mode / description
        Added value: +"One of \"create\", \"delete\", \"copy\", \"move\", \"rename\", \"flags\", \"color\", \"layout\", \"wrangle\", \"material\", \"assign_material\", \"take\", \"current_network\", \"note\", \"box\"."
      • removedInput schema / properties / mode / title
        Removed value: -"Mode"
      • addedInput schema / properties / mode / type
        Added value: +"string"
      • removedInput schema / properties / name / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • removedInput schema / properties / name / default
        Removed value: -null
      • addedInput schema / properties / name / description
        Added value: +"create, material: the name of the new node. take: the name of a new take."
      • removedInput schema / properties / name / title
        Removed value: -"Name"
      • addedInput schema / properties / name / type
        Added value: +"string"
      • addedInput schema / properties / names / additionalProperties
        Added value: +{
        +  "type": "string"
        +}
      • removedInput schema / properties / names / anyOf
        Removed value: -[
        -  {
        -    "additionalProperties": {
        -      "type": "string"
        -    },
        -    "type": "object"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • removedInput schema / properties / names / default
        Removed value: -null
      • addedInput schema / properties / names / description
        Added value: +"copy: a new name for each source, by source path or name."
      • removedInput schema / properties / names / title
        Removed value: -"Names"
      • addedInput schema / properties / names / type
        Added value: +"object"
      • removedInput schema / properties / new_name / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • removedInput schema / properties / new_name / default
        Removed value: -null
      • addedInput schema / properties / new_name / description
        Added value: +"rename: the new name."
      • removedInput schema / properties / new_name / title
        Removed value: -"New Name"
      • addedInput schema / properties / new_name / type
        Added value: +"string"
      • removedInput schema / properties / node_type / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • removedInput schema / properties / node_type / default
        Removed value: -null
      • addedInput schema / properties / node_type / description
        Added value: +"create: the node type, for example \"box\" or \"attribwrangle\"."
      • removedInput schema / properties / node_type / title
        Removed value: -"Node Type"
      • addedInput schema / properties / node_type / type
        Added value: +"string"
      • addedInput schema / properties / parameters / additionalProperties
        Added value: +true
      • removedInput schema / properties / parameters / anyOf
        Removed value: -[
        -  {
        -    "additionalProperties": true,
        -    "type": "object"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • removedInput schema / properties / parameters / default
        Removed value: -null
      • addedInput schema / properties / parameters / description
        Added value: +"create, material: values to set on the new node, by parameter name."
      • removedInput schema / properties / parameters / title
        Removed value: -"Parameters"
      • addedInput schema / properties / parameters / type
        Added value: +"object"
      • removedInput schema / properties / parent_path / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • removedInput schema / properties / parent_path / default
        Removed value: -null
      • addedInput schema / properties / parent_path / description
        Added value: +"create, wrangle, note: the network that gets the new node."
      • removedInput schema / properties / parent_path / title
        Removed value: -"Parent Path"
      • addedInput schema / properties / parent_path / type
        Added value: +"string"
      • removedInput schema / properties / path / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • removedInput schema / properties / path / default
        Removed value: -null
      • addedInput schema / properties / path / description
        Added value: +"The node to change. layout: the network. delete: a node, a sticky note or a network box."
      • removedInput schema / properties / path / title
        Removed value: -"Path"
      • addedInput schema / properties / path / type
        Added value: +"string"
      • removedInput schema / properties / paths / anyOf
        Removed value: -[
        -  {
        -    "items": {
        -      "type": "string"
        -    },
        -    "type": "array"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • removedInput schema / properties / paths / default
        Removed value: -null
      • addedInput schema / properties / paths / description
        Added value: +"copy: the nodes to copy. layout: place only these nodes. box: the nodes to put in the box."
      • addedInput schema / properties / paths / items
        Added value: +{
        +  "type": "string"
        +}
      • removedInput schema / properties / paths / title
        Removed value: -"Paths"
      • addedInput schema / properties / paths / type
        Added value: +"array"
      • removedInput schema / properties / position / anyOf
        Removed value: -[
        -  {
        -    "items": {
        -      "type": "number"
        -    },
        -    "type": "array"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • removedInput schema / properties / position / default
        Removed value: -null
      • addedInput schema / properties / position / description
        Added value: +"create, move, note: [x, y] on the canvas."
      • addedInput schema / properties / position / items
        Added value: +{
        +  "type": "number"
        +}
      • removedInput schema / properties / position / title
        Removed value: -"Position"
      • addedInput schema / properties / position / type
        Added value: +"array"
      • removedInput schema / properties / render / anyOf
        Removed value: -[
        -  {
        -    "type": "boolean"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • removedInput schema / properties / render / default
        Removed value: -null
      • addedInput schema / properties / render / description
        Added value: +"flags: the render flag, which is not the display flag."
      • removedInput schema / properties / render / title
        Removed value: -"Render"
      • addedInput schema / properties / render / type
        Added value: +"boolean"
      • removedInput schema / properties / replace / anyOf
        Removed value: -[
        -  {
        -    "items": {
        -      "additionalProperties": {
        -        "type": "string"
        -      },
        -      "type": "object"
        -    },
        -    "type": "array"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • removedInput schema / properties / replace / default
        Removed value: -null
      • addedInput schema / properties / replace / description
        Added value: +"wrangle: edit the snippet in place, a list of {\"old\": ..., \"new\": ...}. Each old must appear exactly once."
      • addedInput schema / properties / replace / items
        Added value: +{
        +  "additionalProperties": {
        +    "type": "string"
        +  },
        +  "type": "object"
        +}
      • removedInput schema / properties / replace / title
        Removed value: -"Replace"
      • addedInput schema / properties / replace / type
        Added value: +"array"
      • removedInput schema / properties / suffix / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • removedInput schema / properties / suffix / default
        Removed value: -null
      • addedInput schema / properties / suffix / description
        Added value: +"copy: text added to the name of each copy."
      • removedInput schema / properties / suffix / title
        Removed value: -"Suffix"
      • addedInput schema / properties / suffix / type
        Added value: +"string"
      • removedInput schema / properties / take_name / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • removedInput schema / properties / take_name / default
        Removed value: -null
      • addedInput schema / properties / take_name / description
        Added value: +"take: the take to make current."
      • removedInput schema / properties / take_name / title
        Removed value: -"Take Name"
      • addedInput schema / properties / take_name / type
        Added value: +"string"
      • addedInput schema / properties / text
        Added value: +{
        +  "description": "note: the text of the note. box: the comment of the box.",
        +  "type": "string"
        +}
      • removedInput schema / title
        Removed value: -"toolArguments"
    • Changednode_inspect60 fields changed
      • removedInput schema / properties / channel / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • removedInput schema / properties / channel / default
        Removed value: -null
      • addedInput schema / properties / channel / description
        Added value: +"channels: the CHOP channel whose samples to read."
      • removedInput schema / properties / channel / title
        Removed value: -"Channel"
      • addedInput schema / properties / channel / type
        Added value: +"string"
      • removedInput schema / properties / end / anyOf
        Removed value: -[
        -  {
        -    "type": "number"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • removedInput schema / properties / end / default
        Removed value: -null
      • addedInput schema / properties / end / description
        Added value: +"channels: the last sample frame."
      • removedInput schema / properties / end / title
        Removed value: -"End"
      • addedInput schema / properties / end / type
        Added value: +"number"
      • removedInput schema / properties / field_name / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • removedInput schema / properties / field_name / default
        Removed value: -null
      • addedInput schema / properties / field_name / description
        Added value: +"simulation: the field of object_name to read."
      • removedInput schema / properties / field_name / title
        Removed value: -"Field Name"
      • addedInput schema / properties / field_name / type
        Added value: +"string"
      • removedInput schema / properties / fields / anyOf
        Removed value: -[
        -  {
        -    "items": {
        -      "type": "string"
        -    },
        -    "type": "array"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • removedInput schema / properties / fields / default
        Removed value: -null
      • addedInput schema / properties / fields / description
        Added value: +"parms, changed: keep only these keys of each parameter, for example [\"value\", \"expression\"]. The name is always kept."
      • addedInput schema / properties / fields / items
        Added value: +{
        +  "type": "string"
        +}
      • removedInput schema / properties / fields / title
        Removed value: -"Fields"
      • addedInput schema / properties / fields / type
        Added value: +"array"
      • changedInput schema / properties / frames / anyOf
        Previous value: -[
        -  {
        -    "type": "number"
        -  },
        -  {
        -    "items": {
        -      "type": "number"
        -    },
        -    "type": "array"
        -  },
        -  {
        -    "additionalProperties": {
        -      "type": "number"
        -    },
        -    "type": "object"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "type": "number"
        +  },
        +  {
        +    "items": {
        +      "type": "number"
        +    },
        +    "type": "array"
        +  },
        +  {
        +    "additionalProperties": {
        +      "type": "number"
        +    },
        +    "type": "object"
        +  }
        +]
      • removedInput schema / properties / frames / default
        Removed value: -null
      • addedInput schema / properties / frames / description
        Added value: +"Read at another frame, or at several: one frame, a list, or {\"start\": 1, \"end\": 10, \"step\": 2}. With time_dependency, time each node. The playbar goes back after."
      • removedInput schema / properties / frames / title
        Removed value: -"Frames"
      • removedInput schema / properties / has_expression / anyOf
        Removed value: -[
        -  {
        -    "type": "boolean"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / has_expression / description
        Added value: +"parms: keep only the parameters that carry an expression."
      • removedInput schema / properties / has_expression / title
        Removed value: -"Has Expression"
      • addedInput schema / properties / has_expression / type
        Added value: +"boolean"
      • removedInput schema / properties / include_all_parms / anyOf
        Removed value: -[
        -  {
        -    "type": "boolean"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / include_all_parms / description
        Added value: +"info: list every parameter, not only the ones that changed."
      • removedInput schema / properties / include_all_parms / title
        Removed value: -"Include All Parms"
      • addedInput schema / properties / include_all_parms / type
        Added value: +"boolean"
      • removedInput schema / properties / mode / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / mode / description
        Added value: +"One of \"info\", \"parms\", \"schema\", \"changed\", \"names\", \"expression\", \"keyframes\", \"code\", \"cook_chain\", \"explain\", \"material\", \"image\", \"channels\", \"simulation\", \"render_settings\", \"cache\", \"time_dependency\", \"validate\", \"layout\", \"readers\"."
      • removedInput schema / properties / mode / title
        Removed value: -"Mode"
      • addedInput schema / properties / mode / type
        Added value: +"string"
      • removedInput schema / properties / object_name / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • removedInput schema / properties / object_name / default
        Removed value: -null
      • addedInput schema / properties / object_name / description
        Added value: +"simulation: the DOP object to read."
      • removedInput schema / properties / object_name / title
        Removed value: -"Object Name"
      • addedInput schema / properties / object_name / type
        Added value: +"string"
      • removedInput schema / properties / parm / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • removedInput schema / properties / parm / default
        Removed value: -null
      • addedInput schema / properties / parm / description
        Added value: +"parms, expression, keyframes, readers: the parameter name."
      • removedInput schema / properties / parm / title
        Removed value: -"Parm"
      • addedInput schema / properties / parm / type
        Added value: +"string"
      • addedInput schema / properties / paths / description
        Added value: +"One node path, or a list. A list keeps going after a node that fails, and each result names its path."
      • removedInput schema / properties / paths / title
        Removed value: -"Paths"
      • removedInput schema / properties / pattern / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • removedInput schema / properties / pattern / default
        Removed value: -null
      • addedInput schema / properties / pattern / description
        Added value: +"parms, changed: keep the parameters whose name or label holds this text or matches it as a glob. \"|\" separates alternatives: \"time|step|cfl\"."
      • removedInput schema / properties / pattern / title
        Removed value: -"Pattern"
      • addedInput schema / properties / pattern / type
        Added value: +"string"
      • removedInput schema / properties / start / anyOf
        Removed value: -[
        -  {
        -    "type": "number"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • removedInput schema / properties / start / default
        Removed value: -null
      • addedInput schema / properties / start / description
        Added value: +"channels: the first sample frame."
      • removedInput schema / properties / start / title
        Removed value: -"Start"
      • addedInput schema / properties / start / type
        Added value: +"number"
      • removedInput schema / title
        Removed value: -"toolArguments"
    • Changedparm_set107 fields changed
      • removedInput schema / properties / channel_name / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • removedInput schema / properties / channel_name / default
        Removed value: -null
      • addedInput schema / properties / channel_name / description
        Added value: +"chop_export: the channel that drives the parameter."
      • removedInput schema / properties / channel_name / title
        Removed value: -"Channel Name"
      • addedInput schema / properties / channel_name / type
        Added value: +"string"
      • removedInput schema / properties / chop_path / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • removedInput schema / properties / chop_path / default
        Removed value: -null
      • addedInput schema / properties / chop_path / description
        Added value: +"chop_export: the CHOP node."
      • removedInput schema / properties / chop_path / title
        Removed value: -"Chop Path"
      • addedInput schema / properties / chop_path / type
        Added value: +"string"
      • removedInput schema / properties / default / anyOf
        Removed value: -[
        -  {},
        -  {
        -    "type": "null"
        -  }
        -]
      • removedInput schema / properties / default / default
        Removed value: -null
      • addedInput schema / properties / default / description
        Added value: +"spare: the default of one control."
      • removedInput schema / properties / default / title
        Removed value: -"Default"
      • removedInput schema / properties / expression / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • removedInput schema / properties / expression / default
        Removed value: -null
      • addedInput schema / properties / expression / description
        Added value: +"expression: the expression text."
      • removedInput schema / properties / expression / title
        Removed value: -"Expression"
      • addedInput schema / properties / expression / type
        Added value: +"string"
      • removedInput schema / properties / follow_reference / anyOf
        Removed value: -[
        -  {
        -    "type": "boolean"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / follow_reference / description
        Added value: +"Write the node at the other end of a channel reference. Without it, a write through a reference is refused."
      • removedInput schema / properties / follow_reference / title
        Removed value: -"Follow Reference"
      • addedInput schema / properties / follow_reference / type
        Added value: +"boolean"
      • removedInput schema / properties / frame / anyOf
        Removed value: -[
        -  {
        -    "type": "number"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • removedInput schema / properties / frame / default
        Removed value: -null
      • addedInput schema / properties / frame / description
        Added value: +"keyframe, delete_keyframe: the frame of the key."
      • removedInput schema / properties / frame / title
        Removed value: -"Frame"
      • addedInput schema / properties / frame / type
        Added value: +"number"
      • changedInput schema / properties / items / anyOf
        Previous value: -[
        -  {
        -    "additionalProperties": true,
        -    "type": "object"
        -  },
        -  {
        -    "items": {
        -      "additionalProperties": true,
        -      "type": "object"
        -    },
        -    "type": "array"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "additionalProperties": true,
        +    "type": "object"
        +  },
        +  {
        +    "items": {
        +      "additionalProperties": true,
        +      "type": "object"
        +    },
        +    "type": "array"
        +  }
        +]
      • removedInput schema / properties / items / default
        Removed value: -null
      • addedInput schema / properties / items / description
        Added value: +"A list of writes, each a dictionary with the keys of one call. An argument outside items is the default for each one."
      • removedInput schema / properties / items / title
        Removed value: -"Items"
      • removedInput schema / properties / keyframes / anyOf
        Removed value: -[
        -  {
        -    "items": {
        -      "additionalProperties": true,
        -      "type": "object"
        -    },
        -    "type": "array"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • removedInput schema / properties / keyframes / default
        Removed value: -null
      • addedInput schema / properties / keyframes / description
        Added value: +"keyframes: a list of {frame, value}."
      • addedInput schema / properties / keyframes / items
        Added value: +{
        +  "additionalProperties": true,
        +  "type": "object"
        +}
      • removedInput schema / properties / keyframes / title
        Removed value: -"Keyframes"
      • addedInput schema / properties / keyframes / type
        Added value: +"array"
      • removedInput schema / properties / label / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • removedInput schema / properties / label / default
        Removed value: -null
      • addedInput schema / properties / label / description
        Added value: +"spare: the label of one control."
      • removedInput schema / properties / label / title
        Removed value: -"Label"
      • addedInput schema / properties / label / type
        Added value: +"string"
      • removedInput schema / properties / language / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / language / description
        Added value: +"expression: \"hscript\" or \"python\"."
      • removedInput schema / properties / language / title
        Removed value: -"Language"
      • addedInput schema / properties / language / type
        Added value: +"string"
      • removedInput schema / properties / locked / anyOf
        Removed value: -[
        -  {
        -    "type": "boolean"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • removedInput schema / properties / locked / default
        Removed value: -null
      • addedInput schema / properties / locked / description
        Added value: +"lock: true locks the parameter, false unlocks it."
      • removedInput schema / properties / locked / title
        Removed value: -"Locked"
      • addedInput schema / properties / locked / type
        Added value: +"boolean"
      • removedInput schema / properties / mode / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / mode / description
        Added value: +"One of \"value\", \"press\", \"expression\", \"keyframe\", \"keyframes\", \"delete_keyframe\", \"revert\", \"lock\", \"link\", \"spare\", \"render_settings\", \"chop_export\", \"snapshot\", \"restore\", \"diff\"."
      • removedInput schema / properties / mode / title
        Removed value: -"Mode"
      • addedInput schema / properties / mode / type
        Added value: +"string"
      • removedInput schema / properties / name / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • removedInput schema / properties / name / default
        Removed value: -null
      • addedInput schema / properties / name / description
        Added value: +"spare: the name of one control. snapshot, restore, diff: the record on disk."
      • removedInput schema / properties / name / title
        Removed value: -"Name"
      • addedInput schema / properties / name / type
        Added value: +"string"
      • changedInput schema / properties / parameters / anyOf
        Previous value: -[
        -  {
        -    "additionalProperties": true,
        -    "type": "object"
        -  },
        -  {
        -    "items": {
        -      "additionalProperties": true,
        -      "type": "object"
        -    },
        -    "type": "array"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "additionalProperties": true,
        +    "type": "object"
        +  },
        +  {
        +    "items": {
        +      "additionalProperties": true,
        +      "type": "object"
        +    },
        +    "type": "array"
        +  }
        +]
      • removedInput schema / properties / parameters / default
        Removed value: -null
      • addedInput schema / properties / parameters / description
        Added value: +"value: several names and values in one write, as a dictionary. spare: the list of controls to add."
      • removedInput schema / properties / parameters / title
        Removed value: -"Parameters"
      • removedInput schema / properties / parm / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • removedInput schema / properties / parm / default
        Removed value: -null
      • addedInput schema / properties / parm / description
        Added value: +"The parameter name, for example \"tx\" or \"divsize\"."
      • removedInput schema / properties / parm / title
        Removed value: -"Parm"
      • addedInput schema / properties / parm / type
        Added value: +"string"
      • removedInput schema / properties / parm_type / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • removedInput schema / properties / parm_type / default
        Removed value: -null
      • addedInput schema / properties / parm_type / description
        Added value: +"spare: the type of one control, for example \"float\" or \"toggle\"."
      • removedInput schema / properties / parm_type / title
        Removed value: -"Parm Type"
      • addedInput schema / properties / parm_type / type
        Added value: +"string"
      • removedInput schema / properties / path / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • removedInput schema / properties / path / default
        Removed value: -null
      • addedInput schema / properties / path / description
        Added value: +"The node that holds the parameter."
      • removedInput schema / properties / path / title
        Removed value: -"Path"
      • addedInput schema / properties / path / type
        Added value: +"string"
      • removedInput schema / properties / paths / anyOf
        Removed value: -[
        -  {
        -    "items": {
        -      "type": "string"
        -    },
        -    "type": "array"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • removedInput schema / properties / paths / default
        Removed value: -null
      • addedInput schema / properties / paths / description
        Added value: +"snapshot: the nodes to save; \"/obj/geo1/*\" names every node in a network. restore: put back only these nodes."
      • addedInput schema / properties / paths / items
        Added value: +{
        +  "type": "string"
        +}
      • removedInput schema / properties / paths / title
        Removed value: -"Paths"
      • addedInput schema / properties / paths / type
        Added value: +"array"
      • addedInput schema / properties / settings / additionalProperties
        Added value: +true
      • removedInput schema / properties / settings / anyOf
        Removed value: -[
        -  {
        -    "additionalProperties": true,
        -    "type": "object"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • removedInput schema / properties / settings / default
        Removed value: -null
      • addedInput schema / properties / settings / description
        Added value: +"render_settings: the ROP parameters to write, by name."
      • removedInput schema / properties / settings / title
        Removed value: -"Settings"
      • addedInput schema / properties / settings / type
        Added value: +"object"
      • removedInput schema / properties / src_parm / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • removedInput schema / properties / src_parm / default
        Removed value: -null
      • addedInput schema / properties / src_parm / description
        Added value: +"link: the parameter to follow."
      • removedInput schema / properties / src_parm / title
        Removed value: -"Src Parm"
      • addedInput schema / properties / src_parm / type
        Added value: +"string"
      • removedInput schema / properties / src_path / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • removedInput schema / properties / src_path / default
        Removed value: -null
      • addedInput schema / properties / src_path / description
        Added value: +"link: the node to follow."
      • removedInput schema / properties / src_path / title
        Removed value: -"Src Path"
      • addedInput schema / properties / src_path / type
        Added value: +"string"
      • removedInput schema / properties / value / anyOf
        Removed value: -[
        -  {},
        -  {
        -    "type": "null"
        -  }
        -]
      • removedInput schema / properties / value / default
        Removed value: -null
      • addedInput schema / properties / value / description
        Added value: +"value, keyframe: the value to write. A menu takes its token."
      • removedInput schema / properties / value / title
        Removed value: -"Value"
      • removedInput schema / title
        Removed value: -"toolArguments"
    • Changedpdg16 fields changed
      • removedInput schema / properties / dirty_all / anyOf
        Removed value: -[
        -  {
        -    "type": "boolean"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / dirty_all / description
        Added value: +"dirty: also remove the outputs of the node on disk."
      • removedInput schema / properties / dirty_all / title
        Removed value: -"Dirty All"
      • addedInput schema / properties / dirty_all / type
        Added value: +"boolean"
      • removedInput schema / properties / mode / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / mode / description
        Added value: +"One of \"status\", \"workitems\", \"cook\", \"dirty\", \"cancel\"."
      • removedInput schema / properties / mode / title
        Removed value: -"Mode"
      • addedInput schema / properties / mode / type
        Added value: +"string"
      • addedInput schema / properties / path / description
        Added value: +"The TOP network or the TOP node."
      • removedInput schema / properties / path / title
        Removed value: -"Path"
      • removedInput schema / properties / state / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • removedInput schema / properties / state / default
        Removed value: -null
      • addedInput schema / properties / state / description
        Added value: +"workitems: keep the items in this state, for example \"failed\" or \"cooked\"."
      • removedInput schema / properties / state / title
        Removed value: -"State"
      • addedInput schema / properties / state / type
        Added value: +"string"
      • removedInput schema / title
        Removed value: -"toolArguments"
    • Changedplaybar25 fields changed
      • removedInput schema / properties / action / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • removedInput schema / properties / action / default
        Removed value: -null
      • addedInput schema / properties / action / description
        Added value: +"play: \"play\", \"stop\", \"next\", \"previous\", \"start\" or \"end\"."
      • removedInput schema / properties / action / title
        Removed value: -"Action"
      • addedInput schema / properties / action / type
        Added value: +"string"
      • removedInput schema / properties / end / anyOf
        Removed value: -[
        -  {
        -    "type": "number"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • removedInput schema / properties / end / default
        Removed value: -null
      • addedInput schema / properties / end / description
        Added value: +"range and playback: the last frame."
      • removedInput schema / properties / end / title
        Removed value: -"End"
      • addedInput schema / properties / end / type
        Added value: +"number"
      • removedInput schema / properties / frame / anyOf
        Removed value: -[
        -  {
        -    "type": "number"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • removedInput schema / properties / frame / default
        Removed value: -null
      • addedInput schema / properties / frame / description
        Added value: +"frame: the frame to go to."
      • removedInput schema / properties / frame / title
        Removed value: -"Frame"
      • addedInput schema / properties / frame / type
        Added value: +"number"
      • removedInput schema / properties / mode / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / mode / description
        Added value: +"One of \"get\", \"frame\", \"range\", \"playback\", \"play\"."
      • removedInput schema / properties / mode / title
        Removed value: -"Mode"
      • addedInput schema / properties / mode / type
        Added value: +"string"
      • removedInput schema / properties / start / anyOf
        Removed value: -[
        -  {
        -    "type": "number"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • removedInput schema / properties / start / default
        Removed value: -null
      • addedInput schema / properties / start / description
        Added value: +"range and playback: the first frame."
      • removedInput schema / properties / start / title
        Removed value: -"Start"
      • addedInput schema / properties / start / type
        Added value: +"number"
      • removedInput schema / title
        Removed value: -"toolArguments"
    • Changedrender34 fields changed
      • removedInput schema / properties / frame_range / anyOf
        Removed value: -[
        -  {
        -    "items": {
        -      "type": "number"
        -    },
        -    "type": "array"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • removedInput schema / properties / frame_range / default
        Removed value: -null
      • addedInput schema / properties / frame_range / description
        Added value: +"start: [start, end]. Without it the ROP renders its own range."
      • addedInput schema / properties / frame_range / items
        Added value: +{
        +  "type": "number"
        +}
      • removedInput schema / properties / frame_range / title
        Removed value: -"Frame Range"
      • addedInput schema / properties / frame_range / type
        Added value: +"array"
      • removedInput schema / properties / mode / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / mode / description
        Added value: +"One of \"start\", \"progress\", \"settings\", \"create\", \"watch\"."
      • removedInput schema / properties / mode / title
        Removed value: -"Mode"
      • addedInput schema / properties / mode / type
        Added value: +"string"
      • removedInput schema / properties / name / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • removedInput schema / properties / name / default
        Removed value: -null
      • addedInput schema / properties / name / description
        Added value: +"create: the name of the new ROP."
      • removedInput schema / properties / name / title
        Removed value: -"Name"
      • addedInput schema / properties / name / type
        Added value: +"string"
      • removedInput schema / properties / output_path / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • removedInput schema / properties / output_path / default
        Removed value: -null
      • addedInput schema / properties / output_path / description
        Added value: +"watch: the image file to look for on disk."
      • removedInput schema / properties / output_path / title
        Removed value: -"Output Path"
      • addedInput schema / properties / output_path / type
        Added value: +"string"
      • removedInput schema / properties / parent_path / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / parent_path / description
        Added value: +"create: the network that gets the ROP."
      • removedInput schema / properties / parent_path / title
        Removed value: -"Parent Path"
      • addedInput schema / properties / parent_path / type
        Added value: +"string"
      • removedInput schema / properties / path / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • removedInput schema / properties / path / default
        Removed value: -null
      • addedInput schema / properties / path / description
        Added value: +"start, progress, settings: the ROP node."
      • removedInput schema / properties / path / title
        Removed value: -"Path"
      • addedInput schema / properties / path / type
        Added value: +"string"
      • removedInput schema / properties / render_type / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / render_type / description
        Added value: +"create: the ROP kind, for example \"opengl\", \"karma\", \"mantra\" or \"ifd\"."
      • removedInput schema / properties / render_type / title
        Removed value: -"Render Type"
      • addedInput schema / properties / render_type / type
        Added value: +"string"
      • removedInput schema / title
        Removed value: -"toolArguments"
    • Changedscene_file11 fields changed
      • addedInput schema / properties / count
        Added value: +{
        +  "default": 1,
        +  "description": "undo and redo: how many steps.",
        +  "type": "integer"
        +}
      • removedInput schema / properties / mode / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / mode / description
        Added value: +"One of \"info\", \"save\", \"load\", \"undo\", \"redo\"."
      • removedInput schema / properties / mode / title
        Removed value: -"Mode"
      • addedInput schema / properties / mode / type
        Added value: +"string"
      • removedInput schema / properties / path / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • removedInput schema / properties / path / default
        Removed value: -null
      • addedInput schema / properties / path / description
        Added value: +"save: the file to write; empty saves over the open file. load: the .hip file to open."
      • removedInput schema / properties / path / title
        Removed value: -"Path"
      • addedInput schema / properties / path / type
        Added value: +"string"
      • removedInput schema / title
        Removed value: -"toolArguments"
    • Changedscene_overview29 fields changed
      • removedInput schema / properties / category / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • removedInput schema / properties / category / default
        Removed value: -null
      • addedInput schema / properties / category / description
        Added value: +"node_types: the context, for example \"Sop\", \"Object\", \"Lop\" or \"Driver\"."
      • removedInput schema / properties / category / title
        Removed value: -"Category"
      • addedInput schema / properties / category / type
        Added value: +"string"
      • removedInput schema / properties / mode / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / mode / description
        Added value: +"One of \"scene\", \"network\", \"children\", \"search\", \"node_types\", \"errors\", \"materials\", \"lights\", \"takes\", \"caches\", \"render_nodes\", \"viewports\"."
      • removedInput schema / properties / mode / title
        Removed value: -"Mode"
      • addedInput schema / properties / mode / type
        Added value: +"string"
      • removedInput schema / properties / node_type / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • removedInput schema / properties / node_type / default
        Removed value: -null
      • addedInput schema / properties / node_type / description
        Added value: +"search: keep the nodes of this type, for example \"null\"."
      • removedInput schema / properties / node_type / title
        Removed value: -"Node Type"
      • addedInput schema / properties / node_type / type
        Added value: +"string"
      • removedInput schema / properties / path / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • removedInput schema / properties / path / default
        Removed value: -null
      • addedInput schema / properties / path / description
        Added value: +"A node path such as \"/obj\" or \"/obj/geo1\": the network to list or to search."
      • removedInput schema / properties / path / title
        Removed value: -"Path"
      • addedInput schema / properties / path / type
        Added value: +"string"
      • removedInput schema / properties / pattern / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • removedInput schema / properties / pattern / default
        Removed value: -null
      • addedInput schema / properties / pattern / description
        Added value: +"search: the name to match, with * and ? as wildcards."
      • removedInput schema / properties / pattern / title
        Removed value: -"Pattern"
      • addedInput schema / properties / pattern / type
        Added value: +"string"
      • removedInput schema / properties / recursive / anyOf
        Removed value: -[
        -  {
        -    "type": "boolean"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / recursive / description
        Added value: +"children: also list the children of the children."
      • removedInput schema / properties / recursive / title
        Removed value: -"Recursive"
      • addedInput schema / properties / recursive / type
        Added value: +"boolean"
      • removedInput schema / title
        Removed value: -"toolArguments"
    • Changedselect5 fields changed
      • changedInput schema / properties / paths / anyOf
        Previous value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "items": {
        -      "type": "string"
        -    },
        -    "type": "array"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "type": "string"
        +  },
        +  {
        +    "items": {
        +      "type": "string"
        +    },
        +    "type": "array"
        +  }
        +]
      • removedInput schema / properties / paths / default
        Removed value: -null
      • addedInput schema / properties / paths / description
        Added value: +"Leave it out to read the selection. One path or a list of paths replaces it. An empty list clears it."
      • removedInput schema / properties / paths / title
        Removed value: -"Paths"
      • removedInput schema / title
        Removed value: -"toolArguments"
    • Changedsession20 fields changed
      • removedInput schema / properties / action / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / action / description
        Added value: +"One of \"status\", \"list\", \"attach\", \"detach\", \"interrupt\", \"start\", \"start_gui\", \"stop\"."
      • removedInput schema / properties / action / title
        Removed value: -"Action"
      • addedInput schema / properties / action / type
        Added value: +"string"
      • removedInput schema / properties / hip / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • removedInput schema / properties / hip / default
        Removed value: -null
      • addedInput schema / properties / hip / description
        Added value: +"start_gui: the .hip file to open."
      • removedInput schema / properties / hip / title
        Removed value: -"Hip"
      • addedInput schema / properties / hip / type
        Added value: +"string"
      • removedInput schema / properties / port / anyOf
        Removed value: -[
        -  {
        -    "type": "integer"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • removedInput schema / properties / port / default
        Removed value: -null
      • addedInput schema / properties / port / description
        Added value: +"attach: the port of the Houdini to talk to, from list. interrupt: the Houdini to interrupt, when not the attached one."
      • removedInput schema / properties / port / title
        Removed value: -"Port"
      • addedInput schema / properties / port / type
        Added value: +"integer"
      • removedInput schema / properties / version / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • removedInput schema / properties / version / default
        Removed value: -null
      • addedInput schema / properties / version / description
        Added value: +"start and start_gui: the Houdini release, for example \"21.0\" or \"21.0.829\"."
      • removedInput schema / properties / version / title
        Removed value: -"Version"
      • addedInput schema / properties / version / type
        Added value: +"string"
      • removedInput schema / title
        Removed value: -"toolArguments"
    • Changedstage_inspect51 fields changed
      • removedInput schema / properties / attr_name / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • removedInput schema / properties / attr_name / default
        Removed value: -null
      • addedInput schema / properties / attr_name / description
        Added value: +"attribute: the attribute to read, for example \"points\"."
      • removedInput schema / properties / attr_name / title
        Removed value: -"Attr Name"
      • addedInput schema / properties / attr_name / type
        Added value: +"string"
      • removedInput schema / properties / count / anyOf
        Removed value: -[
        -  {
        -    "type": "integer"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / count / description
        Added value: +"modified: how many prims come back."
      • removedInput schema / properties / count / title
        Removed value: -"Count"
      • addedInput schema / properties / count / type
        Added value: +"integer"
      • changedInput schema / properties / frames / anyOf
        Previous value: -[
        -  {
        -    "type": "number"
        -  },
        -  {
        -    "items": {
        -      "type": "number"
        -    },
        -    "type": "array"
        -  },
        -  {
        -    "additionalProperties": {
        -      "type": "number"
        -    },
        -    "type": "object"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "type": "number"
        +  },
        +  {
        +    "items": {
        +      "type": "number"
        +    },
        +    "type": "array"
        +  },
        +  {
        +    "additionalProperties": {
        +      "type": "number"
        +    },
        +    "type": "object"
        +  }
        +]
      • removedInput schema / properties / frames / default
        Removed value: -null
      • addedInput schema / properties / frames / description
        Added value: +"Read at another frame, or at several: one frame, a list, or {\"start\": 1, \"end\": 10, \"step\": 2}. The playbar goes back after."
      • removedInput schema / properties / frames / title
        Removed value: -"Frames"
      • removedInput schema / properties / include_attrs / anyOf
        Removed value: -[
        -  {
        -    "type": "boolean"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / include_attrs / description
        Added value: +"prim: also return the attributes of the prim."
      • removedInput schema / properties / include_attrs / title
        Removed value: -"Include Attrs"
      • addedInput schema / properties / include_attrs / type
        Added value: +"boolean"
      • removedInput schema / properties / layer_index / anyOf
        Removed value: -[
        -  {
        -    "type": "integer"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / layer_index / description
        Added value: +"layer: which layer of the stack, from 0 (the strongest)."
      • removedInput schema / properties / layer_index / title
        Removed value: -"Layer Index"
      • addedInput schema / properties / layer_index / type
        Added value: +"integer"
      • removedInput schema / properties / max_depth / anyOf
        Removed value: -[
        -  {
        -    "type": "integer"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / max_depth / description
        Added value: +"prims: how many levels of the tree come back."
      • removedInput schema / properties / max_depth / title
        Removed value: -"Max Depth"
      • addedInput schema / properties / max_depth / type
        Added value: +"integer"
      • removedInput schema / properties / mode / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / mode / description
        Added value: +"One of \"stage\", \"prims\", \"prim\", \"search\", \"layer\", \"attribute\", \"composition\", \"variants\", \"stats\", \"modified\", \"lights\", \"transform\"."
      • removedInput schema / properties / mode / title
        Removed value: -"Mode"
      • addedInput schema / properties / mode / type
        Added value: +"string"
      • addedInput schema / properties / path / description
        Added value: +"The LOP node whose stage to read."
      • removedInput schema / properties / path / title
        Removed value: -"Path"
      • removedInput schema / properties / pattern / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • removedInput schema / properties / pattern / default
        Removed value: -null
      • addedInput schema / properties / pattern / description
        Added value: +"search: the prim path to match, with * as a wildcard."
      • removedInput schema / properties / pattern / title
        Removed value: -"Pattern"
      • addedInput schema / properties / pattern / type
        Added value: +"string"
      • removedInput schema / properties / prim_path / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • removedInput schema / properties / prim_path / default
        Removed value: -null
      • addedInput schema / properties / prim_path / description
        Added value: +"prim, attribute, composition, variants, stats, transform: the prim, for example \"/world/geo/rock\"."
      • removedInput schema / properties / prim_path / title
        Removed value: -"Prim Path"
      • addedInput schema / properties / prim_path / type
        Added value: +"string"
      • removedInput schema / properties / root_prim / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / root_prim / description
        Added value: +"prims: the prim where the tree starts."
      • removedInput schema / properties / root_prim / title
        Removed value: -"Root Prim"
      • addedInput schema / properties / root_prim / type
        Added value: +"string"
      • removedInput schema / properties / type_name / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • removedInput schema / properties / type_name / default
        Removed value: -null
      • addedInput schema / properties / type_name / description
        Added value: +"search: keep the prims of this type, for example \"Mesh\" or \"SphereLight\"."
      • removedInput schema / properties / type_name / title
        Removed value: -"Type Name"
      • addedInput schema / properties / type_name / type
        Added value: +"string"
      • removedInput schema / title
        Removed value: -"toolArguments"
  4. 187 tool updatesv0.1.1
    • Removedassign_material
    • Removedassign_material_workflow
    • Changedbatch5 fields changed
      • addedInput schema / additionalProperties
        Added value: +false
      • removedInput schema / properties / operations / default
        Removed value: -[]
      • addedInput schema / properties / operations / items / additionalProperties
        Added value: +true
      • addedInput schema / required
        Added value: +[
        +  "operations"
        +]
      • changedInput schema / title
        Previous value: -"batchArguments"New value: +"toolArguments"
    • Removedbuild_sop_chain
    • Addedcapture
    • Removedcapture_screenshot
    • Removedclear_cache
    • Addedconnect
    • Removedconnect_nodes
    • Removedconnect_nodes_batch
    • Addedconsole
    • Addedcook
    • Removedcopy_node
    • Removedcreate_chop_node
    • Removedcreate_cop_node
    • Removedcreate_lop_node
    • Removedcreate_material_network
    • Removedcreate_material_workflow
    • Removedcreate_node
    • Removedcreate_render_node
    • Removedcreate_spare_parameter
    • Removedcreate_spare_parameters
    • Removedcreate_take
    • Removedcreate_vex_expression
    • Removedcreate_wrangle
    • Removeddelete_keyframe
    • Removeddelete_node
    • Removeddisconnect_node_input
    • Addeddocs
    • Removedevaluate_expression
    • Addedexecute
    • Removedexecute_houdini_code
    • Removedexecute_hscript
    • Removedexplain_node
    • Removedexport_chop_to_parm
    • Removedfind_error_nodes
    • Removedfind_nearest_point
    • Removedfind_nodes
    • Removedframe_all
    • Removedframe_selection
    • Removedgeo_export
    • Addedgeometry_inspect
    • Removedget_attrib_values
    • Removedget_bounding_box
    • Removedget_cache_status
    • Removedget_changed_parms
    • Removedget_chop_data
    • Removedget_connection_status
    • Removedget_cook_chain
    • Removedget_cop_geometry
    • Removedget_cop_info
    • Removedget_cop_layer
    • Removedget_cop_vdb
    • Removedget_current_take
    • Removedget_doc
    • Removedget_dop_field
    • Removedget_dop_object
    • Removedget_dop_relationships
    • Removedget_env_variable
    • Removedget_expression
    • Removedget_frame
    • Removedget_geo_summary
    • Removedget_group_members
    • Removedget_groups
    • Removedget_hda_section_content
    • Removedget_hda_sections
    • Removedget_houdini_events
    • Removedget_keyframes
    • Removedget_last_modified_prims
    • Removedget_material_info
    • Removedget_network_overview
    • Removedget_node_doc
    • Removedget_node_info
    • Removedget_parameter
    • Removedget_parameter_schema
    • Removedget_points
    • Removedget_prim_intrinsics
    • Removedget_prims
    • Removedget_render_progress
    • Removedget_render_settings
    • Removedget_scene_info
    • Removedget_scene_summary
    • Removedget_selection
    • Removedget_sim_memory_usage
    • Removedget_simulation_info
    • Removedget_usd_attribute
    • Removedget_usd_composition
    • Removedget_usd_prim_stats
    • Removedget_usd_variants
    • Removedget_viewport_info
    • Removedget_wrangle_code
    • Addedhda
    • Removedhda_create
    • Removedhda_get
    • Removedhda_install
    • Removedhda_list
    • Removedinspect_usd_layer
    • Removedlayout_children
    • Removedlink_parameters
    • Removedlist_caches
    • Removedlist_children
    • Removedlist_chop_channels
    • Removedlist_cop_node_types
    • Removedlist_dop_objects
    • Removedlist_lights
    • Removedlist_material_types
    • Removedlist_materials
    • Removedlist_node_types
    • Removedlist_panes
    • Removedlist_render_nodes
    • Removedlist_takes
    • Removedlist_usd_prims
    • Removedload_scene
    • Removedlock_parameter
    • Removedlop_import
    • Removedlop_layer_info
    • Removedlop_prim_get
    • Removedlop_prim_search
    • Removedlop_stage_info
    • Removedmodify_node
    • Removedmonitor_render
    • Removedmove_node
    • Addednode_edit
    • Addednode_inspect
    • Addedparm_set
    • Addedpdg
    • Removedpdg_cancel
    • Removedpdg_cook
    • Removedpdg_dirty
    • Removedpdg_status
    • Removedpdg_workitems
    • Removedping
    • Addedplaybar
    • Removedplaybar_control
    • Removedreload_hda
    • Removedrename_node
    • Addedrender
    • Removedrender_flipbook
    • Removedrender_quad_views
    • Removedrender_single_view
    • Removedrender_specific_camera
    • Removedreorder_inputs
    • Removedreset_simulation
    • Removedrevert_parameter
    • Removedsave_scene
    • Addedscene_file
    • Addedscene_overview
    • Removedsearch_docs
    • Addedselect
    • Addedsession
    • Removedset_cop_flags
    • Removedset_current_network
    • Removedset_current_take
    • Removedset_detail_attrib
    • Removedset_expression
    • Removedset_frame
    • Removedset_frame_range
    • Removedset_hda_section_content
    • Removedset_keyframe
    • Removedset_keyframes
    • Removedset_material
    • Removedset_node_color
    • Removedset_node_flags
    • Removedset_parameter
    • Removedset_parameters
    • Removedset_playback_range
    • Removedset_render_settings
    • Removedset_selection
    • Removedset_usd_attribute
    • Removedset_viewport_camera
    • Removedset_viewport_direction
    • Removedset_viewport_display
    • Removedset_viewport_renderer
    • Removedset_wrangle_code
    • Removedsetup_flip_sim
    • Removedsetup_pyro_sim
    • Removedsetup_rbd_sim
    • Removedsetup_render
    • Removedsetup_vellum_sim
    • Addedstage_inspect
    • Removedstart_render
    • Removedstep_simulation
    • Removedsubscribe_houdini_events
    • Removeduninstall_hda
    • Removedupdate_hda
    • Removedvalidate_vex
    • Removedwrite_cache
  5. 168 tool updatesv0.1.0
    • First observedassign_material
    • First observedassign_material_workflow
    • First observedbatch
    • First observedbuild_sop_chain
    • First observedcapture_screenshot
    • First observedclear_cache
    • First observedconnect_nodes
    • First observedconnect_nodes_batch
    • First observedcopy_node
    • First observedcreate_chop_node
    • First observedcreate_cop_node
    • First observedcreate_lop_node
    • First observedcreate_material_network
    • First observedcreate_material_workflow
    • First observedcreate_node
    • First observedcreate_render_node
    • First observedcreate_spare_parameter
    • First observedcreate_spare_parameters
    • First observedcreate_take
    • First observedcreate_vex_expression
    • First observedcreate_wrangle
    • First observeddelete_keyframe
    • First observeddelete_node
    • First observeddisconnect_node_input
    • First observedevaluate_expression
    • First observedexecute_houdini_code
    • First observedexecute_hscript
    • First observedexplain_node
    • First observedexport_chop_to_parm
    • First observedfind_error_nodes
    • First observedfind_nearest_point
    • First observedfind_nodes
    • First observedframe_all
    • First observedframe_selection
    • First observedgeo_export
    • First observedget_attrib_values
    • First observedget_bounding_box
    • First observedget_cache_status
    • First observedget_changed_parms
    • First observedget_chop_data
    • First observedget_connection_status
    • First observedget_cook_chain
    • First observedget_cop_geometry
    • First observedget_cop_info
    • First observedget_cop_layer
    • First observedget_cop_vdb
    • First observedget_current_take
    • First observedget_doc
    • First observedget_dop_field
    • First observedget_dop_object
    • First observedget_dop_relationships
    • First observedget_env_variable
    • First observedget_expression
    • First observedget_frame
    • First observedget_geo_summary
    • First observedget_group_members
    • First observedget_groups
    • First observedget_hda_section_content
    • First observedget_hda_sections
    • First observedget_houdini_events
    • First observedget_keyframes
    • First observedget_last_modified_prims
    • First observedget_material_info
    • First observedget_network_overview
    • First observedget_node_doc
    • First observedget_node_info
    • First observedget_parameter
    • First observedget_parameter_schema
    • First observedget_points
    • First observedget_prim_intrinsics
    • First observedget_prims
    • First observedget_render_progress
    • First observedget_render_settings
    • First observedget_scene_info
    • First observedget_scene_summary
    • First observedget_selection
    • First observedget_sim_memory_usage
    • First observedget_simulation_info
    • First observedget_usd_attribute
    • First observedget_usd_composition
    • First observedget_usd_prim_stats
    • First observedget_usd_variants
    • First observedget_viewport_info
    • First observedget_wrangle_code
    • First observedhda_create
    • First observedhda_get
    • First observedhda_install
    • First observedhda_list
    • First observedinspect_usd_layer
    • First observedlayout_children
    • First observedlink_parameters
    • First observedlist_caches
    • First observedlist_children
    • First observedlist_chop_channels
    • First observedlist_cop_node_types
    • First observedlist_dop_objects
    • First observedlist_lights
    • First observedlist_material_types
    • First observedlist_materials
    • First observedlist_node_types
    • First observedlist_panes
    • First observedlist_render_nodes
    • First observedlist_takes
    • First observedlist_usd_prims
    • First observedload_scene
    • First observedlock_parameter
    • First observedlop_import
    • First observedlop_layer_info
    • First observedlop_prim_get
    • First observedlop_prim_search
    • First observedlop_stage_info
    • First observedmodify_node
    • First observedmonitor_render
    • First observedmove_node
    • First observedpdg_cancel
    • First observedpdg_cook
    • First observedpdg_dirty
    • First observedpdg_status
    • First observedpdg_workitems
    • First observedping
    • First observedplaybar_control
    • First observedreload_hda
    • First observedrename_node
    • First observedrender_flipbook
    • First observedrender_quad_views
    • First observedrender_single_view
    • First observedrender_specific_camera
    • First observedreorder_inputs
    • First observedreset_simulation
    • First observedrevert_parameter
    • First observedsave_scene
    • First observedsearch_docs
    • First observedset_cop_flags
    • First observedset_current_network
    • First observedset_current_take
    • First observedset_detail_attrib
    • First observedset_expression
    • First observedset_frame
    • First observedset_frame_range
    • First observedset_hda_section_content
    • First observedset_keyframe
    • First observedset_keyframes
    • First observedset_material
    • First observedset_node_color
    • First observedset_node_flags
    • First observedset_parameter
    • First observedset_parameters
    • First observedset_playback_range
    • First observedset_render_settings
    • First observedset_selection
    • First observedset_usd_attribute
    • First observedset_viewport_camera
    • First observedset_viewport_direction
    • First observedset_viewport_display
    • First observedset_viewport_renderer
    • First observedset_wrangle_code
    • First observedsetup_flip_sim
    • First observedsetup_pyro_sim
    • First observedsetup_rbd_sim
    • First observedsetup_render
    • First observedsetup_vellum_sim
    • First observedstart_render
    • First observedstep_simulation
    • First observedsubscribe_houdini_events
    • First observeduninstall_hda
    • First observedupdate_hda
    • First observedvalidate_vex
    • First observedwrite_cache

TDQS

A4.5/5.0

Scored across 20 tools

Disambiguation4/5

Most tools have clearly distinct purposes, and descriptions explicitly cross-reference alternatives (e.g., cook vs pdg vs render, node_inspect vs scene_overview vs geometry_inspect). Minor overlaps remain: scene_overview lights and stage_inspect lights both read USD stage lights, geometry_inspect image and node_inspect image both inspect COP nodes, and selection/cache data can be obtained from multiple tools. These are edge cases, but they keep the set from being perfectly unambiguous.

Naming Consistency4/5

All names use lowercase snake_case or single lowercase tokens, with no camelCase or case-style mixing. The pattern is not strictly verb_noun: there are single verbs (capture, connect, select, cook, render, execute), single nouns (batch, console, docs, hda, pdg, playbar, session), and noun_verb compounds (node_edit, node_inspect, parm_set). Still readable and mostly predictable, with only minor deviations.

Tool Count4/5

20 tools is above the typical 3-15 sweet spot and lands in the heavier 16-25 range, so it is mildly over rather than perfectly scoped. However, each tool maps to a distinct Houdini subsystem, and many operations are consolidated into mode-based tools, avoiding an even larger surface. The count is reasonable given Houdini's breadth.

Completeness5/5

The surface covers session management, scene files, inspection, node editing, parameter writing, wiring, cooking, simulation, PDG, USD, rendering, capture, HDA editing, docs, execution, undo, and more. No obvious lifecycle gap remains for the stated domain; agents have both high-level and low-level escape hatches where needed.

Maintenance

ActivityActive
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers

  • A
    license
    B
    quality
    B
    maintenance
    Connects Blender to Claude AI through the Model Context Protocol (MCP), allowing Claude to directly interact with and control Blender for AI-assisted 3D modeling, scene manipulation, and rendering.
    21
    30,209
    MIT
  • F
    license
    Not graded
    quality
    D
    maintenance
    Connects Houdini to Claude AI through Model Context Protocol, enabling AI-assisted 3D modeling, scene creation, simulation setup, and rendering through natural language commands.
    59
    -
  • A
    license
    Not graded
    quality
    D
    maintenance
    Connects Claude AI to Houdini via the Model Context Protocol, enabling prompt-assisted 3D modeling, scene manipulation, and rendering within Houdini.
    11
    GPL 3.0
  • A
    license
    Not graded
    quality
    D
    maintenance
    Connects Claude AI to Houdini through the Model Context Protocol, enabling direct interaction and control for 3D modeling, scene creation, simulation, and rendering.
    20
    MIT