Isaac Sim robot workbench
PYPI · DEX-ISAAC-MCP
Drive a live Isaac Sim session: any robot, poses, gain tuning, range tests, Isaac Lab training.
Available components
Last scanned (3 hours ago)
Scores higher than 82% of PyPI servers
Category IoT and Hardware
How this component scores in each security and reliability category. Every signal is checked automatically from public evidence about the published package, including repeated runs of it in an isolated sandbox, and we only credit what we can confirm. How we score → Why this is hard to score →
Supply Chain Security100
- No malware found by supply-chain analysis.Pass
- No known CVEs affecting this package version or its production dependencies.Pass
- Runs setuptools.build_meta at install time, a recognised build step with no custom scripting around it. View diagnostics → Pass
- 1 of 28 dependencies flagged as unhealthy. View diagnostics → Partial
Provenance & Transparency45
- Source repository is publicly reachable at the declared URL. View diagnostics → Pass
- Provenance check failed: no build-provenance attestation is published. See how to fix → View diagnostics → Fail
- Clear OSI-approved license (MIT).Pass
- Actively maintained (last published 32 days ago).Pass
- Disclosure check failed: no security disclosure policy was found in the source repository. See how to fix → Fail
Schema Quality & AI Usability76
- AI-judged instruction clarity (good).Pass
- Tool/resource definitions use about 2454 tokens (~68/item across 36 items; 36 tools + 0 resources), lean.Pass
- Usage-examples check failed: none of the tools include examples. See how to fix → Fail
Stability & Change Management100
- No destabilizing schema changes in the last 30 days.Pass
Tool Coverage71
- 100% of tools have a non-trivial description (not blank, and not just the tool's name).Pass
- 0% of tool parameters carry a description.Fail
- Structured output schemas are declared (94% of tools); any adoption earns full credit.Pass
Tool Safety75
- No prompt-injection markers were found in the server instructions, tool names or descriptions we captured.Pass
- 0 of 1 tool(s) whose name or description implies an irreversible operation declare an MCP destructiveHint annotation; "sim_remove_object" implies "remove" and declares no destructiveHint at all, which the MCP spec reads as destructive by default. See how to fix → Fail
- An AI judge read all 37 captured unit(s) of tool text and found none that tries to manipulate the model reading it.Pass
Capabilities100
- Implements a current MCP spec version (2026-07-28).Pass
Every change we have recorded for this component, newest first. Security-relevant changes are always shown. ▲ marks a change for the better, ▼ a change for the worse; unmarked changes are neutral.
- 4 Nov 26 +15
- Malware scan: unverified → pass ▲ security
- 3 Nov 26 0
- Provenance: unverified → fail ▼ security
- Security disclosure: unverified → fail ▼ functional
- 2 Nov 26 −14
- Malware scan: pass → unverified ▼ security
- Provenance: fail → unverified ▼ security
- Stability: 0.97 → pass security
- 31 Oct 26 +1
- Provenance: unverified → fail ▼ security
- 30 Oct 26 0
- Provenance: fail → unverified ▼ security
- Security disclosure: fail → unverified ▼ functional
- 29 Oct 26 +16
- Malware scan: unverified → pass ▲ security
- 26 Oct 26 +1
No change was recorded against any check on this day. Stability & Change Management went from 73 to 77. That category is still filling its 30-day observation window: 22 days of observed history at the previous scan, 23 at this one. The score rises as the window fills, whether or not the server changes.
- 24 Oct 26 +1
- Security disclosure: unverified → fail ▼ functional
Diagnostic detail from the automated scan of this channel: what the scanner observed at each step, so you can see exactly where a check passed or failed. It is informational only and never changes the trust score.
Captured 5 Nov 2026 · Analysed pypi/dex-isaac-mcp@0.1.2
Provenance No attestation
The registry publishes no build provenance for this version, so there is nothing to verify.
| Result | No attestation |
|---|---|
| Ecosystem | pypi |
| Reason | No attestation published |
Background: How many MCP packages publish verified provenance →
Install scripts 1 script
| Hook | Tier | Command |
|---|---|---|
| build_backend | allowlisted | setuptools.build_meta |
Background: Why install scripts are a supply-chain risk →
Dependencies 28 packages
| Packages resolved | 28 |
|---|---|
| No linked repository | 1 |
| Tree resolution | Complete |
Background: SBOMs and build attestations, explained →
The tools this component advertises to a client, with an estimated token cost for each. Expand a tool to see its parameters and schema. The per-tool counts are indicative and are not scored directly; the schema's total context footprint is one signal in Schema Quality & AI Usability. A tool's description is untrusted text the model reads on every call, which is what makes this list a security surface and not just an inventory: how tool poisoning works →
sim_capture ~39
A frame from the capture camera. Works headless; no GUI or viewport needed.
| Name | Type | Req | Description |
|---|---|---|---|
| height | integer | – | – |
| width | integer | – | – |
No output schema declared.
No examples provided.
sim_down ~18
Stop the sim daemon; its container removes itself.
Input schema present but exposes no named parameters.
Structured output declared, but exposes no named fields.
No examples provided.
sim_frame_robot ~138
Aim the capture camera so the whole robot fills the frame. direction points from the robot toward the camera, e.g. [1, 0, 0.3] for a front view slightly from above (default: the last direction used). margin > 1 leaves room around the robot. raise_frac lifts it in the frame (fraction of its size), e.g. 0.15 to clear recording captions. Then sim_capture or sim_record_start.
| Name | Type | Req | Description |
|---|---|---|---|
| direction | – | – | – |
| height | integer | – | – |
| margin | number | – | – |
| raise_frac | number | – | – |
| width | integer | – | – |
Structured output declared, but exposes no named fields.
No examples provided.
sim_get_joint_state ~28
Joint positions (rad/m) and velocities, plus driven joints' normalized positions and limits.
Input schema present but exposes no named parameters.
Structured output declared, but exposes no named fields.
No examples provided.
sim_get_stats ~49
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.
Input schema present but exposes no named parameters.
Structured output declared, but exposes no named fields.
No examples provided.
sim_inspect_joints ~62
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.
| Name | Type | Req | Description |
|---|---|---|---|
| usd | – | – | – |
Structured output declared, but exposes no named fields.
No examples provided.
sim_list_objects ~32
Every spawned prop with its current world pose (pos in m, rot as w, x, y, z).
Input schema present but exposes no named parameters.
Structured output declared, but exposes no named fields.
No examples provided.
sim_list_poses ~31
Named poses from the robot config, as {pose: {joint_pattern: 0..1}}.
Input schema present but exposes no named parameters.
Structured output declared, but exposes no named fields.
No examples provided.
sim_play ~31
Run the sim continuously in real time (True) or pause it (False).
| Name | Type | Req | Description |
|---|---|---|---|
| playing | boolean | – | – |
Structured output declared, but exposes no named fields.
No examples provided.
sim_range_test ~111
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.
| Name | Type | Req | Description |
|---|---|---|---|
| reset | boolean | – | – |
| steps | integer | – | – |
| target | number | – | – |
Structured output declared, but exposes no named fields.
No examples provided.
sim_record_caption ~31
Change the caption drawn on frames recorded from now on ('' for none).
| Name | Type | Req | Description |
|---|---|---|---|
| text | string | yes | – |
Structured output declared, but exposes no named fields.
No examples provided.
sim_record_start ~87
Start recording the capture camera: one frame every `every` physics steps. Everything that steps the sim is recorded (sim_step, sim_wave, sim_range_test). caption is drawn along the bottom of each frame; change it with sim_record_caption.
| Name | Type | Req | Description |
|---|---|---|---|
| caption | string | – | – |
| every | integer | – | – |
| height | integer | – | – |
| width | integer | – | – |
Structured output declared, but exposes no named fields.
No examples provided.
sim_record_stop ~74
Stop recording and write an animated GIF; returns its path on the host. At the default every=2 and dt=1/120, fps=30 plays back at half speed; 60 is real time.
| Name | Type | Req | Description |
|---|---|---|---|
| fps | number | – | – |
| hold_last | number | – | – |
| name | string | – | – |
Structured output declared, but exposes no named fields.
No examples provided.
sim_reload ~100
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.
| Name | Type | Req | Description |
|---|---|---|---|
| ground | boolean | – | – |
| gui | boolean | – | – |
| pos_iters | – | – | – |
| robot | – | – | – |
| self_collisions | – | – | – |
| usd | – | – | – |
Structured output declared, but exposes no named fields.
No examples provided.
sim_remove_object ~21
Delete a spawned prop.
| Name | Type | Req | Description |
|---|---|---|---|
| name | string | yes | – |
Structured output declared, but exposes no named fields.
No examples provided.
sim_screenshot ~24
Capture the viewport as an image. Requires the daemon started with gui=True.
Input schema present but exposes no named parameters.
No output schema declared.
No examples provided.
sim_set_backdrop ~59
Put a plain panel (RGB 0..1) behind the robot, facing the capture camera; no color removes it. For clean footage, also start the daemon with ground=False.
| Name | Type | Req | Description |
|---|---|---|---|
| color | – | – | – |
| size | number | – | – |
Structured output declared, but exposes no named fields.
No examples provided.
sim_set_camera ~59
Point the viewport camera, e.g. eye=[1.2, 1.2, 1.0] target=[0, 0, 0.3].
| Name | Type | Req | Description |
|---|---|---|---|
| eye | array | yes | – |
| target | array | yes | – |
Structured output declared, but exposes no named fields.
No examples provided.
sim_set_capture_camera ~38
Place the capture camera by hand (sim_frame_robot does it automatically).
| Name | Type | Req | Description |
|---|---|---|---|
| eye | array | yes | – |
| target | array | yes | – |
Structured output declared, but exposes no named fields.
No examples provided.
sim_set_coupling ~59
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.
| Name | Type | Req | Description |
|---|---|---|---|
| ratios | object | yes | – |
Structured output declared, but exposes no named fields.
No examples provided.
sim_set_params ~39
Change the driven joints' PD gains and effort limit on the live articulation.
| Name | Type | Req | Description |
|---|---|---|---|
| damping | – | – | – |
| effort | – | – | – |
| stiffness | – | – | – |
Structured output declared, but exposes no named fields.
No examples provided.
sim_set_pose ~86
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.
| Name | Type | Req | Description |
|---|---|---|---|
| amount | number | – | – |
| from_current | boolean | – | – |
| name | string | yes | – |
Structured output declared, but exposes no named fields.
No examples provided.
sim_set_targets ~71
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.
| Name | Type | Req | Description |
|---|---|---|---|
| joints | – | – | – |
| unit | – | – | – |
Structured output declared, but exposes no named fields.
No examples provided.
sim_spawn_object ~220
Add a prop to the live scene: a primitive or a USD file, with collision. shape: cuboid (size=[x,y,z]), sphere (radius), cylinder / capsule / cone (radius, height), or usd (usd=<path>, optional scale). Units are meters and kg. static=True: a fixed collider (a table, a wall). kinematic=True: a rigid body that contact cannot move. rot is a (w, x, y, z) quaternion. color is RGB 0..1. Spawns at /World/Objects/<name>; sim_step to let it fall and settle.
| Name | Type | Req | Description |
|---|---|---|---|
| color | – | – | – |
| friction | number | – | – |
| height | – | – | – |
| kinematic | boolean | – | – |
| mass | number | – | – |
| name | string | yes | – |
| pos | array | yes | – |
| radius | – | – | – |
| rot | – | – | – |
| scale | – | – | – |
| shape | string | yes | – |
| size | – | – | – |
| static | boolean | – | – |
| usd | – | – | – |
Structured output declared, but exposes no named fields.
No examples provided.
sim_status ~26
Report whether the sim daemon is up, its robot, driven joints, poses and parameters.
Input schema present but exposes no named parameters.
Structured output declared, but exposes no named fields.
No examples provided.
sim_step ~34
Advance the simulation n physics steps (dt from sim_status, default 1/120 s).
| Name | Type | Req | Description |
|---|---|---|---|
| n | integer | – | – |
Structured output declared, but exposes no named fields.
No examples provided.
sim_sweep ~114
Compare several values of one live parameter inside the single session. param: stiffness, damping, effort, or "coupling:<follower>". 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.
| Name | Type | Req | Description |
|---|---|---|---|
| param | string | yes | – |
| steps | integer | – | – |
| test | string | – | – |
| values | array | yes | – |
Structured output declared, but exposes no named fields.
No examples provided.
sim_up ~190
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); defaults to $ISAAC_MCP_ROBOT. 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.
| Name | Type | Req | Description |
|---|---|---|---|
| extra_args | – | – | – |
| ground | boolean | – | – |
| gui | boolean | – | – |
| robot | – | – | – |
| timeout | number | – | – |
| usd | – | – | – |
Structured output declared, but exposes no named fields.
No examples provided.
sim_wave ~30
Sweep every driven joint through its range for n steps; return travel stats.
| Name | Type | Req | Description |
|---|---|---|---|
| n | integer | – | – |
Structured output declared, but exposes no named fields.
No examples provided.
train_checkpoints ~28
List a run's saved checkpoints with step and size.
| Name | Type | Req | Description |
|---|---|---|---|
| run_name | string | yes | – |
Structured output declared, but exposes no named fields.
No examples provided.
train_list ~23
List training runs: live or recent containers, and log directories holding checkpoints.
Input schema present but exposes no named parameters.
Structured output declared, but exposes no named fields.
No examples provided.
train_logs ~33
Tail a running training container's stdout/stderr.
| Name | Type | Req | Description |
|---|---|---|---|
| run_name | string | yes | – |
| tail | integer | – | – |
Structured output declared, but exposes no named fields.
No examples provided.
train_metrics ~53
TensorBoard scalars for a run: no tag lists tag names; a tag returns its series, downsampled.
| Name | Type | Req | Description |
|---|---|---|---|
| max_points | integer | – | – |
| run_name | string | yes | – |
| tag | – | – | – |
Structured output declared, but exposes no named fields.
No examples provided.
train_start ~141
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 '<task>_<timestamp>'; 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.
| Name | Type | Req | Description |
|---|---|---|---|
| checkpoint | – | – | – |
| device | – | – | – |
| extra_args | – | – | – |
| max_iterations | – | – | – |
| num_envs | – | – | – |
| run_name | – | – | – |
| seed | – | – | – |
| task | string | yes | – |
Structured output declared, but exposes no named fields.
No examples provided.
train_status ~31
Container state, checkpoints, and latest TensorBoard scalar values for one run.
| Name | Type | Req | Description |
|---|---|---|---|
| run_name | string | yes | – |
Structured output declared, but exposes no named fields.
No examples provided.
train_stop ~23
Stop a training run's container.
| Name | Type | Req | Description |
|---|---|---|---|
| run_name | string | yes | – |
Structured output declared, but exposes no named fields.
No examples provided.
How do I install the Isaac Sim robot workbench MCP server?
Isaac Sim robot workbench runs locally as a PyPI package, launched with uvx dex-isaac-mcp. Ready-made configuration for Claude, Cursor, VS Code, Codex and 5 more is on this page, copied from each client's own documentation.
pypi · dex-isaac-mcp
claude mcp add milokucia-dex-isaac-mcp -- uvx dex-isaac-mcp
What is the Isaac Sim robot workbench MCP server?
Isaac Sim robot workbench is an MCP server listed in the public MCP registry as io.github.Milokucia/dex-isaac-mcp. Drive a live Isaac Sim session: any robot, poses, gain tuning, range tests, Isaac Lab training. This page covers its PyPI package (dex-isaac-mcp).
Is the Isaac Sim robot workbench MCP server safe to use?
Isaac Sim robot workbench scores 81 out of 100 on VerifyMCP. We found no known CVEs affecting it as of 5 November 2026. That is a record of what we were able to check automatically, not an endorsement. The category breakdown on this page shows every signal behind the number, including the ones we could not confirm.
What tools does the Isaac Sim robot workbench MCP server expose?
Isaac Sim robot workbench exposes 36 tools: sim_status, sim_up, sim_down, sim_reload, sim_inspect_joints, and 31 more. Their descriptions and schemas cost roughly 2,233 tokens of context every time the server is loaded.
Is the Isaac Sim robot workbench MCP server still maintained?
Isaac Sim robot workbench is still listed as active in the MCP registry. We last reached this channel on 5 November 2026. Those dates come from our own scans of the registry and the channel itself, not from anything the publisher announced.
What licence is the Isaac Sim robot workbench MCP server under?
Isaac Sim robot workbench declares the MIT licence, which is OSI-approved. That covers the source only, and says nothing about the cost of any service it calls.