Skip to main content
Glama

stage_inspect

Read-onlyIdempotent

Inspect and debug a cooked USD stage at a Solaris LOP node: view prims, layers, composition, variants, lights, transforms, stats, and slow node profiles. Returns JSON, not for SOP geometry.

Instructions

Read the USD stage at a LOP node. This cooks the node.

Modes: stage, prims, prim, search, layer, attribute, composition, variants, stats, modified, lights, transform, profile.

Use it in a Solaris (LOP) network to see the prims, the layers and the
composition that a node produces.

Do not use it for SOP geometry: geometry_inspect does that.

mode:
    "stage"       — the stage: prim count, layers, the default prim.
    "prims"       — the prim tree from `root_prim`, `max_depth` deep.
    "prim"        — one prim at `prim_path`. include_attrs=True adds its
                    attributes.
    "search"      — prims whose path matches `pattern`, filtered by
                    `type_name` such as "Mesh" or "SphereLight".
    "layer"       — the layer stack, and the layer at `layer_index`.
    "attribute"   — the value of `attr_name` on `prim_path`.
    "composition" — where the opinions on `prim_path` come from: each
                    layer of its prim stack, strongest first, with the
                    node that wrote it (the SOP behind an op: layer) and
                    its references and payloads.
    "variants"    — the variant sets on `prim_path` and the selection.
    "stats"       — counts under `prim_path`.
    "modified"    — the last `count` prims that this node changed. Use it
                    to see what one LOP did.
    "lights"      — the lights on the stage.
    "transform"   — where `prim_path` is in the world: translate, rotate
                    and scale composed through every parent. With
                    `frames`, the path of a moving prim.
    "profile"     — each LOP node of the chain up to `path`: cook time,
                    prims by type, and the prims it adds, slowest
                    first. It names the node that makes an export or a
                    render start slow, and flags a SOP Import that
                    writes each packed piece as its own Xform.

A layer file that another process wrote again (a cache from hython) is
reloaded before the read, and `reloaded_layers` names it.

Returns JSON.

Input Schema

NameRequiredDescriptionDefault
modeNoOne of "stage", "prims", "prim", "search", "layer", "attribute", "composition", "variants", "stats", "modified", "lights", "transform", "profile".stage
pathYesThe LOP node whose stage to read.
countNomodified: how many prims come back.
framesNoRead at another frame, or at several: one frame, a list, or {"start": 1, "end": 10, "step": 2}. The playbar goes back after.
patternNosearch: the prim path to match, with * as a wildcard.
attr_nameNoattribute: the attribute to read, for example "points".
max_depthNoprims: how many levels of the tree come back.
prim_pathNoprim, attribute, composition, variants, stats, transform: the prim, for example "/world/geo/rock".
root_primNoprims: the prim where the tree starts./
type_nameNosearch: keep the prims of this type, for example "Mesh" or "SphereLight".
layer_indexNolayer: which layer of the stack, from 0 (the strongest).
include_attrsNoprim: also return the attributes of the prim.

Output Schema

