Skip to main content
Glama

hda

Destructive

Read and change Houdini digital assets.

Instructions

Read and change Houdini digital assets.

Modes: list, get, install, uninstall, reload, update, create, sections, section_get, section_set.

Use it when a node type comes from a .hda file: to find the file, to load a
new one, or to read the scripts and the help inside it.

Do not use it for the parameters of one node in the scene: node_inspect
does that.

mode:
    "list"        — the installed assets. `category` filters, for example
                    "Sop".
    "get"         — the definition of `node_type`: the file, the version
                    and the tools.
    "install"     — load the .hda file at `file_path` into the session.
    "uninstall"   — unload the .hda file at `file_path`.
    "reload"      — read the .hda file at `file_path` again, after an edit
                    on disk.
    "update"      — save the node at `node_path` back into its asset.
    "create"      — make an asset from the subnet at `node_path`, with
                    `name`, `label` and `file_path`.
    "sections"    — the section names inside `node_type`.
    "section_get" — the text of `section_name`, for example "PythonModule".
    "section_set" — write `content` into `section_name`.

Returns JSON. "install" and "uninstall" change every node of that type in
the session.

Input Schema

NameRequiredDescriptionDefault
modeNoOne of "list", "get", "install", "uninstall", "reload", "update", "create", "sections", "section_get", "section_set".list
nameNocreate: the type name of the new asset.
labelNocreate: the name that the TAB menu shows.
contentNosection_set: the text to write into the section.
categoryNolist: keep one node category, for example "Sop".
file_pathNoinstall, uninstall, reload: the .hda file. create: the file to write.
node_pathNoupdate: the node to save into its asset. create: the subnet to make an asset from.
node_typeNoget, sections, section_get, section_set: the asset type, as list names it, for example "labs::edge_damage::1.0", or with its category, "Sop/labs::edge_damage::1.0".
section_nameNosection_get, section_set: the section, for example "PythonModule".

Output Schema

