Skip to content
verify mcp Beta VerifyMCP is currently in beta. If you notice any issues, get in touch and we’ll put it right.

io.github.whats2000/isaacsim-mcp-server

PYPI · ISAACSIM-MCP-SERVER · SCANNED SEP 20

Control NVIDIA Isaac Sim robotics simulator through MCP with 42 tools

+4 this week 73 Trust /100
Trust breakdown (7 categories)

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 hatchling.build at install time, a recognised native-build step with no shell scripting around it. View diagnostics → Pass
  • 0 of 29 dependencies flagged as unhealthy. View diagnostics → Pass
Provenance & Transparency35
  • 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
  • License check failed: the license (MIT License) isn't a recognized OSI-approved license. See how to fix → Fail
  • Actively maintained (last published 18 days ago).Pass
  • Publishes a security disclosure policy (SECURITY.md).Pass
Schema Quality & AI Usability67
  • AI-judged instruction clarity (excellent).Pass
  • Context-footprint check failed: tool/resource definitions use about 6761 tokens (~160/item across 42 items; 42 tools + 0 resources), over budget; trim descriptions and params. See how to fix → Fail
  • Usage-examples check failed: none of the tools include examples. See how to fix → Fail
Stability & Change Management67
  • Stability observed for 20 of 30 days with no destabilising changes; credit accrues until the full window elapses.Partial
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 (100% 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 3 tool(s) whose name or description implies an irreversible operation declare an MCP destructiveHint annotation; "clear_scene" 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 43 captured unit(s) of tool text and found none that tries to manipulate the model reading it.Pass
Capabilities100
  • Implements a supported MCP spec version (2025-11-25); the latest is 2026-07-28.Pass
Install

How do I install the io.github.whats2000/isaacsim-mcp-server server?

io.github.whats2000/isaacsim-mcp-server runs locally as a PyPI package, launched with uvx isaacsim-mcp-server. Ready-made configuration for Claude, Cursor, VS Code, Codex and 5 more is on this page, copied from each client's own documentation.

pypi · isaacsim-mcp-server

# add to Claude Code
claude mcp add whats2000-isaacsim-mcp-server -- uvx isaacsim-mcp-server
// .cursor/mcp.json
{
  "mcpServers": {
    "whats2000-isaacsim-mcp-server": {
      "command": "uvx",
      "args": [
        "isaacsim-mcp-server"
      ]
    }
  }
}
// .vscode/mcp.json
{
  "servers": {
    "whats2000-isaacsim-mcp-server": {
      "command": "uvx",
      "args": [
        "isaacsim-mcp-server"
      ]
    }
  }
}
# add to Codex CLI
codex mcp add whats2000-isaacsim-mcp-server -- uvx isaacsim-mcp-server
// opencode.json
{
  "$schema": "https://opencode.ai/config.json",
  "mcp": {
    "whats2000-isaacsim-mcp-server": {
      "type": "local",
      "command": [
        "uvx",
        "isaacsim-mcp-server"
      ],
      "enabled": true
    }
  }
}
# add to OpenClaw
openclaw mcp add whats2000-isaacsim-mcp-server --command uvx --arg isaacsim-mcp-server
# ~/.hermes/config.yaml
mcp_servers:
  whats2000-isaacsim-mcp-server:
    command: "uvx"
    args: ["isaacsim-mcp-server"]
// ~/.netclaw/config/netclaw.json
{
  "McpServers": {
    "whats2000-isaacsim-mcp-server": {
      "Transport": "stdio",
      "Command": "uvx",
      "Arguments": [
        "isaacsim-mcp-server"
      ]
    }
  }
}
# add to Vellum
assistant mcp add whats2000-isaacsim-mcp-server -t stdio -c uvx -a isaacsim-mcp-server
// mcp.json
{
  "mcpServers": {
    "whats2000-isaacsim-mcp-server": {
      "command": "uvx",
      "args": [
        "isaacsim-mcp-server"
      ]
    }
  }
}
Changelog

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.

  • 20 Sept 26 +16
    • Malware scan: unverified → pass security
  • 18 Sept 26 −14
    • Malware scan: pass → unverified security
  • 16 Sept 26 +16
    • Malware scan: unverified → pass security
  • 14 Sept 26 −14
    • Malware scan: pass → unverified security
  • 12 Sept 26 +1

    No change was recorded against any check on this day. Stability & Change Management went from 37 to 40. That category is still filling its 30-day observation window: 11 days of observed history at the previous scan, 12 at this one. The score rises as the window fills, whether or not the server changes.

  • 10 Sept 26 +1

    No change was recorded against any check on this day. Stability & Change Management went from 30 to 33. That category is still filling its 30-day observation window: 9 days of observed history at the previous scan, 10 at this one. The score rises as the window fills, whether or not the server changes.

  • 8 Sept 26 +1

    No change was recorded against any check on this day. Stability & Change Management went from 23 to 27. That category is still filling its 30-day observation window: 7 days of observed history at the previous scan, 8 at this one. The score rises as the window fills, whether or not the server changes.

  • 5 Sept 26 +1

    No change was recorded against any check on this day. Stability & Change Management went from 13 to 17. That category is still filling its 30-day observation window: 4 days of observed history at the previous scan, 5 at this one. The score rises as the window fills, whether or not the server changes.

Diagnostics

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 20 Sept 2026 · Analysed pypi/isaacsim-mcp-server@0.6.1

Provenance No attestation

The registry publishes no build provenance for this version, so there is nothing to verify.

Result No attestation
Ecosystem pypi

Background: How many MCP packages publish verified provenance →

Install scripts 1 script
Hook Tier Command
build_backend allowlisted hatchling.build

Background: Why install scripts are a supply-chain risk →

Dependencies 29 packages
Packages resolved 29
Tree resolution Complete

Background: SBOMs and build attestations, explained →

MCP tools · 42 exposed · ~5,940 tokens

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 →

Tool Tokens
apply_material ~62

Bind a material to an object. Args: material_path: Prim path of the material. target_prim_path: Prim path of the object to apply the material to.

NameTypeReqDescription
material_pathstringyes
target_prim_pathstringyes
NameTypeReqDescription
resultstringyes

No examples provided.

capture_image ~61

Capture an RGB image from a camera sensor. Args: prim_path: Prim path of the camera. output_path: File path to save the image. Returns metadata only if not set.

NameTypeReqDescription
output_path
prim_pathstring
NameTypeReqDescription
resultstringyes

No examples provided.

clear_scene ~136

Remove all prims from the scene. Also empties any environment loaded by load_environment, so a later create_physics_scene does not stack a second ground under the first — it always creates one. The stage's defaultLight is always kept — a stage with no light renders black, which looks like a broken camera. Args: keep_physics: If True, keep physics scene prims. keep_environment: If True, keep the loaded environment. Reloading one costs seconds, so pass this when clearing objects between attempts.

NameTypeReqDescription
keep_environmentboolean
keep_physicsboolean
NameTypeReqDescription
resultstringyes

No examples provided.

clone_object ~86

Duplicate an existing object to a new prim path. Args: source_path: Prim path of the object to clone. target_path: Prim path for the cloned object. position: [x, y, z] position for the clone. Keeps original position if not set.

NameTypeReqDescription
position
source_pathstringyes
target_pathstringyes
NameTypeReqDescription
resultstringyes

No examples provided.

create_action_graph ~540

Create and wire an OmniGraph Action Graph. Builds a complete Action Graph with nodes, connections and attribute values using og.Controller.edit(). This is the programmatic equivalent of creating an Action Graph in the visual editor. Args: graph_path: USD prim path for the graph (default "/World/ActionGraph"). nodes: List of node definitions. Each dict has: - "path": Node path relative to graph (e.g. "OnPlaybackTick") - "type": OmniGraph node type (e.g. "omni.graph.action.OnPlaybackTick") connections: List of [source_attr, target_attr] pairs for wiring nodes. Each attr is "NodePath.outputs:attrName" or "NodePath.inputs:attrName". values: List of attribute value overrides. Each dict has: - "attr": Full attribute path (e.g. "ScriptNode.inputs:script") - "value": The value to set evaluator: Graph evaluator type (default "execution", what Action Graphs use). "push" evaluates every application update regardless of the timeline, so an OnPlaybackTick-driven ScriptNode would keep running even while the simulation is stopped. script_file: Convenience shortcut — path to a local Python script file. When provided, automatically creates OnPlaybackTick → ScriptNode nodes, wires them, and attaches the script file (sets usePath + scriptPath). The nodes and connections parameters are ignored when script_file is set. RECOMMENDED for anything you will iterate on — edit the file and reload_script "just works", with the better reload story. inline_script: Convenience shortcut — inline Python (must define setup(db)/compute(db)). Auto-creates OnPlaybackTick → ScriptNode, wires them, and sets the script inline (usePath=False). For small, static graphs. For anything you will iterate on, prefer script_file — it has the better reload story (edit the file + reload_script "just works"; inline edits need edit_action_graph).…

NameTypeReqDescription
connections
evaluatorstring
graph_pathstring
inline_script
nodes
script_file
values
NameTypeReqDescription
resultstringyes

No examples provided.

create_camera ~213

Add a camera sensor to the scene. Prefer target= over rotation= for aiming: cameras look down their local -Z and carry a built-in orientation, so hand-computed euler angles are easy to get wrong and give you a picture of the sky. The response echoes the rotation that was applied under "rotation" and the point under "aimed_at". Args: prim_path: Prim path for the camera. position: [x, y, z] world position. rotation: [rx, ry, rz] rotation in degrees. Ignored if target is given. resolution: [width, height] image resolution. Default 1280x720. target: [x, y, z] world point to look at, using +Z as up. Needs a position — either passed here or already on the prim.

NameTypeReqDescription
position
prim_pathstring
resolution
rotation
target
NameTypeReqDescription
resultstringyes

No examples provided.

create_lidar ~96

Add a lidar sensor to the scene. Args: prim_path: Prim path for the lidar. position: [x, y, z] world position. rotation: [rx, ry, rz] rotation in degrees. config: Lidar configuration name (e.g. "Example_Rotary").

NameTypeReqDescription
config
position
prim_pathstring
rotation
NameTypeReqDescription
resultstringyes

No examples provided.

create_light ~145

Create a light in the scene. Args: light_type: Type of light — DistantLight, DomeLight, SphereLight, RectLight, DiskLight, or CylinderLight. position: [x, y, z] world position. intensity: Light intensity. color: [r, g, b] light color (0-1). rotation: [rx, ry, rz] rotation in degrees. prim_path: Custom prim path. Auto-generated if not provided.

NameTypeReqDescription
color
intensitynumber
light_typestring
position
prim_path
rotation
NameTypeReqDescription
resultstringyes

No examples provided.

create_material ~221

Create a PBR or physics material. Args: material_type: "pbr" for visual material or "physics" for physics material. prim_path: Prim path for the material. Auto-generated if not set. material_path: Alias for prim_path. apply_material names this argument material_path, and an unknown argument is dropped silently rather than rejected — so asking for material_path="/World/Looks/Red" used to succeed while creating the material somewhere else entirely, and the follow-up apply_material then failed on a path that was never used. color: [r, g, b] diffuse color (0-1). PBR only. roughness: Surface roughness (0-1). PBR only. metallic: Metallic value (0-1). PBR only.

NameTypeReqDescription
color
material_path
material_typestring
metallicnumber
prim_path
roughnessnumber
NameTypeReqDescription
resultstringyes

No examples provided.

create_object ~518

Create a primitive object (Cube, Sphere, Cylinder, Cone, Capsule, Plane). Prefer `size` for absolute sizing: `size` is the target in METERS (default 1.0), so `size=0.3` gives a 0.3 m object regardless of type. `scale` is a RAW MULTIPLIER of the primitive's NATIVE size, not meters. Native sizes: Cube/Sphere/Cylinder/Cone/Capsule = 2 m, Plane = 1 m. So `scale=0.5` on a Cube -> 1 m, and `scale=[0.4,0.4,0.3]` -> a 0.8 x 0.8 x 0.6 m box (0.4 * 2 m), which surprises callers who expect 0.4 m. Use `scale` only for deliberate non-uniform shaping; otherwise use `size`. If both are given, `scale` wins and `size` is ignored. For the geometric prims (Cube, Sphere, Cylinder, Cone, Capsule) this returns prim_path, actual_size [x, y, z] in meters, and bounding_box (min/max corners in world coordinates) so you can accurately place other objects relative to this one. A Plane has no such extent and returns prim_path only. Args: object_type: Type of primitive — Cube, Sphere, Cylinder, Cone, Capsule, or Plane (case-insensitive; "cube" is normalized to "Cube"). position: [x, y, z] world position. rotation: [rx, ry, rz] rotation in degrees. scale: [sx, sy, sz] RAW multiplier of the native size (2 m for most prims, 1 m for Plane). NOT meters. Overrides `size`. size: Target size in METERS (default 1.0). Absolute; independent of the primitive's native size. Ignored if `scale` is provided. color: [r, g, b] color values (0-1). physics_enabled: Enable physics on this object. prim_path: Custom prim path. Auto-generated if not provided.

NameTypeReqDescription
color
object_typestring
physics_enabledboolean
position
prim_path
rotation
scale
size
NameTypeReqDescription
resultstringyes

No examples provided.

create_physics_scene ~70

Create a physics scene with ground plane. Call get_scene_info first to verify connection. Args: gravity: Gravity vector [x, y, z]. Default is standard gravity. scene_name: Name for the physics scene prim.

NameTypeReqDescription
gravity
scene_namestring
NameTypeReqDescription
resultstringyes

No examples provided.

create_robot ~186

Create a robot in the scene from the Isaac Sim asset library. Supports fuzzy matching — e.g. "franka", "spot", "g1", "go1". Call list_available_robots first to see all available robots. Call create_physics_scene before creating robots. Returns prim_path, robot_key, joint_names, and num_dof so you can immediately use set_joint_positions without a follow-up get_robot_info call. Args: robot_type: Robot name or search term. Fuzzy matched against available robots. position: [x, y, z] world position. name: Custom name for the robot prim. prim_path: Exact USD prim path (e.g. "/World/Franka"). Overrides name-based path.

NameTypeReqDescription
name
position
prim_path
robot_typestring
NameTypeReqDescription
resultstringyes

No examples provided.

delete_object ~38

Delete an object from the scene. Args: prim_path: The prim path of the object to delete.

NameTypeReqDescription
prim_pathstringyes
NameTypeReqDescription
resultstringyes

No examples provided.

edit_action_graph ~261

Edit an existing OmniGraph Action Graph: set attribute values or add connections. Use this to update ScriptNode scripts (inline or file path), change attribute values, or add new connections on an already-created graph. For ScriptNode with a local file script, set both usePath and scriptPath: values=[ {"attr": "ScriptNode.inputs:usePath", "value": true}, {"attr": "ScriptNode.inputs:scriptPath", "value": "/path/to/script.py"} ] For ScriptNode with inline script: values=[ {"attr": "ScriptNode.inputs:usePath", "value": false}, {"attr": "ScriptNode.inputs:script", "value": "def compute(db): ..."} ] Args: graph_path: USD prim path of the existing graph (default "/World/ActionGraph"). values: List of attribute value overrides. Each dict has: - "attr": Attribute path relative to graph (e.g. "ScriptNode.inputs:script") - "value": The value to set connections: List of [source_attr, target_attr] pairs to add.

NameTypeReqDescription
connections
graph_pathstring
values
NameTypeReqDescription
resultstringyes

No examples provided.

execute_script ~252

Escape hatch: execute arbitrary Python code in Isaac Sim. PREFER named tools over this for: reading/setting joints (set_joint_positions, get_joint_positions), inspecting state (get_prim_info, get_physics_state, get_joint_config), stepping simulation (step_simulation), and checking logs (get_isaac_logs). USE this for: operations no named tool covers, such as creating Action Graphs, computing IK, setting up physics callbacks, or configuring advanced USD properties. CAUTION: touching an articulation controlled by a running ScriptNode / Action Graph can silently break its control path (no error is raised). While a graph is running, read-only diagnostics (get_prim_info, get_physics_state, get_joint_positions, get_isaac_logs) are safe, but stop_simulation before using execute_script or named write tools on the same articulation. For persistent controllers (>20 lines), write a .py file and load it with reload_script instead of pasting code here. Args: code: Python code to execute in the Isaac Sim context. cwd: Optional working directory to add to sys.path before execution.

NameTypeReqDescription
codestringyes
cwd
NameTypeReqDescription
resultstringyes

No examples provided.

generate_3d ~112

Generate a 3D model from text or image using Beaver3D, then load it into the scene. Args: text_prompt: Text description for 3D generation. image_url: URL of an image for 3D generation. position: [x, y, z] world position for the generated model. scale: [sx, sy, sz] scale factors.

NameTypeReqDescription
image_url
position
scale
text_prompt
NameTypeReqDescription
resultstringyes

No examples provided.

get_isaac_logs ~185

Diagnostic tool: recent WARN/ERROR logs plus captured print() output. Captures carb.log_*/omni.log WARN+ERROR and stdout from execute_script / reload_script (tagged [PRINT]). Plain print() outside those captured contexts may not appear. Defaults are agent-friendly: non-destructive (clear=False) and scoped to the current run (since_last_play=True) so you see logs from what you just did, not stale entries from previous runs. Args: clear: If True, empty the buffer after reading. Default False. count: Maximum number of log entries to return. since_last_play: If True (default), return only entries since the last timeline Play. Set False for the full buffer.

NameTypeReqDescription
clearboolean
countinteger
since_last_playboolean
NameTypeReqDescription
resultstringyes

No examples provided.

get_joint_config ~108

Diagnostic tool: get joint drive configuration for a robot articulation. Returns stiffness, damping, limits, target vs actual positions, and position error for each joint. Call this when: - Joint drives are not tracking targets (check position_error) - Joints are oscillating or unstable (check stiffness/damping ratio) - Joints hit limits unexpectedly (check lower_limit/upper_limit) Args: prim_path: USD path to the robot articulation root.

NameTypeReqDescription
prim_pathstringyes
NameTypeReqDescription
resultstringyes

No examples provided.

get_joint_positions ~79

Read current joint positions from a robot. Units: radians for revolute joints, meters for prismatic joints. Joint order matches the joint_names from get_robot_info. For a combined step-and-read, prefer step_simulation with observe_joints. Args: prim_path: The prim path of the robot.

NameTypeReqDescription
prim_pathstringyes
NameTypeReqDescription
resultstringyes

No examples provided.

get_lidar_point_cloud ~214

Get point cloud data from a lidar sensor. Requires the timeline to be playing — RTX lidar data is produced by Replicator while the sim runs, and a sweep only completes on some frames, so an empty read means "not this frame", not "saw nothing". By default returns a summary rather than the raw cloud: point_count, bounds, and the nearest hit. A full sweep is tens of thousands of points and megabytes of JSON, which is rarely what you want in a response. Args: prim_path: Prim path of the lidar sensor. max_points: Include this many points in the response, sampled at an even stride across the sweep. Omit for summary only. output_path: Write the complete cloud to this .npy file and return its path; numpy.load() reads it back as an (N, 3) array.

NameTypeReqDescription
max_points
output_path
prim_pathstring
NameTypeReqDescription
resultstringyes

No examples provided.

get_physics_state ~179

Diagnostic tool: get physics state for a prim. Returns rigid body status, velocities, kinematic flag, and collision info. `mass` is included only when the prim carries a UsdPhysics MassAPI — objects created by create_object do not, and take their mass from the collider's density. Velocity units: linear_velocity in m/s, angular_velocity in rad/s. Velocities are only non-zero once the simulation has advanced — step the simulation (or play) before reading them. Call this when: - Objects fall through the ground (check collision enabled) - Objects don't move when expected (check is_kinematic, mass) - Grasping fails (check collision on gripper fingers and target object) Args: prim_path: USD path to the prim to inspect.

NameTypeReqDescription
prim_pathstringyes
NameTypeReqDescription
resultstringyes

No examples provided.

get_prim_info ~112

Get detailed information about a specific prim. Returns type, children, and a transform block holding position, rotation [rx, ry, rz] in degrees (XYZ order, the same convention transform_object accepts), and scale. For geometric prims (Cube, Sphere, Cylinder, Cone, Capsule), also returns actual_size [x, y, z] in meters accounting for scale and default primitive dimensions. Args: prim_path: The USD prim path to inspect.

NameTypeReqDescription
prim_pathstringyes
NameTypeReqDescription
resultstringyes

No examples provided.

get_robot_info ~104

Get robot joint information including names, DOF count, joint types, and limits. Call this after create_robot to understand the robot's kinematic structure. Returns joint names ordered by DOF index, joint types (revolute/prismatic), and joint limits (radians for revolute, meters for prismatic — each entry carries its own `units`). Args: prim_path: The prim path of the robot.

NameTypeReqDescription
prim_pathstringyes
NameTypeReqDescription
resultstringyes

No examples provided.

get_scene_info ~30

Ping the Isaac Sim extension server and return scene information including stage path, assets root, and prim count.

Input schema present but exposes no named parameters.

NameTypeReqDescription
resultstringyes

No examples provided.

get_simulation_state ~50

Get the current simulation state: timeline status (playing/stopped/paused), simulation time, and physics dt. step_simulation does NOT require a running timeline — do not play just to step.

Input schema present but exposes no named parameters.

NameTypeReqDescription
resultstringyes

No examples provided.

import_urdf ~82

Import a robot from a URDF file into the scene. Args: urdf_path: Path to the URDF file. prim_path: Prim path for the imported robot. position: [x, y, z] world position.

NameTypeReqDescription
position
prim_pathstring
urdf_pathstringyes
NameTypeReqDescription
resultstringyes

No examples provided.

list_available_robots ~54

List all available robots discovered from the Isaac Sim asset server. Returns robot keys, descriptions, manufacturers, and asset paths. The list is auto-discovered at startup and reflects the actual assets available in your Isaac Sim version.

Input schema present but exposes no named parameters.

NameTypeReqDescription
resultstringyes

No examples provided.

list_environments ~32

List all available environments discovered from the Isaac Sim asset server. Includes warehouses, offices, outdoor scenes, and more.

Input schema present but exposes no named parameters.

NameTypeReqDescription
resultstringyes

No examples provided.

list_prims ~229

List the prims directly under root_path, optionally filtered by type. One level deep by default, so `list_prims("/")` names /World and /Environment rather than everything inside them — a robot alone is hundreds of prims. The response echoes `recursive` so a shallow answer is never mistaken for a complete one. Pass recursive=True to walk the whole subtree. That is the one you want when checking whether something was really deleted, or when hunting a prim nested under a robot: a Camera at /World/Arm/EyeCam does not appear in a shallow listing of /World. Args: root_path: Root path to start listing from. prim_type: Filter by prim type (e.g. "Mesh", "Xform"). With recursive=True, non-matching prims are still descended into, so a Camera under an Xform is found. recursive: Walk the entire subtree instead of one level.

NameTypeReqDescription
prim_type
recursiveboolean
root_pathstring
NameTypeReqDescription
resultstringyes

No examples provided.

load_environment ~196

Load a pre-built environment into the scene. Supports fuzzy matching. Call list_environments first to see available options. Many shipped environments are authored Y-up and/or in centimeters; those are rotated and rescaled to match the stage, and the response reports what was applied under "corrections". It also returns "bounds" with the environment's extent and floor_height, so objects can be placed on the ground without a second query. Read prim_path from the response rather than assuming it — it defaults to a named child of /Environment. Args: environment: Environment name or search term (e.g. "warehouse", "hospital", "office"). prim_path: Prim path for the loaded environment. Defaults to /Environment/<name>, which keeps it separate from the stage's default lighting and lets clear_scene remove it.

NameTypeReqDescription
environmentstringyes
prim_path
NameTypeReqDescription
resultstringyes

No examples provided.

load_usd ~101

Load a USD asset from a URL or file path into the scene. Args: usd_url: URL or local path to the USD file. prim_path: Prim path for the loaded asset. position: [x, y, z] world position. scale: [sx, sy, sz] scale factors.

NameTypeReqDescription
position
prim_pathstring
scale
usd_urlstringyes
NameTypeReqDescription
resultstringyes

No examples provided.

modify_light ~73

Modify properties of an existing light. Args: prim_path: The prim path of the light to modify. intensity: New intensity value. color: [r, g, b] new light color (0-1).

NameTypeReqDescription
color
intensity
prim_pathstringyes
NameTypeReqDescription
resultstringyes

No examples provided.

pause_simulation ~14

Pause the physics simulation.

Input schema present but exposes no named parameters.

NameTypeReqDescription
resultstringyes

No examples provided.

play_simulation ~14

Start the physics simulation.

Input schema present but exposes no named parameters.

NameTypeReqDescription
resultstringyes

No examples provided.

refresh_robot_library ~29

Force re-scan the asset server for available robots. Use this if new robot assets were added.

Input schema present but exposes no named parameters.

NameTypeReqDescription
resultstringyes

No examples provided.

reload_script ~299

Reload a Python controller from a file on disk. Two modes, chosen automatically: - If any Action-Graph ScriptNode references this file (inputs:scriptPath), those ScriptNodes are force-recompiled so your on-disk edits take effect on the running graph. This is how you iterate on a ScriptNode controller. - Otherwise the file is (re-)executed as a standalone controller, the way you would use execute_script for code longer than ~20 lines. Workflow: 1. Write the controller as a .py file (attach via create_action_graph script_file=... for ScriptNode use) 2. reload_script to load / recompile it 3. step_simulation to debug (frozen timeline) or play for a ScriptNode demo 4. Edit the file and reload_script again to iterate The file's directory is auto-added to sys.path. Args: file_path: Path to the Python file on disk. script_file: Alias for file_path. create_action_graph names this argument script_file, and an unknown argument is dropped silently rather than rejected, so both spellings are accepted here instead of one of them quietly doing nothing. module_name: Optional module name to reload (e.g. 'my_controller').

NameTypeReqDescription
file_path
module_name
script_file
NameTypeReqDescription
resultstringyes

No examples provided.

search_usd ~106

Search the NVIDIA USD asset library by text description, then load the best match. Args: text_prompt: Text description of the 3D asset to search for. target_path: Prim path for the loaded result. position: [x, y, z] world position. scale: [sx, sy, sz] scale factors.

NameTypeReqDescription
position
scale
target_pathstring
text_promptstringyes
NameTypeReqDescription
resultstringyes

No examples provided.

set_joint_positions ~147

Set target joint positions on a robot via ArticulationAction. Units: radians for revolute joints, meters for prismatic joints (e.g. gripper fingers). Use get_robot_info to discover joint names, types, and limits first. After calling this, use step_simulation to advance and observe the result — do not use play_simulation + sleep. Args: prim_path: The prim path of the robot. joint_positions: List of target joint position values. joint_indices: Optional list of joint indices to set. Sets all joints if not provided.

NameTypeReqDescription
joint_indices
joint_positionsarrayyes
prim_pathstringyes
NameTypeReqDescription
resultstringyes

No examples provided.

set_physics_params ~67

Configure physics engine parameters. Args: gravity: Gravity vector [x, y, z]. time_step: Physics time step in seconds. gpu_enabled: Enable GPU-accelerated physics.

NameTypeReqDescription
gpu_enabled
gravity
time_step
NameTypeReqDescription
resultstringyes

No examples provided.

step_simulation ~272

Advance the simulation by exactly N physics frames on a FROZEN timeline. step is self-contained: it initialises physics on first call and operates on a paused/stopped timeline, so N is always exact and observations correlate to a known frame count. Do NOT call play_simulation before or during the debug loop; step is for a frozen timeline. If the timeline is already playing, step returns an error (a free run cannot be counted frame-by-frame). Use play_simulation ONLY for a final continuous run / ScriptNode-driven demo, never for debugging. Typical debug loop (no play): 1. set_joint_positions to command the robot 2. step_simulation with observe_prims and observe_joints 3. get_joint_config if drives are not tracking correctly 4. get_physics_state if objects are not behaving as expected 5. Adjust and repeat Args: num_steps: Number of simulation frames to step. observe_prims: List of prim paths to observe (returns position + velocity). observe_joints: List of articulation prim paths to observe (returns joint positions).

NameTypeReqDescription
num_stepsinteger
observe_joints
observe_prims
NameTypeReqDescription
resultstringyes

No examples provided.

stop_simulation ~63

Stop the physics simulation and reset to spawn state. Resets articulations and rigid bodies to their spawn pose (the state captured at first Play), like the Isaac UI Stop button. Call this to return the scene to a clean starting point before another run.

Input schema present but exposes no named parameters.

NameTypeReqDescription
resultstringyes

No examples provided.

transform_object ~104

Set the transform (position, rotation, scale) of an existing object. Args: prim_path: The prim path of the object to transform. position: [x, y, z] new world position. rotation: [rx, ry, rz] new rotation in degrees. scale: [sx, sy, sz] new scale factors.

NameTypeReqDescription
position
prim_pathstringyes
rotation
scale
NameTypeReqDescription
resultstringyes

No examples provided.

Common questions

What is the io.github.whats2000/isaacsim-mcp-server server?

io.github.whats2000/isaacsim-mcp-server is listed in the public MCP registry as io.github.whats2000/isaacsim-mcp-server. Control NVIDIA Isaac Sim robotics simulator through MCP with 42 tools. This page covers its PyPI package (isaacsim-mcp-server).

Is the io.github.whats2000/isaacsim-mcp-server server safe to use?

io.github.whats2000/isaacsim-mcp-server scores 73 out of 100 on VerifyMCP. We found no known CVEs affecting it as of 20 September 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 io.github.whats2000/isaacsim-mcp-server server expose?

io.github.whats2000/isaacsim-mcp-server exposes 42 tools: get_scene_info, create_physics_scene, clear_scene, list_prims, get_prim_info, and 37 more. Their descriptions and schemas cost roughly 5,940 tokens of context every time the server is loaded.

Is the io.github.whats2000/isaacsim-mcp-server server still maintained?

io.github.whats2000/isaacsim-mcp-server is still listed as active in the MCP registry. We last reached this channel on 20 September 2026. Those dates come from our own scans of the registry and the channel itself, not from anything the publisher announced.