OpenUSD MCP server with daemon runtime — uvx-launchable, defaults to Pixar USD bindings
24 tools with consistent verb-noun naming (create_, set_, list_, add_, define_, import_, validate_, snapshot_, package_, author_). All tools have descriptions (avg ~80 chars, baseline 194). Input schemas present with typed parameters. However, descriptions are terse and lack context for LLM selection; parameter descriptions are minimal (e.g., 'Path to the USD stage file' repeated 20+ times); no output schemas documented; no error handling guidance; no enum constraints on string parameters like 'up_axis' or 'prim_type'; no pagination support for list_stage; no idempotency hints on write operations. Tools follow single-responsibility principle but lack depth in guidance for multi-step workflows.
Add a payload arc to a prim (pxr-required).
Define a prim that references another USD asset.
Add a sublayer to a stage (pxr-required).
Create a variant set on a prim (pxr-required).
Locate or download a USD asset from a source URL or local path.
Write attribute time samples on a prim (pxr-required).
Write transform time samples on an Xformable prim (pxr-required).
No output schemas documented. LLMs cannot infer what fields are returned or plan downstream tool chains. E.g., does list_stage return prim names, types, and paths? Does create_project return a project_id for reference?
Parameter descriptions are generic and repeated (e.g., 'Path to the USD stage file' appears 20+ times). LLMs need context: what happens if the file doesn't exist? Is it created? What format is expected? Descriptions should be 50-200 chars with actionable detail.
String parameters lack enum constraints. 'up_axis' accepts 'Y' or 'Z' but is defined as free-form string. 'prim_type' in define_prim is unconstrained. LLMs will hallucinate invalid values. Use enums: {"enum": ["Y", "Z"]} for up_axis.
Inferred effective spec: <=2025-11-25.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | C | 61 | <=2025-11-25 | v2 |
Create a USD camera (pxr-required).
Create a USD distant light (pxr-required).
Create a USD dome light with an optional HDR texture.
Create a self-contained OpenUSD project folder.
Create a USD sphere light (pxr-required).
Create a minimal USD stage.
Define a prim with an arbitrary type name, preserving nested hierarchy.
Define an Xform prim.
Import an external asset into a USD scene.
List prims and basic stage metadata.
Package a USD stage and its dependencies into a USDZ archive.
Configure stage time codes (pxr-required).
Set translate/rotate/scale on an Xformable prim (pxr-required).
Select a variant on a prim (pxr-required).
Set transform operations on a prim.
Create a snapshot image of a USD stage.
Validate a USD stage for correctness and completeness.
No error handling guidance. If a stage file doesn't exist, is it created or does the tool fail? If prim_path is invalid, what's the recovery? Tools should return actionable errors: 'Stage file not found at /path/to/file.usd. Create one first with create_stage().'
No idempotency or confirmation hints on destructive operations. Tools like package_usdz, snapshot_stage, and add_sublayer modify or create files but lack dry-run or confirmation patterns. Agents cannot safely retry without risk of duplicate side effects.