NameRequiredDescriptionDefault
resultYes

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed1 schema field changedv0.7.5
    • changedInput schema / properties / node_type / description
      Previous value: -"get, sections, section_get, section_set: the asset type, for example \"Sop/my_tool\"."New value: +"get, sections, section_get, section_set: the asset type, as list names it, for example \"labs::edge_damage::1.0\", or with its category, \"Sop/labs::edge_damage::1.0\"."
  2. Changed45 schema fields changedv0.7.3
    • removedInput schema / properties / category / anyOf
      Removed value: -[
      -  {
      -    "type": "string"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]
    • removedInput schema / properties / category / default
      Removed value: -null
    • addedInput schema / properties / category / description
      Added value: +"list: keep one node category, for example \"Sop\"."
    • removedInput schema / properties / category / title
      Removed value: -"Category"
    • addedInput schema / properties / category / type
      Added value: +"string"
    • removedInput schema / properties / content / anyOf
      Removed value: -[
      -  {
      -    "type": "string"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]
    • removedInput schema / properties / content / default
      Removed value: -null
    • addedInput schema / properties / content / description
      Added value: +"section_set: the text to write into the section."
    • removedInput schema / properties / content / title
      Removed value: -"Content"
    • addedInput schema / properties / content / type
      Added value: +"string"
    • removedInput schema / properties / file_path / anyOf
      Removed value: -[
      -  {
      -    "type": "string"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]
    • removedInput schema / properties / file_path / default
      Removed value: -null
    • addedInput schema / properties / file_path / description
      Added value: +"install, uninstall, reload: the .hda file. create: the file to write."
    • removedInput schema / properties / file_path / title
      Removed value: -"File Path"
    • addedInput schema / properties / file_path / type
      Added value: +"string"
    • removedInput schema / properties / label / anyOf
      Removed value: -[
      -  {
      -    "type": "string"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]
    • removedInput schema / properties / label / default
      Removed value: -null
    • addedInput schema / properties / label / description
      Added value: +"create: the name that the TAB menu shows."
    • removedInput schema / properties / label / title
      Removed value: -"Label"
    • addedInput schema / properties / label / type
      Added value: +"string"
    • removedInput schema / properties / mode / anyOf
      Removed value: -[
      -  {
      -    "type": "string"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]
    • addedInput schema / properties / mode / description
      Added value: +"One of \"list\", \"get\", \"install\", \"uninstall\", \"reload\", \"update\", \"create\", \"sections\", \"section_get\", \"section_set\"."
    • removedInput schema / properties / mode / title
      Removed value: -"Mode"
    • addedInput schema / properties / mode / type
      Added value: +"string"
    • removedInput schema / properties / name / anyOf
      Removed value: -[
      -  {
      -    "type": "string"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]
    • removedInput schema / properties / name / default
      Removed value: -null
    • addedInput schema / properties / name / description
      Added value: +"create: the type name of the new asset."
    • removedInput schema / properties / name / title
      Removed value: -"Name"
    • addedInput schema / properties / name / type
      Added value: +"string"
    • removedInput schema / properties / node_path / anyOf
      Removed value: -[
      -  {
      -    "type": "string"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]
    • removedInput schema / properties / node_path / default
      Removed value: -null
    • addedInput schema / properties / node_path / description
      Added value: +"update: the node to save into its asset. create: the subnet to make an asset from."
    • removedInput schema / properties / node_path / title
      Removed value: -"Node Path"
    • addedInput schema / properties / node_path / type
      Added value: +"string"
    • removedInput schema / properties / node_type / anyOf
      Removed value: -[
      -  {
      -    "type": "string"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]
    • removedInput schema / properties / node_type / default
      Removed value: -null
    • addedInput schema / properties / node_type / description
      Added value: +"get, sections, section_get, section_set: the asset type, for example \"Sop/my_tool\"."
    • removedInput schema / properties / node_type / title
      Removed value: -"Node Type"
    • addedInput schema / properties / node_type / type
      Added value: +"string"
    • removedInput schema / properties / section_name / anyOf
      Removed value: -[
      -  {
      -    "type": "string"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]
    • removedInput schema / properties / section_name / default
      Removed value: -null
    • addedInput schema / properties / section_name / description
      Added value: +"section_get, section_set: the section, for example \"PythonModule\"."
    • removedInput schema / properties / section_name / title
      Removed value: -"Section Name"
    • addedInput schema / properties / section_name / type
      Added value: +"string"
    • removedInput schema / title
      Removed value: -"toolArguments"
  3. Addedv0.1.1

TDQS

A4.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already flag destructiveHint=true and non-idempotent, and the description goes beyond them by disclosing the blast radius: install and uninstall "change every node of that type in the session." That is exactly the kind of context annotations cannot express. It still doesn't say whether section_set overwrites existing text, what happens when a file_path is missing, or how errors surface, so it stops 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.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with the purpose, then a compact mode index, then one-line bullets per mode, then a return/impact note. Every bullet earns its place, but the bare mode list at the top partially duplicates the per-mode bullets below it, costing a little space.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With an output schema present, the description needn't explain return values, and a one-line "Returns JSON" suffices. For a 10-mode destructive mutation tool it covers triggers, mode semantics, and cross-session impact well; the remaining gap is overwrite/error semantics for the write modes (reload, update, create, section_set).

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% and each property already carries a mode-prefixed description, so the baseline is 3. The description adds real value by organizing parameters by mode and thereby implying the per-mode required combinations (install needs file_path, create needs node_path plus name/label/file_path) even though the schema declares zero required parameters. It omits that mode defaults to "list".

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb pair and resource ("Read and change Houdini digital assets") and immediately enumerates the ten modes, so the agent knows the full surface of the tool. It also names the sibling it is not (node_inspect) and the domain boundary (.hda files), making it clearly separable from node_edit/parm_set/node_inspect.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives an explicit trigger ("when a node type comes from a .hda file: to find the file, to load a new one, or to read the scripts and help inside it") plus an explicit exclusion that redirects to node_inspect for scene-node parameters. The per-mode list further disambiguates internal alternatives so the agent can pick the right mode.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.