nodes
nodes
¶
MCP tool wrappers for Houdini node operations.
Each tool delegates to the corresponding handler running inside Houdini via the HTTP bridge.
Functions:
| Name | Description |
|---|---|
connect_nodes |
Connect two nodes together. |
connect_nodes_batch |
Connect multiple node pairs in a single call. |
copy_node |
Copy a node, optionally into a different parent network. |
create_node |
Create a node inside a parent network. |
delete_node |
Delete a node. |
disconnect_node |
Disconnect one or all inputs of a node. |
find_nodes |
Search for nodes by name pattern, type, or context. |
get_node_info |
Get type, connections, flags, errors, cook time, and non-default parameters for a node. |
layout_children |
Auto-layout children of a network node. |
list_children |
List children of a network node. |
list_node_types |
List available node types for a context category. |
move_node |
Move a node to a different parent network. |
rename_node |
Rename a node. |
reorder_inputs |
Reorder the input connections of a node. |
set_node_color |
Set a node's color in the network editor. |
set_node_flags |
Set flags on a node. |
set_node_position |
Set a node's position in the network editor. |
Functions¶
connect_nodes
async
¶
connect_nodes(
ctx: Context,
source_path: str,
dest_path: str,
output_index: int = 0,
input_index: int = 0,
) -> dict
connect_nodes_batch
async
¶
copy_node
async
¶
create_node
async
¶
create_node(
ctx: Context,
parent_path: str,
node_type: str,
name: Optional[str] = None,
position: Optional[list] = None,
) -> dict
Create a node inside a parent network.
Before using this, call list_node_types(context='
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
|
Context
|
MCP context. |
required |
|
str
|
Parent network path. |
required |
|
str
|
Node type (e.g. 'geo', 'box', 'grid'). |
required |
|
Optional[str]
|
Node name. |
None
|
|
Optional[list]
|
[x, y] network editor position. |
None
|
delete_node
async
¶
disconnect_node
async
¶
disconnect_node(
ctx: Context,
node_path: str,
input_index: Optional[int] = None,
disconnect_all: bool = False,
) -> dict
find_nodes
async
¶
find_nodes(
ctx: Context,
pattern: Optional[str] = None,
node_type: Optional[str] = None,
context: Optional[str] = None,
inside: str = "/",
) -> dict
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.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
|
Context
|
MCP context. |
required |
|
Optional[str]
|
Glob pattern for node names (e.g. 'box*'). |
None
|
|
Optional[str]
|
Node type filter (e.g. 'box', 'null'). |
None
|
|
Optional[str]
|
Category filter (e.g. 'Sop', 'Object'). |
None
|
|
str
|
Root path to search within (default '/'). |
'/'
|
get_node_info
async
¶
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.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
|
Context
|
MCP context. |
required |
|
str
|
Node path. |
required |
layout_children
async
¶
list_children
async
¶
list_children(
ctx: Context,
parent_path: str,
recursive: bool = False,
filter_type: Optional[str] = None,
) -> dict
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.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
|
Context
|
MCP context. |
required |
|
str
|
Parent network path. |
required |
|
bool
|
Include all descendants (use sparingly on large scenes). |
False
|
|
Optional[str]
|
Node type filter (e.g. 'box', 'merge'). |
None
|
list_node_types
async
¶
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.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
|
Context
|
MCP context. |
required |
|
str
|
Category name (e.g. 'Sop', 'Lop', 'Dop', 'Top', 'Cop2'). |
required |
|
str | None
|
Substring to filter type name or label (case-insensitive). |
None
|
|
int
|
Max entries to return (default 200, max recommended 200). |
200
|
move_node
async
¶
rename_node
async
¶
reorder_inputs
async
¶
set_node_color
async
¶
set_node_flags
async
¶
set_node_flags(
ctx: Context,
node_path: str,
display: Optional[bool] = None,
render: Optional[bool] = None,
bypass: Optional[bool] = None,
template: Optional[bool] = None,
lock: Optional[bool] = None,
) -> dict
Set flags on a node.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
|
Context
|
MCP context. |
required |
|
str
|
Node path. |
required |
|
Optional[bool]
|
Display flag. |
None
|
|
Optional[bool]
|
Render flag. |
None
|
|
Optional[bool]
|
Bypass flag. |
None
|
|
Optional[bool]
|
Template flag. |
None
|
|
Optional[bool]
|
Lock flag. |
None
|