houdini-mcp
Server Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
| HOUDINIMCP_LOG | No | Set to 'verbose' for per-command console output. | quiet |
| HOUDINIMCP_PORT | No | Plugin TCP port. | 9876 |
| HOUDINIMCP_POLL_MS | No | Plugin socket poll interval, in milliseconds. | 20 |
| HOUDINIMCP_PROFILE | No | Advertised tool surface: stage, sop, or all. | stage |
| HOUDINIMCP_TIMEOUT | No | Bridge deadline for ordinary commands, in seconds. | 60 |
| HOUDINIMCP_NO_HEADLESS | No | Set to '1' to disable hython auto-launch. | |
| HOUDINIMCP_LONG_TIMEOUT | No | Deadline for renders, sims, cooks, I/O, in seconds. | 900 |
| HOUDINIMCP_SEND_TIMEOUT | No | Plugin deadline for writing one response, in seconds. | 60 |
Instructions
Guidance the server publishes about itself, which clients place ahead of the tool catalog so the model reads it before choosing anything.
This server publishes no instructions, or was last inspected before Glama recorded them.
Capabilities
Features and capabilities supported by this server
Protocol revision2025-11-25
| Capability | Details |
|---|---|
| tools | {
"listChanged": false
} |
| prompts | {
"listChanged": false
} |
| resources | {
"subscribe": false,
"listChanged": false
} |
| experimental | {} |
Tools
Functions exposed to the LLM to take actions
| Name | Description |
|---|---|
| pingA | Health check to verify Houdini is connected and responsive. Returns server status info or an error if Houdini is unreachable. |
| get_connection_statusA | Returns the current connection status to Houdini, including whether connected, port, command count, and timing info. |
| get_scene_infoB | Ask Houdini for scene info. Returns JSON as a string. |
| create_nodeC | Create a new node in Houdini. |
| execute_houdini_codeA | |
| get_last_logC | Last execute_code payload stored in the Houdini session (errors included). |
| modify_nodeC | Modify an existing node — rename, reposition, or change parameters. |
| delete_nodeC | Delete a node from the Houdini scene by path. |
| get_node_infoB | Get detailed info about a node: type, parameters, inputs, outputs. |
| connect_nodesC | Connect two nodes: src output -> dst input. |
| disconnect_node_inputC | Disconnect a specific input on a node. |
| set_node_flagsC | Set display, render, and/or bypass flags on a node. |
| save_sceneB | Save the current Houdini scene, optionally to a new file path. |
| load_sceneC | Load a .hip file into Houdini. |
| set_frameC | Set the current frame in Houdini's playbar. |
| layout_childrenD | Auto-layout child nodes in the network editor. |
| find_error_nodesC | Scan the node hierarchy for cook errors and warnings. |
| get_network_overviewC | Get an overview of all nodes in a network with their connections. |
| get_cook_chainB | Get the cook dependency chain for a node (inputs all the way up). |
| explain_nodeB | Get a human-readable explanation of a node: type, non-default parms, connections. |
| get_selectionB | Get the currently selected nodes in Houdini. |
| set_selectionC | Set the node selection to the given list of node paths. |
| get_parameterB | Get a single parameter's value, type, expression, and metadata. |
| set_parameterC | Set a single parameter value on a node. |
| set_parametersC | Set multiple parameters at once on a node. |
| list_file_parmsC | File/path parms on a node (alembic, usd, texture, fbx, vdb). No new importer. |
| set_fileB | Set a node's file parm. create_node + set_file — not import_alembic/import_volume. |
| get_parameter_schemaB | Get the full parameter schema (all parm templates) for a node. |
| list_jointsC | KineFX skeleton joints (point name + P) on a SOP. Mixamo/character inspect. |
| import_fbx_characterC | kinefx::fbxcharacterimport under mcp_* geo. Mixamo/character rest pose. |
| import_fbx_animationC | kinefx::fbxanimimport — Mixamo clip. Attach to a character SOP geo. |
| attach_kinefx_deformA | Skin + capture pose + clip → kinefx::jointdeform under mcp_*. |
| map_kinefx_jointsB | Map Mixamo-like clip joint names onto a rest skeleton. Unmapped names error. |
| list_childrenC | List all children of a node, optionally recursive. |
| find_nodesC | Find nodes matching a name pattern, optionally filtered by type. |
| list_node_typesB | List node types. category e.g. 'Sop'/'Lop'/'Object'; pattern is a glob matched against the type name or label, e.g. 'intersect'. |
| execute_hscriptC | Execute an HScript command and return stdout/stderr. |
| evaluate_expressionC | Evaluate a Houdini expression and return the result. |
| lop_stage_infoB | Get USD stage info from a LOP node: prims, layers, time codes. |
| lop_prim_getC | Get details of a specific USD prim. |
| lop_prim_searchC | Search for USD prims matching a pattern. |
| lop_layer_infoC | Get USD layer stack info from a LOP node. |
| lop_importC | Import a USD file via reference or sublayer. |
| batchA | Execute multiple operations in one undo group. |
| set_log_levelA | Houdini Python-shell noise. quiet (default) hides per-command connect/execute/disconnect. verbose restores it. HOUDINIMCP_LOG=verbose also works. Does not restart the TCP listener. |
| reload_pluginA | Reload houdinimcp handler modules in the live houdini-bin. |
| list_panesA | List all pane tabs in the Houdini desktop. |
| get_viewport_infoC | Viewport camera, shading, Hydra delegate. viewer= pane name (optional). |
| set_viewport_cameraC | Look through an OBJ camera or a USD prim (e.g. /world/cam). |
| set_viewport_displayC | Set viewport display options (shading, guides, grid, isolate). |
| set_viewport_rendererC | LOP Hydra delegate (xpu, cpu, vk, storm) or OBJ view type (persp/top). |
| list_hydra_renderersC | List Hydra delegates on the LOP Scene Viewer and the current one. |
| set_hydra_rendererA | Set LOP viewport renderer: 'xpu', 'cpu', 'vk', 'storm', or exact name. |
| restart_rendererB | Rebuild the active LOP Hydra delegate. Can stall the UI; prefer not to. |
| set_renderer_pausedC | Pause or resume the active LOP Hydra delegate. |
| set_hydra_displayD | USD purpose vis on the LOP viewer: proxy/guide/render/materials/procedurals. |
| frame_selectionB | Frame the viewport on the current selection. |
| frame_allA | Frame the viewport on all geometry. |
| frame_bboxC | Frame a world-space bbox or a node's geometry. Does not home the grid. |
| frame_usd_primC | Frame the LOP viewer on a USD prim bbox (hero, not the infinite grid). |
| set_karma_qualityC | Karma viewport quality. H22 has no pixel-sample HOM; LOP settings are the knob. |
| set_viewport_directionA | Set viewport direction: front, back, left, right, top, bottom, persp. |
| capture_screenshotA | Capture the current Scene Viewer and return the pixels in-band. |
| capture_desktopB | Grab the Houdini window from the OS — does not run inside houdini-bin. |
| set_current_networkC | Set the current network path in the network editor. |
| list_usd_primsC | List USD prims up to a given depth. |
| get_usd_attributeC | Get a specific USD attribute value. |
| set_usd_attributeC | Set a USD attribute value. |
| get_usd_prim_statsC | Get stats about a USD prim: child count, attr count, active, payload. |
| get_last_modified_primsC | Get recently modified prims from the edit target layer. |
| create_lop_nodeD | Create a LOP node. |
| get_usd_compositionB | Get composition arcs (references, payloads, inherits, specializes) for a prim. |
| get_usd_variantsC | Get variant sets and selections for a USD prim. |
| inspect_usd_layerC | Inspect a specific USD layer by index in the stack. |
| lookdev_domeC | Create/edit a Dome Light LOP under mcp_* isolation. |
| lookdev_preview_surfaceD | USD Preview Surface + assignmaterial under mcp_*. |
| lookdev_display_colorB | Set primvars:displayColor on a USD mesh (not a full material). |
| lookdev_cameraC | Place a LOP Camera looking at a prim bbox. Look through the USD prim string. |
| list_lightsC | List all light prims in a USD stage. |
| search_docsB | Search Houdini documentation offline using BM25. Returns ranked results with path, title, preview, and relevance score. Does NOT require a Houdini connection. |
| get_docA | Get the full content of a Houdini documentation page by its relative path (as returned by search_docs). Does NOT require a Houdini connection. |
| monitor_renderA | Check if a Karma (husk) or Mantra (mantra-bin) render is still running. Optionally pass output_path to also report file existence and size. No Houdini connection needed — runs on the bridge side. |
Prompts
Interactive templates invoked by user choice
| Name | Description |
|---|---|
| procedural_modeling_workflow | Guide for building a procedural SOP modeling chain in Houdini. |
| usd_scene_assembly | Guide for assembling a USD scene with LOPs, materials, and lighting. |
| simulation_setup | Guide for setting up Pyro/FLIP/RBD/Vellum simulations. |
| pdg_pipeline | Guide for building a PDG/TOPs pipeline. |
| hda_development | Guide for HDA (Houdini Digital Asset) development workflow. |
| debug_scene | Systematic debugging checklist for Houdini scenes. |
Resources
Contextual data attached and managed by the client
| Name | Description |
|---|---|
| resource_scene_info | Current scene info: filename, node count, frame range, FPS. |
| resource_scene_tree | Full scene node tree (recursive children of /obj). |
| resource_errors | All cook errors and warnings in the scene. |
| resource_hdas | All installed HDA definitions. |
TDQS
Scored across 82 tools
Many tools have clearly distinct purposes (node CRUD, USD inspection, docs search), but there are overlapping clusters: set_viewport_renderer vs set_hydra_renderer vs set_hydra_display vs set_viewport_display, four frame_* variants, and lop_prim_get vs get_usd_attribute. Descriptions mitigate most confusion, but an agent could easily misselect within these clusters.
Names overwhelmingly follow snake_case verb_noun (get_parameter, create_node, list_children, set_viewport_camera), with domain prefixes like lop_*, lookdev_*, frame_*, and import_*/attach_* used fairly predictably. A few single-word tools (batch, ping) and mixed prefixes are minor deviations from an otherwise consistent scheme.
82 tools is far beyond what an agent can reliably navigate for a single application-control server; the description even admits overlap (e.g. viz/flipbook variants, parameter get/set families). This forces the agent to choose among many near-siblings rather than a coherent, curated surface.
The surface covers an impressive breadth: node lifecycle, parameter access, USD/LOP inspection and editing, viewport/render control, KineFX character workflows, lookdev, scene persistence, and offline docs. Only minor gaps remain (e.g. no explicit undo/redo, limited PR-like review of scene changes), which agents can work around.