Skip to main content
Glama

Server Configuration

Describes the environment variables required to run the server.

NameRequiredDescriptionDefault
PYTHONPATHNoSet to an empty string to keep a Python path that Isaac Sim's environment sets out of the server's Python.
OMNIVERSE_MCP_HOSTNoWhere the bridge listens (--host).127.0.0.1
OMNIVERSE_MCP_PORTNoThe bridge's port (--port).8211
OMNIVERSE_MCP_TOKENNoThe bridge token, for a Kit app on another machine. Defaults to the token file.
OMNIVERSE_MCP_STATE_DIRNoThe token file's folder, set the same on both sides. Default is per system.
OMNIVERSE_MCP_OUTPUT_DIRNoWhere 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

CapabilityDetails
tools
{
  "listChanged": false
}
prompts
{
  "listChanged": false
}
resources
{
  "subscribe": false,
  "listChanged": false
}

Tools

Functions exposed to the LLM to take actions

NameDescription
get_scene_treeA

Get the USD scene hierarchy as grep-friendly prim-block text.

    Each prim shows: path, type, world position. For large scenes, use dump_scene
    which also includes properties and bounding boxes.
    
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.

    Types: Cube, Sphere, Cylinder, Cone, Capsule, Xform, Camera, DistantLight, SphereLight, etc.
    Or load a USD file via usd_path. A prim already at prim_path keeps its type: one of another type is refused.
    
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:

    1. **Viewport image** (PNG) -- what the camera sees
    2. **Bounding boxes** (TXT) -- screen-space bounding boxes mapping each visible prim to pixel coordinates
    3. **Instance segmentation** (PNG) -- each prim rendered as a unique color, with a legend mapping colors to prim paths

    Use files 2 and 3 to understand which prim is where in the viewport image.
    Set include_image=True to return the viewport image inline (uses more context but lets you see the scene directly).
    
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).

    Auto-fits camera distance so the prim fills the viewport with ~10px margin.
    Captures from all 6 face centers + 8 cube corners by default, giving full coverage.
    Saves each angle as a PNG file. Use Read tool to view images.
    
viewport_lightA

Query or control viewport lighting mode.

    Actions:
    - "get": Return current lighting mode, available modes, and scene lights
    - "set": Set lighting mode. Available modes: "off", "camera", "stage",
      "Default", "Colored Lights", "Grey Studio" (light rigs)
    - "set_camera_light": legacy, turns the camera light on or off

    When capture_viewport returns a black image, use this tool to check and change
    the lighting mode, then recapture.
    
create_robotA

Add a robot: one of Isaac Sim's asset library by name, or a robot's own USD file.

    Available: franka, ur10, carter, jetbot, g1, go1, go2, h1, spot, anymal. Or a USD file as robot_type: a path
    on the Kit app's machine, a URL, or a path in Isaac Sim's asset library (/Isaac/...). Without prim_path,
    the prim is named after the 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.

    Radians for revolute joints and metres for prismatic ones, velocities per second (set_joint_targets takes
    degrees). Needs Isaac Sim; tested on 6.2.
    
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 duration seconds: a line, a polyline, a sphere as three crossing lines, or a small cross per point.

    Isaac Sim draws with isaacsim.util.debug_draw, turned on at the first call. Its clear takes every line drawn
    with it, so when a drawing expires, lines other code drew with it go too. Other Kit apps draw with
    omni.debugdraw when they have it. A new stage drops the old one's drawings.
start_recordingA

Start recording simulation frames to disk.

    Records the active viewport, from its camera at its own size: aim it with set_camera or look_at_prim first.
    camera_path, width and height are ignored for now (#25); the answer warns when given a camera_path, or a size
    other than 640x480.

    Captures a frame every few app updates, about 1/fps seconds, whether or not the simulation plays: play it to
    record motion. Frames are saved as PNGs in mcp_output/recordings/. Use stop_recording when done,
    then get_recording_frame to review any frame.

    Optionally tracks prim state (transforms, properties) alongside video frames.
    State is written to a grep-friendly state.txt in prim-block format.
    
stop_recordingA

Stop the active recording session.

    Returns session info and frame count. Use get_recording_frame to review frames.
    
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.

    Like get_scene_tree but focused on geometry budget: each mesh shows
    face/vertex/triangle counts, each group shows subtree_faces total.
    
flatten_usdB

Flatten a USD file: resolve all references, payloads, sublayers into one file.

    If input_path is omitted, flattens the current stage.
    
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.

    Two modes:
    1. Prim comparison: provide prim_path_a and prim_path_b
    2. Variant comparison: provide prim_path, variant_set, variant_a, variant_b

    Returns side-by-side stats with deltas. Properly clears BBoxCache between
    variant switches to avoid stale data.
    
update_material_pathsB

Bulk-update material reference paths in a subtree.

    Updates both relationship targets (material bindings) and asset path
    attributes (texture file paths) that start with old_prefix.
    
execute_scriptA

Execute Python inside the running Kit app (Isaac Sim, USD Composer, ...).

    The script has access to: omni, carb, Usd, UsdGeom, UsdLux, UsdPhysics, Sdf, Gf, mcp.
    Assign to 'result' to return data. stdout/stderr are captured.

    The `mcp` object provides async access to MCP handlers from within scripts.
    Use `await` to call its methods (the script automatically runs as async):

        viewport = await mcp.capture_viewport(width=1280)
        tree = await mcp.scene_tree()
        await mcp.set_camera([5, 3, 5], target=[0, 0, 0])
        result = {"tree": tree["result"]}

    Available mcp methods:
        mcp.capture_viewport(width, height, camera_path)
        mcp.set_camera(position, target)
        mcp.look_at(prim_path, distance, azimuth, elevation)
        mcp.inspect(prim_path, angles, width, height, zoom_offset=0.0, isolate=False)
        mcp.scene_tree(root, max_depth)
        mcp.prim_properties(prim_path)
        mcp.prim_bounds(prim_path)
        mcp.set_transform(prim_path, position, rotation, scale)
        mcp.create_prim(prim_path, prim_type, **kwargs)
        mcp.delete_prim(prim_path)
        mcp.set_material(prim_path, color, opacity, roughness, metallic)
        mcp.sim_control(action)  -- play/pause/stop/step
        mcp.sim_state()
        mcp.get_logs(count, min_level, channel, search)

    Each returns the full handler response dict with "status" and "result" keys.

    Use Context7 MCP (library: isaac-sim/isaacsim) to look up the correct API calls.
    
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.

    Use this to investigate errors: when any tool fails, call get_logs() to see what the Kit app reported. Kit's
    file holds Info and above by default; verbose lines need Kit started with both --/log/level=verbose and
    --/log/fileLogLevel=verbose.
    

Prompts

Interactive templates invoked by user choice

NameDescription

No prompts

Resources

Contextual data attached and managed by the client

NameDescription
scene_tree_resourceCurrent scene hierarchy.
sim_state_resourceCurrent simulation state.

TDQS

B3.4/5.0

Scored across 41 tools

Disambiguation3/5

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.

Naming Consistency4/5

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.

Tool Count2/5

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.

Completeness4/5

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.

Maintenance

ActivityMaintained
ResponsivenessResponsive