dex-isaac-mcp
Server Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
| ISAAC_MCP_SOCKET | No | Unix 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_DIR | No | Host logs directory mounted at /workspace/isaaclab/logs (default: <repo>/logs) | <repo>/logs |
| ISAAC_MCP_COMPOSE_DIR | No | Directory containing the Docker Compose configuration (default: <repo>/docker) | <repo>/docker |
| ISAAC_MCP_RUN_NAME_ARG | No | Argument 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_SERVICE | No | Docker Compose service for the simulation daemon (default: simd) | simd |
| ISAAC_MCP_TRAIN_SCRIPT | No | Training script to run inside the container (default: scripts/reinforcement_learning/skrl/train.py) | scripts/reinforcement_learning/skrl/train.py |
| ISAAC_MCP_TRAIN_SERVICE | No | Docker Compose service used for training runs (default: isaac-lab) | isaac-lab |
| ISAAC_MCP_TRAIN_WORKDIR | No | Working 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
| Capability | Details |
|---|---|
| tools | {
"listChanged": false
} |
| prompts | {
"listChanged": false
} |
| resources | {
"subscribe": false,
"listChanged": false
} |
Tools
Functions exposed to the LLM to take actions
| Name | Description |
|---|---|
| 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 |
| 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 |
| 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 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 |
| 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
| Name | Description |
|---|---|
No prompts | |
Resources
Contextual data attached and managed by the client
| Name | Description |
|---|---|
No resources | |
TDQS
Scored across 26 tools
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.
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.
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.
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.