NameRequiredDescriptionDefault
resultYes

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed1 schema field changedv0.8.1
    • changedInput schema / properties / mode / description
      Previous value: -"One of \"stage\", \"prims\", \"prim\", \"search\", \"layer\", \"attribute\", \"composition\", \"variants\", \"stats\", \"modified\", \"lights\", \"transform\"."New value: +"One of \"stage\", \"prims\", \"prim\", \"search\", \"layer\", \"attribute\", \"composition\", \"variants\", \"stats\", \"modified\", \"lights\", \"transform\", \"profile\"."
  2. Changed51 schema fields changedv0.7.3
    • removedInput schema / properties / attr_name / anyOf
      Removed value: -[
      -  {
      -    "type": "string"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]
    • removedInput schema / properties / attr_name / default
      Removed value: -null
    • addedInput schema / properties / attr_name / description
      Added value: +"attribute: the attribute to read, for example \"points\"."
    • removedInput schema / properties / attr_name / title
      Removed value: -"Attr Name"
    • addedInput schema / properties / attr_name / type
      Added value: +"string"
    • removedInput schema / properties / count / anyOf
      Removed value: -[
      -  {
      -    "type": "integer"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]
    • addedInput schema / properties / count / description
      Added value: +"modified: how many prims come back."
    • removedInput schema / properties / count / title
      Removed value: -"Count"
    • addedInput schema / properties / count / type
      Added value: +"integer"
    • changedInput schema / properties / frames / anyOf
      Previous value: -[
      -  {
      -    "type": "number"
      -  },
      -  {
      -    "items": {
      -      "type": "number"
      -    },
      -    "type": "array"
      -  },
      -  {
      -    "additionalProperties": {
      -      "type": "number"
      -    },
      -    "type": "object"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]New value: +[
      +  {
      +    "type": "number"
      +  },
      +  {
      +    "items": {
      +      "type": "number"
      +    },
      +    "type": "array"
      +  },
      +  {
      +    "additionalProperties": {
      +      "type": "number"
      +    },
      +    "type": "object"
      +  }
      +]
    • removedInput schema / properties / frames / default
      Removed value: -null
    • addedInput schema / properties / frames / description
      Added value: +"Read at another frame, or at several: one frame, a list, or {\"start\": 1, \"end\": 10, \"step\": 2}. The playbar goes back after."
    • removedInput schema / properties / frames / title
      Removed value: -"Frames"
    • removedInput schema / properties / include_attrs / anyOf
      Removed value: -[
      -  {
      -    "type": "boolean"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]
    • addedInput schema / properties / include_attrs / description
      Added value: +"prim: also return the attributes of the prim."
    • removedInput schema / properties / include_attrs / title
      Removed value: -"Include Attrs"
    • addedInput schema / properties / include_attrs / type
      Added value: +"boolean"
    • removedInput schema / properties / layer_index / anyOf
      Removed value: -[
      -  {
      -    "type": "integer"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]
    • addedInput schema / properties / layer_index / description
      Added value: +"layer: which layer of the stack, from 0 (the strongest)."
    • removedInput schema / properties / layer_index / title
      Removed value: -"Layer Index"
    • addedInput schema / properties / layer_index / type
      Added value: +"integer"
    • removedInput schema / properties / max_depth / anyOf
      Removed value: -[
      -  {
      -    "type": "integer"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]
    • addedInput schema / properties / max_depth / description
      Added value: +"prims: how many levels of the tree come back."
    • removedInput schema / properties / max_depth / title
      Removed value: -"Max Depth"
    • addedInput schema / properties / max_depth / type
      Added value: +"integer"
    • removedInput schema / properties / mode / anyOf
      Removed value: -[
      -  {
      -    "type": "string"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]
    • addedInput schema / properties / mode / description
      Added value: +"One of \"stage\", \"prims\", \"prim\", \"search\", \"layer\", \"attribute\", \"composition\", \"variants\", \"stats\", \"modified\", \"lights\", \"transform\"."
    • removedInput schema / properties / mode / title
      Removed value: -"Mode"
    • addedInput schema / properties / mode / type
      Added value: +"string"
    • addedInput schema / properties / path / description
      Added value: +"The LOP node whose stage to read."
    • removedInput schema / properties / path / title
      Removed value: -"Path"
    • removedInput schema / properties / pattern / anyOf
      Removed value: -[
      -  {
      -    "type": "string"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]
    • removedInput schema / properties / pattern / default
      Removed value: -null
    • addedInput schema / properties / pattern / description
      Added value: +"search: the prim path to match, with * as a wildcard."
    • removedInput schema / properties / pattern / title
      Removed value: -"Pattern"
    • addedInput schema / properties / pattern / type
      Added value: +"string"
    • removedInput schema / properties / prim_path / anyOf
      Removed value: -[
      -  {
      -    "type": "string"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]
    • removedInput schema / properties / prim_path / default
      Removed value: -null
    • addedInput schema / properties / prim_path / description
      Added value: +"prim, attribute, composition, variants, stats, transform: the prim, for example \"/world/geo/rock\"."
    • removedInput schema / properties / prim_path / title
      Removed value: -"Prim Path"
    • addedInput schema / properties / prim_path / type
      Added value: +"string"
    • removedInput schema / properties / root_prim / anyOf
      Removed value: -[
      -  {
      -    "type": "string"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]
    • addedInput schema / properties / root_prim / description
      Added value: +"prims: the prim where the tree starts."
    • removedInput schema / properties / root_prim / title
      Removed value: -"Root Prim"
    • addedInput schema / properties / root_prim / type
      Added value: +"string"
    • removedInput schema / properties / type_name / anyOf
      Removed value: -[
      -  {
      -    "type": "string"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]
    • removedInput schema / properties / type_name / default
      Removed value: -null
    • addedInput schema / properties / type_name / description
      Added value: +"search: keep the prims of this type, for example \"Mesh\" or \"SphereLight\"."
    • removedInput schema / properties / type_name / title
      Removed value: -"Type Name"
    • addedInput schema / properties / type_name / type
      Added value: +"string"
    • removedInput schema / title
      Removed value: -"toolArguments"
  3. Addedv0.1.1

TDQS

A4.8/5.0
Behavior5/5

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

Goes well past the readOnlyHint/idempotentHint annotations: it discloses that reading cooks the node, that a layer rewritten by another process (hython cache) is reloaded and reported in reloaded_layers, and that frames temporarily moves the playbar and restores it. Those are exactly the side effects an agent would otherwise not anticipate from a read-only tool.

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 and the mode list, then a scannable indented mode table; the negative guidance is placed before the bulk. The opening mode enumeration largely duplicates the schema's mode description, which is mild redundancy across a fairly long body, but the length is justified by 13 distinct modes.

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 12-parameter, 13-mode tool this covers what an agent needs: cooking cost implications, playbar restoration, layer reload behavior, mode selection, and a hard boundary against SOP geometry. Return values are handled by the existing output schema, so their absence from the description is not a gap.

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 already 100%, so the baseline is 3; the description earns more by binding parameters to modes and explaining effect rather than just type (include_attrs adds attributes, frames returns "the path of a moving prim", layer_index walks the stack, max_depth controls tree depth). It does not restate format details already in the schema, but it also adds no validation or edge-case behavior for conflicting mode/param combinations.

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+resource ("Read the USD stage at a LOP node") and immediately names the sibling it must not be confused with ("Do not use it for SOP geometry: geometry_inspect does that"). The mode enumeration makes the read surface concrete, so an agent can pick this over geometry_inspect/node_inspect without opening a schema.

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 positive context ("Use it in a Solaris (LOP) network to see the prims, the layers and the composition that a node produces"), an explicit exclusion with the alternative tool named, and per-mode guidance including when a mode is specifically warranted ("Use it to see what one LOP did", "It names the node that makes an export or a render start slow"). Nothing about routing is left to inference.

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