omniverse-mcp
Server Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
| PYTHONPATH | No | Set to an empty string to keep a Python path that Isaac Sim's environment sets out of the server's Python. | |
| OMNIVERSE_MCP_HOST | No | Where the bridge listens (--host). | 127.0.0.1 |
| OMNIVERSE_MCP_PORT | No | The bridge's port (--port). | 8211 |
| OMNIVERSE_MCP_TOKEN | No | The bridge token, for a Kit app on another machine. Defaults to the token file. | |
| OMNIVERSE_MCP_STATE_DIR | No | The token file's folder, set the same on both sides. Default is per system. | |
| OMNIVERSE_MCP_OUTPUT_DIR | No | Where images and long answers go (--output-dir). Defaults to mcp_output in the working folder. | mcp_output |
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
} |
Tools
Functions exposed to the LLM to take actions
| Name | Description |
|---|---|
| get_scene_treeA | Get the USD scene hierarchy as grep-friendly prim-block text. |
| dump_sceneA | Dump the full scene graph to a text file in prim-block format. Writes ALL prims with properties, bounding boxes, and transforms to a grep-friendly file. Returns the file path. Use your Read tool to examine specific parts. |
| get_prim_propertiesA | Get all properties of a specific prim in prim-block text format. Returns grep-friendly text with type, position, bounding box, and all USD properties. |
| get_prim_boundsA | Get the bounding box of a prim (center, dimensions, min/max corners, diagonal). Use this for spatial reasoning -- understanding sizes, overlap, distances. |
| set_prim_transformC | Set position/rotation/scale of a prim. |
| create_primA | Create a new prim in the scene. |
| delete_primA | Delete a prim and all its children. |
| set_materialA | Apply a PBR material (OmniPBR) to a prim with color and surface properties. Creates a material automatically and binds it to the target prim. Color values can be 0-1 floats or 0-255 ints (auto-detected). |
| clone_primA | Deep-copy a prim (and all children) to a new path. Supports batch cloning. Refuses a target path that already holds a prim, before it copies anything. |
| set_visibilityA | Show or hide a prim (and its descendants). |
| save_sceneB | Save the current scene to a USD file. |
| new_sceneA | Create a fresh empty scene with a /World root prim and Y-up axis. |
| capture_viewportA | Capture the viewport and save 3 files for scene understanding: |
| set_cameraA | Set the viewport camera position and optionally aim it at a target point. |
| look_at_primA | Point the viewport camera at a prim from a given angle. Auto-computes distance from object size if not specified. Azimuth 0=front, 90=right, 180=back, 270=left. |
| inspect_primA | Orbit-capture: take screenshots from 14 systematic angles around a prim (cube-based). |
| viewport_lightA | Query or control viewport lighting mode. |
| create_robotA | Add a robot: one of Isaac Sim's asset library by name, or a robot's own USD file. |
| get_robot_infoA | Get robot joint info: names, types, limits, DOF count. Pure USD, no sim needed. |
| get_joint_statesA | Get joint positions and velocities while the simulation plays or is paused; an error while it is stopped. |
| set_joint_targetsA | Set joint drive position targets. Works without articulation initialisation. |
| sim_controlA | Control simulation: play, pause, stop, or step. |
| get_sim_stateA | Get simulation state: playing/paused/stopped, time, FPS, prim count, up axis, and the versions of the Kit extension and this server, with what to run when they differ. |
| set_physics_propertiesC | Set physics material properties on a prim. |
| apply_forceA | Push a rigid body through PhysX, so its mass counts. The simulation must be playing or paused. Refused for a disabled or kinematic body, and for an articulation's link, such as a robot's, which PhysX's push doesn't reach yet (#58). |
| raycastA | Cast a ray into the scene and return what it hits. Useful for spatial queries. |
| draw_debugA | Draw debug lines in the viewport, 2 pixels wide, for |
| start_recordingA | Start recording simulation frames to disk. |
| stop_recordingA | Stop the active recording session. |
| get_recording_frameB | Get a specific frame from a recording session. Saves as PNG file. |
| get_mesh_statsA | Get face/vertex/triangle counts for a mesh prim or subtree. Returns per-mesh breakdown and totals. Use for measuring geometry budget, shell reduction ratios, etc. |
| get_prim_face_count_treeA | Get scene tree with face counts per mesh and subtree totals. |
| flatten_usdB | Flatten a USD file: resolve all references, payloads, sublayers into one file. |
| export_prim_as_fileA | Export a prim subtree as a standalone USD file. Flattens the source (resolves all references) and includes materials even if they live outside the exported subtree. Output is self-contained. |
| set_variant_selectionA | Switch variant selection on a prim with proper viewport refresh. Includes Hydra rprim refresh workaround (activation toggle + frame pumping) to ensure the viewport renders the correct geometry after switching. |
| create_variant_structureA | Create variant set boilerplate on a prim. Adds the variant set, creates empty variant bodies, and sets the default. |
| compare_primsA | Compare two prims or two variants: mesh counts, bounds, materials. |
| update_material_pathsB | Bulk-update material reference paths in a subtree. |
| execute_scriptA | Execute Python inside the running Kit app (Isaac Sim, USD Composer, ...). |
| manage_extensionsC | List, enable, or disable the Kit app's extensions. |
| get_logsA | Get recent entries of the Kit app's log, read from its log file since the bridge extension started. |
Prompts
Interactive templates invoked by user choice
| Name | Description |
|---|---|
No prompts | |
Resources
Contextual data attached and managed by the client
| Name | Description |
|---|---|
| scene_tree_resource | Current scene hierarchy. |
| sim_state_resource | Current simulation state. |
TDQS
Scored across 41 tools
Several inspection tools overlap: get_scene_tree, dump_scene, get_prim_face_count_tree, get_mesh_stats, and get_prim_properties all return scene/geometry information with only subtle differences. Most other tools are clearly distinct, but this cluster risks misselection.
Almost all tools are snake_case and verb-led (get_, set_, create_, delete_), giving a predictable pattern. Outliers like sim_control, viewport_light, raycast, and manage_extensions slightly break the convention but remain readable.
41 tools is well above the rubric's 25-tool threshold for 'too many'. The domain is broad, but the surface is heavy and several capabilities could likely be consolidated.
The toolset covers CRUD, transforms, materials, variants, simulation control, robots, joints, physics, recording, debug drawing, scripting, and logs. Minor gaps exist, such as no explicit scene-open tool and no undo/selection operations, but core lifecycle coverage is strong.