Skip to main content
Glama

parm_set

Destructive

Write parameter values, or press a button. One write, or a list in one undo group.

Instructions

Write parameter values, or press a button. One write, or a list in one undo group.

Modes: value, press, expression, keyframe, keyframes, delete_keyframe, revert, lock, link, spare, render_settings, chop_export, snapshot, restore, diff.

Use it after node_inspect has confirmed the parameter name and the type.

A write can be accepted and change nothing, and Houdini says nothing. This
tool looks for all six causes and names the one it found:
  - the parameter carries an expression, which still decides the value;
  - the parameter is animated, so the value became a new key;
  - the parameter is locked;
  - another parameter disables or hides it, so the cook does not read it;
  - a strict range clamped the value;
  - the parameter reads another node through a channel reference, so the
    write would change that other node. It is refused; give
    `follow_reference=true` to write the node at the other end.
Read `warnings` and `not_applied` in the result before you report success.

mode, and the arguments that each mode reads:
    "value"           — path, parm, value. Or path and parameters, a
                        dictionary of several names and values. A menu
                        takes its token, for example "custom". A
                        bit-field menu takes a token or a list of them.
    "press"           — path, parm: press a button, for example Save to
                        Disk on a File Cache, Reload on a File SOP, or
                        Resimulate on a solver. The result holds the errors
                        and the warnings of the node after the press,
                        because work that a button starts fails later and
                        in silence.
    "expression"      — path, parm, expression, language ("hscript" or
                        "python").
    "keyframe"        — path, parm, frame, value.
    "keyframes"       — path, parm, keyframes: a list of {frame, value}.
    "delete_keyframe" — path, parm, frame.
    "revert"          — path, parm: back to the default, and the
                        expression goes away.
    "lock"            — path, parm, locked.
    "link"            — src_path, src_parm, path, parm: the parameter at
                        path follows the one at src_path.
    "spare"           — path, parameters: a list of controls to add, each
                        {name, label, type, default, min, max, strict,
                        help, value, expression, items}. type is "float",
                        "int", "vector", "toggle", "string", "menu" (with
                        items), "ramp" or "color_ramp" (default: a list of
                        [position, value]). One control can also come as
                        name, label, parm_type, default, expression.
                        On a wrangle it first does what the Create
                        Parameters button does, a parameter for each ch()
                        call, and puts every control in that folder above
                        the code. Use it instead of numbers typed into VEX:
                        the user tunes these. A control that exists is
                        replaced in place, so a second call is safe.
    "render_settings" — path, settings for a ROP node.
    "chop_export"     — chop_path, channel_name, path, parm.
    "snapshot"        — name, paths: save every parameter of these nodes,
                        with expressions, keys and the bypass flag, to the
                        record `name` on disk. "/obj/geo1/*" names every
                        node in a network. It overwrites a record of the
                        same name.
    "restore"         — name: put the record back, and list what changed.
                        `paths` limits it to some of the nodes.
    "diff"            — name: list how the scene differs from the record.
                        Changes nothing.
                        In a sweep, restore before each variant, not once
                        at the end: a variant that does not name a
                        parameter keeps the value of the one before.

Returns JSON with the value before, the value after, and a reason when the
write did not take.

Input Schema

NameRequiredDescriptionDefault
modeNoOne of "value", "press", "expression", "keyframe", "keyframes", "delete_keyframe", "revert", "lock", "link", "spare", "render_settings", "chop_export", "snapshot", "restore", "diff".value
nameNospare: the name of one control. snapshot, restore, diff: the record on disk.
parmNoThe parameter name, for example "tx" or "divsize".
pathNoThe node that holds the parameter.
frameNokeyframe, delete_keyframe: the frame of the key.
itemsNoA list of writes, each a dictionary with the keys of one call. An argument outside items is the default for each one.
labelNospare: the label of one control.
pathsNosnapshot: the nodes to save; "/obj/geo1/*" names every node in a network. restore: put back only these nodes.
valueNovalue, keyframe: the value to write. A menu takes its token.
lockedNolock: true locks the parameter, false unlocks it.
defaultNospare: the default of one control.
languageNoexpression: "hscript" or "python".
settingsNorender_settings: the ROP parameters to write, by name.
src_parmNolink: the parameter to follow.
src_pathNolink: the node to follow.
chop_pathNochop_export: the CHOP node.
keyframesNokeyframes: a list of {frame, value}.
parm_typeNospare: the type of one control, for example "float" or "toggle".
expressionNoexpression: the expression text.
parametersNovalue: several names and values in one write, as a dictionary. spare: the list of controls to add.
channel_nameNochop_export: the channel that drives the parameter.
follow_referenceNoWrite the node at the other end of a channel reference. Without it, a write through a reference is refused.

