Skip to content

workflows

workflows

MCP tool wrappers for higher-level composite workflow operations.

Each tool delegates to the corresponding handler running inside Houdini via the HTTP bridge. These tools build entire node graphs in a single call -- complete simulation setups, material creation/assignment, SOP chain building, and render configuration.

Functions:

Name Description
assign_material

Assign a material to a geometry node via a Material SOP.

build_sop_chain

Build a sequential chain of SOP nodes wired together.

create_material

Create a material in /mat with configurable surface properties.

setup_flip_sim

Build a FLIP fluid simulation network from source geometry.

setup_pyro_sim

Build a Pyro smoke/fire simulation network from source geometry.

setup_rbd_sim

Build an RBD rigid-body simulation network with fracture and solver.

setup_render

Set up a render configuration with camera and ROP node.

setup_vellum_sim

Build a Vellum simulation network with configure node and solver.

Functions

assign_material async

assign_material(ctx: Context, geo_path: str, material_path: str) -> dict

Assign a material to a geometry node via a Material SOP.

Parameters:

Name Type Description Default
geo_path
str

Target geometry node path.

required
material_path
str

Material to assign.

required

build_sop_chain async

build_sop_chain(
    ctx: Context, parent_path: str = "/obj/geo1", steps: Optional[list] = None
) -> dict

Build a sequential chain of SOP nodes wired together.

Each step dict: {"type": str, "name": str, "params": dict}.

Parameters:

Name Type Description Default
parent_path
str

Parent SOP network path.

'/obj/geo1'
steps
Optional[list]

List of step dicts defining the chain.

None

create_material async

create_material(
    ctx: Context,
    name: str = "material1",
    mat_type: str = "principled",
    base_color: Optional[list] = None,
    roughness: float = 0.5,
    metallic: float = 0.0,
    opacity: float = 1.0,
) -> dict

Create a material in /mat with configurable surface properties.

Parameters:

Name Type Description Default
name
str

Material node name.

'material1'
mat_type
str

Material type ("principled", "materialx").

'principled'
base_color
Optional[list]

[R, G, B] base color, 0-1 per channel.

None
roughness
float

Surface roughness, 0-1.

0.5
metallic
float

Metallic factor, 0-1.

0.0
opacity
float

Opacity, 0-1.

1.0

setup_flip_sim async

setup_flip_sim(
    ctx: Context,
    source_geo: str = "/obj/geo1/sphere1",
    domain: str = "box",
    particle_sep: float = 0.05,
    name: str = "flip_sim",
) -> dict

Build a FLIP fluid simulation network from source geometry.

Parameters:

Name Type Description Default
source_geo
str

Source SOP path.

'/obj/geo1/sphere1'
domain
str

Domain type.

'box'
particle_sep
float

Particle separation distance.

0.05
name
str

Top-level geo node name.

'flip_sim'

setup_pyro_sim async

setup_pyro_sim(
    ctx: Context,
    source_geo: str = "/obj/geo1/sphere1",
    container: str = "box",
    res_scale: float = 1.0,
    substeps: int = 1,
    name: str = "pyro_sim",
) -> dict

Build a Pyro smoke/fire simulation network from source geometry.

Parameters:

Name Type Description Default
source_geo
str

Source SOP path.

'/obj/geo1/sphere1'
container
str

Container type.

'box'
res_scale
float

Resolution scale multiplier.

1.0
substeps
int

DOP substeps.

1
name
str

Top-level geo node name.

'pyro_sim'

setup_rbd_sim async

setup_rbd_sim(
    ctx: Context,
    geo_path: str = "/obj/geo1",
    ground: bool = True,
    pieces_type: str = "voronoi",
    name: str = "rbd_sim",
) -> dict

Build an RBD rigid-body simulation network with fracture and solver.

Parameters:

Name Type Description Default
geo_path
str

Source geometry object path.

'/obj/geo1'
ground
bool

Add a ground plane.

True
pieces_type
str

Fracture method ("voronoi").

'voronoi'
name
str

Top-level geo node name.

'rbd_sim'

setup_render async

setup_render(
    ctx: Context,
    renderer: str = "karma",
    camera: Optional[str] = None,
    output_path: str = "$HIP/render/output.$F4.exr",
    resolution: Optional[list] = None,
    samples: int = 64,
    name: str = "render1",
) -> dict

Set up a render configuration with camera and ROP node.

Parameters:

Name Type Description Default
renderer
str

Renderer type ("karma", "mantra").

'karma'
camera
Optional[str]

Camera node path; creates one if omitted.

None
output_path
str

Output image path (supports Houdini variables).

'$HIP/render/output.$F4.exr'
resolution
Optional[list]

[width, height] resolution.

None
samples
int

Render sample count.

64
name
str

ROP node name in /out.

'render1'

setup_vellum_sim async

setup_vellum_sim(
    ctx: Context,
    geo_path: str = "/obj/geo1",
    sim_type: str = "cloth",
    substeps: int = 5,
    name: str = "vellum_sim",
) -> dict

Build a Vellum simulation network with configure node and solver.

Parameters:

Name Type Description Default
geo_path
str

Source geometry object path.

'/obj/geo1'
sim_type
str

Simulation type ("cloth", "hair", "grain", "softbody").

'cloth'
substeps
int

Solver substeps.

5
name
str

Top-level geo node name.

'vellum_sim'