Skip to main content
Glama
Milokucia

dex-isaac-mcp

by Milokucia

Server Configuration

Describes the environment variables required to run the server.

NameRequiredDescriptionDefault
ISAAC_MCP_SOCKETNoUnix socket path used by the simulation daemon (default: <repo>/.cache/simd.sock). Paths are capped at 107 bytes, so set this if your checkout is deep<repo>/.cache/simd.sock
ISAAC_MCP_LOGS_DIRNoHost logs directory mounted at /workspace/isaaclab/logs (default: <repo>/logs)<repo>/logs
ISAAC_MCP_COMPOSE_DIRNoDirectory containing the Docker Compose configuration (default: <repo>/docker)<repo>/docker
ISAAC_MCP_RUN_NAME_ARGNoArgument used to tag the run name onto the log directory (default: agent.experiment.experiment_name={run_name}; empty means don't pass one)agent.experiment.experiment_name={run_name}
ISAAC_MCP_SIMD_SERVICENoDocker Compose service for the simulation daemon (default: simd)simd
ISAAC_MCP_TRAIN_SCRIPTNoTraining script to run inside the container (default: scripts/reinforcement_learning/skrl/train.py)scripts/reinforcement_learning/skrl/train.py
ISAAC_MCP_TRAIN_SERVICENoDocker Compose service used for training runs (default: isaac-lab)isaac-lab
ISAAC_MCP_TRAIN_WORKDIRNoWorking directory inside the training container (default: /workspace/isaaclab)/workspace/isaaclab

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
sim_statusA

Report whether the sim daemon is up, its robot, driven joints, poses and parameters.

sim_upA

Start the daemon container and wait until it answers. Idempotent.

robot: a robot config JSON, path relative to the repo root (e.g. examples/robots/franka.json). usd: a USD path instead of / overriding the config's (every joint driven if no config). gui=True is needed for sim_screenshot; the host must have run xhost +local:docker once. ground=False spawns without a floor (use for range tests). extra_args go to scripts/simd.py verbatim (e.g. ["--pos-iters", "64"]). The first start downloads Nucleus assets and builds shader caches: minutes.

sim_downA

Stop the sim daemon; its container removes itself.

sim_reloadA

Restart the daemon to change a spawn property: robot, USD, solver iterations, self-collision.

One Kit start rather than one per experiment; gains stay live via sim_set_params. Omitted robot/usd fall back to the defaults, not to what was loaded before.

sim_inspect_jointsA

List a USD's articulation DOFs, joints excluded from the articulation (loop closures), and roots.

Reads the file, not the live scene, so it shows edits saved from the Isaac GUI. Defaults to the loaded USD.

sim_get_joint_stateB

Joint positions (rad/m) and velocities, plus driven joints' normalized positions and limits.

sim_get_statsA

Per-joint travel and driven-joint mean tracking error since the last reset.

Travel on a passive joint proves a linkage transmits: with zero stiffness it moves only if its constraint moves it.

sim_set_targetsA

Command the driven joints, normalized 0..1 (lower..upper limit).

Pass unit as a full vector in driven order (see sim_status), or joints to set individual joints by name. Targets persist; advance with sim_step.

sim_list_posesB

Named poses from the robot config, as {pose: {joint_pattern: 0..1}}.

sim_set_poseA

Command a named pose. amount blends toward it: 1 = as authored, 0.5 = halfway.

Halfway from the lower limits by default, or from the current targets with from_current=True. Follow with sim_step, then sim_screenshot to verify.

sim_stepA

Advance the simulation n physics steps (dt from sim_status, default 1/120 s).

sim_playA

Run the sim continuously in real time (True) or pause it (False).

sim_waveB

Sweep every driven joint through its range for n steps; return travel stats.

sim_range_testA

Drive every driven joint from its lower limit toward target, report the fraction reached.

A joint below 0.9 is blocked: self-collision, a binding linkage, or too little effort for the load. reset=True first puts every joint at its lower limit and verifies it. Start the daemon with ground=False if the robot can reach the floor, or the test measures the floor.

sim_set_paramsC

Change the driven joints' PD gains and effort limit on the live articulation.

sim_set_couplingA

Change software-coupling ratios live, keyed by follower joint. 0 releases a follower.

Couplings are declared in the robot config; a follower is driven to ratio x its leader's target.

sim_set_cameraB

Point the viewport camera, e.g. eye=[1.2, 1.2, 1.0] target=[0, 0, 0.3].

sim_screenshotA

Capture the viewport as an image. Requires the daemon started with gui=True.

sim_sweepA

Compare several values of one live parameter inside the single session.

param: stiffness, damping, effort, or "coupling:". For each value it applies the parameter and runs test ("wave" or "range") for steps. The original value is restored afterwards, even on error. A diverging solver is recorded as a result, not raised.

train_startA

Launch a headless Isaac Lab training run in its own container; returns at once.

task is a registered gym id (e.g. Isaac-Cartpole-v0). run_name defaults to '_'; keep it to find the run later. extra_args go to the training script verbatim (e.g. Hydra overrides). device pins one GPU index. Independent of the daemon and of this MCP session.

train_listA

List training runs: live or recent containers, and log directories holding checkpoints.

train_statusB

Container state, checkpoints, and latest TensorBoard scalar values for one run.

train_logsA

Tail a running training container's stdout/stderr.

train_stopC

Stop a training run's container.

train_checkpointsB

List a run's saved checkpoints with step and size.

train_metricsA

TensorBoard scalars for a run: no tag lists tag names; a tag returns its series, downsampled.

Prompts

Interactive templates invoked by user choice

NameDescription

No prompts

Resources

Contextual data attached and managed by the client

NameDescription

No resources

TDQS

A3.6/5.0

Scored across 26 tools

Disambiguation5/5

Tools are cleanly partitioned into sim_* and train_* domains, and within sim the verbs target distinct actions (status, step, play, set_targets vs set_pose vs set_coupling). Minor overlap between sim_wave, sim_range_test, and sim_sweep is resolved by their descriptions.

Naming Consistency5/5

All tool names use snake_case with consistent sim_ or train_ prefixes and predictable verb_noun structure, e.g. sim_set_targets, sim_get_joint_state, train_start, train_checkpoints.

Tool Count4/5

26 tools is slightly above the ideal single-domain range, but the server covers two substantial subsystems: live Isaac Sim control and headless Isaac Lab training orchestration. The count is reasonable for that dual scope.

Completeness4/5

The surface covers sim lifecycle (up/down/reload, status, joint state, poses, params, camera, screenshot, experiments) and training lifecycle (start/list/status/logs/stop/checkpoints/metrics). Minor gaps include no explicit generic sim reset and no training-run cleanup/delete operation.

Maintenance

ActivityMaintained
ResponsivenessNo issues