Output Schema

NameRequiredDescriptionDefault
resultYes

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed1 schema field changedv0.8.0
    • removedInput schema / properties / language / default
      Removed value: -"hscript"
  2. Changed107 schema fields changedv0.7.3
    • removedInput schema / properties / channel_name / anyOf
      Removed value: -[
      -  {
      -    "type": "string"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]
    • removedInput schema / properties / channel_name / default
      Removed value: -null
    • addedInput schema / properties / channel_name / description
      Added value: +"chop_export: the channel that drives the parameter."
    • removedInput schema / properties / channel_name / title
      Removed value: -"Channel Name"
    • addedInput schema / properties / channel_name / type
      Added value: +"string"
    • removedInput schema / properties / chop_path / anyOf
      Removed value: -[
      -  {
      -    "type": "string"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]
    • removedInput schema / properties / chop_path / default
      Removed value: -null
    • addedInput schema / properties / chop_path / description
      Added value: +"chop_export: the CHOP node."
    • removedInput schema / properties / chop_path / title
      Removed value: -"Chop Path"
    • addedInput schema / properties / chop_path / type
      Added value: +"string"
    • removedInput schema / properties / default / anyOf
      Removed value: -[
      -  {},
      -  {
      -    "type": "null"
      -  }
      -]
    • removedInput schema / properties / default / default
      Removed value: -null
    • addedInput schema / properties / default / description
      Added value: +"spare: the default of one control."
    • removedInput schema / properties / default / title
      Removed value: -"Default"
    • removedInput schema / properties / expression / anyOf
      Removed value: -[
      -  {
      -    "type": "string"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]
    • removedInput schema / properties / expression / default
      Removed value: -null
    • addedInput schema / properties / expression / description
      Added value: +"expression: the expression text."
    • removedInput schema / properties / expression / title
      Removed value: -"Expression"
    • addedInput schema / properties / expression / type
      Added value: +"string"
    • removedInput schema / properties / follow_reference / anyOf
      Removed value: -[
      -  {
      -    "type": "boolean"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]
    • addedInput schema / properties / follow_reference / description
      Added value: +"Write the node at the other end of a channel reference. Without it, a write through a reference is refused."
    • removedInput schema / properties / follow_reference / title
      Removed value: -"Follow Reference"
    • addedInput schema / properties / follow_reference / type
      Added value: +"boolean"
    • removedInput schema / properties / frame / anyOf
      Removed value: -[
      -  {
      -    "type": "number"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]
    • removedInput schema / properties / frame / default
      Removed value: -null
    • addedInput schema / properties / frame / description
      Added value: +"keyframe, delete_keyframe: the frame of the key."
    • removedInput schema / properties / frame / title
      Removed value: -"Frame"
    • addedInput schema / properties / frame / type
      Added value: +"number"
    • changedInput schema / properties / items / anyOf
      Previous value: -[
      -  {
      -    "additionalProperties": true,
      -    "type": "object"
      -  },
      -  {
      -    "items": {
      -      "additionalProperties": true,
      -      "type": "object"
      -    },
      -    "type": "array"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]New value: +[
      +  {
      +    "additionalProperties": true,
      +    "type": "object"
      +  },
      +  {
      +    "items": {
      +      "additionalProperties": true,
      +      "type": "object"
      +    },
      +    "type": "array"
      +  }
      +]
    • removedInput schema / properties / items / default
      Removed value: -null
    • addedInput schema / properties / items / description
      Added value: +"A list of writes, each a dictionary with the keys of one call. An argument outside items is the default for each one."
    • removedInput schema / properties / items / title
      Removed value: -"Items"
    • removedInput schema / properties / keyframes / anyOf
      Removed value: -[
      -  {
      -    "items": {
      -      "additionalProperties": true,
      -      "type": "object"
      -    },
      -    "type": "array"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]
    • removedInput schema / properties / keyframes / default
      Removed value: -null
    • addedInput schema / properties / keyframes / description
      Added value: +"keyframes: a list of {frame, value}."
    • addedInput schema / properties / keyframes / items
      Added value: +{
      +  "additionalProperties": true,
      +  "type": "object"
      +}
    • removedInput schema / properties / keyframes / title
      Removed value: -"Keyframes"
    • addedInput schema / properties / keyframes / type
      Added value: +"array"
    • 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: +"spare: the label of one control."
    • removedInput schema / properties / label / title
      Removed value: -"Label"
    • addedInput schema / properties / label / type
      Added value: +"string"
    • removedInput schema / properties / language / anyOf
      Removed value: -[
      -  {
      -    "type": "string"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]
    • addedInput schema / properties / language / description
      Added value: +"expression: \"hscript\" or \"python\"."
    • removedInput schema / properties / language / title
      Removed value: -"Language"
    • addedInput schema / properties / language / type
      Added value: +"string"
    • removedInput schema / properties / locked / anyOf
      Removed value: -[
      -  {
      -    "type": "boolean"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]
    • removedInput schema / properties / locked / default
      Removed value: -null
    • addedInput schema / properties / locked / description
      Added value: +"lock: true locks the parameter, false unlocks it."
    • removedInput schema / properties / locked / title
      Removed value: -"Locked"
    • addedInput schema / properties / locked / type
      Added value: +"boolean"
    • removedInput schema / properties / mode / anyOf
      Removed value: -[
      -  {
      -    "type": "string"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]
    • addedInput schema / properties / mode / description
      Added value: +"One of \"value\", \"press\", \"expression\", \"keyframe\", \"keyframes\", \"delete_keyframe\", \"revert\", \"lock\", \"link\", \"spare\", \"render_settings\", \"chop_export\", \"snapshot\", \"restore\", \"diff\"."
    • 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: +"spare: the name of one control. snapshot, restore, diff: the record on disk."
    • removedInput schema / properties / name / title
      Removed value: -"Name"
    • addedInput schema / properties / name / type
      Added value: +"string"
    • changedInput schema / properties / parameters / anyOf
      Previous value: -[
      -  {
      -    "additionalProperties": true,
      -    "type": "object"
      -  },
      -  {
      -    "items": {
      -      "additionalProperties": true,
      -      "type": "object"
      -    },
      -    "type": "array"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]New value: +[
      +  {
      +    "additionalProperties": true,
      +    "type": "object"
      +  },
      +  {
      +    "items": {
      +      "additionalProperties": true,
      +      "type": "object"
      +    },
      +    "type": "array"
      +  }
      +]
    • removedInput schema / properties / parameters / default
      Removed value: -null
    • addedInput schema / properties / parameters / description
      Added value: +"value: several names and values in one write, as a dictionary. spare: the list of controls to add."
    • removedInput schema / properties / parameters / title
      Removed value: -"Parameters"
    • removedInput schema / properties / parm / anyOf
      Removed value: -[
      -  {
      -    "type": "string"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]
    • removedInput schema / properties / parm / default
      Removed value: -null
    • addedInput schema / properties / parm / description
      Added value: +"The parameter name, for example \"tx\" or \"divsize\"."
    • removedInput schema / properties / parm / title
      Removed value: -"Parm"
    • addedInput schema / properties / parm / type
      Added value: +"string"
    • removedInput schema / properties / parm_type / anyOf
      Removed value: -[
      -  {
      -    "type": "string"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]
    • removedInput schema / properties / parm_type / default
      Removed value: -null
    • addedInput schema / properties / parm_type / description
      Added value: +"spare: the type of one control, for example \"float\" or \"toggle\"."
    • removedInput schema / properties / parm_type / title
      Removed value: -"Parm Type"
    • addedInput schema / properties / parm_type / type
      Added value: +"string"
    • removedInput schema / properties / path / anyOf
      Removed value: -[
      -  {
      -    "type": "string"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]
    • removedInput schema / properties / path / default
      Removed value: -null
    • addedInput schema / properties / path / description
      Added value: +"The node that holds the parameter."
    • removedInput schema / properties / path / title
      Removed value: -"Path"
    • addedInput schema / properties / path / type
      Added value: +"string"
    • removedInput schema / properties / paths / anyOf
      Removed value: -[
      -  {
      -    "items": {
      -      "type": "string"
      -    },
      -    "type": "array"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]
    • removedInput schema / properties / paths / default
      Removed value: -null
    • addedInput schema / properties / paths / description
      Added value: +"snapshot: the nodes to save; \"/obj/geo1/*\" names every node in a network. restore: put back only these nodes."
    • addedInput schema / properties / paths / items
      Added value: +{
      +  "type": "string"
      +}
    • removedInput schema / properties / paths / title
      Removed value: -"Paths"
    • addedInput schema / properties / paths / type
      Added value: +"array"
    • addedInput schema / properties / settings / additionalProperties
      Added value: +true
    • removedInput schema / properties / settings / anyOf
      Removed value: -[
      -  {
      -    "additionalProperties": true,
      -    "type": "object"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]
    • removedInput schema / properties / settings / default
      Removed value: -null
    • addedInput schema / properties / settings / description
      Added value: +"render_settings: the ROP parameters to write, by name."
    • removedInput schema / properties / settings / title
      Removed value: -"Settings"
    • addedInput schema / properties / settings / type
      Added value: +"object"
    • removedInput schema / properties / src_parm / anyOf
      Removed value: -[
      -  {
      -    "type": "string"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]
    • removedInput schema / properties / src_parm / default
      Removed value: -null
    • addedInput schema / properties / src_parm / description
      Added value: +"link: the parameter to follow."
    • removedInput schema / properties / src_parm / title
      Removed value: -"Src Parm"
    • addedInput schema / properties / src_parm / type
      Added value: +"string"
    • removedInput schema / properties / src_path / anyOf
      Removed value: -[
      -  {
      -    "type": "string"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]
    • removedInput schema / properties / src_path / default
      Removed value: -null
    • addedInput schema / properties / src_path / description
      Added value: +"link: the node to follow."
    • removedInput schema / properties / src_path / title
      Removed value: -"Src Path"
    • addedInput schema / properties / src_path / type
      Added value: +"string"
    • removedInput schema / properties / value / anyOf
      Removed value: -[
      -  {},
      -  {
      -    "type": "null"
      -  }
      -]
    • removedInput schema / properties / value / default
      Removed value: -null
    • addedInput schema / properties / value / description
      Added value: +"value, keyframe: the value to write. A menu takes its token."
    • removedInput schema / properties / value / title
      Removed value: -"Value"
    • removedInput schema / title
      Removed value: -"toolArguments"
  3. Addedv0.1.1

TDQS

A4.6/5.0
Behavior4/5

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

Annotations declare destructiveHint=true and non-idempotent, and the description adds substantial undisclosed-by-schema behavior: silent no-op writes with six named causes, refusal to write through channel references unless follow_reference=true, snapshot overwriting a same-named record, and the instruction to read `warnings` and `not_applied` before reporting success. Excellent coverage of what gets destroyed and where writes may silently fail; it stops short of stating permissions/auth needs, but the safety profile itself is thoroughly enriched.

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 purpose, then the silent-failure taxonomy, then mode-by-mode argument detail, then return shape – a sensible ordering for a 22-parameter multi-mode tool. It is long and the mode enumeration partially duplicates the schema's `mode` description, but nearly every line carries operational information an agent needs.

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

Completeness5/5

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

For a tool with 22 parameters, nested objects, 15 modes and an output schema, the description supplies exactly what the structured fields cannot: mode-to-argument mapping, failure-mode diagnosis, prerequisite sequencing, and workflow caution for sweeps. The return contract is summarized ('value before, the value after, and a reason') without duplicating the output schema.

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%, so the baseline is 3, and the description goes beyond it by naming the exact argument set each mode reads and adding semantics the schema cannot express: a menu takes its token ('custom'), a bit-field menu takes a token or a list, a ramp defaults to a list of [position, value], and a second 'spare' call safely replaces a control in place. Remaining overlap with the schema's per-mode prefixes keeps it from a 5.

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?

The first sentence names the specific verb and resource ('Write parameter values, or press a button') and states the batching scope ('One write, or a list in one undo group'). The mode list enumerates the full surface, and it is clearly distinguished from the read-only sibling node_inspect, which it references as a prerequisite.

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?

Explicit sequencing ('Use it after node_inspect has confirmed the parameter name and the type'), explicit substitution guidance ('Use it instead of numbers typed into VEX'), and a concrete sweep workflow ('restore before each variant, not once at the end'). Each mode also carries its own when-to-use context, e.g. 'press' is for buttons whose work fails later and in silence.

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