Skip to content

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 two nodes together.

Parameters:

Name Type Description Default
ctx
Context

MCP context.

required
source_path
str

Upstream node path.

required
dest_path
str

Downstream node path.

required
output_index
int

Source output index.

0
input_index
int

Destination input index.

0

connect_nodes_batch async

connect_nodes_batch(ctx: Context, connections: list[dict[str, Any]]) -> dict

Connect multiple node pairs in a single call.

Parameters:

Name Type Description Default
connections
list[dict[str, Any]]

List of connections. Each dict has keys: source_path (str), dest_path (str), output_index (int, default 0), input_index (int, default 0).

required

copy_node async

copy_node(
    ctx: Context,
    node_path: str,
    dest_parent: Optional[str] = None,
    new_name: Optional[str] = None,
) -> dict

Copy a node, optionally into a different parent network.

Parameters:

Name Type Description Default
ctx
Context

MCP context.

required
node_path
str

Source node path.

required
dest_parent
Optional[str]

Destination parent path.

None
new_name
Optional[str]

Name for the copy.

None

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='', 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.

Parameters:

Name Type Description Default
ctx
Context

MCP context.

required
parent_path
str

Parent network path.

required
node_type
str

Node type (e.g. 'geo', 'box', 'grid').

required
name
Optional[str]

Node name.

None
position
Optional[list]

[x, y] network editor position.

None

delete_node async

delete_node(ctx: Context, node_path: str) -> dict

Delete a node.

Parameters:

Name Type Description Default
ctx
Context

MCP context.

required
node_path
str

Node path.

required

disconnect_node async

disconnect_node(
    ctx: Context,
    node_path: str,
    input_index: Optional[int] = None,
    disconnect_all: bool = False,
) -> dict

Disconnect one or all inputs of a node.

Parameters:

Name Type Description Default
ctx
Context

MCP context.

required
node_path
str

Node path.

required
input_index
Optional[int]

Input index to disconnect.

None
disconnect_all
bool

Disconnect all inputs.

False

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
ctx
Context

MCP context.

required
pattern
Optional[str]

Glob pattern for node names (e.g. 'box*').

None
node_type
Optional[str]

Node type filter (e.g. 'box', 'null').

None
context
Optional[str]

Category filter (e.g. 'Sop', 'Object').

None
inside
str

Root path to search within (default '/').

'/'

get_node_info async

get_node_info(ctx: Context, node_path: str) -> dict

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
ctx
Context

MCP context.

required
node_path
str

Node path.

required

layout_children async

layout_children(
    ctx: Context, parent_path: str, spacing: Optional[float] = None
) -> dict

Auto-layout children of a network node.

Parameters:

Name Type Description Default
ctx
Context

MCP context.

required
parent_path
str

Parent network path.

required
spacing
Optional[float]

Spacing multiplier between nodes.

None

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
ctx
Context

MCP context.

required
parent_path
str

Parent network path.

required
recursive
bool

Include all descendants (use sparingly on large scenes).

False
filter_type
Optional[str]

Node type filter (e.g. 'box', 'merge').

None

list_node_types async

list_node_types(
    ctx: Context, context: str, filter: str | None = None, limit: int = 200
) -> dict

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
ctx
Context

MCP context.

required
context
str

Category name (e.g. 'Sop', 'Lop', 'Dop', 'Top', 'Cop2').

required
filter
str | None

Substring to filter type name or label (case-insensitive).

None
limit
int

Max entries to return (default 200, max recommended 200).

200

move_node async

move_node(ctx: Context, node_path: str, dest_parent: str) -> dict

Move a node to a different parent network.

Parameters:

Name Type Description Default
ctx
Context

MCP context.

required
node_path
str

Node path.

required
dest_parent
str

Destination parent path.

required

rename_node async

rename_node(ctx: Context, node_path: str, new_name: str) -> dict

Rename a node.

Parameters:

Name Type Description Default
ctx
Context

MCP context.

required
node_path
str

Node path.

required
new_name
str

New node name.

required

reorder_inputs async

reorder_inputs(ctx: Context, node_path: str, new_order: list) -> dict

Reorder the input connections of a node.

Parameters:

Name Type Description Default
ctx
Context

MCP context.

required
node_path
str

Node path.

required
new_order
list

New input ordering (e.g. [1, 0] swaps first two).

required

set_node_color async

set_node_color(
    ctx: Context, node_path: str, r: float, g: float, b: float
) -> dict

Set a node's color in the network editor.

Parameters:

Name Type Description Default
ctx
Context

MCP context.

required
node_path
str

Node path.

required
r
float

Red (0.0-1.0).

required
g
float

Green (0.0-1.0).

required
b
float

Blue (0.0-1.0).

required

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
ctx
Context

MCP context.

required
node_path
str

Node path.

required
display
Optional[bool]

Display flag.

None
render
Optional[bool]

Render flag.

None
bypass
Optional[bool]

Bypass flag.

None
template
Optional[bool]

Template flag.

None
lock
Optional[bool]

Lock flag.

None

set_node_position async

set_node_position(ctx: Context, node_path: str, x: float, y: float) -> dict

Set a node's position in the network editor.

Parameters:

Name Type Description Default
ctx
Context

MCP context.

required
node_path
str

Node path.

required
x
float

Horizontal position.

required
y
float

Vertical position.

required