fxhoudinimcp
Provides tools for interacting with SideFX Houdini, enabling AI agents to create and manipulate 3D scenes, simulations, renderings, and more through Houdini's Python API.
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@fxhoudinimcpcreate a sphere and add a mountain"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
Table of Contents
Related MCP server: HoudiniMCP
About
An MCP server for SideFX Houdini: it lets an AI assistant build networks, set up simulations, inspect USD stages and render, through Houdini's own Python API. It works with any MCP client: Claude, Codex, Copilot, Gemini, Cursor, Windsurf, VS Code, Cline and others.
215 tools, 8 resources, and 9 prompts serving 31 written workflow guides out of the box.
Category | Tools | Description |
Graph Intelligence | 6 | Atomic validated network building, network verification, node doc cards, cook profiling, frame-range cooking with per-frame evidence, cook status |
Documentation | 3 | Full-text search + page retrieval over Houdini's own shipped manual (version-exact) |
Scene Management | 10 | Open, save, import/export, scene info, connection status, undo/redo |
Sessions | 3 | Switch between open Houdini sessions, start a headless or GUI Houdini of the server's own, stop it |
Node Operations | 22 | Create, delete, copy, connect, layout, flags, network boxes, sticky notes, object transforms |
Parameters | 14 | Get/set values in bulk, expressions, keyframes, spare parameters |
Geometry (SOPs) | 16 | Points, prims, attributes, attribute statistics, volume statistics and sampling, groups, sampling, nearest-point search |
LOPs/USD | 21 | Stage inspection, prims, world transforms over frames, layers, composition, variants, lighting |
DOPs | 8 | Simulation info, DOP objects, step/reset, memory usage |
PDG/TOPs | 12 | Cook, work items, failed items and logs, schedulers, dependency graphs |
COPs (Copernicus) | 7 | Image nodes, layers, VDB data |
HDAs | 13 | Create, install, manage Digital Assets, their versions and sections |
Animation | 9 | Keyframes, playbar control, frame range |
Rendering | 10 | Viewport capture, contact sheets of a frame range without a viewport, render nodes, settings, render launch |
VEX | 5 | Create/edit wrangles, validate VEX code |
Code Execution | 7 | Python, HScript, expressions, env variables, file references, update mode |
Viewport/UI | 14 | Pane management, viewer context, verified camera and renderer state, screenshots, error detection |
Scene Context | 8 | Network overview, cook chain, selection, scene summary, error analysis |
Workflows | 8 | One-call Pyro/RBD/FLIP/Vellum setup, SOP chains, render config |
Materials | 4 | List, inspect, create materials and shader networks |
CHOPs | 4 | Channel data, CHOP nodes, export channels to parameters |
Cache | 4 | List, inspect, clear, write file caches |
Takes | 4 | List, create, switch takes with parameter overrides |
Shelf Tools | 3 | Find, read and run Houdini's own shelf tools (setups build_network cannot produce) |
flowchart LR
subgraph Client[" 🤖 AI Client "]
direction TB
A1("Claude · Codex · Copilot · Gemini")
A2("Cursor · Windsurf · VS Code · Cline")
A3("any stdio MCP client")
end
subgraph MCP[" ⚡ FXHoudini MCP Server "]
direction TB
B1("🔧 215 tools")
B2("📦 8 Resources")
B3("💬 9 Prompts")
end
subgraph Houdini[" 🔶 SideFX Houdini "]
direction TB
C1("🌐 hwebserver")
C2("📡 Dispatcher")
C3("🎛️ hou.* Handlers")
C1 --> C2 --> C3
end
Client -. "MCP Protocol · stdio" .-> MCP
MCP -. "HTTP / JSON · port 8100" .-> Houdini
classDef clientBox fill:#f0f4ff,stroke:#b8c9e8,stroke-width:1px,color:#2d3748,rx:12,ry:12
classDef mcpBox fill:#eef6f0,stroke:#a8d5b8,stroke-width:1px,color:#2d3748,rx:12,ry:12
classDef houdiniBox fill:#fff5f0,stroke:#e8c4a8,stroke-width:1px,color:#2d3748,rx:12,ry:12
classDef clientNode fill:#dbe4f8,stroke:#96b0dc,stroke-width:1px,color:#2d3748,rx:8,ry:8
classDef mcpNode fill:#d4edda,stroke:#82c896,stroke-width:1px,color:#2d3748,rx:8,ry:8
classDef houdiniNode fill:#fde4d0,stroke:#e0a87c,stroke-width:1px,color:#2d3748,rx:8,ry:8
class Client clientBox
class MCP mcpBox
class Houdini houdiniBox
class A1,A2,A3 clientNode
class B1,B2,B3 mcpNode
class C1,C2,C3 houdiniNodeThe plugin runs on Houdini's built-in hwebserver and executes every hou.* call on the main thread through hdefereval. The MCP server is a separate process your AI client starts; it relays tool calls to the plugin over loopback HTTP.
Installation
Requires Houdini 20.5+ (tested on 20.5, 21.0 and 22.0) and Python 3.10+ outside Houdini.
pip install fxhoudinimcp
python -m fxhoudinimcp installRestart Houdini and your MCP client. An MCP menu appears in Houdini's menu bar.
install sets up both halves: it writes a Houdini package file into every Houdini packages directory it finds, and registers the server with every MCP client it finds (Claude Code, Claude Desktop, Codex, Copilot CLI, Gemini CLI, Cursor, Windsurf, VS Code, Cline). Use the python -m form: the Python that runs it is the one written into the client config.
Flag | What it does |
| Report every change, make none |
| Write into this packages directory only |
| Register a client, leave Houdini untouched |
| Client to register, repeatable: |
An existing fxhoudini client entry pointing at another Python is repointed, and the old value printed.
pip install --upgrade fxhoudinimcp upgrades both halves, since the plugin ships inside the wheel. The exception is a plugin loaded from a git clone, which you update with git.
Uninstalling
pip uninstall alone leaves the package file and the client entry behind, and both then fail silently. Remove them first:
python -m fxhoudinimcp uninstall
pip uninstall fxhoudinimcpFlag | What it removes |
| Nothing. Lists what it would remove |
| Only this packages directory, instead of every one found |
| Only the client registration, leaving the package files |
| Which client to unregister from, repeatable; same names as |
| Skip the confirmation. Required when stdin is not a terminal |
Installing by hand
For a clone, a locked-down machine, or untangling a broken setup.
1. Point Houdini at the plugin. Print the package file for this install, then write it:
fxhoudinimcp houdini-package
fxhoudinimcp houdini-package --write "~/Documents/houdini22.0/packages"Don't type the plugin path by hand: it moves whenever the Python environment does. To load the plugin from a clone instead, write the package file yourself (the path must end in /houdini):
{
"env": [
{
"FXHOUDINIMCP": "C:/Users/you/code/fxhoudinimcp/houdini"
}
],
"path": "$FXHOUDINIMCP"
}2. Point your MCP client at the server. Every client runs the same command, <python> -m fxhoudinimcp, where <python> is the absolute path of the Python that has fxhoudinimcp (python -c "import sys; print(sys.executable)"). Clients don't inherit your shell's PATH, and a bare python just shows as "disconnected".
CLI clients register it with their own command. File-based clients take this entry in their config file:
{
"mcpServers": {
"fxhoudini": {
"command": "C:\\Program Files\\Python311\\python.exe",
"args": ["-m", "fxhoudinimcp"]
}
}
}Client | Register with | Remove with |
Claude Code |
|
|
Codex |
|
|
Copilot CLI |
|
|
Gemini CLI |
|
|
Claude Desktop |
| delete the entry |
Cursor |
| delete the entry |
Windsurf |
| delete the entry |
VS Code | user | delete the entry |
Cline |
| delete the entry |
Any other stdio client takes <python> -m fxhoudinimcp as its command. python -m fxhoudinimcp install --client-only does this step for you.
Troubleshooting
No MCP menu in Houdini. Houdini skipped the package file without saying so. Start it with HOUDINI_PACKAGE_VERBOSE=1 and look for Loading: and Processing: lines for fxhoudinimcp.json. The usual causes:
the plugin path in the file doesn't exist;
the file starts with a UTF-8 BOM (PowerShell's
Set-Content -Encoding UTF8adds one);another
fxhoudinimcp.jsonin a later packages directory overrides it (fxhoudinimcp houdini-packagelists them all,uninstallremoves them);the Houdini version you launched has no package file (each version reads its own preferences directory).
On Windows, OneDrive can make a desktop-launched and a shell-launched Houdini read different preference directories; the package log shows which one is used.
The client shows "disconnected". Its config names a bare python; use the absolute path.
A documented subcommand seems missing. Check python -m fxhoudinimcp --version: an editable install reports the version it was created at.
The assistant can't reach Houdini. get_houdini_connection_status lists every Houdini serving the plugin and why a connection failed.
Usage
The plugin starts with Houdini's UI (FXHOUDINIMCP_AUTOSTART), and the MCP menu starts, stops and checks it. MCP > Connect a Client... shows the port this session actually got (a second Houdini takes the next free port), copies the command that registers the server with every client found, and lists the manual form for each client.
Then ask for things:
"Create a procedural rock generator with mountain displacement"
"Set up a Pyro simulation with a sphere source"
"Build a USD scene with a camera, dome light, and ground plane"
"Debug why my scene has cooking errors"Every tool call is one undo step. Tools leave your selection, viewport camera and network editor where they were, so you can keep working in the scene while the assistant does.
Configuration
Variable | Default | Read by | Description |
|
| Houdini | Port the plugin listens on; a second Houdini takes the next free one |
|
| Houdini | Address the plugin binds. See Security before widening it |
|
| Houdini |
|
|
| both |
|
| unset | Houdini | Confine hip, import, export and HDA files to this directory |
|
| Houdini | Seconds a command may run |
| unset | Houdini | Per-command override: |
|
| Houdini | Seconds a render or cache may take to show its file before it counts as not written |
|
| client | Houdini host |
| scan 8100-8115 | client | Pin one Houdini port; switches off the scan |
| plugin timeout + 15 | client | Seconds the client waits for a command |
|
| client |
|
|
| client | Logging level |
Houdini-side variables live in the package file install wrote, where every one sits at its default. They win over the same variables in your shell; install keeps your edits when it runs again. Client-side variables go in your MCP client's config.
Security
A connection to this server is a shell inside your Houdini session: execute_python runs arbitrary code, and there is no authentication or per-tool permission. It is built for one artist's workstation and an MCP client they trust.
The plugin binds to loopback unless
FXHOUDINIMCP_BINDsays otherwise.Requests with an
Originheader (a web page) or a non-loopbackHost(DNS rebinding) are refused.FXHOUDINIMCP_PROJECT_ROOTconfines the files the tools open, save, import, export or install. It does not check paths written into parameters (a File SOP, a ROP output), andexecute_python/execute_hscriptare not sandboxed.Recovery from a bad change is undo, one step per tool call.
Development
See CONTRIBUTING.md for what CI checks.
pip install -e ".[dev]"
ruff check . && ruff format --check .
pytest # unit tests, hou mocked
python tests/run_integration.py # live suite in hython; needs a license seat, HYTHON picks the build
python tests/integration/gui_session_check.py # against a running GUI Houdini
python tools/gen_node_versions.py # add this machine's Houdini builds to the node table
python tools/gen_node_domains.py # after gen_node_versions
python tools/gen_required_commands.py
python tools/gen_prompt_vocab.py # node tables in the prompts; edit tools/prompt_vocab.json, not the markdownWith Red Giant / Maxon Universe installed, set HOUDINI_DISABLE_OPENFX_DEFAULT_PATH=1, or its OpenFX plug-in crashes hython on 20.5.487 and later.
Layout: the plugin is in houdini/ (handlers under scripts/python/fxhoudinimcp_server/handlers/), the MCP server in python/fxhoudinimcp/ (tools, bridge, prompts). Prompts are in prompts/markdown/: instructions/ is sent to every client, workflows/ holds one guide per SideFX help scope (pyro.md pairs with pyro/), shared/ holds fragments.
What a call costs. Every command waits for a main-thread tick in Houdini, so call count, not work, sets a session's speed (Houdini 22.0.368, idle scene):
| 0.5 ms |
any command, even on an empty network | ~50 ms |
10 nodes, one call each | ~800 ms |
the same 10 in one | ~66 ms |
Contact
Project Link: fxhoudinimcp
License
MIT
Available Tools
215 toolsassign_materialC
Assign a material to a geometry node via a Material SOP.
Args: geo_path: Target geometry node path. material_path: Material to assign.
| Name | Required | Description | Default |
|---|---|---|---|
| geo_path | Yes | ||
| material_path | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It does not disclose whether a new Material SOP node is created, what happens if the target already has a material, whether the operation is reversible, or any permission/error behavior. For a scene-mutating tool this is a substantial gap.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The one-line purpose is front-loaded and the Args block is compact with no filler. It is appropriately sized, though the param lines are so terse they add little value.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
A mutating tool with no annotations, no output schema, and effectively undocumented parameters needs to explain side effects, prerequisites, and failure modes. The description stops at what it does, leaving an agent unable to predict the result of the call.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate, and it barely does: 'Target geometry node path' and 'Material to assign' essentially restate the parameter names. No path format (absolute vs relative, node-type expectations) or validation semantics are given.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Names a specific verb and resource (assign a material to a geometry node) and distinguishes itself from siblings like create_material or list_materials. The phrase 'via a Material SOP' adds a hint of mechanism but is ambiguous about whether it creates a new node or reuses an existing one.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No when-to-use guidance, no prerequisites (e.g., does the material need to exist first?), and no routing to alternatives such as get_usd_bound_material for reading an existing assignment. The agent is left to infer context entirely.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
build_networkA
Build a whole node network in ONE atomic call — the PREFERRED way to construct anything of 3+ nodes (massively faster than node-by-node calls, and either the whole network builds or nothing does).
Every node type, parameter name, and input reference is validated against the running Houdini BEFORE anything is created; errors come back with did-you-mean suggestions. Use dry_run=True to prove a plan when using unfamiliar node types. The result includes cooked evidence: per-node errors and the display node's geometry counts — read them instead of assuming success.
Each node spec dict supports exactly these keys; an unknown one (in a spec or in an input entry) is a validation error with a did-you-mean, never a silently dropped request: type (required), name, parms (lists set whole parm tuples; a value written {"expr": "ch('../x')"} is set as an expression, with an optional "language": "hscript" | "python"), expressions (or its alias exprs: a block of parm name -> expression), inputs (list of source names — earlier spec names, existing children, or absolute paths; or dicts with index or input_name / source / source_output, where input_name is a connector name or label as get_node_card lists them and source_output an output index or name ("v", "P"); or {"indirect_input": n} to wire from connector n of the parent subnet itself), flags (display/render/bypass/template), color [r,g,b], comment, override_expression, run_callbacks. Parms are written in the order given.
A string aimed at a numeric parameter is caught during validation and answered with the {"expr": ...} spelling, instead of failing mid-build and rolling the whole graph back.
A literal in parms does not replace an expression the parm already
holds (a Ray SOP ships dir = @N.x): the dry run lists such parms in
expressions_in_the_way, the build reports expressions_kept and a
warning. "override_expression": true on the spec clears them first.
Display: in a network that was empty, the last node gets the display
flag unless a spec sets one. A display flag asked of a node that has
none (a usdrender_rop) goes to its nearest input that has one, listed in
display_set_upstream.
A LOCKED parm (karmarendersettings resolutiony while res_mode is
autoheight) takes nothing; such a spec is refused at validation, nothing
built, with locked_parms naming the menu whose callback sets the lock.
Houdini runs callbacks only from the UI: "run_callbacks": true on the spec
runs each parm's callback after its write, so {"res_mode": "manual",
"resolution": [1920, 1080]} builds. Validation replays a spec on a probe,
its callbacks included, only when it writes a parm a fresh node locks.
There is no "children" key: build the subnet, then call build_network again with the subnet as parent_path.
Nodes built inside a DOP network come with simulation_cache: the
network to pass to reset_simulation before reading a frame it cooked.
Args:
parent_path: Network to build inside (e.g. "/obj/geo1"). A missing
parent directly under /obj is created, as the container the
specs' context needs (geo for SOPs, lopnet for LOPs), and
removed again if the build fails; a dry run reports it as
would_create_parent.
nodes: Ordered node specs (see above).
dry_run: Validate the whole spec without creating anything.
layout: Also lay out the parent network afterwards (default True;
honoured only when auto-layout is enabled). The nodes this call
creates are always positioned, each relative to its inputs,
regardless of this flag; nodes that already existed keep their
exact positions, so building into a hand-arranged network is safe.
| Name | Required | Description | Default |
|---|---|---|---|
| nodes | Yes | ||
| layout | No | ||
| dry_run | No | ||
| parent_path | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full behavioral burden. It discloses atomic all-or-nothing execution, validation before creation, did-you-mean errors, cooked evidence, expression preservation, locked parm refusal, callback replay, display fallback, and simulation_cache behavior.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The purpose and atomic constraint are front-loaded, and later paragraphs progress from validation to node spec details to edge cases. It is long, but most clauses are justified for this complex tool, though some dense edge-case clauses could be tightened.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given a complex 4-parameter mutation tool with no annotations, no output schema, and 0% schema description coverage, the description covers invocation, validation, error behavior, layout, and result evidence. It is complete enough for an agent to call correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0% and the top-level schema has no parameter descriptions, yet the description explains parent_path creation/removal, node spec keys in detail, dry_run validation, and layout behavior. It adds essential meaning beyond the raw schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource: build a whole node network in one atomic call. It explicitly says this is preferred for 3+ nodes and differentiates from node-by-node calls, so an agent can distinguish it from siblings like create_node or build_sop_chain.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly gives when to use it: anything of 3+ nodes, and dry_run=True for unfamiliar node types. It also names the alternative node-by-node approach and explains the no children key workaround of building a subnet then calling build_network again.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
build_sop_chainA
Build a sequential chain of SOP nodes wired together in a single call.
PREFERRED over individual create_node calls for linear SOP chains — builds and wires the entire chain in one round-trip, which is significantly faster.
Each step dict: {"type": str, "name": str (optional), "params": dict (optional)}. Nodes are created in order and each is automatically connected to the previous.
Example: steps=[ {"type": "box"}, {"type": "polybevel", "params": {"offset": 0.05}}, {"type": "scatter", "params": {"npts": 200}}, {"type": "copy_to_points", "name": "copy1"}, ]
Args: parent_path: Parent SOP network path. steps: List of step dicts defining the chain.
| Name | Required | Description | Default |
|---|---|---|---|
| steps | No | ||
| parent_path | No | /obj/geo1 |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It usefully discloses that nodes are created in order, automatically connected, and built in one round-trip, but it omits mutation permissions, failure/atomicity behavior, and whether existing nodes or parent networks are affected.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loads the purpose, follows with preferred usage, then documents the step format and example before the Args block. Every sentence earns its place and nothing is redundant.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no annotations and no output schema, the description still covers usage and parameter semantics well. It does not describe return values or failure behavior, which is a gap, but it is largely complete enough for correct invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, so the description must compensate. It defines the step dict keys (type, optional name, optional params) and provides a concrete example, adding substantial meaning beyond the sparse schema; parent_path is described only minimally.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource: building a sequential chain of SOP nodes wired together in a single call. It also distinguishes itself from individual create_node calls, so the agent can select it correctly.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly says it is PREFERRED over individual create_node calls for linear SOP chains, naming both the alternative and the condition that selects it. This is exactly the routing guidance an agent needs.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
cancel_top_cookC
Cancel active cooking on a TOP network.
Args: ctx: MCP context. node_path: TOP node or TOPnet path.
| Name | Required | Description | Default |
|---|---|---|---|
| node_path | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full behavioral burden and falls short: it does not say whether cancellation is destructive/irreversible, whether in-progress work items are discarded, what happens if nothing is cooking, or whether it can be resumed. Only the bare operation is stated.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The core sentence is short and front-loaded. The trailing 'Args:' block adds some noise, particularly the 'ctx: MCP context' entry, which is not even a declared schema parameter.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool is simple (one required param, no output schema, no nested objects), so a short description is reasonable. However, with no annotations and no output schema, the agent still lacks information about side effects, post-cancel state, and error behavior.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate; it does partially by clarifying that node_path accepts either a TOP node or a TOPnet path, which is more than the schema's bare 'Node Path' string. It still omits format details such as path syntax, relative vs absolute, or what an invalid path yields.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description gives a clear verb+resource: 'Cancel active cooking on a TOP network,' which is specific and actionable. It does not, however, distinguish this from the sibling pause_top_cook, leaving the agent to infer the difference between cancelling and pausing a cook.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no when-to-use guidance, no stated prerequisites (e.g. that a cook must be active), and no mention of alternatives such as pause_top_cook or cook_top_node. The agent gets no routing help for choosing between the closely related sibling tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
capture_network_editorA
Capture a screenshot of the network editor.
With node_path the view is put on that node at once (no animated flight), and the reply says what the frame shows: visible_bounds, node_bounds and node_in_view, all in network space.
The image is written to disk only; open output_path with your file
reader to look at it. Prefer get_node_info or list_children for inspecting
node connections unless visual confirmation of wiring is genuinely needed.
Args: output_path: Image file path. Default: a new PNG in the temp dir. node_path: Node path to frame before capture.
| Name | Required | Description | Default |
|---|---|---|---|
| node_path | No | ||
| output_path | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and mostly delivers: it discloses the write-to-disk side effect ('image is written to disk only; open output_path with your file reader'), the non-animated framing of node_path, and the fields the reply returns (visible_bounds, node_bounds, node_in_view in network space). It omits failure/error behavior and any dependency (e.g. needing a live Houdini session), so it falls short of full transparency.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the core purpose, then engineering details, then the alternative-tool guidance, with an Args block that adds semantics rather than restating names. It is a touch long for a two-parameter tool but every sentence carries information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a two-parameter screenshot tool with no output schema and no annotations, the description covers purpose, side effects, output location, the frames the reply reports, and when not to use it. Remaining gaps (error cases, connection prerequisites) are minor and not required to invoke it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate, and it does: output_path is documented with its default ('a new PNG in the temp dir') and node_path with its effect ('Node path to frame before capture'). Both parameters gain meaning beyond the bare anyOf/null schema, though format details (e.g. accepted node path syntax) are absent.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource: 'Capture a screenshot of the network editor,' and the node_path framing behavior narrows the scope further. It does not, however, distinguish itself from the closely related sibling capture_screenshot or render_viewport, which an agent could plausibly reach for instead.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives explicit routing guidance: 'Prefer get_node_info or list_children for inspecting node connections unless visual confirmation of wiring is genuinely needed.' This names concrete alternatives and the condition that selects them. It stops short of 5 because it never addresses the nearest siblings (capture_screenshot / render_viewport) that overlap in purpose.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
capture_screenshotA
Capture a screenshot of the viewport or a specific pane tab.
The image is written to disk only; open output_path with your file
reader to look at it. Prefer get_geometry_info, get_node_info or
get_scene_summary unless visual confirmation is genuinely needed.
Args: output_path: Image file path. Default: a new PNG in the temp dir. pane_name: Pane tab name. settle_seconds: Wait this long before capturing, without blocking Houdini, so a Karma viewport can converge after a change. Use this instead of a shell sleep between calls. Capped at 120.
| Name | Required | Description | Default |
|---|---|---|---|
| pane_name | No | ||
| output_path | No | ||
| settle_seconds | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and does well: it discloses that the image is written to disk only and must be opened via output_path, that settle_seconds does not block Houdini, and that the value is capped at 120. It stops short of covering failure modes (e.g., invalid pane_name) or permission/headless constraints, so it is strong but not exhaustive.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loads the purpose, then the disk-write behavior, then the preference rule, then per-argument notes. Every sentence earns its place and there is no padding or repetition of schema fields.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 3-param, zero-annotation, no-output-schema tool, the description covers purpose, routing, defaults, and the settling/cap behavior, and effectively explains the return side by noting the image goes to disk. It could add a sentence on error conditions (bad pane_name, unwritable path) but is complete enough to call correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate, and it documents all three parameters: output_path's default (a new PNG in the temp dir), pane_name's meaning, and settle_seconds' purpose, non-blocking behavior, and 120 cap. This is meaning well beyond the bare schema types and defaults.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ("Capture a screenshot of the viewport or a specific pane tab") and explicitly names the sibling tools (get_geometry_info, get_node_info, get_scene_summary) it should be preferred over. An agent can tell what this does and how it differs from the info-gathering tools 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.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives an explicit when-not-to-use rule ("Prefer get_geometry_info, get_node_info or get_scene_summary unless visual confirmation is genuinely needed"), naming the alternatives and the condition that selects them. 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.
change_node_typeA
Change a node's type in place, keeping wires, name, position, flags, parameter values and (for subnets/assets) network contents.
This is how an HDA instance is moved to an installed newer version
(building::2.0) without losing its edits, and how a placeholder is
swapped for the real node. Every value set before the swap and not after
it is named in parms_dropped (no such parameter on the new type) or
parms_reset (back at its default). Unversioned names map to the
preferred version, as create_node does.
Args: node_path: Node to change. new_type: Type name in the node's own category. keep_name: Keep the node's name. keep_parms: Carry parameter values over by name. keep_network_contents: Keep a subnet's/asset's children (False resets an asset to its definition's contents, also on a node that is already of new_type).
| Name | Required | Description | Default |
|---|---|---|---|
| new_type | Yes | ||
| keep_name | No | ||
| node_path | Yes | ||
| keep_parms | No | ||
| keep_network_contents | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and does well: it explains that unversioned names map to the preferred version (as create_node does) and that values not carried over are reported in parms_dropped/parms_reset. It stops short of stating permission/auth requirements or confirming reversibility, so a full 5 is not warranted.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Behavior and rationale are front-loaded before the Args list, and the structure is scannable. The prose paragraph is slightly verbose and partially restates the parameter list, but every sentence conveys real meaning without filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a mutation tool with no annotations and no output schema, the description is largely self-sufficient, even hinting at return fields (parms_dropped/parms_reset). It could be more complete by addressing failure/error conditions or permission needs, but nothing essential to correct invocation is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, so the description must compensate and it does: it documents node_path, new_type (clarifying it is in the node's own category and how unversioned names resolve), keep_name, keep_parms, and keep_network_contents, including the non-obvious behavior that keep_network_contents=False resets an asset to its definition's contents even when already of new_type.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Change a node's type in place') and immediately enumerates what is preserved (wires, name, position, flags, parameter values, network contents). This clearly distinguishes it from siblings like create_node, delete_node, and copy_node, which do not mutate an existing node's type.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides concrete when-to-use scenarios: moving an HDA instance to an installed newer version without losing edits, and swapping a placeholder for the real node. It does not name explicit alternative tools or state when-not-to-use, but the use contexts are clear enough for correct selection.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
clear_cacheC
Delete cached files on disk for a cache node.
Args: ctx: MCP context. node_path: Path to the cache node. frame_range: [start, end] frame range to limit deletion.
| Name | Required | Description | Default |
|---|---|---|---|
| node_path | Yes | ||
| frame_range | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations exist, so the description carries the full behavioral burden. It does usefully state what gets destroyed (on-disk cached files for a specific node) and the frame_range scoping limit, but it omits irreversibility, whether files in use by a running sim are affected, and permission/confirmation requirements — notable gaps for a destructive delete.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The purpose is front-loaded and compact, but the boilerplate 'Args:' block weakens it — 'ctx: MCP context' documents a non-parameter and wastes a line, and the param notes are terse. Acceptable but not tight.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a destructive mutation tool with no annotations, no output schema, and 0% schema coverage, the description is too thin. It should warn about permanence, describe what a caller gets back, and specify when to use it versus write_cache/list_caches. As-is, an agent lacks what it needs to invoke this safely.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate. It adds real meaning for node_path ('Path to the cache node') and clarifies frame_range as '[start, end] frame range to limit deletion', which is more than the bare schema. However, the 'ctx' entry is not an actual schema parameter and the frame_range null/default behavior is unaddressed.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb + resource: 'Delete cached files on disk for a cache node.' This clearly separates it from the read-oriented siblings list_caches/get_cache_status and from write_cache. It does not, however, explicitly name an alternative, so it falls just short of full sibling differentiation.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No when-to-use, when-not-to-use, or prerequisite guidance is given. It never says how clear_cache relates to write_cache (e.g. to invalidate a stale cache before rewriting), nor when frame_range should be omitted versus set. Usage must be inferred entirely from the one-line purpose.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
compare_snapshotsC
Take or compare scene state snapshots.
Args: action: "take" or "compare". snapshot_name: Snapshot name.
| Name | Required | Description | Default |
|---|---|---|---|
| action | No | take | |
| snapshot_name | No | default |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It does not say whether snapshots persist, whether 'take' overwrites an existing snapshot of the same name, where snapshots are stored, or what a comparison returns. For a dual-mode state tool with zero annotation coverage this is a significant gap.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Very short and front-loaded, with the core purpose in the first sentence. The raw 'Args:' block is minimally structured but not wasteful; nothing here pads the description.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no annotations, no output schema, and an underspecified dual-mode contract, the description is not complete enough. An agent cannot tell what compare yields or how take interacts with an existing snapshot name, which are the two things that determine correct invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate. It does add the meaningful part — that action accepts 'take' or 'compare' (the schema only declares a string with a default and no enum) — but 'snapshot_name: Snapshot name' is pure tautology and leaves naming/uniqueness semantics unexplained.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a specific verb pair and resource: take or compare scene state snapshots. That is clear enough to distinguish it from unrelated siblings like get_scene_info, but it does not differentiate it from the other comparison/snapshot-adjacent tools in a large sibling list, and 'scene state' is left undefined.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to take versus compare, no prerequisites, and no mention of alternatives. The action values 'take'/'compare' are the only usage signal, and they are presented as a bare parameter listing rather than a when-to-use rule.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
compare_volumesA
How much of one field sits in each band of another field.
"How much density is inside the collider" is field="density", against="surface" (an SDF), bands=[-1000, 0, 1000]: the first band's field_total is what is inside. Both are sampled on a grid over field's box.
Args: node_path: SOP holding field. field: Volume to total, e.g. "density". against: Volume whose value picks the band, e.g. a collider SDF. against_node: SOP holding against, when not node_path. bands: Band count, or a list of band edges.
| Name | Required | Description | Default |
|---|---|---|---|
| bands | No | ||
| field | Yes | ||
| against | Yes | ||
| node_path | Yes | ||
| against_node | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and does disclose meaningful behavior: both fields are 'sampled on a grid over field's box', and 'the first band's field_total is what is inside' hints at the result structure. It still omits cost, whether it cooks upstream geometry, and permissions/side-effects, so it is adequate but incomplete.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Purpose is front-loaded in one line, followed by the example and then the argument list. The example is a bit wordy but earns its place by disambiguating a niche concept; nothing is redundant.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a five-parameter compute tool with no annotations, no output schema, and 0% schema coverage, the description covers every parameter plus an illustrative result ('field_total'). The remaining gap is the overall shape of the return value and performance characteristics, which are minor for this tool class.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, so the description must compensate, and it largely does: all five parameters are annotated in the Args block, including the dual meaning of bands ('Band count, or a list of band edges') and against_node's conditional role ('when not node_path'). This meaningfully exceeds the bare schema anyOf types, though edge-ordering semantics could be spelled out further.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The opening line states a specific operation – binning one field's totals by the bands of another field – and the density-vs-collider example makes the abstract verb concrete. It's clearly distinguishable from neighbors like sample_volume and get_volume_info, though it never names them, so differentiation is implicit rather than explicit.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The worked example ('how much density is inside the collider') shows one scenario where this tool applies, which gives implied usage. However it never states when not to use it, nor points to alternatives like sample_volume for single-point queries, leaving the agent to infer the boundary.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
connect_houdiniB
Talk to the Houdini serving on port from now on.
get_houdini_connection_status lists the sessions and their ports.
Args: port: Port of a Houdini serving the plugin.
| Name | Required | Description | Default |
|---|---|---|---|
| port | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden. The phrase "from now on" usefully discloses that this is a persistent state change affecting subsequent calls, but nothing is said about failure modes (invalid/absent port), whether existing sessions are dropped, or auth needs.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The purpose sentence is front-loaded and terse, and the pointer to get_houdini_connection_status is efficiently placed. The Args block is slightly redundant with schema but short, so little is wasted.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple single-parameter connection tool with no output schema this is nearly adequate — it says what it does and how to find a port. It still omits what the agent should expect afterward and error/edge behavior, leaving a gap for a state-changing connection tool with no annotations.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate. The Args line clarifies that the port identifies a specific Houdini session and points to get_houdini_connection_status as the way to obtain it, which adds real meaning, though it does not state valid ranges or format.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a clear action on a specific resource — connect to ("talk to") the Houdini instance on a given port — and the phrase "from now on" signals this changes the active session. It does not name sibling tools start_houdini/stop_houdini, but the purpose is readily distinguishable from them.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
"get_houdini_connection_status lists the sessions and their ports" implicitly tells the agent to discover a port there before calling. However, there is no explicit when-to-use versus when-not, no description of relationship to start_houdini, and no prerequisites stated beyond that hint.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
connect_nodesA
Connect two nodes together.
To feed a node INSIDE a subnet from one of the subnet's own input connectors (a SubnetIndirectInput — not a node, it has no path), pass the subnet as source_path and the connector index as indirect_input.
Args: ctx: MCP context. source_path: Upstream node path; with indirect_input, the subnet whose input connector is the source. dest_path: Downstream node path. output_index: Source output index. input_index: Destination input index. input_name: Destination connector name or label (e.g. "base_color" on a VOP shader); wins over input_index. indirect_input: Index of the subnet input connector at source_path to wire from (dest_path must live inside that subnet).
| Name | Required | Description | Default |
|---|---|---|---|
| dest_path | Yes | ||
| input_name | No | ||
| input_index | No | ||
| source_path | Yes | ||
| output_index | No | ||
| indirect_input | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations the description carries full burden. It usefully discloses a non-obvious behavioral subtlety (SubnetIndirectInput is not a node, has no path, and dest_path must live inside the subnet), but omits what happens on invalid paths, whether connecting replaces an existing input connection, and permission/error behavior.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loads the purpose, then the special subnet case, then an Args block. Well organized and mostly free of filler, though the indirection paragraph is slightly verbose for the value it adds.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 6-parameter connection tool with no annotations and no output schema, the definition covers the tricky subnet/connector semantics and every parameter. It is nearly complete, missing only failure/return behavior and coexistence with the batch tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, so the description must compensate, and it largely does: all six parameters are explained, including precedence ('input_name ... wins over input_index'), defaults implied for indices, and a concrete example ('base_color' on a VOP shader). Only minor gaps remain, e.g. index base/range.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource: 'Connect two nodes together'. The singular framing implicitly contrasts with the sibling connect_nodes_batch, but it never names that alternative or otherwise explicitly differentiates itself from related tools like disconnect_node or reorder_inputs.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides a clear scenario for one mode: wiring a subnet's own input connector into a node inside that subnet (indirect_input). However it gives no guidance on when to prefer this tool over connect_nodes_batch, nor any preconditions such as valid paths or cycle avoidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
connect_nodes_batchA
Connect multiple node pairs in a single call.
Args: connections: List of connections. Each dict has keys: source_path (str), dest_path (str), output_index (int, default 0), input_index (int, default 0), input_name (str, optional: connector name or label, wins over input_index), indirect_input (int, optional: source_path is then a subnet and this is the index of its input connector to wire from — for the first node of a chain built inside that subnet).
| Name | Required | Description | Default |
|---|---|---|---|
| connections | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full behavioral burden. It does disclose meaningful wiring semantics ('input_name ... wins over input_index' and indirect_input meaning), but says nothing about permissions, whether the operation is atomic, what happens if one connection in the batch fails, or what is returned. These are significant gaps for a mutation tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded one-line summary followed by a compact per-key breakdown. Every line carries information; there is no filler, though the nested parenthetical for indirect_input is a little dense.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Parameter semantics are complete despite the empty schema, which is the hardest part of this tool. However, with no annotations and no output schema, the description still omits error/partial-failure behavior, return value, and usage routing, leaving the definition only minimally complete for a batch mutation tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% and the schema is an untyped array of objects, so the description does all the work. It enumerates every key (source_path, dest_path, output_index, input_index, input_name, indirect_input), gives defaults, and explains precedence and the subnet/indirect connector case in detail.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource ('Connect ... node pairs') and immediately scopes it with 'multiple ... in a single call', which distinguishes it from the sibling connect_nodes. It could be stronger only by naming connect_nodes explicitly as the single-pair alternative.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no guidance on when to choose this batch tool over connect_nodes, no prerequisites, and no note on when a batch call is preferred (e.g., chains, large graphs). The agent must infer the intended usage entirely from the tool name.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
cook_frame_rangeA
Cook a node frame by frame and report what changed on each frame.
This is how you advance a sequential solver and how you prove a simulation
is doing something. Frames are cooked in order, so a SOP solver, a DOP
network or an animated chain all accumulate correctly, and per-frame cook
time, errors, counts, bounding box and attribute aggregates come back in
ONE round trip instead of one per frame. static: true means counts and
bounds never changed over the range: the node cooks but does nothing.
Past 25 frames the rows are 25 evenly spaced frames plus every frame with
an error or warning (frames_shown); totals, static and
slowest_frame still cover every frame.
Prefer this over set_frame in a loop, and over stepping by hand: a 100-frame check is one call rather than 100. The frame is left where the cook ended, ready to screenshot.
Args: node_path: Node to cook; its output is what gets measured. start: First frame. Defaults to the playbar start. end: Last frame, inclusive. Defaults to the playbar end. step: Frame increment. Keep at 1.0 for any solver, since skipping frames gives it a discontinuous time step and invalid results. attribs: Point attributes to aggregate per frame (min/max/mean/sum). volumes: Also report per-volume name, resolution and value range.
| Name | Required | Description | Default |
|---|---|---|---|
| end | No | ||
| step | No | ||
| start | No | ||
| attribs | No | ||
| volumes | No | ||
| node_path | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and does so richly: it discloses ordering semantics (frames cooked in order, solvers accumulate), the meaning of the returned `static` flag, the >25-frame row sampling rule (`frames_shown`, totals/slowest_frame still cover all frames), error/warning surfacing, and the side effect that the frame is left where the cook ended.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the core purpose before the feature detail and args; sentences are dense but almost all earn their place. Slightly verbose in places (the multi-clause sentence about solvers/DOP/animated chains), but no filler paragraphs.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
No output schema and no annotations exist, so the description must explain return content itself, and it does: per-frame cook time, errors, counts, bounding box, attribute aggregates, sampled-row behavior past 25 frames, and slowest_frame. An agent has everything needed to call and interpret this.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate, and it documents all six params: node_path, start/end defaults from the playbar, step with a hard warning to keep it at 1.0 for solvers, attribs aggregation modes (min/max/mean/sum), and volumes reporting detail.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('cook a node frame by frame') plus the measured output ('report what changed on each frame'). It explicitly distinguishes itself from siblings set_frame and step_simulation by name, 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.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Directly names the alternatives it replaces: 'Prefer this over set_frame in a loop, and over stepping by hand: a 100-frame check is one call rather than 100.' It also gives when-to-use context ('how you advance a sequential solver and how you prove a simulation is doing something').
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
cook_top_nodeB
Cook a TOP node to execute its work items.
Args: ctx: MCP context. node_path: TOP node path. block: Wait for cooking to complete. generate_only: Only generate work items, do not cook.
| Name | Required | Description | Default |
|---|---|---|---|
| block | No | ||
| node_path | Yes | ||
| generate_only | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden, and it does disclose that block controls whether the call waits for completion and generate_only skips actual cooking. That is genuine behavioral context beyond the bare schema. It still omits failure behavior, duration expectations, and side effects on existing work items, which matters for an execution tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The lead sentence is front-loaded and the parameter list is compact with no filler prose. The 'ctx: MCP context' line is wasted space for an agent caller, keeping it from a 5.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a three-parameter execution tool with no annotations and no output schema, the description covers the mechanics but says nothing about return values, error handling, or what a completed cook yields. The block flag implies a completion signal, but the agent is left to infer the rest.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate, and it does name each parameter with meaning: wait-for-completion for block and generate-without-cooking for generate_only. It does not give format or path syntax for node_path, and 'ctx: MCP context' is not a real caller-facing parameter, so the compensation is only partial.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (cook) and resource (TOP node) and clarifies the effect: executing the node's work items. It is clearly distinguishable from read-only PDG siblings like get_pdg_graph or get_work_item_states. However, it does not explicitly differentiate itself from the other cook-related siblings such as cook_frame_range or generate_static_items.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no when-to-use or when-not-to-use guidance. Nothing routes the agent between this and cook_frame_range, generate_static_items, or the cancel/pause siblings, nor does it state prerequisites (e.g., that a TOP network must exist or be schedulable).
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
copy_nodeA
Copy a node, optionally into a different parent network.
In the same network the copy lands one node width to the right of its
original instead of on top of it; in another network it keeps the
original's position. offset overrides both, and position in the reply
says where the copy is.
Args: ctx: MCP context. node_path: Source node path. dest_parent: Destination parent path. new_name: Name for the copy. offset: [dx, dy] from the original's position.
| Name | Required | Description | Default |
|---|---|---|---|
| offset | No | ||
| new_name | No | ||
| node_path | Yes | ||
| dest_parent | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It discloses useful behavioral details about placement (right offset in same network, original position in different network, offset overrides both) and notes that 'position' appears in the reply. However, it omits mutation semantics like how the copy's name is resolved when new_name is null, whether the copy inherits connections, and whether this requires the node to be uncooked. Partial transparency only.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the core action, then a focused paragraph on placement behavior, followed by a standard Args block. Slightly redundant to list args whose names are already in the schema and whose meaning is partly repeated, but otherwise efficient.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
A mutation tool with no annotations, no output schema, and 0% schema description coverage. The description fills the biggest gap (placement behavior) but does not cover error cases, naming collisions, or permission requirements, so the agent still lacks full context to call it reliably.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate. It adds meaning for offset ([dx, dy] from original's position) and confirms dest_parent is for a different network, but leaves new_name's uniqueness behavior and node_path's expected format (e.g., '/obj/geo1/box1') unspecified.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (Copy) and resource (node) with the key modifier 'optionally into a different parent network', distinguishing it from create_node, move_node, and rename_node.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Implicitly defines usage through the description of positional behavior in same vs. different networks, but never explicitly states when to prefer copy_node over create_node or when a copy is appropriate. No exclusions or alternatives named.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_chop_nodeB
Create a new CHOP node.
Before using this, call list_node_types(context='Chop', filter='') to verify the correct node type. CHOPs has many dedicated nodes for motion and timing — noise, wave, spring, jiggle, lag, limit, filter, math, function, blend, shift, stretch, trim, cycle, speed, constraintlookatat, constraintpath — that may already do what you need.
Args: parent_path: Parent network path. chop_type: CHOP node type to create. name: Node name override.
| Name | Required | Description | Default |
|---|---|---|---|
| name | No | ||
| chop_type | Yes | ||
| parent_path | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full behavioral burden and largely does not. It never says what the call returns (presumably a node path), what happens if chop_type is invalid or the name collides, whether the node cooks on creation, or whether it requires an active/connected Houdini session. Only the node-type verification hint adds behavioral value.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the one-line purpose, then the verification prerequisite, then args. The node-type enumeration is long but earns its place by steering the agent away from hand-rolled networks. No filler sentences.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 3-parameter creation tool with no annotations and no output schema, the description covers purpose and a key prerequisite but omits return value, failure modes, and path format conventions. Adequate to invoke, incomplete for a mutation tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate, and it only minimally does: 'Parent network path', 'CHOP node type to create', and 'Node name override' mostly restate the parameter names. The one genuinely useful detail is that name is an override (optional, defaults to the type's default name), but format expectations (e.g. absolute vs relative path) are absent.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Create a new CHOP node') and scopes it to the CHOP context, which distinguishes it from the generic create_node sibling. It does not, however, explicitly contrast itself with create_node or create_cop_node/create_lop_node, so an agent must infer that the CHOP-specific variant is the right choice.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives a concrete precondition ('call list_node_types(context="Chop", filter=...) to verify the correct node type') and warns that dedicated CHOPs like noise, wave, spring, jiggle, lag, or limit may already cover the need. That is real when-to-use guidance, though it stops short of naming the alternative tool to call instead of creating a node.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_cop_nodeA
Create a COP node in the specified network.
Before using this, call list_node_types(context='Cop', filter='') for Copernicus nodes (Houdini 20+), or context='Cop2' for legacy COPs. Copernicus is the modern image processing system and is preferred over COP2 (deprecated as of Houdini 20.5). COPs has many dedicated image-processing nodes — blur, sharpen, levels, contrast, over, multiply, luminance, premultiply, channelcopy, noise, ramp, fractalnoise, worleynoise, rasterizegeo, heighttonormal, sdfshape — that may cover the operation without needing a VEX COP or Python.
Args: parent_path: Path to the parent COP network. cop_type: COP node type to create. name: Override node name.
| Name | Required | Description | Default |
|---|---|---|---|
| name | No | ||
| cop_type | Yes | ||
| parent_path | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full behavioral burden. It discloses useful ecosystem context (COP2 deprecated as of Houdini 20.5, Copernicus preferred) but says nothing about failure modes, whether the parent network must exist, permissions, or what is returned on success.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the core action and prerequisite, which is good, but the long enumeration of ~17 node types is verbose relative to its routing value and dominates the middle of the description.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 3-param creation tool with no annotations and no output schema, the description covers purpose, workflow prerequisite, context selection, and all parameters. It is largely sufficient, with only return/failure behavior left unaddressed.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate, and it does: it documents all three params inline (parent_path as the parent COP network path, cop_type as the node type, name as an override). It adds meaning beyond the bare schema, though without format examples for parent_path.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource ("Create a COP node") with scope ("in the specified network"), distinguishing it from generic create_node and the sibling create_lop_node/create_chop_node. An agent can tell what the tool produces 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.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives a concrete prerequisite (call list_node_types with context='Cop' or 'Cop2' first) and steering advice (prefer Copernicus over deprecated COP2). It doesn't explicitly compare against the generic create_node/create_node-type siblings, so it stops just short of full alternative routing.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_hdaC
Create a new HDA from an existing subnet node.
Args: ctx: MCP context. node_path: Subnet node path. hda_file: Destination HDA file path. type_name: Operator type name. label: Human-readable label. version: Version string.
| Name | Required | Description | Default |
|---|---|---|---|
| label | Yes | ||
| version | No | 1.0 | |
| hda_file | Yes | ||
| node_path | Yes | ||
| type_name | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full behavioral burden. It implies a mutation (creating/defining an HDA file) but says nothing about whether the destination file is overwritten, what happens to the source subnet node, required permissions, or error behavior. For a write operation with zero annotation coverage, this is a significant gap.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The purpose sentence is front-loaded and efficient, but the Args block is boilerplate that largely duplicates the schema and even includes 'ctx: MCP context,' which is not a tool parameter. This noise dilutes an otherwise reasonably sized description.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no annotations, no output schema, and 5 parameters at 0% schema coverage, the description should do much more. It does not explain the result of the operation, what the created HDA contains, or how the source subnet is handled, leaving the agent under-informed for a mutating call.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate, and it does so only thinly. It adds marginal meaning ('Subnet node path' clarifies the node must be a subnet; 'destination HDA file path' clarifies directionality; 'Operator type name'), but most entries just restate the parameter names with little additional syntax or constraint detail.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb+resource: 'Create a new HDA from an existing subnet node,' which clearly conveys both the action and the source. It does not, however, differentiate itself from close siblings like install_hda, update_hda, or reload_hda, leaving the agent to infer the distinction.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no guidance on when to use this tool versus the many HDA-related siblings (install_hda, update_hda, get_hda_info, etc.). The usage is only implied by the verb 'Create,' and no prerequisites or conditions are stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_lightB
Create a USD light in a LOP network.
Args: parent_path: Parent LOP network path. light_type: "dome", "distant", "rect", "sphere", "disk", or "cylinder". name: Light node name. intensity: Light intensity. color: [r, g, b] color values. position: [x, y, z] world position.
| Name | Required | Description | Default |
|---|---|---|---|
| name | No | ||
| color | No | ||
| position | No | ||
| intensity | No | ||
| light_type | No | dome | |
| parent_path | No | /stage |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full behavioral burden but only enumerates parameters. It does not state whether the light is authored into the current stage, what happens on failure, whether an existing node with the same name is overwritten, or what is returned. For a creation/mutation tool this is a real gap.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
One front-loaded sentence for purpose followed by a compact, scannable arg list. No filler, though it could omit a few redundant restatements (e.g., "Light intensity" for intensity).
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 6-parameter tool with no output schema and no annotations, the parameter coverage is good, but the missing behavioral context (return value, overwrite semantics, required scene state) leaves the definition only minimally adequate for correct invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% and the schema defines no enums, yet the description explains all six parameters and crucially enumerates the valid light_type values ("dome", "distant", "rect", "sphere", "disk", "cylinder") and the [r,g,b] / [x,y,z] formats that the schema does not convey. This adds substantial meaning over the raw schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource: creating a USD light in a LOP network. An agent can distinguish it from read tools like list_lights and mutation tools like set_light_properties, but it does not explicitly differentiate itself from the sibling create_light_rig (single light vs. a rig).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to use this versus create_light_rig or create_lop_node, and no prerequisites (e.g., must a current LOP network exist, does it require a stage). It simply describes an action with no context for selection.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_light_rigB
Create a preset lighting rig in a LOP network.
Args: parent_path: Parent LOP network path. preset: "three_point", "studio", "outdoor", or "hdri". intensity_mult: Multiplier for all light intensities.
| Name | Required | Description | Default |
|---|---|---|---|
| preset | No | three_point | |
| parent_path | No | /stage | |
| intensity_mult | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full behavioral burden. It does not disclose what the rig actually creates (how many lights), whether it overwrites or adds to existing lights, whether it is undoable, or any required context. For a mutation tool with zero annotation coverage this is a real gap.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The purpose is front-loaded in one sentence, and the args list is terse with no filler. The Args block is a reasonable structure, though it is somewhat list-like rather than prose.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Parameters are well covered, but for a mutation tool with no annotations and no output schema, the description omits any indication of side effects, what is produced, or undo behavior. It covers the invocation surface but not the behavioral context an agent would want.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate, and it does: it enumerates the valid preset strings ('three_point', 'studio', 'outdoor', 'hdri'), explains parent_path is a LOP network path, and clarifies intensity_mult scales all light intensities. This is meaningful added semantics for all three parameters, though the schema's 'preset' string has no enum to enforce these values.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource: 'Create a preset lighting rig in a LOP network.' An agent can distinguish it from sibling create_light (single light) by the word 'rig' and 'preset'. It does not explicitly name or contrast against that sibling, keeping it just below a 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no when-to-use guidance. The description never says when to prefer this over create_light or set_light_properties, nor any prerequisites (e.g. that a LOP network must exist at parent_path). Usage must be inferred from the name alone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_lop_nodeA
Create a new LOP node.
Before using this, call list_node_types(context='Lop', filter='') to verify the correct node type. Solaris ships many specialized LOPs — sublayer, reference, materiallibrary, assignmaterial, karmarendersettings, editproperties, xform, prune, configurelayer, collection, addvariant — that may not be obvious from their names.
Args: parent_path: Parent node path. lop_type: LOP node type (e.g. "sphere", "sublayer", "merge"). name: Node name. prim_path: USD prim path to set on the node.
| Name | Required | Description | Default |
|---|---|---|---|
| name | No | ||
| lop_type | Yes | ||
| prim_path | No | ||
| parent_path | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries full behavioral burden. It discloses the prerequisite validation step and that prim_path sets a USD prim path on the node, but omits failure modes, undo behavior, name-collision handling, and what the operation returns. The added context is useful but incomplete for a mutation tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loads the core action, then provides a prerequisite and an args list. The list of twelve example LOP types is somewhat verbose but illustrative. Overall the structure is clean and every part serves a purpose, though the example list could be trimmed.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description covers purpose, a prerequisite, and brief parameter hints. But for a create tool with no annotations, no output schema, and 0% schema description coverage, it should also describe the return value, side effects, and error conditions. Those gaps leave an agent under-informed about invocation outcomes.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, so the description must explain all four parameters. It gives meaningful detail for lop_type (with examples and a validation step) and prim_path (explains its effect), but parent_path and name are essentially tautological restatements. Format expectations, defaults, and requiredness remain unstated.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource: 'Create a new LOP node.' This distinguishes it from generic siblings like create_node and from context-specific creators like create_light. However, it does not explicitly name or contrast with alternative node-creation tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives a clear precondition: 'Before using this, call list_node_types(context=\'Lop\', filter=\'<keyword>\') to verify the correct node type.' It also explains why this matters by listing many specialized LOPs. No explicit when-not or direct sibling comparison is offered.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_materialB
Create a material in /mat with configurable surface properties.
Args: name: Material node name; refused if taken. Default: material1, numbered up when that exists. mat_type: Material type ("principled", "materialx"). base_color: [R, G, B] base color, 0-1 per channel. roughness: Surface roughness, 0-1. metallic: Metallic factor, 0-1. opacity: Opacity, 0-1.
| Name | Required | Description | Default |
|---|---|---|---|
| name | No | ||
| opacity | No | ||
| mat_type | No | principled | |
| metallic | No | ||
| roughness | No | ||
| base_color | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It does disclose one genuine behavioral trait beyond the schema: the name is refused if taken and auto-numbers up from 'material1'. However, it says nothing about persistence, required connection state, or other side effects of creating a material.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The purpose is front-loaded in a single sentence, followed by an Args block that is uniformly terse. Little waste, though the naming default explanation spans two lines that could be tightened.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a creation tool with no annotations and no output schema, the parameter documentation is solid, but the description omits any statement of the returned material handle/node path or the operational context (connection requirement, undo behavior) an agent needs before calling.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate, and it does: every one of the six parameters gets a meaning and, for the numeric ones, a 0-1 range. Only mat_type is weakly specified, listing enum-like values ('principled', 'materialx') without stating whether others are valid.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Create a material') plus the target location '/mat' and scoping ('configurable surface properties'). It distinguishes reasonably from create_material_network and create_node, though it never explicitly contrasts itself with those siblings.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to use this versus create_material_network, create_node, or assign_material, and no prerequisites (e.g. a live Houdini connection) are mentioned. The agent must infer usage entirely.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_material_networkA
Create a new material network in /mat.
The keys base_color ([r, g, b]), roughness, metalness and opacity are accepted on both shader types and mapped to the shader's own parameter names (base_colorr/g/b and specular_roughness on MaterialX, basecolor, rough, metallic and opac on Principled). Any other key must be the shader's real parameter name; a list sets the whole parm tuple. The reply lists what was applied and, under "skipped", every key that matched no parameter, with the reason.
Args: ctx: MCP context. name: Name for the new material node. shader_type: "principled" (principledshader::2.0), "materialx" (mtlxstandard_surface), or any material node type name. params: Parameter name-value pairs to set on the shader.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | ||
| params | No | ||
| shader_type | No | principled |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations present, the description carries the full burden and does disclose substantial behavior: the canonical key aliasing (base_color/roughness/metalness/opacity mapped per shader type), the rule that unknown keys must match real parameter names, tuple semantics for lists, and the failure surface ('skipped' keys with reasons). It stops short of stating permissions, creation location within /mat beyond the network, or name-collision handling.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The core action is front-loaded in the first sentence, and the remaining prose is dense but earns its place by explaining the alias mapping and skip reporting. The Args block is standard docstring style; minor verbosity but no filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 3-parameter, no-annotation, no-output-schema tool, the description supplies the argument semantics, mutation behavior, and even the shape of the reply (applied list plus 'skipped' reasons), which covers most of what is missing from structured fields. It only lacks tool-routing context relative to its siblings.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, so the description must compensate, and it does: name ('Name for the new material node'), shader_type (with concrete values principled/materialx plus arbitrary node types), and params (name-value pairs with the full mapping rules). No parameter is left ambiguous.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The first sentence gives a specific verb and resource ('Create a new material network in /mat'), so the purpose is unambiguous. It does not, however, distinguish itself from close siblings such as create_material, build_network, or create_node, which an agent must currently do by inference.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description never states when to choose this tool over create_material, build_network, or create_node. It offers argument-selection detail (which shader_type values exist) but no tool-selection or exclusion guidance, so the agent gets no routing help.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_network_boxC
Draw a titled network box around nodes, to document a graph you built.
Args: ctx: MCP context. parent_path: Network the box lives in. node_paths: Sibling nodes to enclose; the box fits around them. comment: Title shown on the box. color: RGB in 0..1.
| Name | Required | Description | Default |
|---|---|---|---|
| color | No | ||
| comment | No | ||
| node_paths | No | ||
| parent_path | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so the description carries full burden. It implies a mutation (creates a box) but says nothing about side effects, whether boxes can overlap or auto-resize, whether the operation is reversible, or whether it affects existing layout. Significant gaps for a mutation tool with zero annotation coverage.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Single-sentence purpose up front, followed by a compact Args block. No waste. Minor: 'document a graph you built' is slightly editorial.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 4-param mutation tool with no annotations, no output schema, and 0% schema description coverage, the description covers the basics but leaves behavioral and usage gaps that an agent needs to call it confidently.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate. It documents all four params reasonably: parent_path (network), node_paths (siblings to enclose, box fits around them), comment (title), color (RGB 0..1). This is decent, but color format is only partially specified ('RGB in 0..1') and node_paths behavior when null is unstated. Baseline for low coverage would be lower, but the description does add real meaning — 3 is fair.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource: 'Draw a titled network box around nodes.' Clearly distinguishes from sibling create_sticky_note and create_node. 'document a graph you built' adds a use-case framing, though the phrase is a bit soft.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No when-to-use vs alternatives guidance, no prerequisites, no note about when a box (vs a sticky note, vs verify_network) is appropriate. Agent must infer intent from the sibling list.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_nodeB
Create a node inside a parent network.
Before using this, call list_node_types(context='', filter='') to verify a dedicated node exists for the operation. Houdini has thousands of nodes — many common operations (boolean, scatter, copy to points, fracture, ocean, hair, vellum, pyro, etc.) have dedicated nodes that are better than writing VEX or Python.
Args: ctx: MCP context. parent_path: Parent network path. node_type: Node type (e.g. 'geo', 'box', 'grid'). name: Node name. position: [x, y] network editor position.
| Name | Required | Description | Default |
|---|---|---|---|
| name | No | ||
| position | No | ||
| node_type | Yes | ||
| parent_path | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It does not state that this is a write operation, whether it modifies the scene destructively, what happens on failure, or whether it can be undone. The prerequisite call is helpful but is usage guidance, not a behavioral trait of the tool itself.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded with the core action, followed by a useful prerequisite note and parameter list. The middle paragraph about Houdini's thousands of nodes is somewhat tangential but still relevant guidance, and the overall structure is easy to scan.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the absence of annotations and an output schema, the description covers the basic purpose, a key prerequisite, and parameter meanings. It omits important context such as return values, error conditions, and side effects, which are necessary for safe invocation of a node-creation tool in a complex scene graph.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate. It lists all four parameters and gives brief meanings (e.g., 'Parent network path', 'Node type (e.g. geo, box, grid)', '[x, y] network editor position'), which adds some value. However, it does not clarify path formatting, optionality, or defaults, so the compensation is only partial.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource: 'Create a node inside a parent network.' This is clear and direct, but it does not distinguish this tool from sibling creation tools like create_lop_node, create_cop_node, or create_chop_node, which all create nodes in different contexts.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives clear context by recommending a prerequisite call to list_node_types and explains why dedicated nodes are preferable to VEX or Python. However, it does not provide explicit exclusions or compare this tool against other node-creation siblings, leaving an agent to infer when to use create_node versus create_lop_node etc.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_render_nodeC
Create a new render (ROP) node in /out.
Args: renderer: Renderer type ('karma', 'opengl', 'mantra', 'rop_geometry', 'rop_alembic', 'usdrender', 'fetch', 'merge', 'rop_fbx', 'rop_gltf'). name: Node name. camera: Camera node path. output_path: Output file path.
| Name | Required | Description | Default |
|---|---|---|---|
| name | No | ||
| camera | No | ||
| renderer | Yes | ||
| output_path | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries full burden. It discloses the target location (/out) but says nothing about side effects on the scene, whether the node is automatically connected, required Houdini connection state, error behavior for an invalid renderer, or whether the operation is undoable.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is short and front-loaded with the core action before the argument list. Each argument line is minimal, though the 'Args:' list is essentially a restatement of schema property names with only the renderer enum adding clear value.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a mutation tool with no annotations and no output schema, the description is too thin. It omits what the tool returns (e.g., the created node path), whether the operation requires an active Houdini session, and how optional parameters like camera and output_path affect node configuration.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate. It labels all four parameters and provides the accepted renderer values ('karma', 'opengl', etc.), which is useful beyond the bare schema. However, it gives no format details for camera paths, output path syntax, or name defaults.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb ('Create') and resource ('render (ROP) node') and location ('in /out'). This distinguishes it from generic create_node and from create_lop_node/create_cop_node siblings, though no sibling is named explicitly.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to use this tool versus alternatives like create_node or setup_render. The description only defines the action and arguments, leaving the agent to infer context from the tool name and parameter list.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_spare_parameterB
Add a spare parameter to a node.
Args: node_path: Node path. parm_name: Internal parameter name. parm_type: "float", "int", "string", "toggle", or "menu". label: UI label. default_value: Default value. min_val: Minimum value (float/int only). max_val: Maximum value (float/int only).
| Name | Required | Description | Default |
|---|---|---|---|
| label | Yes | ||
| max_val | No | ||
| min_val | No | ||
| node_path | Yes | ||
| parm_name | Yes | ||
| parm_type | Yes | ||
| default_value | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full behavioral burden. It implies mutation via 'Add' but says nothing about permissions, whether the parameter persists, what happens on a duplicate parm_name, or what is returned — significant gaps for a write operation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded purpose sentence followed by a compact per-argument list; no filler or repetition. Slightly terse, but every line earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 7-parameter mutation tool with no annotations and no output schema, the argument documentation is solid but the behavioral story is incomplete — no success/failure semantics, no note on whether the node must already exist or be unlocked, and no return-value indication.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate, and it largely does: it names all seven parameters and adds real meaning, notably the allowed parm_type values ('float', 'int', 'string', 'toggle', 'menu') which the schema does not enumerate as an enum, and the float/int-only constraint on min_val/max_val.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The first line states a specific verb and resource ('Add a spare parameter to a node'), which is clear enough to act on. It does not, however, distinguish itself from the near-identical sibling 'create_spare_parameters' (plural), leaving the agent to guess which one to pick.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no when-to-use guidance, no prerequisites (e.g. node must exist, name collisions), and critically no differentiation from the sibling 'create_spare_parameters'. The agent gets no help choosing between the singular and plural variants.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_spare_parametersA
Batch-create multiple spare parameters in one call, optionally in a folder tab.
A name that already exists as a spare parameter is updated in place (label, default, range); its current value and keyframes are kept. A type change on an existing parameter is refused.
Args: node_path: Node path. parameters: List of parameter specs. Each dict has keys: parm_name (str), parm_type (str: "float"/"int"/"string"/"toggle"/"menu"), label (str), default_value (optional), min_val (optional), max_val (optional). folder_name: If provided, wraps all parameters in a named folder tab. folder_type: Folder style: "Tabs", "Collapsible", or "Simple".
| Name | Required | Description | Default |
|---|---|---|---|
| node_path | Yes | ||
| parameters | Yes | ||
| folder_name | No | ||
| folder_type | No | Tabs |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and does well: it discloses upsert semantics (existing labels/defaults/ranges updated, current value and keyframes preserved) and a refusal rule ('a type change on an existing parameter is refused'). It omits auth/permission requirements and any error surface beyond the type-change case.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Purpose is front-loaded, behavioral caveats follow, and Args are itemized. Slightly verbose in restating types, but every sentence carries information an agent needs.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a mutation tool with no annotations and no output schema, the definition covers purpose, upsert/refusal behavior, and all parameter semantics. Remaining gaps (error handling beyond type change, permissions) are minor.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, yet the description documents every parameter: node_path, the nested parameters dict keys and allowed parm_type values, folder_name's wrapping behavior, and folder_type's three styles. This more than compensates for the empty schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Starts with a specific verb+resource+scope: 'Batch-create multiple spare parameters in one call, optionally in a folder tab.' The word 'Batch' immediately distinguishes it from the singular sibling create_spare_parameter, and no schema inspection is needed to know what it does.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The batch framing gives clear context for choosing this over create_spare_parameter, and the upsert note ('a name that already exists is updated in place') tells the agent when re-running is safe. There is no explicit when-not or named alternative, so it falls short of a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_sticky_noteB
Leave a sticky note in a network.
Args: ctx: MCP context. parent_path: Network the note lives in. text: Note text. position: [x, y] in network editor units. size: [width, height] in network editor units. color: RGB in 0..1.
| Name | Required | Description | Default |
|---|---|---|---|
| size | No | ||
| text | Yes | ||
| color | No | ||
| position | No | ||
| parent_path | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full behavioral burden, yet it discloses almost nothing about effects: no statement of what the returned value is, what happens if parent_path is invalid, or whether the note is immediately created. It only documents argument units, which is parameter-level, not behavioral, context.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loads the purpose sentence, then lists args efficiently. However, it includes a non-parameter entry ('ctx: MCP context.') that adds noise, and reads as a raw docstring dump rather than a curated description.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
No output schema or annotations exist, so the description bears full responsibility, and it leaves out what the tool returns and any failure/edge behavior for a mutation tool. The parameter documentation is complete, so it is minimally adequate but not complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, so the description must compensate, and it largely does: it names all five parameters and adds units the schema lacks – 'position: [x, y] in network editor units', 'size: [width, height] in network editor units', and 'color: RGB in 0..1'. This meaningfully disambiguates format and ordering beyond the bare schema types.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a clear verb and resource: 'Leave a sticky note in a network.' An agent understands it creates a note object inside a specified Houdini network. It does not differentiate from any sibling (there is no other note tool), but the purpose itself is unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description offers no when-to-use or when-not-to-use guidance, no prerequisites, and no mention of alternatives. It is purely a signature listing with no routing context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_takeB
Create a new take, optionally under a parent take.
Args: name: Name for the new take. parent_name: Parent take name (defaults to current take).
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | ||
| parent_name | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full behavioral burden. It says 'create' but omits side effects: whether the new take becomes the current take, what happens to the scene state, whether the operation is reversible, and what is returned. The only behavioral detail is the parent default, which is insufficient for a mutation tool with zero annotation coverage.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded with the purpose and then lists the two arguments efficiently. It is appropriately sized for a simple two-parameter tool, though the separate Args block repeats parameter names that could arguably be integrated into the first sentence.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a low-complexity, two-parameter creation tool with no output schema and no annotations, the description covers purpose and both parameters adequately. However, it leaves out the post-creation state change (current take behavior) and any return or side-effect information, which an agent would need to invoke it with full confidence.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must document the parameters. It does both: 'name' is called the name for the new take, and 'parent_name' is described as the parent take name with a default of the current take. This adds meaningful default behavior not present in the schema. Only minor format or constraint details are missing.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource: 'Create a new take'. It adds scope ('optionally under a parent take'), which helps an agent distinguish it from the read/write siblings like list_takes or set_current_take. However, it does not explicitly name or contrast with those siblings.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It implies the core use case (making a new take) and mentions the optional parent nesting, but offers no explicit when-to-use guidance, no prerequisites, and no comparison to related tools like set_current_take or list_takes. Usage is implied rather than stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_vex_expressionA
Set an HScript expression on a parameter, evaluated before it is kept.
Parameters cannot run VEX: attribute @ syntax is refused with a pointer to create_wrangle. An expression that does not evaluate is not kept.
Args: node_path: Path to the node. parm_name: Parameter name. vex_code: Expression code, in HScript syntax.
| Name | Required | Description | Default |
|---|---|---|---|
| vex_code | Yes | ||
| node_path | Yes | ||
| parm_name | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and does disclose real behavior: expressions are evaluated before being kept, invalid expressions are discarded ('not kept'), and VEX attribute syntax triggers a refusal naming an alternative tool. It does not say whether an existing expression is overwritten or what is returned on success.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the core action and the two key constraints before the Args block. The Args list largely restates the schema field names, so a little space is spent on low-yield content, but nothing is padded or buried.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a parameter-mutating tool with no annotations and no output schema, the critical unknowns an agent faces (HScript vs VEX, failure semantics) are answered. Remaining gaps are secondary: overwrite behavior for an already-expressioned parameter and permission requirements.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate, and it does so only minimally: node_path and parm_name get tautological glosses ('Path to the node', 'Parameter name'). The one high-value addition is that vex_code is HScript syntax despite its VEX-sounding name, which offsets the gap partially but not fully.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
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 ('Set an HScript expression on a parameter') plus evaluation timing ('evaluated before it is kept'), which resolves the confusing name (a 'vex_expression' tool that actually sets HScript). It differentiates from the VEX path by naming create_wrangle, though it never distinguishes itself from the near-identical sibling set_expression.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives an explicit when-not and a routing alternative: parameters cannot run VEX, '@' syntax is refused, and the error points to create_wrangle. What is missing is positive guidance on when this should be preferred over set_expression or execute_hscript.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_wrangleA
Create an Attribute Wrangle node with VEX code.
LAST RESORT. VEX is for attribute math that no node expresses — NEVER for modeling, scattering, copying, deforming, grouping, or randomizing, which all have dedicated nodes. Building geometry in a wrangle when a native node exists is a failure, not a shortcut.
The justification parameter is mandatory: state which list_node_types searches you ran and why none of the results can do this. If you cannot write that sentence honestly, you have not checked — check first.
Args: parent_path: Parent SOP network path. vex_code: VEX snippet to set. justification: Which native nodes you checked (the actual list_node_types filters used) and why none can express this logic. run_over: Element to run over ("Points", "Vertices", "Primitives", "Detail", "Numbers"). name: Node name.
| Name | Required | Description | Default |
|---|---|---|---|
| name | No | ||
| run_over | No | Points | |
| vex_code | Yes | ||
| parent_path | Yes | ||
| justification | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations exist, so the description carries the full behavioral burden. It usefully discloses the mandatory justification gate and the intended usage discipline, but says nothing about mutation side effects, whether the node is cooked/validated, or what happens on invalid VEX. Adequate but incomplete for a write operation with zero annotation coverage.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with purpose, then the critical usage constraint, then Args. The warning block is longer than typical but all of it is actionable and justifies its space by preventing misuse.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 5-param creation tool with no output schema and no annotations, the description covers purpose, usage gating, and every parameter. It stops short of describing failure modes or post-creation state, keeping it from a 5.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the Args section does the work: it defines parent_path, vex_code, justification semantics, node name, and enumerates run_over values ('Points', 'Vertices', 'Primitives', 'Detail', 'Numbers') that the schema lacks. This meaningfully compensates for the empty schema descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Create an Attribute Wrangle node with VEX code') and implicitly distinguishes itself from siblings like set_wrangle_code and create_vex_expression by scoping to node creation. An agent can immediately tell what this produces.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly frames the tool as a LAST RESORT, names the categories it must never be used for (modeling, scattering, copying, deforming, grouping, randomizing), and instructs the agent to run list_node_types first. This is textbook when/when-not/alternatives guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete_keyframeC
Delete a keyframe at a specific frame.
Args: node_path: Node path. parm_name: Parameter name. frame: Frame number to delete.
| Name | Required | Description | Default |
|---|---|---|---|
| frame | Yes | ||
| node_path | Yes | ||
| parm_name | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full behavioral burden. It states the mutation but omits whether a keyframe must already exist, what happens if none exists at the given frame, whether the deletion is undoable, or what side effects occur on the animation curve. This is a significant gap for a destructive operation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is short and front-loaded, stating the action first and then listing parameters. The Args block is compact, though the parameter blurbs are so thin that they barely earn their place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a three-parameter mutation tool with no annotations, no output schema, and 0% schema description coverage, the description is too thin. It does not explain required preconditions (e.g., that the keyframe must exist), the effect on the curve, or error behavior, so an agent lacks enough context to invoke it confidently.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the schema only provides titles like 'Node Path', 'Parm Name', and 'Frame'. The description's parameter blurbs ('Node path.', 'Parameter name.', 'Frame number to delete.') mostly restate those titles and add no meaningful format, type, or constraint information beyond what the schema already shows.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a specific verb (Delete) and resource (keyframe) with scope (at a specific frame), which is enough to tell it apart from set_keyframe and get_keyframes implicitly. However, it does not explicitly differentiate itself from sibling tools, so it falls short of a 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no when-to-use guidance, no mention of alternatives such as set_keyframe or get_keyframes, and no prerequisites or exclusions. The description only states what the tool does, leaving the agent to infer usage from the verb alone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete_nodeC
Delete a node.
Args: ctx: MCP context. node_path: Node path.
| Name | Required | Description | Default |
|---|---|---|---|
| node_path | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full behavioral burden. It says only 'Delete a node' and does not disclose whether deletion is reversible, what happens to children/dependents, or what permissions or context are required.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is very short, but it is under-specified rather than efficiently concise. The 'Args:' boilerplate, including 'ctx: MCP context.', does not earn its place and distracts from the only useful statement.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a destructive node-deletion tool with no annotations and no output schema, the description is incomplete. It lacks consequences, safety information, and usage context that an agent would need before invoking a delete operation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, and the description only repeats 'node_path: Node path' without adding format, examples, or path semantics. It does not compensate for the missing schema documentation.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a clear verb and resource ('Delete a node'), so an agent can tell what the tool does. However, it does not differentiate this tool from siblings such as delete_keyframe, rename_node, or create_node, and adds no scope beyond the tool name.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus alternatives. It does not mention prerequisites, required selection state, undo behavior, or the related node-management siblings, leaving the agent to infer usage entirely.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
dirty_work_itemsB
Dirty work items on a TOP node so they can be regenerated.
Args: ctx: MCP context. node_path: TOP node path. remove_outputs: Also remove output files from disk.
| Name | Required | Description | Default |
|---|---|---|---|
| node_path | Yes | ||
| remove_outputs | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full behavioral burden. It does usefully disclose that remove_outputs deletes output files from disk, but says nothing about whether this marks all items or a subset, whether it requires a subsequent cook, or whether the disk deletion is recoverable.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The core purpose is front-loaded in one sentence, followed by a compact arg list. The 'ctx: MCP context' entry is boilerplate that adds little, but overall the text is tight and wastes few words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a two-parameter TOP operation with no annotations and no output schema, this is only partly complete: it never states scope (all work items vs. selected), what the agent should do afterwards (cook the node), or what the call returns.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate. It adds real meaning for remove_outputs ('Also remove output files from disk'), which is the key non-obvious parameter, but node_path is only restated and no format or expected value is given for it.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource — marking work items on a TOP node dirty — and clarifies the goal ('so they can be regenerated'). It is clear what the tool does, but it does not distinguish itself from related TOP tools like generate_static_items or cook_top_node, which an agent must choose between.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The phrase 'so they can be regenerated' implies the usage context (forcing re-cook/re-generation), but there is no explicit when-to-use guidance and no mention of alternatives such as cooking, cancelling, or inspecting work item states. Usage 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.
disconnect_nodeC
Disconnect one or all inputs of a node.
Args: ctx: MCP context. node_path: Node path. input_index: Input index to disconnect. disconnect_all: Disconnect all inputs.
| Name | Required | Description | Default |
|---|---|---|---|
| node_path | Yes | ||
| input_index | No | ||
| disconnect_all | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. For a mutation tool it says nothing about side effects: whether disconnecting is reversible, what happens to downstream cooks, whether the node path must be valid, or what the result looks like. The 'Args' block merely restates parameter names.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The opening sentence is tight and front-loaded, but the following 'Args:' block is boilerplate that duplicates the schema's property titles without adding information, which weakens the otherwise efficient structure.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
A mutation tool with no annotations, no output schema, and 0% parameter coverage needs the description to explain side effects and parameter interplay. It does not, leaving an agent unable to predict the tool's behavior from the definition alone.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% for 3 parameters, and the description does not compensate. The arg list ('Node path.', 'Input index to disconnect.', 'Disconnect all inputs.') echoes the schema titles verbatim, adding no format, range, or interaction semantics (e.g., how input_index and disconnect_all combine).
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a clear verb+resource: 'Disconnect one or all inputs of a node.' An agent immediately knows the operation. However it does not differentiate itself from closely related siblings such as connect_nodes, connect_nodes_batch, or reorder_inputs, so a 5 is not warranted.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to use this versus connect_nodes/connect_nodes_batch, no mention of prerequisites (e.g., that the node must exist or be connected), and no explanation of when to prefer disconnect_all over input_index. Usage must be inferred entirely.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
edit_hda_interfaceA
Edit an HDA's EXISTING Type Properties interface in one atomic call: insert at a position, remove, hide/show, replace, modify, move.
set_hda_interface only appends. Every op here works on the definition's parameter group; all ops are applied to a copy, the result is checked for component-name collisions, and it is written once — a failing op changes nothing. Read the interface first with get_parm_template_tree.
Ops (dicts, applied in order): {"op": "insert", "spec": {...}, "after": name | "before": name | "in_folder": label or [labels]} — omit the position to append. spec is a set_hda_interface spec, plus types button (with "callback", Python by default), separator, label, vector, color, file, oppath; and fields naming_scheme (base1|xyzw|rgba|minmax| startend|uvw), default_expression (+ default_expression_language), hidden, join_with_next, callback, tags; folder_type "multiparm" for a multiparm block (children named "item#"). {"op": "remove", "name": name_or_folder_label} {"op": "hide" | "show", "name": ...} {"op": "replace", "name": ..., "spec": {...}} {"op": "modify", "name": ..., <label | help | default | default_expression | default_expression_language | min | max | min_strict | max_strict | hide_when | disable_when ("" clears) | hidden | join_with_next | menu_items | callback | naming_scheme | new_name | tags>} ("rename", "set_conditional", "set_default" are aliases) {"op": "move", "name": ..., "after" | "before" | "in_folder": ...}
Names are template names (t, not tx; stud_count); folders are
addressed by label ("Controls"). Built-in parameters of the node type
(an Object's Transform) cannot be removed — Houdini re-adds them at the
top level and the reply says so in reinstated_by_houdini; hide them.
default_expression_language is "hscript" (Houdini's default) or
"python"; given alone in a modify, it changes the language of the
expression already there. stored reads both back, and
instance_expression_errors names a default expression that does not
evaluate on the instance.
Args: ctx: MCP context. node_path: An instance of the HDA whose definition is edited. ops: Operations, in order. dry_run: Validate and report the plan without writing.
| Name | Required | Description | Default |
|---|---|---|---|
| ops | Yes | ||
| dry_run | No | ||
| node_path | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and does so: atomic copy-then-write semantics ('a failing op changes nothing'), collision checking, the built-in-parameter constraint with the reinstated_by_houdini reply field, and dry_run behavior. This is exactly the behavioral detail an agent needs before mutating an HDA definition.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
It is front-loaded (purpose, then the append-only distinction, then the atomicity guarantee, then op grammar) and every block is functional. It is long, but the length is driven by a genuinely complex op grammar with 0% schema coverage; only the parenthetical alias notes feel slightly compressible.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
There is no output schema, yet the description surfaces the relevant reply fields (reinstated_by_houdini, stored, instance_expression_errors) and the failure semantics. For a 3-parameter, high-complexity mutation tool with no annotations, nothing material is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, so the description must compensate, and it does: it fully enumerates the op dict grammar (insert/remove/hide/show/replace/modify/move), each op's positional keys, the spec fields, naming variants and aliases, and the meaning of node_path and dry_run. This exceeds what a bare schema would have provided.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The opening sentence states a specific verb (edit), resource (an HDA's EXISTING Type Properties interface), and enumerates the six supported operations. It also explicitly distinguishes itself from the sibling set_hda_interface ('only appends'), so an agent can route between the two 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.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It names the alternative (set_hda_interface appends; this tool edits existing entries) and states the prerequisite workflow ('Read the interface first with get_parm_template_tree'). The dry_run parameter and the read-first instruction give clear when-to-use and when-to-call-something-else guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
evaluate_expressionC
Evaluate an expression in Houdini and return its result.
Args: expression: Expression string to evaluate. language: Expression language, "hscript" or "python".
| Name | Required | Description | Default |
|---|---|---|---|
| language | No | hscript | |
| expression | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full disclosure burden. It notes a return result but says nothing about side effects even though evaluating hscript or python can mutate the scene, nor about errors, cost, or whether execution is sandboxed. For a code-evaluation tool with zero annotation coverage this is a notable gap.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The action statement is front-loaded in the first sentence and the per-argument notes are compact. There is no filler, though the bare 'Args:' block is functional rather than polished.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema and no annotations, the description should do more for a tool that executes arbitrary code. It covers the two parameters at a basic level but omits defaults, side-effect risk, and return-shape details, leaving an agent with an incomplete picture for a 2-parameter eval tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate, and it usefully enumerates the allowed language values ('hscript' or 'python'), which the schema does not express as an enum. It does not state the default (hscript) or the required/optional status of expression, so it partially compensates.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description gives a clear verb+resource ('Evaluate an expression in Houdini') and states it returns a result, so an agent knows what the tool does. However, it does not distinguish itself from close siblings like execute_hscript, execute_python, or set_expression, leaving the agent to infer the boundary.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no explicit when-to-use or when-not-to-use guidance, and no mention of the near-identical siblings execute_hscript and execute_python. The only implied guidance is that you supply an expression, which is too thin to route the agent reliably.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
execute_hscriptC
Execute an HScript command in Houdini.
Args: command: HScript command string to execute.
| Name | Required | Description | Default |
|---|---|---|---|
| command | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden, yet it discloses nothing about side effects, whether the command can mutate or destroy scene state, required context, or error behavior. For an arbitrary command-execution tool this is a significant gap.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded and brief with no wasted sentences. The 'Args:' block largely restates the parameter name already in the schema, but the overall size is appropriate.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For an arbitrary-command execution tool with no annotations, no output schema, and 0% parameter schema coverage, the description omits almost everything an agent needs: side effects, safety profile, return behavior, and execution context. It is substantially under-specified for the tool's risk level.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0% and the single parameter is undocumented in the schema, so the description must compensate. It adds only that the value is an HScript command string, which distinguishes it from Python code but gives no syntax, format, or examples. Minimal but non-zero added meaning.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource: 'Execute an HScript command in Houdini.' An agent knows what the tool does, and the HScript qualifier separates it from execute_python. However, it does not explicitly contrast itself with sibling command-execution tools, so it stops short of a 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No when-to-use guidance, prerequisites, or alternatives are given. The description never explains when HScript execution is preferable to execute_python, run_shelf_tool, or evaluate_expression, nor any exclusion conditions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
execute_pythonA
Execute arbitrary Python code inside Houdini. LAST RESORT only.
DO NOT use this to:
Create nodes or networks → use build_network or create_node
Set parameters → use set_parameter or set_parameters
Create wrangles or write Python SOPs → use create_wrangle
Connect nodes → use connect_nodes or connect_nodes_batch
Read geometry → use get_geometry_info, get_points, sample_geometry
ONLY use this when no dedicated tool exists for the operation — i.e. hou.* API calls or Python-level state that no other tool exposes. The justification parameter is mandatory: name the dedicated tools you considered and why none covers this operation.
Args: code: Python source code to execute. justification: Which dedicated tools you considered and why none covers this operation. return_expression: Python expression to evaluate after execution.
| Name | Required | Description | Default |
|---|---|---|---|
| code | Yes | ||
| justification | Yes | ||
| return_expression | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description must carry the behavioral burden, and it does meaningfully: it discloses that this runs arbitrary code with unrestricted hou.* access, that a written justification is mandatory, and how results are retrieved via return_expression. It does not, however, state anything about side-effect persistence, sandboxing, error/exception behavior, or what happens on failure.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the critical constraint ('LAST RESORT only') before the bullet list, and the bullets are scannable. Slight redundancy between the opening line and the closing 'ONLY use this when...' restatement, but overall dense and well organized.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a three-parameter escape-hatch tool with no annotations and no output schema, the description covers purpose, routing, gating policy, and all parameters. It could say more about return value shape or execution environment limits, but nothing essential for correct invocation is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate, and the Args block documents all three parameters: code as Python source, justification as the required rationale, and return_expression as a post-execution expression. It lacks detail on return_expression syntax or code size limits, but the semantic intent of each parameter is clear.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Execute arbitrary Python code inside Houdini') and immediately scopes it as a LAST RESORT. The do-not-use list names the exact sibling tools that cover each neighboring capability, so an agent can distinguish this tool from build_network, create_wrangle, connect_nodes, etc. 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.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicit when-not-to-use routing for five categories of operation, each paired with the correct alternative tool, plus a positive trigger ('ONLY use this when no dedicated tool exists... hou.* API calls or Python-level state'). The mandatory justification requirement reinforces the gating condition. This is textbook when/when-not/alternatives guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
explain_nodeC
Explain a node in human-readable form.
Args: node_path: Node path.
| Name | Required | Description | Default |
|---|---|---|---|
| node_path | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full behavioral burden, and it discloses almost nothing. It doesn't state what the 'explanation' contains, whether it is read-only, costly, or requires the node to exist. For a tool whose entire value is the shape of its human-readable output, this is a substantial gap.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
It is short and front-loads the core verb phrase, which is good, but the trailing 'Args:' block is boilerplate that repeats the parameter name without adding information. Adequately sized, but it earns little of its small footprint.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no annotations, no output schema, and an undocumented parameter, the description should carry the load – and it doesn't. An agent still cannot predict what calling this returns or when it succeeds versus fails.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% and the description only offers 'node_path: Node path.', which merely restates the parameter name. It adds no format, validity, scope, or path-syntax meaning to compensate for the empty schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a verb ('Explain') and a resource ('a node') but 'explain' is ambiguous – it doesn't say whether this returns documentation for a node type, an instance, or its parameters. With dozens of siblings like get_node_info, get_node_card, and get_node_errors_detailed, no differentiation is offered, leaving the agent to guess how this differs.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no when-to-use guidance, no prerequisites, and no mention of alternatives. The agent cannot tell from the text whether to reach for explain_node versus get_node_info or get_node_card when it wants information about a node.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
export_chop_to_parmC
Export a CHOP channel to a parameter via a chop() expression.
Args: chop_path: CHOP node path. channel_name: Channel to export. target_node_path: Target node path. target_parm_name: Parameter to receive the export.
| Name | Required | Description | Default |
|---|---|---|---|
| chop_path | Yes | ||
| channel_name | Yes | ||
| target_node_path | Yes | ||
| target_parm_name | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full behavioral burden. The phrase 'via a chop() expression' usefully reveals the mechanism is a write to the target parameter's expression, but it does not say whether an existing expression is overwritten, what happens on invalid paths, or whether the result is evaluated immediately (a cook).
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
One-sentence purpose followed by a compact Args list; nothing is padded. The structure is front-loaded and easy to scan, though the Args block mostly mirrors the schema property names.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a mutation tool with no annotations, no output schema, and zero schema descriptions, the definition omits failure modes, whether this requires an active Houdini connection (relevant given connect_houdini/get_houdini_connection_status siblings), and what the caller should verify afterward.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate. The Args block does clarify each of the four parameters ('Channel to export', 'Parameter to receive the export'), which resolves direction and role beyond the bare property names. It still does not specify path formats or whether a full channel list is needed, so compensation is only partial.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Export a CHOP channel to a parameter') and even names the mechanism (chop() expression), so the action is unambiguous. It does not, however, distinguish itself from near siblings such as set_expression or link_parameters, which likely also write expressions onto parameters.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to use this versus set_expression, link_parameters, or set_parameter, all of which live in the same sibling set and could plausibly achieve overlapping results. No prerequisites (e.g. target CHOP must exist/cook) are mentioned.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
export_fileA
Export a node's output to a file on disk, and report whether it landed.
SOPs are saved directly, LOPs export their USD stage, and a /out ROP is
pointed at file_path and executed (its own output path is restored
afterwards). Reports wrote_files, so success: True means a file appeared
or changed -- not merely that the call returned. A frame_range writes
name.0001.ext per frame and leaves the playbar where it was.
Args: node_path: Path to the node to export. file_path: Destination file path. For a ROP this overrides its output parameter for the duration of the export. frame_range: Frame range as [start, end] or [start, end, step].
| Name | Required | Description | Default |
|---|---|---|---|
| file_path | Yes | ||
| node_path | Yes | ||
| frame_range | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and does so well: it discloses that success is verified via `wrote_files` (a file appeared or changed, not just a returned call), that a /out ROP's output path is restored afterwards, and that a frame_range writes `name.0001.ext` per frame while leaving the playbar unchanged. These are exactly the side effects an agent needs.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loads the action in the first sentence, then layers behavior and an Args block. Dense but each sentence earns its place; the prose paragraph is slightly heavy relative to the small parameter set.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
No output schema or annotations exist, but the description covers return semantics (wrote_files / success) and key side effects, which is strong for a 3-param mutation tool. It could say more about failure modes or what happens on partial frame exports, leaving a small gap.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate, and it documents all three params: node_path's role, file_path with the ROP override semantics, and frame_range's [start, end] / [start, end, step] shapes. It stops short of restating types/defaults, keeping it just below full credit.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('export a node's output to a file on disk') and goes further by enumerating how it behaves for SOPs, LOPs, and /out ROPs. This lets an agent distinguish it from siblings like save_scene, start_render, write_cache, and import_file 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.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explains per-node-type behavior and the ROP override, which implies when the tool applies, but it never names an alternative (e.g., start_render or write_cache) or states when NOT to use it. Usage is inferrable rather than explicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
find_error_nodesC
Find all nodes with errors or warnings in the scene.
Args: root_path: Root node path to search from.
| Name | Required | Description | Default |
|---|---|---|---|
| root_path | No | / |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full behavioral burden. It implies a read-only scan but never states it, does not describe whether it walks children recursively, whether it cooks nodes to surface errors, or how errors vs warnings are reported. Only the most basic behavior is conveyed.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The core sentence is tight and front-loaded, but the appended 'Args:' block merely echoes the parameter name with no added information, which is padding rather than structure.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a diagnostic tool with no annotations and no output schema, the description should specify what comes back (node paths? messages? severity?) and whether the search is recursive. None of that is present, leaving the agent unable to anticipate the response shape.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate, but it only restates the parameter name ('root path to search from'). It adds no path syntax, no indication of whether child networks are traversed, and the default '/' appears only in the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource: find nodes that carry errors or warnings. Clear enough to act on, but it never distinguishes itself from close siblings like get_node_errors_detailed or verify_network, so an agent cannot tell which of these overlapping diagnostics to pick.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No when-to-use guidance, no prerequisites, no mention of alternatives such as get_node_errors_detailed or get_cook_status. The agent is left to infer that this is a scene-wide scan starting at a root path.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
find_expensive_nodesA
Profile cooking and rank the most expensive nodes — how a senior artist finds the slow node instead of guessing.
Records a performance-monitor profile while force-cooking the display outputs under root_path. cook_ms is cumulative (parents include their children), so compare siblings to locate the hotspot.
Args: root_path: Network to profile (a geo container, or "/" broadly). frame: Optionally jump to this frame before cooking. limit: Max nodes to return.
| Name | Required | Description | Default |
|---|---|---|---|
| frame | No | ||
| limit | No | ||
| root_path | No | / |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden, and it discloses the crucial non-obvious side effect: the tool records a performance profile while force-cooking display outputs under root_path, i.e. it actively triggers cooks rather than passively reading. It also explains that cook_ms is cumulative so parents include children, which is essential for correct interpretation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the purpose, then the mechanism, then the metric caveat, then args. The opening phrasing is slightly editorial but every sentence adds usable information with little waste.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a no-annotation, no-output-schema, three-parameter profiling tool, the description covers purpose, mechanism, metric semantics, and all params. It stops short of describing the exact shape of the returned ranked list, but that gap is minor.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, so the description must compensate, and it does: root_path is described as a geo container or '/' broadly, frame as an optional jump before cooking, and limit as the max nodes returned. This meaningfully exceeds the bare schema defaults.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Specific verb+resource: it profiles cooking and ranks the most expensive nodes. It clearly distinguishes itself from passive introspection siblings like get_cook_chain or get_cook_status by being the active hotspot finder.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Frames the use case well ('how a senior artist finds the slow node instead of guessing') and explains the cumulative cook_ms comparison logic for locating hotspots. It does not name explicit alternatives or state when NOT to use it, so it falls just short of a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
find_nearest_pointC
Find the nearest point(s) to a given position.
Args: node_path: Node path. position: Query position as [x, y, z]. max_results: Max nearest points to return.
| Name | Required | Description | Default |
|---|---|---|---|
| position | Yes | ||
| node_path | Yes | ||
| max_results | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full behavioral burden. It does not disclose whether the operation is read-only, what the return format is, whether distances or point indices are returned, how ties or no-result cases are handled, or any performance constraints.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is short and front-loaded, with the core purpose stated first followed by per-argument clarifications. The args block is slightly redundant for 'node_path' but overall the text is appropriately sized and each sentence serves a purpose.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema and no annotations, the description should explain return values or result shape, coordinate space, and node-type applicability. It omits all of these, leaving key context missing for an agent that needs to invoke and interpret the tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate. It adds useful meaning for 'position' as [x, y, z] and for 'max_results' as max nearest points to return, but 'node_path: Node path.' is essentially a restatement of the schema title and adds no real semantics.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource: 'Find the nearest point(s) to a given position.' It clearly conveys the core operation but does not differentiate this tool from related geometry-query siblings such as sample_geometry, get_points, or find_usd_prims.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no explicit guidance on when to use this tool versus alternatives, no prerequisites, and no exclusions. The purpose implies a use case, but the description provides no routing information for an agent choosing among many sibling tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
find_nodesA
Search for nodes by name pattern, type, or context.
Narrow the search: use inside to limit to a specific sub-network and
supply at least one of pattern, node_type, or context. Searching
from inside="/" with no filters scans the entire scene and can return
hundreds of nodes.
Args: ctx: MCP context. pattern: Glob pattern for node names (e.g. 'box*'). node_type: Node type filter (e.g. 'box', 'null'). context: Category filter (e.g. 'Sop', 'Object'). inside: Root path to search within (default '/').
| Name | Required | Description | Default |
|---|---|---|---|
| inside | No | / | |
| context | No | ||
| pattern | No | ||
| node_type | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full behavioral burden. It discloses a useful performance/scalability warning (unfiltered search scans the entire scene and returns hundreds), but does not explicitly state that the operation is read-only, nor describe side effects or return format.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loads the purpose, then usage constraint, then parameter details in a clear structure. It is appropriately sized and every sentence mostly earns its place, though the Args section includes an extraneous 'ctx' entry.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a four-parameter search tool with no annotations and no output schema, the description covers purpose, usage, filter parameters, and a performance warning. It is missing a description of the return value (e.g., list of node paths) and an explicit safety profile, which are relevant given the absence of structured metadata.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate. It provides examples for pattern ('box*'), node_type ('box', 'null'), context ('Sop', 'Object'), and the default for inside ('/'), which adds value. However, it also lists 'ctx' (MCP context), which is not a schema property, introducing potential confusion.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb 'Search for nodes' and the resource, plus the filter dimensions (name pattern, type, context). It is clearly a search tool, distinguishing it from list_children or get_node_info, but does not explicitly name or differentiate from those siblings.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives explicit guidance to narrow the search using 'inside' and at least one filter, and warns that unfiltered root search returns hundreds of nodes. It does not mention when to prefer sibling tools like list_children, so no explicit alternatives are provided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
find_usd_primsB
Search USD prims by path pattern.
Args: node_path: LOP node path. pattern: Glob pattern (supports *, **) or substring. traverse_instance_proxies: Search prims under instanceable prototypes too; the default walk never visits them.
| Name | Required | Description | Default |
|---|---|---|---|
| pattern | Yes | ||
| node_path | Yes | ||
| traverse_instance_proxies | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden, and it does disclose one valuable non-obvious trait: the default walk never visits instanceable prototypes, so traverse_instance_proxies must be set to reach them. It does not state read-only nature, result size, ordering, or performance characteristics.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
One summary sentence followed by a compact Args block; every line adds information and the purpose is front-loaded. No padding or restated boilerplate.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, annotations, or sibling differentiation, the description should ideally say what a match returns (prim paths? full paths?) and whether the search is scoped to the node's stage. It covers the parameters well but leaves the return shape and comparative positioning unspecified.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate, and it does: it maps node_path to "LOP node path", explains pattern accepts globs (*, **) or a substring, and clarifies the non-obvious semantics of traverse_instance_proxies. Only the exact pattern-matching precedence is left ambiguous.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The first sentence gives a specific verb and resource ("Search USD prims") plus the mechanism (path pattern), which is clearer than the vague sibling tools. However, it never distinguishes itself from close siblings like list_usd_prims or get_usd_prim, so an agent must guess which one to pick.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no explicit when-to-use guidance and no mention of alternatives such as list_usd_prims or get_usd_prim. The pattern syntax note hints at how to call it, but nothing tells the agent when this tool is the right choice over its siblings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
frame_allA
Frame all geometry in the viewport, or only some nodes or a box.
Args: pane_name: Pane tab name. node_paths: Frame just these objects or SOPs (their world bounds), not the spread of everything in the scene. bounds: Frame [xmin, ymin, zmin, xmax, ymax, zmax], world space.
| Name | Required | Description | Default |
|---|---|---|---|
| bounds | No | ||
| pane_name | No | ||
| node_paths | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It usefully clarifies that node framing uses the targets' world bounds rather than the whole scene spread, but it does not state whether this alters the camera, selection, or scene state, nor whether it is undoable.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded summary sentence followed by a compact per-argument list; every line earns its place. Slight verbosity in the node_paths explanation but no filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a three-param viewport tool with no annotations and no output schema, the description covers behavior and argument formats adequately. It omits what happens on success, the default pane when pane_name is null, and how it relates to frame_selection, which an agent would still want.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate and largely does: node_paths is explained as framing objects/SOPs by their world bounds, and bounds is given as [xmin, ymin, zmin, xmax, ymax, zmax] in world space. pane_name is only glossed as 'Pane tab name', leaving default/null behavior unstated.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (frame) and resource (viewport geometry) with three scoping modes (all, node_paths, bounds). It does not name the nearby sibling frame_selection, so an agent must infer the distinction between framing everything/selection from names alone.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implicitly covers when to use each mode: omit arguments to frame everything, pass node_paths to frame specific objects/SOPs, or pass bounds for a box. There is no explicit when-not guidance or reference to alternatives such as frame_selection, leaving mode selection partly to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
frame_selectionC
Frame the current selection in the viewport.
Args: pane_name: Pane tab name.
| Name | Required | Description | Default |
|---|---|---|---|
| pane_name | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden. It never states what happens if nothing is selected, whether the viewport change is undoable, whether it affects only the active pane, or what the null pane_name default means. Only the literal action 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
One action sentence plus a terse Args block, front-loaded with the action. Efficient, though the Args formatting adds no substance beyond the schema.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
A viewport-mutating tool with no annotations, no output schema, and one undocumented optional parameter. The description omits the preconditions and defaults an agent would need to invoke it reliably.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
One parameter at 0% schema description coverage. 'Pane tab name' merely restates the schema's title, and the description does not explain the nullable/default behavior (presumably the current pane when omitted). It fails to compensate for the coverage gap.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource: it frames the current selection in the viewport. This implicitly distinguishes it from frame_all, but the sibling is never named, so the agent must infer the boundary itself.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No when-to-use guidance, no prerequisites (e.g. that a selection must exist), and no mention of the obvious alternative frame_all. The agent gets no routing help.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
generate_static_itemsB
Generate static work items on a TOP node without cooking.
Args: ctx: MCP context. node_path: TOP node path.
| Name | Required | Description | Default |
|---|---|---|---|
| node_path | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full behavioral burden. It usefully discloses the key trait that no cooking occurs, but says nothing about whether existing work items are replaced, whether the node is dirtied, idempotency, required node state, or return behavior for a state-mutating tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The core sentence is front-loaded and tight, but the trailing 'Args: ctx: MCP context.' is noise — ctx is not in the input schema — and the node_path arg restates a param already in the schema. Some content does not earn its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no annotations, no output schema, and 0% schema coverage, the description is too thin for a tool that mutates TOP graph state. An agent cannot determine side effects, preconditions, or what is returned from what is written here.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0% and the description names only one param, but it does add real meaning by specifying 'TOP node path' where the schema only says 'string'. That compensates for the coverage gap partially, though no format, example, or error condition is given.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb (generate), a specific resource (static work items), and adds a scoping qualifier (on a TOP node, without cooking). 'Without cooking' meaningfully separates it from sibling cook_top_node, so an agent can tell them apart. It falls short of 5 only because 'static' is left undefined.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The phrase 'without cooking' implicitly signals when to use this over cook_top_node (generate the item graph without executing it), but there is no explicit when-to-use, when-not, or named alternative. Usage is inferable rather than stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_attrib_statsA
Aggregate statistics for numeric attributes: min, max, mean, sum.
Use this to prove something is happening, rather than reading values. get_geometry_info names the attributes; get_attrib_values returns every value, which on a 60k-point cache tells you nothing you can read. Vector attributes also report per-component ranges, so a velocity field's per-axis extremes come back in the same call.
Args: node_path: SOP node path. attribs: Attribute names. Omit for every attribute of the class. attrib_class: "point", "prim", "vertex" (uv and N usually live there) or "detail". frames: Measure at each of these frames: a row per node per frame, frames cooked in increasing order, the current frame put back. element_count is the point count and P's per-component min/max the bounds, so a sim's count and spread over time is ONE call. node_paths: Several nodes (variants) in the same call, instead of node_path. percentiles: e.g. [5, 50, 95] for the distribution (50 = median).
| Name | Required | Description | Default |
|---|---|---|---|
| frames | No | ||
| attribs | No | ||
| node_path | No | ||
| node_paths | No | ||
| percentiles | No | ||
| attrib_class | No | point |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries full behavioral burden. It discloses the frame-cooking side effect ('frames cooked in increasing order, the current frame put back') and output shape (per-component vector ranges, element_count meaning), but does not explicitly state read-only safety, performance cost, or error behavior. This is strong but not fully exhaustive for an unannotated tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description front-loads purpose and usage before a structured Args section. Each sentence earns its place: the 60k-point example concretizes the contrast, and the frame/vector details are necessary given zero schema descriptions. No fluff.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema and 0% schema coverage, the description supplies missing return-value semantics (min/max/mean/sum, per-component ranges, element_count, per-frame rows) and usage context. An agent has everything needed to invoke it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, and all six parameters are undocumented in the schema. The description compensates by explaining every parameter: attrib_class values and hints, frames behavior and output rows, node_paths mutual exclusivity with node_path, and percentiles example with median. This goes well beyond baseline.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States 'Aggregate statistics for numeric attributes: min, max, mean, sum' – a specific operation and resource – and contrasts with get_geometry_info and get_attrib_values to distinguish output types. An agent can immediately tell this tool returns summaries rather than raw data.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly says to use this 'to prove something is happening, rather than reading values', and names two alternatives (get_geometry_info, get_attrib_values) with the reason each is unsuitable on large caches. This provides clear when-to-use guidance and alternative routing without inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_attribute_infoC
Get metadata for a geometry attribute.
Args: node_path: Node path. attrib_name: Attribute name. attrib_class: "point", "prim", "vertex", or "detail".
| Name | Required | Description | Default |
|---|---|---|---|
| node_path | Yes | ||
| attrib_name | Yes | ||
| attrib_class | No | point |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full behavioral burden. It fails to disclose whether this is read-only, what metadata is returned, error behavior for missing attributes/nodes, or output format.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Very terse and front-loaded. The Args block is somewhat redundant with the schema parameter names, but the description contains no wasted prose.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
This is a read operation with no annotations, no output schema, and zero schema description coverage. The description should clarify what metadata is returned and typical use cases, but instead leaves major gaps for the agent.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, so the description must compensate. It lists all three parameters and provides the meaning for attrib_class ('point', 'prim', 'vertex', or 'detail'), which is genuinely useful. However, node_path and attrib_name are only described tautologically ('Node path.', 'Attribute name.') without format details.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a clear verb+resource: 'Get metadata for a geometry attribute.' This distinguishes it from siblings like get_attrib_values, get_attrib_stats, and get_geometry_info, though it doesn't explicitly name them. The core purpose is unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to use this tool versus alternatives like get_attrib_values or get_attrib_stats. The description is purely definitional with no usage context or exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_attrib_valuesA
Read attribute values as a flat array with pagination.
For spot-checking a few values prefer sample_geometry — it returns a representative spread of points with all their attributes in one call. Use get_attrib_values when you need a specific slice of one attribute.
Values are element-major: for a float3 attribute every 3 consecutive values belong to one element. Check has_more and increment start to read subsequent pages.
Args: node_path: Node path. attrib_name: Attribute name. attrib_class: "point", "prim", "vertex", or "detail". start: First element index to return. count: Max elements per page (default 200).
| Name | Required | Description | Default |
|---|---|---|---|
| count | No | ||
| start | No | ||
| node_path | Yes | ||
| attrib_name | Yes | ||
| attrib_class | No | point |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and largely succeeds: it discloses the flat-array element-major layout of float3 data, the has_more/start pagination protocol, and the default page size of 200. It does not cover error behavior or performance characteristics, but the mutation/safety profile gap is moot for a read tool and the pagination contract is unusually well documented.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the core action, followed by sibling routing, the data-layout caveat, and a compact args list. Every sentence adds distinct information with no repetition of the schema.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
There is no output schema and no annotations, so the description has to explain the return shape itself; it does so via the flat-array and element-major notes plus the pagination contract. The remaining gap is the absence of any error or edge-case behavior, which is minor for a read-only getter.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, so the description must compensate and it does: all five parameters are documented with meaning ('First element index to return', 'Max elements per page'), and the attrib_class enum values (point/prim/vertex/detail) are supplied here but absent from the schema. It leaves out finer details such as the value ordering for tuple types beyond the element-major note.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (read) and resource (attribute values) plus the return shape (flat array with pagination). It also distinguishes itself from the sibling sample_geometry, so an agent can route between them 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.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicit routing guidance: use sample_geometry for spot-checking a few values, use get_attrib_values for a specific slice of one attribute. That is a clear when-to-use/when-to-prefer-an-alternative statement.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_bounding_boxC
Get the bounding box of a SOP node's geometry.
Args: node_path: Node path.
| Name | Required | Description | Default |
|---|---|---|---|
| node_path | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full behavioral burden. 'Get' implies a read-only operation, but the description doesn't state whether geometry is cooked on demand, what coordinate space the bounds use, whether it returns min/max corners or a size, or how missing/empty geometry is handled.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Very short and front-loaded with the core action, which is appropriate for a simple getter. The 'Args:' block is redundant since it restates the schema, but it does not bloat the definition.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
There is no output schema, so the description should explain the return value (e.g., bounds format and coordinate space), but it does not. For a geometry query tool with zero annotation coverage, key call-relevant details are missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% and there is one parameter. The only parameter text, 'node_path: Node path.', merely repeats the schema's own title ('Node Path') and adds no format, path syntax, examples, or meaning beyond the structured field.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Get the bounding box of a SOP node's geometry'), so the agent knows what operation is performed. However, it offers no differentiation from closely related siblings such as get_geometry_info, get_node_info, or get_prim_intrinsics, so sibling disambiguation relies on outside knowledge.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives no when-to-use guidance, no conditions selecting this tool over alternatives, and no prerequisites (e.g., whether the node must be cooked or selected). An agent must infer all usage context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_cache_statusA
Frames on disk for a cache node, against the range it is set to write.
This is what to poll after a background write_cache: complete is true
when every frame of expected_range is on disk, missing_frames lists
the rest, writing is true while files are still arriving, and hint
tells you when the finished cache is not yet loaded from disk. Never
wait for a cache with a shell loop; call this between other work.
Args: ctx: MCP context. node_path: Path to the cache node.
| Name | Required | Description | Default |
|---|---|---|---|
| node_path | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations and no output schema, the description carries the full burden and discloses the return semantics: complete, missing_frames, writing, and hint. It also explains the non-blocking polling behavior. It stops short of stating read-only/no-side-effect profile explicitly, but the behavioral context is strong.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loads the core purpose, then usage, then the field meanings. The return-field enumeration is dense but each sentence earns its place. Slightly verbose field listing keeps it from a 5.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read-only status tool with no annotations and no output schema, the description covers purpose, usage timing, and the meaning of each return field. Nothing an agent needs to poll correctly is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0% and the single required parameter node_path has no schema description, yet the description glosses it as 'Path to the cache node,' adding needed meaning. This adequately compensates for the gap, though a note on accepted path forms would strengthen it.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource: reports frames on disk for a cache node against the range it is set to write. This cleanly distinguishes it from siblings like list_caches, write_cache, and clear_cache.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly names the triggering context ('what to poll after a background write_cache') and gives a clear anti-pattern instruction ('Never wait for a cache with a shell loop; call this between other work'). The agent knows exactly when and how to use it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_chop_dataC
Get CHOP node track data.
Args: node_path: CHOP node path. channel_name: Specific channel to retrieve. start: Start sample index. end: End sample index.
| Name | Required | Description | Default |
|---|---|---|---|
| end | No | ||
| start | No | ||
| node_path | Yes | ||
| channel_name | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full behavioral burden, and it discloses nothing: no return shape, no sampling rate, no units, no whether the CHOP must be cooked, no permission requirements. The phrase 'track data' adds no concrete behavioral information.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The one-line purpose plus an Args list is compact and front-loaded, so nothing is bloated. But the Args block is a low-value re-listing of parameter names that does little work for its length.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, no annotations, and four parameters, the description should explain what the returned track data looks like (samples, channels, ranges) and any cooking/prerequisite conditions. It omits all of this, leaving a significant gap for an agent trying to interpret the result.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate, and it does partially: 'start sample index' / 'end sample index' clarify that these are sample indices rather than seconds or frames, which is meaningful. But it merely restates the names of node_path and channel_name without adding unit, format, or default behavior beyond what is inferable.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a verb and resource ('Get CHOP node track data'), so the agent knows it retrieves channel data from a CHOP node. However, 'track data' is vague about what is actually returned, and the description makes no attempt to differentiate from the sibling list_chop_channels.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no guidance on when to reach for this tool versus siblings like list_chop_channels or export_chop_to_parm, nor any preconditions (does the node need to be cooked first?). Only the implied context of 'getting' data is present.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_context_infoC
Get information about a Houdini network context.
Args: context: Context path, e.g. "/obj", "/stage", "/out".
| Name | Required | Description | Default |
|---|---|---|---|
| context | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries full behavioral burden. The verb 'Get' implies a read operation, but the description does not state whether it is read-only, what permissions are needed, or what kind of information is returned. This leaves significant gaps for a tool with no annotation coverage.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is short and front-loaded, with the core purpose stated first and the argument example following. Every sentence is minimal and no text is wasted, though it is arguably under-specified rather than optimally concise.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given a simple read tool with no annotations, no output schema, and a parameter with 0% schema coverage, the description is too sparse. It does not describe the return shape or any behavioral constraints, leaving an agent without enough context to invoke it confidently.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate. It provides the parameter name ('context') and concrete path examples ('/obj', '/stage', '/out'), which add meaningful format guidance. However, it does not enumerate valid context types or explain what each context path represents.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a specific verb ('Get') and resource ('information about a Houdini network context'), which is clear enough. It does not differentiate this tool from siblings like get_stage_info, get_scene_info, or get_network_overview, so it falls short of a 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no guidance on when to use this tool versus alternatives. The examples of context paths ('/obj', '/stage', '/out') hint at scope but do not explain when this tool is preferred over related info-retrieval tools in the sibling list.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_cook_chainC
Trace the cook dependency chain for a node.
Args: node_path: Node path.
| Name | Required | Description | Default |
|---|---|---|---|
| node_path | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full behavioral burden, and it does almost none of it. It doesn't state that this is a read-only operation, whether tracing triggers or forces a cook, or what the chain output looks like (upstream vs downstream, ordering).
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
It is short and front-loaded, with the purpose in the first sentence. However, the 'Args:' block merely restates the schema field name, so a meaningful portion of the text is boilerplate that earns no place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no annotations, no output schema, and an undocumented parameter, the description is the only source of information and it supplies almost none. An agent would not know the return shape, the direction of the chain, or whether the call has side effects.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% and the description adds nothing beyond the bare label 'Node path.' No expected format (e.g. '/obj/geo1/attribwrangle1'), no indication of whether it is absolute, relative, or a network-qualified path, and no note on resolution failure behavior.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource: 'Trace the cook dependency chain for a node.' An agent can tell this is a read/inspection operation over a node's cook dependencies. It does not distinguish itself from nearby siblings such as get_cook_status, cook_frame_range, or get_node_info, so it falls short of a 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No when-to-use, when-not-to-use, or alternative guidance is given. The description does not explain how this differs from get_cook_status (status of a cook) or cook_frame_range, both of which an agent could plausibly confuse with tracing a dependency chain.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_cook_statusA
Whether a node has cooked, how often, and whether it is time dependent.
Note the shape of the limitation: every command runs on Houdini's main thread, so a long cook blocks the bridge and cannot be polled while it runs. This answers the after-the-fact question instead -- did it really recook, is it time dependent, did it end in error -- plus whether the hip has unsaved changes. For asynchronous work use a ROP's background execution and get_render_progress.
Args: node_path: Node to report on.
| Name | Required | Description | Default |
|---|---|---|---|
| node_path | No | /obj |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and does well: it discloses that every command runs on Houdini's main thread, that a long cook cannot be polled, and that this tool is therefore diagnostic rather than blocking. It is implicitly a read, but the description does not state non-mutating behavior or any auth/permission requirements, so a small gap remains.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The core answer is front-loaded in the first sentence, followed by the constraint that explains why this exists. The middle paragraph is slightly meandering ('Note the shape of the limitation'), but every sentence adds real information and the Args block is tidy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema and no annotations, the description must be self-sufficient, and it largely is: it explains the tool's diagnostic role, the main-thread constraint, what is reported, and the alternative path. It does not enumerate the exact return shape, but for a status query this is close to complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate for the single parameter. It does add meaning ('Node to report on') beyond the raw 'Node Path' title, but it omits the default value (/obj) and any path-format guidance that the schema also fails to provide.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The opening sentence states a specific resource (a node) and the exact facts returned: whether it cooked, how often, and whether it is time dependent. It further sharpens the scope with the after-the-fact questions it answers (did it recook, is it time dependent, did it error, unsaved changes), which clearly separates it from live-polling tools like get_render_progress.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It explicitly states when this tool applies (after-the-fact cook verification) and when it does not (polling a long cook, which blocks the bridge), and names the alternative for asynchronous work: a ROP's background execution plus get_render_progress. This is explicit 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.
get_cop_geometryC
Get geometry representation from a COP node.
Args: node_path: Path to the COP node. output_index: Output connector index.
| Name | Required | Description | Default |
|---|---|---|---|
| node_path | Yes | ||
| output_index | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations and no output schema, the description carries the full behavioral burden, yet says nothing about read-only safety, whether the geometry is returned inline vs by reference, size/pagination concerns, or the return format. Only the bare retrieval intent is conveyed.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The core purpose is front-loaded in a single efficient sentence. The trailing Args block is somewhat redundant with the schema but stays short, so there is little waste.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool that returns geometry data with no output schema to explain the return shape, no annotations for safety, and 0% parameter coverage, the description is far too thin to let an agent call it confidently or interpret results.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate, but its Args block merely restates the parameter titles ("Path to the COP node", "Output connector index") with no added syntax, format, or default-value meaning. Nearly zero value beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource ("Get geometry representation from a COP node"), which is clearer than a tautology. However, "geometry representation" is vague about what form the data takes, and it offers no differentiation from close siblings like get_cop_layer, get_cop_vdb, or get_cop_info, which also read COP node data.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No when-to-use guidance, no prerequisites, and no mention of alternatives such as get_cop_layer or get_cop_vdb. The agent must guess which COP-data reader is appropriate.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_cop_infoC
Get information about a COP node.
Args: node_path: Path to the COP node.
| Name | Required | Description | Default |
|---|---|---|---|
| node_path | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It implies a read-only operation through 'Get', but does not explicitly state safety, permissions, side effects, or return format. This is a minimal disclosure for a read tool with zero annotation coverage.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is very short and front-loaded, with an explicit Args block. Every word is used, though the extreme brevity contributes to under-specification rather than pure conciseness.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema and no annotations, the description should explain what information is returned and how it differs from related COP info tools. It does not, leaving the agent without enough context to invoke it confidently.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema has 0% description coverage for node_path. The description adds 'Path to the COP node', which is only a slight expansion of the parameter name and title ('Node Path'). It does not provide format, example, or path syntax details to compensate for the schema gap.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a verb ('Get') and a resource ('COP node'), but 'information' is vague and does not specify what kind of information (geometry, layer, VDB, parameters, etc.). It also fails to distinguish from close siblings like get_cop_geometry, get_cop_layer, get_cop_vdb, or general get_node_info. An agent can tell it is about COP nodes but not exactly what it returns.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no guidance on when to use this tool versus alternatives. Given many related siblings (get_cop_geometry, get_cop_layer, get_cop_vdb, get_node_info, list_cop_node_types), the absence of routing information leaves the agent to guess.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_cop_layerC
Get image layer data from a COP node.
Args: node_path: Path to the COP node. output_index: Output connector index.
| Name | Required | Description | Default |
|---|---|---|---|
| node_path | Yes | ||
| output_index | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are supplied, so the description carries the full behavioral burden, and it does very little: 'Get' implies a read, but there is no statement about the return format, whether a render/cook must exist first, permission or context requirements, or any limits. For a data-extraction tool with zero annotation coverage, this leaves major gaps.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is short and front-loaded, with the purpose in the first sentence and parameters after. The 'Args:' list is boilerplate rather than wasteful prose, so the text is efficient, though it is under-specified rather than truly concise.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read tool with no annotations and no output schema, the description should at least characterize what 'layer data' contains, but it never says (planes? pixels? channels?). An agent can invoke it, but cannot predict or interpret the result, leaving the definition incomplete for its complexity.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so nothing in the schema explains the parameters, and the description only restates their titles ('Path to the COP node', 'Output connector index'). 'Output connector index' adds a little meaning to output_index, but valid ranges, the meaning of the default 0, and node_path format are never given.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource: 'Get image layer data from a COP node.' This is far more informative than the bare name and distinguishes it loosely from neighbouring COP readers like get_cop_geometry and get_cop_vdb by naming 'image layer data'. It does not, however, explicitly differentiate itself from those siblings or explain what a 'layer' is in this context.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no when-to-use, when-not-to-use, or alternative routing guidance. With several other COP readers available (get_cop_info, get_cop_geometry, get_cop_vdb), an agent has to guess which one returns image layer data. Only the parameter list is provided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_cop_vdbC
Get VDB volumetric data from a COP node.
Args: node_path: Path to the COP node. output_index: Output connector index.
| Name | Required | Description | Default |
|---|---|---|---|
| node_path | Yes | ||
| output_index | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It does not disclose the return format of the VDB data, whether the node must be cooked first, whether output_index selects a specific volume, or any error/permission behavior. Only the retrieval direction is implied by the verb 'Get'.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Short and front-loaded with the core purpose in the first sentence. The Args block largely duplicates schema titles, but overall it is tight and free of padding.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
No output schema and no annotations means the description must explain what an agent receives and how to interpret it. It says nothing about the structure of the returned volumetric data or how output_index maps to connectors, leaving a significant gap for a data-retrieval tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate. Instead 'Path to the COP node' and 'Output connector index' essentially restate the schema titles 'Node Path' and 'Output Index', adding no syntax, format, or meaning beyond them.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource: retrieve VDB volumetric data from a COP node. It is meaningfully distinguishable from siblings like get_cop_geometry and get_cop_layer by naming the 'VDB volumetric' payload. It stops short of explicitly contrasting itself with those siblings, so not a 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no indication of when to call this versus get_cop_info, get_cop_geometry, or get_cop_layer, which all read COP content. No prerequisites (e.g., node must be cooked) or exclusion conditions are given.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_current_takeB
Get the current take and its overridden parameters.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. 'Get' implies a read-only fetch and the description usefully discloses that the result includes overridden parameters, but it says nothing about error behavior (e.g., no current take), permissions, or result shape.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence with no filler; the object of the fetch is named immediately and nothing is wasted.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a zero-parameter getter with no output schema or annotations, the description covers the basics but leaves gaps: it does not explain what a 'take' is in this system, what 'overridden parameters' concretely means, or how this relates to the other take tools.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool takes zero parameters, so per the rubric the baseline is 4. There is nothing parameter-related the description needs to clarify.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource (get the current take) and adds scope detail that it also returns overridden parameters. It does not explicitly differentiate itself from siblings like list_takes or set_current_take, so it stops short of a 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no stated when-to-use, no exclusions, and no mention of alternatives such as list_takes (all takes) or set_current_take (changing the current take). Usage is only implied by the word 'current'.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_dop_fieldB
Read a specific field value from a DOP record.
Args: node_path: DOP network node path. object_name: DOP object name. data_path: Dot-separated subdata path (e.g. "Geometry", "Forces/Gravity"). field_name: Field name to read.
| Name | Required | Description | Default |
|---|---|---|---|
| data_path | Yes | ||
| node_path | Yes | ||
| field_name | Yes | ||
| object_name | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. 'Read' implies a non-mutating operation, but it says nothing about error behavior when the field or data path is absent, whether a simulation must exist, or what the returned value looks like. Minimal disclosure for a tool with zero annotation coverage.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The one-line purpose is front-loaded, followed by a compact Args list. Every line carries information with no filler; slightly terse but efficient.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple read tool with no output schema and no annotations, the description covers parameters well but omits return shape, failure modes, and preconditions. Adequate but with clear gaps for a tool the agent must invoke correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, so the description must compensate — and it does, documenting all four parameters and even providing a syntax example for data_path ('Forces/Gravity'). This meaningfully exceeds what the bare schema titles offer.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource: 'Read a specific field value from a DOP record.' This distinguishes it from get_dop_object and list_dop_objects by narrowing scope to a single field. It does not explicitly name those siblings, but the resource boundary is clear.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No when-to-use guidance, no prerequisites (e.g. simulation must be cooked), and no alternatives named despite many DOP siblings (get_dop_object, get_dop_relationships, list_dop_objects). The agent must infer usage from the name alone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_dop_objectC
Get detailed data for a specific DOP object.
Args: node_path: DOP network node path. object_name: DOP object name.
| Name | Required | Description | Default |
|---|---|---|---|
| node_path | Yes | ||
| object_name | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full behavioral disclosure burden. It says only 'get detailed data' without stating whether the operation is read-only, what 'detailed data' includes, whether an active simulation is required, or how errors are surfaced. Very little behavioral context is supplied.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is short and front-loaded: the purpose appears first, followed by a brief Args block. No filler is present, though the Args block largely repeats schema parameter names and titles. Efficient but not maximally informative per word.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no annotations and no output schema, the description should explain return data, usage context, and how it differs from sibling tools. It instead says only 'detailed data' and lists two parameters. It omits when to choose this over list_dop_objects or get_dop_field, and what the returned detail actually contains.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, and the schema only provides titles like 'Node Path' and 'Object Name'. The description adds that node_path is a DOP network node path and object_name is a DOP object name, which is useful but still lacks format examples or lookup behavior. It only partially compensates for the coverage gap.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource: get detailed data for a DOP object. However, it does not distinguish this from sibling DOP tools such as list_dop_objects, get_dop_field, or get_dop_relationships. Clear purpose, but sibling differentiation is missing.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no when-to-use guidance, no alternatives, and no prerequisites. The description only restates the tool's name and lists arguments. For a tool surrounded by many DOP-related siblings, this leaves selection entirely to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_dop_relationshipsC
List all relationships between DOP objects.
Args: node_path: DOP network node path.
| Name | Required | Description | Default |
|---|---|---|---|
| node_path | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full behavioral burden. 'List' implies a read-only operation, but it says nothing about what a relationship is, whether the result is paginated, whether the count can be large, or what happens on an invalid node_path.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
One sentence of purpose plus a single Args entry; front-loaded and free of filler. The Args boilerplate is slightly formulaic but not wasteful.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
There is no output schema and no annotations, so the description is the only source of truth, and it omits any indication of what a relationship looks like in the response. Adequate for invocation, thin for interpretation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, so the description is the only source for the single parameter, and it does define node_path as a 'DOP network node path' — genuinely useful since the schema has no description. However, it adds nothing about path format, relative vs absolute, or required context.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource: 'List all relationships between DOP objects.' This is distinguishable from siblings like list_dop_objects and get_dop_field, though it never explicitly contrasts itself with them.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to use this versus list_dop_objects, get_dop_object, or get_dop_field, all of which operate on the same DOP network. The agent must infer the use case from the name alone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_env_variableC
Get a Houdini environment variable value.
Args: var_name: Name of the environment variable.
| Name | Required | Description | Default |
|---|---|---|---|
| var_name | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full behavioral burden. 'Get' implies a read operation, but the description does not state whether a Houdini connection is required, what happens if the variable is missing, whether the value is session-local or process-wide, or any permission requirements.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is very short and front-loaded with the core purpose. The Args section is minimal and not wasteful, though it is arguably redundant with the schema. It is appropriately sized for a simple getter.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple one-parameter getter with no output schema and no annotations, the description gives the minimum viable purpose and parameter meaning. However, it omits return-value behavior, missing-variable behavior, and connection prerequisites, leaving some practical gaps for an agent.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate for the single parameter. It does identify var_name as 'Name of the environment variable,' which adds basic meaning beyond the schema title 'Var Name,' but it provides no format, case-sensitivity, or example details.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource: 'Get a Houdini environment variable value.' This clearly identifies the operation. It does not explicitly differentiate from any sibling tool, but the environment-variable scope is specific enough to distinguish it from generic getters like get_parameter or get_expression.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no guidance on when to use this tool versus alternatives, no prerequisites, and no exclusions. The usage is only implied by the name and one-line description.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_expressionC
Get the expression on a parameter.
Args: node_path: Node path. parm_name: Parameter name.
| Name | Required | Description | Default |
|---|---|---|---|
| node_path | Yes | ||
| parm_name | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description must carry the full behavioral burden. It implies a safe read operation via 'get' but does not disclose error behavior (e.g., when no expression exists), return format, or any side effects, which are relevant for a getter tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is short and front-loaded with the main action. However, the Args section merely duplicates schema titles and does not earn its place, making the structure functionally redundant.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no annotations, no output schema, and 0% parameter description coverage, the description is too sparse. It omits when to use the tool, what it returns, and how it relates to common alternatives like set_expression or evaluate_expression.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, with only titles 'Node Path' and 'Parm Name'. The description's Args section repeats those titles verbatim ('node_path: Node path. parm_name: Parameter name.'), adding no meaning beyond what the schema already shows.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (get) and resource (expression on a parameter), so the agent knows it retrieves an expression. It does not distinguish itself from siblings like set_expression or evaluate_expression, but the core action is clear.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to use this tool versus alternatives such as get_parameter, get_parm_references, or evaluate_expression. The description only states what it does, leaving context entirely to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_failed_work_itemsC
List the work items that failed on a TOP node, with the tail of each log.
Args: ctx: MCP context. node_path: TOP node path. limit: Maximum items returned.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| node_path | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full disclosure burden. It implies a read-only listing and mentions truncated log tails, but says nothing about safety, permissions, pagination, or whether the log tail is bounded in size.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The purpose sentence is front-loaded and efficient, and the short Args block is easy to scan. The 'ctx: MCP context' line is boilerplate that adds nothing, keeping it from a 5.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, no annotations, and 0% parameter coverage, the description should be doing much more work. It hints at the log-tail payload but leaves the return shape, error behavior, and scoping (all items vs limited) underspecified for a diagnostic tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% for two parameters, so the description must compensate. It only supplies terse glosses (node_path = 'TOP node path', limit = 'Maximum items returned') that add little beyond the parameter names, and gives no format or path-syntax guidance.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource: list work items that failed on a TOP node, plus the added detail that each entry includes the tail of its log. This distinguishes it from generic TOP readers like get_work_item_states, though it never names those siblings explicitly.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no when-to-use guidance and no mention of alternatives. An agent cannot tell from the text whether this supersedes get_work_item_states, get_top_logs, or get_work_item_info, or when a failing-item scan is the right call versus inspecting a single item.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_file_referencesB
Every file path the scene references, with the parameter holding it and whether it exists.
Args: ctx: MCP context. include_missing_only: Only report paths that are missing on disk.
| Name | Required | Description | Default |
|---|---|---|---|
| include_missing_only | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the behavioral burden. It usefully discloses the shape of what is returned (path, holding parameter, existence flag), which matters because there is no output schema, but it is silent on scope/cost of the scene scan and confirms nothing about side effects. Read-only nature is only implied.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The core sentence is front-loaded and exact, and the Args block is short. The ctx line is boilerplate noise but costs little.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no annotations and no output schema, the description is the sole source of behavioral and return information, and it supplies the result shape adequately for a simple read tool. It could say more about scan scope, but nothing essential to calling it is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate, and it does: include_missing_only is fully defined as 'Only report paths that are missing on disk.' The ctx entry is MCP boilerplate rather than a real user parameter, so the single meaningful parameter is well covered.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific resource and result set: 'Every file path the scene references, with the parameter holding it and whether it exists.' An agent knows exactly what it gets back. It does not, however, distinguish itself from the similarly named sibling get_parm_references, leaving a small ambiguity for selection.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no when-to-use guidance, no prerequisites, and no named alternative. The only conditional text describes what include_missing_only does, which is parameter semantics rather than usage routing.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_frameA
Get the current frame and FPS.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden, and it does supply the key behavioral fact that the result includes both the frame number and FPS. However, it says nothing about whether 'current' means the playhead, the scene's frame range, or the viewport frame, and gives no side-effect or freshness guarantees.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single seven-word sentence with the object of the query ('current frame and FPS') front-loaded immediately after the verb. No filler, no restatement of the name.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
There is no output schema, so the description must convey the return payload, and it does name both returned values. It is adequate for a trivial no-argument getter, though it could say a word about frame-rate vs. scene FPS or units to be fully complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool takes zero parameters, so there are no argument semantics to document; per the baseline for a 0-parameter tool, a 4 is appropriate. The description correctly implies this is a pure query with nothing to configure.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource ('Get the current frame and FPS') and is distinguishable from siblings like set_frame and set_frame_range by the read vs. write framing. It does not explicitly name an alternative tool, so it stops short of a 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no guidance on when to call this versus get_keyframes / set_frame / get_scene_info, nor any stated prerequisites or exclusions. The intended use (querying playback state) must be inferred entirely from the name and the word 'current'.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_geometry_infoC
Get geometry summary for a SOP node.
Args: node_path: Node path. output_index: Which output to read, for nodes with several (FLIP compress, Vellum solver, whitewater source): 0 is the first.
| Name | Required | Description | Default |
|---|---|---|---|
| node_path | Yes | ||
| output_index | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full behavioral burden. It does not say what the 'summary' contains, whether it triggers a cook, what permissions are needed, or what the response looks like for an empty/invalid node. The multi-output explanation is the one genuinely useful behavioral detail, but it is thin for an annotation-free tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the one-sentence purpose, then a compact Args block. The 'Args:' boilerplate restates parameter names already present in the schema, but the overall text is short and wastes little space.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no annotations and no output schema, the description is the only source for both safety profile and return-value shape, yet it omits what the geometry summary actually reports and whether the call has side effects (e.g. forcing a cook). Only the output_index behavior is covered, so an agent is left guessing about the payload.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate. output_index is explained well, including which node types have several outputs and that 0 is the first. node_path, however, gets only the tautology 'Node path,' adding nothing beyond the schema, leaving half the parameters semantically bare.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource: 'Get geometry summary for a SOP node.' An agent can tell it is a read of summarized geometry data, distinct from lower-level siblings like get_points or get_prims. However it never names those siblings or delimits what 'summary' includes, so differentiation is implicit.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No when-to-use, when-not-to-use, or alternative tool is mentioned. The only implied guidance is that the target must be a SOP node, which is a prerequisite rather than usage guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_group_membersA
Get element indices in a geometry group, with pagination.
Check has_more and increment start to read subsequent pages.
Args: node_path: Node path. group_name: Group name. group_type: "point", "prim", or "edge". start: First element index to return. count: Max elements per page (default 5 000).
| Name | Required | Description | Default |
|---|---|---|---|
| count | No | ||
| start | No | ||
| node_path | Yes | ||
| group_name | Yes | ||
| group_type | No | point |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full behavioral burden. It usefully discloses pagination behavior and the existence of a has_more field in the response, but it does not describe the return structure, error conditions (missing node/group), or confirmation that this is a read-only operation beyond the implicit 'get'.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The purpose is front-loaded, followed by the pagination note and then the argument list. It is appropriately sized, though the Args block largely restates parameter names already visible in the schema, adding some low-value lines.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
There is no output schema or annotations, so the description must fully describe behavior. It covers pagination and the key has_more field, but the overall shape of the returned element indices and failure modes are left unexplained, leaving a moderate gap for a tool with five parameters.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate, and it does list all five parameters. Critically, it supplies the group_type enum values ('point', 'prim', 'edge') and the default for count, information absent from the schema. The per-parameter descriptions are terse and somewhat redundant ('Node path.'), keeping it short of a 5.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description gives a specific verb and resource: retrieving element indices for members of a geometry group. This clearly differentiates it from the sibling get_groups (which lists groups rather than members), but it never names that sibling explicitly, so sibling differentiation is implicit rather than stated.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It does provide actionable pagination guidance ('Check has_more and increment start to read subsequent pages'), which tells the agent how to iterate. However, it gives no when-to-use context versus alternatives and no prerequisites (e.g. the group must already exist).
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_groupsC
List all geometry groups on a SOP node.
Args: node_path: Node path.
| Name | Required | Description | Default |
|---|---|---|---|
| node_path | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. "List" implies a read-only operation and "on a SOP node" scopes the target, but nothing is said about required connection state, error behavior for invalid paths, or what the returned group data looks like.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is short and front-loads the action and target in a single sentence. The trailing "Args:" block is largely filler since it repeats the parameter name, but the overall size is appropriate.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple single-parameter read tool with no output schema, the description is minimally viable but leaves return format, connection requirements, and failure modes unspecified. It is adequate to attempt a call but not to predict its result.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% and there is one parameter. The description's "node_path: Node path." merely restates the parameter name with no format, example, or constraint, so it adds no meaning beyond the schema's own title.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description gives a clear verb+resource ("List all geometry groups") and scopes it to a SOP node, which separates it from siblings like get_group_members or get_geometry_info in intent. It does not explicitly name an alternative, but the purpose is unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no when-to-use guidance, no mention of prerequisites (e.g. an active Houdini connection or a valid SOP node path), and no routing to alternatives such as get_group_members for membership details. The agent must infer all usage context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_hda_infoC
Get detailed information about an HDA definition.
Args: ctx: MCP context. node_path: Node path. hda_file: HDA file path. type_name: HDA type name.
| Name | Required | Description | Default |
|---|---|---|---|
| hda_file | No | ||
| node_path | No | ||
| type_name | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden of behavioral disclosure. It implies a read operation via 'Get' but does not state whether it is safe, whether it requires a connected Houdini session, what 'detailed information' includes, or whether any side effects occur.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is short and front-loads the purpose. The Args block is minimal, though including the non-schema 'ctx' argument slightly reduces clarity.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a getter with three optional, undocumented parameters and no output schema, the description is insufficient. It does not explain which identifier to use, what the return contains, or how to interpret the result, leaving an agent unable to call it correctly in common cases.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description should compensate. Instead, it merely restates parameter names ('node_path: Node path', 'hda_file: HDA file path', 'type_name: HDA type name') without explaining formats, which one to supply, or whether they are mutually exclusive. It also mentions 'ctx', which is not in the schema, adding potential confusion.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource: 'Get detailed information about an HDA definition.' This is clear enough for an agent to know it retrieves HDA metadata, but it does not distinguish this tool from siblings like get_hda_sections, get_hda_section_content, or list_hda_versions.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is given on when to use this tool versus related HDA tools, nor any prerequisites or context. The description only lists arguments, which is not usage guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_hda_section_contentC
Read the content of a specific section in an HDA definition.
Args: ctx: MCP context. node_path: Node path. section_name: Section name.
| Name | Required | Description | Default |
|---|---|---|---|
| node_path | Yes | ||
| section_name | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full behavioral burden. 'Read' implies a safe, non-mutating operation, but the description says nothing about what happens if the node_path or section_name is invalid, what format the content is returned in, or whether large sections are truncated.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The single purpose sentence is appropriately front-loaded and short, but it is padded with auto-generated 'Args: ctx: MCP context' boilerplate that contributes nothing for an agent.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with no annotations, no output schema, and 0% parameter coverage, the description is too thin. An agent cannot tell how to obtain valid section names, what the return value looks like, or how errors are surfaced.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, so the description must compensate for both parameters. Instead it only restates the field names ('node_path: Node path', 'section_name: Section name'), adding no format, example, or constraint information (e.g., valid section names or path syntax).
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource: 'Read the content of a specific section in an HDA definition.' This distinguishes it from the mutating sibling set_hda_section_content and complements get_hda_sections, though it does not name those siblings explicitly.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no guidance on when to use this tool versus get_hda_sections (to discover section names) or get_hda_info. No prerequisites, exclusions, or workflow context are given.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_hda_sectionsC
List all sections in an HDA definition.
Args: ctx: MCP context. node_path: Node path.
| Name | Required | Description | Default |
|---|---|---|---|
| node_path | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. 'List' implies a read operation, but the description says nothing about permissions, side effects, scope, or whether the HDA must be loaded first. For a no-annotation tool this is a substantial gap, though the read-only implication is at least implied by the verb.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The purpose sentence is front-loaded and terse, but the Args block is boilerplate clutter — 'ctx: MCP context' is developer documentation leaking into agent-facing text, and 'node_path: Node path' adds no information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, no annotations, and near-zero parameter documentation, the definition omits what the returned sections look like and what is needed to call it successfully. Adequate only for guessing the tool exists, not for invoking it confidently.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% and the description only offers 'node_path: Node path', which merely restates the parameter name. It does not clarify the expected path format (e.g., network path syntax) or whether it identifies the HDA instance vs. its definition.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb ('List') and resource ('sections in an HDA definition'), which is clearer than a tautology. However, it does not differentiate from close siblings like get_hda_section_content or get_hda_info, so an agent must infer the distinction (metadata list vs. content payload).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to use this instead of get_hda_info, get_hda_section_content, or list_installed_hdas. The condition that selects this tool is left entirely to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_help_pageA
Fetch one page of Houdini's shipped documentation by path.
Read the real reference instead of writing from memory — especially the VEX function pages (vex/functions/...) before any justified wrangle, and expression pages (expressions/...) before channel expressions.
Args: path: As returned by search_help — e.g. "nodes/sop/scatter", "vex/functions/noise", "expressions/ch".
| Name | Required | Description | Default |
|---|---|---|---|
| path | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the behavioral burden; it implies read-only, single-page scoping ('one page', 'shipped documentation'), which is meaningful. However it does not state the return format, whether an unknown path errors or returns empty, or any other operational behavior beyond scope.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loads the purpose, then usage motivation, then the parameter, with no filler. The example paths are slightly repetitive but each illustrates a distinct namespace, so they earn their place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a one-parameter read tool with no annotations or output schema, the definition covers what the tool returns (doc page content) and how to obtain a valid path. Only the error/empty-path behavior is left unaddressed, which is minor.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0% and the schema only titles the field 'Path', so the description must compensate. It does so well by tying path to search_help output and giving concrete format examples ('nodes/sop/scatter', 'vex/functions/noise', 'expressions/ch').
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (Fetch) and resource (one page of Houdini's shipped documentation by path), with scope clearly bounded to a single page. It contrasts cleanly with the sibling search_help, which only returns paths rather than content.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives concrete when-to-use guidance (before VEX wrangles, before channel expressions) and points to search_help as the source of valid paths. It stops short of explicitly stating when NOT to call it, but the context is clear enough for correct selection.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_houdini_connection_statusA
Check the MCP-to-Houdini bridge without raising on disconnect.
Returns structured connection diagnostics, including the configured bridge
URL and Houdini health payload when reachable, and sessions: every
Houdini serving the plugin (port, pid, version), the one in use marked
current. connect_houdini switches; start_houdini starts one. Use this
before live viewport workflows when Houdini may have restarted.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations exist, so the description carries the full burden and does so well: it discloses the non-raising behavior ('without raising on disconnect') and enumerates the return payload (bridge URL, health payload, per-session port/pid/version with the current one marked). It does not state auth/permission requirements, but for a pure status probe that is minor.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loads the key behavioral fact ('without raising on disconnect') and keeps the rest to two tight sentences. The enumeration of return fields and the sibling routing are dense but each clause earns its place; slightly verbose rather than wasteful.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no annotations and no output schema, the description fully compensates by describing both the failure semantics and the exact shape of the returned diagnostics. Nothing an agent needs in order to call this correctly is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool takes zero parameters, so there is nothing to disambiguate and the schema is empty. Baseline for 0 params is 4; the description adds nothing further here because none is needed.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource (check the MCP-to-Houdini bridge / connection status) and explicitly separates itself from the neighbouring lifecycle siblings: 'connect_houdini switches; start_houdini starts one.' An agent can tell instantly that this is the read-only diagnostic, not a mutator.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives clear context ('Use this before live viewport workflows when Houdini may have restarted') and names the alternatives connect_houdini and start_houdini with their roles. It does not spell out an explicit when-not-to-use condition, so it stops short of a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_keyframesC
Get all keyframes on a parameter.
Args: node_path: Node path. parm_name: Parameter name.
| Name | Required | Description | Default |
|---|---|---|---|
| node_path | Yes | ||
| parm_name | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full behavioral burden. It does not state the return shape (frames, values, interpolation), what happens when the parameter has no keyframes, or whether errors occur on invalid node_path values. Only the bare read intent is conveyed.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The first sentence is well front-loaded and the whole entry is short. However, the trailing Args block duplicates the schema's property names with no added information, so a portion of the text does not earn its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a two-required-parameter read tool with no output schema and no annotations, the description should at least sketch the returned keyframe data or edge cases. Neither is present, leaving the agent under-informed about results despite the simple signature.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate. The Args block only restates the property titles verbatim ('Node Path', 'Parm Name') without adding format, path syntax, or example values, so it adds essentially no meaning beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a clear verb+resource: 'Get all keyframes on a parameter.' An agent can tell it is a read operation against a parameter's animation data, distinct from set_keyframe/delete_keyframe siblings, though it never names those alternatives explicitly.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no when-to-use guidance, no mention of alternatives (e.g., get_parameter, which also exposes parameter state), and no prerequisites such as requiring an existing node path or animated parameter. Usage is only inferable from the verb 'Get'.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_last_modified_primsB
Get prims modified by the last LOP node cook.
Args: node_path: LOP node path.
| Name | Required | Description | Default |
|---|---|---|---|
| node_path | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full behavioral burden. 'Get' implies read-only behavior and names the data source, but return format, permissions, side effects, and cook prerequisites are omitted.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, front-loaded purpose, and zero waste. The compact args section is appropriate for a one-parameter tool.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple one-parameter read tool, the description is minimally adequate. However, with no output schema and no annotations, it could clarify return values and safety/behavioral context.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate. It adds 'LOP node path' context beyond the schema's 'Node Path' title, but does not specify expected path format or examples.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Specific verb 'Get' and resource 'prims', scoped to 'last LOP node cook'. The purpose is clear, though it does not explicitly distinguish itself from generic prim-listing siblings like get_prims.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No when-to-use guidance, no alternatives, and no exclusions. The LOP-cook context implies usage, but the description never states when an agent should choose this over other prim or USD tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_material_infoA
Get detailed information about a material node.
assignments lists the nodes under /obj and /stage whose material-path parameters name this material; only those parameters are read, so the call costs the same on a 4,000-node scene as on an empty one (assignment_scan reports how many nodes were visited).
Args: ctx: MCP context. node_path: Absolute path to the material node.
| Name | Required | Description | Default |
|---|---|---|---|
| node_path | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the burden and does real work: it discloses that only material-path parameters are scanned under /obj and /stage, that cost is independent of scene size (flat on a 4,000-node scene), and that assignment_scan reports node count visited. That is substantive behavioral context. It stops short of stating whether the call is read-only or what error conditions exist.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The purpose is front-loaded in one sentence, followed by a compact but high-value paragraph on scan semantics, then an Args block. Slight waste: ctx is documented in the description but not present in the input schema, and 'detailed information' is left vague.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
There is no output schema, so the description should characterize the return value. It hints at two return keys (assignments, assignment_scan) but never enumerates the material detail fields an agent would actually receive, which is the central payload of a 'get ... info' tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0% and there is one parameter, so the description must compensate. It does: 'node_path: Absolute path to the material node' supplies the required path form, which the schema's bare 'Node Path' string does not. It also documents an out-of-schema ctx argument, though it does not explain the expected path prefix syntax.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Starts with a specific verb+resource: 'Get detailed information about a material node.' That is clear and unambiguous. However, it does not differentiate itself from siblings such as get_node_info, list_materials, get_usd_materials, or get_usd_bound_material, which an agent must choose between.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no explicit statement of when to use this tool versus the many material- and node-info siblings. The 'assignments' paragraph implies the tool answers 'which nodes reference this material', but the caller has to infer that this is the reason to pick it over list_materials or get_node_info.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_network_overviewA
Get a compact overview of a network.
Keep depth low (1–2). Larger values on complex scenes return thousands
of nodes and can overflow the context window.
Args: path: Network path. depth: Recursion depth (default 2, keep ≤ 3).
| Name | Required | Description | Default |
|---|---|---|---|
| path | No | /obj | |
| depth | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description must carry behavioral disclosure. It usefully warns that larger depth values 'return thousands of nodes and can overflow the context window,' but it does not explicitly state that the operation is read-only or describe side effects or return shape.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is short and front-loaded: purpose first, then the key risk warning, then parameter details. Every sentence contributes useful information without filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple two-parameter read tool with no output schema and no annotations, the description covers purpose, parameter semantics, and the main risk. It could mention what the overview contains, but the core invocation information is present.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate. It documents both parameters ('path: Network path', 'depth: Recursion depth') and adds important constraints ('default 2, keep ≤ 3', 'Keep depth low (1–2)') that are not in the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource: 'Get a compact overview of a network.' It is clear what the tool returns at a high level, but it does not explicitly differentiate itself from nearby siblings such as get_node_info, list_children, or get_scene_summary.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The purpose implies usage, and the warning 'Keep depth low (1–2)' gives practical guidance for safe invocation. However, it does not say when to choose this tool over alternatives like get_node_info or list_children, so selection guidance remains implicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_node_cardA
Get the authoritative documentation card for a node type, straight
from the running Houdini: connectors in order (inputs / outputs
with index, name and label — the index of texcoord on mtlximage
lives here), real parameter names/defaults/menus, and the node's own
shipped help text. Connectors are read off a probe node the first time
a type is asked for in a session (no undo entry, creation scripts not
run); connectors_probed: false with connectors_note means they could
not be read, not that the type has none. A menu whose items a script
computes (loadtype on filemerge::2.0) is read off the same probe and
marked menu_source: "generator", with the script in menu_generator.
Use this BEFORE setting parameters on a node type you have not used in this session — never guess parameter names. Unversioned names resolve to the newest version.
Args: node_type: Type name (e.g. "scatter", "rbdbulletsolver"). context: Category — "Sop", "Lop", "Vop" (MaterialX and other shader nodes inside a material network), "Dop", "Cop", "Chop", "Top", "Object", "Driver"; also "Cop2", "Shop", "VopNet". parm_filter: Substring filter for the parameter list. include_help: The node's help text (about 4 KB). Default: included for a whole card, left out when parm_filter asks for specific parameters. Pass True or False to decide.
| Name | Required | Description | Default |
|---|---|---|---|
| context | No | Sop | |
| node_type | Yes | ||
| parm_filter | No | ||
| include_help | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and does so richly: connectors are read off a probe node on first request, no undo entry is created, creation scripts are not run, and connectors_probed: false with connectors_note means unreadable rather than absent. It also discloses generator-menu handling with menu_source and menu_generator keys — information an agent could not infer elsewhere.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Purpose is front-loaded and every clause is substantive, but the RST-style prose about connectors_probed, menu_source, and menu_generator is dense and could be tightened. It is efficient for the amount of behavior it must convey, just not maximally compact.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema and no annotations, the description fully specifies the shape of the returned card (connectors, parameters, help text) and the edge-case fields. Everything an agent needs to call the tool correctly and interpret its output is present.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate, and it does: node_type with example values, context with the full category list, parm_filter semantics, and include_help's nuanced default (included for a whole card, omitted when parm_filter is used). Only node_type and parm_filter are described tersely, leaving a little room for better format details.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a specific verb (get) and resource (the documentation card for a node type) and enumerates exactly what the card contains: ordered connectors, real parameter names/defaults/menus, and shipped help text. An agent can distinguish this authoritative per-type reference from instance-oriented siblings like get_node_info or get_parameter_schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives an explicit trigger: 'Use this BEFORE setting parameters on a node type you have not used in this session — never guess parameter names,' plus the rule that unversioned names resolve to the newest version. It stops short of naming alternative tools (e.g. get_parameter_schema, get_parm_template_tree) or when NOT to use it, so it is clear context without explicit alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_node_errors_detailedB
Get detailed error analysis for nodes.
Args: node_path: Node to analyze, or scan from root_path if omitted. root_path: Root path to scan.
| Name | Required | Description | Default |
|---|---|---|---|
| node_path | No | ||
| root_path | No | / |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full disclosure burden. It doesn't state that this is a read-only/diagnostic operation, whether it triggers a cook, what kind of errors are surfaced, or what the response contains — 'detailed error analysis' is asserted but never explained.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Very short and front-loaded, with the purpose stated in the first line and parameters grouped under a clear Args block. No wasted sentences, though the total content is thin rather than tight-and-complete.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a diagnostic tool with no annotations and no output schema, the description should explain what an error report contains and how it differs from find_error_nodes. Neither is addressed, so an agent cannot predict the result or reliably choose this tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, but the description compensates for both parameters: it explains that node_path selects the node to analyze and that omitting it triggers a scan from root_path, and that root_path defines the scan root. This is meaningful semantics beyond the bare schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource ('Get detailed error analysis for nodes'), more informative than the name alone. However it never distinguishes itself from the sibling find_error_nodes, leaving the agent unsure which error-reporting tool to pick.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The only contextual guidance is the parameter-level fallback (scan from root_path if node_path is omitted), which is really schema behavior. There is no when-to-use guidance and no mention of the obvious alternative find_error_nodes.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_node_infoA
Get type, connections, flags, errors, cook time, and non-default parameters for a node.
Returns only parameters that differ from their defaults (non_default_parameters) plus a total_param_count. Use get_parameter_schema to inspect the full parameter list.
Args: ctx: MCP context. node_path: Node path.
| Name | Required | Description | Default |
|---|---|---|---|
| node_path | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the burden and does disclose a meaningful behavioral trait: results are filtered to only parameters differing from defaults, with a total_param_count for context. It reads as a safe read, but says nothing about whether the call triggers a cook, error/caching behavior, or how node_path resolution fails.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loads the return set in the first sentence and follows with the filtering caveat and routing hint, with no wasted prose. The 'ctx: MCP context.' arg line is boilerplate noise but minor.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a one-parameter read tool with no annotations and no output schema, enumerating returned fields and the non-default filtering behavior covers most of what an agent needs. The main remaining gap is the node_path format, which matters for correct invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0% and the single node_path parameter is documented only as 'Node path.', which essentially restates the parameter name. No path format, example (e.g. /obj/geo1), or relative/absolute semantics are given, so the description does not compensate for the schema gap.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (get) and resource (node) plus an enumerated return set: type, connections, flags, errors, cook time, and non-default parameters. It also differentiates itself from the sibling get_parameter_schema, so an agent can pick correctly 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.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly routes the agent: 'Use get_parameter_schema to inspect the full parameter list,' which clarifies the boundary between this summarized view and the full parameter dump. It gives clear context for use but no explicit 'when not to use' or prerequisite conditions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_parameterC
Get the value and metadata of a parameter.
Args: node_path: Node path. parm_name: Parameter name.
| Name | Required | Description | Default |
|---|---|---|---|
| node_path | Yes | ||
| parm_name | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. Beyond the hint that both a value and metadata are returned, it says nothing about required permissions, error behavior, whether the node must be cooked, or path format expectations for a mutation-adjacent read tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The one-line purpose is well front-loaded and the whole thing is short. But the Args section is pure boilerplate that duplicates the schema titles, so part of the text fails to earn its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 2-parameter read tool with no annotations, no output schema, and 0% schema documentation, the definition does too little. Return-value shape is vaguely hinted at ('value and metadata') but path format, error cases, and sibling routing are all missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, and the description's Args block merely restates the schema titles ('node_path: Node path', 'parm_name: Parameter name') without adding any meaning. It fails to compensate for the coverage gap, e.g. whether node_path is absolute and how parm_name handles nested/multiparm syntax.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource: 'Get the value and metadata of a parameter.' An agent can tell this reads a parameter. However, it does not distinguish itself from close siblings like get_parameters, get_parameter_schema, or get_parm_template_tree, so it falls short of the 5 bar.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No when-to-use guidance at all. With siblings such as get_parameters (plural), get_parameter_schema, and get_parm_references, the description never says when this single-parameter fetch is the right choice versus those alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_parametersA
Read many parameter values at once, matched by name or label substring.
The batch counterpart of set_parameters. Several unrelated groups of settings ("flame", "wind", "buoy") come back in one call instead of one call each, and unlike get_node_card these are the live values on this node rather than the defaults for its type.
Pass inside instead of node_path to read the same patterns across a
whole network in one call: "every file parm of this material library,
unexpanded" comes back as rows of {node, parm, value, raw_value}, up to
2000 rows. raw_value is the unexpanded text ($JOB/...), shown when it
differs from the value, exactly as for a single node.
Args:
node_path: Node to read.
patterns: Substrings matched against parameter name and label. Omit for
everything, up to the cap. Required with inside.
include_defaults: Also report whether each value is still the default,
and, where it differs, the default (default, default_expression).
inside: Network to read instead of a single node.
recursive: With inside, include every descendant, not only children.
Nodes inside locked HDAs (a solver's own internals) are skipped
and counted in skipped_inside_locked_assets.
node_type: With inside, only nodes of this type (e.g. "mtlximage").
include_locked_assets: With recursive, read inside locked HDAs too.
| Name | Required | Description | Default |
|---|---|---|---|
| inside | No | ||
| patterns | No | ||
| node_path | No | ||
| node_type | No | ||
| recursive | No | ||
| include_defaults | No | ||
| include_locked_assets | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and does so well: it discloses the 2000-row cap, that locked-HDA internals are skipped and counted in `skipped_inside_locked_assets`, how `raw_value` relates to `value`, and what `include_locked_assets` unlocks. It does not address the safety/permission profile or cost of large recursive scans, which keeps it just short of 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the core purpose, then structured into scope, network mode, and Args. The illustrative asides ('flame', 'wind', 'buoy') and the material-library example add clarity but make it longer than strictly necessary, so it falls just below maximal conciseness.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 7-parameter read tool with no output schema, the description supplies the missing return contract: `rows` of {node, parm, value, raw_value}, the 2000-row cap, and the default-reporting fields. An agent has everything needed to invoke it correctly and interpret the response.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Although schema description coverage is 0%, the description documents all seven parameters with semantics beyond their names, including the interaction between `inside`/`node_path`, the requirement of `patterns` with `inside`, and the return shape each flag yields. This fully compensates for the empty schema descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource ('Read many parameter values at once') plus the matching mechanism ('by name or label substring'), and positions itself against siblings: the batch counterpart of set_parameters, and distinct from get_node_card because it returns live values rather than type defaults. An agent can differentiate it from get_parameter, set_parameters, and get_parameter_schema 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.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly names alternatives and the conditions that select them: use set_parameters for the write side, get_node_card for defaults, and use `inside` instead of `node_path` to read a whole network. It also states the constraint that `patterns` is required with `inside`, leaving nothing to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_parameter_schemaA
Get the template schema for parameter(s) on a node.
Most nodes have dozens of parameters; many have 100+. Always use
parm_name or filter unless you genuinely need the full list.
Args: node_path: Node path. parm_name: Exact parameter name for a single-parameter lookup. filter: Substring to match against parameter name or label (case-insensitive). Use instead of dumping all params.
| Name | Required | Description | Default |
|---|---|---|---|
| filter | No | ||
| node_path | Yes | ||
| parm_name | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries full disclosure burden. It usefully warns that nodes commonly have dozens to 100+ parameters, implying large payloads and motivating the filters. Beyond that output-size caution, it says nothing about permissions, read-only nature, or return shape.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded purpose, then a high-value warning/usage rule, then the Args block. Sized well for a 3-param tool. Uses some vertical space but each line adds information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 3-param introspection tool with no annotations and no output schema, the description covers purpose, filtering strategy, and parameter meaning. The one omission is what the returned 'schema' actually contains (types, defaults, ranges), which an agent might want to know.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, so the description must compensate, and it largely does via the Args block: parm_name is 'exact parameter name for a single-parameter lookup' and filter is a 'case-insensitive substring match against name or label.' Only node_path ('Node path') is thin.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource: 'Get the template schema for parameter(s) on a node.' This clearly separates it from value-oriented siblings like get_parameter/get_parameters, though it never names those siblings explicitly to reinforce the distinction.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives concrete operational guidance ('Always use parm_name or filter unless you genuinely need the full list'), which is a strong usage steer. However it doesn't state when to prefer this tool over sibling lookups like get_parameter or get_parm_template_tree.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_parm_referencesA
Who references a parameter, and what it references — in one call.
incoming: for each parameter of the node (or just parm_name), the
parameters elsewhere whose expressions read it — what breaks if this
control is renamed. outgoing: what this node's expressions and
backtick strings read, resolved to parameter paths (pure ch() links and
richer expressions alike; unresolved names a written target that no
longer exists). node_dependents / node_references give the
node-level view for this node only; include_node_level in the reply
says whether they were included.
Args: node_path: Node to inspect. parm_name: One parameter instead of all of them. direction: "both", "incoming" or "outgoing". limit: Cap on reported entries. include_node_level: Include node_dependents / node_references. Default: on for a whole-node query, off when parm_name names one parameter; on an asset with hundreds of children those lists run to about 100 KB and answer a question about the node, not the parameter.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| direction | No | both | |
| node_path | Yes | ||
| parm_name | No | ||
| include_node_level | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations the description carries the load, and it does: it discloses the reply fields (incoming, outgoing, unresolved, node_dependents/node_references), explains that 'unresolved' names a written target that no longer exists, and warns that node-level lists run ~100 KB on large assets. It never states the operation is non-destructive/read-only, which is the main unstated trait.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with a one-line summary, then cleanly partitioned into reply-field prose and an Args block. The 100 KB justification for include_node_level's default is slightly long but is load-bearing; overall tight and well ordered.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no annotations and no output schema, the description is expected to cover behavior and returns, and it names the reply keys and their meaning. It omits the concrete shape/types of entries and any pagination semantics for limit, leaving minor gaps for a 5-param query tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, so the description must compensate, and it does: it enumerates the direction values ('both'/'incoming'/'outgoing') that the schema omits, explains parm_name as scoping to one parameter, defines limit as a cap on entries, and spells out the default-on/default-off logic for include_node_level. This adds substantial meaning beyond an empty schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource: 'Who references a parameter, and what it references', then breaks it into incoming (who reads this parm) and outgoing (what this node reads). The scope is unambiguous, but it never names or differentiates from adjacent siblings like get_expression, link_parameters, or get_parameter.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides clear operative context — incoming answers 'what breaks if this control is renamed' and outgoing lists what expressions/backtick strings read. That effectively tells an agent when each direction applies, though it stops short of naming alternative tools or explicit exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_parm_template_treeA
The whole parameter interface as a tree, the way Type Properties shows
it: folders (with folder_type — tabs, collapsible, multiparm), every
parameter in order with defaults, default expressions, ranges, menu
items, Hide/Disable When conditionals, callbacks, naming scheme; a
multiparm's default_instances. Each entry uses get_parameter_schema's
keys (default_value, is_hidden, menu_items...).
get_hda_info shows only the top folders and get_parameter_schema flattens the structure away; read this before editing an interface. Give node_path for a node (its instance interface, spares included) or type_name + context for a type.
Args: node_path: Node whose interface to read. type_name: Node type instead (with context). context: Category of type_name — "Sop", "Object", "Lop", ... folder: Narrow to one folder by label, or a list of nested labels. max_entries: Cap on entries (depth-first); the reply says when it cut. include_tags: Also return each template's tags (needed to preserve them when editing an interface; about a quarter of the size).
| Name | Required | Description | Default |
|---|---|---|---|
| folder | No | ||
| context | No | Sop | |
| node_path | No | ||
| type_name | No | ||
| max_entries | No | ||
| include_tags | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations exist, so the description carries the full behavioral burden, and it does substantial work: it enumerates what the tree contains (folders with folder_type values, defaults, expressions, ranges, menu items, conditionals, callbacks, default_instances), discloses truncation behavior for max_entries ('the reply says when it cut'), and quantifies the cost of include_tags ('about a quarter of the size'). It never explicitly states that the call is side-effect-free, but the read-only nature is unambiguous from the content.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the return payload, then the sibling differentiation, then an Args block — a sensible order. The first paragraph is a long enumeration but each item is load-bearing; only minor density cost keeps this from a 5.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema and no annotations, the description is the sole source of truth, and it covers return shape (keys match get_parameter_schema's, e.g. default_value, is_hidden, menu_items), nesting semantics, truncation, and all six inputs. Nothing an agent needs to call it correctly is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, so the description must compensate fully, and it does: every one of the six args is explained, including the folder union type ('one folder by label, or a list of nested labels'), context with concrete enum-like examples ('Sop', 'Object', 'Lop'), max_entries as a depth-first cap with truncation notice, and the preservation rationale for include_tags.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource — returning the whole parameter interface as a tree — and immediately names the two siblings it differs from (get_hda_info, get_parameter_schema), explaining exactly how each falls short. An agent can distinguish this from every other introspection 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.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicit routing: 'read this before editing an interface', with the alternatives and their limitations spelled out ('get_hda_info shows only the top folders', 'get_parameter_schema flattens the structure away'). Also states the node_path vs type_name+context selection rule, so the caller knows which branch to take.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_pdg_graphC
Get the PDG dependency graph structure for a TOP network.
Args: ctx: MCP context. node_path: TOPnet or TOP node path.
| Name | Required | Description | Default |
|---|---|---|---|
| node_path | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden of behavioral disclosure. It implies a read-only operation ('Get') but does not describe the return format, performance characteristics, side effects, or required permissions. For a tool that likely returns a complex graph structure, this is a significant gap.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is short and front-loads the purpose. The Args section is slightly noisy because it includes a 'ctx' parameter not present in the input schema, but overall it is efficient.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description should explain what the dependency graph structure looks like or what an agent can expect. It does not, leaving the return value completely opaque. For a tool whose purpose is to retrieve a graph, this is incomplete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate. It adds some meaning by specifying that node_path accepts a 'TOPnet or TOP node path', which is helpful beyond the bare schema (which only says 'string'). However, it provides no format examples or constraints, leaving the parameter partially specified.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource: 'Get the PDG dependency graph structure for a TOP network.' This is clear enough for an agent to understand it retrieves a dependency graph, but it does not differentiate itself from sibling tools like get_top_network_info or get_top_scheduler_info.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no guidance on when to use this tool versus alternatives, nor any prerequisites or conditions. The phrase 'for a TOP network' implies context but does not constitute usage advice.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_pointsA
Read point positions and attributes with pagination.
Args: node_path: Node path. attributes: Attribute names to read. start: Start index. count: Max points per page (200 by default, about 14 KB; page on with start while has_more is true). group: Point group filter.
| Name | Required | Description | Default |
|---|---|---|---|
| count | No | ||
| group | No | ||
| start | No | ||
| node_path | Yes | ||
| attributes | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations exist, so the description carries the full burden. It does disclose useful behavior: the default page size (200), the approximate payload size (~14 KB), and the has_more pagination flag. It stops short of stating permissions/read-only guarantees or what the returned structure looks like, which matters when nothing else documents it.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded purpose sentence followed by a tight, terse args list; no filler. The per-arg lines are minimal but complete, and the pagination note is attached to the relevant parameter rather than repeated elsewhere.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 5-param read tool with no output schema and no annotations, it covers parameters and pagination well but leaves gaps an agent may need: the format/expectations for node_path, how attribute filtering interacts with returned positions, and what 'group' filters on. Adequate but not fully self-contained.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must document all five params and it does: node_path, attributes, start, count (with default and size rationale), and group. The count entry adds real meaning beyond the bare schema default by explaining the paging workflow.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The opening sentence gives a specific verb+resource ('Read point positions and attributes') plus a behavioral trait ('with pagination'). It is clearly distinguishable from siblings like get_prims or get_attrib_values, though it never names those alternatives to sharpen the boundary.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is one buried usage cue — 'page on with start while has_more is true' tells the agent how to iterate — but no explicit when-to-use-this-instead-of-sibling guidance or preconditions. A reader must infer that this is the tool for point-level data versus prim or attribute-value tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_prim_intrinsicsA
Get intrinsic values for primitives: one, many, or all of them.
Read many prims in one call rather than one call per prim. intrinsics
alone sweeps every prim for those intrinsics and answers with a prims
table plus stats (min/max/avg and the prim index each extreme belongs
to, per component for a vector such as bounds); prim_indices or
prim_range narrow it to the prims you care about. Up to 2000 rows per
call; beyond that the reply says truncated and requested_count, and
stats cover only the rows returned: page with prim_range.
Args: node_path: Node path. prim_index: One primitive index, or None for a summary. prim_indices: Several primitive indices, read in one call. prim_range: [start, end] (end inclusive) instead of a list. intrinsics: Only these intrinsics, e.g. ["bounds", "packedfulltransform"]. With none of the index arguments, they are read for every prim.
| Name | Required | Description | Default |
|---|---|---|---|
| node_path | Yes | ||
| intrinsics | No | ||
| prim_index | No | ||
| prim_range | No | ||
| prim_indices | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and does so well: it discloses the 2000-row cap, the `truncated`/`requested_count` reply fields, that `stats` cover only returned rows, and the pagination workaround via `prim_range`. It also describes the return structure (a `prims` table plus per-component stats with min/max/avg and the extreme prim index).
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the one-line purpose, then behavior/pagination, then a compact Args block. Dense but every sentence carries information the schema does not, so nothing is wasted despite the length.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
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 describes the return shape, the truncation contract, and the pagination path — everything an agent needs to call it correctly and interpret the response. Nothing material is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate, and it does: each of the five parameters is explained, including the non-obvious semantics that `prim_index: None` yields a summary, that `prim_range` is end-inclusive, and that `intrinsics` with no index argument reads every prim.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Opens with a specific verb+resource ('Get intrinsic values for primitives') and immediately scopes the cardinality ('one, many, or all of them'). This distinguishes it from geometry-reading siblings like get_prims, get_points, and get_geometry_info, which cover different data.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives a clear when-to-use directive ('Read many prims in one call rather than one call per prim') and explains which argument selects which mode (intrinsics alone sweeps every prim; prim_indices/prim_range narrow). It does not name a sibling alternative explicitly, so it falls short of a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_primsC
Read primitive data and attributes with pagination.
Args: node_path: Node path. attributes: Attribute names to read. start: Start index. count: Max prims per page (200 by default; page on with start while has_more is true). group: Prim group filter.
| Name | Required | Description | Default |
|---|---|---|---|
| count | No | ||
| group | No | ||
| start | No | ||
| node_path | Yes | ||
| attributes | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full behavioral burden. 'Read' implies a safe, non-mutating operation and the pagination mechanics (200 default, has_more loop) are usefully disclosed, but there is no mention of return shape, attribute types, permissions, or limits beyond page size.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The leading sentence is front-loaded and the Args block is easy to scan. The per-parameter lines verge on restating field names, but overall it is appropriately sized with no wasted prose.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema and no annotations, the description should do more work. It implies a has_more cursor in the response and documents paging, but leaves return values, attribute behavior, and error/precondition cases unspecified for a 5-parameter read tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate. It lists all five parameters and adds real meaning for count/start/pagination, but node_path ('Node path'), start ('Start index'), and group ('Prim group filter') are thin restatements of the field titles rather than syntax or format guidance.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Read primitive data and attributes') plus a pagination scope. It does not name or distinguish itself from the many closely related siblings (get_points, get_prim_intrinsics, sample_geometry, get_usd_prim), so an agent gets a clear action but no explicit differentiation.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The 'page on with start while has_more is true' note is a usage detail for pagination, but there is no guidance on when to choose this tool over get_points, get_prim_intrinsics, or the USD prim readers. No prerequisites or exclusions are stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_render_progressA
Progress of a render or write started with start_render.
Accepts every node start_render accepts (a LOP usdrender_rop or Karma
LOP, a SOP ROP, a File Cache), not only /out ROPs. Reports the node's
errors with license_error singled out, the output files on disk, and
for a background render the process state and the tail of its log.
done is true when there is nothing left to wait for.
Args: node_path: The node given to start_render.
| Name | Required | Description | Default |
|---|---|---|---|
| node_path | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden and delivers: it lists what is reported (node errors with license_error singled out, output files on disk, and for background renders the process state and log tail) and defines the terminal condition ('done is true when there is nothing left to wait for'). This is the kind of behavioral detail an agent needs to poll and interpret the result.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The summary sentence is front-loaded and the args section is separated cleanly. The middle paragraph is dense but each claim (accepted node types, error handling, log tail, done semantics) earns its place; slightly verbose but not padded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a one-parameter polling tool with no annotations and no output schema, the description compensates by narrating the return payload in prose: errors, output files, background process state, log tail, and the done flag. An agent can call and interpret this without further documentation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0% and the schema only carries a title of 'Node Path', so the description must compensate. It does so by tying the argument to prior state: node_path is 'the node given to start_render', telling the agent the value must match the launch call. It still omits any format/path syntax detail, so it is not a full 5.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource: reports progress of a render or write begun with start_render. It also scopes what counts as a valid subject (LOP usdrender_rop/Karma LOP, SOP ROP, File Cache, not just /out ROPs), which cleanly separates it from render_viewport, render_node_network, and get_cook_status.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The phrase 'started with start_render' gives a clear triggering condition: call this after launching a render via start_render. It does not explicitly name exclusions or alternative progress/status tools (e.g. get_cook_status), so it stops short of full when/when-not routing.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_render_settingsC
Get render settings from a ROP node.
Args: node_path: ROP node path.
| Name | Required | Description | Default |
|---|---|---|---|
| node_path | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full behavioral burden. 'Get' implies a read, but it does not state whether this fails on non-ROP nodes, what render settings are returned, or whether it triggers a cook. For a tool with zero annotation coverage, that leaves the safety and side-effect profile unstated.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded single sentence with no padding; the Args block is boilerplate but harmless. Appropriate size for a one-parameter getter.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple single-param getter with no output schema, the definition is minimally viable: it identifies the resource and the parameter's expected domain. It omits any error behavior and what settings are actually retrieved, which is a real but modest gap at this complexity level.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0% and there is one parameter. The description does clarify node_path as a 'ROP node path', which adds type/context meaning beyond the bare schema title 'Node Path' — modest but real value. It does not say what happens if a non-ROP node path is passed.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Specific verb 'Get' plus resource 'render settings' and explicit scope 'from a ROP node' — an agent can tell this is a read of render settings on a ROP. It does not name the counterpart set_render_settings, but the verb/resource pairing is distinct enough to separate 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.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No when-to-use guidance, no prerequisites, and no mention of alternatives such as set_render_settings or list_render_nodes. The agent must infer that this is the read counterpart of set_render_settings purely from the naming.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_scene_infoC
Get information about the current Houdini scene.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full behavioral burden. It implies a read but never states read-only behavior, and says nothing about what scope of data ('information') is returned or its cost. For a no-annotation tool, this is thin.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single short sentence with no wasted words and the resource front-loaded. It is efficient, though its brevity reflects under-specification rather than deliberate economy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, no annotations, and no parameters, the description is the only source of information and it does not say what the scene information comprises. An agent cannot predict the payload shape, which matters more here than for richer siblings.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool takes zero parameters, so there is nothing for the description to disambiguate. Per the rubric, a zero-parameter tool gets the baseline 4.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a verb ('Get') and resource ('current Houdini scene'), so the basic intent is clear. However, 'information' is vague about what is actually returned, and it does not distinguish itself from siblings like get_scene_summary or get_context_info, which appear to overlap in purpose.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives no indication of when to use this versus alternatives. With near-identical siblings such as get_scene_summary and get_context_info in the toolset, the absence of routing guidance leaves the agent guessing.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_scene_summaryC
Get a high-level summary of the scene.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden of behavioral disclosure. It says nothing about what scope the summary covers, whether it is read-only (implied by get), what triggers the computation, or what level of detail is returned.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single short sentence with no waste and the intent front-loaded. Appropriate size, though brevity here is partly a symptom of missing content rather than disciplined pruning.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a scene-summary tool with no output schema, the description should at least hint at what the summary includes, since it cannot describe a return shape. As written it gives the agent nothing to distinguish it from the many other scene-inspection tools.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Zero parameters, so the baseline is 4. There is nothing for the description to compensate for; no parameter semantics exist to be unclear.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (get) and resource (scene summary), which is clear enough on its own. But among many siblings that also retrieve scene-wide state (get_scene_info, get_context_info, get_network_overview), there is no differentiation of what a summary contains or how it differs from those.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No when-to-use guidance, no alternatives named, no exclusion criteria. The agent cannot tell from the description whether to prefer this over get_scene_info or get_context_info, which appear to serve adjacent purposes.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_selectionB
Get the current node selection.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full behavioral burden. 'Get' implies a non-destructive read, which is the main safety-relevant fact, but the description says nothing about return shape (node paths? order?), behavior when nothing is selected, or scope (which network/viewport the selection comes from).
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single short sentence with no filler and the resource front-loaded after the verb. It is appropriately sized for a trivial getter, though it is arguably under-specified rather than genuinely information-dense.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a zero-parameter getter with no output schema, the description is barely sufficient. It tells the agent what is fetched but not what comes back or how selection scope is determined, leaving a real gap given there is no output schema or annotation to fall back on.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool takes zero parameters, so per the rubric the baseline is 4. There is nothing for the description to disambiguate beyond the fact that the selection is the implicit target.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb ('Get') and resource ('current node selection'), so an agent knows exactly what the tool returns. It does not differentiate from neighboring selection-related tools such as set_selection or frame_selection, so it stops short of a 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no statement of when to call this versus siblings like set_selection, get_viewport_info, or frame_selection, and no prerequisites or context. Usage is only inferable from the tool name itself.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_shelf_tool_scriptA
Read the script a shelf tool runs, plus its help and imports.
This is how you learn SideFX's own recipe instead of reinventing it. Most scripts are two or three lines calling a worker in a toolutils module, and the reported imports name exactly what to read next.
Args: tool_name: Internal tool name, from list_shelf_tools.
| Name | Required | Description | Default |
|---|---|---|---|
| tool_name | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the burden and does well: it discloses that scripts are typically two or three lines wrapping a toolutils worker, and that reported imports indicate follow-up reading. It stops short of stating permissions or exact return structure, but gives meaningful behavioral expectations beyond the schema.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The core purpose is front-loaded in the first sentence, followed by rationale and expectation-setting. It is slightly more prose than strictly necessary but every sentence adds actionable context, so little is wasted.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a single-parameter read tool with no output schema, the description explains what is returned (script, help, imports) and how to use it. It is essentially complete for an agent to call it correctly, with only minor gaps around exact return format.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, so the description must compensate for the single required parameter. It does: 'tool_name: Internal tool name, from list_shelf_tools' explains what the value is and where to obtain it, adding real meaning over the bare string type.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb and resource: 'Read the script a shelf tool runs, plus its help and imports.' This clearly distinguishes it from list_shelf_tools (which enumerates) and run_shelf_tool (which executes), so an agent can select it 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.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives clear usage context: 'This is how you learn SideFX's own recipe instead of reinventing it,' and notes that imports point to what to read next. It doesn't explicitly name sibling alternatives or state exclusions, but the when-to-use motivation is clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_sim_memory_usageC
Get detailed memory breakdown for the simulation.
Args: node_path: DOP network node path.
| Name | Required | Description | Default |
|---|---|---|---|
| node_path | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden of behavioral disclosure. It does not state whether this is a read-only operation, what the output format might be (since there is no output schema), or any prerequisites or side effects. It only mentions that it returns a 'detailed memory breakdown', which is minimal.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is very concise: a single clear sentence followed by a brief argument specification. It is front-loaded with the main purpose and contains no wasted words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Considering the tool has one simple parameter, no output schema, and no annotations, the description is minimally adequate. However, it lacks details on what the memory breakdown includes (e.g., types of memory, format), when to use it, and any behavioral notes. For a tool in a complex environment like Houdini, this leaves gaps.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema has one parameter (node_path) with 0% description coverage. The description includes 'Args: node_path: DOP network node path.' which adds a small amount of meaning by specifying it is a DOP network node path, but does not describe the expected format (e.g., a string path like /obj/dopnet1) or constraints. Given the low schema coverage, more parameter detail would be expected.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource: 'Get detailed memory breakdown for the simulation.' This clearly identifies the tool as a memory profiling/retrieval tool, distinct from sibling tools like get_simulation_info or get_cache_status, which query different aspects of the simulation. The only minor ambiguity is what 'breakdown' entails, but the core purpose is clear.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no explicit guidance on when to use this tool versus alternatives. While the context of memory usage is somewhat clear, the description never says when an agent should call it, nor does it offer any conditions or alternatives (e.g., use when debugging memory issues, or in contrast to get_cache_status).
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_simulation_infoC
Get DOP network simulation state.
Args: node_path: DOP network node path.
| Name | Required | Description | Default |
|---|---|---|---|
| node_path | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full behavioral burden, and it discloses almost nothing. It does not say whether the call mutates anything, whether the simulation must already be running, whether it is safe to call repeatedly, or what the returned 'state' contains.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The content is front-loaded in a single sentence with the argument note following, and nothing is redundant. The 'Args:' block is boilerplate but costs little, and the whole definition is appropriately terse for a one-parameter getter.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, no annotations, and 0% schema description coverage, the description needs to do more work than it does. An agent still cannot tell what the returned simulation state includes, whether prior setup is required, or how this differs from the other DOP inspection tools.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate. It does add one meaningful qualifier to node_path — that the path must refer to a DOP network node — which is not present in the schema. Beyond that single hint, it adds no format, syntax, or validation detail for the parameter.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource ('Get DOP network simulation state'), so an agent knows it is a read operation scoped to a DOP network. It does not, however, differentiate itself from siblings that also read DOP data (get_dop_object, get_dop_field, get_dop_relationships, get_sim_memory_usage), nor does it clarify what 'state' comprises.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no guidance on when to call this versus the many neighbouring DOP tools (list_dop_objects, get_dop_object, get_dop_field, step_simulation, reset_simulation). No prerequisites, no exclusions, no conditions for use are stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_stage_infoA
Get USD stage info from a LOP node, or from a LOP network.
Given a network such as "/stage", the answer is about what that network
displays: display_node (and render_node) name it, resolved_from is
"display_node", viewport_delegate names the Hydra delegate the Scene
Viewer draws with, and frame is the current frame.
Args: node_path: LOP node or LOP network path (default "/stage").
| Name | Required | Description | Default |
|---|---|---|---|
| node_path | No | /stage |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full behavioral burden. It does valuable work by enumerating the returned fields (display_node, render_node, resolved_from, viewport_delegate, frame), which compensates for the absent output schema. However, it says nothing about error conditions, permissions, or cost, so it is adequate but incomplete for a zero-annotation tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded statement of purpose, followed by a focused explanation of what the returned fields mean, then a compact Args block. The backtick/field enumeration is dense but every sentence carries information; only minor formatting overhead.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a single-parameter read tool with no annotations and no output schema, the description supplies the key missing piece: what the response contains and how node vs network paths are interpreted. Only failure/permission behavior is unaddressed, a minor gap at this complexity.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0% (the schema only has a bare 'Node Path' title), so the description must compensate. It does: 'node_path: LOP node or LOP network path (default "/stage")' conveys both accepted argument types and the default, adding real meaning over the schema title.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource: 'Get USD stage info from a LOP node, or from a LOP network.' The node-vs-network distinction clarifies the resource type. It does not, however, explicitly differentiate itself from adjacent siblings like get_usd_layers, get_usd_prim or get_scene_info, so sibling selection still requires inference.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explains the semantics of the argument ('Given a network such as "/stage", the answer is about what that network displays'), which implies when the tool is appropriate. But there is no explicit when-to-use/when-not or named alternative, so guidance is implied rather than stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_top_logsA
Cook logs for a TOP node, or the scheduler log of one work item.
Args: ctx: MCP context. node_path: TOP node path. work_item_index: Work item index; omit for the node's own errors and warnings. tail: Maximum characters of log text, taken from the end.
| Name | Required | Description | Default |
|---|---|---|---|
| tail | No | ||
| node_path | Yes | ||
| work_item_index | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It discloses the useful tail-truncation behavior (text taken from the end) and the two log scopes, which is genuine context. It says nothing about permissions, error cases, or how the two log sources differ beyond the parameter hint, leaving some gaps for a no-annotation tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The purpose sentence is front-loaded and then parameter semantics are itemized, which is efficient for a log tool. The ctx arg line is boilerplate that adds little, a minor bit of clutter but not a real problem.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a small read-only log-retrieval tool with no output schema and no annotations, the description covers purpose, both modes, and the meaning of every parameter. It stops short of describing the sibling tool landscape, but an agent has enough to invoke it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, so the description must compensate and it largely does: it explains node_path (TOP node path), work_item_index (omit for the node's own errors and warnings), and tail (max characters from the end). Only ctx is boilerplate, and no parameter is left undocumented.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource: retrieve cook logs for a TOP node, or the scheduler log of a single work item. The dual mode is made explicit. It doesn't name neighboring log/status tools, but the purpose itself is unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description hints at when to use each mode ('omit for the node's own errors and warnings'), which guides work_item_index usage. However, it never references alternatives like get_work_item_info, get_work_item_states, or get_failed_work_items, so routing between sibling log tools 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.
get_top_network_infoB
Get an overview of a TOP network.
Args: ctx: MCP context. node_path: TOPnet or TOP node path.
| Name | Required | Description | Default |
|---|---|---|---|
| node_path | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full behavioral-disclosure burden. 'Get' implies a read operation, but the description does not state side effects, permissions, authentication needs, or whether the call is safe and repeatable.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is short and front-loaded, with the core purpose in the first sentence. The Args section is minimal; the ctx entry is slightly boilerplate but not harmful.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema and no annotations, the description should clarify what the 'overview' returns. It does not explain whether the result includes scheduler state, work items, logs, or network structure, leaving a meaningful gap for an information-retrieval tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the schema only declares node_path as a string. The description compensates by clarifying that node_path accepts a 'TOPnet or TOP node path', giving useful domain information beyond the raw schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource: 'Get an overview of a TOP network.' It distinguishes the tool as TOP-network-specific, though it does not explicitly contrast it with adjacent siblings such as get_network_overview or get_top_scheduler_info.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no guidance on when to use this tool, when not to use it, or which sibling tools to prefer for related TOP/network inspection tasks. The agent is left to infer usage entirely from the name.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_top_scheduler_infoC
Get information about TOP scheduler nodes in a network.
Args: ctx: MCP context. node_path: TOP scheduler or TOPnet path.
| Name | Required | Description | Default |
|---|---|---|---|
| node_path | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full behavioral burden. It implies a read ('Get information') but never confirms it is read-only, states no permissions or side effects, and gives no indication of what the returned scheduler info contains. Minimal disclosure for an unannotated tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The core sentence is front-loaded and efficient, but the trailing 'Args: ctx: MCP context' line is boilerplate noise that adds nothing for an agent selecting or calling the tool. Otherwise the text is appropriately short.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a single-parameter read tool this is roughly adequate, but with no annotations, no output schema, and 0% schema coverage, the description is thin. It never explains what information is returned or how to interpret it.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, so the description must carry parameter meaning. It does add value by clarifying that node_path expects a 'TOP scheduler or TOPnet path', which narrows the expected input. However, it gives no format examples or path syntax, leaving the agent to infer the rest.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb ('Get information') and resource ('TOP scheduler nodes in a network'), which is clear enough to distinguish it from the adjacent get_top_network_info / get_top_logs tools. It does not explicitly contrast itself against those siblings, but the resource is specific.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no guidance on when to call this tool versus alternatives such as get_top_network_info, get_top_logs, or get_work_item_states. The only scoping signal is the phrase 'in a network', which does not tell the agent which conditions select this tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_usd_attributeA
Read a USD attribute value from a prim.
A long array (over 16 elements) answers with value as a summary (size,
element_type, head, min/max) plus slice: the elements from offset,
at most limit of them (default the first 64), with has_more. Walk a
big array by raising offset; pass full=True to get every element in
value at once.
A time-sampled attribute (a PointInstancer's positions, protoIndices)
has nothing in its default slot: read with no time it answers null. With
no time given, the current frame is read instead, and the reply carries
time, time_source, time_samples and time_range, so value: null
never stands unexplained next to is_authored: true.
Args:
node_path: LOP node path.
prim_path: USD prim path.
attr_name: Attribute name.
time: Time code (frame number). Omitted on a time-sampled attribute,
the current frame is used (the first sample outside the range).
full: Return the whole array as value.
offset: First element of the window for a long array.
limit: Window size for a long array.
| Name | Required | Description | Default |
|---|---|---|---|
| full | No | ||
| time | No | ||
| limit | No | ||
| offset | No | ||
| attr_name | Yes | ||
| node_path | Yes | ||
| prim_path | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and does so well: it explains the long-array response shape (value summary plus slice with has_more), the time-sampled behavior returning null with metadata (time, time_source, time_samples), so value:null is never unexplained. It omits error behavior for missing prims/attrs, which keeps it from 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the core purpose, then the response-shape and time semantics, then a standard Args listing. The dense return-format paragraph earns its space given no output schema, though it could be trimmed slightly.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 7-parameter, no-annotation, no-output-schema tool, the description covers the critical return semantics and array/time handling an agent needs. Only absent piece is what happens on error (invalid prim or attr).
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate, and its Args block documents all seven parameters including the semantics of time (first sample outside range = current frame), full, offset, and limit, plus the 64-element default window. node_path/prim_path/attr_name definitions are terse, leaving minor gaps.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource: 'Read a USD attribute value from a prim.' An agent can distinguish it from siblings like get_usd_attributes (plural listing), get_prim_intrinsics, and set_usd_attribute (write) 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.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives clear operational guidance: use offset to walk a big array, pass full=True to get everything, and omit time on a time-sampled attribute to read the current frame. It stops short of naming alternative tools or stating when-not-to-use (e.g., versus get_usd_attributes).
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_usd_attributesA
Read the same attributes across many prims as one table.
One row per prim and attribute: {prim, prim_type, name, type, value,
time_samples?} or, for a relationship, {prim, prim_type, name,
relationship: true, targets}. The call for "sourceName of every
RenderVar", "lpetag of every light", "the camera of the render
settings" -- instead of one get_usd_prim per prim. matched counts every
row found; truncated says the limit cut some off.
Args:
node_path: LOP node path.
prims: Prim paths or globs: * stays within one path element,
** crosses them (["/Render/Vars/*"], ["/lights/**"]).
attr_patterns: Glob patterns on attribute and relationship names
(["sourceName"], ["*lpetag"]); default all.
prim_type: Keep only prims of this type (glob, e.g. "*Light").
relationships: Include relationships as rows.
time: Time code (frame) to read at; default the current frame.
full: Return array values in full instead of summarised.
traverse_instance_proxies: Let globs match prims inside instances.
limit: Row cap.
| Name | Required | Description | Default |
|---|---|---|---|
| full | No | ||
| time | No | ||
| limit | No | ||
| prims | Yes | ||
| node_path | Yes | ||
| prim_type | No | ||
| attr_patterns | No | ||
| relationships | No | ||
| traverse_instance_proxies | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full disclosure burden, and it does well: it spells out the row shape for both attributes and relationships, the `matched`/`truncated` return semantics, and the default-all behavior of attr_patterns and the current-frame default of time. It stops short of error behavior, performance cost, or permission requirements, which keeps it from 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
The most important information, the table/row shape, is front-loaded before the args list, and the examples earn their space by making glob usage concrete. It is slightly longer than necessary in the example sentence, but nothing is padding.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
There is no output schema, so the description must describe returns, and it does by defining the row shape and the `matched`/`truncated` flags. Combined with full per-arg coverage, an agent has enough to invoke it correctly; only failure-mode context is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 0% schema description coverage, the description is the only source of parameter meaning, and it documents all nine: node_path, prims with explicit `*` vs `**` glob semantics, attr_patterns, prim_type, relationships, time, full, traverse_instance_proxies, and limit. This is exactly the compensation a low-coverage schema demands.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Read the same attributes across many prims as one table') and immediately contrasts with the sibling it replaces ('instead of one get_usd_prim per prim'), so the agent can distinguish the batch read from the per-prim read 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.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly names the alternative (get_usd_prim) and the condition that selects this tool (many prims, same attribute), reinforced by three concrete use-case examples ('sourceName of every RenderVar', 'lpetag of every light'). The when-to-use guidance is unambiguous.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_usd_bound_materialA
The material each prim renders with, resolved the way the renderer
resolves it (ComputeBoundMaterials), and where the binding comes from:
direct on the prim, inherited from which ancestor, or which
collection. A binding to a material prim that does not exist is
reported in missing_material, not as unbound.
Batched: pass every prim of interest in one call.
Args: node_path: LOP node whose stage to read. prim_paths: Prim paths to resolve. purpose: "full" (default; what Karma renders, falling back to an all-purpose binding), "preview", or "all" (all-purpose bindings only).
| Name | Required | Description | Default |
|---|---|---|---|
| purpose | No | full | |
| node_path | Yes | ||
| prim_paths | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and does disclose meaningful behavior: renderer-equivalent resolution semantics, the three binding-source outcomes (direct/inherited/collection), and the missing_material edge case. It does not state the response shape or that the operation is a safe read, but for a getter it covers the non-obvious behavior well.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the core semantics before the Args block, and every sentence adds information. Slightly dense prose ('resolved the way the renderer resolves it') costs a little, but nothing is wasted.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
No output schema and no annotations, so the description must explain returns, and it does name the important result fields (binding source, missing_material). It stops short of describing the material value format itself, leaving a small gap for a resolution tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, so the description must compensate, and it does: node_path and prim_paths are glossed, and purpose is explained in detail with its default and the meaning of 'full', 'preview' and 'all'. The purpose values are not registered as an enum in the schema, so this text is the only place the accepted values are defined.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource (resolve the material each prim renders with) and pins the exact semantics via ComputeBoundMaterials, distinguishing it from siblings like get_usd_materials, list_materials and get_material_info. An agent can tell it apart 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.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The 'Batched: pass every prim of interest in one call' line gives practical invocation context, and 'full' is flagged as the default. However, there is no explicit when-to-use-vs-alternative guidance (e.g. versus get_usd_materials or list_materials), so the routing is only implied.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_usd_compositionB
Get composition arcs for a USD prim.
Args: node_path: LOP node path. prim_path: USD prim path.
| Name | Required | Description | Default |
|---|---|---|---|
| node_path | Yes | ||
| prim_path | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are present, so the description carries the behavioral burden. The verb 'Get' implies a safe read-only retrieval, but the description does not explicitly confirm non-destructiveness, permissions, or side effects.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is very short and front-loaded, with the core action first and argument notes immediately after. Every line contributes useful information without waste.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple two-parameter getter with no annotations or output schema, the description covers the action and both parameters adequately. It omits when to use the tool and what the returned composition arcs represent, leaving some contextual gap.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate. It identifies node_path as a 'LOP node path' and prim_path as a 'USD prim path,' adding basic semantic context for both required parameters, though no path format examples are given.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource: 'Get composition arcs for a USD prim.' This clearly distinguishes the tool from generic prim/attribute getters, but it does not explicitly contrast with sibling tools like get_usd_layers or inspect_usd_layer.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides no when-to-use guidance, prerequisites, or alternatives. It only states what the tool does, leaving the agent to infer when composition arcs are needed versus other USD inspection tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_usd_layersC
List all layers in a USD stage.
Args: node_path: LOP node path.
| Name | Required | Description | Default |
|---|---|---|---|
| node_path | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden. 'List' implies a read-only operation, but nothing is said about required permissions, whether the LOP node must be cooked/selected, how many layers are returned, or what happens on an invalid node_path. Significant behavioral gaps for a zero-annotation tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Very short and front-loaded: the purpose sentence comes first, followed by the single argument. The 'Args:' block is slightly boilerplate but earns its place given the 0% schema coverage.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a one-parameter read tool with no output schema, the description covers the basic contract but omits the return shape (layer names? identifiers? order?) and any dependency on stage/cook state. Adequate but with clear gaps given zero annotation support.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% and the only parameter is documented merely as 'Node Path' in the schema. The description does add real meaning by stating it is a 'LOP node path', clarifying the expected domain (a LOP node, not an arbitrary path). That is a genuine addition, but no format example or validation behavior is given.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('List all layers in a USD stage'), which is clear enough to distinguish it from most siblings like get_usd_composition or inspect_usd_layer. However, it never explicitly differentiates itself from the closely related inspect_usd_layer, so an agent must infer the boundary.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to use this versus inspect_usd_layer, get_usd_composition, or the other USD introspection tools. The description only documents the argument, leaving the selection decision entirely to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_usd_materialsA
List all USD materials on a stage.
Each material reports surface_shaders keyed by render context: "surface" is the universal output, a UsdPreviewSurface for viewports and Storm, and "mtlx" is the MaterialX shader Karma renders. surface_shader is the mtlx one when present, so it agrees with get_material_info on the same material.
bound_to lists the prims a binding is authored on. rendered_on (up
to 50 paths) and rendered_on_count are the geometry that resolves to
the material for rendering, including geometry bound through a parent
or a collection; get_usd_bound_material says why for a given prim.
Args: node_path: LOP node path.
| Name | Required | Description | Default |
|---|---|---|---|
| node_path | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description must carry behavioral weight. It discloses output keys, render-context mapping, binding semantics, and truncation behavior for rendered_on. It implies read-only operation through 'List' but does not explicitly state side effects or permissions.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded with the core purpose and then explains output details efficiently. Every sentence adds useful information about render contexts, binding, or resolution.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
There is no output schema, so the description must explain return values; it does so thoroughly by covering surface_shaders, bound_to, rendered_on, and rendered_on_count. It is complete enough for an agent to understand the tool's output and limitations.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, with only a 'Node Path' title in the schema. The description adds useful domain meaning by identifying node_path as a 'LOP node path,' though it does not specify path format or examples.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource: 'List all USD materials on a stage.' It also distinguishes the tool from siblings by explaining its relationship to get_material_info and get_usd_bound_material.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives clear context for when to use the tool—listing all USD materials on a stage—and mentions related sibling tools for follow-up detail. It does not explicitly state when not to use it versus list_materials or get_material_info.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_usd_primA
Get detailed info about a USD prim.
Array attributes longer than 16 elements (points, faceVertexIndices,
primvars:st, ...) come back as a summary: size, element_type, the first 8
as head, and min/max for numeric data. That is what a mesh question
needs; the full arrays of a building ran to 6.6 million characters. Pass
full=True for every element, or read one array in windows with
get_usd_attribute(offset=, limit=).
Values are read at time, or at the current frame when it is not given
-- what a render of that frame sees; the reply names both as time and
time_source. An attribute with time samples carries time_samples:
its value differs at other frames. Relationships (a RenderSettings'
camera) are listed with their targets. For the same attributes
across many prims, get_usd_attributes reads them in one call.
Args:
node_path: LOP node path.
prim_path: USD prim path.
full: Return array attributes in full instead of summarised.
traverse_instance_proxies: List the children that live on an
instanceable prim's prototype. Without it such a prim answers
children: [] and is flagged is_instanceable with a
hidden_descendants count, so the empty list is not read as
"nothing inside".
time: Time code (frame) to read at; default the current frame.
attr_patterns: Glob patterns on attribute and relationship names
(e.g. ["resolution", "karma:global:*"]); default all.
| Name | Required | Description | Default |
|---|---|---|---|
| full | No | ||
| time | No | ||
| node_path | Yes | ||
| prim_path | Yes | ||
| attr_patterns | No | ||
| traverse_instance_proxies | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full behavioral burden and does so richly: it discloses array summarization (size, element_type, head of 8, min/max) and why, the time default and how the reply names time_source, that time-sampled attributes carry time_samples, that relationships come back with targets, and that instanceable prims return children: [] with hidden_descendants so emptiness isn't misread.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with purpose, then behavior, alternatives, and an Args block; most sentences earn their place. The '6.6 million characters' anecdote is slightly indulgent but functions as rationale for summarization, so it mostly justifies itself.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 6-parameter, no-annotation, no-output-schema tool, the description covers behavior, return shape conventions, defaults, and alternatives thoroughly. Nothing an agent needs to call it correctly appears to be missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, so the description must compensate, and it documents all six args with real semantic content for the non-obvious ones (full, time, attr_patterns globs, traverse_instance_proxies). The node_path and prim_path entries are thin restatements, but the remaining args are explained both in the body and the Args block.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
It states a specific verb and resource ('Get detailed info about a USD prim') and implicitly distinguishes itself from siblings by routing to get_usd_attribute for single arrays and get_usd_attributes for many prims. An agent can tell what this does and when a sibling is preferable 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.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Names two concrete alternatives with the conditions that select them: get_usd_attribute(offset=, limit=) for reading one array in windows, and get_usd_attributes for the same attributes across many prims. That is explicit routing guidance rather than implied usage.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_usd_prim_statsA
Get prim counts by USD type under a root path.
Instanced geometry counts once per prototype, not per instance:
instanceable_prims says how many prims were counted without their
contents, and traverse_instance_proxies counts what is under them.
Args: node_path: LOP node path. prim_path: Root prim path to gather stats from. traverse_instance_proxies: Count prims under instanceable prototypes.
| Name | Required | Description | Default |
|---|---|---|---|
| node_path | Yes | ||
| prim_path | No | / | |
| traverse_instance_proxies | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the behavior burden and does well: it explains that instanced geometry is counted once per prototype rather than per instance, and that instanceable_prims and traverse_instance_proxies control what gets counted. It only omits explicit read-only framing, which is strongly implied by 'get'.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Purpose is front-loaded in one sentence, the instancing caveat follows, and the Args block is compact and scannable. Minor redundancy between the body text and the Args entry for traverse_instance_proxies, but nothing wasteful.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
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 implies the return shape ('prim counts by USD type') and names a concrete returned field (instanceable_prims). For a 3-param read tool with no annotations, that is close to complete, with only the exact stats payload left implicit.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate, and it does: node_path is identified as a LOP node path, prim_path as the root prim to gather from, and traverse_instance_proxies as counting under instanceable prototypes. This meaningfully exceeds the bare string/boolean type declarations in the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (get) and resource (USD prim stats) with scope (counts by type under a root path), which clearly separates it from list_usd_prims and get_usd_prim. It does not explicitly name a sibling to distinguish from, so it falls just short of a 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description never says when to reach for this tool instead of the many sibling prim-inspection tools (get_usd_prim, list_usd_prims, get_attrib_stats) and offers no prerequisites or exclusions. The instancing note helps interpret a result but is not usage routing.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_usd_variantsB
Get variant sets and selections for a USD prim.
Args: node_path: LOP node path. prim_path: USD prim path.
| Name | Required | Description | Default |
|---|---|---|---|
| node_path | Yes | ||
| prim_path | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full behavioral-disclosure burden. It implies a read-only get, but omits return format, permission needs, error conditions, and whether a loaded stage is required.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded purpose followed by a compact Args section that earns its place by supplying parameter semantics absent from the schema. No filler or repeated information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no annotations and no output schema, the description must cover behavior and return shape. It names the return concept and defines both parameters, but omits return structure, stage prerequisites, and error behavior, leaving clear gaps for a 2-parameter getter.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must define the parameters, and it does label both required args meaningfully ('LOP node path', 'USD prim path'). It adds value beyond bare schema titles but does not give path syntax, examples, or edge-case meaning.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource: 'Get variant sets and selections for a USD prim.' This clearly distinguishes it from generic USD-getter siblings, though it does not explicitly contrast itself with get_usd_prim, get_usd_composition, or get_usd_attributes.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides no when-to-use guidance, prerequisites, or alternatives. The description implies retrieval only, with no indication of when this is preferable to other USD inspection tools such as get_usd_prim or find_usd_prims.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_usd_world_transformA
World transform of USD prims at one or more frames.
get_usd_prim gives local xformOps; this composes every parent, so an animated parent shows. Per prim and frame: translate, rotate (XYZ degrees), scale and the row-major matrix. Each frame recooks the stage there, so LOP-parm animation reads right, and the playbar is restored.
Args: node_path: LOP node whose stage to read. prim_paths: Prim paths, e.g. ["/world/cam"]. frames: Frames to read at, at most 500. Default: the current frame.
| Name | Required | Description | Default |
|---|---|---|---|
| frames | No | ||
| node_path | Yes | ||
| prim_paths | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries full burden and does disclose real behavior: each frame recooks the stage, rotate is XYZ degrees, output is translate/rotate/scale plus a row-major matrix, and the playbar is restored (a side effect that matters). This is meaningful beyond-name disclosure, though it omits permissions/cost context.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loads the purpose, then differentiation, then output shape, then args. Every sentence contributes; slightly verbose but no filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema and no annotations, the description fills both gaps by describing the returned components and the playbar-restore side effect. Complete enough to call correctly, missing only cost/latency or failure-mode context.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate, and it does: node_path is 'LOP node whose stage to read', prim_paths gets an example ("/world/cam"), and frames is capped 'at most 500' with a default of the current frame. All three params get constraint-bearing text.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource (world transform of USD prims) and scope (one or more frames), and explicitly distinguishes itself from get_usd_prim by noting that it composes every parent so animated parents show. An agent can tell it apart from the sibling 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.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Names the alternative, get_usd_prim, and the condition that selects it: local xformOps versus composed world transform. That is clear routing guidance, though it stops short of an explicit 'when-not-to-use' statement or prerequisites.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_viewport_infoC
Get viewport settings for a pane tab.
Args: pane_name: Pane tab name.
| Name | Required | Description | Default |
|---|---|---|---|
| pane_name | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are supplied, so the description carries the full burden. 'Get' implies a read, but nothing is said about what settings are returned, whether the pane must be open, error behavior, or any side effects.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Very short and front-loaded, with the core purpose in the first sentence. The trailing Args block is somewhat boilerplate but not wasteful enough to be penalized heavily.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a one-parameter tool with no annotations and no output schema, the description does not explain the return value or how to source a pane name, leaving an agent unable to call it confidently without exploring other tools.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0% — the schema only carries a title and a null default. The description's 'pane_name: Pane tab name' restates the parameter name without explaining what values are valid, how to obtain a pane name (e.g., via list_panes), or why the parameter is optional.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb ('Get') and resource ('viewport settings for a pane tab'), which is clear and distinguishable in kind from the set_viewport_* siblings. It does not, however, name any sibling or clarify the contrast with adjacent viewport tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no guidance on when to use this versus the many viewport-related siblings, nor any prerequisite such as needing the pane to exist. The agent is left to infer everything about invocation context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_volume_infoA
Per-volume name, resolution, active voxels, value range, mean and sum.
A primitive count cannot tell a correctly named non-empty density field from an empty one, which is the question worth asking before wiring a solver's sourcing. This is the SOP counterpart of get_cop_vdb.
threshold or bins read the voxels (VDB: active ones) for percentiles, a histogram, the count over threshold and box_above_threshold, the world box of the voxels over it: where the smoke is, not where the grid is.
Args: node_path: SOP node path holding volume or VDB primitives. max_volumes: Cap on volumes reported. threshold: Split the voxels at this value and box the ones above it. bins: Histogram bin count, or a list of bin edges.
| Name | Required | Description | Default |
|---|---|---|---|
| bins | No | ||
| node_path | Yes | ||
| threshold | No | ||
| max_volumes | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations exist, so the description carries the full burden, and it delivers real behavioral detail: it explains what threshold and bins actually do to the voxels (percentiles, histogram, count over threshold, box_above_threshold, world box of the above-threshold voxels). That is substantive operation-level transparency beyond what any structured field provides.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The return-value list is well front-loaded, but the middle paragraphs are dense and awkwardly phrased ('threshold or bins read the voxels ... for percentiles, a histogram, the count over threshold and box_above_threshold'), packing too many clauses into one run-on sentence. The Args block is tidy, so structure is adequate but not crisp.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema and no annotations, the description takes on the return-value and behavioral burden and does so adequately: it enumerates outputs and explains threshold/bins semantics. Minor incompleteness remains around max_volumes behavior and output shape when threshold is unset, but the core is covered.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate, and the Args block documents all four parameters: node_path (SOP path holding volume/VDB primitives), max_volumes (cap), threshold (split value + boxing), and bins (bin count or edge list, matching the anyOf schema). This meaningfully compensates for the schema gap, though the interaction of threshold with the default output is not fully spelled out.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource and enumerates exactly what is returned (name, resolution, active voxels, value range, mean, sum), and distinguishes itself from get_geometry_info by explaining that primitive counts mislead for density fields. The sibling comparison to get_cop_vdb is also explicit. Clear, but slightly obscured by dense prose.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives context ('the question worth asking before wiring a solver's sourcing') and names get_cop_vdb as a related counterpart, which implies when it is used. However it never explicitly states when to prefer this over sample_volume, get_geometry_info, or get_cop_vdb, so usage is inferred rather than directed.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_workflow_guideA
The server's written guide for a subject: what to build, in what order, which mistakes it exists to prevent, and the shipped help pages to read.
Call this BEFORE designing a setup you have not built this session, and again the moment two attempts at the same symptom have failed. Each guide is distilled from that subject's SideFX manual.
Args: topic: Help scope name or common alias: pyro, fluid (flip, water, whitewater), vellum (cloth), destruction (rbd), mpm (sand, snow), ocean, solaris, tops, model, copy, render, shade, character, crowds, heightfields, copernicus, assets, troubleshooting, dyno. description: What you are trying to build, for the guide's framing.
| Name | Required | Description | Default |
|---|---|---|---|
| topic | Yes | ||
| description | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries full burden and does disclose meaningful behavior: guides are distilled from the SideFX manual and include help pages to read. However it does not state the return shape, that it is a safe read, or pagination/size characteristics.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loads the resource definition, then usage conditions, then arg documentation. Every sentence carries information and the alias list, while long, is directly actionable.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
No output schema or annotations exist, so the description must stand alone. It covers purpose, timing, and accepted inputs well; it is only slightly incomplete on return format and size. That is sufficient for an agent to call it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, so the description must compensate. It extensively documents the required 'topic' param by enumerating the accepted help scope names and aliases (pyro, fluid, vellum, ocean, solaris, etc.), which effectively acts as an enum. The optional 'description' param is only lightly explained.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific resource (a distilled workflow guide for a subject) and enumerates its content: build order, mistakes it prevents, and shipped help pages. This is distinguishable from siblings like search_help and get_help_page because it is a curated workflow artifact, not a raw page lookup.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives explicit triggering conditions: call before designing an unfamiliar setup, and again after two failed attempts at the same symptom. Strong when-to-use guidance, though it does not name alternative tools (e.g. search_help) for adjacent cases.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_work_item_infoC
Get detailed information about a specific work item.
Args: ctx: MCP context. node_path: TOP node path. work_item_index: Work item index within the node.
| Name | Required | Description | Default |
|---|---|---|---|
| node_path | Yes | ||
| work_item_index | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full behavioral burden. It implies a read operation via 'Get' but says nothing about whether the node must be cooked, whether work items are accessible before/after a cook, or what happens with an out-of-range index.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The body is short and front-loaded, but the Args block is docstring boilerplate that includes 'ctx: MCP context,' which is not a schema parameter, adding noise without value. The one useful sentence is buried above redundant parameter restatements.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema and no annotations, the description should describe what 'detailed information' actually contains and how to obtain a valid work_item_index. In a sibling set containing get_work_item_states and get_failed_work_items, that routing information is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate. 'node_path: TOP node path' usefully scopes the parameter to TOP/PDG networks, but 'work_item_index: Work item index within the node' merely restates the name without explaining valid ranges or how indices are obtained.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource: retrieve detailed information about a specific work item. An agent can distinguish it from siblings like get_work_item_states or get_failed_work_items by the 'detailed information about a specific work item' phrasing, though the description never explicitly contrasts with those siblings.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no guidance on when to call this versus get_work_item_states, get_failed_work_items, or get_top_logs, nor any stated prerequisite such as needing the work item index from a prior listing call. The agent must infer usage entirely from the name.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_work_item_statesC
Get work item state counts for a TOP node.
Args: ctx: MCP context. node_path: TOP node path.
| Name | Required | Description | Default |
|---|---|---|---|
| node_path | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It implies a read operation returning counts, but never states that it is non-mutating/read-only, what permissions or node state it requires, whether it cooks the TOP network, or how the counts are structured.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The definition is very short and front-loads the purpose. The 'Args: ctx: MCP context' line is boilerplate that does not map to any schema parameter and is mild noise, but overall the entry is efficient.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a single-parameter read tool with no annotations and no output schema, the description covers the basic intent. It stops short of explaining the return shape (what states appear, whether counts are per-state) and any side effects, leaving gaps for an agent relying only on this text.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0% and there is one parameter (node_path). The description supplies a domain hint ('TOP node path') that the schema's bare string type lacks, adding some value. It still does not specify path syntax or whether the path must be absolute, so it only partially compensates.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb ('Get') and resource ('work item state counts for a TOP node'), which is clear and non-tautological. It does not, however, differentiate itself from nearby siblings like get_work_item_info or get_failed_work_items, so an agent cannot easily tell when to prefer this tool over those.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The phrase 'for a TOP node' gives a minimal context cue but there is no explicit when-to-use, when-not-to-use, or named alternative among the many TOP-related siblings (get_work_item_info, get_failed_work_items, dirty_work_items). Guidance is absent.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_wrangle_codeC
Read the VEX code from an Attribute Wrangle node.
Args: node_path: Path to the wrangle node.
| Name | Required | Description | Default |
|---|---|---|---|
| node_path | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden but only states it reads VEX code. It does not disclose failure behavior (e.g., if the node is not a wrangle), the return format, or whether the node must exist, leaving behavioral gaps.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded one-line purpose followed by a compact Args block; nothing is redundant. The Args formatting for a single param is slightly ceremonial but harmless.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple read tool with no output schema and no annotations, the description is minimally adequate. It omits the return format and error conditions, which would help an agent know what to expect from the read.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The description adds a brief gloss ('Path to the wrangle node') over the schema's bare 'Node Path' title, marginally compensating for 0% schema coverage. With only one param, the meaning is inferable, but no path syntax or example is given.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (Read) and resource (VEX code from an Attribute Wrangle node), which clearly distinguishes it from the sibling set_wrangle_code. The purpose is unambiguous, though it does not name siblings explicitly.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides no when-to-use guidance, no prerequisites, and no reference to alternatives like set_wrangle_code or validate_vex. Usage is only implied by the verb 'Read'.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
import_fileC
Import a geometry, USD, or Alembic file into the scene.
Args: file_path: Path to the file to import. parent_path: Network path for the import node. node_name: Name for the created node.
| Name | Required | Description | Default |
|---|---|---|---|
| file_path | Yes | ||
| node_name | No | ||
| parent_path | No | /obj |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full behavioral burden. It implies a node is created in the scene via the parent_path/node_name params, but says nothing about permissions, whether existing nodes are affected, error behavior on unsupported files, or what the call returns. This is thin for a mutation tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded single-sentence purpose followed by a compact Args list. The per-param lines partly restate the schema, but overall there is little waste and the structure is easy to scan.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple 3-param import with no output schema, the definition covers the essentials, but with zero annotation coverage it leaves behavioral questions (file format support, session prerequisites, node side-effects) unaddressed. Adequate but with clear gaps.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate, and it does describe all three params (file path, network path for the import node, node name). However the descriptions are terse and add only marginal meaning beyond the param names and defaults already in the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (import) and resource (geometry, USD, or Alembic file into the scene), which is enough to distinguish it from the opposite sibling export_file. It stops short of naming siblings or differentiating the scope further, so it's clear but not sharply differentiated.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives no indication of when to use this tool versus alternatives, no prerequisites (e.g., a connected Houdini session), and no mention of related importing workflows. Only the implied purpose of the verb provides guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
inspect_usd_layerC
Inspect a USD layer by index.
Args: node_path: LOP node path. layer_index: Layer index (0 = root layer).
| Name | Required | Description | Default |
|---|---|---|---|
| node_path | Yes | ||
| layer_index | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full behavioral burden. 'Inspect' implies a read, but it says nothing about what is returned, whether layers resolve references, or what the inspection output reveals for the given layer index.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Short, front-loaded, and free of padding. The Args section is a reasonable format, though the single sentence could convey a bit more substance.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
No annotations and no output schema, yet the description does not explain what inspecting a layer yields or the LOP/USD layer context. For a tool whose entire value is the returned inspection, this leaves a significant gap.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, so the description must compensate, and it partially does: 'node_path: LOP node path' and 'layer_index: Layer index (0 = root layer)' clarify both parameters, with the root-layer hint adding real meaning. The compensation is incomplete but meaningfully above the schema alone.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb ('Inspect') and resource ('USD layer'), making the basic purpose clear. However, it does not distinguish itself from the sibling get_usd_layers, which likely also surfaces layer information, leaving the agent to infer the difference.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no guidance on when to use this tool versus alternatives like get_usd_layers or get_usd_composition, nor any prerequisites. The text only restates the arguments.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
install_hdaB
Install an HDA file into the current session.
Args: ctx: MCP context. file_path: HDA file path. force: Force reinstall even if already loaded.
| Name | Required | Description | Default |
|---|---|---|---|
| force | No | ||
| file_path | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations exist, so the description carries the full burden. It does disclose two real behavioral facts: the install is scoped to the current session, and the 'force' flag triggers reinstall when an HDA is already loaded. It says nothing about permissions, failure modes (bad/missing file), or persistence across sessions.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The core sentence is front-loaded and tight, with the useful 'force' clarification. The 'ctx: MCP context.' line is boilerplate for an injected framework argument rather than an agent-facing parameter, so it is mild dead weight.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
A mutation-style tool with no annotations and no output schema needs to describe return/error behavior and environment prerequisites; the description covers none of this. An agent cannot tell what a successful install looks like or what happens when the file is invalid or Houdini is not connected.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description is the only source. It maps both parameters, but 'file_path: HDA file path' merely restates the schema title, while 'force: Force reinstall even if already loaded' genuinely adds semantics by explaining the conflict condition.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource ('Install an HDA file') and scopes it ('into the current session'), which distinguishes it from create_hda, update_hda, and uninstall_hda in spirit. It does not explicitly name or contrast with those siblings, so it stops short of a 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no when-to-use guidance, no prerequisites (e.g. must Houdini be connected?), and no routing to alternatives such as reload_hda or list_installed_hdas. The idea that installation is session-scoped is only implied by the phrase 'into the current session'.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
layout_childrenB
Auto-layout children of a network node.
Does nothing when auto-layout is disabled via FXHOUDINIMCP_AUTO_LAYOUT=0.
Args: ctx: MCP context. parent_path: Parent network path. spacing: Spacing multiplier between nodes.
| Name | Required | Description | Default |
|---|---|---|---|
| spacing | No | ||
| parent_path | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden. It does disclose a genuinely non-obvious behavior (silent no-op when FXHOUDINIMCP_AUTO_LAYOUT=0), which is valuable, but it never says this mutates/repositions existing nodes, whether the layout is reversible, or what happens on failure.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the core action in one line, followed by the disable condition. The Args block is slightly noisy (ctx is not in the schema) but overall tight.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
No output schema and no annotations, so the description must stand alone. It explains the action and the disabled-state no-op but leaves return behavior, spacing semantics, and the mutation's effect on existing positions unaddressed.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate. It at least labels parent_path as the parent network path and spacing as a multiplier between nodes, which adds meaning the schema's bare 'Spacing' number does not, but it omits units, default behavior, and valid range.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource: auto-layout the children of a network node. An agent can tell this manipulates node positions under a parent, though it doesn't explicitly distinguish itself from other node-manipulation siblings like move_node or set_node_position.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No when-to-use guidance or alternatives are given. The only conditional stated ('does nothing when auto-layout is disabled via FXHOUDINIMCP_AUTO_LAYOUT=0') is an environment precondition, not usage routing.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
link_parametersA
Create a channel reference from one parameter to another.
The destination gets an HScript expression that reads the source as its own type: chs() for a String parameter, ch() for numbers, toggles and menus. The path is relative to the destination node (chs("../CTRL/mat")), so the link survives moving the pair, collapsing into a subnet or instancing an HDA. The reply carries the expression, the function used and the destination's evaluated value.
Args: source_path: Source node path. source_parm: Source parameter name. dest_path: Destination node path. dest_parm: Destination parameter name. replace_existing: Overwrite a destination that already has keyframes or an expression. Refused otherwise, so animation is never lost by accident. A link whose source already reads the destination through ch() is refused as a cycle in every case.
| Name | Required | Description | Default |
|---|---|---|---|
| dest_parm | Yes | ||
| dest_path | Yes | ||
| source_parm | Yes | ||
| source_path | Yes | ||
| replace_existing | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and does so well: it discloses that a destination with keyframes/expression is refused unless replace_existing is set (protecting animation), that self-referential cycles are always refused, and what the reply contains (expression, function used, evaluated value). These are exactly the behaviors an agent needs before invoking.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loads the core purpose, then the mechanism, then the survival benefit, then Args. Every part is relevant, though the middle prose paragraph is slightly verbose for the amount of new information it adds.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a five-parameter mutation tool with no annotations and no output schema, the description covers the key behaviors and even summarizes the return value. It stops short of full completeness only in not tying the tool to specific alternative tools or prerequisites.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate, and the Args block documents all five parameters. replace_existing gets rich semantics (it overwrites keyframes/expressions, otherwise refused), though source_path/source_parm/dest_path/dest_parm are given only terse one-line glosses.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource ('Create a channel reference from one parameter to another') and immediately clarifies the mechanism (HScript expression via chs()/ch()). This distinguishes it from nearby siblings like set_expression, get_parm_references and export_chop_to_parm, which the agent could otherwise confuse it with.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explains the mechanism and its benefits (link survives moving/collapsing/instancing) but never explicitly says when to prefer this over alternatives such as set_expression or export_chop_to_parm, nor states prerequisites like both nodes needing to exist. Usage is implied rather than prescribed.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_cachesC
List all cache-type nodes under a root path.
Args: ctx: MCP context. root_path: Root path to search from.
| Name | Required | Description | Default |
|---|---|---|---|
| root_path | No | / |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full behavioral burden. It implies a read-only listing but says nothing about return format, pagination, whether results are recursive, or how 'cache-type nodes' are identified. This is a notable gap for a tool with zero structured behavioral hints.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The purpose is front-loaded in the first sentence and is efficient. The Args block including the boilerplate 'ctx: MCP context' is minor filler but standard for this tool family.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple single-parameter list tool with no annotations and no output schema, the definition is minimally adequate but leaves the return shape and the meaning of 'cache-type node' unexplained, which an agent may need to interpret results correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description's note that root_path is the path to search from is the only semantic detail available, adding a little value. However, it doesn't clarify format, recursion depth, or default behavior beyond what the schema's default '/' implies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (list) and resource (cache-type nodes) scoped to a root path. Clear enough to act on, but it never distinguishes itself from siblings like get_cache_status, clear_cache, or write_cache that operate on the same caching domain.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to use this versus get_cache_status or the other cache-related siblings, and no prerequisites or context. The agent must infer usage purely from the name.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_childrenA
List children of a network node.
Avoid recursive=True on large networks — it can return hundreds or
thousands of nodes. Prefer find_nodes with a specific pattern instead.
Args: ctx: MCP context. parent_path: Parent network path. recursive: Include all descendants (use sparingly on large scenes). filter_type: Node type filter (e.g. 'box', 'merge').
| Name | Required | Description | Default |
|---|---|---|---|
| recursive | No | ||
| filter_type | No | ||
| parent_path | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are supplied, so the description carries the full behavioral burden, and it discloses a genuine non-obvious trait: recursion can explode the result set on large networks. It does not describe return shape or any permission/context requirements, but for a pure read/list operation the safety profile is largely self-evident from the verb.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The most valuable content (the recursion warning and the alternative tool) is front-loaded in the first two sentences. The trailing Args block is slightly redundant, repeating the recursion caution already stated, but it is compact and costs little.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, no annotations, and no enum parameters, the description covers all three arguments and the main usage hazard, which is enough to invoke the tool correctly. It stops short of saying what a "child" entry contains, but that is a minor omission for a listing call.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, so the description must compensate, and it does: `recursive` is explained as "include all descendants (use sparingly)" and `filter_type` is given concrete example values ('box', 'merge'). Only `parent_path` is left as a bare restatement of its title, and the accepted path syntax is never clarified.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource ("List children of a network node") and explicitly distinguishes itself from the adjacent `find_nodes` tool for pattern-based lookup. An agent can tell which tool to reach for 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.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives an explicit exclusion ("Avoid `recursive=True` on large networks") with the reason (hundreds/thousands of nodes) and names the preferred alternative ("Prefer `find_nodes` with a specific pattern instead"). This is exactly the when/when-not/alternative coverage the dimension asks for.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_chop_channelsC
List all channels on a CHOP node.
Args: node_path: CHOP node path.
| Name | Required | Description | Default |
|---|---|---|---|
| node_path | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full behavioral burden. It does not disclose whether this is a read-only operation, whether the returned list reflects live or cooked channels, whether the node must be cooked first, or what happens on an invalid path.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the action, and the body is short. The trailing 'Args:' block is largely redundant with the schema and field name, but the overall size is appropriate.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no annotations and no output schema, the description should say what is returned (channel names, types, sample data) to be callable with confidence. That information is entirely absent, leaving a real gap for a tool whose primary value is its return shape.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% for the single parameter. The description only restates 'node_path: CHOP node path,' which is near-tautological with the field name and adds no format, path-syntax, or relative-vs-absolute meaning.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description gives a clear verb+resource+scope: 'List all channels on a CHOP node.' An agent can distinguish this from create_chop_node or export_chop_to_parm. It doesn't, however, differentiate itself from the likely-overlapping get_chop_data sibling.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no guidance on when to use this versus get_chop_data or get_chop_info, no preconditions (e.g. node must exist/cook), and no mention of alternatives. Usage must be inferred entirely from the name.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_cop_node_typesB
List available COP node types.
Args: filter: Substring filter for node type names.
| Name | Required | Description | Default |
|---|---|---|---|
| filter | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden, and it says nothing about connection requirements or return shape. It is, however, a simple read-only enumeration whose safety profile is self-evident, so the omission is less costly than it would be for a mutation tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Very short and front-loaded, with the purpose in the first sentence. The 'Args:' docstring block is slightly boilerplate-ish but it is the only place the filter semantics appear.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a trivial one-parameter listing tool this is close to adequate, but with no output schema and no statement of what is returned (names only, with categories, with descriptions?) or whether a connection is needed, the agent must guess the response shape.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate, and it does: it explains that 'filter' is a substring match against node type names. That is the key semantic (match-by-substring, not exact or regex) an agent needs to call it correctly.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('List available COP node types'), which is unambiguous on its own. However, it does not differentiate from the sibling 'list_node_types', which an agent could reasonably confuse it with when looking for node types in general.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no when-to-use guidance, no prerequisite (e.g. whether a live Houdini connection is required), and no mention of the alternative 'list_node_types'. The agent must infer usage entirely from the name.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_dop_objectsC
List all DOP objects in a simulation.
Args: node_path: DOP network node path.
| Name | Required | Description | Default |
|---|---|---|---|
| node_path | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full behavioral burden. 'List' implies a read, but it says nothing about the return format, whether the simulation must be cooked, performance cost, or how many objects are returned.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded purpose sentence followed by a compact args block; no filler. The docstring-style 'Args:' header is slightly boilerplate but harmless.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description should characterize what is returned, but it only says 'list all DOP objects'. For a single-parameter list tool it is minimally adequate but leaves the return shape and simulation preconditions unspecified.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, so the description must compensate; it clarifies node_path as a 'DOP network node path', which adds useful domain context beyond the bare 'Node Path' schema title. Still, it omits format examples or whether the path must point to a DOP network specifically.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (list) and resource (DOP objects) with the scope of a simulation. However, it does not distinguish itself from siblings like get_dop_object or get_dop_relationships, which an agent must disambiguate without either schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no when-to-use guidance, no prerequisites, and no mention of alternatives such as get_dop_object for a single object. Usage is only weakly implied by 'list all'.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_hda_versionsC
Every installed definition of an HDA node's type: version, file, which is current.
Args: ctx: MCP context. node_path: An HDA instance.
| Name | Required | Description | Default |
|---|---|---|---|
| node_path | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries full behavioral disclosure burden. It implies a read-only listing but never states that the operation is non-destructive, requires no special permissions, or has any rate or performance characteristics. No output schema exists to cover return behavior either.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The opening sentence is front-loaded and informative, but the Args section adds little value; the ctx entry is not in the schema and the node_path note is too sparse. Trimming the Args block would improve signal.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple one-parameter list tool with no annotations or output schema, the description states the returned fields and the resource. However, it omits usage guidance, safety profile, and parameter format details, leaving gaps an agent must guess.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0% for the sole parameter, so the description must compensate. It adds only 'An HDA instance' for node_path—better than the schema's bare 'Node Path' but still lacking format or example. It also lists a 'ctx: MCP context' argument that does not exist in the schema, creating confusion.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific action (list) and resource (installed definitions of an HDA node's type) and enumerates returned fields (version, file, which is current). It does not name any sibling tool or explain how it differs from list_installed_hdas or get_hda_info, so it stops short of a 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to call this tool, no exclusions, and no mention of alternatives like get_hda_info or list_installed_hdas. The description only describes output, leaving the agent to infer usage context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_installed_hdasA
List installed HDA definitions, grouped by library file.
A stock install loads thousands; pass a filter (namespace, name or path
fragment). truncated says when limit cut the list.
Args: ctx: MCP context. filter: Substring filter for type names or file paths. limit: Maximum definitions returned.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| filter | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and does disclose real behavioral traits: results are grouped by library file, the install can be very large, and the `truncated` flag indicates `limit` cut the list. It omits auth/permission needs and any cost, but covers the key operational facts.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The purpose and the truncation/scale caveat are front-loaded, followed by a compact Args block. The `ctx` line doesn't correspond to an actual parameter, a small bit of noise, but overall there is little waste.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
There is no output schema, and the description usefully explains the `truncated` signal and the grouping of results. For a simple listing tool with two optional params, this is close to sufficient; only the exact shape of returned entries is left unspecified.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, so the description must compensate, and it does: `filter` is described as a substring match on type names or file paths, and `limit` as the maximum definitions returned. Minor gaps remain (case sensitivity, match semantics), and `ctx` is listed although it is not in the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The first sentence gives a specific verb and resource ('List installed HDA definitions, grouped by library file'), which is clear and distinct from siblings like get_hda_info or list_hda_versions. It doesn't explicitly contrast itself with those siblings, but the scope is unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives a practical hint ('A stock install loads thousands; pass a filter') that implies the intended way to use the tool, but names no alternatives and states no when-not-to-use conditions. Usage is implied rather than spelled out.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_lightsC
List all USD lights on a LOP stage.
Args: node_path: LOP node path.
| Name | Required | Description | Default |
|---|---|---|---|
| node_path | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure, and it falls short. It does not state whether the listing is recursive through the stage hierarchy, whether it filters to a specific scope, what the return shape is, or whether it is a safe read-only operation. 'List' implies read-only but that must be inferred.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The core sentence is short and front-loaded with the action and scope. The 'Args:' block restates what the schema already declares about node_path, which is mild waste, but overall the definition is compact.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a one-parameter list tool with no output schema, the description covers the essentials but leaves key questions open: what the returned light entries contain and whether the listing is stage-wide. With no annotations to fill the safety/behavior gap, it is only minimally adequate.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% for the single required parameter, so the description must compensate. Saying 'LOP node path' adds some meaning beyond the bare 'Node Path' title — it identifies the namespace the path lives in — but provides no format, example, or root-path convention. This is only partial compensation.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource: 'List all USD lights on a LOP stage.' An agent can distinguish this from create_light and set_light_properties. However, it does not differentiate itself from adjacent read tools like list_usd_prims or list_materials, which a sibling-aware agent might also consider.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no when-to-use guidance, no mention of prerequisites (e.g., a valid LOP stage must exist), and no named alternative. The 'LOP stage' phrasing only weakly implies the context in which it applies.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_materialsC
List all material nodes under a root path.
Args: ctx: MCP context. root_path: Root path to search for materials.
| Name | Required | Description | Default |
|---|---|---|---|
| root_path | No | /mat |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. "List" implies a read operation, but it does not state the safety profile, permissions, pagination, or return shape. For a tool with zero annotation coverage, this is a significant gap.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The core sentence is front-loaded and efficient, but the Args block duplicates parameter information already in the schema (including a boilerplate "ctx: MCP context" line) rather than adding value, so it is only adequately sized.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple single-parameter list tool with no output schema, the description covers the basic purpose but leaves the path format and any scoping behavior unspecified. It is minimally sufficient but not complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate for the single parameter. It only rephrases root_path as "Root path to search for materials" — tautological with the parameter title — and omits format details (node path vs USD path) and the default of /mat that the schema defines.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb ("List") and resource ("material nodes") with a scope qualifier ("under a root path"), so the agent can tell it lists rather than inspects or creates materials. It doesn't explicitly differentiate from close siblings like list_material_types or get_material_info, so it falls short of a 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no when-to-use guidance, no prerequisites, and no mention of alternatives among the many sibling material tools (list_material_types, get_material_info, get_usd_materials). The agent is left to infer usage entirely.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_material_typesB
List available VOP/material node types.
Args: ctx: MCP context. filter: Substring to filter type names and labels by.
| Name | Required | Description | Default |
|---|---|---|---|
| filter | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden of behavioral disclosure. It reveals nothing about the safety profile, return format, or pagination behavior; the 'ctx: MCP context' line is plumbing rather than behavior. Only the scoping hint implied by 'VOP/material' adds anything.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The purpose is front-loaded in one short sentence and the filter explanation is one line. The 'Args: ctx: MCP context' boilerplate is slightly noisy but small, so the overall structure is tight.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple argument-less listing tool this is minimally adequate, but with no output schema and no annotations the description should say more about what the returned types are and how they relate to the sibling listing tools. The overlap with list_node_types is left unexplained.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate, and it does: it explains that 'filter' is a substring match applied against both type names and labels. That is genuine semantic information beyond the bare 'Filter' property with a null default.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('List available VOP/material node types'), which is more precise than a bare 'list'. However, it does not distinguish itself from the sibling list_node_types or list_cop_node_types, so an agent cannot tell which listing tool applies to which context without guessing.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No when-to-use guidance, no prerequisites, and no mention of alternatives despite several overlapping sibling tools (list_node_types, list_cop_node_types, list_materials). The agent must infer the usage context entirely.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_node_typesA
List available node types for a context category.
IMPORTANT: Any context can have hundreds of node types (SOPs alone can
exceed 800 in a production install). Always pass a filter keyword
(e.g. 'mountain', 'scatter', 'boolean') instead of dumping the full list
— the unfiltered response is capped at limit and may still be large.
Args: ctx: MCP context. context: Category name (e.g. 'Sop', 'Lop', 'Dop', 'Top', 'Cop2'). filter: Substring to filter type name or label (case-insensitive). limit: Max entries to return (default 200, max recommended 200).
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| filter | No | ||
| context | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and does well: it discloses that results can be huge (800+ SOPs), that the unfiltered response is capped at limit, and that filter matching is case-insensitive. It doesn't state whether the list is cached or reflects installed/available types only, a minor gap.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loads the purpose, then the IMPORTANT warning, then args. The Args block partially duplicates the schema but adds real semantics, so little is wasted, though it could be tightened.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a no-annotation, no-output-schema list tool, the description covers scale, filtering strategy, defaults, and argument meaning. It omits what a returned entry actually looks like, which is the only meaningful remaining gap.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, so the description must compensate, and it does: it defines context as a category name with concrete examples ('Sop', 'Lop', 'Dop'), explains filter as a case-insensitive substring over name or label, and gives limit's default and recommended max.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource: 'List available node types for a context category.' An agent can tell this apart from the many create_/get_ node tools, though it doesn't explicitly contrast with the near-sibling list_cop_node_types.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives clear operational guidance: always pass a filter, with example keywords, and explains why (hundreds of types, unfiltered response capped at limit). It doesn't name alternative tools for listing types, so it falls short of full when/when-not/alternatives coverage.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_panesA
List all visible pane tabs in the Houdini UI.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the disclosure burden. It usefully scopes results to 'visible' panes, implying hidden/collapsed panes are excluded and that the operation is read-only, but it says nothing about return shape (names vs. paths vs. identifiers) or whether any UI state is touched.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence with no filler; the scope qualifier 'visible' is placed where it matters.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a trivial no-param, read-only listing tool with no output schema, the definition is nearly sufficient. The only missing piece is what a returned entry looks like (pane name/type/id), which would help an agent use the result downstream, but no sibling consumes pane identifiers.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool takes zero parameters, so there is nothing for the description to disambiguate beyond confirming that the call is unfiltered. Baseline 4 applies for a no-argument tool.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (List) and resource (visible pane tabs in the Houdini UI), so an agent knows exactly what it returns. It does not differentiate itself from any sibling, though no sibling appears to overlap the pane-listing domain.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no when-to-use guidance, no prerequisites, and no mention of alternatives or follow-up tools. The agent must infer that this is a discovery/introspection call from the verb 'List' alone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_render_nodesA
List all render (ROP/Driver) nodes in the scene.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full disclosure burden. It does state scope implicitly (all render nodes, entire scene, unfiltered), which is useful, but it says nothing about traversal depth, return format, ordering, or whether it includes nested/subnet ROPs.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single sentence with no wasted words, front-loaded with the action and resource and using the parenthetical only to disambiguate terminology.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a no-parameter, no-output-schema read tool this is nearly sufficient; the agent knows what it lists and where. The only missing piece is scope detail (recursive vs top-level network, returned fields), which is minor given the tool's simplicity.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool takes zero parameters, so per the rubric this is a baseline 4. There are no parameters for the description to explain, and nothing misleading is stated about inputs.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description gives a specific verb (list) and resource (render/ROP/Driver nodes) and clarifies the Houdini terminology with a parenthetical, so the agent immediately knows what comes back. It does not, however, explicitly distinguish this from nearby siblings such as render_node_network or create_render_node, which would be needed for a 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is only implied: an agent can infer this is the read-only lookup for ROP nodes, but there is no statement of when to use it versus alternatives (e.g., get_render_settings, render_node_network) and no conditions or exclusions given.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_shelf_toolsA
Find shelf tools by name, label or keyword.
Use this when a setup exists as a shelf tool rather than as a node: oceans, quick sims, rigging setups. A full install ships around 8,000 of them, so always filter.
Args: filter: Substring matched against name, label and keywords. limit: Maximum tools to return.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| filter | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden, and it discloses a meaningful behavioral trait: a full install ships ~8,000 tools, so filtering is recommended. It stops short of describing return format or pagination, but the volume warning is genuine non-obvious context.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded purpose, then usage condition, then the volume rationale, then a compact args block. Every sentence earns its place with no redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple two-parameter list tool with no output schema, the definition is largely complete: purpose, when-to-use, volume context, and both parameters are covered. It could go slightly further on what a returned tool entry contains, but nothing critical for correct invocation is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate, and it does: filter is documented as a substring matched against name, label and keywords, and limit as the maximum tools to return. Both parameters gain meaning beyond the bare JSON schema types.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb+resource, 'Find shelf tools by name, label or keyword', which clearly states what the tool does and the search dimensions. It is readily distinguishable from siblings like run_shelf_tool or get_shelf_tool_script, which execute or fetch a single tool.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives explicit when-to-use context ('when a setup exists as a shelf tool rather than as a node: oceans, quick sims, rigging setups') and a practical rule ('always filter'). It does not explicitly name alternative tools, but the node-vs-shelf-tool framing is strong routing guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_takesB
List all takes in the scene with their hierarchy.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full behavioral burden, and it does little: it never states that this is a read-only operation, whether the result is paginated or ordered, what 'hierarchy' means structurally, or whether an active take is included. Only the implied safety of 'List' and the mention of hierarchy provide any behavioral signal.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single well-formed sentence with the scope front-loaded and no filler. It is efficient, though its brevity is partly a consequence of saying very little.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a zero-parameter, no-annotation, no-output-schema read tool the description is minimally adequate: an agent knows what it returns at a high level, but not the take/hierarchy structure or ordering, which it must discover by calling it.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool takes zero parameters, so the baseline is 4; there is nothing for the description to clarify beyond what the (empty) schema already conveys.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource ('List all takes') and adds scope ('in the scene with their hierarchy'), which cleanly contrasts with the sibling get_current_take. It does not name the sibling explicitly, so sibling differentiation is left implicit.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no when-to-use guidance, no prerequisite or state requirement, and no explicit routing to alternatives such as get_current_take or create_take. The plural 'all takes' hints at the contrast with get_current_take, but nothing states it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_usd_primsA
List USD prims on a stage with filtering.
Instanced geometry is invisible to the default walk: an instanceable prim has no children of its own, they belong to its prototype. Set traverse_instance_proxies to list the prims under it.
Args: node_path: LOP node path. root_path: Root prim path to list from. prim_type: USD type filter (e.g. "Mesh", "Xform"). kind: Kind filter (e.g. "component", "group"). depth: Max traversal depth. traverse_instance_proxies: Descend into instanceable prims and list the prims under their prototypes.
| Name | Required | Description | Default |
|---|---|---|---|
| kind | No | ||
| depth | No | ||
| node_path | Yes | ||
| prim_type | No | ||
| root_path | No | / | |
| traverse_instance_proxies | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden, but it does disclose one genuinely non-obvious behavior: instanced geometry is invisible to the default walk and lives under prototypes. It says nothing about read-only safety, result ordering, or result size/pagination, so it adds partial rather than complete behavioral context.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
One-line purpose first, then the caveat that qualifies it, then parameter docs — a sensible front-loaded structure. The Args list is justified by 0% schema coverage, though the prose could be tightened slightly.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read-only listing tool with no annotations and no output schema, the description covers every parameter and the one behavior most likely to cause a wrong result (empty listings from instanced prims). It stops short of describing the returned prim entries or ordering, which would complete the picture.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, so the description must compensate and largely does: the Args block documents all six parameters, supplies examples for prim_type ('Mesh', 'Xform') and kind ('component', 'group'), defines depth as max traversal depth, and explains the non-trivial traverse_instance_proxies flag. It omits the role of the node_path requirement and root_path's '/' default, so it is not perfect.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('List USD prims on a stage') plus the scoping modifier ('with filtering'), so an agent knows exactly what the tool returns. It does not explicitly distinguish itself from near-siblings such as find_usd_prims or get_prims, so it falls short of the top band.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The instanced-geometry paragraph gives conditional guidance ('Set traverse_instance_proxies to list the prims under it'), which is genuine when-to-use context for one flag. However, there is no explicit guidance on when to pick this tool over find_usd_prims or get_usd_prim, leaving the main routing decision to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
load_sceneA
Open a Houdini hip file, or merge it — or named nodes from it — into the current scene.
Load warnings (missing assets and the like) come back in warnings.
A merge reports what arrived: merged_nodes, conflicts (a node that
already exists is merged under a new name, or overwritten in place with
overwrite_on_conflict=True) and not_found_in_file. node_paths are
absolute (/obj/building_v3) and bring their contents.
Args: file_path: Path to the hip file to open. merge: Merge into the current scene instead of replacing it. node_paths: With merge, the absolute node paths to merge; default everything. overwrite_on_conflict: With merge, overwrite same-named nodes instead of renaming the merged copy.
| Name | Required | Description | Default |
|---|---|---|---|
| merge | No | ||
| file_path | Yes | ||
| node_paths | No | ||
| overwrite_on_conflict | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and does so well: it discloses that load warnings arrive in `warnings`, that a merge replaces vs renames conflicting nodes depending on overwrite_on_conflict, and that node_paths are absolute and pull their contents. This is meaningful side-effect and conflict-handling detail beyond the schema.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the core action, followed by a scannable return-field list and Args block. Every sentence earns its place given the 0% schema coverage, though the prose is slightly verbose.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
No output schema exists, but the description names the return fields (warnings, merged_nodes, conflicts, not_found_in_file), so an agent knows what to expect. Combined with full per-parameter docs, nothing needed to call it correctly is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate, and its Args block documents all four parameters including the non-obvious interaction between merge, node_paths, and overwrite_on_conflict. It adds real semantics the bare schema does not.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource ('Open a Houdini hip file, or merge it — or named nodes from it — into the current scene') and clearly distinguishes open-vs-merge scope. An agent can separate this from siblings like new_scene, save_scene, and import_file 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.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explains the two modes precisely and ties each parameter to its condition ('With merge, ...'). It stops short of naming alternatives such as import_file or new_scene, so the when-not guidance is implied rather than explicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
lock_parameterC
Lock or unlock a parameter.
Args: node_path: Node path. parm_name: Parameter name. locked: True to lock, False to unlock.
| Name | Required | Description | Default |
|---|---|---|---|
| locked | Yes | ||
| node_path | Yes | ||
| parm_name | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It does not disclose what locking actually does (e.g., prevents edits/evaluation), whether the lock persists in the saved scene, what permissions or node state are required, or what the result looks like. For a mutation tool with zero annotation coverage this is a significant gap.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is short and front-loaded, with the core action stated in the first sentence. The Args block is somewhat redundant given the schema, but it does not bloat the definition.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 3-required-parameter mutation tool with no annotations and no output schema, the definition should explain at minimum what locking accomplishes and how paths are formatted. Neither is present, leaving the agent unable to predict the effect of the call.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate. 'node_path: Node path' and 'parm_name: Parameter name' merely expand the parameter names, adding no format or lookup guidance (e.g., expected path syntax). Only 'locked: True to lock, False to unlock' adds any real meaning.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb pair and resource ('Lock or unlock a parameter'), so the agent knows exactly what the tool does. However, it offers no differentiation from close siblings like set_parameter, link_parameters, or revert_parameter, which also manipulate parameter state.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no guidance on when to lock versus unlock, when locking is appropriate, or how this relates to alternatives such as link_parameters or set_parameter. The only usage-adjacent statement is the boolean interpretation of `locked`, which belongs to parameter semantics.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
log_statusA
Display a status message in Houdini's status bar.
Call this at the START of every major step so the user can follow along in real time without having to inspect tool call logs. Examples: "Creating base geometry...", "Wiring SOP chain...", "Setting up pyro simulation...", "Assigning materials...".
Args: message: Status message to display (keep it short and human-readable). severity: "message" (default), "important", "warning", or "error".
| Name | Required | Description | Default |
|---|---|---|---|
| message | Yes | ||
| severity | No | message |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It conveys that this is a benign, side-effect-free UI display operation for real-time user feedback, which is the key behavioral fact. It does not state a return value or whether the message is retained, but for a status-bar write that omission is minor.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the core action in one sentence, followed by usage guidance, examples, and a compact Args block. Every line earns its place with no redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a two-parameter, no-output-schema, annotation-free tool, the description covers purpose, timing, examples, and both parameters. Nothing essential is missing for correct invocation, though a note on whether messages persist or how they surface would fully close the loop.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate, and it does: it explains that message should be short and human-readable and enumerates the valid severity values (message/important/warning/error) that the schema itself leaves as a bare string. This adds real meaning beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (Display) and resource (status message in Houdini's status bar), which is unambiguous and distinct from all the read/compute siblings in the list. An agent can immediately tell this is the user-feedback/logging primitive.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly instructs to call it at the START of every major step, and gives four concrete example messages that illustrate the exact granularity expected. This is unusually prescriptive when/when-to-use guidance rather than vague context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
move_nodeC
Move a node to a different parent network.
Args: ctx: MCP context. node_path: Node path. dest_parent: Destination parent path.
| Name | Required | Description | Default |
|---|---|---|---|
| node_path | Yes | ||
| dest_parent | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full behavioral burden, yet it discloses almost nothing. It does not state whether the destination must exist, whether the source network must be unlocked, what happens to existing connections or wires, or whether the move is undoable — all key for a mutation tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The single summary sentence is well front-loaded and the whole thing is short. But the Args block is largely low-value restatement plus an irrelevant ctx entry, so it neither wastes much nor earns its space.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
A mutating tool with no annotations, no output schema, and 0% parameter coverage needs the description to do heavy lifting. It does not: no side effects, no failure modes, no return information, and only tautological parameter labels. Substantial gaps remain.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate, but the arg notes are near-tautological: 'node_path: Node path' and 'dest_parent: Destination parent path' restate the names without adding format, path syntax, or constraints (e.g. absolute vs relative paths). The 'ctx: MCP context' entry is framework boilerplate of no use to an agent.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource: 'Move a node to a different parent network.' That is clear and actionable. However it offers no differentiation from adjacent siblings like rename_node, copy_node, or change_node_type, which an agent must disambiguate on its own.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no when-to-use guidance, no alternative named, and no prerequisites. Nothing tells the agent why it would choose move_node over copy_node plus delete_node, or under what conditions a move is valid.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
new_sceneA
Create a new empty Houdini scene.
Args: save_current: Save the current scene before clearing.
| Name | Required | Description | Default |
|---|---|---|---|
| save_current | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden. It usefully discloses the key destructive trait — the current scene is 'cleared' and the save_current flag preserves it beforehand — but does not say whether the clear is undoable, what happens to unsaved work when save_current is false, or any permission/cost considerations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Very short and front-loaded with the core action; the Args block is the only slightly awkward element, but there is no wasted prose.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a destructive scene-reset tool with no annotations and no output schema, the description covers the essential action and the save flag but is thin on consequences (data loss, reversibility) that an agent should weigh before invoking.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, so the description must compensate, and it does: it explains that save_current means 'Save the current scene before clearing,' giving the boolean real meaning beyond the bare 'boolean, default false' in the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Create a new empty Houdini scene'), which is unambiguous. It distinguishes itself by implication from load_scene (loading an existing file), but never explicitly names a sibling, so it stops short of a 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The phrase 'empty scene' and 'before clearing' imply the use case (start fresh / reset the workspace), but there is no explicit when-to-use or when-not-to-use guidance relative to load_scene or save_scene. Usage is inferable rather than stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
pause_top_cookC
Pause cooking on a TOP network.
Args: ctx: MCP context. node_path: TOP node or TOPnet path.
| Name | Required | Description | Default |
|---|---|---|---|
| node_path | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full behavioral burden. It does not state whether the pause is persistent or transient, whether it can be resumed, what state is affected, or what happens if no cook is running. For a state-mutating operation this is a significant gap.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The purpose sentence is front-loaded and waste-free. The Args block, however, includes the boilerplate 'ctx: MCP context' which is noise rather than substance, slightly diluting an otherwise tight entry.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
No annotations, no output schema, and 0% parameter coverage leave the description as the only information source, yet it says nothing about return values, effect on queued work items, or how to resume cooking. Thin for a state-changing TOP operation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the schema documents nothing. The description adds one useful detail — node_path accepts either a TOP node or a TOPnet path — which is more than the schema gives, but it omits format examples (e.g. '/obj/geo1/mytop') or how a TOPnet path is resolved.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a concrete verb+resource: 'Pause cooking on a TOP network.' An agent can tell this is a state-changing operation on TOP cooking. However, it never distinguishes itself from the closely related siblings cook_top_node and cancel_top_cook, so the differentiation dimension is unmet.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no guidance on when to pause versus cancel or resume cooking, and no mention of prerequisites such as an in-progress cook being required. The only hint of scope is the phrase 'TOP network', which implies TOPs but does not route the agent among the three TOP-cook siblings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
playbar_controlC
Control playback: play, stop, or reverse.
Args: action: One of "play", "stop", or "reverse". real_time: Enable or disable real-time playback. fps: Frames per second.
| Name | Required | Description | Default |
|---|---|---|---|
| fps | No | ||
| action | Yes | ||
| real_time | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden, yet it says nothing about side effects: whether playback is blocking, whether stop resets the current frame, whether real_time overrides fps, or whether state persists across calls. It only restates the action verbs.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Short, front-loaded, and the Args block maps one-to-one onto the three parameters with no filler. The docstring-style formatting is slightly mechanical but costs nothing.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a three-parameter, no-annotation, no-output-schema tool the description is minimally adequate: parameters are covered but behavioral traits (blocking, state effects, interaction between real_time and fps) are absent, which is the main gap an agent would need filled.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate, and it does partially by enumerating the valid action strings (the schema has no enum) and glossing real_time and fps. It still omits defaults, the fps range/units, and what happens when real_time is null.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (control) and resource (playback) and enumerates the three actions, so an agent can tell it is the transport-control tool. It does not, however, distinguish itself from neighbors like set_frame, set_frame_range, or set_playback_range.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to use this versus the other playback-related siblings (set_frame, set_playback_range, frame_selection); the only hint is the action enum itself. The agent is left to infer that this is for starting/stopping transport while set_frame is for scrubbing.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
press_buttonA
Press a button parameter — "Stash Input", "Reload Geometry", an asset's own Build button — and read the node's errors and warnings afterwards.
The call holds until the callback returns, with no deadline. A callback
that opens a dialog blocks Houdini's main thread and this bridge with it;
read the button's script first if in doubt. A Python callback that
RAISES does not hang anything: the bridge runs it rather than
pressButton(), and its error comes back as this call's error.
callback_route says how the press ran: python, hscript or native (a
built-in action). For a Save to Disk or a render use write_cache /
start_render, which report a verdict.
A press usually only dirties the node, so errors/warnings are from
its last cook unless cook=True; without it needs_cook says whether
they are stale (a cook that failed leaves it True too). has_script_callback is False for built-in buttons that still
do work (File's Reload, Stash's Stash Input).
A parm that is not a button and has no callback is refused: pressing it does nothing. The small action button beside a field ("Create spare parameters" on a VEXpression) runs with action=True; an action that opens a picker holds the bridge like a dialog does.
Args: node_path: Node that owns the button. parm_name: The button parameter's name. arguments: Optional kwargs handed to the callback script; values must be int, bool, float or str. cook: Cook the node after the press so errors describe the result. action: Run the parm's action button (script_action) instead of its callback.
| Name | Required | Description | Default |
|---|---|---|---|
| cook | No | ||
| action | No | ||
| arguments | No | ||
| node_path | Yes | ||
| parm_name | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations exist, so the description carries the full burden and does so richly: the call blocks indefinitely with no deadline, dialogs block Houdini's main thread, a raising Python callback does not hang but surfaces as this call's error, and callback_route reports python/hscript/native. It also explains errors/warnings staleness via cook and needs_cook.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Dense and mostly front-loaded, with each paragraph covering a distinct concern (blocking, callback_route, cook/staleness, refusal). It is long and prose-heavy, so a skilled agent has to parse several sentences, but no sentence is dead weight.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a complex, blocking, side-effecting tool with no annotations and no output schema, the description covers blocking behavior, error/warning staleness, callback_route, has_script_callback, refusal semantics, and the action button. An agent has everything needed to call it correctly and interpret the result.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate, and it does: node_path, parm_name, arguments (with allowed value types int/bool/float/str), cook (cook so errors describe the result), and action (run script_action instead) are all explained with semantics beyond their names.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Press a button parameter') and instantly names concrete instances (Stash Input, Reload Geometry, Build button). It also distinguishes itself from siblings write_cache and start_render, so an agent can route correctly 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.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicit routing: use write_cache/start_render for saves and renders, read the button's script first if a callback might open a dialog, use action=True for the field's action button. It also states the refusal condition for non-button parms without callbacks. When-to-use, when-not, and alternatives are all present.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
redoA
Redo the last undone change(s) in Houdini.
Args: ctx: MCP context. steps: How many steps to redo (default 1).
| Name | Required | Description | Default |
|---|---|---|---|
| steps | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the burden. It conveys the core mutation (restores undone changes) but omits any state requirements, limits on available redo depth, or behavior when nothing has been undone. For a simple self-evident operation this is only mildly deficient.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The core sentence is front-loaded and efficient. The Args block is largely boilerplate, and the 'ctx: MCP context' line adds nothing since ctx is not in the schema, but overall the text is short.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a single-parameter, no-annotation, no-output-schema utility tool, the description is sufficient to call it correctly. Remaining gaps (redo-stack constraints, error behavior) are minor for an operation this simple.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0% and the schema gives only a bare 'steps' integer with default 1; the description compensates by explaining 'How many steps to redo (default 1)', adding meaning the schema lacks. The 'ctx' mention does not correspond to any schema parameter, a minor inconsistency.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb ('Redo') and resource ('the last undone change(s) in Houdini'), which clearly pairs with the sibling 'undo' tool via the word 'undone'. It does not explicitly name the undo tool, but the operation is unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is implied by the 'undone' phrasing — the agent infers it should be called after an undo — but there is no explicit when-to-use/when-not guidance or named alternative beyond the implicit undo pairing.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
reload_hdaC
Reload an HDA file from disk.
Args: ctx: MCP context. file_path: HDA file path.
| Name | Required | Description | Default |
|---|---|---|---|
| file_path | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden, yet it says nothing about side effects: whether existing HDA instances are refreshed or invalidated, whether unsaved node-level overrides are lost, or what permissions/state are required. 'Reload from disk' implies mutation of in-memory state, but none of this 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the core action in one short sentence, followed by a minimal Args block. The 'ctx: MCP context' entry is noise (it is not a schema parameter), but overall there is no padding.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a state-mutating tool with no annotations, no output schema, and an undocumented parameter, the description omits what an agent needs: side effects on live nodes, error behavior for a missing/invalid file, and any precondition. It is adequate only as a label, not as operating instructions.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The single parameter has 0% schema description coverage, so the description must compensate. It only restates the name with 'HDA file path' — no format, expected file type (.hda/.otl), path resolution rules, or whether a relative/absolute path is needed.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description gives a specific verb ('Reload') and resource ('HDA file') plus the source ('from disk'), which clearly separates it from unrelated siblings. However, it does not distinguish itself from close siblings like install_hda, update_hda, or reload_plugin, so an agent comparing those must infer the difference.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no guidance on when to reload versus reinstall (install_hda), update (update_hda), or reload a plugin (reload_plugin). The narrow sibling set makes this a real gap, since 'reload' could plausibly be confused with those operations.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
reload_pluginA
Re-import the plugin's Houdini-side code without restarting Houdini.
For developing this server: after editing its handlers, this picks the edit up in the running session. The MCP server's own tool definitions are not reloaded; the client has to reconnect for those.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the burden of disclosing behavior. It usefully states what is reloaded (Houdini-side plugin code) and what is not (MCP server tool definitions), but it does not cover side effects, permissions, error behavior, or whether the operation is reversible.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The definition is front-loaded with the core purpose and then adds essential caveats in two short sentences. Every sentence earns its place, and there is no redundant or filler content.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a zero-parameter development tool with no annotations or output schema, the description is largely complete: it explains what the tool does, when to use it, and its key limitation. A small gap remains around return behavior and explicit sibling differentiation, but nothing critical is missing for correct invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool takes no parameters, so per the rubric the baseline is 4. The description correctly does not discuss parameter semantics, and there is no schema detail that needs compensation.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource: re-importing the plugin's Houdini-side code without restarting Houdini. It is clear, but it does not explicitly differentiate itself from sibling tools such as reload_hda, leaving some room for confusion about which reload operation to choose.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives a clear context for use: after editing the server's handlers during development, this tool picks up the edits in the running session. It also notes that MCP server tool definitions are not reloaded and that a client reconnect is needed for those, but it does not name alternative sibling tools for related reload operations.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
rename_nodeC
Rename a node.
Args: ctx: MCP context. node_path: Node path. new_name: New node name.
| Name | Required | Description | Default |
|---|---|---|---|
| new_name | Yes | ||
| node_path | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full behavioral burden. It implies a mutation but says nothing about whether renames break existing parameter references/expressions, whether the rename is undoable, what errors arise from invalid paths, or whether names must be unique.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is short and front-loaded with the action, which is good, but the Args block is a boilerplate signature dump including 'ctx: MCP context.' that conveys no usable information to an agent.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a two-parameter mutation tool with no annotations and no output schema, the description should explain node_path format, naming constraints, and rename side effects. None of these are covered, leaving the agent under-informed.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate, but it merely restates the parameter names ('node_path: Node path.', 'new_name: New node name.') with no format, path syntax, or constraint details. It adds essentially nothing beyond the schema's own titles.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource ('Rename a node'), which is clear and distinct from siblings like move_node or set_node_color. However, it does not differentiate itself from related siblings such as change_node_type or set_parameter, which also mutate node identity/state.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no when-to-use guidance, no prerequisites, and no mention of alternatives such as delete_node/copy_node for structural changes. The agent must infer all routing from the tool name alone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
render_node_networkB
Capture a screenshot of a node's network editor view.
Args: node_path: Node path to focus on. output_path: Image file path. Default: a new PNG in the temp dir.
| Name | Required | Description | Default |
|---|---|---|---|
| node_path | Yes | ||
| output_path | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the burden. It does disclose meaningful behavior: the tool writes an image file to disk and defaults to a new PNG in the temp dir when no path is given. That said, it omits whether it returns the path, requires an active Houdini session, or blocks until render completes.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The one-line purpose is front-loaded and the two Args entries are terse. The Args block is slightly redundant with the schema but costs little and stays focused.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no annotations and no output schema, the description must stand alone. It covers the essential input contract but says nothing about the return value, error behavior, or session prerequisites, leaving the agent to infer how to consume the result.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate. It does give brief meaning for both parameters ('node path to focus on', 'image file path' plus the temp-dir default), but leaves the node path format and expected image extension unspecified, so it only partially fills the gap.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (capture a screenshot) and resource (a node's network editor view), so an agent knows exactly what it produces. However, it never distinguishes itself from close siblings like capture_network_editor or capture_screenshot, leaving the agent to guess which of the near-identical capture tools to pick.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no statement of when to use this tool versus capture_network_editor, capture_screenshot, render_viewport, or render_quad_view. No preconditions, no exclusions, no routing guidance of any kind.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
render_quad_viewB
Capture all four viewport panes to separate images.
Args: output_path: Base image path; viewport names are appended. Default: a new PNG in the temp dir. resolution: [width, height] in pixels.
| Name | Required | Description | Default |
|---|---|---|---|
| resolution | No | ||
| output_path | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden, and it does disclose two useful behaviors: four separate images are produced, and viewport names are appended to the base path (with a temp-dir PNG default). It omits whether existing files are overwritten, what permissions are needed, and whether the operation changes scene state.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The purpose sentence is front-loaded and the Args block is compact with no filler. The docstring-style indentation is slightly awkward but wastes no words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a two-parameter screenshot tool with no annotations and no output schema, the description covers both parameters and the multi-file output pattern, but leaves gaps around return value (paths of the created images), overwrite behavior, and the prerequisite that the quad layout be active.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, so the description must compensate, and it largely does: output_path is explained as a base path with viewport names appended plus its default, and resolution is documented as [width, height] in pixels. Format details for the resolution array are only implied by the example rather than fully specified.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The first sentence states a concrete verb and resource ('Capture all four viewport panes to separate images'), which is specific enough to distinguish it from the single-viewport sibling render_viewport. However, it never names or contrasts with that sibling explicitly, so an agent must infer the difference from the wording alone.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no when-to-use guidance, no prerequisites, and no mention of alternatives such as render_viewport or capture_screenshot. The agent is left to infer that 'quad view' means the four-pane layout must be active.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
render_sheetA
Render frames start..end with the OpenGL ROP and tile them into one image.
One image shows motion a single frame cannot: a sim's spread, a camera move. Needs no viewport, so it works in a headless session too. A snapshot of the scene as it is now (unsaved edits included, the session untouched) renders in a separate hython, since a second OpenGL render in one hython crashes on Houdini 22; that hython takes a license seat while it runs. Frames are labelled. Objects (/obj) only, not a LOP stage.
Args: start: First frame. end: Last frame. step: Frame step; at most 64 frames in all. camera: Camera object path. Default: the scene's only camera. resolution: [width, height] of each tile. Default [320, 240]. columns: Tiles per row. Default: about square. output_path: Sheet image path. Default: a new PNG in the temp dir.
| Name | Required | Description | Default |
|---|---|---|---|
| end | Yes | ||
| step | No | ||
| start | Yes | ||
| camera | No | ||
| columns | No | ||
| resolution | No | ||
| output_path | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and does so unusually well: it states no viewport is needed (headless-capable), that the scene is not modified ('session untouched'), that a snapshot spawns a separate hython consuming a license seat, and warns of a Houdini 22 crash on a second in-process OpenGL render. None of this is inferable from the schema.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the core action and then Args, so structure is sound; the middle prose is slightly florid ('One image shows motion a single frame cannot') but each sentence still carries operative information about headless behavior, license use and the crash workaround.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 7-parameter, annotation-free, output-schema-free tool, the description covers purpose, behavior, constraints and every parameter. The only minor gap is that it never says what the call returns (e.g. the written image path), which an agent must otherwise discover by inference.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the Args block is the only parameter documentation, and it covers all 7 parameters with defaults (camera, resolution [320,240], columns, output_path, step=1) plus a real constraint ('at most 64 frames in all'). This fully compensates for the empty schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The opening sentence gives a specific verb (render), resource (frames start..end), mechanism (OpenGL ROP) and output form (tiled into one image). It is clearly distinguishable from siblings like render_viewport, render_quad_view and start_render, which do not produce a tiled contact sheet.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It supplies a clear use case ('motion a single frame cannot: a sim's spread, a camera move') and a hard scope exclusion ('Objects (/obj) only, not a LOP stage'). It stops short of naming sibling alternatives (e.g. render_viewport for a live viewport, start_render for a full-quality render), so routing is inferred rather than explicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
render_viewportB
Capture the current 3D viewport to an image file.
Args: output_path: Image file path. Default: a new PNG in the temp dir. resolution: [width, height] in pixels. camera: Camera node path. settle_seconds: Wait this long before capturing, without blocking Houdini, so a Karma viewport can converge after a change. Use this instead of a shell sleep between calls. Capped at 120.
| Name | Required | Description | Default |
|---|---|---|---|
| camera | No | ||
| resolution | No | ||
| output_path | No | ||
| settle_seconds | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description must carry behavioral disclosure itself. It does add real value: the non-blocking nature of settle_seconds ('without blocking Houdini'), the 120 second cap, and the default output behavior (new PNG in temp dir). It does not disclose what is returned, whether an existing file is overwritten, or whether a viewport must exist.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded one-line summary followed by a compact Args block; every entry earns its place. The indented multi-line entry for settle_seconds is slightly verbose but justified by the non-obvious behavior it documents.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema and no annotations, the description is adequate for calling the tool but incomplete on outcomes: it never says what is returned or how failures (no visible viewport, invalid path) are surfaced. Family-level routing cues for capture vs render tools are also absent.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate, and it largely does: all four parameters are documented, including the [width, height] format for resolution, the meaning of camera as a node path, and the semantics plus cap for settle_seconds. It adds meaning well beyond the bare schema, though camera path syntax and resolution bounding are only loosely specified.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource: 'Capture the current 3D viewport to an image file.' An agent can tell what it does, but the description never distinguishes it from near-siblings like capture_screenshot, render_quad_view, or capture_network_editor, which an agent must choose between.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The only usage guidance is parameter-scoped: settle_seconds says 'Use this instead of a shell sleep between calls.' There is no guidance on when to prefer this tool over other capture/render tools, nor any prerequisite (e.g. a viewport must be open) for invoking it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
reorder_inputsC
Reorder the input connections of a node.
Args: ctx: MCP context. node_path: Node path. new_order: New input ordering (e.g. [1, 0] swaps first two).
| Name | Required | Description | Default |
|---|---|---|---|
| new_order | Yes | ||
| node_path | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden of behavioral disclosure. It states only that inputs are reordered, without explaining whether existing connections are preserved, whether the operation is reversible, what permissions are needed, or what errors can occur. This is a significant gap for a mutation tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is short and front-loads the purpose, which is good. However, the Args list includes 'ctx: MCP context,' which is not a schema parameter and could confuse an agent about what it must supply. The remaining args simply repeat schema titles, so there is some waste.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
This is a mutation tool with no annotations, no output schema, and 0% schema description coverage. The description provides the basic action and a partial parameter hint, but omits prerequisites, side effects, error conditions, and usage context. It is not complete enough for safe and correct invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate. It does add meaning for new_order with the example '[1, 0] swaps first two,' but node_path is only described as 'Node path' with no format or example, and it does not clarify whether indexing is 0-based. Partial compensation warrants a 3.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource: 'Reorder the input connections of a node.' This clearly identifies the operation and distinguishes it from siblings like connect_nodes or disconnect_node. It does not explicitly name alternatives, so it falls short of a full 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no guidance on when to use this tool versus connect_nodes, disconnect_node, or other input-management tools, nor any prerequisites such as requiring an active Houdini session or a valid node context. The purpose implies the use case, but no exclusions or alternatives are given.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
reset_simulationC
Reset the simulation to its initial state.
Args: node_path: DOP network node path.
| Name | Required | Description | Default |
|---|---|---|---|
| node_path | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full behavioral burden. It says the simulation is reset to its initial state, which implies mutation/destruction of current simulation state, but it does not disclose side effects, permission requirements, whether caches or results are cleared, or what happens to existing DOP data.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded, with the core action stated first in one sentence. The Args section is minimal and appropriate for a single required parameter.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simulation-state mutation tool with no annotations, no output schema, and numerous simulation-related siblings, the definition is incomplete. It does not cover usage context, side effects, relationship to step_simulation, or state handling, leaving the agent with too little information to call it confidently.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate for the single parameter. It identifies node_path as a 'DOP network node path,' which adds meaningful context beyond the schema title alone, but it still lacks format, expected node type constraints, or examples.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource: 'Reset the simulation to its initial state.' This clearly distinguishes reset behavior from sibling tools like step_simulation or get_simulation_info. However, it does not explicitly differentiate itself from all simulation-related siblings or explain what 'initial state' means operationally.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no when-to-use guidance, no prerequisites, and no alternatives. It does not tell the agent when resetting is appropriate versus stepping, inspecting, or clearing simulation state.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
revert_parameterB
Revert a parameter to its default value.
A default that is itself an expression comes back, named in
default_expression with its default_expression_language;
expression_error says when it does not evaluate.
A locked parameter cannot be reverted; the error names what sets the lock.
Args: node_path: Node path. parm_name: Parameter name.
| Name | Required | Description | Default |
|---|---|---|---|
| node_path | Yes | ||
| parm_name | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and does well: it discloses that an expression-valued default is returned via default_expression/default_expression_language, that expression_error reports evaluation failure, and that locked parameters error with the locking source named. It still omits whether the revert is undoable or how keyframes/expressions are affected.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The core action is front-loaded in the first sentence, and the following sentences on expression defaults and lock errors each carry real information. The trailing Args block is pure redundancy against the schema and is the only waste.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a two-parameter mutation tool with no annotations and no output schema, the description covers the meaningful edge cases (expression defaults, evaluation errors, locked parameters) an agent needs. Only the lack of failure/undo semantics and parameter format detail keeps it from being fully complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate, but the Args block merely restates the parameter names ('node_path: Node path.', 'parm_name: Parameter name.') with no format, path syntax, or example values. It adds essentially nothing beyond the schema titles.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The first sentence gives a specific verb+resource+outcome: 'Revert a parameter to its default value.' It is clearly distinguishable from sibling mutators like set_parameter or lock_parameter, though it never names those siblings explicitly.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Only one conditional is given ('a locked parameter cannot be reverted'), which is a constraint rather than usage direction. There is no guidance on when an agent should revert versus set_parameter, or what prerequisites (unlocking) are needed first.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
run_shelf_toolA
Run a shelf tool and report the nodes it created.
A tool that asks for a viewport selection or a dialog is retried once as
a Ctrl+click, Houdini's "place immediately" (ran_as_ctrl_click): the
Crowds Simulate tool then builds its whole default crowd. A tool that
still asks (the FLIP ocean layer, collide-with) is refused, since through
the bridge it would block Houdini until someone clicks: read the recipe
with get_shelf_tool_script and build the nodes with build_network.
Args: tool_name: Internal tool name, from list_shelf_tools. kwargs: Overrides merged into the synthetic kwargs the script reads. parent_path: An extra network to watch for new nodes. /obj, /stage, /out, /mat and /img are always watched, because a shelf tool is free to build in more than one of them: largeOcean creates both a geo in /obj and a LOP in /stage.
| Name | Required | Description | Default |
|---|---|---|---|
| kwargs | No | ||
| tool_name | Yes | ||
| parent_path | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations exist, so the description carries the full burden and largely meets it: it discloses the retry-as-Ctrl+click behavior (ran_as_ctrl_click), the Crowds Simulate example, and that blocking dialog tools are refused rather than left hanging. It also explains that certain networks are always watched. It omits any auth/permission context, but the operational behavior an agent needs is well covered.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Purpose is front-loaded in the first sentence, followed by the behavioral caveats and then an Args block. It is longer than typical but most sentences carry real information; the parent_path explanation is somewhat verbose relative to its weight.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a complex, annotation-free, 3-parameter tool with no output schema, the description supplies the triggering behavior, failure handling, alternative tools, and per-parameter meaning. The only meaningful gap is the exact shape of the reported node list, which is not described, though the core calling path is complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate, and it does: tool_name is sourced from list_shelf_tools, kwargs is explained as overrides merged into the synthetic kwargs the script reads, and parent_path is explained as an extra network to watch with the always-watched defaults enumerated. The kwargs override semantics could be more concrete, but all three parameters are given meaning beyond the bare schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The opening sentence gives a specific verb and resource ('Run a shelf tool') and states the outcome ('report the nodes it created'). It also implicitly distinguishes itself from siblings by naming get_shelf_tool_script (read the recipe) and build_network (build manually) as separate paths.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives explicit conditions and alternatives: dialog/selection-asking tools that survive the Ctrl+click retry are refused, and the agent is routed to get_shelf_tool_script plus build_network instead. It also clarifies the Ctrl+click retry path. It does not state the general case for when to reach for a shelf tool versus building nodes outright, but the failure-mode routing is unusually clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
sample_geometryC
Sample evenly distributed points from a SOP node's geometry.
Args: node_path: Node path. sample_count: Number of points to sample. seed: Random seed.
| Name | Required | Description | Default |
|---|---|---|---|
| seed | No | ||
| node_path | Yes | ||
| sample_count | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It hints that sampling is even/random-seeded via the seed parameter, but does not state that this is a read-only, non-mutating operation, nor what the return value looks like (point positions? indices? attribute values?).
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence plus a brief Args list; nothing is bloated. The Args entries are near-useless restatements, but the structure itself is clean and appropriately sized.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with no annotations, no output schema, and 0% parameter documentation, the description is too thin: it omits return format, whether the node is evaluated/cooked, and how the seed affects determinism. An agent has enough to guess the call but not to use it confidently.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate, but the Args block only restates parameter names tautologically ('node_path: Node path.', 'sample_count: Number of points to sample.'). It adds no format, range, or behavioral meaning beyond the schema types and defaults.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource: sampling evenly distributed points from a SOP node's geometry. This is distinguishable from siblings like sample_volume and get_points. It does not, however, explicitly contrast itself with those neighbors.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no guidance on when to use this tool versus alternatives such as get_points or sample_volume, nor any preconditions (e.g. does the node need to be cooked?). The reader must infer usage from the name alone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
sample_volumeA
Read named volume fields at world positions, or at another SOP's points.
"What does the collision SDF read where the particles are" is one call with from_node, and adds no node to the scene. A VDB SDF reads its background (the band width) outside its narrow band, not the distance.
Args: node_path: SOP holding the volumes. fields: Volume names (the name attribute), e.g. ["density"]. positions: [[x, y, z], ...] in world space. from_node: SOP whose points are the positions, instead of positions. limit: Values are returned up to this many positions; the summary always is. bins: Histogram bin count, or a list of bin edges, for the summary. threshold: Count the samples above this value.
| Name | Required | Description | Default |
|---|---|---|---|
| bins | No | ||
| limit | No | ||
| fields | Yes | ||
| from_node | No | ||
| node_path | Yes | ||
| positions | No | ||
| threshold | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations the description carries the full burden, and it does disclose non-obvious behavior: the VDB SDF returns its background (band width) outside the narrow band rather than true distance, and the call 'adds no node to the scene'. It omits return-shape and any cost/performance context, so it is strong but not exhaustive.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loads the core capability in one sentence, follows with a motivating example, then a compact Args list — every block earns its place. The example sentence is slightly convoluted but the structure is sound.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 7-parameter tool with no annotations and no output schema, the definition covers purpose, usage scenario, side effects, and every input's meaning. It hints at the summary (limit/bin/threshold) but never describes the actual return structure, which is the one remaining gap given no output schema exists.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate, and its Args block documents all seven parameters with real meaning: fields as the 'name' attribute, positions in world space, from_node overriding positions, limit applying to values but never the summary, bins as count-or-edges, and threshold as an above-value count. This fully bridges the schema gap.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Read named volume fields') plus the two supported point sources ('at world positions, or at another SOP's points'). This cleanly separates it from sample_geometry and compare_volumes without the agent 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.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides a concrete scenario ('what does the collision SDF read where the particles are') mapped to a specific parameter (from_node), and clarifies the from_node-vs-positions choice. It stops short of naming when NOT to use it or pointing to get_volume_info / compare_volumes as alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
save_sceneB
Save the current Houdini scene to disk.
Args: file_path: Destination path; defaults to the current hip file.
| Name | Required | Description | Default |
|---|---|---|---|
| file_path | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries full behavioral burden. It usefully discloses that omitting file_path saves over the current hip file (a real mutation/default behavior beyond the schema's null default), but says nothing about overwrite prompts, permission requirements, failure modes, or what is returned on success.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded single-sentence purpose followed by a compact Args block with zero filler. Slightly terse for a mutation tool, but no sentence is wasted.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a one-parameter tool with no output schema this is close to adequate, but as an unannotated mutation it leaves out save-as vs overwrite semantics and any return/confirmation behavior, which an agent would want before invoking.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate, and it does: it explains that file_path is the destination path and that it defaults to the current hip file when omitted. That is meaningful semantics beyond the bare anyOf/null schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource: 'Save the current Houdini scene to disk.' An agent immediately knows it is a write-to-disk operation on the open scene. It does not explicitly distinguish itself from load_scene, new_scene, or export_file among the many siblings, but the intent is unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No when-to-use guidance is given. It does not say when to save versus export_file, when a new_scene is needed first, or whether the scene must be connected/open. The only contextual hint is that file_path falls back to the current hip file.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_helpA
Search the running Houdini's own documentation — concepts, workflows, VEX functions, expression functions, HOM API, and every effects manual SideFX ships. Version-exact, straight from the install.
Use this BEFORE improvising: when unsure how a workflow is meant to be done ("pyro shaping", "vellum constraints"), what a VEX or expression function does, or what a Solaris/TOPs concept means. Follow up with get_help_page on a result path.
Args: query: Search words (all must match a page). scope: Optional corpus, named after the archive. Every help archive in the install is searchable, which on a full 22.0 is 47 of them. The ones worth knowing by name: "nodes", "vex", "expressions", "hom", "solaris", "tops", plus the workflow manuals "pyro", "fluid", "vellum", "destruction", "grains", "crowds", "model", "copy", "assets", "render", "shade", "anim", "character", "ref", "shelf". Omit to search all. limit: Max results.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| query | Yes | ||
| scope | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full behavioral burden. It discloses valuable context: the documentation is version-exact from the running install, every help archive is searchable, and there are 47 archives on a full 22.0 install. It does not explicitly describe read-only safety or the full return shape, but for a documentation search tool the disclosed source, matching semantics, and scoping behavior are strong.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The definition is front-loaded with purpose and usage, then moves into a clear Args block. The long scope list is justified because the schema provides no enum, and every listed corpus name has practical selection value.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
There is no output schema, and the description only indirectly indicates that results include paths suitable for get_help_page. Otherwise, purpose, usage, and all three parameters are covered richly enough for correct invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate, and it does. query is explained as search words that must all match a page; scope is explained as an optional corpus with many useful names and the default behavior of searching all; limit is identified as max results.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The definition states a specific verb and resource: search Houdini's own installed documentation across concepts, workflows, VEX, expressions, HOM, and effects manuals. It distinguishes itself from the sibling get_help_page by explaining that search finds result paths and get_help_page is the follow-up. An agent can tell exactly what this tool does 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.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It explicitly says to use this BEFORE improvising and gives concrete triggers: unsure how a workflow is done, what a VEX/expression function does, or what a Solaris/TOPs concept means. It also names the follow-up alternative, get_help_page, and the condition for using it (a result path).
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
set_cop_flagsC
Set flags on a COP node.
Args: node_path: Path to the COP node. display: Display flag state. export_flag: Render/export flag state. compress: Compress flag state.
| Name | Required | Description | Default |
|---|---|---|---|
| display | No | ||
| compress | No | ||
| node_path | Yes | ||
| export_flag | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries full behavioral burden, yet it says nothing about what happens when a flag argument is omitted (the schema defaults to null), whether flags are overwritten or toggled, permissions required, or the return value. The word 'state' hints that arguments are boolean values but no more.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
One front-loaded summary sentence followed by a compact Args list with no filler. It is efficient, though the Args block largely duplicates what the schema titles already convey.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a mutation tool with no annotations, no output schema, and 0% parameter coverage, the description omits critical operational context: behavior when flags are omitted, whether existing flags are replaced, and what the call returns. It is not sufficient for an agent to invoke confidently.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate, and it does list all four parameters with brief meaning. Nevertheless most entries merely restate the parameter names ('Compress flag state'), adding little beyond the schema; only 'export_flag: Render/export flag state' adds genuine meaning, and the null-omission semantics are never explained.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Set flags on a COP node'), which is clear and actionable. However, it does not differentiate from the generic sibling set_node_flags, nor explain what makes COP flags distinct, so an agent has no textual basis for choosing between the two.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no when-to-use guidance, no prerequisites, and no mention of the sibling set_node_flags which appears to overlap in function. The agent must infer that this is the COP-specific variant from the name alone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
set_current_networkA
Navigate the network editor to a network; the viewer follows it in.
Call it on the network you build in. By default the viewer then hides every other object (the viewport's Y hotkey, no display flag touched), so the work is seen on its own and the rest of the scene does not cook.
Args: network_path: Network path to navigate to. other_objects: "hide" (default), "ghost", "show", or null to leave the viewer as it is.
| Name | Required | Description | Default |
|---|---|---|---|
| network_path | Yes | ||
| other_objects | No | hide |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and delivers real value: it discloses that other objects are hidden by default (equivalent to the viewport Y hotkey), that no display flag is touched, and that the rest of the scene stops cooking. These are non-obvious side effects an agent could not infer. Return/response behavior is not described, keeping it from 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the core action, followed by the usage note and a clean Args block. Every sentence carries information, including the parenthetical about the Y hotkey and the display flag, with no filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a two-parameter tool with no annotations and no output schema, the description covers purpose, default behavior, side effects, and all meaningful parameter values. It could say more about what happens on an invalid path or whether navigation is undoable, but it is sufficient to invoke correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, so the description must compensate, and it largely does: it enumerates the four meaningful values of other_objects ('hide', 'ghost', 'show', null) with their semantics, which the schema does not provide. network_path is only restated as 'Network path to navigate to', adding little, which caps the score below 5.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Names a specific verb and resource ('Navigate the network editor to a network') and adds the viewer-follow behavior, so an agent knows exactly what happens. It does not, however, distinguish itself from adjacent siblings such as set_viewer_context or set_viewport_display, which is what a 5 would require.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
'Call it on the network you build in' gives clear usage context and the condition under which the default hiding behavior applies. There are no explicit exclusions or named alternatives, so it falls short of a 5 but is more than implied guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
set_current_takeC
Set the current take by name.
Args: name: Take name to make current.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full behavioral burden. 'Set' implies a mutation, but the description does not disclose side effects, undo behavior, error conditions for missing takes, or whether the operation is idempotent.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is very short and front-loads the action. The argument block is minimal and relevant, though the overall structure is essentially just a restated one-sentence purpose.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a one-parameter setter with no output schema and no annotations, the description gives enough to invoke the tool correctly by name. However, it leaves behavioral context such as error handling and state effects unstated.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate. It explains that 'name' is the take name to make current, which adds meaning over the bare 'Name' title, but it omits formatting, case sensitivity, or resolution behavior for the name.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource: setting the current take by name. It is clear what the tool does, but it does not distinguish itself from siblings such as get_current_take, list_takes, or create_take.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives no guidance on when to use this tool instead of alternatives like get_current_take or list_takes. It also omits prerequisites, such as whether the named take must already exist.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
set_detail_attribB
Set a detail attribute on a SOP node.
Appends an Attribute Create SOP after the node and moves the display flag to it; the result includes the new node's path.
Args: node_path: Node path. attrib_name: Attribute name. value: Value to set.
| Name | Required | Description | Default |
|---|---|---|---|
| value | Yes | ||
| node_path | Yes | ||
| attrib_name | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and does disclose the key non-obvious behavior: it appends an Attribute Create SOP after the node, moves the display flag to it, and returns the new node's path. This tells the agent the original node is not mutated in place. It still omits failure modes and whether the operation is undoable.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the core purpose, then the side effects, then a compact Args block. Every sentence carries information; the args re-statements are low-value but brief. No padding or hedging.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For an unannotated mutation tool with no output schema, the description covers the main operation and states the return includes the new node's path. However, it leaves parameter formats and the semantics of 'detail' attributes (versus point/prim attributes) unspecified, so an agent still has open questions.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate for all three undocumented parameters. The glosses ('Node path.', 'Attribute name.', 'Value to set.') merely restate the parameter names, adding no format, attribute-class, or type-constraint guidance. With a polymorphic 'value' accepting scalars or arrays, this is a real gap.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource ('Set a detail attribute on a SOP node'), which is precise enough to distinguish it from generic setters like set_parameter or create_node. It does not explicitly differentiate itself from the near-neighbor set_usd_attribute, but the Houdini-specific 'detail attribute on a SOP node' framing is concrete and actionable.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is only implied: the agent can infer this is for stamping a detail-level attribute onto SOP geometry. No alternatives are named (e.g., versus set_parameter, create_wrangle, or set_usd_attribute) and there is no statement of when not to use it. Adequate but with clear gaps.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
set_expressionC
Set an expression on a parameter.
Args: node_path: Node path. parm_name: Parameter name. expression: Expression string. language: "hscript" (default) or "python".
| Name | Required | Description | Default |
|---|---|---|---|
| language | No | hscript | |
| node_path | Yes | ||
| parm_name | Yes | ||
| expression | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden of behavioral disclosure. It mentions the language option and default but omits critical mutation behavior: whether an existing expression is overwritten, error conditions, permission requirements, or side effects. This is a significant gap for a write operation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is short and front-loaded with the main purpose. The args list is structured and each line is brief, though the parameter labels are somewhat redundant with the schema titles given the lack of schema descriptions.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a mutation tool with four parameters, no annotations, and no output schema, the description is incomplete. It lacks usage context, prerequisites, error handling, and side-effect disclosure, leaving the agent unable to call it confidently in complex scenarios.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate. It lists all four parameters with brief labels and provides allowed values and default for 'language' ('hscript' or 'python'), which adds some value. However, node_path, parm_name, and expression are only minimally described, leaving format expectations unclear.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource: 'Set an expression on a parameter.' This is clear and distinguishable from most siblings. However, it does not explicitly differentiate from related tools like get_expression or set_parameter, which limits it to a 4.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no guidance on when to use this tool versus alternatives. The description only lists arguments and does not mention prerequisites, such as whether the node or parameter must already exist, or how it relates to get_expression or set_parameter.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
set_frameC
Set the current frame in the timeline.
Args: frame: Frame number.
| Name | Required | Description | Default |
|---|---|---|---|
| frame | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It confirms a state mutation ('Set the current frame') but says nothing about side effects such as triggering re-evaluation/cook, valid frame bounds, or return behavior. For a mutation tool with zero annotation coverage, this is a notable gap.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The one-line purpose is front-loaded and tight, but the 'Args:' block duplicates the schema's parameter definition without adding information, slightly wasteful though not egregious.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple one-parameter setter, the absence of annotations and output schema means the description should cover evaluation side effects, valid ranges, and relationship to sibling range-setting tools. None of that is present, leaving the definition under-complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate, but its 'frame: Frame number.' merely restates the parameter name and title. It does not clarify whether the value is integer-only (the schema types it as 'number', allowing fractions), the acceptable range, or how it relates to the global timeline.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a clear verb+resource ('Set the current frame in the timeline') that an agent can immediately understand. However, it offers no differentiation from close siblings like set_frame_range, set_playback_range, or get_frame, so scope against alternatives must be inferred.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to use this versus set_frame_range, set_playback_range, or related timeline tools. It never states prerequisites (e.g., a scene must be loaded) or context of use; usage is entirely implied.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
set_frame_rangeC
Set the global frame range.
Args: start: Start frame. end: End frame.
| Name | Required | Description | Default |
|---|---|---|---|
| end | Yes | ||
| start | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations are absent, so the description carries the full burden. It implies a mutation but says nothing about whether the change is persisted to the scene, how it interacts with existing keyframes/playback range, or whether it requires a connected Houdini session.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded single-sentence purpose followed by a terse Args list; nothing extraneous. Slightly boilerplate in the Args repetition but efficient overall.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
A mutation tool with no annotations, no output schema, and 0% schema coverage should explain side effects and the relationship to playback/keyframe state. Instead it provides only the minimal restated signature.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate. The Args block only restates the parameter titles ('start: Start frame', 'end: End frame') with no units, frame-rate assumptions, ordering constraints, or valid range.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a concrete verb and resource ('Set the global frame range'), which is clearly distinct from keyframe/frame-read siblings. However, it does not distinguish itself from the sibling set_playback_range, leaving the boundary between the two range-setting tools to inference.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No when-to-use guidance, no prerequisites, and no mention of the sibling set_playback_range or set_frame that an agent could confuse this with. The agent must guess whether this affects the whole scene or just playback.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
set_hda_interfaceA
Author an HDA's Type Properties interface in one call.
Use this for the asset's TYPE interface — tab folders, strict ranges,
ordered menus, Hide/Disable When. create_spare_parameter is a different
thing: it adds parameters to one node instance and never reaches the type.
Each entry of parameters is a dict:
name, label, type (int|float|string|toggle|menu|folder),
default, min, max, min_strict, max_strict, components,
menu_items ([value, label] pairs or plain strings),
folder_type (tabs|simple|collapsible|radio) + children for folders,
hide_when / disable_when (Houdini conditionals), help.
Example — a Controls tab whose Bevel disappears for a single stud: [{"name": "controls", "label": "Controls", "type": "folder", "children": [ {"name": "stud_count", "type": "int", "default": 4, "min": 1, "max": 8, "min_strict": True, "max_strict": True}, {"name": "bevel", "type": "float", "default": 0.02, "min": 0.0, "max": 0.1, "hide_when": "{ stud_count == 1 }"}, {"name": "material", "type": "menu", "menu_items": [["plastic", "Plastic"], ["metal", "Metal"]]}]}]
It is edit_hda_interface with one insert per entry: names already in the
interface are refused before anything is written, and the reply is read
back off the definition — ops[].stored, renamed_by_houdini (a tab
folder joins the existing tab set's naming series), not_found_after_write,
instance_parms_missing and instance_expression_errors.
Args:
ctx: MCP context.
node_path: An instance of the HDA whose definition is edited.
parameters: Interface spec (see above). create_spare_parameters'
spelling (parm_name, parm_type, default_value) is accepted too.
replace: Start from an empty interface. Built-in parameters of the node
type cannot be removed: Houdini puts them back
(reinstated_by_houdini).
dry_run: Validate and report the plan without writing.
| Name | Required | Description | Default |
|---|---|---|---|
| dry_run | No | ||
| replace | No | ||
| node_path | Yes | ||
| parameters | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and largely meets it: it discloses that existing names are refused before any write, that built-in parameters are reinstated by Houdini, that dry_run validates without writing, and it enumerates the read-back fields (ops[].stored, renamed_by_houdini, not_found_after_write, instance_parms_missing, instance_expression_errors). It stops short of describing failure modes outside the write path, but is unusually informative for a mutation tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
It is long, but front-loaded with a one-line purpose, then the sibling distinction, the spec, a concrete example, write semantics and args. The worked example and read-back field list earn their space; only minor tightening is possible.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
No output schema exists, so the description supplies the return semantics itself (ops[].stored, renamed_by_houdini, not_found_after_write, etc.). Combined with the exhaustive `parameters` spec and write/refuse behavior, an agent has everything needed to call this correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, so the description must compensate and does: it documents ctx, node_path, replace and dry_run by name, and gives a full field-by-field spec for the `parameters` entries (name, label, type, default, min/max, min_strict/max_strict, components, menu_items, folder_type+children, hide_when/disable_when, help), plus an accepted alternate spelling from create_spare_parameters.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Author an HDA's Type Properties interface') and immediately distinguishes it from the sibling create_spare_parameter, which 'adds parameters to one node instance and never reaches the type.' An agent can route between the two 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.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly says when to use it ('for the asset's TYPE interface — tab folders, strict ranges, ordered menus, Hide/Disable When') and names the alternative that must not be used instead (create_spare_parameter). It also clarifies the relationship to edit_hda_interface and the replace/dry_run modes.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
set_hda_section_contentC
Write content to a specific section in an HDA definition.
Args: ctx: MCP context. node_path: Node path. section_name: Section name. content: Section content.
| Name | Required | Description | Default |
|---|---|---|---|
| content | Yes | ||
| node_path | Yes | ||
| section_name | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full behavioral burden, but it only says 'Write content.' It does not disclose whether existing section content is overwritten, whether the HDA must be installed/editable or dialogue-locked, what permissions are needed, or whether the change is undoable. For a mutation tool this is a substantial gap.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The purpose sentence is front-loaded and brief, but the trailing Args block is boilerplate that duplicates the schema titles verbatim and even documents a non-existent 'ctx' parameter, so it wastes space without earning it.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
This is a mutation tool with no annotations, no output schema, and 0% parameter coverage. The description omits write semantics, preconditions, and error behavior, leaving the agent without enough context to invoke it safely or correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description should compensate for the bare schema. Instead the Args block restates each name as a tautology ('node_path: Node path.', 'section_name: Section name.', 'content: Section content.'), adding no format, path syntax, or valid values. It also lists a 'ctx' arg that is not a real parameter.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource: 'Write content to a specific section in an HDA definition.' An agent can tell this is the write counterpart to get_hda_section_content. It doesn't explicitly name siblings or contrast itself, so it stops short of a 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No when-to-use guidance, no prerequisites, and no mention of alternatives such as get_hda_section_content, get_hda_sections, or edit_hda_interface. The agent must infer usage purely from the name and purpose sentence.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
set_keyframeC
Set a single keyframe on a parameter.
Args: node_path: Node path. parm_name: Parameter name. frame: Frame number. value: Value at this keyframe. slope: Tangent slope. accel: Acceleration.
| Name | Required | Description | Default |
|---|---|---|---|
| accel | No | ||
| frame | Yes | ||
| slope | No | ||
| value | Yes | ||
| node_path | Yes | ||
| parm_name | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full behavioral burden. It says nothing about whether an existing keyframe at that frame is overwritten, what happens with an invalid node_path/parm_name, or whether the operation is undoable — notable gaps for a mutation tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The single-sentence summary is front-loaded and appropriately short, but the following Args block spends six lines re-stating parameter names without earning its space. Reasonably sized, low information density.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 6-parameter mutation tool with no annotations, no output schema, and 0% schema description coverage, the definition is too thin: it omits required-vs-optional behavior for slope/accel, return/error behavior, and the effect on pre-existing keyframes.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate, but its arg list largely restates parameter names tautologically ('node_path: Node path', 'frame: Frame number'). Only 'slope: Tangent slope' adds real meaning (units/derivative semantics) and 'accel' is barely clarified; nothing explains the optional status or defaults of slope/accel.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
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 — set a keyframe on a parameter — and the word 'single' implicitly distinguishes it from the plural sibling set_keyframes. It is clear, but it never names the sibling tool (set_keyframes, delete_keyframe) explicitly, so differentiation is left to inference.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no guidance on when to use this tool versus set_keyframes (batch), delete_keyframe, or get_keyframes. No prerequisites (must the node exist, must the parameter be keyable) or when-not-to-use conditions are given.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
set_keyframesA
Batch-set multiple keyframes on a parameter.
Args: node_path: Node path. parm_name: Parameter name. keyframes: List of dicts with "frame", "value", and optionally "slope"/"accel".
| Name | Required | Description | Default |
|---|---|---|---|
| keyframes | Yes | ||
| node_path | Yes | ||
| parm_name | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full behavioral burden. It says 'batch-set' (implying mutation) but does not disclose whether existing keyframes are overwritten, what permissions are required, whether the operation is reversible, or what the return looks like. For a mutation tool with zero annotation coverage, this is a notable gap.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is short and front-loaded: the purpose appears first, followed by a concise args section. Every sentence contributes directly to understanding the tool; there is no filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given a mutation tool with no annotations, no output schema, and 0% schema description coverage, the description is incomplete. It covers purpose and parameter format but omits essential behavioral details such as overwrite behavior, error conditions, and return values, which an agent needs to call it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate. It does so well for the keyframes parameter by specifying that it is a list of dicts with 'frame', 'value', and optional 'slope'/'accel'. The other two parameters are only briefly labeled, but the critical nested format is documented.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource: 'Batch-set multiple keyframes on a parameter.' The word 'batch' and 'multiple' clearly distinguish it from the sibling set_keyframe, so an agent can tell which tool handles single vs multiple keyframes 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.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is implied: use it when setting multiple keyframes at once. However, the description does not explicitly name alternatives (e.g., set_keyframe for a single keyframe) or state when not to use it, so guidance is present but incomplete.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
set_light_propertiesC
Set properties on a USD light prim via an inline Python LOP.
Args: node_path: LOP node path to connect after. prim_path: USD light prim path. properties: Property name-value pairs to set.
| Name | Required | Description | Default |
|---|---|---|---|
| node_path | Yes | ||
| prim_path | Yes | ||
| properties | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It discloses the mechanism ('via an inline Python LOP') and that node_path connects after an existing LOP, but it does not describe side effects, whether the light prim must already exist, what happens to unspecified properties, or any permission requirements.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded with a clear first sentence and a compact Args section. Every line adds relevant information, and there is no wasted text.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given that the tool has no annotations, no output schema, a nested properties object, and 0% schema description coverage, the description is incomplete. It documents required arguments but omits when-to-use guidance, side effects, modification semantics, and return behavior.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 0% schema description coverage, the description usefully explains all three parameters: node_path as the LOP node to connect after, prim_path as the USD light prim path, and properties as name-value pairs. However, for the nested properties object it does not specify allowed property names, value types, or formatting, leaving meaningful ambiguity.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource: setting properties on a USD light prim via an inline Python LOP. This distinguishes it from generic attribute setting tools like set_usd_attribute, though it does not explicitly name a sibling alternative.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description only lists arguments; it gives no guidance on when to use this tool versus alternatives such as create_light, set_usd_attribute, or list_lights. No prerequisites or exclusions are provided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
set_node_colorB
Set a node's color in the network editor.
Args: ctx: MCP context. node_path: Node path. r: Red (0.0-1.0). g: Green (0.0-1.0). b: Blue (0.0-1.0).
| Name | Required | Description | Default |
|---|---|---|---|
| b | Yes | ||
| g | Yes | ||
| r | Yes | ||
| node_path | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. 'Set a node's color in the network editor' implies a cosmetic, likely non-destructive mutation, but it says nothing about persistence, undo behavior, required context, or what happens if the node_path is invalid.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded purpose sentence followed by a compact args list; nothing is padded. The 'ctx: MCP context' line is boilerplate but harmless and brief.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 4-required-param mutation tool with no annotations and no output schema, the description covers parameters adequately but leaves behavioral gaps: no indication of effect scope (viewport display only vs. saved state) or error conditions. Minimum viable, but not complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0% (params only have titles 'R', 'G', 'B'), yet the description documents all four parameters and adds the crucial 0.0-1.0 range for the RGB channels, which the schema omits. It adds real meaning, though node_path remains described only as 'Node path' with no format guidance.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb ('Set') and resource ('a node's color') scoped to the network editor, which cleanly separates it from visual siblings like set_node_flags or set_node_position. It does not explicitly name an alternative, but the purpose is unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no when-to-use guidance, no prerequisites (e.g. whether the node must exist in the current network), and no mention of any alternative tool. The agent is left to infer usage entirely.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
set_node_flagsC
Set flags on a node.
Args: ctx: MCP context. node_path: Node path. display: Display flag. render: Render flag. bypass: Bypass flag. template: Template flag. lock: Lock flag.
| Name | Required | Description | Default |
|---|---|---|---|
| lock | No | ||
| bypass | No | ||
| render | No | ||
| display | No | ||
| template | No | ||
| node_path | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It never states that this mutates node state, whether omitted/null flags leave existing values untouched (the schema defaults to null), or whether the operation is reversible.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with a one-line summary, but the Args block is largely a restatement of the schema. Nothing is egregiously bloated, yet most lines don't earn their place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a mutation tool with six parameters, no annotations, no output schema, and 0% schema coverage, the description is far too thin. It omits flag semantics, null-handling behavior, and any indication of the effect of the operation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate, but its param notes are tautological ('display: Display flag', 'render: Render flag'), adding no meaning beyond the parameter names. Critically, the null defaults — likely meaning 'don't change this flag' — are never explained.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
'Set flags on a node' states a clear verb and resource, and the args list names the specific flag types (display, render, bypass, template, lock). However, 'flags' is a generic term and the description never distinguishes this tool from the sibling set_cop_flags or explains what kind of flags these are.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no when-to-use guidance, no prerequisites, and no mention of alternatives such as set_cop_flags. The docstring is purely an argument inventory.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
set_node_positionC
Set a node's position in the network editor.
Args: ctx: MCP context. node_path: Node path. x: Horizontal position. y: Vertical position.
| Name | Required | Description | Default |
|---|---|---|---|
| x | Yes | ||
| y | Yes | ||
| node_path | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full behavioral burden and falls short: it does not say whether the change is persisted with the scene, whether it is undoable, what coordinate space the position is in (editor graph space vs. anything else), or what happens if node_path does not resolve.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the action in the first sentence and compact overall. The Args block is mostly filler ('ctx: MCP context.') but nothing is bloated or buried.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a three-parameter mutation tool with no annotations, no output schema, and 0% schema coverage, the description is too thin — it omits persistence/undo behavior, coordinate semantics, and error conditions that an agent needs before invoking it.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must supply parameter meaning. Instead the arg list only restates the parameter names ('Node path.', 'Horizontal position.', 'Vertical position.'), adding no units, coordinate-space semantics, or valid node_path syntax. Only 'in the network editor' hints at the coordinate frame.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (set) and resource (a node's position) and localizes it to the network editor, so the effect is unambiguous. However, it offers no differentiation from the closely related sibling move_node, leaving the agent to guess which one applies.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to use this versus move_node, layout_children, or set_object_transform, and no prerequisites (node must exist, network context must be current). Usage is only implied by the name.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
set_object_transformA
Set an object's translate, rotate, scale and/or parent in one call.
Only the arguments you pass change. Object-level nodes under /obj only; SOP transforms are a Transform SOP, not this.
Args: ctx: MCP context. node_path: Object node, e.g. "/obj/geo1". translate: [tx, ty, tz]. rotate: [rx, ry, rz] in degrees. scale: [sx, sy, sz]. parent: Object to parent under, or "" to unparent.
| Name | Required | Description | Default |
|---|---|---|---|
| scale | No | ||
| parent | No | ||
| rotate | No | ||
| node_path | Yes | ||
| translate | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It does disclose a genuinely important behavioral trait the schema cannot express: partial/merge semantics ('Only the arguments you pass change'), which prevents an agent from assuming omitted fields are reset. However it says nothing about whether a live Houdini session is required, whether the change is undoable, or what is returned on success.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the capability and scope caveat before the argument list, and every line earns its place except 'ctx: MCP context.', which is boilerplate. The triple format naming is dense but readable.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 5-parameter mutation tool with no annotations and no output schema, the description supplies the semantics that structured fields lack: merge behavior, degrees, unparent sentinel, and node scope. The main omission is any statement about environment prerequisites or error/return behavior.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% and all five parameters are titled only, so the description must compensate, and it largely does: it gives the component order for translate/rotate/scale, states rotate is in degrees, and specifies that parent='' unparents. Defaults without an explicit 'null means unchanged' statement are the only gap.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Set an object's translate, rotate, scale and/or parent') and explicitly carves out the boundary against SOP transforms, which is the nearest conceptual sibling. An agent can distinguish it from set_parameter, move_node, and the Transform SOP 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.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives a clear when-to-use rule ('Object-level nodes under /obj only; SOP transforms are a Transform SOP, not this') and names the alternative for the excluded case. It does not cover when to prefer set_parameter over this tool, but the scope constraint is explicit and actionable.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
set_parameterA
Set a parameter value.
A parameter that holds an expression does NOT take a literal: Houdini
writes the value into a slot the expression keeps overriding. The reply
then carries expression_kept: true with the surviving expression and
what you requested (plus same_as_evaluated when the expression happens
to evaluate to that value right now) — read those before calling the write
done. Pass override_expression=True to clear the expression first.
A parameter holding a BARE ch() reference is the opposite trap: Houdini
writes THROUGH it into the parameter it reads, so the value lands on
another node. The reply names that parameter in written_through.
Inside a DOP network a write does not reset frames already simulated:
simulation_cache names the network to pass to reset_simulation.
A String parameter echoes raw_value (the unexpanded text, $JOB/...)
next to the expanded new_value.
A LOCKED parameter (karmarendersettings resolutiony under res_mode autoheight) takes nothing at all; the error names the menu whose callback sets the lock. Houdini runs such callbacks only from the UI: set that menu with run_callbacks=True first, then the locked parameter.
Args:
node_path: Node path.
parm_name: Parameter name.
value: New value (int, float, string, bool, or list).
override_expression: Remove an expression standing in the way,
instead of reporting that the write did not take.
run_callbacks: Run the parameter's callback script after the write,
as editing it in the UI does (callback_run in the reply, and
callback_error when the callback raised).
| Name | Required | Description | Default |
|---|---|---|---|
| value | Yes | ||
| node_path | Yes | ||
| parm_name | Yes | ||
| run_callbacks | No | ||
| override_expression | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full behavioral burden and does so richly. It discloses expression override behavior, ch() write-through, DOP simulation cache side effects, raw_value echoing for strings, locked-parameter failures, and callback execution details in the reply.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is dense and long, but it is front-loaded with the core operation and every paragraph addresses a distinct Houdini-specific failure mode. There is little obvious filler, though the volume is substantial.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a complex mutation tool with no annotations and no output schema, the description is unusually complete about side effects and reply fields. It still leaves gaps around node_path formatting and parm_name conventions, which are not covered by the schema either.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must fully compensate. It explains the optional override_expression and run_callbacks parameters well, but node_path and parm_name receive only tautological one-line descriptions, and value mainly restates the schema's type union.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource: 'Set a parameter value.' The many edge-case paragraphs make the operation's scope clear, but the description never explicitly distinguishes this tool from siblings like set_parameters or set_expression.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explains when to use override_expression and run_callbacks, and warns about expression and ch() traps, but gives no explicit guidance on when to choose this tool over get_parameter, set_parameters, or set_expression.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
set_parametersA
Batch-set multiple parameters on a node, in the order given.
Inside a DOP network a write does not reset frames already simulated:
simulation_cache names the network to pass to reset_simulation.
Parameters that held an expression and therefore ignored the literal are
listed in expressions_kept, with a top-level warning: a batch whose
errors is empty can still contain a write that did not take. Values that
landed on ANOTHER node, because the parameter is a bare ch() reference
Houdini writes through, are in written_through. Each entry in set
carries the same keys as set_parameter's reply. Pass
override_expression=True to clear those expressions and links instead.
Locked parameters are in errors with locked: true and listed in
locked_parms; the error names the menu whose callback sets the lock.
With run_callbacks=True each parameter's callback runs after its write, so
{"res_mode": "manual", "resolutiony": 1080} unlocks and then writes; a
callback that raised is listed in callbacks_not_run.
Args: node_path: Node path. params: Mapping of parameter names to values, written in this order. A value written {"expr": "...", "language": "hscript" | "python"} is set as an expression, as in build_network. override_expression: Remove expressions standing in the way. run_callbacks: Run each parameter's callback script after its write, as the UI does.
| Name | Required | Description | Default |
|---|---|---|---|
| params | Yes | ||
| node_path | Yes | ||
| run_callbacks | No | ||
| override_expression | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and does so richly: it discloses that a write does not reset already-simulated frames, that expression-bearing parameters silently ignore literals (expressions_kept + warning), that writes can land on ANOTHER node via ch() references (written_through), and that locked parameters surface as errors with the offending menu callback named.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Purpose is front-loaded and the dense return-value/edge-case paragraphs each carry non-obvious semantics that a caller must know. It is text-heavy for a four-parameter tool, but almost no sentence is filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
There is no output schema and no annotations, so the description must cover the response contract — and it does, enumerating errors, locked_parms, expressions_kept, callbacks_not_run, written_through and the warning field, plus the expression-dict input form. An agent has enough to call and interpret this correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, so the description must compensate, and it does: it documents params as an order-preserving mapping and gives the value syntax for expressions ({"expr": "...", "language": "hscript"|"python"}), plus the semantics of both booleans. Only node_path is left as bare 'Node path.'
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Opens with a specific verb+resource+scope: 'Batch-set multiple parameters on a node, in the order given.' The word 'batch' plus 'in the order given' distinguishes it from the singular sibling set_parameter 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.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives conditional guidance for flags ('Pass override_expression=True to clear those expressions and links instead', 'With run_callbacks=True ... unlocks and then writes'), which is useful. But it never explicitly routes the agent between this and the sibling set_parameter or set_expression — batching is only implied by the name and first sentence.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
set_playback_rangeC
Set the playback range (green bar in the timeline).
Args: start: Start frame. end: End frame.
| Name | Required | Description | Default |
|---|---|---|---|
| end | Yes | ||
| start | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It never says whether the operation is a mutation of scene state, whether it is undoable, whether it clamps or validates the range, or what happens if start exceeds end. For a mutating tool with zero annotation coverage this is a substantial gap.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Very short and front-loaded, with the key identification ('green bar in the timeline') up front. The 'Args:' block is boilerplate that merely repeats the parameter names, but it costs little.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
A two-parameter mutating tool with no annotations, no output schema, and 0% schema description coverage should say considerably more. Nothing about validation, side effects, or the distinction from set_frame_range is given.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate. It adds only the unit ('frame') to each parameter, restating the schema's titles. It says nothing about ordering constraints, valid bounds, or whether values are integers.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Set the playback range') and usefully identifies the target as the green bar in the timeline, which disambiguates it visually. However it does not distinguish itself from the sibling set_frame_range, leaving the agent to guess which of the two range-setting tools to pick.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no when-to-use guidance, no mention of prerequisites (e.g. that start must precede end or be within the scene range), and no reference to the near-identical sibling set_frame_range. The agent receives no routing information at all.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
set_render_settingsC
Set render parameters on a ROP node.
Args: node_path: ROP node path. settings: Parameter name-value pairs.
| Name | Required | Description | Default |
|---|---|---|---|
| settings | No | ||
| node_path | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full behavioral burden and discloses almost nothing: it doesn't say whether settings merge with or replace existing values, whether the node is recooked/dirtied, whether it requires an active Houdini connection, or what happens on an invalid parameter name. 'Set' implies mutation but no consequences are described.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded one-line purpose followed by a compact Args block; no filler. The docstring-style Args section adds little beyond the already-visible schema property names, but it is brief and not wasteful.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
A mutation tool with no annotations, no output schema, and 0% schema description coverage needs the description to do more work than this. It omits side effects, error behavior, and any differentiation from the several parameter-setting siblings in the toolset.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description is the only source of parameter meaning: node_path is identified as a ROP node path and settings as name-value pairs. However, it does not specify the expected key format (Houdini parm names?), accepted value types, or whether unknown keys error out, leaving the arbitrary-object parameter underspecified.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource: sets render parameters on a ROP node. That is clearer than a generic 'set parameter', but the description never distinguishes it from siblings like set_parameter, set_parameters, or setup_render, which an agent could easily reach for instead.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to use this versus set_parameter/set_parameters, nor prerequisites such as the node needing to be a ROP or the Houdini session being connected. The agent must infer the context entirely from the name.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
set_selectionC
Set the node selection.
Args: node_paths: Node paths to select.
| Name | Required | Description | Default |
|---|---|---|---|
| node_paths | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full behavioral burden. It doesn't say whether this replaces the existing selection or adds to it, what happens when node_paths is null/default, whether the operation is reversible (undo), or if it affects the viewport/UI state.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The text is short and front-loaded with the verb and resource. It isn't padded, though the brevity comes at the cost of needed detail rather than from efficiency alone.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a state-mutating selection tool with no annotations, no output schema, and 0% parameter documentation, the description is too thin. Key facts such as replace-vs-append behavior and null handling are absent, leaving the agent under-informed.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0% and the single parameter's description ('Node paths to select') essentially restates the parameter name. It does not clarify path format (e.g., '/obj/geo1'), the effect of the null default, or whether multiple paths are cumulative.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (Set) and resource (node selection), which is clear on its own. However, it does not differentiate from the sibling get_selection, so an agent gets no help choosing between reading and writing selection state.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no statement of when to use this versus get_selection, no prerequisites, and no mention that passing null replaces/clears selection. The agent is left to infer all usage context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
set_update_modeA
Set Houdini's cook update mode, or read it when called with no mode.
"manual" before a long build stops every parameter change from re-cooking; set "auto" back afterwards.
Args: ctx: MCP context. mode: "auto", "on_mouse_up" or "manual". Omit to read.
| Name | Required | Description | Default |
|---|---|---|---|
| mode | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden, and it delivers the key behavioral fact: 'manual' suppresses re-cooking on every parameter change, which is a global side effect an agent must know. It still omits persistence (does the mode survive scene changes?) and error behavior, so it is not exhaustive.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The core behavior is front-loaded in the first sentence and the practical workflow hint follows immediately. The 'Args: ctx: MCP context' line is boilerplate that adds no value, a minor deduction.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a single-parameter tool with no output schema and no annotations, the description covers purpose, valid values, read-vs-write semantics, and the practical consequence of each mode. Only the read return shape is left implicit, which is a small gap.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% and the schema only declares an unconstrained string/null, so the description must supply the semantics. It does exactly that by enumerating the three valid values ('auto', 'on_mouse_up', 'manual') and defining the omission case as a read.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Set Houdini's cook update mode') and explicitly covers the dual read/write nature ('or read it when called with no mode'). No sibling tool governs update mode, so the definition needs no further disambiguation to be actionable.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives concrete when-to-use guidance tied to a real workflow: set 'manual' before a long build to stop re-cooking, then 'auto' afterwards. There is no alternative tool to name, so the absence of an explicit alternative is not a real gap.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
setup_flip_simA
Build a FLIP fluid simulation network from source geometry.
Preferred over manual wiring — builds SideFX's SOP FLIP chain in one call: FLIP Container sized around the source, FLIP Boundary emitting from it, FLIP Solver with a ground plane at y=0, and a File Cache on the particles.
Args: source_geo: Source SOP path. domain: Domain type. particle_sep: Particle separation distance. name: Top-level geo node name.
| Name | Required | Description | Default |
|---|---|---|---|
| name | No | flip_sim | |
| domain | No | box | |
| source_geo | No | /obj/geo1/sphere1 | |
| particle_sep | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden. It helpfully discloses the exact SOP chain that will be built (container, boundary, solver, ground plane, file cache), but it does not mention scene mutation, required connection state, permissions, undo behavior, or failure modes, leaving clear gaps.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded with purpose, then adds the chain details and a clean args list. Every sentence carries useful information with no repetition or filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given no output schema, no annotations, four parameters, and 0% schema description coverage, the description supplies purpose, chain composition, and per-argument meaning. It omits some useful details such as valid domain values, particle separation units, and prerequisites, but an agent can still invoke the tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate. It lists all four arguments and gives meaning for each, including 'Source SOP path', 'Domain type', 'Particle separation distance', and 'Top-level geo node name'. 'Domain type' remains vague without valid values or defaults, but overall it substantially fills the schema gap.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb and resource: 'Build a FLIP fluid simulation network from source geometry.' It clearly distinguishes this from manual wiring and from sibling sim setups like setup_pyro_sim, setup_rbd_sim, and setup_vellum_sim by naming the FLIP-specific network it creates.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It explicitly says this is 'Preferred over manual wiring' and describes the one-call chain, giving clear context for when to use it. However, it does not explicitly contrast with the other simulation setup tools or state when not to use it, so it stops short of full conditional guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
setup_pyro_simA
Build a Pyro smoke/fire simulation network from source geometry.
Preferred over manual DOP wiring — builds the entire pyro network in one call: Pyro Source (density, temperature, burn), Volume Rasterize Attributes, Pyro Solver and a File Cache. For custom setups beyond what this provides, use create_node with DOP nodes (pyrosolver, smokeobject, volumesource, etc.).
Args: source_geo: Source SOP path. container: Container type. res_scale: Resolution scale multiplier. substeps: DOP substeps. name: Top-level geo node name.
| Name | Required | Description | Default |
|---|---|---|---|
| name | No | pyro_sim | |
| substeps | No | ||
| container | No | box | |
| res_scale | No | ||
| source_geo | No | /obj/geo1/sphere1 |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries full behavioral burden; it does disclose the concrete side effect (a whole network of nodes is created in one call) and implicitly that it is a scene-mutating write. However it omits whether it overwrites existing nodes, whether it cooks the result, permission/scene-load prerequisites, and failure behavior.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with purpose, then sibling routing, then a compact Args block. No filler sentences, though the Args lines are so terse they border on restating parameter names.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a five-parameter, annotation-less, output-schema-less builder, the description covers purpose, alternative, and parameter roles adequately but says nothing about what is returned (node path?), whether the new network is cooked, or how it interacts with pre-existing scene content — gaps an agent must guess at.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate, and it does name all five parameters with a one-line role each (source SOP path, container type, resolution scale, DOP substeps, top-level geo node name). But it gives no formats, valid values, or default values, and leaves questions open such as which container types are accepted.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource — 'Build a Pyro smoke/fire simulation network from source geometry' — and enumerates exactly what gets constructed (Pyro Source, Volume Rasterize Attributes, Pyro Solver, File Cache). This cleanly separates it from siblings like setup_rbd_sim, setup_flip_sim, and setup_vellum_sim.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly says it is 'Preferred over manual DOP wiring' and names the fallback path: 'For custom setups beyond what this provides, use create_node with DOP nodes (pyrosolver, smokeobject, volumesource, etc.).' Both the when and the when-not are stated with the alternative tool named.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
setup_rbd_simA
Build an RBD rigid-body simulation network with fracture and solver.
Preferred over manual DOP wiring — builds the entire RBD network in one call. For source geometry, build SOP chains with native nodes (voronoifracture, booleanfracture, rbdmaterialfracture) instead of VEX.
Args: geo_path: Source geometry object path. ground: Add a ground plane. pieces_type: Fracture method ("voronoi"). name: Top-level geo node name.
| Name | Required | Description | Default |
|---|---|---|---|
| name | No | rbd_sim | |
| ground | No | ||
| geo_path | No | /obj/geo1 | |
| pieces_type | No | voronoi |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations, so the description carries the full burden. It usefully discloses that the whole network (fracture + solver) is built in a single call, but says nothing about side effects on the current scene, whether existing nodes are reused or overwritten, idempotency, or failure modes for a mutating builder tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the core action, then the alternative guidance, then the args block – no filler sentences. The Args list is slightly redundant with the schema property names but the added descriptions justify the space.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no annotations and no output schema, the definition should say more about what the tool actually creates and returns. It covers purpose, routing, and parameter meaning well, but leaves an agent guessing about scene side effects and the resulting node structure.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, so the description must compensate, and it names all four args. It even supplies enum-like value guidance ('voronoi') for pieces_type, which the schema's plain string type does not, though the per-arg notes are terse and lean on restating names.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Build an RBD rigid-body simulation network with fracture and solver'), and the 'RBD' qualifier cleanly separates it from the sibling setup_pyro_sim / setup_flip_sim / setup_vellum_sim tools without needing to name them.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives clear context ('Preferred over manual DOP wiring — builds the entire RBD network in one call') and steers a sub-task away from a worse alternative ('build SOP chains with native nodes ... instead of VEX'). It lacks an explicit when-NOT-to-use condition, so it stops short of a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
setup_renderB
Set up a render configuration with camera and ROP node.
Args: renderer: Renderer type ("karma", "mantra"). camera: Camera node path; creates one if omitted. output_path: Output image path (supports Houdini variables). resolution: [width, height] resolution. samples: Render sample count. name: ROP node name in /out.
| Name | Required | Description | Default |
|---|---|---|---|
| name | No | render1 | |
| camera | No | ||
| samples | No | ||
| renderer | No | karma | |
| resolution | No | ||
| output_path | No | $HIP/render/output.$F4.exr |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden, but it does disclose one meaningful side effect: 'camera: Camera node path; creates one if omitted.' It also implies node creation in /out. However it says nothing about permissions, whether existing render configs are overwritten, or error behavior — notable gaps for a mutating setup tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The one-line purpose is front-loaded and the Args list is an efficient, scannable mapping of each parameter to its meaning. Slightly mechanical but no wasted sentences.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 6-parameter mutating tool with no annotations and no output schema, the parameter coverage is solid but the description omits what is returned (e.g., the created node path), whether prior configs are affected, and error conditions. Adequate, with clear gaps.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, so the description must compensate, and it largely does: it explains renderer values ('karma', 'mantra'), the camera path plus auto-creation behavior, Houdini variable support in output_path, the [width, height] resolution shape, and where the ROP node name lands (/out). This is well beyond the bare schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a specific verb and resource ('Set up a render configuration') plus the artifacts created (camera and ROP node). It is clearly a setup/creation tool, but it does not distinguish itself from nearby siblings like create_render_node or set_render_settings, which also target render configuration.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no statement of when to use this tool versus create_render_node, set_render_settings, or create_render_node/set_render_settings combos. No prerequisites or when-not-use conditions are given, so the agent must infer routing from the name alone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
setup_vellum_simA
Build a Vellum simulation network with configure node and solver.
Preferred over manual DOP wiring — builds the entire Vellum network in one call: the shelf's Configure recipe for the type, the Vellum Solver, and a Vellum I/O cache that keeps constraints and collisions with the geometry. Use Vellum Drape SOP to let cloth settle before the main simulation.
Args: geo_path: Source geometry object path. sim_type: Simulation type ("cloth", "hair", "grain", "softbody"). substeps: Solver substeps. name: Top-level geo node name. ground: Turn on the solver's ground plane at y=0.
| Name | Required | Description | Default |
|---|---|---|---|
| name | No | vellum_sim | |
| ground | No | ||
| geo_path | No | /obj/geo1 | |
| sim_type | No | cloth | |
| substeps | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full behavioral burden. It does disclose meaningful composition details (the Configure recipe, solver, and I/O cache that preserves constraints and collisions), but says nothing about whether it creates new nodes versus overwriting existing ones, where nodes are placed, idempotency, or undo behavior.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The purpose and the preferred-over rationale are front-loaded, and the component list and follow-up tip are compact. The bullet text and the Args list restate some of the same concepts, so it is slightly redundant but still efficient overall.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a moderately complex network-building tool with no output schema, the description covers what gets built, all arguments, and a sensible follow-up step. It stops short of stating the resulting node path or return value, but otherwise gives an agent enough to call it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate, and it largely does: all five args are documented, including the valid sim_type values ('cloth', 'hair', 'grain', 'softbody') that the schema omits as an enum, and the ground flag's meaning ('turn on the solver's ground plane at y=0'). Only substeps ('Solver substeps') is described thinly.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a specific verb and resource — 'Build a Vellum simulation network' — and immediately enumerates the components created (Configure recipe, Vellum Solver, Vellum I/O cache). This clearly distinguishes it from the sibling setup_pyro_sim, setup_rbd_sim, and setup_flip_sim without needing to open any schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
'Preferred over manual DOP wiring — builds the entire Vellum network in one call' gives explicit context for when to choose this tool over the manual alternative. It also adds a follow-up recommendation (use Vellum Drape SOP to let cloth settle), but does not state when-not-to-use cases such as an existing sim or an already-configured network.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
set_usd_attributeB
Set a USD attribute value via an inline Python LOP.
Args: node_path: LOP node path to connect after. prim_path: USD prim path. attr_name: Attribute name. value: Value to set.
| Name | Required | Description | Default |
|---|---|---|---|
| value | Yes | ||
| attr_name | Yes | ||
| node_path | Yes | ||
| prim_path | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It discloses the mechanism (inline Python LOP) but does not address side effects such as node creation, attribute overwriting, reversibility, or permissions. This is insufficient for a mutation tool with zero annotation coverage.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded with the core action, followed by a compact parameter list. Every sentence serves a purpose with no filler or redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a mutation tool with four required parameters, no annotations, and no output schema, the description is too sparse. It omits prerequisites, side effects, error conditions, and what happens when the attribute or node does not exist, leaving the agent under-informed.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate. It lists all four parameters, but only node_path adds meaning beyond the schema ('LOP node path to connect after'); prim_path, attr_name, and value largely restate their schema titles. This is minimal viable but leaves format/type nuances undocumented.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb ('Set') and resource ('USD attribute value'), and the mechanism ('via an inline Python LOP') further clarifies the operation. This distinguishes it from sibling getters like get_usd_attribute and from set_parameter or set_detail_attrib, which target different data domains.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no when-to-use guidance, no alternatives for similar tasks (e.g., set_parameter), and no prerequisites (e.g., whether a LOP node must exist). The agent is left to infer context entirely.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
set_viewer_contextA
Point the Scene Viewer at a network, and optionally a node inside it.
set_current_network moves the network EDITOR; this moves the VIEWER. That is what decides whether a scene graph view exists, so it is the prerequisite for previewing a USD stage or setting a Hydra delegate: call this with "/stage" before set_viewport_renderer or before binding a USD camera prim.
The result reports is_scene_graph_view, which is the question you are usually really asking.
Args: network_path: Network for the viewer to display, e.g. "/stage". current_node: Node inside it to make current, which selects the stage a Solaris viewport shows. pane_name: Pane tab name.
| Name | Required | Description | Default |
|---|---|---|---|
| pane_name | No | ||
| current_node | No | ||
| network_path | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations exist, so the description carries the full burden and it does disclose the key non-obvious behavior: that this call decides whether a scene graph view exists and is a prerequisite for USD-stage preview. It also reveals the return key (is_scene_graph_view). It stops short of permission requirements or failure modes, which keeps it from 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the core action, then layered: distinction from the sibling, prerequisite ordering, and the return value, followed by a clean Args block. Every sentence adds routing or behavioral value; nothing is filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no annotations and no output schema, the description covers what an agent needs: purpose, sibling disambiguation, prerequisite sequencing, per-parameter meaning, and the result key. Failure and permission behavior are the only omissions, which is minor for a viewer-context tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate, and it largely does: network_path gets a format example ("/stage"), current_node explains its effect ('selects the stage a Solaris viewport shows'), and pane_name is defined, albeit tersely. The weak pane_name definition prevents a 5.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and effect ('Point the Scene Viewer at a network, and optionally a node inside it') and explicitly contrasts with the sibling set_current_network ('moves the network EDITOR; this moves the VIEWER'). An agent can distinguish these two tools 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.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly names the alternative (set_current_network), states the prerequisite ordering with a concrete call path ('call this with "/stage" before set_viewport_renderer'), and gives the trigger condition (previewing a USD stage, locating a scene graph view). This is exactly when/when-not/alternatives guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
set_viewport_cameraA
Set the viewport to look through a specific camera.
Args: camera_path: Camera node path, or a USD camera prim path for a Solaris viewport. The result reports the camera the viewport is actually looking through, and fails if it did not take. pane_name: Pane tab name.
| Name | Required | Description | Default |
|---|---|---|---|
| pane_name | No | ||
| camera_path | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden. It usefully discloses failure behavior ('fails if it did not take') and that the result reports the camera actually being looked through, which is genuine behavioral context. It does not cover permissions, side effects on other panes, or whether the change is persistent, so it is only partially transparent.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Purpose is front-loaded in the first sentence, followed by a compact Args block that maps cleanly to the two parameters. No filler; only minor structural overhead from the arg list formatting.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple two-parameter mutation tool with no output schema and no annotations, the description covers what changes (viewport camera), the failure mode, and both parameters. It could say more about pane targeting or persistence, but nothing essential for correct invocation is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate, and it does: it explains camera_path (camera node path or USD camera prim path for Solaris) and pane_name (pane tab name). Both parameters are given meaning beyond their bare names, including the important dual-format nuance.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a precise verb and resource: 'Set the viewport to look through a specific camera.' This distinguishes it from the nearby siblings set_viewport_direction (rotation), set_viewport_display, and set_viewport_renderer, since the scope here is camera assignment. An agent can select this tool unaided.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It implies when the tool applies by noting that camera_path may be a node path or a USD prim path 'for a Solaris viewport', which helps route Solaris vs non-Solaris contexts. However, there is no explicit when-to-use versus alternatives such as set_viewport_direction or get_viewport_info, and no exclusions. Usage is inferred rather than stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
set_viewport_directionA
Set the viewport to a standard viewing direction, or place the free view.
rotation/pivot/distance orbit the viewport's own (non-camera) view: rotation [rx, ry, rz] in degrees about the pivot, distance from it. The reply reads the view back. Looking through a camera, move the camera.
Args: direction: "front", "back", "top", "bottom", "left", "right", or "perspective". pane_name: Pane tab name. rotation: [rx, ry, rz] degrees for the free view. pivot: [x, y, z] the free view orbits. distance: Distance of the free view from its pivot.
| Name | Required | Description | Default |
|---|---|---|---|
| pivot | No | ||
| distance | No | ||
| rotation | No | ||
| direction | No | ||
| pane_name | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It does disclose an output trait ('The reply reads the view back'), which is useful, but says nothing about whether this mutates scene state permanently, permissions, or persistence across panes. For a no-annotation tool this is only partial coverage.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the core action, then a compact semantics paragraph and a clean Args list. Slightly redundant between the prose sentence about rotation/pivot/distance and the Args entries, but nothing egregious.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With 5 params, 0% schema coverage, no annotations and no output schema, the description covers parameter meaning and notes a reply behavior, but leaves a real gap: whether 'direction' and 'rotation/pivot/distance' are mutually exclusive or combinable, and how pane targeting defaults when pane_name is omitted.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% and the description compensates by documenting all five params, including the enumerated direction values ('front','back','top','bottom','left','right','perspective') that the schema does not encode, plus the orbit semantics of rotation/pivot/distance (
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Opens with a specific verb+resource ('Set the viewport to a standard viewing direction, or place the free view') and explicitly distinguishes itself from the camera sibling with 'Looking through a camera, move the camera.' An agent can route between set_viewport_direction and set_viewport_camera 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.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The camera sentence implicitly names the alternative (set_viewport_camera) and the condition that selects it, and the description splits the two modes (standard direction vs. free view). No explicit statement of when direction mode vs. rotation/pivot/distance mode applies, or whether they can combine.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
set_viewport_displayA
Set how the viewport draws: shading, environment background, grid, particle point size, colour scheme. Any of them in one call; each is read back in the reply.
Args: display_mode: One of 'wireframe', 'shaded', 'smooth', 'smooth_wire', 'hidden_line', 'flat', 'flat_wire', 'matcap', 'matcap_wire'. pane_name: Pane tab name. environment_background: False hides an environment (dome) light's map behind the scene, True shows it. Set on every view of the viewer; the reply reads it back per view. reference_plane: False hides the reference plane (the grid), True shows it. point_size: Diameter in pixels of particles drawn as points, on every view of the viewer. color_scheme: 'dark', 'darkgrey', 'grey' or 'light', on every view.
| Name | Required | Description | Default |
|---|---|---|---|
| pane_name | No | ||
| point_size | No | ||
| color_scheme | No | ||
| display_mode | No | ||
| reference_plane | No | ||
| environment_background | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and does add real behavioral context: each setting 'is read back in the reply', and environment_background, point_size and color_scheme are applied 'on every view of the viewer' while pane_name scopes the pane — a meaningful global-vs-pane distinction an agent could not infer from the schema. It still omits what happens when a parameter is left at its null default (unchanged vs reset) and whether the change is undoable, so it falls short of full transparency.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The lead sentence front-loads the purpose before the Args block, and the per-parameter notes are compact. The structure is slightly verbose in places (the repeated 'on every view of the viewer' phrasing) but every line conveys actionable information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a six-parameter mutation tool with no annotations and no output schema, the description supplies the enum vocabularies, the scope of each setting and the read-back behavior. The remaining gap is the semantics of omitted/null parameters and the pane_name resolution rule; with those covered this would be complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate, and it largely does: all six parameters are explained, and the allowed string values for display_mode ('wireframe', 'shaded', 'smooth', etc.) and color_scheme ('dark', 'darkgrey', 'grey', 'light') are supplied even though the schema declares no enums. pane_name is the weak spot — 'Pane tab name' is thin and gives no default or lookup hint.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The opening sentence states a specific verb (set) plus resource (viewport display) and enumerates the five aspects it controls: shading, environment background, grid, point size, colour scheme. This cleanly separates it from siblings such as set_viewport_camera, set_viewport_renderer and set_viewport_direction without requiring the agent to open any schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
'Any of them in one call' implies the batching/partial-update usage pattern, which is useful. However there is no guidance on when to prefer this tool over the adjacent set_viewport_renderer, set_viewport_camera or set_viewport_direction, and no stated preconditions (e.g. a viewport must exist). Usage is implied rather than spelled out.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
set_viewport_rendererA
Set the viewport's Hydra rendering delegate for live preview.
Use this during lookdev to preview materials and lighting directly in the viewport instead of writing full renders to disk.
Args: renderer: Renderer name. The result reports the delegate that is actually active afterwards, read back from Houdini rather than inferred from a setter not raising. renderer: Renderer name — "GL", "Storm", "Karma CPU", "Karma XPU", etc. Case-insensitive partial match. pane_name: Pane tab name.
| Name | Required | Description | Default |
|---|---|---|---|
| renderer | Yes | ||
| pane_name | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full behavioral burden. It usefully discloses return semantics ('the delegate that is actually active afterwards, read back from Houdini rather than inferred from a setter not raising'), but says nothing about persistence, reversibility, permissions, or failure modes.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The two prose sentences are front-loaded and efficient. However, the Args block is malformed: renderer is documented twice with overlapping text, which is wasteful and confusing, violating the 'every sentence earns its place' bar.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 2-parameter tool with no output schema, the description covers purpose, when-to-use, accepted values, and return semantics. The main gap is the under-specified pane_name parameter and any note on failure or persistence behavior.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0% and the schema has no enum, so the description's accepted values ('GL', 'Storm', 'Karma CPU', 'Karma XPU') and matching rule ('case-insensitive partial match') are genuinely additive. pane_name is only glossed as 'Pane tab name', leaving its optionality and default behavior undocumented.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The opening sentence gives a specific verb and resource ('Set the viewport's Hydra rendering delegate for live preview'), which an agent can distinguish from sibling viewport tools like set_viewport_camera, set_viewport_display, and render_viewport. It does not explicitly name siblings to route against, so it falls short of a 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It provides clear usage context ('Use this during lookdev to preview materials and lighting directly in the viewport instead of writing full renders to disk'), implicitly routing the agent away from render-producing tools. No explicit exclusion list or named alternative tool, so no 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
set_wrangle_codeC
Set VEX code on an existing Attribute Wrangle node.
Args: node_path: Path to the wrangle node. vex_code: VEX snippet to set.
| Name | Required | Description | Default |
|---|---|---|---|
| vex_code | Yes | ||
| node_path | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. The description doesn't state whether setting code replaces existing code, whether the node's cook state is dirtied, whether errors are raised on invalid VEX, or any side effects. For a mutation tool with zero annotation coverage, this is a serious gap.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is short and front-loaded with the core action, but the Args section adds little value by merely echoing parameter names. It is not padded, but three of four lines are low-information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
A mutation tool with no annotations, no output schema, and 0% parameter coverage should do much more. It omits prerequisites, error behavior, replacement semantics, and parameter details, leaving an agent without enough context to invoke it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate. It only restates the parameter names with generic labels ('Path to the wrangle node', 'VEX snippet to set'). It adds no format details, path syntax, code constraints, or meaning beyond what the bare parameter names already convey.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (Set) and resource (VEX code on an Attribute Wrangle node). The sibling set includes create_wrangle, get_wrangle_code, and validate_vex, so the description distinguishes itself by specifying this sets code on an EXISTING node rather than creating one. However, it doesn't explicitly contrast itself with get_wrangle_code beyond the obvious Set/Get distinction.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No when-to-use guidance, no prerequisites (e.g., must the node already exist?), no exclusions, and no mention of alternatives like validate_vex for syntax checking or create_wrangle for new nodes. The reader is left to infer usage context entirely.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
start_houdiniA
Start a Houdini of this server's own and connect to it.
Headless (hython) by default: no window, no viewport, so the capture tools refuse there. gui=True starts the full application, which serves only if the plugin's package is installed (fxhoudinimcp install). Either takes a license seat until stop_houdini. Set HYTHON to choose the build.
Args: gui: Start the Houdini application instead of headless hython. hip_file: Scene to open. wait_seconds: How long to wait for it to serve.
| Name | Required | Description | Default |
|---|---|---|---|
| gui | No | ||
| hip_file | No | ||
| wait_seconds | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full behavioral burden and does so well: it discloses that the default is headless hython (no window/viewport), that capture tools will refuse in that mode, that gui=True only serves if the plugin package is installed, that it consumes a license seat until stop_houdini, and that HYTHON selects the build. It does not state what happens if an instance is already running, whether the call blocks, or how timeouts/errors surface.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The opening sentence front-loads what the tool does, then the behavioral constraints, then the args. Every sentence contributes (license seat, capture refusal, plugin dependency), and the args block compensates for the 0% schema coverage without padding. It is slightly long but earns its length.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
This is a complex tool (spawns a process, consumes a license, depends on an env var and an installed package), with no annotations and no output schema. The description covers the key behavioral caveats but omits the relationship to connect_houdini/stop_houdini state, return/result expectations, and error handling on timeout, leaving meaningful gaps for an agent managing session lifecycle.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate, and it does: gui is explained as 'Start the Houdini application instead of headless hython,' hip_file as 'Scene to open,' and wait_seconds as 'How long to wait for it to serve.' This adds genuine meaning beyond the bare schema titles, though path format and timeout failure behavior are left unspecified.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb+resource ('Start a Houdini') and qualifies it with 'of this server's own,' which implicitly contrasts with the sibling connect_houdini that presumably attaches to an existing instance. It also names stop_houdini as the lifecycle counterpart. It stops short of explicitly naming connect_houdini as the alternative, so sibling differentiation is only partial.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives real conditions for the gui parameter (headless by default, capture tools refuse without a window, gui=True needs the plugin package installed), which is useful 'when' context. However, it never addresses the most important routing decision for this tool family: when to call start_houdini versus connect_houdini to an already-running instance. Usage guidance is therefore implied rather than explicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
start_renderA
Execute any node that renders or writes files.
Foreground by default: Houdini shows its own progress dialog and the user can cancel. The call holds until the render finishes, however long that is; a client that hands a long call to a background task notifies you with the verdict. Do nothing else in Houdini meanwhile and never poll the disk.
Not just /out ROPs: a LOP usdrender_rop (which is how Solaris renders), a SOP ROP Geometry, or a File Cache's Save to Disk all work, because what matters is whether the node can be executed rather than its category.
The result reports the output path it wrote to and whether anything is actually on disk there, so a render that succeeds and writes nowhere is visible instead of silent.
Args:
node_path: Any node with a render() or an 'execute' button.
frame_range: [start, end] or [start, end, increment].
background: Render in a separate hython on the saved hip and return
at once with status "launched"; get_render_progress reports the
process, its log tail and the files. The user sees no progress
in Houdini, so use it only when asked to keep working while a
render runs.
overrides: {parm_name: value} for this render only, e.g. a draft
{"resolutionx": 640, "resolutiony": 360}; a parm tuple takes a
list. Put back afterwards, expressions and keyframes included,
even if the render fails (overrides_applied,
overrides_restored). Foreground only. A Karma LOP's "Wait for
Render to Complete" is switched on for the call when it is off
(foreground_forced).
| Name | Required | Description | Default |
|---|---|---|---|
| node_path | Yes | ||
| overrides | No | ||
| background | No | ||
| frame_range | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden and does so richly: foreground holds the call until render finishes, the user can cancel, background returns immediately with status 'launched', overrides are restored even on failure (with overrides_applied/overrides_restored flags), and Karma LOP Wait-for-Render is forced on (foreground_forced).
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the core action and organized with an Args section that maps cleanly to the schema. It is somewhat long, but nearly every sentence conveys non-obvious behavior, so little is wasted.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Despite no output schema, the description explains what the result reports (output path written and whether anything is on disk) and covers failure/restoration edge cases, background launch behavior, and override forcing. Nothing an agent needs to invoke it correctly is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate, and it does: node_path is any node with render() or an execute button; frame_range is [start, end] or [start, end, increment]; background explains the hython/hip semantics; overrides gives a concrete example and notes tuple-as-list and restoration semantics.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Execute any node that renders or writes files') and clarifies scope beyond just /out ROPs, naming LOP usdrender_rop, SOP ROP Geometry, and File Cache Save to Disk. An agent can distinguish this from siblings like setup_render, render_viewport, or render_sheet 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.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives explicit foreground-vs-background guidance ('use it only when asked to keep working while a render runs') and warns not to poll the disk. It names get_render_progress as the companion for background status. It does not explicitly contrast against render_viewport/render_node_network/render_sheet, so sibling routing is slightly incomplete.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
step_simulationC
Advance the simulation by a number of frames.
Args: node_path: DOP network node path. steps: Number of frames to advance.
| Name | Required | Description | Default |
|---|---|---|---|
| steps | No | ||
| node_path | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries full behavioral burden. It does not disclose side effects, whether the simulation must be initialized, whether stepping is reversible, permission requirements, or what state changes occur.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact and front-loaded, stating the action first and then documenting the two arguments. It is appropriately sized, with no irrelevant filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simulation-stepping mutation with no annotations, no output schema, and 0% schema description coverage, the definition is incomplete. It lacks prerequisite state, side-effect warnings, and invocation context, leaving an agent without enough behavioral detail.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate, and it does explain that node_path is a DOP network node path and steps is a number of frames. However, it does not add constraints such as the schema's default of 1 or whether steps must be positive.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource: advance the simulation by a number of frames. It is clear and actionable, but it does not explicitly distinguish this tool from sibling simulation tools such as reset_simulation or get_simulation_info.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no explicit guidance about when to use this tool versus alternatives. The description implies that it is for stepping a simulation, but it neither names alternatives nor states conditions or exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
stop_houdiniA
Stop a Houdini that start_houdini started, and go back to the previous session.
Only sessions started by this server can be stopped: anything else may be someone's unsaved work.
Args: pid: Session to stop. Default: the current one, if this server started it.
| Name | Required | Description | Default |
|---|---|---|---|
| pid | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and does disclose the key behavioral trait: it is a destructive teardown that will only work on sessions this server launched, with a stated rationale (unsaved work risk). It does not say what error or state results if an unowned pid is supplied.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the action and followed by the critical safety constraint before the Args block; no filler. The opening clause and the 'Only sessions started by this server' sentence overlap slightly, costing a bit.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a single-optional-param tool with no annotations and no output schema, the description covers the action, the eligibility constraint, and the default. Only the failure/edge behavior for an ineligible pid is left unspecified, which is minor.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0% (the pid field only declares integer/null with a null default), so the description must compensate, and it does: it defines pid as the session to stop and explains the default is the current session if this server started it. That is meaningful semantics beyond the bare type.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (stop) and resource (a Houdini session), and explicitly ties it to the sibling start_houdini, so the agent can distinguish this teardown tool from connect_houdini or start_houdini without opening a schema. The added 'go back to the previous session' clarifies the resulting state.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives clear selection context: use it only for sessions this server started, and the reason to avoid others (possibly someone's unsaved work). It does not name an alternative tool for shutting down foreign sessions, so it stops just short of explicit alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
undoA
Undo the last change(s) made in Houdini.
Every tool call is one undo step, however many nodes it touched, so one undo reverses one build_network or set_parameters call. Needs a graphical Houdini: hython keeps no undo history.
Args: ctx: MCP context. steps: How many steps to undo (default 1).
| Name | Required | Description | Default |
|---|---|---|---|
| steps | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations the description carries the full burden and it delivers the most valuable behavioral fact: atomicity per tool call ('however many nodes it touched'), plus a hard environmental precondition (graphical Houdini only). It omits failure behavior when the undo stack is empty and whether the operation is opt-in per session, keeping it short of 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the core behavior, then the granularity insight, then the precondition — good ordering with no filler prose. The trailing 'ctx: MCP context' arg note is boilerplate for a parameter that is not even in the schema, a small amount of wasted text.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a one-parameter mutation tool with no annotations and no output schema, the description covers what the agent most needs: the scope of an undo step, the environment requirement, and the steps parameter. Only edge-case behavior (empty history, interaction with redo) is left undocumented.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate, and it does: 'steps: How many steps to undo (default 1)' explains the parameter's meaning and default beyond the bare integer schema. It does not clarify the upper bound or what happens when steps exceeds available history.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (undo) and resource (the last change(s) in Houdini), and pins down the granularity: one tool call equals one undo step no matter how many nodes it touched. That scope statement makes it unmistakable against the sibling redo, which reverses in the other direction.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives a concrete usage condition and a clear when-not: it explicitly names the example operations it reverses (build_network, set_parameters) and warns that a graphical Houdini session is required because hython keeps no undo history. It never explicitly points at the redo sibling for the opposite action, so the routing guidance is not fully exhaustive.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
uninstall_hdaC
Uninstall an HDA file from the current session.
Args: ctx: MCP context. file_path: HDA file path.
| Name | Required | Description | Default |
|---|---|---|---|
| file_path | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations exist, so the description carries the full behavioral burden. The phrase 'from the current session' hints that the removal is session-scoped rather than deleting from disk, which is a useful nugget, but there is no disclosure of reversibility, permission requirements, or side effects on dependent nodes. For an uninstall/mutation tool this is a significant gap.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The one-line purpose is front-loaded and efficient, but the trailing formal 'Args:' block is largely wasted – it documents the non-schema 'ctx' and merely echoes the single parameter name. Tighter without that block.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no annotations, no output schema, and 0% schema coverage, the description should compensate but does not. It never clarifies the consequence of uninstalling (session-only vs. disk removal), what happens to nodes referencing the HDA, or the expected outcome, leaving the agent under-informed for a destructive-looking operation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% and there is one parameter. The description restates 'file_path: HDA file path.', which is essentially a paraphrase of the parameter name and adds no format, path-resolution, or constraint detail beyond the schema. The 'ctx' line documents a field that is not even in the input schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource: 'Uninstall an HDA file from the current session.' An agent can tell it is a removal operation scoped to the session. However, it does not differentiate from closely related siblings like reload_hda, install_hda, or update_hda, so it falls short of a 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No when-to-use, when-not-to-use, or alternative guidance is offered. With several sibling tools touching HDAs (reload_hda, install_hda, update_hda, get_hda_info), the description should route the agent, but provides none of this.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_hdaA
Save the current node contents back to its HDA definition.
The definition's library file is written by this call: saved_to_disk
and library_file_mtime say so, so no separate save is needed. An
embedded definition lives in the hip file and is kept when the scene is
saved.
Args: ctx: MCP context. node_path: Node path.
| Name | Required | Description | Default |
|---|---|---|---|
| node_path | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and does disclose the side effect: the definition's library file is written by this call, and it names the response fields `saved_to_disk` and `library_file_mtime` that report it. It also explains the embedded-definition case (lives in the hip file, kept on scene save). It omits permissions/prerequisites and error behavior.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the core purpose and two efficient sentences about file-vs-embedded behavior. The trailing Args block is largely boilerplate (ctx: MCP context) and does little work, but the entry is otherwise tight.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
No annotations and no output schema, yet the description covers the mutation's side effects and even names the return fields that report them, plus the embedded-definition nuance. What remains missing – error cases when the node has no HDA definition and permission requirements – is minor for a single-parameter write.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% and the single node_path parameter has no schema description. The 'Args' section merely restates 'node_path: Node path.' rather than adding meaning. The description's mention of 'the current node' implies node_path targets a node with an HDA definition, but that is thin compensation for the coverage gap.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource: 'Save the current node contents back to its HDA definition.' Clear and unambiguous, and distinct from siblings like reload_hda or edit_hda_interface. However, it never names an alternative, so the differentiation from siblings is left implicit.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
"no separate save is needed" gives a useful usage hint by preempting a save_scene call, and the embedded-definition note implies when the write survives. But there is no explicit guidance on when to use this versus reload_hda, edit_hda_interface, or set_hda_interface. Usage is only implied.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
validate_vexC
Validate VEX code by cooking the node and checking for errors.
Args: node_path: Path to the wrangle node.
| Name | Required | Description | Default |
|---|---|---|---|
| node_path | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full behavioral burden. It does disclose one real trait: validation happens by cooking the node, implying side effects (cook/dirty propagation), which is useful. But it says nothing about what happens on failure, whether errors are returned or raised, permissions, or cost — significant gaps for an unannotated tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded single sentence stating purpose and mechanism, with no filler. The Args section is somewhat redundant for a single argument already named in the schema, keeping it just short of a 5.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a one-parameter validation tool with no output schema and no annotations, the definition covers the core idea but omits what a successful vs. failed validation yields (error list, boolean, exception), which an agent needs since nothing structured supplies it.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% and the schema only offers the title 'Node Path'. The description adds meaning by specifying it is a path to the wrangle node, which is more than the schema provides. However, it gives no path syntax, placement expectations, or whether relative/absolute paths are accepted.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (validate) and resource (VEX code) plus the mechanism (cook the node, check for errors), which is more informative than a tautology and lets an agent separate it from generic node-error tools. It does not explicitly name sibling tools like get_node_errors_detailed or find_error_nodes, so full sibling differentiation is missing.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to use this versus siblings such as get_node_errors_detailed, verify_network, or find_error_nodes, and no workflow placement (e.g., after set_wrangle_code). The only implicit cue is 'wrangle node' in the args.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
verify_networkA
Inspect every node in a network at once — errors, warnings, flags, and the display node's cooked geometry counts.
Call this after building or modifying a network, the way an artist
middle-clicks nodes: if healthy is false or error_nodes is
non-empty, fix those nodes before telling the user anything is done.
Each node lists errors, warnings, bypassed and display only when
it has them; absent means none. For a LOP network the evidence is the
stage (prims, cameras, lights, gprims without a material), for a COP
network the image layer (resolution, channel ranges).
A node's errors are its LAST cook's verdict. A node that nothing has
cooked since its cause was fixed is reported stale and listed in
stale_error_nodes; pass force_cook=True to recook before judging.
The default cooks only the display node, so a heavy scene is left alone.
Args: parent_path: Network to verify (e.g. "/obj/geo1"). force_cook: Cook the display node with force and recook every node that has errors, so the verdict is about the network as it is now.
| Name | Required | Description | Default |
|---|---|---|---|
| force_cook | No | ||
| parent_path | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations exist, so the description carries full burden and does so richly: absent fields mean none, errors reflect the LAST cook, uncooked nodes are reported stale and listed in stale_error_nodes, and the default only cooks the display node so heavy scenes are left alone. This is exactly the behavioral context an agent needs.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the core purpose before any caveats, and most sentences carry real information. It is somewhat long and the force_cook explanation slightly restates the earlier display-node-cook point, but nothing is filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description must convey return shape, and it does: healthy, error_nodes, stale_error_nodes, per-node errors/warnings/bypassed/display, plus LOP/COP evidence fields. An agent can both invoke it and interpret results without further documentation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate, and it does: parent_path is given a concrete form ('/obj/geo1'), and force_cook is explained not just as a flag but as recooking the display node plus every erroring node so the verdict reflects the network's current state.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and scope — 'inspect every node in a network at once' — and enumerates what is inspected (errors, warnings, flags, cooked geometry counts). This distinguishes it in spirit from narrower siblings like find_error_nodes or get_node_errors_detailed, though it never names an alternative explicitly.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives clear usage context: 'Call this after building or modifying a network... if healthy is false or error_nodes is non-empty, fix those nodes before telling the user anything is done.' The when-to-use is explicit, but no when-NOT-to-use or named alternative (e.g. get_node_errors_detailed, find_error_nodes) is offered.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
write_cacheA
Execute a cache node, and report whether a cache actually appeared.
Foreground by default: Houdini shows its own progress dialog and the user can cancel. The call holds until the write finishes, however long that is; a client that hands a long call to a background task notifies you with the verdict when it lands. Do nothing else in Houdini meanwhile (every other call queues behind the write) and never poll the disk.
success and wrote_files reflect the files on disk and the errors of the
node that did the writing -- a filecache delegates to an internal ROP and
stays silent itself, so a failed write used to be reported as success.
Errors are named with the node they came from.
Args: ctx: MCP context. node_path: Path to the cache node. frame_range: [start, end] frame range to render. Overrides the node's $FSTART/$FEND expressions for this and later writes. background: Save from a separate Houdini process (File Cache's own "Save to Disk in Background") so Houdini stays usable, at the cost of the user seeing no progress there. Saves the hip first, returns at once with status "launched"; follow it with get_cache_status. Use it only when asked to keep working while a cache writes. A verified foreground write turns the node's Load from Disk on.
| Name | Required | Description | Default |
|---|---|---|---|
| node_path | Yes | ||
| background | No | ||
| frame_range | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and does so richly: it discloses blocking behavior, progress-dialog/cancel semantics, the hip being saved first, the immediate 'launched' status, the side effect of enabling Load from Disk on verified writes, and the gotcha that filecache delegates to an internal ROP and can silently misreport success.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loads the core behavior and keeps every sentence informational, but it is dense and slightly sprawling with asides (Houdini progress dialog, polling warnings) that could be tightened.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a mutating, non-annotated tool with no output schema and 0% schema coverage, the description covers timing, side effects, return-status semantics, error attribution, and the background protocol end-to-end.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, so the description must compensate and it does: it explains frame_range overrides the node's $FSTART/$FEND for this and later writes, and gives background in-depth semantics (separate Houdini process, returns 'launched'); node_path is self-evident from context.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Execute a cache node') and its outcome ('report whether a cache actually appeared'), which clearly separates it from siblings like list_caches, get_cache_status, and clear_cache.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives explicit when-to-use guidance for both modes: foreground is the default (with a warning to not run other Houdini calls and never poll disk), and background is reserved for 'when asked to keep working while a cache writes'; it also names get_cache_status as the required follow-up.
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.
215 tool updates
v2.24.1- Changed
assign_material1 field changed- added
Input schema / additionalPropertiesAdded value: +false
- Changed
build_network1 field changed- added
Input schema / additionalPropertiesAdded value: +false
- Changed
build_sop_chain1 field changed- added
Input schema / additionalPropertiesAdded value: +false
- Changed
cancel_top_cook1 field changed- added
Input schema / additionalPropertiesAdded value: +false
- Changed
capture_network_editor5 fields changed- added
Input schema / additionalPropertiesAdded value: +false - added
Input schema / properties / output_path / anyOfAdded value: +[ + { + "type": "string" + }, + { + "type": "null" + } +] - added
Input schema / properties / output_path / defaultAdded value: +null - removed
Input schema / properties / output_path / typeRemoved value: -"string" - removed
Input schema / requiredRemoved value: -[ - "output_path" -]
- Changed
capture_screenshot5 fields changed- added
Input schema / additionalPropertiesAdded value: +false - added
Input schema / properties / output_path / anyOfAdded value: +[ + { + "type": "string" + }, + { + "type": "null" + } +] - added
Input schema / properties / output_path / defaultAdded value: +null - removed
Input schema / properties / output_path / typeRemoved value: -"string" - removed
Input schema / requiredRemoved value: -[ - "output_path" -]
- Changed
change_node_type1 field changed- added
Input schema / additionalPropertiesAdded value: +false
- Changed
clear_cache1 field changed- added
Input schema / additionalPropertiesAdded value: +false
- Changed
compare_snapshots1 field changed- added
Input schema / additionalPropertiesAdded value: +false
- Added
compare_volumes - Added
connect_houdini - Changed
connect_nodes1 field changed- added
Input schema / additionalPropertiesAdded value: +false
- Changed
connect_nodes_batch1 field changed- added
Input schema / additionalPropertiesAdded value: +false
- Changed
cook_frame_range1 field changed- added
Input schema / additionalPropertiesAdded value: +false
- Changed
cook_top_node1 field changed- added
Input schema / additionalPropertiesAdded value: +false
- Changed
copy_node2 fields changed- added
Input schema / additionalPropertiesAdded value: +false - added
Input schema / properties / offsetAdded value: +{ + "anyOf": [ + { + "items": { + "type": "number" + }, + "type": "array" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Offset" +}
- Changed
create_chop_node1 field changed- added
Input schema / additionalPropertiesAdded value: +false
- Changed
create_cop_node1 field changed- added
Input schema / additionalPropertiesAdded value: +false
- Changed
create_hda1 field changed- added
Input schema / additionalPropertiesAdded value: +false
- Changed
create_light1 field changed- added
Input schema / additionalPropertiesAdded value: +false
- Changed
create_light_rig1 field changed- added
Input schema / additionalPropertiesAdded value: +false
- Changed
create_lop_node1 field changed- added
Input schema / additionalPropertiesAdded value: +false
- Changed
create_material4 fields changed- added
Input schema / additionalPropertiesAdded value: +false - added
Input schema / properties / name / anyOfAdded value: +[ + { + "type": "string" + }, + { + "type": "null" + } +] - changed
Input schema / properties / name / defaultPrevious value: -"material1"New value: +null - removed
Input schema / properties / name / typeRemoved value: -"string"
- Changed
create_material_network1 field changed- added
Input schema / additionalPropertiesAdded value: +false
- Changed
create_network_box1 field changed- added
Input schema / additionalPropertiesAdded value: +false
- Changed
create_node1 field changed- added
Input schema / additionalPropertiesAdded value: +false
- Changed
create_render_node1 field changed- added
Input schema / additionalPropertiesAdded value: +false
- Changed
create_spare_parameter1 field changed- added
Input schema / additionalPropertiesAdded value: +false
- Changed
create_spare_parameters1 field changed- added
Input schema / additionalPropertiesAdded value: +false
- Changed
create_sticky_note1 field changed- added
Input schema / additionalPropertiesAdded value: +false
- Changed
create_take1 field changed- added
Input schema / additionalPropertiesAdded value: +false
- Changed
create_vex_expression1 field changed- added
Input schema / additionalPropertiesAdded value: +false
- Changed
create_wrangle1 field changed- added
Input schema / additionalPropertiesAdded value: +false
- Changed
delete_keyframe1 field changed- added
Input schema / additionalPropertiesAdded value: +false
- Changed
delete_node1 field changed- added
Input schema / additionalPropertiesAdded value: +false
- Changed
dirty_work_items1 field changed- added
Input schema / additionalPropertiesAdded value: +false
- Changed
disconnect_node1 field changed- added
Input schema / additionalPropertiesAdded value: +false
- Changed
edit_hda_interface1 field changed- added
Input schema / additionalPropertiesAdded value: +false
- Changed
evaluate_expression1 field changed- added
Input schema / additionalPropertiesAdded value: +false
- Changed
execute_hscript1 field changed- added
Input schema / additionalPropertiesAdded value: +false
- Changed
execute_python1 field changed- added
Input schema / additionalPropertiesAdded value: +false
- Changed
explain_node1 field changed- added
Input schema / additionalPropertiesAdded value: +false
- Changed
export_chop_to_parm1 field changed- added
Input schema / additionalPropertiesAdded value: +false
- Changed
export_file1 field changed- added
Input schema / additionalPropertiesAdded value: +false
- Changed
find_error_nodes1 field changed- added
Input schema / additionalPropertiesAdded value: +false
- Changed
find_expensive_nodes1 field changed- added
Input schema / additionalPropertiesAdded value: +false
- Changed
find_nearest_point1 field changed- added
Input schema / additionalPropertiesAdded value: +false
- Changed
find_nodes1 field changed- added
Input schema / additionalPropertiesAdded value: +false
- Changed
find_usd_prims1 field changed- added
Input schema / additionalPropertiesAdded value: +false
- Changed
frame_all3 fields changed- added
Input schema / additionalPropertiesAdded value: +false - added
Input schema / properties / boundsAdded value: +{ + "anyOf": [ + { + "items": { + "type": "number" + }, + "type": "array" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Bounds" +} - added
Input schema / properties / node_pathsAdded value: +{ + "anyOf": [ + { + "items": { + "type": "string" + }, + "type": "array" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Node Paths" +}
- Changed
frame_selection1 field changed- added
Input schema / additionalPropertiesAdded value: +false
- Changed
generate_static_items1 field changed- added
Input schema / additionalPropertiesAdded value: +false
- Changed
get_attrib_stats8 fields changed- added
Input schema / additionalPropertiesAdded value: +false - added
Input schema / properties / framesAdded value: +{ + "anyOf": [ + { + "items": { + "type": "number" + }, + "type": "array" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Frames" +} - added
Input schema / properties / node_path / anyOfAdded value: +[ + { + "type": "string" + }, + { + "type": "null" + } +] - added
Input schema / properties / node_path / defaultAdded value: +null - removed
Input schema / properties / node_path / typeRemoved value: -"string" - added
Input schema / properties / node_pathsAdded value: +{ + "anyOf": [ + { + "items": { + "type": "string" + }, + "type": "array" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Node Paths" +} - added
Input schema / properties / percentilesAdded value: +{ + "anyOf": [ + { + "items": { + "type": "number" + }, + "type": "array" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Percentiles" +} - removed
Input schema / requiredRemoved value: -[ - "node_path" -]
- Changed
get_attrib_values1 field changed- added
Input schema / additionalPropertiesAdded value: +false
- Changed
get_attribute_info1 field changed- added
Input schema / additionalPropertiesAdded value: +false
- Changed
get_bounding_box1 field changed- added
Input schema / additionalPropertiesAdded value: +false
- Changed
get_cache_status1 field changed- added
Input schema / additionalPropertiesAdded value: +false
- Changed
get_chop_data1 field changed- added
Input schema / additionalPropertiesAdded value: +false
- Changed
get_context_info1 field changed- added
Input schema / additionalPropertiesAdded value: +false
- Changed
get_cook_chain1 field changed- added
Input schema / additionalPropertiesAdded value: +false
- Changed
get_cook_status1 field changed- added
Input schema / additionalPropertiesAdded value: +false
- Changed
get_cop_geometry1 field changed- added
Input schema / additionalPropertiesAdded value: +false
- Changed
get_cop_info1 field changed- added
Input schema / additionalPropertiesAdded value: +false
- Changed
get_cop_layer1 field changed- added
Input schema / additionalPropertiesAdded value: +false
- Changed
get_cop_vdb1 field changed- added
Input schema / additionalPropertiesAdded value: +false
- Changed
get_current_take1 field changed- added
Input schema / additionalPropertiesAdded value: +false
- Changed
get_dop_field1 field changed- added
Input schema / additionalPropertiesAdded value: +false
- Changed
get_dop_object1 field changed- added
Input schema / additionalPropertiesAdded value: +false
- Changed
get_dop_relationships1 field changed- added
Input schema / additionalPropertiesAdded value: +false
- Changed
get_env_variable1 field changed- added
Input schema / additionalPropertiesAdded value: +false
- Changed
get_expression1 field changed- added
Input schema / additionalPropertiesAdded value: +false
- Changed
get_failed_work_items1 field changed- added
Input schema / additionalPropertiesAdded value: +false
- Changed
get_file_references1 field changed- added
Input schema / additionalPropertiesAdded value: +false
- Changed
get_frame1 field changed- added
Input schema / additionalPropertiesAdded value: +false
- Changed
get_geometry_info1 field changed- added
Input schema / additionalPropertiesAdded value: +false
- Changed
get_group_members1 field changed- added
Input schema / additionalPropertiesAdded value: +false
- Changed
get_groups1 field changed- added
Input schema / additionalPropertiesAdded value: +false
- Changed
get_hda_info1 field changed- added
Input schema / additionalPropertiesAdded value: +false
- Changed
get_hda_section_content1 field changed- added
Input schema / additionalPropertiesAdded value: +false
- Changed
get_hda_sections1 field changed- added
Input schema / additionalPropertiesAdded value: +false
- Changed
get_help_page1 field changed- added
Input schema / additionalPropertiesAdded value: +false
- Changed
get_houdini_connection_status1 field changed- added
Input schema / additionalPropertiesAdded value: +false
- Changed
get_keyframes1 field changed- added
Input schema / additionalPropertiesAdded value: +false
- Changed
get_last_modified_prims1 field changed- added
Input schema / additionalPropertiesAdded value: +false
- Changed
get_material_info1 field changed- added
Input schema / additionalPropertiesAdded value: +false
- Changed
get_network_overview1 field changed- added
Input schema / additionalPropertiesAdded value: +false
- Changed
get_node_card1 field changed- added
Input schema / additionalPropertiesAdded value: +false
- Changed
get_node_errors_detailed1 field changed- added
Input schema / additionalPropertiesAdded value: +false
- Changed
get_node_info1 field changed- added
Input schema / additionalPropertiesAdded value: +false
- Changed
get_parameter1 field changed- added
Input schema / additionalPropertiesAdded value: +false
- Changed
get_parameter_schema1 field changed- added
Input schema / additionalPropertiesAdded value: +false
- Changed
get_parameters2 fields changed- added
Input schema / additionalPropertiesAdded value: +false - added
Input schema / properties / include_locked_assetsAdded value: +{ + "default": false, + "title": "Include Locked Assets", + "type": "boolean" +}
- Changed
get_parm_references1 field changed- added
Input schema / additionalPropertiesAdded value: +false
- Changed
get_parm_template_tree1 field changed- added
Input schema / additionalPropertiesAdded value: +false
- Changed
get_pdg_graph1 field changed- added
Input schema / additionalPropertiesAdded value: +false
- Changed
get_points1 field changed- added
Input schema / additionalPropertiesAdded value: +false
- Changed
get_prim_intrinsics1 field changed- added
Input schema / additionalPropertiesAdded value: +false
- Changed
get_prims1 field changed- added
Input schema / additionalPropertiesAdded value: +false
- Changed
get_render_progress1 field changed- added
Input schema / additionalPropertiesAdded value: +false
- Changed
get_render_settings1 field changed- added
Input schema / additionalPropertiesAdded value: +false
- Changed
get_scene_info1 field changed- added
Input schema / additionalPropertiesAdded value: +false
- Changed
get_scene_summary1 field changed- added
Input schema / additionalPropertiesAdded value: +false
- Changed
get_selection1 field changed- added
Input schema / additionalPropertiesAdded value: +false
- Changed
get_shelf_tool_script1 field changed- added
Input schema / additionalPropertiesAdded value: +false
- Changed
get_sim_memory_usage1 field changed- added
Input schema / additionalPropertiesAdded value: +false
- Changed
get_simulation_info1 field changed- added
Input schema / additionalPropertiesAdded value: +false
- Changed
get_stage_info1 field changed- added
Input schema / additionalPropertiesAdded value: +false
- Changed
get_top_logs1 field changed- added
Input schema / additionalPropertiesAdded value: +false
- Changed
get_top_network_info1 field changed- added
Input schema / additionalPropertiesAdded value: +false
- Changed
get_top_scheduler_info1 field changed- added
Input schema / additionalPropertiesAdded value: +false
- Changed
get_usd_attribute1 field changed- added
Input schema / additionalPropertiesAdded value: +false
- Added
get_usd_attributes - Changed
get_usd_bound_material1 field changed- added
Input schema / additionalPropertiesAdded value: +false
- Changed
get_usd_composition1 field changed- added
Input schema / additionalPropertiesAdded value: +false
- Changed
get_usd_layers1 field changed- added
Input schema / additionalPropertiesAdded value: +false
- Changed
get_usd_materials1 field changed- added
Input schema / additionalPropertiesAdded value: +false
- Changed
get_usd_prim3 fields changed- added
Input schema / additionalPropertiesAdded value: +false - added
Input schema / properties / attr_patternsAdded value: +{ + "anyOf": [ + { + "items": { + "type": "string" + }, + "type": "array" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Attr Patterns" +} - added
Input schema / properties / timeAdded value: +{ + "anyOf": [ + { + "type": "number" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Time" +}
- Changed
get_usd_prim_stats1 field changed- added
Input schema / additionalPropertiesAdded value: +false
- Changed
get_usd_variants1 field changed- added
Input schema / additionalPropertiesAdded value: +false
- Added
get_usd_world_transform - Changed
get_viewport_info1 field changed- added
Input schema / additionalPropertiesAdded value: +false
- Changed
get_volume_info3 fields changed- added
Input schema / additionalPropertiesAdded value: +false - added
Input schema / properties / binsAdded value: +{ + "anyOf": [ + { + "type": "integer" + }, + { + "items": { + "type": "number" + }, + "type": "array" + } + ], + "default": 0, + "title": "Bins" +} - added
Input schema / properties / thresholdAdded value: +{ + "anyOf": [ + { + "type": "number" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Threshold" +}
- Changed
get_work_item_info1 field changed- added
Input schema / additionalPropertiesAdded value: +false
- Changed
get_work_item_states1 field changed- added
Input schema / additionalPropertiesAdded value: +false
- Changed
get_workflow_guide1 field changed- added
Input schema / additionalPropertiesAdded value: +false
- Changed
get_wrangle_code1 field changed- added
Input schema / additionalPropertiesAdded value: +false
- Changed
import_file1 field changed- added
Input schema / additionalPropertiesAdded value: +false
- Changed
inspect_usd_layer1 field changed- added
Input schema / additionalPropertiesAdded value: +false
- Changed
install_hda1 field changed- added
Input schema / additionalPropertiesAdded value: +false
- Changed
layout_children1 field changed- added
Input schema / additionalPropertiesAdded value: +false
- Changed
link_parameters1 field changed- added
Input schema / additionalPropertiesAdded value: +false
- Changed
list_caches1 field changed- added
Input schema / additionalPropertiesAdded value: +false
- Changed
list_children1 field changed- added
Input schema / additionalPropertiesAdded value: +false
- Changed
list_chop_channels1 field changed- added
Input schema / additionalPropertiesAdded value: +false
- Changed
list_cop_node_types1 field changed- added
Input schema / additionalPropertiesAdded value: +false
- Changed
list_dop_objects1 field changed- added
Input schema / additionalPropertiesAdded value: +false
- Changed
list_hda_versions1 field changed- added
Input schema / additionalPropertiesAdded value: +false
- Changed
list_installed_hdas1 field changed- added
Input schema / additionalPropertiesAdded value: +false
- Changed
list_lights1 field changed- added
Input schema / additionalPropertiesAdded value: +false
- Changed
list_material_types1 field changed- added
Input schema / additionalPropertiesAdded value: +false
- Changed
list_materials1 field changed- added
Input schema / additionalPropertiesAdded value: +false
- Changed
list_node_types1 field changed- added
Input schema / additionalPropertiesAdded value: +false
- Changed
list_panes1 field changed- added
Input schema / additionalPropertiesAdded value: +false
- Changed
list_render_nodes1 field changed- added
Input schema / additionalPropertiesAdded value: +false
- Changed
list_shelf_tools1 field changed- added
Input schema / additionalPropertiesAdded value: +false
- Changed
list_takes1 field changed- added
Input schema / additionalPropertiesAdded value: +false
- Changed
list_usd_prims1 field changed- added
Input schema / additionalPropertiesAdded value: +false
- Changed
load_scene1 field changed- added
Input schema / additionalPropertiesAdded value: +false
- Changed
lock_parameter1 field changed- added
Input schema / additionalPropertiesAdded value: +false
- Changed
log_status1 field changed- added
Input schema / additionalPropertiesAdded value: +false
- Changed
move_node1 field changed- added
Input schema / additionalPropertiesAdded value: +false
- Changed
new_scene1 field changed- added
Input schema / additionalPropertiesAdded value: +false
- Changed
pause_top_cook1 field changed- added
Input schema / additionalPropertiesAdded value: +false
- Changed
playbar_control1 field changed- added
Input schema / additionalPropertiesAdded value: +false
- Changed
press_button2 fields changed- added
Input schema / additionalPropertiesAdded value: +false - added
Input schema / properties / actionAdded value: +{ + "default": false, + "title": "Action", + "type": "boolean" +}
- Changed
redo1 field changed- added
Input schema / additionalPropertiesAdded value: +false
- Changed
reload_hda1 field changed- added
Input schema / additionalPropertiesAdded value: +false
- Changed
reload_plugin1 field changed- added
Input schema / additionalPropertiesAdded value: +false
- Changed
rename_node1 field changed- added
Input schema / additionalPropertiesAdded value: +false
- Changed
render_node_network5 fields changed- added
Input schema / additionalPropertiesAdded value: +false - added
Input schema / properties / output_path / anyOfAdded value: +[ + { + "type": "string" + }, + { + "type": "null" + } +] - added
Input schema / properties / output_path / defaultAdded value: +null - removed
Input schema / properties / output_path / typeRemoved value: -"string" - changed
Input schema / requiredPrevious value: -[ - "node_path", - "output_path" -]New value: +[ + "node_path" +]
- Changed
render_quad_view5 fields changed- added
Input schema / additionalPropertiesAdded value: +false - added
Input schema / properties / output_path / anyOfAdded value: +[ + { + "type": "string" + }, + { + "type": "null" + } +] - added
Input schema / properties / output_path / defaultAdded value: +null - removed
Input schema / properties / output_path / typeRemoved value: -"string" - removed
Input schema / requiredRemoved value: -[ - "output_path" -]
- Added
render_sheet - Changed
render_viewport5 fields changed- added
Input schema / additionalPropertiesAdded value: +false - added
Input schema / properties / output_path / anyOfAdded value: +[ + { + "type": "string" + }, + { + "type": "null" + } +] - added
Input schema / properties / output_path / defaultAdded value: +null - removed
Input schema / properties / output_path / typeRemoved value: -"string" - removed
Input schema / requiredRemoved value: -[ - "output_path" -]
- Changed
reorder_inputs1 field changed- added
Input schema / additionalPropertiesAdded value: +false
- Changed
reset_simulation1 field changed- added
Input schema / additionalPropertiesAdded value: +false
- Changed
revert_parameter1 field changed- added
Input schema / additionalPropertiesAdded value: +false
- Changed
run_shelf_tool1 field changed- added
Input schema / additionalPropertiesAdded value: +false
- Changed
sample_geometry1 field changed- added
Input schema / additionalPropertiesAdded value: +false
- Added
sample_volume - Changed
save_scene1 field changed- added
Input schema / additionalPropertiesAdded value: +false
- Changed
search_help1 field changed- added
Input schema / additionalPropertiesAdded value: +false
- Changed
set_cop_flags1 field changed- added
Input schema / additionalPropertiesAdded value: +false
- Changed
set_current_network1 field changed- added
Input schema / additionalPropertiesAdded value: +false
- Changed
set_current_take1 field changed- added
Input schema / additionalPropertiesAdded value: +false
- Changed
set_detail_attrib1 field changed- added
Input schema / additionalPropertiesAdded value: +false
- Changed
set_expression1 field changed- added
Input schema / additionalPropertiesAdded value: +false
- Changed
set_frame1 field changed- added
Input schema / additionalPropertiesAdded value: +false
- Changed
set_frame_range1 field changed- added
Input schema / additionalPropertiesAdded value: +false
- Changed
set_hda_interface1 field changed- added
Input schema / additionalPropertiesAdded value: +false
- Changed
set_hda_section_content1 field changed- added
Input schema / additionalPropertiesAdded value: +false
- Changed
set_keyframe1 field changed- added
Input schema / additionalPropertiesAdded value: +false
- Changed
set_keyframes1 field changed- added
Input schema / additionalPropertiesAdded value: +false
- Changed
set_light_properties1 field changed- added
Input schema / additionalPropertiesAdded value: +false
- Changed
set_node_color1 field changed- added
Input schema / additionalPropertiesAdded value: +false
- Changed
set_node_flags1 field changed- added
Input schema / additionalPropertiesAdded value: +false
- Changed
set_node_position1 field changed- added
Input schema / additionalPropertiesAdded value: +false
- Changed
set_object_transform1 field changed- added
Input schema / additionalPropertiesAdded value: +false
- Changed
set_parameter2 fields changed- added
Input schema / additionalPropertiesAdded value: +false - added
Input schema / properties / run_callbacksAdded value: +{ + "default": false, + "title": "Run Callbacks", + "type": "boolean" +}
- Changed
set_parameters2 fields changed- added
Input schema / additionalPropertiesAdded value: +false - added
Input schema / properties / run_callbacksAdded value: +{ + "default": false, + "title": "Run Callbacks", + "type": "boolean" +}
- Changed
set_playback_range1 field changed- added
Input schema / additionalPropertiesAdded value: +false
- Changed
set_render_settings1 field changed- added
Input schema / additionalPropertiesAdded value: +false
- Changed
set_selection1 field changed- added
Input schema / additionalPropertiesAdded value: +false
- Changed
set_update_mode1 field changed- added
Input schema / additionalPropertiesAdded value: +false
- Changed
set_usd_attribute1 field changed- added
Input schema / additionalPropertiesAdded value: +false
- Changed
set_viewer_context1 field changed- added
Input schema / additionalPropertiesAdded value: +false
- Changed
set_viewport_camera1 field changed- added
Input schema / additionalPropertiesAdded value: +false
- Changed
set_viewport_direction8 fields changed- added
Input schema / additionalPropertiesAdded value: +false - added
Input schema / properties / direction / anyOfAdded value: +[ + { + "type": "string" + }, + { + "type": "null" + } +] - added
Input schema / properties / direction / defaultAdded value: +null - removed
Input schema / properties / direction / typeRemoved value: -"string" - added
Input schema / properties / distanceAdded value: +{ + "anyOf": [ + { + "type": "number" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Distance" +} - added
Input schema / properties / pivotAdded value: +{ + "anyOf": [ + { + "items": { + "type": "number" + }, + "type": "array" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Pivot" +} - added
Input schema / properties / rotationAdded value: +{ + "anyOf": [ + { + "items": { + "type": "number" + }, + "type": "array" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Rotation" +} - removed
Input schema / requiredRemoved value: -[ - "direction" -]
- Changed
set_viewport_display9 fields changed- added
Input schema / additionalPropertiesAdded value: +false - added
Input schema / properties / color_schemeAdded value: +{ + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Color Scheme" +} - added
Input schema / properties / display_mode / anyOfAdded value: +[ + { + "type": "string" + }, + { + "type": "null" + } +] - added
Input schema / properties / display_mode / defaultAdded value: +null - removed
Input schema / properties / display_mode / typeRemoved value: -"string" - added
Input schema / properties / environment_backgroundAdded value: +{ + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Environment Background" +} - added
Input schema / properties / point_sizeAdded value: +{ + "anyOf": [ + { + "type": "number" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Point Size" +} - added
Input schema / properties / reference_planeAdded value: +{ + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Reference Plane" +} - removed
Input schema / requiredRemoved value: -[ - "display_mode" -]
- Changed
set_viewport_renderer1 field changed- added
Input schema / additionalPropertiesAdded value: +false
- Changed
set_wrangle_code1 field changed- added
Input schema / additionalPropertiesAdded value: +false
- Changed
setup_flip_sim1 field changed- added
Input schema / additionalPropertiesAdded value: +false
- Changed
setup_pyro_sim1 field changed- added
Input schema / additionalPropertiesAdded value: +false
- Changed
setup_rbd_sim1 field changed- added
Input schema / additionalPropertiesAdded value: +false
- Changed
setup_render1 field changed- added
Input schema / additionalPropertiesAdded value: +false
- Changed
setup_vellum_sim1 field changed- added
Input schema / additionalPropertiesAdded value: +false
- Added
start_houdini - Changed
start_render2 fields changed- added
Input schema / additionalPropertiesAdded value: +false - added
Input schema / properties / overridesAdded value: +{ + "anyOf": [ + { + "additionalProperties": true, + "type": "object" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Overrides" +}
- Changed
step_simulation1 field changed- added
Input schema / additionalPropertiesAdded value: +false
- Added
stop_houdini - Changed
undo1 field changed- added
Input schema / additionalPropertiesAdded value: +false
- Changed
uninstall_hda1 field changed- added
Input schema / additionalPropertiesAdded value: +false
- Changed
update_hda1 field changed- added
Input schema / additionalPropertiesAdded value: +false
- Changed
validate_vex1 field changed- added
Input schema / additionalPropertiesAdded value: +false
- Changed
verify_network2 fields changed- added
Input schema / additionalPropertiesAdded value: +false - added
Input schema / properties / force_cookAdded value: +{ + "default": false, + "title": "Force Cook", + "type": "boolean" +}
- Changed
write_cache1 field changed- added
Input schema / additionalPropertiesAdded value: +false
19 tool updates
v2.21.0- Changed
find_usd_prims1 field changed- added
Input schema / properties / traverse_instance_proxiesAdded value: +{ + "default": false, + "title": "Traverse Instance Proxies", + "type": "boolean" +}
- Changed
get_failed_work_items1 field changed- changed
Input schema / properties / limit / defaultPrevious value: -50New value: +10
- Changed
get_node_card3 fields changed- added
Input schema / properties / include_help / anyOfAdded value: +[ + { + "type": "boolean" + }, + { + "type": "null" + } +] - changed
Input schema / properties / include_help / defaultPrevious value: -trueNew value: +null - removed
Input schema / properties / include_help / typeRemoved value: -"boolean"
- Changed
get_parameters7 fields changed- added
Input schema / properties / insideAdded value: +{ + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Inside" +} - added
Input schema / properties / node_path / anyOfAdded value: +[ + { + "type": "string" + }, + { + "type": "null" + } +] - added
Input schema / properties / node_path / defaultAdded value: +null - removed
Input schema / properties / node_path / typeRemoved value: -"string" - added
Input schema / properties / node_typeAdded value: +{ + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Node Type" +} - added
Input schema / properties / recursiveAdded value: +{ + "default": false, + "title": "Recursive", + "type": "boolean" +} - removed
Input schema / requiredRemoved value: -[ - "node_path" -]
- Changed
get_parm_references1 field changed- added
Input schema / properties / include_node_levelAdded value: +{ + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Include Node Level" +}
- Changed
get_parm_template_tree2 fields changed- added
Input schema / properties / include_tagsAdded value: +{ + "default": false, + "title": "Include Tags", + "type": "boolean" +} - changed
Input schema / properties / max_entries / defaultPrevious value: -400New value: +150
- Changed
get_points1 field changed- changed
Input schema / properties / count / defaultPrevious value: -1000New value: +200
- Changed
get_prim_intrinsics3 fields changed- added
Input schema / properties / intrinsicsAdded value: +{ + "anyOf": [ + { + "items": { + "type": "string" + }, + "type": "array" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Intrinsics" +} - added
Input schema / properties / prim_indicesAdded value: +{ + "anyOf": [ + { + "items": { + "type": "integer" + }, + "type": "array" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Prim Indices" +} - added
Input schema / properties / prim_rangeAdded value: +{ + "anyOf": [ + { + "items": { + "type": "integer" + }, + "type": "array" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Prim Range" +}
- Changed
get_prims1 field changed- changed
Input schema / properties / count / defaultPrevious value: -1000New value: +200
- Changed
get_stage_info2 fields changed- added
Input schema / properties / node_path / defaultAdded value: +"/stage" - removed
Input schema / requiredRemoved value: -[ - "node_path" -]
- Changed
get_usd_prim1 field changed- added
Input schema / properties / traverse_instance_proxiesAdded value: +{ + "default": false, + "title": "Traverse Instance Proxies", + "type": "boolean" +}
- Changed
get_usd_prim_stats1 field changed- added
Input schema / properties / traverse_instance_proxiesAdded value: +{ + "default": false, + "title": "Traverse Instance Proxies", + "type": "boolean" +}
- Changed
list_installed_hdas1 field changed- added
Input schema / properties / limitAdded value: +{ + "default": 100, + "title": "Limit", + "type": "integer" +}
- Changed
list_usd_prims1 field changed- added
Input schema / properties / traverse_instance_proxiesAdded value: +{ + "default": false, + "title": "Traverse Instance Proxies", + "type": "boolean" +}
- Added
reload_plugin - Changed
set_current_network1 field changed- added
Input schema / properties / other_objectsAdded value: +{ + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": "hide", + "title": "Other Objects" +}
- Changed
set_parameter1 field changed- added
Input schema / properties / override_expressionAdded value: +{ + "default": false, + "title": "Override Expression", + "type": "boolean" +}
- Changed
set_parameters1 field changed- added
Input schema / properties / override_expressionAdded value: +{ + "default": false, + "title": "Override Expression", + "type": "boolean" +}
- Changed
setup_vellum_sim1 field changed- added
Input schema / properties / groundAdded value: +{ + "default": true, + "title": "Ground", + "type": "boolean" +}
1 tool update
v2.19.0- Changed
link_parameters1 field changed- added
Input schema / properties / replace_existingAdded value: +{ + "default": false, + "title": "Replace Existing", + "type": "boolean" +}
12 tool updates
v2.18.0- Added
change_node_type - Changed
connect_nodes1 field changed- added
Input schema / properties / indirect_inputAdded value: +{ + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Indirect Input" +}
- Added
edit_hda_interface - Changed
get_node_card1 field changed- added
Input schema / properties / include_helpAdded value: +{ + "default": true, + "title": "Include Help", + "type": "boolean" +}
- Added
get_parm_references - Added
get_parm_template_tree - Changed
get_usd_attribute3 fields changed- added
Input schema / properties / fullAdded value: +{ + "default": false, + "title": "Full", + "type": "boolean" +} - added
Input schema / properties / limitAdded value: +{ + "default": 64, + "title": "Limit", + "type": "integer" +} - added
Input schema / properties / offsetAdded value: +{ + "default": 0, + "title": "Offset", + "type": "integer" +}
- Added
get_usd_bound_material - Changed
get_usd_prim1 field changed- added
Input schema / properties / fullAdded value: +{ + "default": false, + "title": "Full", + "type": "boolean" +}
- Changed
load_scene2 fields changed- added
Input schema / properties / node_pathsAdded value: +{ + "anyOf": [ + { + "items": { + "type": "string" + }, + "type": "array" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Node Paths" +} - added
Input schema / properties / overwrite_on_conflictAdded value: +{ + "default": false, + "title": "Overwrite On Conflict", + "type": "boolean" +}
- Added
press_button - Added
set_hda_interface
199 tool updates
v0.1.0- First observed
assign_material - First observed
build_network - First observed
build_sop_chain - First observed
cancel_top_cook - First observed
capture_network_editor - First observed
capture_screenshot - First observed
clear_cache - First observed
compare_snapshots - First observed
connect_nodes - First observed
connect_nodes_batch - First observed
cook_frame_range - First observed
cook_top_node - First observed
copy_node - First observed
create_chop_node - First observed
create_cop_node - First observed
create_hda - First observed
create_light - First observed
create_light_rig - First observed
create_lop_node - First observed
create_material - First observed
create_material_network - First observed
create_network_box - First observed
create_node - First observed
create_render_node - First observed
create_spare_parameter - First observed
create_spare_parameters - First observed
create_sticky_note - First observed
create_take - First observed
create_vex_expression - First observed
create_wrangle - First observed
delete_keyframe - First observed
delete_node - First observed
dirty_work_items - First observed
disconnect_node - First observed
evaluate_expression - First observed
execute_hscript - First observed
execute_python - First observed
explain_node - First observed
export_chop_to_parm - First observed
export_file - First observed
find_error_nodes - First observed
find_expensive_nodes - First observed
find_nearest_point - First observed
find_nodes - First observed
find_usd_prims - First observed
frame_all - First observed
frame_selection - First observed
generate_static_items - First observed
get_attrib_stats - First observed
get_attrib_values - First observed
get_attribute_info - First observed
get_bounding_box - First observed
get_cache_status - First observed
get_chop_data - First observed
get_context_info - First observed
get_cook_chain - First observed
get_cook_status - First observed
get_cop_geometry - First observed
get_cop_info - First observed
get_cop_layer - First observed
get_cop_vdb - First observed
get_current_take - First observed
get_dop_field - First observed
get_dop_object - First observed
get_dop_relationships - First observed
get_env_variable - First observed
get_expression - First observed
get_failed_work_items - First observed
get_file_references - First observed
get_frame - First observed
get_geometry_info - First observed
get_group_members - First observed
get_groups - First observed
get_hda_info - First observed
get_hda_section_content - First observed
get_hda_sections - First observed
get_help_page - First observed
get_houdini_connection_status - First observed
get_keyframes - First observed
get_last_modified_prims - First observed
get_material_info - First observed
get_network_overview - First observed
get_node_card - First observed
get_node_errors_detailed - First observed
get_node_info - First observed
get_parameter - First observed
get_parameter_schema - First observed
get_parameters - First observed
get_pdg_graph - First observed
get_points - First observed
get_prim_intrinsics - First observed
get_prims - First observed
get_render_progress - First observed
get_render_settings - First observed
get_scene_info - First observed
get_scene_summary - First observed
get_selection - First observed
get_shelf_tool_script - First observed
get_sim_memory_usage - First observed
get_simulation_info - First observed
get_stage_info - First observed
get_top_logs - First observed
get_top_network_info - First observed
get_top_scheduler_info - First observed
get_usd_attribute - First observed
get_usd_composition - First observed
get_usd_layers - First observed
get_usd_materials - First observed
get_usd_prim - First observed
get_usd_prim_stats - First observed
get_usd_variants - First observed
get_viewport_info - First observed
get_volume_info - First observed
get_work_item_info - First observed
get_work_item_states - First observed
get_workflow_guide - First observed
get_wrangle_code - First observed
import_file - First observed
inspect_usd_layer - First observed
install_hda - First observed
layout_children - First observed
link_parameters - First observed
list_caches - First observed
list_children - First observed
list_chop_channels - First observed
list_cop_node_types - First observed
list_dop_objects - First observed
list_hda_versions - First observed
list_installed_hdas - First observed
list_lights - First observed
list_material_types - First observed
list_materials - First observed
list_node_types - First observed
list_panes - First observed
list_render_nodes - First observed
list_shelf_tools - First observed
list_takes - First observed
list_usd_prims - First observed
load_scene - First observed
lock_parameter - First observed
log_status - First observed
move_node - First observed
new_scene - First observed
pause_top_cook - First observed
playbar_control - First observed
redo - First observed
reload_hda - First observed
rename_node - First observed
render_node_network - First observed
render_quad_view - First observed
render_viewport - First observed
reorder_inputs - First observed
reset_simulation - First observed
revert_parameter - First observed
run_shelf_tool - First observed
sample_geometry - First observed
save_scene - First observed
search_help - First observed
set_cop_flags - First observed
set_current_network - First observed
set_current_take - First observed
set_detail_attrib - First observed
set_expression - First observed
set_frame - First observed
set_frame_range - First observed
set_hda_section_content - First observed
set_keyframe - First observed
set_keyframes - First observed
set_light_properties - First observed
set_node_color - First observed
set_node_flags - First observed
set_node_position - First observed
set_object_transform - First observed
set_parameter - First observed
set_parameters - First observed
set_playback_range - First observed
set_render_settings - First observed
set_selection - First observed
set_update_mode - First observed
set_usd_attribute - First observed
set_viewer_context - First observed
set_viewport_camera - First observed
set_viewport_direction - First observed
set_viewport_display - First observed
set_viewport_renderer - First observed
set_wrangle_code - First observed
setup_flip_sim - First observed
setup_pyro_sim - First observed
setup_rbd_sim - First observed
setup_render - First observed
setup_vellum_sim - First observed
start_render - First observed
step_simulation - First observed
undo - First observed
uninstall_hda - First observed
update_hda - First observed
validate_vex - First observed
verify_network - First observed
write_cache
TDQS
Scored across 215 tools
The set spans many Houdini contexts and most tools have distinct targets, but the sheer volume creates real overlap: geometry reads (get_geometry_info, get_points, get_prims, get_attrib_values, sample_geometry, get_attrib_stats), USD reads (get_usd_prim, get_usd_attributes, list_usd_prims, find_usd_prims), and parameter tools (set_parameter, set_parameters, set_expression, link_parameters, create_spare_parameter) all sit close together. Descriptions do a good job steering selection with explicit 'prefer X over Y' notes, which keeps it above a 2.
Names are overwhelmingly consistent verb_noun snake_case (set_keyframe, get_usd_prim, create_lop_node, list_dop_objects), with domain prefixes (usd_, cop_, dop_, top_, hda_) used predictably. Minor deviations like playbar_control, build_network, and bare undo/redo exist but remain readable and predictable.
215 tools is far beyond any reasonable single-server surface and well past the 50+ threshold. Even for a domain as broad as Houdini, this forces the agent to navigate an enormous menu where many capabilities are reachable through multiple near-duplicate tools.
Coverage is essentially exhaustive across Houdini's contexts: node CRUD, parameters, keyframes, USD/Solaris, materials, lights, DOP/COP/CHOP/TOP workflows, HDAs, rendering, viewport capture, documentation search, and session management. Lifecycle operations (create, read, update, delete, cook, verify) are present throughout with no obvious dead ends.
Maintenance
Related MCP Connectors
A comprehensive Model Context Protocol (MCP) server that enables AI assistants to control Unreal E…
Generate game-ready 3D models, textures, and audio from natural language, over MCP.
Nifty's MCP server — exposes tasks, projects, messages, and files as tools for AI agents.
Free public MCP for AI agents — 193 tools, 44 workflows. No API key.
Related MCP Servers
- AlicenseNot gradedqualityDmaintenanceEnables natural language control of SideFX Houdini for tasks including node management, parameter editing, and geometry inspection. It leverages RPYC to execute Python scripts and manage scene data through an MCP-compatible interface.MIT
- AlicenseAqualityBmaintenanceDrive SideFX Houdini from any agent: build node networks in one all-or-nothing call, cook, render, capture the viewport, and read the offline docs of your Houdini build. 20 tools with modes.20271 PyPI5MIT
- AlicenseNot gradedqualityDmaintenanceEnables AI agents to directly control SideFX Houdini, including creating nodes, setting parameters, executing Python, capturing viewports, and rendering frames, via 57 MCP tools.2MIT
- AlicenseNot gradedqualityDmaintenanceEnables AI assistants to control SideFX Houdini 3D software, providing tools for scene management, node operations, rendering, and more through the Model Context Protocol.1MIT