{
 "format": "openmhs.market/1",
 "project": "OpenMHS",
 "website": "https://mhs.openai4s.org",
 "repository": "https://github.com/PKU-YuanGroup/OpenMHS",
 "sdk_version": "0.9.0.dev0",
 "count": 746,
 "stats": {
  "track": {
   "labs": 276,
   "robots": 470
  },
  "mode": {
   "hardware": 299,
   "simulated": 447
  }
 },
 "note": "Every entry passed its gate on the fake backend (contract_checked). That is not a hardware qualification; hardware use is an explicit operator decision.",
 "packages": [
{"id":"labs/7jameslondon__magscope","name":"MagScope focus motor (magscope.PythonMicroscopeFocusMotor)","device_id":"mhs://localhost/magscope-focus","track":"labs","category":"Optics and microscopy","topic":null,"kind":"instrument.microscope","vendor":"7jameslondon","model":"python-microscope focus stage (MagScope adapter)","mode":"hardware","risk":"R1","family":"python-object","role":"device-driver","intro":"MagScope focus motor (magscope.PythonMicroscopeFocusMotor), adapted from 7jameslondon/magscope. It reads `current_z`, `is_moving`, `lower_limit` and `upper_limit`; sets `target_z`; runs `focus`. `focus`: move the focus axis to a target Z position or run an autofocus search over a declared range, returning the achieved Z position and focus score. A hardware driver: the market serves its fake backend, so no instrument is needed.","measures":["current_z","is_moving","lower_limit","upper_limit"],"adjusts":["target_z"],"actions":[{"name":"focus","description":"Move the focus axis to a target Z position or run an autofocus search over a declared range, returning the achieved Z position and focus score."}],"tags":["microscope","focus","z-stage","python-microscope","magscope"],"backends":["fake","hardware"],"served_backend":"fake","evidence":"contract_checked","upstream":{"repo_url":"https://github.com/7jameslondon/magscope","commit":"d8f5f6036eb418335dff18c642998a2a6cbd4e06","license":"GPL-3.0"},"stars":4,"install":{"openai4s":"openai4s lab add labs/7jameslondon__magscope","mhs":"mhs serve labs/7jameslondon__magscope --port 7400","mcp":"mhs serve labs/7jameslondon__magscope --mcp"}},
{"id":"labs/aakafosfor__hameg_hm1507","name":"HAMEG HM1507 oscilloscope (serial remote control)","device_id":"mhs://localhost/hameg-hm1507","track":"labs","category":"Electronics and measurement","topic":null,"kind":"instrument","vendor":"HAMEG","model":"HM1507","mode":"hardware","risk":"R1","family":"serial","role":"device-driver","intro":"HAMEG HM1507 oscilloscope (serial remote control), adapted from aakafosfor/hameg_hm1507. It sets `timebase` and `channel`; runs `autoset`. `autoset`: run the scope's automatic setup (the upstream AUTOSET command). A hardware driver: the market serves its fake backend, so no instrument is needed.","measures":[],"adjusts":["timebase","channel"],"actions":[{"name":"autoset","description":"Run the scope's automatic setup (the upstream AUTOSET command)"}],"tags":["oscilloscope","hameg","hm1507","serial","instrument"],"backends":["fake","hardware"],"served_backend":"fake","evidence":"contract_checked","upstream":{"repo_url":"https://github.com/aakafosfor/hameg_hm1507","commit":"0a03fdc25414d400331769c9e125dd80e0cf5964","license":"NOASSERTION"},"stars":2,"install":{"openai4s":"openai4s lab add labs/aakafosfor__hameg_hm1507","mhs":"mhs serve labs/aakafosfor__hameg_hm1507 --port 7400","mcp":"mhs serve labs/aakafosfor__hameg_hm1507 --mcp"}},
{"id":"labs/aaron-mott__keithley-2200","name":"Keithley 2200 series programmable DC power supply (KEI2220S)","device_id":"mhs://localhost/keithley-2200","track":"labs","category":"Electronics and measurement","topic":null,"kind":"instrument.smu","vendor":"Keithley Instruments","model":"Keithley 2200 series programmable DC power supply","mode":"hardware","risk":"R3","family":"scpi","role":"device-driver","intro":"Keithley 2200 series programmable DC power supply (KEI2220S), adapted from aaron-mott/keithley-2200. It reads `measured_voltage`, `measured_current` and `measured_power`; sets `voltage`, `current`, `output`, `overvoltage_protection` and 1 more; runs `output_off`. `output_off`: disable the output with OUTP OFF (the declared safe state); no input, no output. A hardware driver: the market serves its fake backend, so no instrument is needed.","measures":["measured_voltage","measured_current","measured_power"],"adjusts":["voltage","current","output","overvoltage_protection","overvoltage_protection_enabled"],"actions":[{"name":"output_off","description":"Disable the output with OUTP OFF (the declared safe state); no input, no output"}],"tags":["keithley","2200","power supply","dc power supply","scpi","visa"],"backends":["fake"],"served_backend":"fake","evidence":"contract_checked","upstream":{"repo_url":"https://github.com/aaron-mott/keithley-2200","commit":"348fb5df70d92bd96593452e188c90f0ae3d71c4","license":"NOASSERTION"},"stars":0,"install":{"openai4s":"openai4s lab add labs/aaron-mott__keithley-2200","mhs":"mhs serve labs/aaron-mott__keithley-2200 --port 7400","mcp":"mhs serve labs/aaron-mott__keithley-2200 --mcp"}},
{"id":"labs/aaron-mott__keithley-2230g","name":"Keithley 2230G multi-channel power supply","device_id":"mhs://localhost/keithley-2230g","track":"labs","category":"Electronics and measurement","topic":null,"kind":"instrument","vendor":"Keithley Instruments","model":"2230G series multi-channel programmable DC power supply","mode":"hardware","risk":"R3","family":"scpi","role":"device-driver","intro":"Keithley 2230G multi-channel power supply, adapted from aaron-mott/keithley-2230g. It reads `measured_voltage_ch1`, `measured_voltage_ch2`, `measured_voltage_ch3`, `measured_current_ch1` and 2 more; sets `voltage_setpoint_ch1`, `voltage_setpoint_ch2`, `voltage_setpoint_ch3`, `current_limit_ch1` and 5 more; runs `output_off`. `output_off`: disable all three channel outputs (safe state). A hardware driver: the market serves its fake backend, so no instrument is needed.","measures":["measured_voltage_ch1","measured_voltage_ch2","measured_voltage_ch3","measured_current_ch1","measured_current_ch2","measured_current_ch3"],"adjusts":["voltage_setpoint_ch1","voltage_setpoint_ch2","voltage_setpoint_ch3","current_limit_ch1","current_limit_ch2","current_limit_ch3","output_ch1","output_ch2","output_ch3"],"actions":[{"name":"output_off","description":"Disable all three channel outputs (safe state)"}],"tags":["power supply","keithley","2230g","scpi","instrument"],"backends":["fake"],"served_backend":"fake","evidence":"contract_checked","upstream":{"repo_url":"https://github.com/aaron-mott/keithley-2230g","commit":"4c4d9024808f33b20d9148183b006225cced7936","license":"NOASSERTION"},"stars":3,"install":{"openai4s":"openai4s lab add labs/aaron-mott__keithley-2230g","mhs":"mhs serve labs/aaron-mott__keithley-2230g --port 7400","mcp":"mhs serve labs/aaron-mott__keithley-2230g --mcp"}},
{"id":"labs/aaronslaff__tecan_fluentcontrol","name":"Tecan FluentControl liquid handler (fluent_control_automation.FluentControlClient)","device_id":"mhs://localhost/fluentcontrol","track":"labs","category":"Liquid handling and fluidics","topic":null,"kind":"lab.liquid_handler","vendor":"Tecan","model":"FluentControl","mode":"hardware","risk":"R2","family":"python-object","role":"device-driver","intro":"Tecan FluentControl liquid handler (fluent_control_automation.FluentControlClient), adapted from aaronslaff/tecan_fluentcontrol. It reads `instrument_status`, `deck_layout` and `transfer_status`; runs `post_transfer_session`, `start_transfer_session`, `get_transfer_status`, `cancel_transfer_session` and 1 more. `post_transfer_session`: post one source-to-destination transfer and create a transfer session. A hardware driver: the market serves its fake backend, so no instrument is needed.","measures":["instrument_status","deck_layout","transfer_status"],"adjusts":[],"actions":[{"name":"post_transfer_session","description":"Post one source-to-destination transfer and create a transfer session"},{"name":"start_transfer_session","description":"Start the transfer session with the given id"},{"name":"get_transfer_status","description":"Read the status of the transfer session with the given id"},{"name":"cancel_transfer_session","description":"Cancel the transfer session with the given id"},{"name":"cancel_active_transfer","description":"Cancel the active transfer session (the safe state); it takes no input"}],"tags":["liquid-handler","pipetting","tecan","http"],"backends":["fake","hardware"],"served_backend":"fake","evidence":"contract_checked","upstream":{"repo_url":"https://github.com/aaronslaff/tecan_fluentcontrol","commit":"5bbff1713f97e75eab6f8b204f293b79a4104a33","license":"MIT"},"stars":0,"install":{"openai4s":"openai4s lab add labs/aaronslaff__tecan_fluentcontrol","mhs":"mhs serve labs/aaronslaff__tecan_fluentcontrol --port 7400","mcp":"mhs serve labs/aaronslaff__tecan_fluentcontrol --mcp"}},
{"id":"labs/aaronslaff__tecan_sparkcontrol","name":"Tecan SparkControl microplate reader (spark_control_automation.SparkControlClient)","device_id":"mhs://localhost/tecan-sparkcontrol","track":"labs","category":"Electronics and measurement","topic":null,"kind":"instrument","vendor":"Tecan","model":"SparkControl V2.4","mode":"hardware","risk":"R2","family":"python-object","role":"device-driver","intro":"Tecan SparkControl microplate reader (spark_control_automation.SparkControlClient), adapted from aaronslaff/tecan_sparkcontrol. It reads `instrument_status`, `available_apps`, `instrument_settings`, `plate_geometry` and 2 more; runs `calibrate`, `start_method`, `stop_method` and `stop_active_method`. `calibrate`: run the native calibration procedure for a calibration type. A hardware driver: the market serves its fake backend, so no instrument is needed.","measures":["instrument_status","available_apps","instrument_settings","plate_geometry","method_status","measurement_results"],"adjusts":[],"actions":[{"name":"calibrate","description":"Run the native calibration procedure for a calibration type"},{"name":"start_method","description":"Start a method and remember its id for the stop path"},{"name":"stop_method","description":"Stop the method with the given id and remember it for the safe-state action"},{"name":"stop_active_method","description":"Stop the tracked method (the safe state); it takes no input"}],"tags":["microplate-reader","plate-reader","luminescence","absorbance","fluorescence","tecan","http"],"backends":["fake","hardware"],"served_backend":"fake","evidence":"contract_checked","upstream":{"repo_url":"https://github.com/aaronslaff/tecan_sparkcontrol","commit":"d2272c6d0e0d4ded08a3af457ed19918a1e66446","license":"NOASSERTION"},"stars":0,"install":{"openai4s":"openai4s lab add labs/aaronslaff__tecan_sparkcontrol","mhs":"mhs serve labs/aaronslaff__tecan_sparkcontrol --port 7400","mcp":"mhs serve labs/aaronslaff__tecan_sparkcontrol --mcp"}},
{"id":"labs/abduznik__instrumation","name":"RIGOL DS1054Z oscilloscope","device_id":"mhs://localhost/rigol-ds1054z","track":"labs","category":"Electronics and measurement","topic":null,"kind":"instrument","vendor":"RIGOL Technologies","model":"DS1054Z","mode":"hardware","risk":"R1","family":"scpi","role":"device-driver","intro":"RIGOL DS1054Z oscilloscope, adapted from abduznik/instrumation. It reads `identity`, `sample_rate`, `timebase_mode`, `timebase_offset` and 5 more; sets `acquire_type`, `timebase_scale`, `trigger_sweep`, `edge_trigger_source` and 6 more; runs `run`, `force_trigger` and `stop_acquisition`. `run`: start the acquisition (:RUN) and report the trigger status. A hardware driver: the market serves its fake backend, so no instrument is needed.","measures":["identity","sample_rate","timebase_mode","timebase_offset","trigger_mode","trigger_status","ch1_offset","ch1_probe","ch1_invert"],"adjusts":["acquire_type","timebase_scale","trigger_sweep","edge_trigger_source","edge_trigger_slope","edge_trigger_level","ch1_display","ch1_coupling","ch1_scale","ch1_bw_limit"],"actions":[{"name":"run","description":"Start the acquisition (:RUN) and report the trigger status"},{"name":"force_trigger","description":"Force a trigger event (:TFORce) and report the trigger status"},{"name":"stop_acquisition","description":"Stop the acquisition (:STOP), the safe state, and report the trigger status"}],"tags":["oscilloscope","rigol","ds1054z","ds1000z","scpi","instrument"],"backends":["fake","hardware"],"served_backend":"fake","evidence":"contract_checked","upstream":{"repo_url":"https://github.com/abduznik/instrumation","commit":"483d6d5d0b6984f0e261e340363f784f6e2dd2f8","license":"AGPL-3.0"},"stars":97,"install":{"openai4s":"openai4s lab add labs/abduznik__instrumation","mhs":"mhs serve labs/abduznik__instrumation --port 7400","mcp":"mhs serve labs/abduznik__instrumation --mcp"}},
{"id":"labs/accelerationconsortium__matterix","name":"Matterix Test Beakers Franka (Isaac Lab simulation)","device_id":"mhs://localhost/matterix-beakers","track":"labs","category":"Simulation","topic":"wet-lab automation and chemistry","kind":"world.sim","vendor":"The Matterix Project Developers","model":"Matterix-Test-Beakers-Franka-v1","mode":"simulated","risk":"R0","family":"gymnasium","role":"sim-env","intro":"Matterix Test Beakers Franka (Isaac Lab simulation), adapted from accelerationconsortium/matterix. It reads `observation`, `reward`, `terminated`, `truncated` and 4 more; runs `step`, `reset` and `seed`. `step`: advance the simulated world by a bounded number of fixed timesteps, optionally applying an action for each step, and return the resulting observation and terminal flags. A simulator: the market serves it with a stand-in that needs no simulator install.","measures":["observation","reward","terminated","truncated","tick","episode","seed","info"],"adjusts":[],"actions":[{"name":"step","description":"Advance the simulated world by a bounded number of fixed timesteps, optionally applying an action for each step, and return the resulting observation and terminal flags."},{"name":"reset","description":"Reset the simulated world to a scenario start state and return the initial observation. When a seed is supplied the endpoint records it in the receipt; otherwise the endpoint's declared default seed applies."},{"name":"seed","description":"Set the seed used by the simulated world's random number generators for subsequent steps, without resetting the world. The accepted seed is echoed in the receipt."}],"tags":["matterix","isaac-lab","isaac-sim","robotics","chemistry","simulation","gymnasium"],"backends":["fake"],"served_backend":"fake","evidence":"contract_checked","upstream":{"repo_url":"https://github.com/accelerationconsortium/matterix","commit":"687e2cef294f00e86dbb32173fefd93b50e5107f","license":"BSD-3-Clause"},"stars":62,"install":{"openai4s":"openai4s lab add labs/accelerationconsortium__matterix","mhs":"mhs serve labs/accelerationconsortium__matterix --port 7400","mcp":"mhs serve labs/accelerationconsortium__matterix --mcp"}},
{"id":"labs/accelerationconsortium__opentrons-flex","name":"Opentrons Flex motion controller (FlexMotionController)","device_id":"mhs://localhost/flex","track":"labs","category":"Robot arms and grippers","topic":null,"kind":"robot.arm","vendor":"Opentrons","model":"Flex (OT-3)","mode":"hardware","risk":"R2","family":"python-object","role":"device-driver","intro":"Opentrons Flex motion controller (FlexMotionController), adapted from accelerationconsortium/opentrons-flex. It reads `simulating` and `machine_status`; sets `lights_button` and `lights_rails`; runs `home`, `cartesian_pose` and `stop`. `home`: home every Flex axis with FlexMotionController.home(); the declared re-enable: after a halt or an e-stop the connector refuses every other actuation until this full home completes. The latch refuses it and a safety reset never runs it. A hardware driver: the market serves its fake backend, so no instrument is needed.","measures":["simulating","machine_status"],"adjusts":["lights_button","lights_rails"],"actions":[{"name":"home","description":"Home every Flex axis with FlexMotionController.home(); the declared re-enable: after a halt or an e-stop the connector refuses every other actuation until this full home completes. The latch refuses it and a safety reset never runs it."},{"name":"cartesian_pose","description":"Move the tool centre point to a Cartesian position and orientation in a named frame. The endpoint solves inverse kinematics; an unreachable target is rejected before motion."},{"name":"stop","description":"Halt all motion with FlexMotionController.stop() (the OT3API halt path); it takes no input, is the declared safe state, and leaves the robot needing a full home"}],"tags":["opentrons","flex","ot-3","gantry","robot-arm","motion","asyncio"],"backends":["fake","hardware"],"served_backend":"fake","evidence":"contract_checked","upstream":{"repo_url":"https://github.com/accelerationconsortium/opentrons-flex","commit":"2639016ee9f234949aaf596c2ab2b93694eb0e0b","license":"NOASSERTION"},"stars":3,"install":{"openai4s":"openai4s lab add labs/accelerationconsortium__opentrons-flex","mhs":"mhs serve labs/accelerationconsortium__opentrons-flex --port 7400","mcp":"mhs serve labs/accelerationconsortium__opentrons-flex --mcp"}},
{"id":"labs/accelerationconsortium__opentrons-ot2","name":"Opentrons OT-2 motion controller (OT2MotionController)","device_id":"mhs://localhost/ot2","track":"labs","category":"Robot arms and grippers","topic":null,"kind":"robot.arm","vendor":"Opentrons","model":"OT-2","mode":"hardware","risk":"R2","family":"python-object","role":"device-driver","intro":"Opentrons OT-2 motion controller (OT2MotionController), adapted from accelerationconsortium/opentrons-ot2. It reads `simulating`, `position`, `firmware_version`, `serial_number` and 6 more; sets `button_light` and `rail_lights`; runs `cartesian_pose`, `move_axes`, `home_all`, `aspirate` and 3 more. `cartesian_pose`: move the tool centre point to a Cartesian position and orientation in a named frame. The endpoint solves inverse kinematics; an unreachable target is rejected before motion. A hardware driver: the market serves its fake backend, so no instrument is needed.","measures":["simulating","position","firmware_version","serial_number","pipette_left_model","pipette_left_id","pipette_right_model","pipette_right_id","button_pressed","door_closed"],"adjusts":["button_light","rail_lights"],"actions":[{"name":"cartesian_pose","description":"Move the tool centre point to a Cartesian position and orientation in a named frame. The endpoint solves inverse kinematics; an unreachable target is rejected before motion."},{"name":"move_axes","description":"Move all six OT-2 axes to absolute machine positions in millimetres with the native move(); refused PRECONDITION_UNMET after a halt until the re-enable"},{"name":"home_all","description":"Home all six OT-2 axes with the native home(); refused PRECONDITION_UNMET after a halt, when the re-enable (which clears the alarm lock and then homes) is the way back"},{"name":"aspirate","description":"Draw liquid with the native aspirate(axis, volume_ul, ul_per_mm, flow_rate_ul_s); the caller supplies the pipette conversion and the plunger must already be at its bottom; refused PRECONDITION_UNMET after a halt until the re-enable"},{"name":"dispense","description":"Expel liquid with the native dispense(axis, volume_ul, ul_per_mm, flow_rate_ul_s); the caller supplies the pipette conversion; refused PRECONDITION_UNMET after a halt until the re-enable"},{"name":"halt_motion","description":"Halt all motion with the native stop() (SmoothieDriver.hard_halt, after the controller lock is free); it takes no input, is the declared safe state, and leaves the driver refusing motion until the re-enable"},{"name":"reenable","description":"Recovery after a halt (an e-stop, the halt action or a cancelled action): clear the Smoothie alarm lock with reset_from_error() (M999) and re-home all six axes; it takes no input, is refused while latched, and is the only Smoothie command the driver sends after a halt"}],"tags":["opentrons","ot-2","liquid-handler","gantry","pipette","motion","asyncio"],"backends":["fake","hardware"],"served_backend":"fake","evidence":"contract_checked","upstream":{"repo_url":"https://github.com/accelerationconsortium/opentrons-ot2","commit":"9ba663504dcf8b27eb1b9e777a84c01667202893","license":"NOASSERTION"},"stars":6,"install":{"openai4s":"openai4s lab add labs/accelerationconsortium__opentrons-ot2","mhs":"mhs serve labs/accelerationconsortium__opentrons-ot2 --port 7400","mcp":"mhs serve labs/accelerationconsortium__opentrons-ot2 --mcp"}},
{"id":"labs/ad-sdl__bmg_module","name":"BMG microplate reader incubator and status (sidecar.bmg_interface.BmgCom)","device_id":"mhs://localhost/bmg-reader","track":"labs","category":"Electronics and measurement","topic":null,"kind":"instrument","vendor":"BMG LABTECH","model":"VANTAstar / CLARIOstar microplate reader","mode":"hardware","risk":"R2","family":"python-object","role":"device-driver","intro":"BMG microplate reader incubator and status (sidecar.bmg_interface.BmgCom), adapted from ad-sdl/bmg_module. It reads `version`, `status`, `error`, `temperature_1` and 2 more; sets `setpoint`; runs `heater_off`. `heater_off`: switch the incubator off (native set_temp(0.0), Temp 0.0); takes no input and runs during an e-stop. A hardware driver: the market serves its fake backend, so no instrument is needed.","measures":["version","status","error","temperature_1","temperature_2","temperature_3"],"adjusts":["setpoint"],"actions":[{"name":"heater_off","description":"Switch the incubator off (native set_temp(0.0), Temp 0.0); takes no input and runs during an e-stop"}],"tags":["microplate-reader","plate-reader","incubator","activex","windows"],"backends":["fake","hardware"],"served_backend":"fake","evidence":"contract_checked","upstream":{"repo_url":"https://github.com/ad-sdl/bmg_module","commit":"22d55c6036e91f0af8d0c398727aef226208896d","license":"MIT"},"stars":1,"install":{"openai4s":"openai4s lab add labs/ad-sdl__bmg_module","mhs":"mhs serve labs/ad-sdl__bmg_module --port 7400","mcp":"mhs serve labs/ad-sdl__bmg_module --mcp"}},
{"id":"labs/ad-sdl__ot2_module","name":"Opentrons OT-2 liquid handler (ot2_interface.OT2_Driver)","device_id":"mhs://localhost/ot2","track":"labs","category":"Liquid handling and fluidics","topic":null,"kind":"lab.liquid_handler","vendor":"Opentrons","model":"OT-2","mode":"hardware","risk":"R2","family":"python-object","role":"device-driver","intro":"Opentrons OT-2 liquid handler (ot2_interface.OT2_Driver), adapted from ad-sdl/ot2_module. It reads `robot_status`, `runs`, `active_run_id` and `active_run_status`; runs `start_protocol` and `stop_active_run`. `start_protocol`: upload an Opentrons protocol file that the operator overlay allows, create a run and send the robot's play action; the run continues on the robot after this action returns, until it ends or is stopped, and the protocol alone decides what the robot does in it. A hardware driver: the market serves its fake backend, so no instrument is needed.","measures":["robot_status","runs","active_run_id","active_run_status"],"adjusts":[],"actions":[{"name":"start_protocol","description":"Upload an Opentrons protocol file that the operator overlay allows, create a run and send the robot's play action; the run continues on the robot after this action returns, until it ends or is stopped, and the protocol alone decides what the robot does in it"},{"name":"stop_active_run","description":"Send the robot's run stop action to every run it lists as running, paused, finishing or in a status the clone does not name, and to a run of this driver whose play may be in flight, and confirm each by a fresh read; it takes no input"}],"tags":["liquid-handler","pipette","protocol-runner","http"],"backends":["fake","hardware"],"served_backend":"fake","evidence":"contract_checked","upstream":{"repo_url":"https://github.com/ad-sdl/ot2_module","commit":"39ffdfdb73c3bc08bb988c5140cfc1af3cecbd0c","license":"MIT"},"stars":1,"install":{"openai4s":"openai4s lab add labs/ad-sdl__ot2_module","mhs":"mhs serve labs/ad-sdl__ot2_module --port 7400","mcp":"mhs serve labs/ad-sdl__ot2_module --mcp"}},
{"id":"labs/ad-sdl__pf400_module_ros","name":"PF400 arm through ad-sdl pf400_module_ros","device_id":"mhs://localhost/pf400","track":"labs","category":"Robot arms and grippers","topic":null,"kind":"robot.arm","vendor":"PF400","model":"collaborative robot arm","mode":"hardware","risk":"R2","family":"python-object","role":"device-driver","intro":"PF400 arm through ad-sdl pf400_module_ros, adapted from ad-sdl/pf400_module_ros. It reads `traj_state`; runs `move_joints` and `halt`. `move_joints`: send mspeed and MoveJ for robot 1. A leading 0 is the client's success code (tcp_driver.py:23), not proof the target was reached. A hardware driver: the market serves its fake backend, so no instrument is needed.","measures":["traj_state"],"adjusts":[],"actions":[{"name":"move_joints","description":"Send mspeed and MoveJ for robot 1. A leading 0 is the client's success code (tcp_driver.py:23), not proof the target was reached"},{"name":"halt","description":"On the status port, select robot 1 and halt. Confirms TrajState 0 or 1 only when every MoveJ this endpoint wrote has been answered, and this halt has read state after that. The reply follows the mailbox wait (Main.gpl:225). RapidDecel does not retire an unanswered command"}],"tags":["pf400","arm","tcp","tcs","cobot"],"backends":["fake","hardware"],"served_backend":"fake","evidence":"contract_checked","upstream":{"repo_url":"https://github.com/ad-sdl/pf400_module_ros","commit":"dad325c4bf86efda3b81f98d33837ec5ce21fc0c","license":"MIT"},"stars":4,"install":{"openai4s":"openai4s lab add labs/ad-sdl__pf400_module_ros","mhs":"mhs serve labs/ad-sdl__pf400_module_ros --port 7400","mcp":"mhs serve labs/ad-sdl__pf400_module_ros --mcp"}},
{"id":"labs/ad-sdl__sdl-simulation","name":"SDL Gazebo mobile manipulator (UR5e arm)","device_id":"mhs://localhost/sdl-simulation","track":"labs","category":"Robot arms and grippers","topic":null,"kind":"robot.arm","vendor":"AD-SDL (Argonne National Laboratory / University of Chicago)","model":"UR5e arm, Robotiq 2F140 gripper and MiR base in Gazebo","mode":"simulated","risk":"R2","family":"ros","role":"sim-env","intro":"SDL Gazebo mobile manipulator (UR5e arm), adapted from ad-sdl/sdl-simulation. It reads `read_arm_status` and `read_nav_status`; runs `arm_pose_goal`, `base_pose_goal`, `left_gripper_position` and `right_gripper_position`. `arm_pose_goal`: publish one geometry_msgs/Pose arm target; the receipt reports the values sent and no execution acknowledgement is available. A simulator: the market serves it with a stand-in that needs no simulator install.","measures":["read_arm_status","read_nav_status"],"adjusts":[],"actions":[{"name":"arm_pose_goal","description":"Publish one geometry_msgs/Pose arm target; the receipt reports the values sent and no execution acknowledgement is available"},{"name":"base_pose_goal","description":"Publish one PoseStamped navigation goal; the receipt reports the values sent and no execution acknowledgement is available"},{"name":"left_gripper_position","description":"Publish one Float64 position to the left gripper controller; the receipt reports the value sent"},{"name":"right_gripper_position","description":"Publish one Float64 position to the right gripper controller; the receipt reports the value sent"}],"tags":["ros","ros1","gazebo","moveit","simulation","ur5e","mobile-manipulator","arm","gripper"],"backends":["fake"],"served_backend":"fake","evidence":"contract_checked","upstream":{"repo_url":"https://github.com/ad-sdl/sdl-simulation","commit":"7ae7b7ac5581a891451e0007c0cd8de885773082","license":"NOASSERTION"},"stars":0,"install":{"openai4s":"openai4s lab add labs/ad-sdl__sdl-simulation","mhs":"mhs serve labs/ad-sdl__sdl-simulation --port 7400","mcp":"mhs serve labs/ad-sdl__sdl-simulation --mcp"}},
{"id":"labs/ad-sdl__ur_module","name":"Universal Robots arm (ur_interface.ur:UR)","device_id":"mhs://localhost/ur","track":"labs","category":"Robot arms and grippers","topic":null,"kind":"robot.arm","vendor":"Universal Robots","model":null,"mode":"hardware","risk":"R2","family":"python-object","role":"device-driver","intro":"Universal Robots arm (ur_interface.ur:UR), adapted from ad-sdl/ur_module. It reads `movement_state`, `joint_positions`, `robot_mode`, `safety_status` and 5 more; runs `home`, `pause_program`, `stop_program`, `power_off_arm` and 1 more. `home`: command one or more actuated joints to target positions in joint space, optionally over a declared duration, and report whether the target was reached within tolerance. A hardware driver: the market serves its fake backend, so no instrument is needed.","measures":["movement_state","joint_positions","robot_mode","safety_status","operational_mode","program_state","loaded_program","program_run_status","remote_control"],"adjusts":[],"actions":[{"name":"home","description":"Command one or more actuated joints to target positions in joint space, optionally over a declared duration, and report whether the target was reached within tolerance."},{"name":"pause_program","description":"Pause the loaded URP program with the dashboard 'pause'; completed only when the dashboard answers 'Pausing program'"},{"name":"stop_program","description":"Stop the loaded URP program with the dashboard 'stop' (the upstream node's safety_stop); completed only when the dashboard answers 'Stopped'; not the e-stop"},{"name":"power_off_arm","description":"Power the arm off with the dashboard 'power off' (the upstream node's e_stop) and confirm POWER_OFF by fresh 'robotmode' reads; it takes no input"},{"name":"power_on","description":"Re-enable after a reset (refused while latched, never run by the reset, a permit for each call): with safety status NORMAL, send the dashboard 'brake release' to an arm in POWER_OFF, BOOTING, POWER_ON or IDLE and confirm RUNNING; it never unlocks a protective stop, restarts safety or changes the operational mode"}],"tags":["universal-robots","ur","robot-arm","urx","dashboard"],"backends":["fake","hardware"],"served_backend":"fake","evidence":"contract_checked","upstream":{"repo_url":"https://github.com/ad-sdl/ur_module","commit":"75f1c5fe53c70bccbe1f37eeeb55a382133e623e","license":"MIT"},"stars":4,"install":{"openai4s":"openai4s lab add labs/ad-sdl__ur_module","mhs":"mhs serve labs/ad-sdl__ur_module --port 7400","mcp":"mhs serve labs/ad-sdl__ur_module --mcp"}},
{"id":"labs/aics-int__microscope_automation","name":"Zeiss ZEN blue microscope (microscope_automation ConnectMicroscope)","device_id":"mhs://localhost/zen-microscope","track":"labs","category":"Optics and microscopy","topic":null,"kind":"instrument.microscope","vendor":"Carl Zeiss","model":"ZEN blue microscope connection","mode":"hardware","risk":"R1","family":"python-object","role":"device-driver","intro":"Zeiss ZEN blue microscope (microscope_automation ConnectMicroscope), adapted from aics-int/microscope_automation. It reads `stage_x`, `stage_y`, `objective_name`, `objective_position` and 2 more; runs `live_mode_start`, `live_mode_stop` and `snap_image`. `live_mode_start`: start ZEN live mode for an experiment (the active experiment when none is named). A hardware driver: the market serves its fake backend, so no instrument is needed.","measures":["stage_x","stage_y","objective_name","objective_position","microscope_name","live"],"adjusts":[],"actions":[{"name":"live_mode_start","description":"Start ZEN live mode for an experiment (the active experiment when none is named)"},{"name":"live_mode_stop","description":"Stop ZEN live mode (the native stop; the safe-state action); it takes no input"},{"name":"snap_image","description":"Acquire one image from an experiment (the active experiment when none is named)"}],"tags":["microscope","zeiss","zen","imaging","live-mode","windows"],"backends":["fake","hardware"],"served_backend":"fake","evidence":"contract_checked","upstream":{"repo_url":"https://github.com/aics-int/microscope_automation","commit":"cdac7bdb191ea2d85965574b32ec65e3c2a7e22d","license":"BSD-2-Clause"},"stars":4,"install":{"openai4s":"openai4s lab add labs/aics-int__microscope_automation","mhs":"mhs serve labs/aics-int__microscope_automation --port 7400","mcp":"mhs serve labs/aics-int__microscope_automation --mcp"}},
{"id":"labs/akperuht__pydaq","name":"Digimess PN300 power supply","device_id":"mhs://localhost/pn300","track":"labs","category":"Electronics and measurement","topic":null,"kind":"instrument","vendor":"Digimess","model":"PN300 programmable power supply","mode":"hardware","risk":"R2","family":"scpi","role":"device-driver","intro":"Digimess PN300 power supply, adapted from akperuht/pydaq. It reads `protection`, `measured_voltage` and `measured_current`; sets `output`, `source`, `operating_mode`, `source_type` and 2 more; runs `output_off`. `output_off`: disable the power supply output (the declared safe state). A hardware driver: the market serves its fake backend, so no instrument is needed.","measures":["protection","measured_voltage","measured_current"],"adjusts":["output","source","operating_mode","source_type","voltage","current"],"actions":[{"name":"output_off","description":"Disable the power supply output (the declared safe state)"}],"tags":["power supply","dc source","pn300","scpi","gpib"],"backends":["fake"],"served_backend":"fake","evidence":"contract_checked","upstream":{"repo_url":"https://github.com/akperuht/pydaq","commit":"edb7584d00891aa0f1a0ef483d12d1d59ab4f794","license":"MIT"},"stars":0,"install":{"openai4s":"openai4s lab add labs/akperuht__pydaq","mhs":"mhs serve labs/akperuht__pydaq --port 7400","mcp":"mhs serve labs/akperuht__pydaq --mcp"}},
{"id":"labs/alba-synchrotron__sls-detector","name":"SLS Mythen II detector (sls.client.Detector)","device_id":"mhs://localhost/mythen","track":"labs","category":"Sensors and cameras","topic":null,"kind":"sensor","vendor":"ALBA Synchrotron / SLS","model":"Mythen II","mode":"hardware","risk":"R1","family":"python-object","role":"device-driver","intro":"SLS Mythen II detector (sls.client.Detector), adapted from alba-synchrotron/sls-detector. It reads `detector_type`, `run_status`, `settings`, `nb_modules` and 2 more; sets `energy_threshold`, `exposure_time`, `nb_frames`, `nb_cycles` and 2 more; runs `acquire`, `start_acquisition` and `stop_acquisition`. `acquire`: run one configured acquisition through Detector.acquire() and return the last frame. A hardware driver: the market serves its fake backend, so no instrument is needed.","measures":["detector_type","run_status","settings","nb_modules","module_serial_number","exposure_time_left"],"adjusts":["energy_threshold","exposure_time","nb_frames","nb_cycles","frame_period","delay_after_trigger"],"actions":[{"name":"acquire","description":"Run one configured acquisition through Detector.acquire() and return the last frame"},{"name":"start_acquisition","description":"Start acquisition with the configured timers (the native start_acquisition command)"},{"name":"stop_acquisition","description":"Stop acquisition with the native stop_acquisition command (the safe state); it takes no input"}],"tags":["detector","mythen","sls","photon-counting","tcp","acquisition"],"backends":["fake","hardware"],"served_backend":"fake","evidence":"contract_checked","upstream":{"repo_url":"https://github.com/alba-synchrotron/sls-detector","commit":"961d33152af298eb4cbd311d9d185683ba992199","license":"MIT"},"stars":0,"install":{"openai4s":"openai4s lab add labs/alba-synchrotron__sls-detector","mhs":"mhs serve labs/alba-synchrotron__sls-detector --port 7400","mcp":"mhs serve labs/alba-synchrotron__sls-detector --mcp"}},
{"id":"labs/alexlegoshin__idm-dnkmetr","name":"GW Instek GPP-4323 DC power supply","device_id":"mhs://localhost/gpp4323","track":"labs","category":"Electronics and measurement","topic":null,"kind":"instrument","vendor":"GW Instek","model":"GPP-4323","mode":"hardware","risk":"R1","family":"scpi","role":"driver-pack","intro":"GW Instek GPP-4323 DC power supply, adapted from alexlegoshin/idm-dnkmetr. It reads `identity`, `voltage` and `current`; sets `voltage_setpoint` and `current_limit`; runs `enable_output`. `enable_output`: close or open the power-supply output (ALLOUTON/ALLOUTOFF). A hardware driver: the market serves its fake backend, so no instrument is needed.","measures":["identity","voltage","current"],"adjusts":["voltage_setpoint","current_limit"],"actions":[{"name":"enable_output","description":"Close or open the power-supply output (ALLOUTON/ALLOUTOFF)"}],"tags":["power supply","dc source","gpp-4323","gw instek","scpi"],"backends":["fake","hardware"],"served_backend":"fake","evidence":"contract_checked","upstream":{"repo_url":"https://github.com/alexlegoshin/idm-dnkmetr","commit":"8f69873e51d2dce10c292feda3a44f745f1af5c1","license":"MIT"},"stars":0,"install":{"openai4s":"openai4s lab add labs/alexlegoshin__idm-dnkmetr","mhs":"mhs serve labs/alexlegoshin__idm-dnkmetr --port 7400","mcp":"mhs serve labs/alexlegoshin__idm-dnkmetr --mcp"}},
{"id":"labs/alexshkarin__pylablib","name":"Thorlabs Kinesis motor controller (pylablib KinesisMotor)","device_id":"mhs://localhost/kinesis-motor","track":"labs","category":"Motion control","topic":null,"kind":"motion.axis","vendor":"Thorlabs","model":"Kinesis (APT) motor controller","mode":"hardware","risk":"R1","family":"python-object","role":"driver-pack","intro":"Thorlabs Kinesis motor controller (pylablib KinesisMotor), adapted from alexshkarin/pylablib. It reads `position`, `moving`, `homed`, `status` and 2 more; sets `max_velocity`; runs `home_axis`, `stop_motion` and `move_to_absolute`. `home_axis`: home the axis with the native MOT_HOME and report the homed bit; it takes no input. A hardware driver: the market serves its fake backend, so no instrument is needed.","measures":["position","moving","homed","status","controller_model","channel_count"],"adjusts":["max_velocity"],"actions":[{"name":"home_axis","description":"Home the axis with the native MOT_HOME and report the homed bit; it takes no input"},{"name":"stop_motion","description":"Stop all motion on the resource with a declared deceleration profile and report the stopping position. This capability is always cancellable=false and is exempt from rate limiting."},{"name":"move_to_absolute","description":"Move the axis to an absolute position in device encoder steps and wait until it stops"}],"tags":["motor","stage","thorlabs","apt","kinesis","motion"],"backends":["fake","hardware"],"served_backend":"fake","evidence":"contract_checked","upstream":{"repo_url":"https://github.com/alexshkarin/pylablib","commit":"96d9504d3e668f18beb3b75503c01b93152dbcd5","license":"GPL-3.0"},"stars":214,"install":{"openai4s":"openai4s lab add labs/alexshkarin__pylablib","mhs":"mhs serve labs/alexshkarin__pylablib --port 7400","mcp":"mhs serve labs/alexshkarin__pylablib --mcp"}},
{"id":"labs/alexshkarin__pylablib-v0","name":"Agilent 33220A arbitrary waveform generator","device_id":"mhs://localhost/awg33220a","track":"labs","category":"Electronics and measurement","topic":null,"kind":"instrument","vendor":"Agilent","model":"33220A arbitrary waveform generator","mode":"hardware","risk":"R1","family":"scpi","role":"device-driver","intro":"Agilent 33220A arbitrary waveform generator, adapted from alexshkarin/pylablib-v0. It sets `amplitude`, `frequency`, `offset`, `phase` and 5 more; runs `output_off`. `output_off`: disable the generator output (the safe state); it takes no input. A hardware driver: the market serves its fake backend, so no instrument is needed.","measures":[],"adjusts":["amplitude","frequency","offset","phase","function","duty_cycle","burst_enabled","burst_mode","output"],"actions":[{"name":"output_off","description":"Disable the generator output (the safe state); it takes no input"}],"tags":["awg","waveform generator","signal generator","agilent","33220a","scpi"],"backends":["fake","hardware"],"served_backend":"fake","evidence":"contract_checked","upstream":{"repo_url":"https://github.com/alexshkarin/pylablib-v0","commit":"1c3c59d4bcbea4a16eee916033972ee13a7d1af6","license":"MIT"},"stars":10,"install":{"openai4s":"openai4s lab add labs/alexshkarin__pylablib-v0","mhs":"mhs serve labs/alexshkarin__pylablib-v0 --port 7400","mcp":"mhs serve labs/alexshkarin__pylablib-v0 --mcp"}},
{"id":"labs/allenneuraldynamics__runze-control","name":"Runze ZSB-SY01B multichannel syringe pump","device_id":"mhs://localhost/runze-sy01b","track":"labs","category":"Liquid handling and fluidics","topic":null,"kind":"actuation.pump","vendor":"Runze Fluid","model":"ZSB-SY01B","mode":"hardware","risk":"R2","family":"python-object","role":"device-driver","intro":"Runze ZSB-SY01B multichannel syringe pump, adapted from allenneuraldynamics/runze-control. It reads `position_steps`, `position_percent`, `position_ul`, `firmware_version` and 4 more; runs `move_to_percent`, `aspirate`, `dispense`, `select_valve_port` and 3 more. `move_to_percent`: move the plunger to an absolute position in percent of full travel. A hardware driver: the market serves its fake backend, so no instrument is needed.","measures":["position_steps","position_percent","position_ul","firmware_version","address","rs232_baudrate","motor_status","busy"],"adjusts":[],"actions":[{"name":"move_to_percent","description":"Move the plunger to an absolute position in percent of full travel"},{"name":"aspirate","description":"Withdraw a volume from the current liquid path by moving the plunger"},{"name":"dispense","description":"Dispense a volume into the current liquid path by moving the plunger"},{"name":"select_valve_port","description":"Move the integrated rotary valve to one port"},{"name":"reset_syringe","description":"Home the syringe at the optocoupler position and synchronize the step count to zero"},{"name":"set_speed","description":"Set the plunger speed as a percentage of the maximum speed for the fitted syringe"},{"name":"stop_pump","description":"Stop the plunger with the native ForceStop command; it takes no input"}],"tags":["syringe pump","fluid","serial","multichannel","valve"],"backends":["fake","hardware"],"served_backend":"fake","evidence":"contract_checked","upstream":{"repo_url":"https://github.com/allenneuraldynamics/runze-control","commit":"34392b3d9bc0d60c0c46f69908fec7f108cef230","license":"MIT"},"stars":4,"install":{"openai4s":"openai4s lab add labs/allenneuraldynamics__runze-control","mhs":"mhs serve labs/allenneuraldynamics__runze-control --port 7400","mcp":"mhs serve labs/allenneuraldynamics__runze-control --mcp"}},
{"id":"labs/alphatra__vacuum-instrument-monitor","name":"Granville-Phillips 350 ion gauge controller","device_id":"mhs://localhost/gp350","track":"labs","category":"Electronics and measurement","topic":null,"kind":"instrument.gauge","vendor":"Granville-Phillips","model":"350","mode":"hardware","risk":"R2","family":"serial","role":"device-driver","intro":"Granville-Phillips 350 ion gauge controller, adapted from alphatra/vacuum-instrument-monitor. It reads `pressure`; sets `filament_1`, `filament_2` and `degas`; runs `all_off`. `all_off`: switch both ion-gauge filaments and the degas cycle off. A hardware driver: the market serves its fake backend, so no instrument is needed.","measures":["pressure"],"adjusts":["filament_1","filament_2","degas"],"actions":[{"name":"all_off","description":"Switch both ion-gauge filaments and the degas cycle off"}],"tags":["vacuum","pressure","ion gauge","gp350","serial","rs-232"],"backends":["fake","hardware"],"served_backend":"fake","evidence":"contract_checked","upstream":{"repo_url":"https://github.com/alphatra/vacuum-instrument-monitor","commit":"838275818a2f48b0fbb46ea5a35cbaa857396a7e","license":"NOASSERTION"},"stars":0,"install":{"openai4s":"openai4s lab add labs/alphatra__vacuum-instrument-monitor","mhs":"mhs serve labs/alphatra__vacuum-instrument-monitor --port 7400","mcp":"mhs serve labs/alphatra__vacuum-instrument-monitor --mcp"}},
{"id":"labs/amandavical__comunication-instrument","name":"Communication Instrument serial measurement client","device_id":"mhs://localhost/comunication-instrument","track":"labs","category":"Sensors and cameras","topic":null,"kind":"sensor","vendor":null,"model":"Communication Instrument virtual instrument","mode":"hardware","risk":"R1","family":"python-object","role":"twin-candidate","intro":"Communication Instrument serial measurement client, adapted from amandavical/comunication-instrument. It reads `status`, `type`, `voltage`, `temperature` and 2 more. A hardware driver: the market serves its fake backend, so no instrument is needed.","measures":["status","type","voltage","temperature","current","read_channels"],"adjusts":[],"actions":[],"tags":["serial","measurement","virtual instrument","status","temperature","voltage","current"],"backends":["fake","hardware"],"served_backend":"fake","evidence":"contract_checked","upstream":{"repo_url":"https://github.com/amandavical/comunication-instrument","commit":"051c4277fb025ceaec5514e920e3554ff49b9719","license":"MIT"},"stars":0,"install":{"openai4s":"openai4s lab add labs/amandavical__comunication-instrument","mhs":"mhs serve labs/amandavical__comunication-instrument --port 7400","mcp":"mhs serve labs/amandavical__comunication-instrument --mcp"}},
{"id":"labs/amsikking__asi_ms_2000_500_cp","name":"ASI MS-2000-500-CP stage controller (asi_MS_2000_500_CP.Controller)","device_id":"mhs://localhost/asi-ms2000","track":"labs","category":"Motion control","topic":null,"kind":"motion.axis","vendor":"Applied Scientific Instrumentation","model":"MS-2000-500-CP multi-axis stage controller","mode":"hardware","risk":"R1","family":"serial","role":"device-driver","intro":"ASI MS-2000-500-CP stage controller (asi_MS_2000_500_CP.Controller), adapted from amsikking/asi_ms_2000_500_cp. It reads `position_x`, `position_y`, `position_z` and `motor_moving`; sets `pwm_intensity` and `pwm_state`; runs `move_stage`. `move_stage`: move the X, Y and Z stage axes to absolute positions in micrometres and wait for the controller to verify the target. A hardware driver: the market serves its fake backend, so no instrument is needed.","measures":["position_x","position_y","position_z","motor_moving"],"adjusts":["pwm_intensity","pwm_state"],"actions":[{"name":"move_stage","description":"Move the X, Y and Z stage axes to absolute positions in micrometres and wait for the controller to verify the target"}],"tags":["stage","motion","controller","asi","ms-2000","serial","pwm"],"backends":["fake","hardware"],"served_backend":"fake","evidence":"contract_checked","upstream":{"repo_url":"https://github.com/amsikking/asi_ms_2000_500_cp","commit":"5f1f6d2cad545d5ae20359fd01e014dfdd21f11f","license":"GPL-3.0"},"stars":2,"install":{"openai4s":"openai4s lab add labs/amsikking__asi_ms_2000_500_cp","mhs":"mhs serve labs/amsikking__asi_ms_2000_500_cp --port 7400","mcp":"mhs serve labs/amsikking__asi_ms_2000_500_cp --mcp"}},
{"id":"labs/amsikking__thorlabs_mcm3000","name":"Thorlabs MCM3000 series 3-axis controller","device_id":"mhs://localhost/mcm3000","track":"labs","category":"Motion control","topic":null,"kind":"motion.axis","vendor":"Thorlabs","model":"MCM3000 series 3-axis controller","mode":"hardware","risk":"R1","family":"serial","role":"device-driver","intro":"Thorlabs MCM3000 series 3-axis controller, adapted from amsikking/thorlabs_mcm3000. It reads `position_ch0`, `position_ch1` and `position_ch2`; runs `move_channel` and `stop_motion`. `move_channel`: move one configured controller channel to a position in micrometres and report the position the controller reads back. A hardware driver: the market serves its fake backend, so no instrument is needed.","measures":["position_ch0","position_ch1","position_ch2"],"adjusts":[],"actions":[{"name":"move_channel","description":"Move one configured controller channel to a position in micrometres and report the position the controller reads back"},{"name":"stop_motion","description":"Stop all motion on the resource with a declared deceleration profile and report the stopping position. This capability is always cancellable=false and is exempt from rate limiting."}],"tags":["thorlabs","mcm3000","mcm3001","3-axis","stage","stepper","encoder","motion"],"backends":["fake","hardware"],"served_backend":"fake","evidence":"contract_checked","upstream":{"repo_url":"https://github.com/amsikking/thorlabs_mcm3000","commit":"390cd97e44abe04945db9b73ec8dc34a099d9f96","license":"GPL-3.0"},"stars":6,"install":{"openai4s":"openai4s lab add labs/amsikking__thorlabs_mcm3000","mhs":"mhs serve labs/amsikking__thorlabs_mcm3000 --port 7400","mcp":"mhs serve labs/amsikking__thorlabs_mcm3000 --mcp"}},
{"id":"labs/amsikking__zaber_x_adr130","name":"Zaber X-ADR130 XY microscope stage","device_id":"mhs://localhost/zaber-x-adr130","track":"labs","category":"Motion control","topic":null,"kind":"motion.axis","vendor":"Zaber","model":"X-ADR130B100B-SAE53D12","mode":"hardware","risk":"R1","family":"serial","role":"device-driver","intro":"Zaber X-ADR130 XY microscope stage, adapted from amsikking/zaber_x_adr130. It reads `x_mm` and `y_mm`; sets `x_maxspeed` and `y_maxspeed`; runs `move_xy`. `move_xy`: move both axes to absolute positions in millimetres and wait for the move to finish. A hardware driver: the market serves its fake backend, so no instrument is needed.","measures":["x_mm","y_mm"],"adjusts":["x_maxspeed","y_maxspeed"],"actions":[{"name":"move_xy","description":"Move both axes to absolute positions in millimetres and wait for the move to finish"}],"tags":["zaber","x-adr130","xy stage","microscope stage","serial","ascii protocol"],"backends":["fake","hardware"],"served_backend":"fake","evidence":"contract_checked","upstream":{"repo_url":"https://github.com/amsikking/zaber_x_adr130","commit":"7c5926e07929b5c40ea6049ea5bceab28609bb0e","license":"GPL-3.0"},"stars":0,"install":{"openai4s":"openai4s lab add labs/amsikking__zaber_x_adr130","mhs":"mhs serve labs/amsikking__zaber_x_adr130 --port 7400","mcp":"mhs serve labs/amsikking__zaber_x_adr130 --mcp"}},
{"id":"labs/andmorifa__instrument-control-python","name":"Red Pitaya SCPI client (redpitaya_client.RedPitayaClient)","device_id":"mhs://localhost/redpitaya","track":"labs","category":"Electronics and measurement","topic":null,"kind":"instrument","vendor":"Red Pitaya","model":"SCPI-over-TCP client","mode":"hardware","risk":"R0","family":"python-object","role":"device-driver","intro":"Red Pitaya SCPI client (redpitaya_client.RedPitayaClient), adapted from andmorifa/instrument-control-python. It reads `connected`; runs `scpi_query`. `scpi_query`: send one SCPI query through the client and return the response text. A hardware driver: the market serves its fake backend, so no instrument is needed.","measures":["connected"],"adjusts":[],"actions":[{"name":"scpi_query","description":"Send one SCPI query through the client and return the response text"}],"tags":["red pitaya","scpi","tcp","signal acquisition","connection"],"backends":["fake","hardware"],"served_backend":"fake","evidence":"contract_checked","upstream":{"repo_url":"https://github.com/andmorifa/instrument-control-python","commit":"0622a4aee5cf8b7a4704711d1fdf81fe35b0b6ff","license":"MIT"},"stars":0,"install":{"openai4s":"openai4s lab add labs/andmorifa__instrument-control-python","mhs":"mhs serve labs/andmorifa__instrument-control-python --port 7400","mcp":"mhs serve labs/andmorifa__instrument-control-python --mcp"}},
{"id":"labs/andrewvp41__lambda-physik-lpx200-lasercontroller","name":"Lambda Physik LPX 200 laser","device_id":"mhs://localhost/lpx200","track":"labs","category":"Optics and microscopy","topic":null,"kind":"optics.laser","vendor":"Lambda Physik","model":"LPX 200","mode":"hardware","risk":"R3","family":"scpi","role":"device-driver","intro":"Lambda Physik LPX 200 laser, adapted from andrewvp41/lambda-physik-lpx200-lasercontroller. It reads `operating_mode`, `pressure` and `gas_mix`; sets `trigger_mode`, `mode`, `repetition_rate`, `high_voltage` and 1 more; runs `emission_on` and `emission_off`. `emission_on`: start laser operation with OPMODE=ON (the RUN STOP start command). A hardware driver: the market serves its fake backend, so no instrument is needed.","measures":["operating_mode","pressure","gas_mix"],"adjusts":["trigger_mode","mode","repetition_rate","high_voltage","energy"],"actions":[{"name":"emission_on","description":"Start laser operation with OPMODE=ON (the RUN STOP start command)"},{"name":"emission_off","description":"Stop laser emission with OPMODE=OFF (the RUN STOP stop command); takes no input"}],"tags":["laser","lpx200","lambda-physik","pyvisa","serial"],"backends":["fake","hardware"],"served_backend":"fake","evidence":"contract_checked","upstream":{"repo_url":"https://github.com/andrewvp41/lambda-physik-lpx200-lasercontroller","commit":"abd240f534a93923342ae6bef374e9d9885b8776","license":"NOASSERTION"},"stars":1,"install":{"openai4s":"openai4s lab add labs/andrewvp41__lambda-physik-lpx200-lasercontroller","mhs":"mhs serve labs/andrewvp41__lambda-physik-lpx200-lasercontroller --port 7400","mcp":"mhs serve labs/andrewvp41__lambda-physik-lpx200-lasercontroller --mcp"}},
{"id":"labs/angli339__tecan-fluent-api","name":"Tecan Fluent liquid handler through FluentControl (tecan_fluent.tecan_ctrl.Tecan)","device_id":"mhs://localhost/tecan_fluent","track":"labs","category":"Liquid handling and fluidics","topic":null,"kind":"lab.liquid_handler","vendor":"Tecan","model":"Fluent liquid handler","mode":"hardware","risk":"R2","family":"python-object","role":"device-driver","intro":"Tecan Fluent liquid handler through FluentControl (tecan_fluent.tecan_ctrl.Tecan), adapted from angli339/tecan-fluent-api. It reads `fluent_status` and `channel_open`; runs `liha_aspirate`, `liha_dispense`, `liha_mix`, `mca_aspirate` and 2 more. `liha_aspirate`: aspirate a volume through one LiHa tip from a 96-well labware well. A hardware driver: the market serves its fake backend, so no instrument is needed.","measures":["fluent_status","channel_open"],"adjusts":[],"actions":[{"name":"liha_aspirate","description":"Aspirate a volume through one LiHa tip from a 96-well labware well"},{"name":"liha_dispense","description":"Dispense a volume through one LiHa tip into a 96-well labware well"},{"name":"liha_mix","description":"Mix a volume in a 96-well labware well with one LiHa tip"},{"name":"mca_aspirate","description":"Aspirate a volume from a whole plate with the MCA head"},{"name":"mca_dispense","description":"Dispense a volume into a whole plate with the MCA head"},{"name":"stop_fluent","description":"Stop the FluentControl method and detach the API channel (the safe state); it takes no input"}],"tags":["liquid-handler","pipetting","tecan","fluent","fluentcontrol","execution-channel"],"backends":["fake","hardware"],"served_backend":"fake","evidence":"contract_checked","upstream":{"repo_url":"https://github.com/angli339/tecan-fluent-api","commit":"d087edd9a4cd415961c8337fc82a300bf24fda11","license":"MIT"},"stars":0,"install":{"openai4s":"openai4s lab add labs/angli339__tecan-fluent-api","mhs":"mhs serve labs/angli339__tecan-fluent-api --port 7400","mcp":"mhs serve labs/angli339__tecan-fluent-api --mcp"}},
{"id":"labs/anguyen-23__sila-testing","name":"PerkinElmer Opera Phenix (PhenixImager SiLA 2 feature)","device_id":"mhs://localhost/phenix_imager","track":"labs","category":"Optics and microscopy","topic":null,"kind":"instrument.microscope","vendor":"PerkinElmer","model":"Opera Phenix (PhenixImager SiLA 2 feature)","mode":"hardware","risk":"R2","family":"sila2","role":"device-driver","intro":"PerkinElmer Opera Phenix (PhenixImager SiLA 2 feature), adapted from anguyen-23/sila-testing. It reads `IsConnected`, `DeviceState`, `StagePosition`, `PlateDetected` and 6 more; runs `phenix_connect`, `phenix_disconnect`, `phenix_stagein`, `phenix_stageout` and 5 more. `phenix_connect`: open the RCI connection to the named Phenix host and return the device name. A hardware driver: the market serves its fake backend, so no instrument is needed.","measures":["IsConnected","DeviceState","StagePosition","PlateDetected","AvailableProtocols","DeviceDescription","execution_known","execution_uuid","acquisition_progress","last_progress_info"],"adjusts":[],"actions":[{"name":"phenix_connect","description":"Open the RCI connection to the named Phenix host and return the device name."},{"name":"phenix_disconnect","description":"Close the RCI connection."},{"name":"phenix_stagein","description":"Move the stage from Transfer to Operate (RCI LOAD); a plate must already be on the stage."},{"name":"phenix_stageout","description":"Move the stage from Operate to Transfer (RCI EJECT) so the plate can be removed."},{"name":"phenix_stop","description":"Stop the running acquisition protocol (RCI STOP); the e-stop of this package."},{"name":"phenix_goidle","description":"Return the device to Idle (RCI IDLE)."},{"name":"phenix_gostandby","description":"Put the device into Standby for DurationSeconds before it wakes up (RCI STANDBY)."},{"name":"phenix_runacquisitionprotocol","description":"Run a named acquisition protocol on the plate; progress per well; ejects when done."},{"name":"phenix_displayicon","description":"Publish the instrument icon PNG as an artifact (a UI icon, not an acquired image)."}],"tags":[],"backends":["fake","hardware"],"served_backend":"fake","evidence":"contract_checked","upstream":{"repo_url":"https://github.com/anguyen-23/sila-testing","commit":"0b572380e06977c1920510773b4bfee7bcd0eec5","license":"NOASSERTION"},"stars":0,"install":{"openai4s":"openai4s lab add labs/anguyen-23__sila-testing","mhs":"mhs serve labs/anguyen-23__sila-testing --port 7400","mcp":"mhs serve labs/anguyen-23__sila-testing --mcp"}},
{"id":"labs/ap--__python-oceanoptics","name":"Ocean Optics QE65000/QE65Pro TEC","device_id":"mhs://localhost/oceanoptics-tec","track":"labs","category":"Thermal and process control","topic":null,"kind":"thermal.zone","vendor":"Ocean Optics","model":"QE65000/QE65Pro TEC controller","mode":"hardware","risk":"R2","family":"python-object","role":"device-driver","intro":"Ocean Optics QE65000/QE65Pro TEC, adapted from ap--/python-oceanoptics. It reads `tec_temperature`, `pcb_temperature`, `heatsink_temperature`, `tec_enabled` and 1 more; sets `setpoint`; runs `set_temperature` and `tec_safe_off`. `set_temperature`: set the target temperature of a thermal zone and optionally wait for the zone to reach the setpoint within a declared tolerance. A hardware driver: the market serves its fake backend, so no instrument is needed.","measures":["tec_temperature","pcb_temperature","heatsink_temperature","tec_enabled","fan_enabled"],"adjusts":["setpoint"],"actions":[{"name":"set_temperature","description":"Set the target temperature of a thermal zone and optionally wait for the zone to reach the setpoint within a declared tolerance."},{"name":"tec_safe_off","description":"Switch the TEC controller off and leave the cooling fan on (the safe state); no input"}],"tags":["tec","temperature-control","spectrometer","thermoelectric-cooler"],"backends":["fake","hardware"],"served_backend":"fake","evidence":"contract_checked","upstream":{"repo_url":"https://github.com/ap--/python-oceanoptics","commit":"3df0c263e47c374dcd569681780cf5fc5faa2029","license":"MIT"},"stars":21,"install":{"openai4s":"openai4s lab add labs/ap--__python-oceanoptics","mhs":"mhs serve labs/ap--__python-oceanoptics --port 7400","mcp":"mhs serve labs/ap--__python-oceanoptics --mcp"}},
{"id":"labs/ap--__python-seabreeze","name":"Ocean Optics spectrometer (python-seabreeze Spectrometer)","device_id":"mhs://localhost/seabreeze-spectrometer","track":"labs","category":"Spectroscopy","topic":null,"kind":"instrument.spectrometer","vendor":"Ocean Optics","model":"SeaBreeze spectrometer","mode":"hardware","risk":"R1","family":"python-object","role":"device-driver","intro":"Ocean Optics spectrometer (python-seabreeze Spectrometer), adapted from ap--/python-seabreeze. It reads `pixel_count`, `max_intensity`, `serial_number` and `model_name`; runs `measure_intensity` and `set_integration_time`. `measure_intensity`: measure optical or radiant intensity at a declared wavelength or channel and return the value with its unit and integration time. A hardware driver: the market serves its fake backend, so no instrument is needed.","measures":["pixel_count","max_intensity","serial_number","model_name"],"adjusts":[],"actions":[{"name":"measure_intensity","description":"Measure optical or radiant intensity at a declared wavelength or channel and return the value with its unit and integration time."},{"name":"set_integration_time","description":"Set the detector integration time (Spectrometer.integration_time_micros); the value is given in whole microseconds after the conversion from milliseconds"}],"tags":["spectrometer","ocean-optics","seabreeze","spectroscopy","intensity"],"backends":["fake","hardware"],"served_backend":"fake","evidence":"contract_checked","upstream":{"repo_url":"https://github.com/ap--/python-seabreeze","commit":"3de4fdd6bbb533a701309c746c94cac2ffc05be0","license":"MIT"},"stars":253,"install":{"openai4s":"openai4s lab add labs/ap--__python-seabreeze","mhs":"mhs serve labs/ap--__python-seabreeze --port 7400","mcp":"mhs serve labs/ap--__python-seabreeze --mcp"}},
{"id":"labs/ari1127__sr830","name":"SRS SR830 lock-in amplifier","device_id":"mhs://localhost/sr830","track":"labs","category":"Electronics and measurement","topic":null,"kind":"instrument","vendor":"Stanford Research Systems","model":"SR830 lock-in amplifier","mode":"hardware","risk":"R1","family":"scpi","role":"device-driver","intro":"SRS SR830 lock-in amplifier, adapted from ari1127/sr830. It reads `x`, `y`, `r`, `theta` and 14 more; sets `frequency`, `amplitude`, `phase`, `reference_source` and 4 more. A hardware driver: the market serves its fake backend, so no instrument is needed.","measures":["x","y","r","theta","snapshot","harmonic","trigger_shape","aux_output_1","aux_output_2","grounding","line_filter","reserve","filter_slope","sync_filter","display_1","display_2","expand_1","expand_2"],"adjusts":["frequency","amplitude","phase","reference_source","input_source","coupling","time_constant_index","sensitivity_index"],"actions":[],"tags":["lock-in amplifier","sr830","scpi","phase-sensitive detection"],"backends":["fake"],"served_backend":"fake","evidence":"contract_checked","upstream":{"repo_url":"https://github.com/ari1127/sr830","commit":"930c9c5dcd8016b19e8c0988599f8f76cd928a12","license":"NOASSERTION"},"stars":7,"install":{"openai4s":"openai4s lab add labs/ari1127__sr830","mhs":"mhs serve labs/ari1127__sr830 --port 7400","mcp":"mhs serve labs/ari1127__sr830 --mcp"}},
{"id":"labs/asvela__dlc-control","name":"Toptica DLCpro laser controller (dlccontrol.DLCcontrol)","device_id":"mhs://localhost/dlc-control","track":"labs","category":"Optics and microscopy","topic":null,"kind":"optics.laser","vendor":"Toptica","model":"DLCpro","mode":"hardware","risk":"R3","family":"python-object","role":"device-driver","intro":"Toptica DLCpro laser controller (dlccontrol.DLCcontrol), adapted from asvela/dlc-control. It reads `emission`, `emission_button`, `wavelength_actual`, `temp_actual` and 3 more; sets `current_enabled`, `wavelength_setpoint`, `temp_setpoint`, `scan_enabled` and 5 more; runs `emission_off`. `emission_off`: disable the laser diode current (the documented emission off control). A hardware driver: the market serves its fake backend, so no instrument is needed.","measures":["emission","emission_button","wavelength_actual","temp_actual","scan_output_channel","user_level","device_limits"],"adjusts":["current_enabled","wavelength_setpoint","temp_setpoint","scan_enabled","scan_frequency","scan_amplitude","scan_offset","scan_start","scan_end"],"actions":[{"name":"emission_off","description":"Disable the laser diode current (the documented emission off control)"}],"tags":["laser","dlcpro","toptica","emission","scan"],"backends":["fake","hardware"],"served_backend":"fake","evidence":"contract_checked","upstream":{"repo_url":"https://github.com/asvela/dlc-control","commit":"eba98c139581e73dce32c0b196f41b253f6009f8","license":"MIT"},"stars":10,"install":{"openai4s":"openai4s lab add labs/asvela__dlc-control","mhs":"mhs serve labs/asvela__dlc-control --port 7400","mcp":"mhs serve labs/asvela__dlc-control --mcp"}},
{"id":"labs/asvela__keyoscacquire","name":"Keysight InfiniiVision oscilloscope","device_id":"mhs://localhost/keyoscacquire","track":"labs","category":"Electronics and measurement","topic":null,"kind":"instrument","vendor":"Keysight Technologies","model":"InfiniiVision X-series oscilloscope (1000 to 6000 series)","mode":"hardware","risk":"R1","family":"scpi","role":"device-driver","intro":"Keysight InfiniiVision oscilloscope, adapted from asvela/keyoscacquire. It reads `operation_condition`; sets `acq_type`, `num_averages`, `p_mode`, `num_points` and 1 more; runs `read_error`. `read_error`: read and remove the oldest entry of the instrument error queue (:SYSTem:ERRor?). A hardware driver: the market serves its fake backend, so no instrument is needed.","measures":["operation_condition"],"adjusts":["acq_type","num_averages","p_mode","num_points","wav_format"],"actions":[{"name":"read_error","description":"Read and remove the oldest entry of the instrument error queue (:SYSTem:ERRor?)"}],"tags":["oscilloscope","keysight","infinivision","scpi"],"backends":["fake"],"served_backend":"fake","evidence":"contract_checked","upstream":{"repo_url":"https://github.com/asvela/keyoscacquire","commit":"1d093470ab99769c9b149816d7faa4b61a4837d2","license":"MIT"},"stars":30,"install":{"openai4s":"openai4s lab add labs/asvela__keyoscacquire","mhs":"mhs serve labs/asvela__keyoscacquire --port 7400","mcp":"mhs serve labs/asvela__keyoscacquire --mcp"}},
{"id":"labs/asvela__tektronix-func-gen","name":"Tektronix AFG1000/AFG3000 arbitrary function generator","device_id":"mhs://localhost/tektronix-afg","track":"labs","category":"Electronics and measurement","topic":null,"kind":"instrument","vendor":"Tektronix","model":"AFG1000/AFG3000 series arbitrary function generator","mode":"hardware","risk":"R1","family":"scpi","role":"device-driver","intro":"Tektronix AFG1000/AFG3000 arbitrary function generator, adapted from asvela/tektronix-func-gen. It reads `error_queue` and `waveform_catalogue`; sets `output_ch1`, `output_ch2`, `function_ch1`, `function_ch2` and 7 more. A hardware driver: the market serves its fake backend, so no instrument is needed.","measures":["error_queue","waveform_catalogue"],"adjusts":["output_ch1","output_ch2","function_ch1","function_ch2","amplitude_ch1","amplitude_ch2","offset_ch1","offset_ch2","frequency_ch1","frequency_ch2","frequency_lock"],"actions":[],"tags":["function generator","arbitrary waveform generator","afg1000","afg3000","tektronix","visa"],"backends":["fake","hardware"],"served_backend":"fake","evidence":"contract_checked","upstream":{"repo_url":"https://github.com/asvela/tektronix-func-gen","commit":"30f7406e89bd9f344487b84913f5111e8bb110a7","license":"MIT"},"stars":21,"install":{"openai4s":"openai4s lab add labs/asvela__tektronix-func-gen","mhs":"mhs serve labs/asvela__tektronix-func-gen --port 7400","mcp":"mhs serve labs/asvela__tektronix-func-gen --mcp"}},
{"id":"labs/attolab__pymodaq_plugins_pylablib_camera","name":"Thorlabs camera (pymodaq_plugins_pylablib_camera DAQ_2DViewer_ThorlabsPLL)","device_id":"mhs://localhost/pylablib-camera","track":"labs","category":"Sensors and cameras","topic":null,"kind":"sensor.camera","vendor":"Thorlabs","model":"Thorlabs camera through the PyMoDAQ pylablib viewer","mode":"hardware","risk":"R1","family":"python-object","role":"device-driver","intro":"Thorlabs camera (pymodaq_plugins_pylablib_camera DAQ_2DViewer_ThorlabsPLL), adapted from attolab/pymodaq_plugins_pylablib_camera. It reads `camera_list`, `camera_info` and `detector_size`; sets `exposure`, `roi_x0`, `roi_x1`, `roi_y0` and 3 more. A hardware driver: the market serves its fake backend, so no instrument is needed.","measures":["camera_list","camera_info","detector_size"],"adjusts":["exposure","roi_x0","roi_x1","roi_y0","roi_y1","binning_x","binning_y"],"actions":[],"tags":["camera","thorlabs","pylablib","imaging","roi","binning"],"backends":["fake","hardware"],"served_backend":"fake","evidence":"contract_checked","upstream":{"repo_url":"https://github.com/attolab/pymodaq_plugins_pylablib_camera","commit":"ff1e71510bc1a4b07a700034d37f74a5e916abf8","license":"CECILL-B"},"stars":1,"install":{"openai4s":"openai4s lab add labs/attolab__pymodaq_plugins_pylablib_camera","mhs":"mhs serve labs/attolab__pymodaq_plugins_pylablib_camera --port 7400","mcp":"mhs serve labs/attolab__pymodaq_plugins_pylablib_camera --mcp"}},
{"id":"labs/autobio-bench__autobio","name":"AutoBio DexHand021 right hand (MuJoCo model)","device_id":"mhs://localhost/autobio-dexhand021-right","track":"labs","category":"Simulation","topic":"pipetting","kind":"world.sim","vendor":"AutoBio","model":"DexHand021 right","mode":"simulated","risk":"R0","family":"mujoco","role":"twin-candidate","intro":"AutoBio DexHand021 right hand (MuJoCo model), adapted from autobio-bench/autobio. It reads `time_ms`, `qpos`, `qvel`, `ctrl` and 4 more; runs `step` and `reset`. `step`: advance the simulated world by a bounded number of fixed timesteps, optionally applying an action for each step, and return the resulting observation and terminal flags. A simulator: the market serves it with a stand-in that needs no simulator install.","measures":["time_ms","qpos","qvel","ctrl","tick","timestep_ms","seed","native_checkpoint"],"adjusts":[],"actions":[{"name":"step","description":"Advance the simulated world by a bounded number of fixed timesteps, optionally applying an action for each step, and return the resulting observation and terminal flags."},{"name":"reset","description":"Reset the simulated world to a scenario start state and return the initial observation. When a seed is supplied the endpoint records it in the receipt; otherwise the endpoint's declared default seed applies."}],"tags":["autobio","dexhand","dexhand021","hand","mujoco","robot","simulation"],"backends":["fake"],"served_backend":"fake","evidence":"contract_checked","upstream":{"repo_url":"https://github.com/autobio-bench/autobio","commit":"08504213356cbfe9a82bcd33a43cd282945a45df","license":"NOASSERTION"},"stars":0,"install":{"openai4s":"openai4s lab add labs/autobio-bench__autobio","mhs":"mhs serve labs/autobio-bench__autobio --port 7400","mcp":"mhs serve labs/autobio-bench__autobio --mcp"}},
{"id":"labs/autolab-project__autolab-drivers","name":"Anritsu MS2830A spectrum analyzer (autolab Driver_VISA)","device_id":"mhs://localhost/anritsu-ms2830a","track":"labs","category":"Electronics and measurement","topic":null,"kind":"instrument","vendor":"Anritsu","model":"MS2830A spectrum analyzer","mode":"hardware","risk":"R1","family":"python-object","role":"driver-pack","intro":"Anritsu MS2830A spectrum analyzer (autolab Driver_VISA), adapted from autolab-project/autolab-drivers. It reads `identification`, `power_marker_1`, `power_marker_2` and `power_marker_3`; sets `frequency_start`, `frequency_stop`, `frequency_span`, `frequency_center` and 3 more. A hardware driver: the market serves its fake backend, so no instrument is needed.","measures":["identification","power_marker_1","power_marker_2","power_marker_3"],"adjusts":["frequency_start","frequency_stop","frequency_span","frequency_center","frequency_step","sweep_points","timeout"],"actions":[],"tags":["spectrum-analyzer","esa","scpi","visa","rf"],"backends":["fake","hardware"],"served_backend":"fake","evidence":"contract_checked","upstream":{"repo_url":"https://github.com/autolab-project/autolab-drivers","commit":"4b44dfba7444d1e8e8b5fd895fa304fa550ce882","license":"GPL-3.0"},"stars":0,"install":{"openai4s":"openai4s lab add labs/autolab-project__autolab-drivers","mhs":"mhs serve labs/autolab-project__autolab-drivers --port 7400","mcp":"mhs serve labs/autolab-project__autolab-drivers --mcp"}},
{"id":"labs/azdagkas__kinesis-piezo","name":"Thorlabs TPZ001 piezo controller (piezo.PiezoController)","device_id":"mhs://localhost/kinesis-piezo","track":"labs","category":"Motion control","topic":null,"kind":"motion.axis","vendor":"Thorlabs","model":"TPZ001 piezo driver with TSG001 strain gauge reader","mode":"hardware","risk":"R1","family":"python-object","role":"device-driver","intro":"Thorlabs TPZ001 piezo controller (piezo.PiezoController), adapted from azdagkas/kinesis-piezo. It reads `units`, `reader_reading`, `reader_units` and `zeroing`; sets `value` and `closed_loop`; runs `move_to_home`, `jog_up`, `jog_down`, `calibrate_position` and 2 more. `move_to_home`: drive the piezo travel to zero with the native move_to_home (the safe state). A hardware driver: the market serves its fake backend, so no instrument is needed.","measures":["units","reader_reading","reader_units","zeroing"],"adjusts":["value","closed_loop"],"actions":[{"name":"move_to_home","description":"Drive the piezo travel to zero with the native move_to_home (the safe state)"},{"name":"jog_up","description":"Step the controller value up by one configured jog step (the native moveup)"},{"name":"jog_down","description":"Step the controller value down by one configured jog step (the native movedown)"},{"name":"calibrate_position","description":"Run the native calibration: drive 10 and 70 percent and fit percentage travel to the strain gauge reader"},{"name":"move_to_position","description":"Move to a strain gauge reader position with the stored calibration (the native move_to_pos)"},{"name":"zero_reader","description":"Zero the strain gauge reader with the native reader set_zero"}],"tags":["thorlabs","piezo","stage","motion","kinesis","strain-gauge"],"backends":["fake","hardware"],"served_backend":"fake","evidence":"contract_checked","upstream":{"repo_url":"https://github.com/azdagkas/kinesis-piezo","commit":"ecfe0586cef37d83e287a1fee3496a3eb67f4acd","license":"BSD-3-Clause"},"stars":5,"install":{"openai4s":"openai4s lab add labs/azdagkas__kinesis-piezo","mhs":"mhs serve labs/azdagkas__kinesis-piezo --port 7400","mcp":"mhs serve labs/azdagkas__kinesis-piezo --mcp"}},
{"id":"labs/bamresearch__mapz_at_bam","name":"IKA RCT digital 5 hotplate and magnetic stirrer (Minerva RCTDigital5)","device_id":"mhs://localhost/ika-rct-digital-5","track":"labs","category":"Thermal and process control","topic":null,"kind":"thermal.zone","vendor":"IKA","model":"RCT digital 5","mode":"hardware","risk":"R2","family":"python-object","role":"device-driver","intro":"IKA RCT digital 5 hotplate and magnetic stirrer (Minerva RCTDigital5), adapted from bamresearch/mapz_at_bam. It reads `device_name`, `external_temperature`, `hotplate_temperature`, `stirring_speed` and 2 more; sets `temperature_setpoint` and `stirring_speed_setpoint`; runs `heat_to`, `start_stirring` and `stop_hotplate`. `heat_to`: set the target temperature of a thermal zone and optionally wait for the zone to reach the setpoint within a declared tolerance. A hardware driver: the market serves its fake backend, so no instrument is needed.","measures":["device_name","external_temperature","hotplate_temperature","stirring_speed","viscosity_trend","safety_temperature"],"adjusts":["temperature_setpoint","stirring_speed_setpoint"],"actions":[{"name":"heat_to","description":"Set the target temperature of a thermal zone and optionally wait for the zone to reach the setpoint within a declared tolerance."},{"name":"start_stirring","description":"Start stirring at a speed; the speed is the setpoint used by the start command"},{"name":"stop_hotplate","description":"Stop heating and stirring and reset both setpoints to zero (the safe state); takes no input"}],"tags":["hotplate","magnetic stirrer","temperature-control","heating","serial"],"backends":["fake","hardware"],"served_backend":"fake","evidence":"contract_checked","upstream":{"repo_url":"https://github.com/bamresearch/mapz_at_bam","commit":"ad4cd71528aa7d9fa1b74379dcf02266318081cb","license":"NOASSERTION"},"stars":13,"install":{"openai4s":"openai4s lab add labs/bamresearch__mapz_at_bam","mhs":"mhs serve labs/bamresearch__mapz_at_bam --port 7400","mcp":"mhs serve labs/bamresearch__mapz_at_bam --mcp"}},
{"id":"labs/baroobob__keithley2400","name":"Keithley 2400 source-measure unit","device_id":"mhs://localhost/keithley2400","track":"labs","category":"Electronics and measurement","topic":null,"kind":"instrument.smu","vendor":"Keithley Instruments","model":"Keithley 2400 source-measure unit","mode":"hardware","risk":"R3","family":"scpi","role":"device-driver","intro":"Keithley 2400 source-measure unit, adapted from baroobob/keithley2400. It reads `trigger_delay`; sets `voltage` and `output`; runs `measure_current`, `measure_voltage`, `measure_resistance` and `safe_state`. `measure_current`: configure current measurement (CONF:CURR, FORM:ELEM CURR) in source-voltage mode and read one sample with the trigger settings of the clone; the source voltage is not changed. A hardware driver: the market serves its fake backend, so no instrument is needed.","measures":["trigger_delay"],"adjusts":["voltage","output"],"actions":[{"name":"measure_current","description":"Configure current measurement (CONF:CURR, FORM:ELEM CURR) in source-voltage mode and read one sample with the trigger settings of the clone; the source voltage is not changed"},{"name":"measure_voltage","description":"Configure voltage measurement (CONF:VOLT, FORM:ELEM VOLT) with the source current set to zero and read one sample with the trigger settings of the clone"},{"name":"measure_resistance","description":"Configure resistance measurement (CONF:RES, FORM:ELEM RES) and read one sample with the trigger settings of the clone; the source setting is not changed"},{"name":"safe_state","description":"Disable the source output and set the source voltage and source current to zero"}],"tags":["keithley","2400","source-measure unit","smu","scpi"],"backends":["fake"],"served_backend":"fake","evidence":"contract_checked","upstream":{"repo_url":"https://github.com/baroobob/keithley2400","commit":"6491ff740bbdeac2f5cceca43a8b9133fb615399","license":"GPL-3.0"},"stars":5,"install":{"openai4s":"openai4s lab add labs/baroobob__keithley2400","mhs":"mhs serve labs/baroobob__keithley2400 --port 7400","mcp":"mhs serve labs/baroobob__keithley2400 --mcp"}},
{"id":"labs/basf__pytem","name":"BASF pyTEM TEM interface (pyTEM.Interface.Interface)","device_id":"mhs://localhost/pytem","track":"labs","category":"Optics and microscopy","topic":null,"kind":"instrument.microscope","vendor":"BASF SE","model":"Talos F200i TEM","mode":"hardware","risk":"R3","family":"python-object","role":"device-driver","intro":"BASF pyTEM TEM interface (pyTEM.Interface.Interface), adapted from basf/pytem. It reads `stage_home`, `beam_blanked`, `screen_position`, `column_valve_position` and 5 more; sets `stage_x`, `stage_y`, `stage_z`, `stage_alpha` and 1 more; runs `reset_stage_position` and `enter_safe_state`. `reset_stage_position`: reset the stage to x=y=z=alpha=beta=0 (the native reset_stage_position). A hardware driver: the market serves its fake backend, so no instrument is needed.","measures":["stage_home","beam_blanked","screen_position","column_valve_position","column_vacuum","accelerator_vacuum","mode","projection_mode","illumination_mode"],"adjusts":["stage_x","stage_y","stage_z","stage_alpha","stage_beta"],"actions":[{"name":"reset_stage_position","description":"Reset the stage to x=y=z=alpha=beta=0 (the native reset_stage_position)"},{"name":"enter_safe_state","description":"Enter the native safe state: close the column valve, blank the beam and insert the screen"}],"tags":["tem","electron-microscope","stage","vacuum","beam-blanker"],"backends":["fake","hardware"],"served_backend":"fake","evidence":"contract_checked","upstream":{"repo_url":"https://github.com/basf/pytem","commit":"d2b2800329524c205c266fe72a35c7fd477cc735","license":"MIT"},"stars":15,"install":{"openai4s":"openai4s lab add labs/basf__pytem","mhs":"mhs serve labs/basf__pytem --port 7400","mcp":"mhs serve labs/basf__pytem --mcp"}},
{"id":"labs/bcda-aps__apstools","name":"APS storage-ring machine parameters (apstools, read only)","device_id":"mhs://localhost/aps-machine-parameters","track":"labs","category":"Sensors and cameras","topic":null,"kind":"sensor","vendor":null,"model":"ApsMachineParametersDevice (apstools)","mode":"hardware","risk":"R0","family":"ophyd","role":"device-driver","intro":"APS storage-ring machine parameters (apstools, read only), adapted from bcda-aps/apstools. It reads `current`, `machine_status`, `operating_mode`, `shutter_status` and 4 more. A hardware driver: the market serves its fake backend, so no instrument is needed.","measures":["current","machine_status","operating_mode","shutter_status","shutters_open","fill_number","orbit_correction","read_ring_current"],"adjusts":[],"actions":[],"tags":["ophyd","epics","bluesky","storage-ring","machine-status","read-only"],"backends":["fake","hardware"],"served_backend":"fake","evidence":"contract_checked","upstream":{"repo_url":"https://github.com/bcda-aps/apstools","commit":"6250dbaa2f0413611fab56d6956c523d9fe2d293","license":"BSD-3-Clause"},"stars":19,"install":{"openai4s":"openai4s lab add labs/bcda-aps__apstools","mhs":"mhs serve labs/bcda-aps__apstools --port 7400","mcp":"mhs serve labs/bcda-aps__apstools --mcp"}},
{"id":"labs/bdhammel__python_newport_controller","name":"New Focus Picomotor controller (newport.Controller)","device_id":"mhs://localhost/picomotor","track":"labs","category":"Motion control","topic":null,"kind":"motion.axis","vendor":"New Focus (Newport)","model":"Picomotor controller 8742/8745","mode":"hardware","risk":"R1","family":"python-object","role":"device-driver","intro":"New Focus Picomotor controller (newport.Controller), adapted from bdhammel/python_newport_controller. It reads `positions`; runs `move_steps` and `stop_motion`. `move_steps`: move one Picomotor channel by a relative number of steps (the native xPRnn command). A hardware driver: the market serves its fake backend, so no instrument is needed.","measures":["positions"],"adjusts":[],"actions":[{"name":"move_steps","description":"Move one Picomotor channel by a relative number of steps (the native xPRnn command)"},{"name":"stop_motion","description":"Stop all motion on the resource with a declared deceleration profile and report the stopping position. This capability is always cancellable=false and is exempt from rate limiting."}],"tags":["picomotor","motion","newfocus","usb"],"backends":["fake","hardware"],"served_backend":"fake","evidence":"contract_checked","upstream":{"repo_url":"https://github.com/bdhammel/python_newport_controller","commit":"1d960070435d1a47708ed42986697ac72a0ba4f3","license":"MIT"},"stars":12,"install":{"openai4s":"openai4s lab add labs/bdhammel__python_newport_controller","mhs":"mhs serve labs/bdhammel__python_newport_controller --port 7400","mcp":"mhs serve labs/bdhammel__python_newport_controller --mcp"}},
{"id":"labs/beniroquai__opentrons-microscope-platereader","name":"NEJE laser 2 engraver controller (pyGraver serial protocol)","device_id":"mhs://localhost/neje-laser2","track":"labs","category":"Motion control","topic":null,"kind":"motion.axis","vendor":"beniroquai","model":"NEJE laser 2 controller (pyGraver)","mode":"hardware","risk":"R3","family":"python-object","role":"device-driver","intro":"NEJE laser 2 engraver controller (pyGraver serial protocol), adapted from beniroquai/opentrons-microscope-platereader. It reads `carving_progress`; runs `move_xy`, `set_laser`, `pause_carving` and `stop_carving`. `move_xy`: move the engraver head to an absolute XY target (moveXY frame). A hardware driver: the market serves its fake backend, so no instrument is needed.","measures":["carving_progress"],"adjusts":[],"actions":[{"name":"move_xy","description":"Move the engraver head to an absolute XY target (moveXY frame)"},{"name":"set_laser","description":"Set the laser power and idle bytes (setPWD frame)"},{"name":"pause_carving","description":"Pause the current carving job (pauseCarving frame)"},{"name":"stop_carving","description":"Stop carving with the controller's stop frame (the safe state; the stop command takes no deceleration input)"}],"tags":["laser","engraver","neje","serial","motion"],"backends":["fake","hardware"],"served_backend":"fake","evidence":"contract_checked","upstream":{"repo_url":"https://github.com/beniroquai/opentrons-microscope-platereader","commit":"867f54163da7e8d17db1e6aac0bbdb0105905f22","license":"MIT"},"stars":21,"install":{"openai4s":"openai4s lab add labs/beniroquai__opentrons-microscope-platereader","mhs":"mhs serve labs/beniroquai__opentrons-microscope-platereader --port 7400","mcp":"mhs serve labs/beniroquai__opentrons-microscope-platereader --mcp"}},
{"id":"labs/bennomeier__cetoni","name":"Cetoni Nemesys V4 syringe pump","device_id":"mhs://localhost/cetoni","track":"labs","category":"Liquid handling and fluidics","topic":null,"kind":"fluid.pump","vendor":"Cetoni","model":"Nemesys V4 syringe pump","mode":"hardware","risk":"R2","family":"serial","role":"device-driver","intro":"Cetoni Nemesys V4 syringe pump, adapted from bennomeier/cetoni. It reads `current_position` and `status`; sets `target_position`, `velocity`, `flow_rate` and `valve_position`; runs `pump` and `stop_pump`. `pump`: run a pump at a declared flow rate for a declared duration or volume in a declared direction, reporting the volume moved. A hardware driver: the market serves its fake backend, so no instrument is needed.","measures":["current_position","status"],"adjusts":["target_position","velocity","flow_rate","valve_position"],"actions":[{"name":"pump","description":"Run a pump at a declared flow rate for a declared duration or volume in a declared direction, reporting the volume moved."},{"name":"stop_pump","description":"Disable the drive with control word 0x06 (shutdown), the safe state; it takes no input"}],"tags":["syringe pump","cetoni","nemesys","serial","fluid"],"backends":["fake","hardware"],"served_backend":"fake","evidence":"contract_checked","upstream":{"repo_url":"https://github.com/bennomeier/cetoni","commit":"b957067d56c2698ca4b77bfe2b445af4b1d92045","license":"MIT"},"stars":0,"install":{"openai4s":"openai4s lab add labs/bennomeier__cetoni","mhs":"mhs serve labs/bennomeier__cetoni --port 7400","mcp":"mhs serve labs/bennomeier__cetoni --mcp"}},
{"id":"labs/benpruitt__tecancavro","name":"Tecan Cavro XCalibur D syringe pump","device_id":"mhs://localhost/tecancavro","track":"labs","category":"Liquid handling and fluidics","topic":null,"kind":"fluid.pump","vendor":"Tecan","model":"Cavro XCalibur D syringe pump with distribution valve","mode":"hardware","risk":"R2","family":"python-object","role":"device-driver","intro":"Tecan Cavro XCalibur D syringe pump, adapted from benpruitt/tecancavro. It reads `plunger_position`, `encoder_position`, `port` and `buffer_status`; sets `start_speed`, `top_speed`, `cutoff_speed`, `microstep` and 2 more; runs `move_plunger`, `dispense` and `stop_pump`. `move_plunger`: move the plunger to an absolute position and execute the queued command. A hardware driver: the market serves its fake backend, so no instrument is needed.","measures":["plunger_position","encoder_position","port","buffer_status"],"adjusts":["start_speed","top_speed","cutoff_speed","microstep","speed_code","slope"],"actions":[{"name":"move_plunger","description":"Move the plunger to an absolute position and execute the queued command"},{"name":"dispense","description":"Select a valve port, dispense a volume from it and execute the queued command"},{"name":"stop_pump","description":"Terminate the running command and clear the queued command chain"}],"tags":["syringe pump","cavro","xcalibur","distribution valve","serial"],"backends":["fake","hardware"],"served_backend":"fake","evidence":"contract_checked","upstream":{"repo_url":"https://github.com/benpruitt/tecancavro","commit":"5267fd2ed48b7e38d2261459cbf4a381e54c33c1","license":"MIT"},"stars":25,"install":{"openai4s":"openai4s lab add labs/benpruitt__tecancavro","mhs":"mhs serve labs/benpruitt__tecancavro --port 7400","mcp":"mhs serve labs/benpruitt__tecancavro --mcp"}},
{"id":"labs/bernardokyotoku__pydcu","name":"IDS uEye camera (pydcu ueye.camera)","device_id":"mhs://localhost/ueye-camera","track":"labs","category":"Sensors and cameras","topic":null,"kind":"sensor.camera","vendor":"IDS Imaging Development Systems","model":"uEye camera through the pydcu ctypes wrapper","mode":"hardware","risk":"R1","family":"python-object","role":"device-driver","intro":"IDS uEye camera (pydcu ueye.camera), adapted from bernardokyotoku/pydcu. It sets `width`, `height`, `image_x` and `image_y`; runs `capture`. `capture`: capture a single image from a named camera with a declared resolution and exposure and return an image artifact reference. A hardware driver: the market serves its fake backend, so no instrument is needed.","measures":[],"adjusts":["width","height","image_x","image_y"],"actions":[{"name":"capture","description":"Capture a single image from a named camera with a declared resolution and exposure and return an image artifact reference."}],"tags":["camera","ids","ueye","ctypes","imaging","aoi"],"backends":["fake"],"served_backend":"fake","evidence":"contract_checked","upstream":{"repo_url":"https://github.com/bernardokyotoku/pydcu","commit":"ff9557e701e348c4be9a01dbf7a84fd467f8c20d","license":"NOASSERTION"},"stars":2,"install":{"openai4s":"openai4s lab add labs/bernardokyotoku__pydcu","mhs":"mhs serve labs/bernardokyotoku__pydcu --port 7400","mcp":"mhs serve labs/bernardokyotoku__pydcu --mcp"}},
{"id":"labs/bgamari__harvard-syringe-pump","name":"Harvard Apparatus OEM syringe pump (Model 44)","device_id":"mhs://localhost/harvard-syringe-pump","track":"labs","category":"Liquid handling and fluidics","topic":null,"kind":"fluid.pump","vendor":"Harvard Apparatus","model":"OEM syringe pump module (Model 44)","mode":"hardware","risk":"R2","family":"serial","role":"device-driver","intro":"Harvard Apparatus OEM syringe pump (Model 44), adapted from bgamari/harvard-syringe-pump. It reads `accumulated_volume` and `version`; sets `diameter`, `flow_rate`, `target_volume` and `mode`; runs `start_pump`, `stop_pump` and `set_direction`. `start_pump`: start the pump with its configured flow rate, target volume and mode (RUN); the reply prompt reports the resulting status. A hardware driver: the market serves its fake backend, so no instrument is needed.","measures":["accumulated_volume","version"],"adjusts":["diameter","flow_rate","target_volume","mode"],"actions":[{"name":"start_pump","description":"Start the pump with its configured flow rate, target volume and mode (RUN); the reply prompt reports the resulting status"},{"name":"stop_pump","description":"Stop the pump (STP), the safe state; the reply prompt reports the resulting status"},{"name":"set_direction","description":"Select the pumping direction (DIR INF or DIR REF); the reply prompt reports the resulting status"}],"tags":["syringe pump","pump","serial","infuse","withdraw","harvard apparatus"],"backends":["fake"],"served_backend":"fake","evidence":"contract_checked","upstream":{"repo_url":"https://github.com/bgamari/harvard-syringe-pump","commit":"d28b04fae0695570f3e91f3d2871875f9b7a5211","license":"GPL-3.0"},"stars":2,"install":{"openai4s":"openai4s lab add labs/bgamari__harvard-syringe-pump","mhs":"mhs serve labs/bgamari__harvard-syringe-pump --port 7400","mcp":"mhs serve labs/bgamari__harvard-syringe-pump --mcp"}},
{"id":"labs/biologytools__bioimager","name":"Cobolt laser (PythonMicroscope)","device_id":"mhs://localhost/bioimager-cobolt","track":"labs","category":"Optics and microscopy","topic":null,"kind":"optics.laser","vendor":"Cobolt","model":"diode-pumped laser (PythonMicroscope CoboltLaser)","mode":"hardware","risk":"R3","family":"python-object","role":"device-driver","intro":"Cobolt laser (PythonMicroscope), adapted from biologytools/bioimager. It reads `power` and `status`; sets `emission` and `power_setpoint`; runs `disable_laser`. `disable_laser`: disable laser emission through the native disable(); it takes no input. A hardware driver: the market serves its fake backend, so no instrument is needed.","measures":["power","status"],"adjusts":["emission","power_setpoint"],"actions":[{"name":"disable_laser","description":"Disable laser emission through the native disable(); it takes no input"}],"tags":["laser","light-source","cobolt","serial"],"backends":["fake","hardware"],"served_backend":"fake","evidence":"contract_checked","upstream":{"repo_url":"https://github.com/biologytools/bioimager","commit":"149b45255d628cc4118b3829cd7c5b10c9c6cb07","license":"GPL-3.0"},"stars":19,"install":{"openai4s":"openai4s lab add labs/biologytools__bioimager","mhs":"mhs serve labs/biologytools__bioimager --port 7400","mcp":"mhs serve labs/biologytools__bioimager --mcp"}},
{"id":"labs/bionanomics__microscope-agent","name":"Baumer VCXU-23C GenICam camera","device_id":"mhs://localhost/baumer_camera","track":"labs","category":"Sensors and cameras","topic":null,"kind":"sensor.camera","vendor":"Baumer","model":"VCXU-23C through GenICam/GenTL (harvesters)","mode":"hardware","risk":"R1","family":"python-object","role":"device-driver","intro":"Baumer VCXU-23C GenICam camera, adapted from bionanomics/microscope-agent. It reads `exposure_time_range_us`, `gain_range`, `pixel_format` and `balance_white_auto`; sets `exposure_time_us` and `gain`; runs `capture`. `capture`: capture a single image from a named camera with a declared resolution and exposure and return an image artifact reference. A hardware driver: the market serves its fake backend, so no instrument is needed.","measures":["exposure_time_range_us","gain_range","pixel_format","balance_white_auto"],"adjusts":["exposure_time_us","gain"],"actions":[{"name":"capture","description":"Capture a single image from a named camera with a declared resolution and exposure and return an image artifact reference."}],"tags":["camera","baumer","genicam","gentl","imaging","microscope"],"backends":["fake","hardware"],"served_backend":"fake","evidence":"contract_checked","upstream":{"repo_url":"https://github.com/bionanomics/microscope-agent","commit":"3aef391397deb42f0a1b814091eb2e4b3fe8ed5a","license":"MIT"},"stars":0,"install":{"openai4s":"openai4s lab add labs/bionanomics__microscope-agent","mhs":"mhs serve labs/bionanomics__microscope-agent --port 7400","mcp":"mhs serve labs/bionanomics__microscope-agent --mcp"}},
{"id":"labs/bnl-atf__ophyd-basler","name":"Basler camera (ophyd-basler)","device_id":"mhs://localhost/basler-camera","track":"labs","category":"Sensors and cameras","topic":null,"kind":"sensor.camera","vendor":"Basler","model":"Basler camera through pypylon (ophyd-basler)","mode":"hardware","risk":"R1","family":"python-object","role":"device-driver","intro":"Basler camera (ophyd-basler), adapted from bnl-atf/ophyd-basler. It reads `camera_model`, `serial_number`, `user_defined_name`, `image_shape` and 6 more; sets `exposure_time`; runs `capture`. `capture`: capture a single image from a named camera with a declared resolution and exposure and return an image artifact reference. A hardware driver: the market serves its fake backend, so no instrument is needed.","measures":["camera_model","serial_number","user_defined_name","image_shape","pixel_level_min","pixel_level_max","active_format","payload_size","grab_timeout","mean"],"adjusts":["exposure_time"],"actions":[{"name":"capture","description":"Capture a single image from a named camera with a declared resolution and exposure and return an image artifact reference."}],"tags":["camera","basler","pypylon","ophyd","imaging"],"backends":["fake","hardware"],"served_backend":"fake","evidence":"contract_checked","upstream":{"repo_url":"https://github.com/bnl-atf/ophyd-basler","commit":"5573459ca330f931ce49a1e53f0e89b834db85cc","license":"BSD-3-Clause"},"stars":2,"install":{"openai4s":"openai4s lab add labs/bnl-atf__ophyd-basler","mhs":"mhs serve labs/bnl-atf__ophyd-basler --port 7400","mcp":"mhs serve labs/bnl-atf__ophyd-basler --mcp"}},
{"id":"labs/bsh90__smarpod-ophyd","name":"SmarAct SmarPod hexapod (gh.bsh90/smarpod-ophyd SmarSignal)","device_id":"mhs://localhost/smarpod-hexapod","track":"labs","category":"Robot arms and grippers","topic":null,"kind":"robot.arm","vendor":"SmarAct","model":"SmarPod six-axis hexapod (the upstream class opens model 10052)","mode":"hardware","risk":"R2","family":"python-object","role":"device-driver","intro":"SmarAct SmarPod hexapod (gh.bsh90/smarpod-ophyd SmarSignal), adapted from bsh90/smarpod-ophyd. It sets `pose`; runs `move_pose` and `stop_motion`. `move_pose`: move the hexapod to a six-component pose and return the pose read after the controller reports STOPPED. A hardware driver: the market serves its fake backend, so no instrument is needed.","measures":[],"adjusts":["pose"],"actions":[{"name":"move_pose","description":"Move the hexapod to a six-component pose and return the pose read after the controller reports STOPPED"},{"name":"stop_motion","description":"Stop all motion on the resource with a declared deceleration profile and report the stopping position. This capability is always cancellable=false and is exempt from rate limiting."}],"tags":["ophyd","smaract","hexapod","motion","pose","six-axis"],"backends":["fake","hardware"],"served_backend":"fake","evidence":"contract_checked","upstream":{"repo_url":"https://github.com/bsh90/smarpod-ophyd","commit":"a3d50e67618b9a15527d54339a333f199f58681d","license":"MIT"},"stars":0,"install":{"openai4s":"openai4s lab add labs/bsh90__smarpod-ophyd","mhs":"mhs serve labs/bsh90__smarpod-ophyd --port 7400","mcp":"mhs serve labs/bsh90__smarpod-ophyd --mcp"}},
{"id":"labs/burhankarahasan__thorlabs-pico","name":"Pi Pico W stepper rotation axis (stepper_controller.PicoStepperController)","device_id":"mhs://localhost/pico-stepper","track":"labs","category":"Motion control","topic":null,"kind":"motion.axis","vendor":"Raspberry Pi / burhankarahasan","model":"Pi Pico W stepper controller","mode":"hardware","risk":"R1","family":"python-object","role":"device-driver","intro":"Pi Pico W stepper rotation axis (stepper_controller.PicoStepperController), adapted from burhankarahasan/thorlabs-pico. It reads `current_rps` and `position_steps`; sets `target_rps`; runs `stop_motion`, `enable_motor`, `disable_motor` and `set_ramp_rate`. `stop_motion`: stop all motion on the resource with a declared deceleration profile and report the stopping position. This capability is always cancellable=false and is exempt from rate limiting. A hardware driver: the market serves its fake backend, so no instrument is needed.","measures":["current_rps","position_steps"],"adjusts":["target_rps"],"actions":[{"name":"stop_motion","description":"Stop all motion on the resource with a declared deceleration profile and report the stopping position. This capability is always cancellable=false and is exempt from rate limiting."},{"name":"enable_motor","description":"Enable the stepper motor driver (the native ENABLE)"},{"name":"disable_motor","description":"Disable the stepper motor driver; the upstream docstring says this cuts power (DISABLE)"},{"name":"set_ramp_rate","description":"Set the acceleration/deceleration rate in steps/sec^2 (the native RAMP)"}],"tags":["stepper","rotation","pico","serial","motion"],"backends":["fake","hardware"],"served_backend":"fake","evidence":"contract_checked","upstream":{"repo_url":"https://github.com/burhankarahasan/thorlabs-pico","commit":"91898e3a55a925ca36ce24d53997351c1b947779","license":"MIT"},"stars":0,"install":{"openai4s":"openai4s lab add labs/burhankarahasan__thorlabs-pico","mhs":"mhs serve labs/burhankarahasan__thorlabs-pico --port 7400","mcp":"mhs serve labs/burhankarahasan__thorlabs-pico --mcp"}},
{"id":"labs/capotosto__py_instrument_driver_package","name":"Keysight E4980A precision LCR meter","device_id":"mhs://localhost/e4980a","track":"labs","category":"Electronics and measurement","topic":null,"kind":"instrument","vendor":"Keysight Technologies","model":"E4980A precision LCR meter","mode":"hardware","risk":"R1","family":"scpi","role":"device-driver","intro":"Keysight E4980A precision LCR meter, adapted from capotosto/py_instrument_driver_package. It reads `aperture_mode`, `aperture_averages`, `dc_bias_autorange`, `correction_method` and 7 more; sets `measurement_function`, `frequency`, `voltage_level`, `current_level` and 5 more; runs `fetch_formatted`, `fetch_impedance`, `fetch_vac`, `fetch_iac` and 4 more. `fetch_formatted`: fetch the latest formatted measurement: primary value, secondary value and status code. A hardware driver: the market serves its fake backend, so no instrument is needed.","measures":["aperture_mode","aperture_averages","dc_bias_autorange","correction_method","data_format","ascii_long","exponent_digits","trigger_source","trigger_delay","initiate_continuous","impedance_autorange"],"adjusts":["measurement_function","frequency","voltage_level","current_level","alc","dc_bias_state","dc_bias_voltage","cable_length","impedance_range"],"actions":[{"name":"fetch_formatted","description":"Fetch the latest formatted measurement: primary value, secondary value and status code"},{"name":"fetch_impedance","description":"Fetch corrected impedance as resistance and reactance"},{"name":"fetch_vac","description":"Fetch the monitored AC voltage (:FETCh:SMONitor:VAC?)"},{"name":"fetch_iac","description":"Fetch the monitored AC current (:FETCh:SMONitor:IAC?)"},{"name":"fetch_vdc","description":"Fetch the monitored DC voltage (:FETCh:SMONitor:VDC?)"},{"name":"fetch_idc","description":"Fetch the monitored DC current (:FETCh:SMONitor:IDC?)"},{"name":"read_error","description":"Read and remove one entry of the instrument error queue (:SYSTem:ERRor?)"},{"name":"set_aperture","description":"Set the measurement time mode and averaging rate"}],"tags":["lcr meter","impedance","keysight","e4980a","scpi","visa"],"backends":["fake"],"served_backend":"fake","evidence":"contract_checked","upstream":{"repo_url":"https://github.com/capotosto/py_instrument_driver_package","commit":"1512bb3c1d76a16ada54cf042019a88710b7e12f","license":"NOASSERTION"},"stars":0,"install":{"openai4s":"openai4s lab add labs/capotosto__py_instrument_driver_package","mhs":"mhs serve labs/capotosto__py_instrument_driver_package --port 7400","mcp":"mhs serve labs/capotosto__py_instrument_driver_package --mcp"}},
{"id":"labs/cdbaird__tl-rotation-control","name":"Thorlabs Elliptec rotation stage (elliptec.rotation.Motor)","device_id":"mhs://localhost/elliptec-rotation","track":"labs","category":"Motion control","topic":null,"kind":"motion.axis","vendor":"Thorlabs","model":"Elliptec rotation stage","mode":"hardware","risk":"R1","family":"serial","role":"device-driver","intro":"Thorlabs Elliptec rotation stage (elliptec.rotation.Motor), adapted from cdbaird/tl-rotation-control. It reads `status_code` and `serial_number`; sets `position` and `step_size`; runs `home`. `home`: home the rotation stage. A hardware driver: the market serves its fake backend, so no instrument is needed.","measures":["status_code","serial_number"],"adjusts":["position","step_size"],"actions":[{"name":"home","description":"Home the rotation stage"}],"tags":["rotation stage","elliptec","serial","motion"],"backends":["fake","hardware"],"served_backend":"fake","evidence":"contract_checked","upstream":{"repo_url":"https://github.com/cdbaird/tl-rotation-control","commit":"759dc3fc58efd975c37c7ee954fa6152618cd58e","license":"NOASSERTION"},"stars":4,"install":{"openai4s":"openai4s lab add labs/cdbaird__tl-rotation-control","mhs":"mhs serve labs/cdbaird__tl-rotation-control --port 7400","mcp":"mhs serve labs/cdbaird__tl-rotation-control --mcp"}},
{"id":"labs/cetuspcr__cetus-pcr","name":"Cetus PCR low-cost thermocycler (functions.ArduinoPCR)","device_id":"mhs://localhost/cetus-pcr","track":"labs","category":"Thermal and process control","topic":null,"kind":"lab.thermal_block","vendor":"CetusPCR","model":"Cetus PCR thermocycler","mode":"hardware","risk":"R2","family":"serial","role":"device-driver","intro":"Cetus PCR low-cost thermocycler (functions.ArduinoPCR), adapted from cetuspcr/cetus-pcr. It reads `sample_temperature`, `lid_temperature`, `is_running`, `current_step` and 1 more; runs `run_protocol` and `stop_peltier`. `run_protocol`: run one temperature hold step for a number of cycles through the upstream PID experiment loop; the Peltier is driven by that loop, not by a temperature setpoint of the firmware. A hardware driver: the market serves its fake backend, so no instrument is needed.","measures":["sample_temperature","lid_temperature","is_running","current_step","current_cycle"],"adjusts":[],"actions":[{"name":"run_protocol","description":"Run one temperature hold step for a number of cycles through the upstream PID experiment loop; the Peltier is driven by that loop, not by a temperature setpoint of the firmware"},{"name":"stop_peltier","description":"Clear the experiment flag and write <peltier 0 0>, setting both Peltier PWMs to zero; it takes no input"}],"tags":["thermocycler","pcr","peltier","serial","temperature","thermal block"],"backends":["fake","hardware"],"served_backend":"fake","evidence":"contract_checked","upstream":{"repo_url":"https://github.com/cetuspcr/cetus-pcr","commit":"bbed1fd40257f5ba51bf4d9c9bc5fa328f28d7cb","license":"MIT"},"stars":2,"install":{"openai4s":"openai4s lab add labs/cetuspcr__cetus-pcr","mhs":"mhs serve labs/cetuspcr__cetus-pcr --port 7400","mcp":"mhs serve labs/cetuspcr__cetus-pcr --mcp"}},
{"id":"labs/charkster__lecroy","name":"LeCroy oscilloscope (lecroy.lecroy)","device_id":"mhs://localhost/lecroy","track":"labs","category":"Electronics and measurement","topic":null,"kind":"instrument","vendor":"LeCroy","model":"LeCroy oscilloscope (charkster/lecroy)","mode":"hardware","risk":"R1","family":"scpi","role":"device-driver","intro":"LeCroy oscilloscope (lecroy.lecroy), adapted from charkster/lecroy. It reads `trigger_source`, `trigger_type`, `analog_channels`, `digital_channels` and 1 more; sets `horizontal_scale`, `trigger_level`, `trigger_horizontal_offset`, `trigger_slope` and 1 more; runs `trigger`, `force`, `reset_instrument`, `measure` and 1 more. `trigger`: configure the edge trigger level, horizontal offset, slope and mode. A hardware driver: the market serves its fake backend, so no instrument is needed.","measures":["trigger_source","trigger_type","analog_channels","digital_channels","measurement_setup"],"adjusts":["horizontal_scale","trigger_level","trigger_horizontal_offset","trigger_slope","trigger_mode"],"actions":[{"name":"trigger","description":"Configure the edge trigger level, horizontal offset, slope and mode"},{"name":"force","description":"Force a trigger event (FORCE_TRIGGER)"},{"name":"reset_instrument","description":"Reset the instrument to its power-on defaults (*RST)"},{"name":"measure","description":"Read one numeric measurement result"},{"name":"set_grid","description":"Set the display grid mode (app.Display.GridMode)"}],"tags":["oscilloscope","lecroy","scpi","vbs","visa","instrument"],"backends":["fake","hardware"],"served_backend":"fake","evidence":"contract_checked","upstream":{"repo_url":"https://github.com/charkster/lecroy","commit":"da08c5168d8c63809d60b4c8b4b3529cbaf3de18","license":"MIT"},"stars":4,"install":{"openai4s":"openai4s lab add labs/charkster__lecroy","mhs":"mhs serve labs/charkster__lecroy --port 7400","mcp":"mhs serve labs/charkster__lecroy --mcp"}},
{"id":"labs/chemgymrl__chemgymrl","name":"ChemGymRL GenWurtzExtract-v2 extraction bench","device_id":"mhs://localhost/genwurtz-extract","track":"labs","category":"Simulation","topic":"wet-lab automation and chemistry","kind":"world.sim","vendor":"ChemGymRL","model":"GenWurtzExtract-v2","mode":"simulated","risk":"R0","family":"gymnasium","role":"sim-env","intro":"ChemGymRL GenWurtzExtract-v2 extraction bench, adapted from chemgymrl/chemgymrl. It reads `observation`, `reward`, `terminated`, `truncated` and 4 more; runs `step`, `reset` and `seed`. `step`: advance the simulated world by a bounded number of fixed timesteps, optionally applying an action for each step, and return the resulting observation and terminal flags. A simulator: the market serves it with a stand-in that needs no simulator install.","measures":["observation","reward","terminated","truncated","tick","episode","seed","info"],"adjusts":[],"actions":[{"name":"step","description":"Advance the simulated world by a bounded number of fixed timesteps, optionally applying an action for each step, and return the resulting observation and terminal flags."},{"name":"reset","description":"Reset the simulated world to a scenario start state and return the initial observation. When a seed is supplied the endpoint records it in the receipt; otherwise the endpoint's declared default seed applies."},{"name":"seed","description":"Set the seed used by the simulated world's random number generators for subsequent steps, without resetting the world. The accepted seed is echoed in the receipt."}],"tags":["chemistry","extraction","reinforcement-learning","simulation","gymnasium"],"backends":["fake"],"served_backend":"fake","evidence":"contract_checked","upstream":{"repo_url":"https://github.com/chemgymrl/chemgymrl","commit":"ab8227b6b33f13617b7e551bdf6b894df7eec68d","license":"GPL-3.0"},"stars":32,"install":{"openai4s":"openai4s lab add labs/chemgymrl__chemgymrl","mhs":"mhs serve labs/chemgymrl__chemgymrl --port 7400","mcp":"mhs serve labs/chemgymrl__chemgymrl --mcp"}},
{"id":"labs/chilaslasers__pychilaslasers","name":"Chilas Atlas/Comet tunable laser (pychilaslasers.laser:Laser)","device_id":"mhs://localhost/chilas-laser","track":"labs","category":"Optics and microscopy","topic":null,"kind":"optics.laser","vendor":"Chilas","model":"Atlas / Comet tunable laser","mode":"hardware","risk":"R2","family":"python-object","role":"device-driver","intro":"Chilas Atlas/Comet tunable laser (pychilaslasers.laser:Laser), adapted from chilaslasers/pychilaslasers. It reads `model`, `calibrated`, `diode_enabled`, `diode_current` and 4 more; sets `system_state`; runs `turn_on`, `turn_off`, `trigger_pulse`, `set_diode_current` and 1 more. `turn_on`: enable the laser system output (SYST:STAT 1). A hardware driver: the market serves its fake backend, so no instrument is needed.","measures":["model","calibrated","diode_enabled","diode_current","diode_max_current","tec_temperature","tec_target","tec_current"],"adjusts":["system_state"],"actions":[{"name":"turn_on","description":"Enable the laser system output (SYST:STAT 1)"},{"name":"turn_off","description":"Disable the laser system output and the diode emission (SYST:STAT 0, LSR:STAT 0); takes no input"},{"name":"trigger_pulse","description":"Send one trigger pulse (DRV:CYC:TRIG 1 then DRV:CYC:TRIG 0); takes no input"},{"name":"set_diode_current","description":"Set the diode drive current in mA (LSR:ILEV)"},{"name":"set_tec_target","description":"Set the TEC target temperature in degrees Celsius (TEC:TTGT)"}],"tags":["laser","tunable-laser","photonic-integrated-circuit","laser-diode","tec","serial"],"backends":["fake","hardware"],"served_backend":"fake","evidence":"contract_checked","upstream":{"repo_url":"https://github.com/chilaslasers/pychilaslasers","commit":"ec9470e0042ccb86edb196e9834508f38dbf1b1a","license":"Apache-2.0"},"stars":5,"install":{"openai4s":"openai4s lab add labs/chilaslasers__pychilaslasers","mhs":"mhs serve labs/chilaslasers__pychilaslasers --port 7400","mcp":"mhs serve labs/chilaslasers__pychilaslasers --mcp"}},
{"id":"labs/christofferkrook__laserphysics_devices","name":"Ando AQ-6315A optical spectrum analyzer","device_id":"mhs://localhost/ando-osa","track":"labs","category":"Spectroscopy","topic":null,"kind":"instrument.spectrometer","vendor":"Ando","model":"AQ-6315A","mode":"hardware","risk":"R1","family":"python-object","role":"driver-pack","intro":"Ando AQ-6315A optical spectrum analyzer, adapted from christofferkrook/laserphysics_devices. It sets `start_wl`, `stop_wl`, `center_wl`, `span` and 7 more. A hardware driver: the market serves its fake backend, so no instrument is needed.","measures":[],"adjusts":["start_wl","stop_wl","center_wl","span","averages","resolution","scale","current_trace","display_on","write_enabled","sweep_status"],"actions":[],"tags":["spectrum-analyzer","optical","gpib","spectrometer"],"backends":["fake","hardware"],"served_backend":"fake","evidence":"contract_checked","upstream":{"repo_url":"https://github.com/christofferkrook/laserphysics_devices","commit":"7af657f90b192af988610525ead54bb2cc83a11d","license":"GPL-3.0"},"stars":3,"install":{"openai4s":"openai4s lab add labs/christofferkrook__laserphysics_devices","mhs":"mhs serve labs/christofferkrook__laserphysics_devices --port 7400","mcp":"mhs serve labs/christofferkrook__laserphysics_devices --mcp"}},
{"id":"labs/clarklabucb__newerapumps_python3","name":"New Era NE-500 syringe pump","device_id":"mhs://localhost/newera-ne500","track":"labs","category":"Liquid handling and fluidics","topic":null,"kind":"fluid.pump","vendor":"New Era Pump Systems","model":"NE-500 OEM one-channel syringe pump","mode":"hardware","risk":"R2","family":"serial","role":"device-driver","intro":"New Era NE-500 syringe pump, adapted from clarklabucb/newerapumps_python3. It sets `flow_rate` and `diameter`; runs `start_pump` and `stop_pump`. `start_pump`: start the pump at the flow rate stored on the device (<n>RUN). A hardware driver: the market serves its fake backend, so no instrument is needed.","measures":[],"adjusts":["flow_rate","diameter"],"actions":[{"name":"start_pump","description":"Start the pump at the flow rate stored on the device (<n>RUN)"},{"name":"stop_pump","description":"Stop this pump and zero its rate (<n>STP, then <n>RAT0UH); it takes no input"}],"tags":["syringe pump","new era","ne-500","serial","fluid"],"backends":["fake","hardware"],"served_backend":"fake","evidence":"contract_checked","upstream":{"repo_url":"https://github.com/clarklabucb/newerapumps_python3","commit":"b8e3d0214ded43734ad22fa378b5bd408010f109","license":"NOASSERTION"},"stars":7,"install":{"openai4s":"openai4s lab add labs/clarklabucb__newerapumps_python3","mhs":"mhs serve labs/clarklabucb__newerapumps_python3 --port 7400","mcp":"mhs serve labs/clarklabucb__newerapumps_python3 --mcp"}},
{"id":"labs/cleanit__chemistrygym","name":"ChemistryLab ExtractWorld_0-v1","device_id":"mhs://localhost/extractworld","track":"labs","category":"Simulation","topic":"chemistry","kind":"world.sim","vendor":"cleanit","model":"ExtractWorld_v1","mode":"simulated","risk":"R0","family":"gymnasium","role":"sim-env","intro":"ChemistryLab ExtractWorld_0-v1, adapted from cleanit/chemistrygym. It reads `observation`, `reward`, `terminated`, `truncated` and 4 more; runs `step`, `reset` and `seed`. `step`: advance the simulated world by a bounded number of fixed timesteps, optionally applying an action for each step, and return the resulting observation and terminal flags. A simulator: the market serves it with a stand-in that needs no simulator install.","measures":["observation","reward","terminated","truncated","tick","episode","seed","info"],"adjusts":[],"actions":[{"name":"step","description":"Advance the simulated world by a bounded number of fixed timesteps, optionally applying an action for each step, and return the resulting observation and terminal flags."},{"name":"reset","description":"Reset the simulated world to a scenario start state and return the initial observation. When a seed is supplied the endpoint records it in the receipt; otherwise the endpoint's declared default seed applies."},{"name":"seed","description":"Set the seed used by the simulated world's random number generators for subsequent steps, without resetting the world. The accepted seed is echoed in the receipt."}],"tags":["chemistry","extractworld","reinforcement-learning","simulation","gymnasium","gym"],"backends":["fake"],"served_backend":"fake","evidence":"contract_checked","upstream":{"repo_url":"https://github.com/cleanit/chemistrygym","commit":"f6536cbc30f06c8d326107a68725f46bb53cff15","license":"NOASSERTION"},"stars":1,"install":{"openai4s":"openai4s lab add labs/cleanit__chemistrygym","mhs":"mhs serve labs/cleanit__chemistrygym --port 7400","mcp":"mhs serve labs/cleanit__chemistrygym --mcp"}},
{"id":"labs/complight__fisbareadybeam","name":"Fisba ReadyBeam multicolor laser module","device_id":"mhs://localhost/fisba-readybeam","track":"labs","category":"Optics and microscopy","topic":null,"kind":"light.source","vendor":"Fisba","model":"ReadyBeam multicolor laser module (RGB-1171)","mode":"hardware","risk":"R2","family":"python-object","role":"device-driver","intro":"Fisba ReadyBeam multicolor laser module, adapted from complight/fisbareadybeam. It reads `device_status` and `device_type`; sets `brightness`; runs `lasers_off`. `lasers_off`: switch every laser channel off (all three at 0 percent), the safe state of the module. A hardware driver: the market serves its fake backend, so no instrument is needed.","measures":["device_status","device_type"],"adjusts":["brightness"],"actions":[{"name":"lasers_off","description":"Switch every laser channel off (all three at 0 percent), the safe state of the module"}],"tags":["laser","light source","multicolor","rgb","serial","mecom","fisba","readybeam"],"backends":["fake","hardware"],"served_backend":"fake","evidence":"contract_checked","upstream":{"repo_url":"https://github.com/complight/fisbareadybeam","commit":"65b73a79aa1fe3eb10c809246a40e44449780492","license":"MPL-2.0"},"stars":9,"install":{"openai4s":"openai4s lab add labs/complight__fisbareadybeam","mhs":"mhs serve labs/complight__fisbareadybeam --port 7400","mcp":"mhs serve labs/complight__fisbareadybeam --mcp"}},
{"id":"labs/cooper-group-uol-robotics__panda_chemistry_gym","name":"panda_chemistry_gym Capping-v1 (PyBullet Franka Panda)","device_id":"mhs://localhost/panda-chemistry-capping","track":"labs","category":"Simulation","topic":"wet-lab automation and chemistry","kind":"world.sim","vendor":"Cooper Group UoL Robotics","model":"Capping-v1","mode":"simulated","risk":"R0","family":"gymnasium","role":"sim-env","intro":"panda_chemistry_gym Capping-v1 (PyBullet Franka Panda), adapted from cooper-group-uol-robotics/panda_chemistry_gym. It reads `observation`, `reward`, `terminated`, `truncated` and 4 more; runs `step`, `reset` and `seed`. `step`: advance the simulated world by a bounded number of fixed timesteps, optionally applying an action for each step, and return the resulting observation and terminal flags. A simulator: the market serves it with a stand-in that needs no simulator install.","measures":["observation","reward","terminated","truncated","tick","episode","seed","info"],"adjusts":[],"actions":[{"name":"step","description":"Advance the simulated world by a bounded number of fixed timesteps, optionally applying an action for each step, and return the resulting observation and terminal flags."},{"name":"reset","description":"Reset the simulated world to a scenario start state and return the initial observation. When a seed is supplied the endpoint records it in the receipt; otherwise the endpoint's declared default seed applies."},{"name":"seed","description":"Set the seed used by the simulated world's random number generators for subsequent steps, without resetting the world. The accepted seed is echoed in the receipt."}],"tags":["panda","pybullet","capping","insertion","reinforcement-learning","simulation","gymnasium"],"backends":["fake"],"served_backend":"fake","evidence":"contract_checked","upstream":{"repo_url":"https://github.com/cooper-group-uol-robotics/panda_chemistry_gym","commit":"10e82317010f662f5f8f0602e068447d170d9bb0","license":"NOASSERTION"},"stars":0,"install":{"openai4s":"openai4s lab add labs/cooper-group-uol-robotics__panda_chemistry_gym","mhs":"mhs serve labs/cooper-group-uol-robotics__panda_chemistry_gym --port 7400","mcp":"mhs serve labs/cooper-group-uol-robotics__panda_chemistry_gym --mcp"}},
{"id":"labs/croesnick__keithley-daq6510","name":"Keithley DAQ6510 data acquisition system (identity only)","device_id":"mhs://localhost/keithley-daq6510","track":"labs","category":"Electronics and measurement","topic":null,"kind":"instrument","vendor":"Keithley Instruments","model":"DAQ6510","mode":"hardware","risk":"R0","family":"scpi","role":"device-driver","intro":"Keithley DAQ6510 data acquisition system (identity only), adapted from croesnick/keithley-daq6510. It reads `idn` and `identify`. A hardware driver: the market serves its fake backend, so no instrument is needed.","measures":["idn","identify"],"adjusts":[],"actions":[],"tags":["keithley","daq6510","data acquisition","scpi","visa","identity"],"backends":["fake"],"served_backend":"fake","evidence":"contract_checked","upstream":{"repo_url":"https://github.com/croesnick/keithley-daq6510","commit":"4c800f325a14a1051819ad089e4b1fc918aab8d4","license":"MIT"},"stars":0,"install":{"openai4s":"openai4s lab add labs/croesnick__keithley-daq6510","mhs":"mhs serve labs/croesnick__keithley-daq6510 --port 7400","mcp":"mhs serve labs/croesnick__keithley-daq6510 --mcp"}},
{"id":"labs/croningp__chemputersoftware","name":"IKA RET Control Visc hotplate stirrer","device_id":"mhs://localhost/ika-ret-control-visc","track":"labs","category":"Thermal and process control","topic":null,"kind":"thermal.zone","vendor":"IKA","model":"RET Control Visc","mode":"hardware","risk":"R2","family":"python-object","role":"twin-candidate","intro":"IKA RET Control Visc hotplate stirrer, adapted from croningp/chemputersoftware. It reads `medium_temperature`, `stir_rate` and `ph`; sets `temperature_setpoint` and `stir_rate_setpoint`; runs `set_temperature`, `start_heating`, `stop_heating`, `start_stirring` and 2 more. `set_temperature`: set the target temperature of a thermal zone and optionally wait for the zone to reach the setpoint within a declared tolerance. A hardware driver: the market serves its fake backend, so no instrument is needed.","measures":["medium_temperature","stir_rate","ph"],"adjusts":["temperature_setpoint","stir_rate_setpoint"],"actions":[{"name":"set_temperature","description":"Set the target temperature of a thermal zone and optionally wait for the zone to reach the setpoint within a declared tolerance."},{"name":"start_heating","description":"Start the heater (START_1)"},{"name":"stop_heating","description":"Stop the heater (STOP_1)"},{"name":"start_stirring","description":"Start the stirrer (START_4)"},{"name":"stop_stirring","description":"Stop the stirrer (STOP_4)"},{"name":"stop_hotplate","description":"Safe state: stop the heater (STOP_1) and the stirrer (STOP_4); it takes no input"}],"tags":["hotplate","stirrer","temperature-control","serial"],"backends":["fake","hardware"],"served_backend":"fake","evidence":"contract_checked","upstream":{"repo_url":"https://github.com/croningp/chemputersoftware","commit":"0f249ce8f7c30e99bdf54f67cbd012d48e91dd3b","license":"BSD-3-Clause"},"stars":111,"install":{"openai4s":"openai4s lab add labs/croningp__chemputersoftware","mhs":"mhs serve labs/croningp__chemputersoftware --port 7400","mcp":"mhs serve labs/croningp__chemputersoftware --mcp"}},
{"id":"labs/croningp__pycont","name":"Tricontinent C3000 syringe pump (pycont.C3000Controller)","device_id":"mhs://localhost/pycont-pump","track":"labs","category":"Liquid handling and fluidics","topic":null,"kind":"fluid.pump","vendor":"Tricontinent","model":"C3000 syringe pump (pycont)","mode":"hardware","risk":"R2","family":"python-object","role":"device-driver","intro":"Tricontinent C3000 syringe pump (pycont.C3000Controller), adapted from croningp/pycont. It reads `volume`, `plunger_position`, `top_velocity`, `default_top_velocity` and 2 more; sets `valve_position`; runs `run_pump` and `terminate`. `run_pump`: run a pump at a declared flow rate for a declared duration or volume in a declared direction, reporting the volume moved. A hardware driver: the market serves its fake backend, so no instrument is needed.","measures":["volume","plunger_position","top_velocity","default_top_velocity","busy","initialized"],"adjusts":["valve_position"],"actions":[{"name":"run_pump","description":"Run a pump at a declared flow rate for a declared duration or volume in a declared direction, reporting the volume moved."},{"name":"terminate","description":"Stop the current pump or valve movement with the native terminate command"}],"tags":["syringe-pump","tricontinent","c3000","fluid","serial"],"backends":["fake","hardware"],"served_backend":"fake","evidence":"contract_checked","upstream":{"repo_url":"https://github.com/croningp/pycont","commit":"3f6dacb2a6ee82ce1806f6e471013a9ab809c0e6","license":"GPL-3.0"},"stars":9,"install":{"openai4s":"openai4s lab add labs/croningp__pycont","mhs":"mhs serve labs/croningp__pycont --port 7400","mcp":"mhs serve labs/croningp__pycont --mcp"}},
{"id":"labs/croningp__pylabware","name":"Tricontinent C3000 syringe pump (PyLabware)","device_id":"mhs://localhost/c3000-pump","track":"labs","category":"Liquid handling and fluidics","topic":null,"kind":"fluid.pump","vendor":"Tricontinent","model":"C3000","mode":"hardware","risk":"R2","family":"python-object","role":"driver-pack","intro":"Tricontinent C3000 syringe pump (PyLabware), adapted from croningp/pylabware. It reads `plunger_position`, `initialized`, `idle` and `connected`; sets `valve_position`; runs `transfer`, `move_plunger`, `move_home`, `set_speed` and 6 more. `transfer`: dispense or withdraw a number of plunger increments. A hardware driver: the market serves its fake backend, so no instrument is needed.","measures":["plunger_position","initialized","idle","connected"],"adjusts":["valve_position"],"actions":[{"name":"transfer","description":"Dispense or withdraw a number of plunger increments"},{"name":"move_plunger","description":"Move the plunger to an absolute or a relative position"},{"name":"move_home","description":"Home the plunger with the native move_home (an absolute move to position 0)"},{"name":"set_speed","description":"Set the maximum plunger velocity in increments per second"},{"name":"set_start_velocity","description":"Set the starting velocity of the plunger ramp"},{"name":"set_stop_velocity","description":"Set the cut-off velocity at the end of the plunger ramp"},{"name":"set_predefined_speed","description":"Select a predefined maximum-velocity code (SPEED_MODES)"},{"name":"set_ramp_slope","description":"Select an acceleration/deceleration ramp code (RAMP_PLOPE_MODES)"},{"name":"set_resolution_mode","description":"Select the plunger motor resolution mode N0, N1 or N2"},{"name":"stop_pump","description":"Safe state: stop the current plunger program with the native stop (T); it takes no input"}],"tags":["syringe-pump","pump","valve","serial","dt-protocol"],"backends":["fake","hardware"],"served_backend":"fake","evidence":"contract_checked","upstream":{"repo_url":"https://github.com/croningp/pylabware","commit":"fbf287c7866ad3ac1e1a3bc44845035b8ae4a7b9","license":"MIT"},"stars":15,"install":{"openai4s":"openai4s lab add labs/croningp__pylabware","mhs":"mhs serve labs/croningp__pylabware --port 7400","mcp":"mhs serve labs/croningp__pylabware --mcp"}},
{"id":"labs/cukelarter__chemyx-syringe-pump","name":"CHEMYX syringe pump","device_id":"mhs://localhost/chemyx-syringe-pump","track":"labs","category":"Liquid handling and fluidics","topic":null,"kind":"fluid.pump","vendor":"Chemyx","model":"CHEMYX syringe pump (serial)","mode":"hardware","risk":"R2","family":"serial","role":"device-driver","intro":"CHEMYX syringe pump, adapted from cukelarter/chemyx-syringe-pump. It reads `pump_status`, `parameters`, `parameter_limits`, `displaced_volume` and 1 more; sets `units`, `diameter`, `rate`, `volume` and 2 more; runs `start_run`, `pause_run`, `restart_run` and `stop_run`. `start_run`: start the configured run (start). A hardware driver: the market serves its fake backend, so no instrument is needed.","measures":["pump_status","parameters","parameter_limits","displaced_volume","elapsed_time"],"adjusts":["units","diameter","rate","volume","delay","time"],"actions":[{"name":"start_run","description":"Start the configured run (start)"},{"name":"pause_run","description":"Pause the current run (pause)"},{"name":"restart_run","description":"Restart the pump (restart)"},{"name":"stop_run","description":"Stop the pump (stop), the safe state"}],"tags":["syringe pump","pump","serial","infuse","withdraw","chemyx"],"backends":["fake","hardware"],"served_backend":"fake","evidence":"contract_checked","upstream":{"repo_url":"https://github.com/cukelarter/chemyx-syringe-pump","commit":"14011ba2aeb2fcedff7a9b1718e58dc9acefb97f","license":"NOASSERTION"},"stars":5,"install":{"openai4s":"openai4s lab add labs/cukelarter__chemyx-syringe-pump","mhs":"mhs serve labs/cukelarter__chemyx-syringe-pump --port 7400","mcp":"mhs serve labs/cukelarter__chemyx-syringe-pump --mcp"}},
{"id":"labs/czbiohub-sf__copylot","name":"Vortran Stradus laser (copylot VortranLaser)","device_id":"mhs://localhost/vortran","track":"labs","category":"Optics and microscopy","topic":null,"kind":"optics.laser","vendor":"Vortran","model":"Stradus laser","mode":"hardware","risk":"R2","family":"python-object","role":"device-driver","intro":"Vortran Stradus laser (copylot VortranLaser), adapted from czbiohub-sf/copylot. It reads `emission`, `maximum_power`, `fault_code` and `fault_description`; sets `power`, `emission_delay` and `pulse_mode`; runs `emission_on` and `emission_off`. `emission_on`: switch the laser emission on (the upstream turn_on alias, LE=1). A hardware driver: the market serves its fake backend, so no instrument is needed.","measures":["emission","maximum_power","fault_code","fault_description"],"adjusts":["power","emission_delay","pulse_mode"],"actions":[{"name":"emission_on","description":"Switch the laser emission on (the upstream turn_on alias, LE=1)"},{"name":"emission_off","description":"Switch the laser emission off (the upstream turn_off alias, LE=0); the safe state"}],"tags":["laser","vortran","stradus","emission","serial"],"backends":["fake","hardware"],"served_backend":"fake","evidence":"contract_checked","upstream":{"repo_url":"https://github.com/czbiohub-sf/copylot","commit":"eac4fdbf6ee49130d25764a486acb35a48d999db","license":"BSD-3-Clause"},"stars":8,"install":{"openai4s":"openai4s lab add labs/czbiohub-sf__copylot","mhs":"mhs serve labs/czbiohub-sf__copylot --port 7400","mcp":"mhs serve labs/czbiohub-sf__copylot --mcp"}},
{"id":"labs/czbiohub-sf__python-fish-sorter","name":"Fish Sorter pneumatic valve controller (Wago, Modbus TCP)","device_id":"mhs://localhost/fish-sorter-pneumatics","track":"labs","category":"Liquid handling and fluidics","topic":null,"kind":"fluid.valve","vendor":"Wago","model":"CoDeSys pneumatic valve controller of the Fish Sorter v2","mode":"hardware","risk":"R2","family":"python-object","role":"device-driver","intro":"Fish Sorter pneumatic valve controller (Wago, Modbus TCP), adapted from czbiohub-sf/python-fish-sorter. It reads `function_code` and `function_echo`; sets `draw_time_ms` and `expel_time_ms`; runs `set_pressure`, `set_vacuum`, `idle_atmospheric` and `safe_pneumatics`. `set_pressure`: pressure on or off: writes the upstream press_on or press_off code and waits until the controller has taken it. A hardware driver: the market serves its fake backend, so no instrument is needed.","measures":["function_code","function_echo"],"adjusts":["draw_time_ms","expel_time_ms"],"actions":[{"name":"set_pressure","description":"Pressure on or off: writes the upstream press_on or press_off code and waits until the controller has taken it"},{"name":"set_vacuum","description":"Vacuum on or off: writes the upstream vac_on or vac_off code (the controller program sets or clears its Vacuum output) and waits until the controller has taken it"},{"name":"idle_atmospheric","description":"Atmospheric idle: writes the upstream func_idle code and waits until the controller has taken it"},{"name":"safe_pneumatics","description":"Safe-state stop path: writes the func_idle code and waits until the controller has taken it; takes no input"}],"tags":["fish sorter","pneumatics","pressure","vacuum","valve","wago","modbus"],"backends":["fake","hardware"],"served_backend":"fake","evidence":"contract_checked","upstream":{"repo_url":"https://github.com/czbiohub-sf/python-fish-sorter","commit":"a8f2409fa6924b1aed83e1224c34a0528b5cb002","license":"BSD-3-Clause"},"stars":3,"install":{"openai4s":"openai4s lab add labs/czbiohub-sf__python-fish-sorter","mhs":"mhs serve labs/czbiohub-sf__python-fish-sorter --port 7400","mcp":"mhs serve labs/czbiohub-sf__python-fish-sorter --mcp"}},
{"id":"labs/czbiohub-sf__reglo-icc-pump-control","name":"Masterflex Ismatec Reglo ICC peristaltic pump","device_id":"mhs://localhost/reglo-icc-pump","track":"labs","category":"Liquid handling and fluidics","topic":null,"kind":"fluid.pump","vendor":"Masterflex (Avantor)","model":"Ismatec Reglo ICC digital peristaltic pump","mode":"hardware","risk":"R2","family":"python-object","role":"device-driver","intro":"Masterflex Ismatec Reglo ICC peristaltic pump, adapted from czbiohub-sf/reglo-icc-pump-control. It reads `max_flow_rate`, `running`, `channel_count`, `pump_address` and 4 more; sets `tubing_id`; runs `pump` and `stop_pump`. `pump`: run a pump at a declared flow rate for a declared duration or volume in a declared direction, reporting the volume moved. A hardware driver: the market serves its fake backend, so no instrument is needed.","measures":["max_flow_rate","running","channel_count","pump_address","serial_number","model_number","software_version","head_code"],"adjusts":["tubing_id"],"actions":[{"name":"pump","description":"Run a pump at a declared flow rate for a declared duration or volume in a declared direction, reporting the volume moved."},{"name":"stop_pump","description":"Stop every channel of the pump (the native stop, the safe state); it takes no input"}],"tags":["peristaltic pump","reglo icc","ismatec","serial","fluid"],"backends":["fake","hardware"],"served_backend":"fake","evidence":"contract_checked","upstream":{"repo_url":"https://github.com/czbiohub-sf/reglo-icc-pump-control","commit":"af0f8648a56512cad67af26068830e65754ead5e","license":"BSD-3-Clause"},"stars":1,"install":{"openai4s":"openai4s lab add labs/czbiohub-sf__reglo-icc-pump-control","mhs":"mhs serve labs/czbiohub-sf__reglo-icc-pump-control --port 7400","mcp":"mhs serve labs/czbiohub-sf__reglo-icc-pump-control --mcp"}},
{"id":"labs/daanwielens__research-python","name":"Lake Shore Model 332 temperature controller","device_id":"mhs://localhost/lakeshore332","track":"labs","category":"Thermal and process control","topic":null,"kind":"thermal.zone","vendor":"Lake Shore Cryotronics","model":"Model 332 temperature controller","mode":"hardware","risk":"R2","family":"scpi","role":"driver-pack","intro":"Lake Shore Model 332 temperature controller, adapted from daanwielens/research-python. It reads `temperature`, `temperature_celsius`, `heater_output` and `pid`; sets `setpoint`, `heater_range` and `manual_output`; runs `set_pid` and `heater_off`. `set_pid`: set the loop-1 proportional, integral and derivative terms. A hardware driver: the market serves its fake backend, so no instrument is needed.","measures":["temperature","temperature_celsius","heater_output","pid"],"adjusts":["setpoint","heater_range","manual_output"],"actions":[{"name":"set_pid","description":"Set the loop-1 proportional, integral and derivative terms"},{"name":"heater_off","description":"Set the heater range to 0 (off) as the declared safe state"}],"tags":["temperature controller","lakeshore","model 332","pid","scpi","gpib"],"backends":["fake"],"served_backend":"fake","evidence":"contract_checked","upstream":{"repo_url":"https://github.com/daanwielens/research-python","commit":"c17811c9b43bc581f5523f1e9eafd9dce1fdb9d2","license":"NOASSERTION"},"stars":5,"install":{"openai4s":"openai4s lab add labs/daanwielens__research-python","mhs":"mhs serve labs/daanwielens__research-python --port 7400","mcp":"mhs serve labs/daanwielens__research-python --mcp"}},
{"id":"labs/danielballan__caproto-rpi","name":"Raspberry Pi hat IOC (caproto EPICS Channel Access)","device_id":"mhs://localhost/caproto-rpi","track":"labs","category":"Other devices","topic":null,"kind":"device","vendor":"danielballan","model":"caproto-rpi","mode":"hardware","risk":"R1","family":"tag-bridge","role":"device-driver","intro":"Raspberry Pi hat IOC (caproto EPICS Channel Access), adapted from danielballan/caproto-rpi. It sets `hat_state`; runs `hat_on` and `all_off`. `hat_on`: drive the hat pins HIGH through the state PV and confirm the state PV reads 1. A hardware driver: the market serves its fake backend, so no instrument is needed.","measures":[],"adjusts":["hat_state"],"actions":[{"name":"hat_on","description":"Drive the hat pins HIGH through the state PV and confirm the state PV reads 1"},{"name":"all_off","description":"Write state 0 (every configured hat pin LOW) and confirm it reads back; the declared stop"}],"tags":["epics","epics-ca","caproto","raspberry-pi","gpio","led","tag-bridge"],"backends":["fake","hardware"],"served_backend":"fake","evidence":"contract_checked","upstream":{"repo_url":"https://github.com/danielballan/caproto-rpi","commit":"3642405070a513369de87c7c684962cbd148bcff","license":"NOASSERTION"},"stars":2,"install":{"openai4s":"openai4s lab add labs/danielballan__caproto-rpi","mhs":"mhs serve labs/danielballan__caproto-rpi --port 7400","mcp":"mhs serve labs/danielballan__caproto-rpi --mcp"}},
{"id":"labs/davehe929__scopebench-mcp","name":"RIGOL DHO800/DHO900 oscilloscope","device_id":"mhs://localhost/dho804d","track":"labs","category":"Electronics and measurement","topic":null,"kind":"instrument","vendor":"RIGOL Technologies","model":"DHO800/DHO900 series oscilloscope","mode":"hardware","risk":"R1","family":"scpi","role":"device-driver","intro":"RIGOL DHO800/DHO900 oscilloscope, adapted from davehe929/scopebench-mcp. It reads `trigger_status`, `frequency`, `period`, `vpp` and 2 more; sets `channel_coupling`, `channel_scale`, `channel_offset`, `trigger_level` and 2 more; runs `measure`. `measure`: read one instrument-side scalar measurement of one analog channel. A hardware driver: the market serves its fake backend, so no instrument is needed.","measures":["trigger_status","frequency","period","vpp","vrms","mean"],"adjusts":["channel_coupling","channel_scale","channel_offset","trigger_level","timebase_scale","timebase_offset"],"actions":[{"name":"measure","description":"Read one instrument-side scalar measurement of one analog channel"}],"tags":["oscilloscope","rigol","dho800","dho804d","scpi"],"backends":["fake"],"served_backend":"fake","evidence":"contract_checked","upstream":{"repo_url":"https://github.com/davehe929/scopebench-mcp","commit":"3f0abc87a2839e816744a7d867c1ef06ed721f7a","license":"Apache-2.0"},"stars":2,"install":{"openai4s":"openai4s lab add labs/davehe929__scopebench-mcp","mhs":"mhs serve labs/davehe929__scopebench-mcp --port 7400","mcp":"mhs serve labs/davehe929__scopebench-mcp --mcp"}},
{"id":"labs/davidlutton__labtoolkit","name":"Agilent PSA spectrum analyser (labtoolkit AgilentE44nn)","device_id":"mhs://localhost/agilent-e44nn","track":"labs","category":"Electronics and measurement","topic":null,"kind":"instrument","vendor":"Agilent Technologies","model":"PSA spectrum analyser (E4440A to E4448A)","mode":"hardware","risk":"R1","family":"python-object","role":"driver-pack","intro":"Agilent PSA spectrum analyser (labtoolkit AgilentE44nn), adapted from davidlutton/labtoolkit. It reads `identification`; sets `frequency_center`, `frequency_span`, `sweep_points`, `resolution_bandwidth` and 2 more; runs `stop_sweep`. `stop_sweep`: stop continuous sweeping (the native stop, INIT:CONTinuous OFF); it takes no input. A hardware driver: the market serves its fake backend, so no instrument is needed.","measures":["identification"],"adjusts":["frequency_center","frequency_span","sweep_points","resolution_bandwidth","video_bandwidth","continuous"],"actions":[{"name":"stop_sweep","description":"Stop continuous sweeping (the native stop, INIT:CONTinuous OFF); it takes no input"}],"tags":["spectrum-analyser","psa","scpi","sweep","spectrum"],"backends":["fake","hardware"],"served_backend":"fake","evidence":"contract_checked","upstream":{"repo_url":"https://github.com/davidlutton/labtoolkit","commit":"1c27b35490002822f9860f45a86235cce949c172","license":"MIT"},"stars":28,"install":{"openai4s":"openai4s lab add labs/davidlutton__labtoolkit","mhs":"mhs serve labs/davidlutton__labtoolkit --port 7400","mcp":"mhs serve labs/davidlutton__labtoolkit --mcp"}},
{"id":"labs/deepmodeling__uni-lab-os","name":"Runze syringe pump","device_id":"mhs://localhost/runze-syringe-pump","track":"labs","category":"Liquid handling and fluidics","topic":null,"kind":"fluid.pump","vendor":"Runze","model":"syringe pump (RunzeSyringePump)","mode":"hardware","risk":"R2","family":"python-object","role":"driver-pack","intro":"Runze syringe pump, adapted from deepmodeling/uni-lab-os. It reads `plunger_position`, `velocity_grade`, `velocity_init`, `velocity_end` and 7 more; sets `position` and `max_velocity`; runs `pump` and `stop_pump`. `pump`: run a pump at a declared flow rate for a declared duration or volume in a declared direction, reporting the volume moved. A hardware driver: the market serves its fake backend, so no instrument is needed.","measures":["plunger_position","velocity_grade","velocity_init","velocity_end","valve_position","status","command_buffer_status","backlash_position","aux_input_status_1","aux_input_status_2","software_version"],"adjusts":["position","max_velocity"],"actions":[{"name":"pump","description":"Run a pump at a declared flow rate for a declared duration or volume in a declared direction, reporting the volume moved."},{"name":"stop_pump","description":"Send the protocol T stop and confirm Idle; takes no input"}],"tags":["syringe pump","serial","fluid","runze","pump"],"backends":["fake","hardware"],"served_backend":"fake","evidence":"contract_checked","upstream":{"repo_url":"https://github.com/deepmodeling/uni-lab-os","commit":"43923ec9473e2f6d33d3ca1ebca4bf4d507e06b2","license":"GPL-3.0"},"stars":178,"install":{"openai4s":"openai4s lab add labs/deepmodeling__uni-lab-os","mhs":"mhs serve labs/deepmodeling__uni-lab-os --port 7400","mcp":"mhs serve labs/deepmodeling__uni-lab-os --mcp"}},
{"id":"labs/dennis-van-gils__dvg_arduino_lock-in_amp","name":"DvG Arduino lock-in amplifier (Alia_protocol_serial.Alia)","device_id":"mhs://localhost/alia-lockin","track":"labs","category":"Electronics and measurement","topic":null,"kind":"instrument","vendor":"Dennis van Gils","model":"DvG Arduino lock-in amplifier (Alia)","mode":"hardware","risk":"R1","family":"python-object","role":"device-driver","intro":"DvG Arduino lock-in amplifier (Alia_protocol_serial.Alia), adapted from dennis-van-gils/dvg_arduino_lock-in_amp. It reads `ref_clipping_high`, `ref_clipping_low`, `adc_autocal_valid`, `adc_autocal_gaincorr` and 4 more; sets `ref_waveform`, `ref_freq`, `ref_offset`, `ref_amplitude` and 1 more; runs `start_acquisition` and `stop_acquisition`. `start_acquisition`: start the lock-in acquisition (the native on command); it takes no input. A hardware driver: the market serves its fake backend, so no instrument is needed.","measures":["ref_clipping_high","ref_clipping_low","adc_autocal_valid","adc_autocal_gaincorr","adc_autocal_offsetcorr","sampling_rate","block_size","running"],"adjusts":["ref_waveform","ref_freq","ref_offset","ref_amplitude","ref_amplitude_rms"],"actions":[{"name":"start_acquisition","description":"Start the lock-in acquisition (the native on command); it takes no input"},{"name":"stop_acquisition","description":"Stop the lock-in acquisition (the native off command, the safe state); it takes no input"}],"tags":["lock-in","lock-in-amplifier","signal-generation","adc","serial"],"backends":["fake","hardware"],"served_backend":"fake","evidence":"contract_checked","upstream":{"repo_url":"https://github.com/dennis-van-gils/dvg_arduino_lock-in_amp","commit":"64c0f18f9111eef2fc4feb10466c4dd9a39fb516","license":"MIT"},"stars":33,"install":{"openai4s":"openai4s lab add labs/dennis-van-gils__dvg_arduino_lock-in_amp","mhs":"mhs serve labs/dennis-van-gils__dvg_arduino_lock-in_amp --port 7400","mcp":"mhs serve labs/dennis-van-gils__dvg_arduino_lock-in_amp --mcp"}},
{"id":"labs/dgretton__pyhamilton","name":"Hamilton liquid handler (pyhamilton.HamiltonInterface)","device_id":"mhs://localhost/pyhamilton","track":"labs","category":"Liquid handling and fluidics","topic":null,"kind":"lab.liquid_handler","vendor":"Hamilton","model":"STAR / STARlet (pyhamilton HamiltonInterface)","mode":"hardware","risk":"R2","family":"python-object","role":"device-driver","intro":"Hamilton liquid handler (pyhamilton.HamiltonInterface), adapted from dgretton/pyhamilton. It reads `is_open` and `server_exited`; runs `initialize`, `aspirate`, `dispense`, `move_plate` and 3 more. `initialize`: initialize the Hamilton robot (the upstream INITIALIZE command) and wait for its response. A hardware driver: the market serves its fake backend, so no instrument is needed.","measures":["is_open","server_exited"],"adjusts":[],"actions":[{"name":"initialize","description":"Initialize the Hamilton robot (the upstream INITIALIZE command) and wait for its response"},{"name":"aspirate","description":"Aspirate a volume from one well with one pipetting channel and the named Hamilton liquid class; it does not attach or eject a tip"},{"name":"dispense","description":"Dispense a volume into one well with one pipetting channel and the named Hamilton liquid class; it does not attach or eject a tip"},{"name":"move_plate","description":"Move a plate from one Hamilton sequence to another with the iSWAP (ISWAP_GET then ISWAP_PLACE)"},{"name":"set_labware_property","description":"Set one property of one labware item in the Hamilton run (the upstream SET_LABWARE_PROPERTY command)"},{"name":"shutdown_interface","description":"Stop the Hamilton interface (the native stop): signal the server thread and terminate the OEM process; it takes no input"},{"name":"start_interface","description":"Start the Hamilton interface again after a safety reset (the declared re-enable): HamiltonInterface.start() relaunches the OEM process (or the server or simulation process) that the stop terminated; the clone does not say whether that start moves the instrument. It takes no input, is refused while the e-stop is latched and is never run by the reset"}],"tags":["liquid-handler","hamilton","venus","iswap","pipetting"],"backends":["fake","hardware"],"served_backend":"fake","evidence":"contract_checked","upstream":{"repo_url":"https://github.com/dgretton/pyhamilton","commit":"65938d05cc8f5a5a0d3186648add560439ab1cdd","license":"MIT"},"stars":192,"install":{"openai4s":"openai4s lab add labs/dgretton__pyhamilton","mhs":"mhs serve labs/dgretton__pyhamilton --port 7400","mcp":"mhs serve labs/dgretton__pyhamilton --mcp"}},
{"id":"labs/diamondlightsource__dodal","name":"DECTRIS Eiger area detector (dodal)","device_id":"mhs://localhost/eiger-detector","track":"labs","category":"Electronics and measurement","topic":null,"kind":"instrument","vendor":null,"model":"EigerDetector (dodal)","mode":"hardware","risk":"R1","family":"ophyd","role":"device-driver","intro":"DECTRIS Eiger area detector (dodal), adapted from diamondlightsource/dodal. It reads `armed`, `bit_depth`, `stale_params` and `acquisition_id`; runs `stage`, `unstage`, `disarm` and `files`. `stage`: arm the Eiger for one externally triggered collection with the operator's DetectorParams: stage() runs the upstream arming chain unless the detector is armed. A hardware driver: the market serves its fake backend, so no instrument is needed.","measures":["armed","bit_depth","stale_params","acquisition_id"],"adjusts":[],"actions":[{"name":"stage","description":"Arm the Eiger for one externally triggered collection with the operator's DetectorParams: stage() runs the upstream arming chain unless the detector is armed"},{"name":"unstage","description":"End the collection this connection staged: unstage() waits for the Odin writers, disarms the camera, checks Odin and disables ROI mode; without a staged collection only disarm_detector runs (staged false)"},{"name":"disarm","description":"Clear the Eiger camera acquire (disarm_detector) and report the resulting armed state"},{"name":"files","description":"Publish, as one bounded ZIP artifact, the .h5 files Odin wrote for the acquisition id it reports: the regular files directly in DetectorParams.directory whose names start with the id and an underscore, once the detector is neither arming nor armed (is_armed) and every Odin writer reports Writing_RBV 0"}],"tags":["ophyd","epics","eiger","odin","area-detector","acquisition","hdf5"],"backends":["fake","hardware"],"served_backend":"fake","evidence":"contract_checked","upstream":{"repo_url":"https://github.com/diamondlightsource/dodal","commit":"f96fef4e72a734de6bb523b4229410254e7e8eab","license":"Apache-2.0"},"stars":5,"install":{"openai4s":"openai4s lab add labs/diamondlightsource__dodal","mhs":"mhs serve labs/diamondlightsource__dodal --port 7400","mcp":"mhs serve labs/diamondlightsource__dodal --mcp"}},
{"id":"labs/drkirkm__syringepump","name":"Harvard Apparatus OEM syringe pump","device_id":"mhs://localhost/harvard-oem-syringe-pump","track":"labs","category":"Liquid handling and fluidics","topic":null,"kind":"fluid.pump","vendor":"Harvard Apparatus","model":"OEM syringe pump","mode":"hardware","risk":"R2","family":"serial","role":"device-driver","intro":"Harvard Apparatus OEM syringe pump, adapted from drkirkm/syringepump. It reads `pumping`; sets `flow_rate` and `diameter`; runs `run_pump` and `stop_all`. `run_pump`: start the configured pump address at the flow rate it was configured with. A hardware driver: the market serves its fake backend, so no instrument is needed.","measures":["pumping"],"adjusts":["flow_rate","diameter"],"actions":[{"name":"run_pump","description":"Start the configured pump address at the flow rate it was configured with"},{"name":"stop_all","description":"Stop all three pump addresses with the STP, 01STP and 02STP commands"}],"tags":["syringe pump","harvard apparatus","serial","infuse","dispense"],"backends":["fake","hardware"],"served_backend":"fake","evidence":"contract_checked","upstream":{"repo_url":"https://github.com/drkirkm/syringepump","commit":"6a39723535c339f24b0eeb7332c2dfe96e5a7afb","license":"CC0-1.0"},"stars":1,"install":{"openai4s":"openai4s lab add labs/drkirkm__syringepump","mhs":"mhs serve labs/drkirkm__syringepump --port 7400","mcp":"mhs serve labs/drkirkm__syringepump --mcp"}},
{"id":"labs/drmcnelson__linear-ccd-with-ltspice-kicad-firmware-and-python-library","name":"TCD1304 linear CCD (TCD1304Rev2Controller)","device_id":"mhs://localhost/tcd1304-linear-ccd","track":"labs","category":"Spectroscopy","topic":null,"kind":"instrument.spectrometer","vendor":"Mitchell C. Nelson","model":"TCD1304 linear CCD controller","mode":"hardware","risk":"R0","family":"serial","role":"device-driver","intro":"TCD1304 linear CCD (TCD1304Rev2Controller), adapted from drmcnelson/linear-ccd-with-ltspice-kicad-firmware-and-python-library. It reads `identifier`, `configuration`, `pixel_count`, `dark_pixel_count` and 1 more; runs `measure_intensity` and `set_holdoff`. `measure_intensity`: measure optical or radiant intensity at a declared wavelength or channel and return the value with its unit and integration time. A hardware driver: the market serves its fake backend, so no instrument is needed.","measures":["identifier","configuration","pixel_count","dark_pixel_count","sensor"],"adjusts":[],"actions":[{"name":"measure_intensity","description":"Measure optical or radiant intensity at a declared wavelength or channel and return the value with its unit and integration time."},{"name":"set_holdoff","description":"Set the firmware sync holdoff time, the delay the firmware's 'set holdoff usecs' command configures (help.txt:82)"}],"tags":["linear ccd","tcd1304","spectrometer","spectroscopy","serial"],"backends":["fake","hardware"],"served_backend":"fake","evidence":"contract_checked","upstream":{"repo_url":"https://github.com/drmcnelson/linear-ccd-with-ltspice-kicad-firmware-and-python-library","commit":"fcda5364d1ec63bc1b0e17efc40508b7fdef76b3","license":"CC-BY-NC-SA-4.0"},"stars":36,"install":{"openai4s":"openai4s lab add labs/drmcnelson__linear-ccd-with-ltspice-kicad-firmware-and-python-library","mhs":"mhs serve labs/drmcnelson__linear-ccd-with-ltspice-kicad-firmware-and-python-library --port 7400","mcp":"mhs serve labs/drmcnelson__linear-ccd-with-ltspice-kicad-firmware-and-python-library --mcp"}},
{"id":"labs/e-lab-sfsu__robocam3.1","name":"RoboCam 3.1 camera (robocam.camera:Camera)","device_id":"mhs://localhost/robocam","track":"labs","category":"Sensors and cameras","topic":null,"kind":"sensor.camera","vendor":"e-lab-sfsu","model":"RoboCam 3.1 camera","mode":"hardware","risk":"R1","family":"python-object","role":"device-driver","intro":"RoboCam 3.1 camera (robocam.camera:Camera), adapted from e-lab-sfsu/robocam3.1. It reads `running`, `resolution`, `supported_resolutions`, `capture_lock_timeouts` and 2 more; sets `exposure_us`, `gain`, `ae_enabled`, `hqi` and 3 more; runs `reset_capture_stats`. `reset_capture_stats`: reset the capture failure counters and return the zeroed counts. A hardware driver: the market serves its fake backend, so no instrument is needed.","measures":["running","resolution","supported_resolutions","capture_lock_timeouts","capture_sdk_errors","dropped_frames"],"adjusts":["exposure_us","gain","ae_enabled","hqi","usb_bandwidth_percent","offset","sensor_mode_index"],"actions":[{"name":"reset_capture_stats","description":"Reset the capture failure counters and return the zeroed counts"}],"tags":["camera","imaging","well-plate","playerone","picamera2","opencv"],"backends":["fake","hardware"],"served_backend":"fake","evidence":"contract_checked","upstream":{"repo_url":"https://github.com/e-lab-sfsu/robocam3.1","commit":"cc402f32f7b781c550a94dc9f78e54df3de7fd53","license":"MIT"},"stars":1,"install":{"openai4s":"openai4s lab add labs/e-lab-sfsu__robocam3.1","mhs":"mhs serve labs/e-lab-sfsu__robocam3.1 --port 7400","mcp":"mhs serve labs/e-lab-sfsu__robocam3.1 --mcp"}},
{"id":"labs/eta-systems__labor-gpib","name":"Rohde & Schwarz NGMO2 channel A","device_id":"mhs://localhost/ngmo2","track":"labs","category":"Electronics and measurement","topic":null,"kind":"instrument.smu","vendor":"Rohde & Schwarz","model":"NGMO2 dual-channel analyzer/power supply","mode":"hardware","risk":"R2","family":"scpi","role":"device-driver","intro":"Rohde & Schwarz NGMO2 channel A, adapted from eta-systems/labor-gpib. It reads `identity` and `status_byte`; sets `voltage_setpoint`, `current_limit`, `measurement_interval`, `averaging_samples` and 5 more; runs `measure_voltage`, `measure_current`, `output_off` and `scpi_rst`. `measure_voltage`: measure a DC or RMS voltage on a declared channel or terminal pair and return the value with its sampling timestamp and measurement range. A hardware driver: the market serves its fake backend, so no instrument is needed.","measures":["identity","status_byte"],"adjusts":["voltage_setpoint","current_limit","measurement_interval","averaging_samples","output_enabled","sense_function","current_range","output_format","display_enabled"],"actions":[{"name":"measure_voltage","description":"Measure a DC or RMS voltage on a declared channel or terminal pair and return the value with its sampling timestamp and measurement range."},{"name":"measure_current","description":"Measure current on a declared channel and return the value with its timestamp and range."},{"name":"output_off","description":"Send :OUT:A OFF: the safe state, with no input and no read-back wait"},{"name":"scpi_rst","description":"Call device.reset (src/devices/rohde_schwarz_ngmo2.py:85-86). rst writes *RST (lines 81-83) and cls writes *CLS (lines 30-31). The comment on rst says this returns the supply to the *RST default conditions and does not state the output, the voltage, the current or the averaging. An ordinary command: the safety reset does not call it, and it is not a re-enable or a safe-state action. The three cached set points are refused before device.reset is called, including when that call raises, until this driver writes them. The operator confirms the instrument, including whether an output is enabled."}],"tags":["power supply","source measure unit","ngmo2","gpib","prologix","channel a"],"backends":["fake","hardware"],"served_backend":"fake","evidence":"contract_checked","upstream":{"repo_url":"https://github.com/eta-systems/labor-gpib","commit":"d5fe1b230344452bc32b756fc14567acde683c74","license":"NOASSERTION"},"stars":2,"install":{"openai4s":"openai4s lab add labs/eta-systems__labor-gpib","mhs":"mhs serve labs/eta-systems__labor-gpib --port 7400","mcp":"mhs serve labs/eta-systems__labor-gpib --mcp"}},
{"id":"labs/ethanjli__liquid-handling-robotics","name":"Liquid-handling robot x-axis (sample stage)","device_id":"mhs://localhost/lhr-x-axis","track":"labs","category":"Motion control","topic":null,"kind":"motion.axis","vendor":"ethanjli","model":"liquid-handling-robotics x-axis","mode":"hardware","risk":"R2","family":"python-object","role":"device-driver","intro":"Liquid-handling robot x-axis (sample stage), adapted from ethanjli/liquid-handling-robotics. It reads `physical_position` and `sensor_position`; runs `move_by_physical_delta` and `stop_axis`. `move_by_physical_delta`: move the x-axis by a relative physical displacement along its travel. A hardware driver: the market serves its fake backend, so no instrument is needed.","measures":["physical_position","sensor_position"],"adjusts":[],"actions":[{"name":"move_by_physical_delta","description":"Move the x-axis by a relative physical displacement along its travel"},{"name":"stop_axis","description":"Brake the x-axis by setting every motor duty limit to zero"}],"tags":["liquid handling","robot","linear actuator","x-axis","arduino","asyncio"],"backends":["fake","hardware"],"served_backend":"fake","evidence":"contract_checked","upstream":{"repo_url":"https://github.com/ethanjli/liquid-handling-robotics","commit":"fc7043558072e77981206ae123dfd3a24ef89029","license":"BSD-3-Clause"},"stars":1,"install":{"openai4s":"openai4s lab add labs/ethanjli__liquid-handling-robotics","mhs":"mhs serve labs/ethanjli__liquid-handling-robotics --port 7400","mcp":"mhs serve labs/ethanjli__liquid-handling-robotics --mcp"}},
{"id":"labs/f9r__ihcpmslib-wrappers","name":"INHECO SCILA CO2 incubator (ihcWrappers.scila.ScilaWrapper)","device_id":"mhs://localhost/scila","track":"labs","category":"Thermal and process control","topic":null,"kind":"instrument.incubator","vendor":"INHECO","model":"SCILA","mode":"hardware","risk":"R2","family":"python-object","role":"device-driver","intro":"INHECO SCILA CO2 incubator (ihcWrappers.scila.ScilaWrapper), adapted from f9r/ihcpmslib-wrappers. It reads `device_name`, `firmware_version`, `state`, `current_temperature` and 8 more; sets `auto_boost_co2`; runs `set_temperature` and `stop_incubation`. `set_temperature`: set the target temperature of a thermal zone and optionally wait for the zone to reach the setpoint within a declared tolerance. A hardware driver: the market serves its fake backend, so no instrument is needed.","measures":["device_name","firmware_version","state","current_temperature","target_temperature","temperature_control","boost_state","co2_flow_status","liquid_level","door_status","valve_status","measure_temperature"],"adjusts":["auto_boost_co2"],"actions":[{"name":"set_temperature","description":"Set the target temperature of a thermal zone and optionally wait for the zone to reach the setpoint within a declared tolerance."},{"name":"stop_incubation","description":"Stop temperature control and both CO2 flow paths (the safe state); it takes no input"}],"tags":["incubator","co2","temperature-control","inheco","pythonnet"],"backends":["fake","hardware"],"served_backend":"fake","evidence":"contract_checked","upstream":{"repo_url":"https://github.com/f9r/ihcpmslib-wrappers","commit":"3e6bd4c47f395bc37122e0e814184c540a99dd4e","license":"BSD-2-Clause"},"stars":3,"install":{"openai4s":"openai4s lab add labs/f9r__ihcpmslib-wrappers","mhs":"mhs serve labs/f9r__ihcpmslib-wrappers --port 7400","mcp":"mhs serve labs/f9r__ihcpmslib-wrappers --mcp"}},
{"id":"labs/feifanphys__instrumentdriver","name":"Keysight N5182B signal generator","device_id":"mhs://localhost/n5182b","track":"labs","category":"Electronics and measurement","topic":null,"kind":"instrument","vendor":"Keysight Technologies","model":"N5182B","mode":"hardware","risk":"R1","family":"scpi","role":"device-driver","intro":"Keysight N5182B signal generator, adapted from feifanphys/instrumentdriver. It sets `frequency`, `power` and `output`; runs `reset`. `reset`: reset the signal generator (SCPI *RST). A hardware driver: the market serves its fake backend, so no instrument is needed.","measures":[],"adjusts":["frequency","power","output"],"actions":[{"name":"reset","description":"Reset the signal generator (SCPI *RST)"}],"tags":["signal generator","rf source","keysight","n5182b","scpi"],"backends":["fake"],"served_backend":"fake","evidence":"contract_checked","upstream":{"repo_url":"https://github.com/feifanphys/instrumentdriver","commit":"749c845066b5a0e5ac30a1f9f55ff36e76ca24e1","license":"NOASSERTION"},"stars":1,"install":{"openai4s":"openai4s lab add labs/feifanphys__instrumentdriver","mhs":"mhs serve labs/feifanphys__instrumentdriver --port 7400","mcp":"mhs serve labs/feifanphys__instrumentdriver --mcp"}},
{"id":"labs/festo-se__festo-dev-applied-motion","name":"Festo FPosBAPI gantry (FPosBAPIClient)","device_id":"mhs://localhost/festo-gantry","track":"labs","category":"Robot arms and grippers","topic":null,"kind":"robot.arm","vendor":"Festo","model":"CECC-X PLC with the FPosBAPI CoDeSys server","mode":"hardware","risk":"R2","family":"python-object","role":"device-driver","intro":"Festo FPosBAPI gantry (FPosBAPIClient), adapted from festo-se/festo-dev-applied-motion. It reads `position`, `sys_status`, `error_active`, `error_text` and 1 more; sets `global_speed`; runs `home`, `cartesian_pose` and `stop`. `home`: home all axes with one PLC HOME command; the PLC homes X, Y and Z together. A hardware driver: the market serves its fake backend, so no instrument is needed.","measures":["position","sys_status","error_active","error_text","fieldbus_error"],"adjusts":["global_speed"],"actions":[{"name":"home","description":"Home all axes with one PLC HOME command; the PLC homes X, Y and Z together"},{"name":"cartesian_pose","description":"Move the tool centre point to a Cartesian position and orientation in a named frame. The endpoint solves inverse kinematics; an unreachable target is rejected before motion."},{"name":"stop","description":"Halt the current motion with the PLC HALT command (the safe state); it takes no input"}],"tags":["gantry","cartesian","motion","fposbapi","cecc-x","plc"],"backends":["fake","hardware"],"served_backend":"fake","evidence":"contract_checked","upstream":{"repo_url":"https://github.com/festo-se/festo-dev-applied-motion","commit":"c1926f02d8e69cec7f8d265dba20e9e5b474f425","license":"MIT"},"stars":1,"install":{"openai4s":"openai4s lab add labs/festo-se__festo-dev-applied-motion","mhs":"mhs serve labs/festo-se__festo-dev-applied-motion --port 7400","mcp":"mhs serve labs/festo-se__festo-dev-applied-motion --mcp"}},
{"id":"labs/festo-se__festo-dev-fluid-control","name":"Festo pressure-over-liquid instrument (FluidControlSession)","device_id":"mhs://localhost/festo-fluid-control","track":"labs","category":"Liquid handling and fluidics","topic":null,"kind":"lab.liquid_handler","vendor":"Festo","model":"pressure-over-liquid dispenser/pipettor (PGVA + VAEM)","mode":"hardware","risk":"R2","family":"python-object","role":"device-driver","intro":"Festo pressure-over-liquid instrument (FluidControlSession), adapted from festo-se/festo-dev-fluid-control. It reads `channels`, `liquid_classes` and `fluid_status`; sets `pressure`; runs `aspirate`, `dispense`, `mix` and `deactivate`. `aspirate`: aspirate a volume on one valve channel with a configured liquid class. A hardware driver: the market serves its fake backend, so no instrument is needed.","measures":["channels","liquid_classes","fluid_status"],"adjusts":["pressure"],"actions":[{"name":"aspirate","description":"Aspirate a volume on one valve channel with a configured liquid class"},{"name":"dispense","description":"Dispense a volume on one valve channel with a configured liquid class"},{"name":"mix","description":"Mix by repeating aspirate and dispense on one valve channel"},{"name":"deactivate","description":"Return the instrument to its safe state: release the pressure and deselect every valve"}],"tags":["festo","pressure-over-liquid","dispenser","pipettor","liquid-handling"],"backends":["fake","hardware"],"served_backend":"fake","evidence":"contract_checked","upstream":{"repo_url":"https://github.com/festo-se/festo-dev-fluid-control","commit":"2da14c5d6b202d3aca1ca1ca6e173f68eaf266c3","license":"LicenseRef-proprietary"},"stars":0,"install":{"openai4s":"openai4s lab add labs/festo-se__festo-dev-fluid-control","mhs":"mhs serve labs/festo-se__festo-dev-fluid-control --port 7400","mcp":"mhs serve labs/festo-se__festo-dev-fluid-control --mcp"}},
{"id":"labs/fibsem-os__fibsem-os","name":"fibsem-os remote fluorescence microscope","device_id":"mhs://localhost/fibsem-remote-fm","track":"labs","category":"Optics and microscopy","topic":null,"kind":"instrument.microscope","vendor":"fibsem-os","model":"RemoteFluorescenceMicroscope","mode":"hardware","risk":"R1","family":"python-object","role":"twin-candidate","intro":"fibsem-os remote fluorescence microscope, adapted from fibsem-os/fibsem-os. It reads `is_acquiring`, `is_interactive` and `acquiring_reason`; sets `exposure_time`, `binning`, `gain`, `channel_name` and 1 more; runs `start_acquisition` and `stop_acquisition`. `start_acquisition`: start continuous live acquisition of the fluorescence microscope. A hardware driver: the market serves its fake backend, so no instrument is needed.","measures":["is_acquiring","is_interactive","acquiring_reason"],"adjusts":["exposure_time","binning","gain","channel_name","channel_color"],"actions":[{"name":"start_acquisition","description":"Start continuous live acquisition of the fluorescence microscope"},{"name":"stop_acquisition","description":"Stop continuous live acquisition (the native stop and the safe state)"}],"tags":["fluorescence","microscope","remote","live-view","camera"],"backends":["fake","hardware"],"served_backend":"fake","evidence":"contract_checked","upstream":{"repo_url":"https://github.com/fibsem-os/fibsem-os","commit":"8bd5dc731f523354273c38cd2cc190db9b7483e5","license":"MIT"},"stars":26,"install":{"openai4s":"openai4s lab add labs/fibsem-os__fibsem-os","mhs":"mhs serve labs/fibsem-os__fibsem-os --port 7400","mcp":"mhs serve labs/fibsem-os__fibsem-os --mcp"}},
{"id":"labs/filipdominec__rp2daq","name":"RP2DAQ board (rp2daq.Rp2daq)","device_id":"mhs://localhost/rp2daq","track":"labs","category":"Electronics and measurement","topic":null,"kind":"io.gpio","vendor":"Filip Dominec","model":"RP2DAQ board on Raspberry Pi Pico","mode":"hardware","risk":"R2","family":"python-object","role":"device-driver","intro":"RP2DAQ board (rp2daq.Rp2daq), adapted from filipdominec/rp2daq. It reads `adc_mean`, `stepper_position` and `stepper_moving`; sets `gpio_pin` and `gpio_level`; runs `adc_sample`, `pwm_set`, `stepper_init`, `stepper_move` and 1 more. `adc_sample`: capture one ADC block and return the mean raw count. A hardware driver: the market serves its fake backend, so no instrument is needed.","measures":["adc_mean","stepper_position","stepper_moving"],"adjusts":["gpio_pin","gpio_level"],"actions":[{"name":"adc_sample","description":"Capture one ADC block and return the mean raw count"},{"name":"pwm_set","description":"Configure a PWM slice and set the duty value of one GPIO"},{"name":"stepper_init","description":"Initialize one A4988-compatible stepper on two GPIO pins"},{"name":"stepper_move","description":"Move one initialized stepper to an absolute or relative nanostep position"},{"name":"drive_safe_state","description":"Stop every initialized stepper at its current position, zero PWM and drive configured GPIO outputs low"}],"tags":["rp2040","rp2350","daq","gpio","adc","pwm","stepper","usb-serial"],"backends":["fake","hardware"],"served_backend":"fake","evidence":"contract_checked","upstream":{"repo_url":"https://github.com/filipdominec/rp2daq","commit":"7744f34811d1b3722d30e6efd66205215405fe60","license":"MIT"},"stars":41,"install":{"openai4s":"openai4s lab add labs/filipdominec__rp2daq","mhs":"mhs serve labs/filipdominec__rp2daq --port 7400","mcp":"mhs serve labs/filipdominec__rp2daq --mcp"}},
{"id":"labs/florian-lapp__nesp-lib-py","name":"New Era syringe pump (nesp-lib Pump)","device_id":"mhs://localhost/nesp-pump","track":"labs","category":"Liquid handling and fluidics","topic":null,"kind":"fluid.pump","vendor":"New Era Pump Systems","model":"syringe pump (NESP-Lib)","mode":"hardware","risk":"R2","family":"python-object","role":"device-driver","intro":"New Era syringe pump (nesp-lib Pump), adapted from florian-lapp/nesp-lib-py. It reads `model_number`, `firmware_version`, `status`, `running` and 2 more; sets `syringe_diameter_mm`, `pumping_direction`, `pumping_volume_ml`, `pumping_rate_ml_per_min` and 1 more; runs `run_pump`, `purge` and `stop_pump`. `run_pump`: start the pump with the configured direction, volume and rate (Pump.run without waiting); it returns after starting the pump, and the state reports whether it is running. A hardware driver: the market serves its fake backend, so no instrument is needed.","measures":["model_number","firmware_version","status","running","volume_infused_ml","volume_withdrawn_ml"],"adjusts":["syringe_diameter_mm","pumping_direction","pumping_volume_ml","pumping_rate_ml_per_min","safe_mode_timeout_s"],"actions":[{"name":"run_pump","description":"Start the pump with the configured direction, volume and rate (Pump.run without waiting); it returns after starting the pump, and the state reports whether it is running"},{"name":"purge","description":"Run the pump at its maximum rate in the configured direction until it is stopped (Pump.run_purge); it returns after starting the purge"},{"name":"stop_pump","description":"Stop the pump without waiting for the run to end (Pump.stop without waiting); it takes no input"}],"tags":["syringe-pump","fluid","infuse","withdraw","serial"],"backends":["fake","hardware"],"served_backend":"fake","evidence":"contract_checked","upstream":{"repo_url":"https://github.com/florian-lapp/nesp-lib-py","commit":"c16abc82c9feb7c356f06c30b0dff0d4d421cfe3","license":"MIT"},"stars":12,"install":{"openai4s":"openai4s lab add labs/florian-lapp__nesp-lib-py","mhs":"mhs serve labs/florian-lapp__nesp-lib-py --port 7400","mcp":"mhs serve labs/florian-lapp__nesp-lib-py --mcp"}},
{"id":"labs/fredrik-qi__fork_fluent_sila2_connector","name":"Tecan Fluent liquid handler","device_id":"mhs://localhost/tecan-fluent","track":"labs","category":"Liquid handling and fluidics","topic":null,"kind":"lab.liquid_handler","vendor":"Tecan","model":"FluentControl via SilaFluentController","mode":"hardware","risk":"R2","family":"python-object","role":"device-driver","intro":"Tecan Fluent liquid handler, adapted from fredrik-qi/fork_fluent_sila2_connector. It reads `state`, `progress`, `last_error`, `runnable_methods` and 1 more; runs `start_fluent`, `prepare_method`, `run_method`, `pause_run` and 9 more. `start_fluent`: start FluentControl or attach to a running instance without credentials; the connector may wait without a timeout and then prepares the method 'Method to prepare'. A hardware driver: the market serves its fake backend, so no instrument is needed.","measures":["state","progress","last_error","runnable_methods","variable_names"],"adjusts":[],"actions":[{"name":"start_fluent","description":"Start FluentControl or attach to a running instance without credentials; the connector may wait without a timeout and then prepares the method 'Method to prepare'"},{"name":"prepare_method","description":"Prepare a FluentControl method; the connector deletes the Journaling/000 and Journaling/ToDelete directories before preparing"},{"name":"run_method","description":"Run the currently prepared FluentControl method"},{"name":"pause_run","description":"Pause the current FluentControl method; this is not the safe-state stop"},{"name":"resume_run","description":"Resume a method paused by pause_run"},{"name":"stop_method","description":"Stop the running method (SilaFluentController.StopMethod) and confirm that State reads RunModeRunFinished or EditMode; it takes no input"},{"name":"aspirate","description":"Aspirate with the connector's fixed 8-tip A1 selection; it requires a live execution channel and passes the volume, labware, liquid class and well offset through unchanged"},{"name":"dispense","description":"Dispense with the connector's fixed A1-H1 8-tip selection; it requires a live execution channel and passes the volume, labware, liquid class and well offset through unchanged"},{"name":"drop_tips","description":"Drop the mounted disposable tips into the named labware"},{"name":"set_location","description":"Set the location of a labware on the worktable"},{"name":"transfer_labware","description":"Transfer labware on the worktable with the RGA"},{"name":"transfer_labware_back_to_base","description":"Transfer labware back to the spot where it was added to the worktable"},{"name":"set_variable_value","description":"Set a variable of the prepared method and read it back"}],"tags":["liquid-handler","pipetting","fluentcontrol","sila2","labware"],"backends":["fake","hardware"],"served_backend":"fake","evidence":"contract_checked","upstream":{"repo_url":"https://github.com/fredrik-qi/fork_fluent_sila2_connector","commit":"4a2f857c619c5bcead352b52622a72cc2d356ffe","license":"BSD-3-Clause"},"stars":0,"install":{"openai4s":"openai4s lab add labs/fredrik-qi__fork_fluent_sila2_connector","mhs":"mhs serve labs/fredrik-qi__fork_fluent_sila2_connector --port 7400","mcp":"mhs serve labs/fredrik-qi__fork_fluent_sila2_connector --mcp"}},
{"id":"labs/freespace__pyapt","name":"Thorlabs APT stage controller (pyapt)","device_id":"mhs://localhost/pyapt-stage","track":"labs","category":"Motion control","topic":null,"kind":"motion.axis","vendor":"Thorlabs","model":"APT motion controller (MTS50, PRM1 or LTS300 stage)","mode":"hardware","risk":"R1","family":"python-object","role":"device-driver","intro":"Thorlabs APT stage controller (pyapt), adapted from freespace/pyapt. It reads `velocity`, `moving`, `homed`, `forward_limit_active` and 4 more; sets `position`, `soft_limits`, `maximum_velocity` and `acceleration`; runs `home`, `move_relative` and `stop_motion`. `home`: drive axes to their declared home position or reference switch, establishing the coordinate reference needed by other motion capabilities. A hardware driver: the market serves its fake backend, so no instrument is needed.","measures":["velocity","moving","homed","forward_limit_active","reverse_limit_active","status","status_bits","minimum_velocity"],"adjusts":["position","soft_limits","maximum_velocity","acceleration"],"actions":[{"name":"home","description":"Drive axes to their declared home position or reference switch, establishing the coordinate reference needed by other motion capabilities."},{"name":"move_relative","description":"Move the stage relative to its current position; the driver waits for the move to finish"},{"name":"stop_motion","description":"Stop all motion on the resource with a declared deceleration profile and report the stopping position. This capability is always cancellable=false and is exempt from rate limiting."}],"tags":["thorlabs","apt","motion","stage","usb","ftdi"],"backends":["fake","hardware"],"served_backend":"fake","evidence":"contract_checked","upstream":{"repo_url":"https://github.com/freespace/pyapt","commit":"914a6f618cacce6aa9ce42d371a895989e092b59","license":"MIT"},"stars":32,"install":{"openai4s":"openai4s lab add labs/freespace__pyapt","mhs":"mhs serve labs/freespace__pyapt --port 7400","mcp":"mhs serve labs/freespace__pyapt --mcp"}},
{"id":"labs/freespace__pysmc100","name":"Newport SMC100 single-axis motion controller","device_id":"mhs://localhost/smc100","track":"labs","category":"Motion control","topic":null,"kind":"motion.axis","vendor":"Newport","model":"SMC100","mode":"hardware","risk":"R1","family":"serial","role":"device-driver","intro":"Newport SMC100 single-axis motion controller, adapted from freespace/pysmc100. It reads `position`, `error_code` and `state`; runs `home`, `move_absolute` and `move_relative`. `home`: home the stage and leave it at the origin. A hardware driver: the market serves its fake backend, so no instrument is needed.","measures":["position","error_code","state"],"adjusts":[],"actions":[{"name":"home","description":"Home the stage and leave it at the origin"},{"name":"move_absolute","description":"Move the stage to an absolute position in millimetres"},{"name":"move_relative","description":"Move the stage by a relative distance in millimetres"}],"tags":["newport","smc100","motion","stage","serial","rs232"],"backends":["fake","hardware"],"served_backend":"fake","evidence":"contract_checked","upstream":{"repo_url":"https://github.com/freespace/pysmc100","commit":"8c65638934edb9c50381b7a25488bdc728619ffc","license":"MIT"},"stars":13,"install":{"openai4s":"openai4s lab add labs/freespace__pysmc100","mhs":"mhs serve labs/freespace__pysmc100 --port 7400","mcp":"mhs serve labs/freespace__pysmc100 --mcp"}},
{"id":"labs/fretchen__synqs_devices","name":"Andor Solis camera (synqs_devices)","device_id":"mhs://localhost/andor-solis","track":"labs","category":"Sensors and cameras","topic":null,"kind":"sensor.camera","vendor":"Andor Technology","model":"Andor Solis camera (Andor SDK3)","mode":"hardware","risk":"R1","family":"serial","role":"device-driver","intro":"Andor Solis camera (synqs_devices), adapted from fretchen/synqs_devices. It reads `frame_width`, `frame_height`, `x_binning`, `y_binning` and 2 more; sets `exposure_time`, `acquisition_mode`, `trigger_mode`, `trigger_edge` and 2 more; runs `snap`. `snap`: capture a single image from a named camera with a declared resolution and exposure and return an image artifact reference. A hardware driver: the market serves its fake backend, so no instrument is needed.","measures":["frame_width","frame_height","x_binning","y_binning","accumulations","kinetics"],"adjusts":["exposure_time","acquisition_mode","trigger_mode","trigger_edge","cooldown","temperature_setpoint"],"actions":[{"name":"snap","description":"Capture a single image from a named camera with a declared resolution and exposure and return an image artifact reference."}],"tags":["camera","andor","solis","labscript","blacs","imaging"],"backends":["fake","hardware"],"served_backend":"fake","evidence":"contract_checked","upstream":{"repo_url":"https://github.com/fretchen/synqs_devices","commit":"ec4bb24639e9d0d4cb707e1c2a6296a47dfe9f02","license":"MIT"},"stars":1,"install":{"openai4s":"openai4s lab add labs/fretchen__synqs_devices","mhs":"mhs serve labs/fretchen__synqs_devices --port 7400","mcp":"mhs serve labs/fretchen__synqs_devices --mcp"}},
{"id":"labs/giansimone__ctrl-syringe-pumps","name":"Syringe pump over serial (ctrl-syringe-pumps)","device_id":"mhs://localhost/syringe-pump","track":"labs","category":"Liquid handling and fluidics","topic":null,"kind":"fluid.pump","vendor":"giansimone","model":"Serial syringe pump (basic mode)","mode":"hardware","risk":"R2","family":"python-object","role":"device-driver","intro":"Syringe pump over serial (ctrl-syringe-pumps), adapted from giansimone/ctrl-syringe-pumps. It sets `diameter`, `direction` and `pumping_rate`; runs `run_pump`, `stop_pump`, `test_pump` and `reverse_direction`. `run_pump`: start the pump (RUN). A hardware driver: the market serves its fake backend, so no instrument is needed.","measures":[],"adjusts":["diameter","direction","pumping_rate"],"actions":[{"name":"run_pump","description":"Start the pump (RUN)"},{"name":"stop_pump","description":"Stop the pump (STP); the safe-state action"},{"name":"test_pump","description":"Send the version/test command (VER)"},{"name":"reverse_direction","description":"Reverse the flow for the selected pump (DIR REV)"}],"tags":["syringe pump","serial","infuse","withdraw","pump"],"backends":["fake","hardware"],"served_backend":"fake","evidence":"contract_checked","upstream":{"repo_url":"https://github.com/giansimone/ctrl-syringe-pumps","commit":"3b0d3154003498f65150d8f04905f3a27cdd9017","license":"MIT"},"stars":0,"install":{"openai4s":"openai4s lab add labs/giansimone__ctrl-syringe-pumps","mhs":"mhs serve labs/giansimone__ctrl-syringe-pumps --port 7400","mcp":"mhs serve labs/giansimone__ctrl-syringe-pumps --mcp"}},
{"id":"labs/gormleylab__spectramax","name":"SpectraMax plate reader (spectramax.Spectramax)","device_id":"mhs://localhost/spectramax","track":"labs","category":"Spectroscopy","topic":null,"kind":"instrument.spectrophotometer","vendor":"Molecular Devices","model":"SpectraMax plate reader (SoftMax Pro Automation API)","mode":"hardware","risk":"R2","family":"python-object","role":"device-driver","intro":"SpectraMax plate reader (spectramax.Spectramax), adapted from gormleylab/spectramax. It reads `instrument_status` and `plate_data`; runs `set_incubator_temperature`, `read_uvvis` and `incubator_off`. `set_incubator_temperature`: set the incubator temperature through SoftMax Pro; 0 turns the incubator off. A hardware driver: the market serves its fake backend, so no instrument is needed.","measures":["instrument_status","plate_data"],"adjusts":[],"actions":[{"name":"set_incubator_temperature","description":"Set the incubator temperature through SoftMax Pro; 0 turns the incubator off"},{"name":"read_uvvis","description":"Run a UV-Vis read from a SoftMax Pro .spr method and export .sda, .csv and .xml files"},{"name":"incubator_off","description":"Turn the incubator off with set_temperature(0), the documented off state; no input"}],"tags":["plate reader","spectrophotometer","uv-vis","softmax pro","incubator"],"backends":["fake","hardware"],"served_backend":"fake","evidence":"contract_checked","upstream":{"repo_url":"https://github.com/gormleylab/spectramax","commit":"7940d4064663d576cbe8b1200e529f3acc1ef924","license":"MIT"},"stars":2,"install":{"openai4s":"openai4s lab add labs/gormleylab__spectramax","mhs":"mhs serve labs/gormleylab__spectramax --port 7400","mcp":"mhs serve labs/gormleylab__spectramax --mcp"}},
{"id":"labs/graysonbellamy__sartoriuslib","name":"Sartorius balance via sartoriuslib","device_id":"mhs://localhost/sartorius-balance","track":"labs","category":"Electronics and measurement","topic":null,"kind":"instrument.balance","vendor":"Sartorius","model":"Sartorius balance (sartoriuslib Balance facade)","mode":"hardware","risk":"R1","family":"python-object","role":"device-driver","intro":"Sartorius balance via sartoriuslib, adapted from graysonbellamy/sartoriuslib. It reads `net_weight`, `gross_weight`, `tare_value`, `stable` and 4 more; sets `display_unit`, `filter_mode`, `auto_zero`, `isocal_mode` and 2 more; runs `measure_mass`. `measure_mass`: measure the mass on a balance or load cell and report the value and stability flag. A hardware driver: the market serves its fake backend, so no instrument is needed.","measures":["net_weight","gross_weight","tare_value","stable","status_state","model","serial","software"],"adjusts":["display_unit","filter_mode","auto_zero","isocal_mode","tare_behavior","menu_access"],"actions":[{"name":"measure_mass","description":"Measure the mass on a balance or load cell and report the value and stability flag."}],"tags":["balance","weighing","mass","sartorius","xbpi","sbi","asyncio"],"backends":["fake","hardware"],"served_backend":"fake","evidence":"contract_checked","upstream":{"repo_url":"https://github.com/graysonbellamy/sartoriuslib","commit":"52f520767051ecee5af2ef5339e1cddc5c406a60","license":"MIT"},"stars":3,"install":{"openai4s":"openai4s lab add labs/graysonbellamy__sartoriuslib","mhs":"mhs serve labs/graysonbellamy__sartoriuslib --port 7400","mcp":"mhs serve labs/graysonbellamy__sartoriuslib --mcp"}},
{"id":"labs/gregmoille__instrumentcontrol","name":"Tektronix DPO70000 oscilloscope","device_id":"mhs://localhost/tek-dpo70000","track":"labs","category":"Electronics and measurement","topic":null,"kind":"instrument","vendor":"Tektronix","model":"DPO70000 series oscilloscope","mode":"hardware","risk":"R1","family":"scpi","role":"device-driver","intro":"Tektronix DPO70000 oscilloscope, adapted from gregmoille/instrumentcontrol. It reads `acquisition_mode_actual`, `acquisition_num_acquisitions`, `acquisition_num_averages`, `acquisition_num_envelopes` and 2 more; sets `acquisition_mode`, `acquisition_num_samples`, `acquisition_sampling_mode`, `acquisition_state` and 5 more. A hardware driver: the market serves its fake backend, so no instrument is needed.","measures":["acquisition_mode_actual","acquisition_num_acquisitions","acquisition_num_averages","acquisition_num_envelopes","acquisition_num_frames","trigger_state"],"adjusts":["acquisition_mode","acquisition_num_samples","acquisition_sampling_mode","acquisition_state","acquisition_stop_after","acquisition_enhanced_enob","acquisition_enhanced_state","acquisition_interp_8bit","acquisition_magnivu"],"actions":[],"tags":["oscilloscope","tektronix","dpo70000","scpi"],"backends":["fake"],"served_backend":"fake","evidence":"contract_checked","upstream":{"repo_url":"https://github.com/gregmoille/instrumentcontrol","commit":"2cf8c78dea007c636fff1f3d006a039fc1876055","license":"MIT"},"stars":0,"install":{"openai4s":"openai4s lab add labs/gregmoille__instrumentcontrol","mhs":"mhs serve labs/gregmoille__instrumentcontrol --port 7400","mcp":"mhs serve labs/gregmoille__instrumentcontrol --mcp"}},
{"id":"labs/gridinwork__ai-oscilloscope-isds205b","name":"INSTRUSTAR ISDS205B USB oscilloscope (instrustar.Scope)","device_id":"mhs://localhost/isds205b","track":"labs","category":"Electronics and measurement","topic":null,"kind":"instrument","vendor":"INSTRUSTAR","model":"ISDS205B","mode":"hardware","risk":"R1","family":"python-object","role":"device-driver","intro":"INSTRUSTAR ISDS205B USB oscilloscope (instrustar.Scope), adapted from gridinwork/ai-oscilloscope-isds205b. It reads `available`, `ch1_voltage_resolution_v`, `ch2_voltage_resolution_v`, `ch1_coupling_ac` and 8 more; sets `sample_rate_hz`, `generator_waveform`, `trigger_mode`, `trigger_style` and 3 more; runs `capture`, `set_input_range` and `generator_enable`. `capture`: capture one waveform on both channels and return per-channel scalar measurements. A hardware driver: the market serves its fake backend, so no instrument is needed.","measures":["available","ch1_voltage_resolution_v","ch2_voltage_resolution_v","ch1_coupling_ac","ch2_coupling_ac","generator_enabled","has_hard_trigger","has_dds","has_io","has_pretrigger_percent","has_roll_mode","memory_length_kb"],"adjusts":["sample_rate_hz","generator_waveform","trigger_mode","trigger_style","trigger_source","trigger_level_mv","trigger_pretrigger_percent"],"actions":[{"name":"capture","description":"Capture one waveform on both channels and return per-channel scalar measurements"},{"name":"set_input_range","description":"Request one channel's input range in mV and read back the voltage resolution the device reports"},{"name":"generator_enable","description":"Enable or disable the DDS generator output"}],"tags":["oscilloscope","usb","isds205b","instrustar","waveform","dds","voltage measurement"],"backends":["fake","hardware"],"served_backend":"fake","evidence":"contract_checked","upstream":{"repo_url":"https://github.com/gridinwork/ai-oscilloscope-isds205b","commit":"cb1bdda97869e5c897d742d6008a8a359128a61a","license":"MIT"},"stars":0,"install":{"openai4s":"openai4s lab add labs/gridinwork__ai-oscilloscope-isds205b","mhs":"mhs serve labs/gridinwork__ai-oscilloscope-isds205b --port 7400","mcp":"mhs serve labs/gridinwork__ai-oscilloscope-isds205b --mcp"}},
{"id":"labs/helixworks-technologies__helixcycler","name":"HelixCycler OT thermocycler (tc_send_code.HardwareController)","device_id":"mhs://localhost/helixcycler","track":"labs","category":"Thermal and process control","topic":null,"kind":"lab.thermal_block","vendor":"HelixWorks Technologies","model":"HelixCycler OT thermocycler","mode":"hardware","risk":"R2","family":"python-object","role":"device-driver","intro":"HelixCycler OT thermocycler (tc_send_code.HardwareController), adapted from helixworks-technologies/helixcycler. It reads `lid_temperature`, `plate_temperature` and `plate_hold_remaining`; sets `lid_setpoint`, `plate_setpoint` and `shake_speed`; runs `set_plate_target`, `open_lid`, `close_lid` and `deactivate_all`. `set_plate_target`: set the target temperature of a thermal zone and optionally wait for the zone to reach the setpoint within a declared tolerance. A hardware driver: the market serves its fake backend, so no instrument is needed.","measures":["lid_temperature","plate_temperature","plate_hold_remaining"],"adjusts":["lid_setpoint","plate_setpoint","shake_speed"],"actions":[{"name":"set_plate_target","description":"Set the target temperature of a thermal zone and optionally wait for the zone to reach the setpoint within a declared tolerance."},{"name":"open_lid","description":"Open the lid (the native M126 command)"},{"name":"close_lid","description":"Close the lid (the native M127 command)"},{"name":"deactivate_all","description":"Stop the shaker and turn off heating and cooling for the plate and the lid (the native deactivate_shaker, G28 and M106, then deactivate_all, M18); it takes no input"}],"tags":["thermocycler","pcr","thermal block","serial","heater","shaker"],"backends":["fake","hardware"],"served_backend":"fake","evidence":"contract_checked","upstream":{"repo_url":"https://github.com/helixworks-technologies/helixcycler","commit":"29bcd934a8d5289021fb774de17ecdf578ff92f7","license":"NOASSERTION"},"stars":3,"install":{"openai4s":"openai4s lab add labs/helixworks-technologies__helixcycler","mhs":"mhs serve labs/helixworks-technologies__helixcycler --port 7400","mcp":"mhs serve labs/helixworks-technologies__helixcycler --mcp"}},
{"id":"labs/hgomersall__pyzaber","name":"Zaber multiaxis linear slides (pyzaber)","device_id":"mhs://localhost/pyzaber","track":"labs","category":"Robot arms and grippers","topic":null,"kind":"robot.arm","vendor":"Zaber Technologies","model":"multiaxis linear slides","mode":"hardware","risk":"R2","family":"serial","role":"device-driver","intro":"Zaber multiaxis linear slides (pyzaber), adapted from hgomersall/pyzaber. It reads `x_mm`, `y_mm` and `z_mm`; runs `home`, `move_to_position` and `stop_motion`. `home`: home all three axes with the native home command (command 1); the clone's example homes x, y and z in turn. A hardware driver: the market serves its fake backend, so no instrument is needed.","measures":["x_mm","y_mm","z_mm"],"adjusts":[],"actions":[{"name":"home","description":"Home all three axes with the native home command (command 1); the clone's example homes x, y and z in turn"},{"name":"move_to_position","description":"Move the tool centre point to a Cartesian position and orientation in a named frame. The endpoint solves inverse kinematics; an unreachable target is rejected before motion."},{"name":"stop_motion","description":"Stop every axis with the native emergency-stop broadcast (command 23 to device 0); the safe state, and it takes no input"}],"tags":["zaber","linear slide","gantry","multiaxis","serial","motion","positioner"],"backends":["fake"],"served_backend":"fake","evidence":"contract_checked","upstream":{"repo_url":"https://github.com/hgomersall/pyzaber","commit":"1a3f1e712f3d5bb3dab8512cdfeda9d21244b374","license":"NOASSERTION"},"stars":0,"install":{"openai4s":"openai4s lab add labs/hgomersall__pyzaber","mhs":"mhs serve labs/hgomersall__pyzaber --port 7400","mcp":"mhs serve labs/hgomersall__pyzaber --mcp"}},
{"id":"labs/histedlab__scanimage-python-control","name":"ScanImage remote control (py_json_client.ScanimageTcpipClient)","device_id":"mhs://localhost/scanimage-tcpip","track":"labs","category":"Optics and microscopy","topic":null,"kind":"instrument.microscope","vendor":"Histed lab","model":"ScanImage TCP/IP JSON client","mode":"hardware","risk":"R1","family":"python-object","role":"device-driver","intro":"ScanImage remote control (py_json_client.ScanimageTcpipClient), adapted from histedlab/scanimage-python-control. It sets `scan_zoom_factor`. A hardware driver: the market serves its fake backend, so no instrument is needed.","measures":[],"adjusts":["scan_zoom_factor"],"actions":[],"tags":["scanimage","microscope","remote-control","tcpip","json"],"backends":["fake","hardware"],"served_backend":"fake","evidence":"contract_checked","upstream":{"repo_url":"https://github.com/histedlab/scanimage-python-control","commit":"9de4309aef951b390ed4b5a1240797a54d1001d8","license":"NOASSERTION"},"stars":2,"install":{"openai4s":"openai4s lab add labs/histedlab__scanimage-python-control","mhs":"mhs serve labs/histedlab__scanimage-python-control --port 7400","mcp":"mhs serve labs/histedlab__scanimage-python-control --mcp"}},
{"id":"labs/holtzmanjon__apoalpyca","name":"APO 1m Ash Dome rotation (ASCOM Alpaca dome server)","device_id":"mhs://localhost/apo-ash-dome","track":"labs","category":"Other devices","topic":null,"kind":"device","vendor":"Apache Point Observatory","model":"1m Ash Dome","mode":"hardware","risk":"R2","family":"tag-bridge","role":"device-driver","intro":"APO 1m Ash Dome rotation (ASCOM Alpaca dome server), adapted from holtzmanjon/apoalpyca. It reads `azimuth`, `shutterstatus`, `slewing`, `athome` and 1 more; runs `slew_azimuth`, `park`, `find_home`, `set_park` and 1 more. `slew_azimuth`: start a SlewToAzimuth and wait until the server reports slewing (relay on). Completion is a started rotation, not arrival; no start within 1.5 s is unknown. A hardware driver: the market serves its fake backend, so no instrument is needed.","measures":["azimuth","shutterstatus","slewing","athome","atpark"],"adjusts":[],"actions":[{"name":"slew_azimuth","description":"Start a SlewToAzimuth and wait until the server reports slewing (relay on). Completion is a started rotation, not arrival; no start within 1.5 s is unknown"},{"name":"park","description":"Start a Park slew to the stored park position and wait until the server reports slewing; already parked or no start within 1.5 s is unknown"},{"name":"find_home","description":"Start a FindHome rotation and wait until the server reports slewing; already home or no start within 1.5 s is unknown"},{"name":"set_park","description":"Store the current azimuth as the park position through SetPark; no motion is commanded"},{"name":"abort_slew","description":"Switch the rotation relay off through AbortSlew and confirm the server's slewing flag is false; the dome coasts and the shutters are not affected"}],"tags":["dome","alpaca","ascom","observatory","tag-bridge"],"backends":["fake","hardware"],"served_backend":"fake","evidence":"contract_checked","upstream":{"repo_url":"https://github.com/holtzmanjon/apoalpyca","commit":"3d4c48ec092c7dfd095f47b30efe9eb29ca2d031","license":"GPL-3.0"},"stars":0,"install":{"openai4s":"openai4s lab add labs/holtzmanjon__apoalpyca","mhs":"mhs serve labs/holtzmanjon__apoalpyca --port 7400","mcp":"mhs serve labs/holtzmanjon__apoalpyca --mcp"}},
{"id":"labs/hrosiak__esp301","name":"Newport ESP 301 stepper motion controller (esp.esp)","device_id":"mhs://localhost/esp301","track":"labs","category":"Motion control","topic":null,"kind":"motion.axis","vendor":"Newport","model":"ESP 301","mode":"hardware","risk":"R1","family":"serial","role":"device-driver","intro":"Newport ESP 301 stepper motion controller (esp.esp), adapted from hrosiak/esp301. It reads `position` and `last_error`; sets `target_position`; runs `reset_axis`. `reset_axis`: reset the served axis with the upstream reset (OR, WS0) and report whether the controller returns no error afterwards. A hardware driver: the market serves its fake backend, so no instrument is needed.","measures":["position","last_error"],"adjusts":["target_position"],"actions":[{"name":"reset_axis","description":"Reset the served axis with the upstream reset (OR, WS0) and report whether the controller returns no error afterwards"}],"tags":["motion","stepper","controller","esp301","serial","newport"],"backends":["fake","hardware"],"served_backend":"fake","evidence":"contract_checked","upstream":{"repo_url":"https://github.com/hrosiak/esp301","commit":"b0d1921faf37a8afcceee73d2e9a38f2639adc79","license":"GPL-3.0"},"stars":7,"install":{"openai4s":"openai4s lab add labs/hrosiak__esp301","mhs":"mhs serve labs/hrosiak__esp301 --port 7400","mcp":"mhs serve labs/hrosiak__esp301 --mcp"}},
{"id":"labs/hslarson__speck-lab-goniometer","name":"Thorlabs compact spectrometer (pyCCT SpectrometerWrapper)","device_id":"mhs://localhost/speck-spectrometer","track":"labs","category":"Spectroscopy","topic":null,"kind":"instrument.spectrometer","vendor":"Thorlabs","model":"Compact Spectrograph SDK (pyCCT SpectrometerWrapper)","mode":"hardware","risk":"R1","family":"python-object","role":"device-driver","intro":"Thorlabs compact spectrometer (pyCCT SpectrometerWrapper), adapted from hslarson/speck-lab-goniometer. It reads `device_id`; sets `manual_exposure`, `hardware_average`, `input_hw_trigger_enabled`, `input_hw_trigger_average_no_wait` and 3 more; runs `acquire_spectrum`. `acquire_spectrum`: acquire an optical or mass spectrum over a declared wavelength or mass range and return the axis and intensity arrays, or an artifact reference for large spectra. A hardware driver: the market serves its fake backend, so no instrument is needed.","measures":["device_id"],"adjusts":["manual_exposure","hardware_average","input_hw_trigger_enabled","input_hw_trigger_average_no_wait","input_hw_trigger_falling_edge","output_hw_trigger_delay","use_amplitude_correction"],"actions":[{"name":"acquire_spectrum","description":"Acquire an optical or mass spectrum over a declared wavelength or mass range and return the axis and intensity arrays, or an artifact reference for large spectra."}],"tags":["spectrometer","spectrum","thorlabs","pycct","goniometer"],"backends":["fake","hardware"],"served_backend":"fake","evidence":"contract_checked","upstream":{"repo_url":"https://github.com/hslarson/speck-lab-goniometer","commit":"9ca84d8c8c6c6ec9f9f3a3bd3cd968fc6657a803","license":"MIT"},"stars":0,"install":{"openai4s":"openai4s lab add labs/hslarson__speck-lab-goniometer","mhs":"mhs serve labs/hslarson__speck-lab-goniometer --port 7400","mcp":"mhs serve labs/hslarson__speck-lab-goniometer --mcp"}},
{"id":"labs/idc-milab__openlh","name":"OpenLH liquid handler (uArm Swift Pro)","device_id":"mhs://localhost/openlh","track":"labs","category":"Robot arms and grippers","topic":null,"kind":"robot.arm","vendor":"idc-milab / UFactory","model":"OpenLH liquid handler on a uArm Swift Pro","mode":"hardware","risk":"R2","family":"serial","role":"device-driver","intro":"OpenLH liquid handler (uArm Swift Pro), adapted from idc-milab/openlh. It reads `position_x`, `position_y`, `position_z`, `polar_rotation` and 5 more; sets `base_angle`, `left_angle`, `right_angle`, `hand_angle` and 2 more; runs `move_to_position` and `tool_off`. `move_to_position`: move the tool centre point to a Cartesian position and orientation in a named frame. The endpoint solves inverse kinematics; an unreachable target is rejected before motion. A hardware driver: the market serves its fake backend, so no instrument is needed.","measures":["position_x","position_y","position_z","polar_rotation","polar_stretch","polar_height","ultrasonic_distance","limit_switch","is_moving"],"adjusts":["base_angle","left_angle","right_angle","hand_angle","pump_on","gripper_closed"],"actions":[{"name":"move_to_position","description":"Move the tool centre point to a Cartesian position and orientation in a named frame. The endpoint solves inverse kinematics; an unreachable target is rejected before motion."},{"name":"tool_off","description":"Turn the pump and the gripper off; this is the declared safe state because the upstream API has no motion halt"}],"tags":["openlh","uarm","swift pro","liquid handling","robot arm","serial"],"backends":["fake","hardware"],"served_backend":"fake","evidence":"contract_checked","upstream":{"repo_url":"https://github.com/idc-milab/openlh","commit":"6a7562c61656362bc70ce58b7f685090cceebda4","license":"NOASSERTION"},"stars":27,"install":{"openai4s":"openai4s lab add labs/idc-milab__openlh","mhs":"mhs serve labs/idc-milab__openlh --port 7400","mcp":"mhs serve labs/idc-milab__openlh --mcp"}},
{"id":"labs/iherrbenza__ad9959_python","name":"AD9959 four-channel DDS (DDS_ESP32_lab.DDS_ESP32)","device_id":"mhs://localhost/ad9959","track":"labs","category":"Electronics and measurement","topic":null,"kind":"instrument","vendor":"Analog Devices / iherrbenza","model":"AD9959 DDS via ESP32","mode":"hardware","risk":"R1","family":"python-object","role":"device-driver","intro":"AD9959 four-channel DDS (DDS_ESP32_lab.DDS_ESP32), adapted from iherrbenza/ad9959_python. It sets `frequency`, `amplitude` and `phase`; runs `mute`. `mute`: set every channel amplitude word to 0 (the safe state); it takes no input. A hardware driver: the market serves its fake backend, so no instrument is needed.","measures":[],"adjusts":["frequency","amplitude","phase"],"actions":[{"name":"mute","description":"Set every channel amplitude word to 0 (the safe state); it takes no input"}],"tags":["dds","ad9959","esp32","signal-source","rf"],"backends":["fake","hardware"],"served_backend":"fake","evidence":"contract_checked","upstream":{"repo_url":"https://github.com/iherrbenza/ad9959_python","commit":"cd5298ec17fe7994a2c07ce9783ac88a3d194f8c","license":"BSD-3-Clause"},"stars":5,"install":{"openai4s":"openai4s lab add labs/iherrbenza__ad9959_python","mhs":"mhs serve labs/iherrbenza__ad9959_python --port 7400","mcp":"mhs serve labs/iherrbenza__ad9959_python --mcp"}},
{"id":"labs/imswitch2__imswitch2","name":"ImSwitch2 Standa rotation mount","device_id":"mhs://localhost/imswitch2-rotator","track":"labs","category":"Motion control","topic":null,"kind":"motion.axis","vendor":"Standa","model":"8SMC5 rotation mount controller via ImSwitch2","mode":"hardware","risk":"R1","family":"python-object","role":"driver-pack","intro":"ImSwitch2 Standa rotation mount, adapted from imswitch2/imswitch2. It reads `position`; runs `move_absolute` and `stop_motion`. `move_absolute`: command one or more actuated joints to target positions in joint space, optionally over a declared duration, and report whether the target was reached within tolerance. A hardware driver: the market serves its fake backend, so no instrument is needed.","measures":["position"],"adjusts":[],"actions":[{"name":"move_absolute","description":"Command one or more actuated joints to target positions in joint space, optionally over a declared duration, and report whether the target was reached within tolerance."},{"name":"stop_motion","description":"Stop all motion on the resource with a declared deceleration profile and report the stopping position. This capability is always cancellable=false and is exempt from rate limiting."}],"tags":["rotation mount","standa","8smc5","libximc","motion","imswitch2"],"backends":["fake","hardware"],"served_backend":"fake","evidence":"contract_checked","upstream":{"repo_url":"https://github.com/imswitch2/imswitch2","commit":"86763f7ba89fb15efbf3229ea5df1c9e1395fc7d","license":"GPL-3.0"},"stars":5,"install":{"openai4s":"openai4s lab add labs/imswitch2__imswitch2","mhs":"mhs serve labs/imswitch2__imswitch2 --port 7400","mcp":"mhs serve labs/imswitch2__imswitch2 --mcp"}},
{"id":"labs/imswitch__imswitch","name":"Standa rotation mount via ImSwitch (StandaMotor)","device_id":"mhs://localhost/standa-rotator","track":"labs","category":"Motion control","topic":null,"kind":"motion.axis","vendor":"Standa","model":"8SMC5 rotation mount controller","mode":"hardware","risk":"R1","family":"python-object","role":"driver-pack","intro":"Standa rotation mount via ImSwitch (StandaMotor), adapted from imswitch/imswitch. It reads `position`; runs `move_absolute` and `stop_motion`. `move_absolute`: command one or more actuated joints to target positions in joint space, optionally over a declared duration, and report whether the target was reached within tolerance. A hardware driver: the market serves its fake backend, so no instrument is needed.","measures":["position"],"adjusts":[],"actions":[{"name":"move_absolute","description":"Command one or more actuated joints to target positions in joint space, optionally over a declared duration, and report whether the target was reached within tolerance."},{"name":"stop_motion","description":"Stop all motion on the resource with a declared deceleration profile and report the stopping position. This capability is always cancellable=false and is exempt from rate limiting."}],"tags":["rotation mount","standa","libximc","motion","imswitch"],"backends":["fake","hardware"],"served_backend":"fake","evidence":"contract_checked","upstream":{"repo_url":"https://github.com/imswitch/imswitch","commit":"37bf1df6de0ee4746b05bef9684c782e4995b2e8","license":"GPL-3.0"},"stars":88,"install":{"openai4s":"openai4s lab add labs/imswitch__imswitch","mhs":"mhs serve labs/imswitch__imswitch --port 7400","mcp":"mhs serve labs/imswitch__imswitch --mcp"}},
{"id":"labs/instrumentkit__instrumentkit","name":"Tektronix DPO70000 oscilloscope (instrumentkit)","device_id":"mhs://localhost/tek_dpo70000","track":"labs","category":"Electronics and measurement","topic":null,"kind":"instrument","vendor":"Tektronix","model":"DPO70000 series","mode":"hardware","risk":"R0","family":"python-object","role":"driver-pack","intro":"Tektronix DPO70000 oscilloscope (instrumentkit), adapted from instrumentkit/instrumentkit. It reads `acquire_enhanced_enob`, `acquire_enhanced_state`, `acquire_interp_8bit`, `acquire_magnivu` and 8 more; runs `run_acquisition`, `stop_acquisition`, `force_trigger`, `software_trigger` and 1 more. `run_acquisition`: enable the trigger and start acquisition (the native run, :RUN). A hardware driver: the market serves its fake backend, so no instrument is needed.","measures":["acquire_enhanced_enob","acquire_enhanced_state","acquire_interp_8bit","acquire_magnivu","acquire_mode","acquire_mode_actual","acquire_num_acquisitions","acquire_num_avgs","acquire_num_envelop","acquire_num_frames","acquire_state","trigger_state"],"adjusts":[],"actions":[{"name":"run_acquisition","description":"Enable the trigger and start acquisition (the native run, :RUN)"},{"name":"stop_acquisition","description":"Disable the trigger and stop acquisition (the native stop, :STOP); it takes no input"},{"name":"force_trigger","description":"Force a trigger event (the native force_trigger, TRIG FORC)"},{"name":"software_trigger","description":"Send a SCPI software trigger event (the inherited native trigger, *TRG)"},{"name":"reset_instrument","description":"Reset the instrument (the inherited native reset, *RST); it may revert all settings"}],"tags":["oscilloscope","tektronix","scpi","acquisition"],"backends":["fake","hardware"],"served_backend":"fake","evidence":"contract_checked","upstream":{"repo_url":"https://github.com/instrumentkit/instrumentkit","commit":"a13c15020b6d62621c326d04b89ce79e471d50d2","license":"AGPL-3.0"},"stars":279,"install":{"openai4s":"openai4s lab add labs/instrumentkit__instrumentkit","mhs":"mhs serve labs/instrumentkit__instrumentkit --port 7400","mcp":"mhs serve labs/instrumentkit__instrumentkit --mcp"}},
{"id":"labs/iridiumwastaken__pumpy3","name":"Harvard PHD 2000 syringe pump (pumpy3.Pump2000)","device_id":"mhs://localhost/pumpy3-phd2000","track":"labs","category":"Liquid handling and fluidics","topic":null,"kind":"fluid.pump","vendor":"Harvard Apparatus","model":"PHD 2000 syringe pump","mode":"hardware","risk":"R2","family":"python-object","role":"device-driver","intro":"Harvard PHD 2000 syringe pump (pumpy3.Pump2000), adapted from iridiumwastaken/pumpy3. It reads `infused_volume` and `running`; sets `diameter`, `rate` and `target_volume`; runs `start_pump` and `stop_pump`. `start_pump`: start infusing or withdrawing with the rate and target volume already configured. A hardware driver: the market serves its fake backend, so no instrument is needed.","measures":["infused_volume","running"],"adjusts":["diameter","rate","target_volume"],"actions":[{"name":"start_pump","description":"Start infusing or withdrawing with the rate and target volume already configured"},{"name":"stop_pump","description":"Stop the pump with STP (the native stop, the safe state); it takes no input"}],"tags":["syringe pump","harvard","phd2000","serial","infuse","withdraw","pumpy3"],"backends":["fake","hardware"],"served_backend":"fake","evidence":"contract_checked","upstream":{"repo_url":"https://github.com/iridiumwastaken/pumpy3","commit":"0819cd6f9c402ce75e12eb697672a8b3559f93c1","license":"MIT"},"stars":3,"install":{"openai4s":"openai4s lab add labs/iridiumwastaken__pumpy3","mhs":"mhs serve labs/iridiumwastaken__pumpy3 --port 7400","mcp":"mhs serve labs/iridiumwastaken__pumpy3 --mcp"}},
{"id":"labs/itdaniher__olin-smus","name":"Olin ModCon USB source-measure unit","device_id":"mhs://localhost/olin-smu","track":"labs","category":"Electronics and measurement","topic":null,"kind":"instrument.smu","vendor":"Olin College","model":"ModCon source-measure unit","mode":"hardware","risk":"R2","family":"python-object","role":"device-driver","intro":"Olin ModCon USB source-measure unit, adapted from itdaniher/olin-smus. It reads `measured_voltage`, `measured_current`, `mod_voltage` and `source_mode`; sets `source_voltage` and `source_current`; runs `source_off`. `source_off`: set the source current target to zero with the upstream set(amps=0) safety call; it takes no input and is the declared safe state. A hardware driver: the market serves its fake backend, so no instrument is needed.","measures":["measured_voltage","measured_current","mod_voltage","source_mode"],"adjusts":["source_voltage","source_current"],"actions":[{"name":"source_off","description":"Set the source current target to zero with the upstream set(amps=0) safety call; it takes no input and is the declared safe state"}],"tags":["smu","source-measure-unit","usb","pyusb","electrical"],"backends":["fake","hardware"],"served_backend":"fake","evidence":"contract_checked","upstream":{"repo_url":"https://github.com/itdaniher/olin-smus","commit":"3bddec37c09a408493dab0bf899080670e8807fe","license":"NOASSERTION"},"stars":4,"install":{"openai4s":"openai4s lab add labs/itdaniher__olin-smus","mhs":"mhs serve labs/itdaniher__olin-smus --port 7400","mcp":"mhs serve labs/itdaniher__olin-smus --mcp"}},
{"id":"labs/janelia-python__zaber_device_python","name":"Zaber stage (zaber_device.ZaberStage)","device_id":"mhs://localhost/zaber-stage","track":"labs","category":"Motion control","topic":null,"kind":"motion.axis","vendor":"Zaber Technologies","model":"motorized linear stage chain (ZaberStage)","mode":"hardware","risk":"R1","family":"python-object","role":"device-driver","intro":"Zaber stage (zaber_device.ZaberStage), adapted from janelia-python/zaber_device_python. It reads `x_position`, `y_position`, `z_position`, `x_actuator_id` and 3 more; sets `x_microstep_size`, `y_microstep_size`, `z_microstep_size`, `x_travel` and 2 more; runs `home`, `stop_motion`, `move_absolute`, `move_relative` and 2 more. `home`: home every device in the chain and report the home status of the configured axes. A hardware driver: the market serves its fake backend, so no instrument is needed.","measures":["x_position","y_position","z_position","x_actuator_id","y_actuator_id","z_actuator_id","homed"],"adjusts":["x_microstep_size","y_microstep_size","z_microstep_size","x_travel","y_travel","z_travel"],"actions":[{"name":"home","description":"Home every device in the chain and report the home status of the configured axes"},{"name":"stop_motion","description":"Stop every device in the chain immediately (the native stop, the safe state)"},{"name":"move_absolute","description":"Move the x, y and z axes to absolute positions in the stage unit"},{"name":"move_relative","description":"Move the x, y and z axes by relative distances in the stage unit"},{"name":"move_to_stored_position","description":"Move the x, y and z axes to the positions stored at an address"},{"name":"store_position","description":"Store the current x, y and z positions at an address and return the stored positions"}],"tags":["zaber","linear-stage","motion","serial"],"backends":["fake","hardware"],"served_backend":"fake","evidence":"contract_checked","upstream":{"repo_url":"https://github.com/janelia-python/zaber_device_python","commit":"2fec6746359b35acd4cf0c121cff03da8ae0a062","license":"BSD-3-Clause"},"stars":3,"install":{"openai4s":"openai4s lab add labs/janelia-python__zaber_device_python","mhs":"mhs serve labs/janelia-python__zaber_device_python --port 7400","mcp":"mhs serve labs/janelia-python__zaber_device_python --mcp"}},
{"id":"labs/jasapp__rigol","name":"RIGOL DP832A triple-channel DC power supply","device_id":"mhs://localhost/rigol-dp832a","track":"labs","category":"Electronics and measurement","topic":null,"kind":"instrument","vendor":"RIGOL","model":"DP832A","mode":"hardware","risk":"R1","family":"python-object","role":"device-driver","intro":"RIGOL DP832A triple-channel DC power supply, adapted from jasapp/rigol. It reads `voltage_ch1`, `current_ch1`, `power_ch1`, `voltage_ch2` and 5 more; sets `output_ch1`, `voltage_setpoint_ch1`, `current_setpoint_ch1`, `output_ch2` and 5 more; runs `set_ovp` and `set_ocp`. `set_ovp`: set the over-voltage protection threshold of one channel and enable it (:OUTP:OVP). A hardware driver: the market serves its fake backend, so no instrument is needed.","measures":["voltage_ch1","current_ch1","power_ch1","voltage_ch2","current_ch2","power_ch2","voltage_ch3","current_ch3","power_ch3"],"adjusts":["output_ch1","voltage_setpoint_ch1","current_setpoint_ch1","output_ch2","voltage_setpoint_ch2","current_setpoint_ch2","output_ch3","voltage_setpoint_ch3","current_setpoint_ch3"],"actions":[{"name":"set_ovp","description":"Set the over-voltage protection threshold of one channel and enable it (:OUTP:OVP)"},{"name":"set_ocp","description":"Set the over-current protection threshold of one channel and enable it (:OUTP:OCP)"}],"tags":["power-supply","dc-source","triple-channel","usb-tmc"],"backends":["fake","hardware"],"served_backend":"fake","evidence":"contract_checked","upstream":{"repo_url":"https://github.com/jasapp/rigol","commit":"602b8623f820f6b4db4d225b1d66f11b3bbb6d6a","license":"NOASSERTION"},"stars":1,"install":{"openai4s":"openai4s lab add labs/jasapp__rigol","mhs":"mhs serve labs/jasapp__rigol --port 7400","mcp":"mhs serve labs/jasapp__rigol --mcp"}},
{"id":"labs/jasegehring__spamb","name":"SPAMB syringe pump (Chemyx Fusion 4000-X, PumpController)","device_id":"mhs://localhost/spamb-pump","track":"labs","category":"Liquid handling and fluidics","topic":null,"kind":"fluid.pump","vendor":"Chemyx","model":"Fusion 4000-X","mode":"hardware","risk":"R2","family":"serial","role":"driver-pack","intro":"SPAMB syringe pump (Chemyx Fusion 4000-X, PumpController), adapted from jasegehring/spamb. It reads `running`, `dispensed_volume` and `volume_remaining`; sets `direction`, `flow_rate`, `target_volume` and `syringe_diameter`; runs `run_pump` and `stop_pump`. `run_pump`: run a pump at a declared flow rate for a declared duration or volume in a declared direction, reporting the volume moved. A hardware driver: the market serves its fake backend, so no instrument is needed.","measures":["running","dispensed_volume","volume_remaining"],"adjusts":["direction","flow_rate","target_volume","syringe_diameter"],"actions":[{"name":"run_pump","description":"Run a pump at a declared flow rate for a declared duration or volume in a declared direction, reporting the volume moved."},{"name":"stop_pump","description":"Stop the pump; this is the safe state and takes no input"}],"tags":["spamb","fluidics","syringe pump","chemyx","fusion 4000-x","serial"],"backends":["fake","hardware"],"served_backend":"fake","evidence":"contract_checked","upstream":{"repo_url":"https://github.com/jasegehring/spamb","commit":"06a404c1879d0d1f926ba59470f81f9b7e7987cb","license":"MIT"},"stars":0,"install":{"openai4s":"openai4s lab add labs/jasegehring__spamb","mhs":"mhs serve labs/jasegehring__spamb --port 7400","mcp":"mhs serve labs/jasegehring__spamb --mcp"}},
{"id":"labs/jdmax__epics-device-lib","name":"Lake Shore 336 temperature controller (epics-device-lib ls336 DeviceConnection)","device_id":"mhs://localhost/ls336","track":"labs","category":"Thermal and process control","topic":null,"kind":"thermal.zone","vendor":"Lake Shore Cryotronics","model":"Model 336 temperature controller","mode":"hardware","risk":"R2","family":"python-object","role":"driver-pack","intro":"Lake Shore 336 temperature controller (epics-device-lib ls336 DeviceConnection), adapted from jdmax/epics-device-lib. It reads `temperature`, `temperatures`, `heater_output`, `pid` and 1 more; sets `setpoint`, `manual_heater` and `heater_range`; runs `set_temperature`, `heater_off` and `enable_heater`. `set_temperature`: set the target temperature of a thermal zone and optionally wait for the zone to reach the setpoint within a declared tolerance. A hardware driver: the market serves its fake backend, so no instrument is needed.","measures":["temperature","temperatures","heater_output","pid","output_mode"],"adjusts":["setpoint","manual_heater","heater_range"],"actions":[{"name":"set_temperature","description":"Set the target temperature of a thermal zone and optionally wait for the zone to reach the setpoint within a declared tolerance."},{"name":"heater_off","description":"Command the configured heater output off (OUTMODE <channel>,0,<channel>,0) and confirm mode 0 with a fresh OUTMODE? read; it takes no input"},{"name":"enable_heater","description":"Command the configured output back to the reenable_mode option's control mode (default Closed Loop) with OUTMODE <channel>,<mode>,<channel>,0 and confirm it with OUTMODE?; heating resumes toward the setpoint or manual output stored in the controller; it takes no input"}],"tags":["lakeshore","ls336","temperature-controller","cryostat","heater","telnet","epics"],"backends":["fake","hardware"],"served_backend":"fake","evidence":"contract_checked","upstream":{"repo_url":"https://github.com/jdmax/epics-device-lib","commit":"370b8e3d94224db70ee2a1f51bd28c5d305daefe","license":"NOASSERTION"},"stars":0,"install":{"openai4s":"openai4s lab add labs/jdmax__epics-device-lib","mhs":"mhs serve labs/jdmax__epics-device-lib --port 7400","mcp":"mhs serve labs/jdmax__epics-device-lib --mcp"}},
{"id":"labs/jieunboy0516__newport-smc100-motor-controller-library---python","name":"Newport SMC100 motor controller (smc100_base.smc100)","device_id":"mhs://localhost/smc100","track":"labs","category":"Motion control","topic":null,"kind":"motion.axis","vendor":"Newport","model":"SMC100 motor controller","mode":"hardware","risk":"R1","family":"python-object","role":"device-driver","intro":"Newport SMC100 motor controller (smc100_base.smc100), adapted from jieunboy0516/newport-smc100-motor-controller-library---python. It reads `position`, `state` and `errors`; sets `velocity`; runs `move_absolute`, `move_relative`, `start_home` and `stop_motion`. `move_absolute`: move the axis to an absolute position in mm (the native PA command). A hardware driver: the market serves its fake backend, so no instrument is needed.","measures":["position","state","errors"],"adjusts":["velocity"],"actions":[{"name":"move_absolute","description":"Move the axis to an absolute position in mm (the native PA command)"},{"name":"move_relative","description":"Move the axis by a relative offset in mm (the native PR command)"},{"name":"start_home","description":"Start the native home command (OR); it reports command acceptance, not homing completion"},{"name":"stop_motion","description":"Stop all motion on the resource with a declared deceleration profile and report the stopping position. This capability is always cancellable=false and is exempt from rate limiting."}],"tags":["newport","smc100","motor controller","motion axis","serial"],"backends":["fake","hardware"],"served_backend":"fake","evidence":"contract_checked","upstream":{"repo_url":"https://github.com/jieunboy0516/newport-smc100-motor-controller-library---python","commit":"b828102ddcc30495084606fd1634066c95c985a0","license":"NOASSERTION"},"stars":3,"install":{"openai4s":"openai4s lab add labs/jieunboy0516__newport-smc100-motor-controller-library---python","mhs":"mhs serve labs/jieunboy0516__newport-smc100-motor-controller-library---python --port 7400","mcp":"mhs serve labs/jieunboy0516__newport-smc100-motor-controller-library---python --mcp"}},
{"id":"labs/jjgoings__gym-muller_brown","name":"gym-muller_brown discrete Muller-Brown potential","device_id":"mhs://localhost/muller-brown","track":"labs","category":"Simulation","topic":"chemistry","kind":"world.sim","vendor":"jjgoings","model":"gym-muller_brown","mode":"simulated","risk":"R0","family":"gymnasium","role":"sim-env","intro":"gym-muller_brown discrete Muller-Brown potential, adapted from jjgoings/gym-muller_brown. It reads `observation`, `reward`, `terminated`, `truncated` and 4 more; runs `step`, `reset` and `seed`. `step`: advance the simulated world by a bounded number of fixed timesteps, optionally applying an action for each step, and return the resulting observation and terminal flags. A simulator: the market serves it with a stand-in that needs no simulator install.","measures":["observation","reward","terminated","truncated","tick","episode","seed","info"],"adjusts":[],"actions":[{"name":"step","description":"Advance the simulated world by a bounded number of fixed timesteps, optionally applying an action for each step, and return the resulting observation and terminal flags."},{"name":"reset","description":"Reset the simulated world to a scenario start state and return the initial observation. When a seed is supplied the endpoint records it in the receipt; otherwise the endpoint's declared default seed applies."},{"name":"seed","description":"Set the seed used by the simulated world's random number generators for subsequent steps, without resetting the world. The accepted seed is echoed in the receipt."}],"tags":["muller-brown","potential-energy-surface","gridworld","reinforcement-learning","simulation","gymnasium"],"backends":["fake"],"served_backend":"fake","evidence":"contract_checked","upstream":{"repo_url":"https://github.com/jjgoings/gym-muller_brown","commit":"41467f4137008045c759a499cdcbb3aadf04f70c","license":"MIT"},"stars":3,"install":{"openai4s":"openai4s lab add labs/jjgoings__gym-muller_brown","mhs":"mhs serve labs/jjgoings__gym-muller_brown --port 7400","mcp":"mhs serve labs/jjgoings__gym-muller_brown --mcp"}},
{"id":"labs/jonathanvanschenck__sr830-python","name":"SRS SR830 lock-in amplifier","device_id":"mhs://localhost/sr830","track":"labs","category":"Electronics and measurement","topic":null,"kind":"instrument","vendor":"Stanford Research Systems","model":"SR830 lock-in amplifier","mode":"hardware","risk":"R1","family":"scpi","role":"device-driver","intro":"SRS SR830 lock-in amplifier, adapted from jonathanvanschenck/sr830-python. It reads `frequency`, `x`, `y`, `r` and 1 more; sets `time_constant_index`, `sensitivity_index` and `sync_filter`. A hardware driver: the market serves its fake backend, so no instrument is needed.","measures":["frequency","x","y","r","theta"],"adjusts":["time_constant_index","sensitivity_index","sync_filter"],"actions":[],"tags":["lock-in amplifier","sr830","gpib","scpi"],"backends":["fake"],"served_backend":"fake","evidence":"contract_checked","upstream":{"repo_url":"https://github.com/jonathanvanschenck/sr830-python","commit":"fdce76ec409d2fd768a87719854deb2395152026","license":"NOASSERTION"},"stars":2,"install":{"openai4s":"openai4s lab add labs/jonathanvanschenck__sr830-python","mhs":"mhs serve labs/jonathanvanschenck__sr830-python --port 7400","mcp":"mhs serve labs/jonathanvanschenck__sr830-python --mcp"}},
{"id":"labs/jordvl__pylabrobot-open-science-nd1000","name":"Thermo Fisher NanoDrop 1000 spectrophotometer (Code/nanodrop.py:NanoDrop1000)","device_id":"mhs://localhost/nanodrop-1000","track":"labs","category":"Spectroscopy","topic":null,"kind":"instrument.spectrophotometer","vendor":"Thermo Fisher Scientific","model":"NanoDrop 1000","mode":"hardware","risk":"R1","family":"python-object","role":"device-driver","intro":"Thermo Fisher NanoDrop 1000 spectrophotometer (Code/nanodrop.py:NanoDrop1000), adapted from jordvl/pylabrobot-open-science-nd1000. It reads `raw_spectrum`; sets `lamp`, `magnet` and `integration_time`; runs `measure_spectrum` and `take_blank`. `measure_spectrum`: acquire an optical or mass spectrum over a declared wavelength or mass range and return the axis and intensity arrays, or an artifact reference for large spectra. A hardware driver: the market serves its fake backend, so no instrument is needed.","measures":["raw_spectrum"],"adjusts":["lamp","magnet","integration_time"],"actions":[{"name":"measure_spectrum","description":"Acquire an optical or mass spectrum over a declared wavelength or mass range and return the axis and intensity arrays, or an artifact reference for large spectra."},{"name":"take_blank","description":"Acquire the dark and blank baselines the absorbance measurement needs"}],"tags":["spectrophotometer","spectrometer","absorbance","uv-vis","nanodrop","usb","pylabrobot"],"backends":["fake","hardware"],"served_backend":"fake","evidence":"contract_checked","upstream":{"repo_url":"https://github.com/jordvl/pylabrobot-open-science-nd1000","commit":"db60b66494230b65d0c88bca07ce1304a1a974ee","license":"NOASSERTION"},"stars":0,"install":{"openai4s":"openai4s lab add labs/jordvl__pylabrobot-open-science-nd1000","mhs":"mhs serve labs/jordvl__pylabrobot-open-science-nd1000 --port 7400","mcp":"mhs serve labs/jordvl__pylabrobot-open-science-nd1000 --mcp"}},
{"id":"labs/josuablejeru__labmastro","name":"Hanmatek HM bench supply (labmastro Modbus RTU)","device_id":"mhs://localhost/hanmatek-hm","track":"labs","category":"Electronics and measurement","topic":null,"kind":"instrument.smu","vendor":"Hanmatek","model":"HM series","mode":"hardware","risk":"R2","family":"tag-bridge","role":"device-driver","intro":"Hanmatek HM bench supply (labmastro Modbus RTU), adapted from josuablejeru/labmastro. It reads `output_enabled`, `voltage` and `current`; sets `voltage_setpoint`, `current_setpoint`, `over_voltage_protection` and `over_current_protection`; runs `output_on` and `output_off`. `output_on`: enable the output (0x0001 = 1, confirmed by read-back) at the supply's live setpoints, which this package cannot read or bound: set and verify them on the supply first. A hardware driver: the market serves its fake backend, so no instrument is needed.","measures":["output_enabled","voltage","current"],"adjusts":["voltage_setpoint","current_setpoint","over_voltage_protection","over_current_protection"],"actions":[{"name":"output_on","description":"Enable the output (0x0001 = 1, confirmed by read-back) at the supply's live setpoints, which this package cannot read or bound: set and verify them on the supply first"},{"name":"output_off","description":"Disable the supply output (register 0x0001 = 0) and confirm it by read-back"}],"tags":["power-supply","modbus","modbus-rtu","tag-bridge","hanmatek"],"backends":["fake","hardware"],"served_backend":"fake","evidence":"contract_checked","upstream":{"repo_url":"https://github.com/josuablejeru/labmastro","commit":"86db05e8dd4e37d66667e18e4d8e2fadbb864b18","license":"GPL-3.0"},"stars":1,"install":{"openai4s":"openai4s lab add labs/josuablejeru__labmastro","mhs":"mhs serve labs/josuablejeru__labmastro --port 7400","mcp":"mhs serve labs/josuablejeru__labmastro --mcp"}},
{"id":"labs/jovanmarkov96__keysight-dsox1200-control","name":"Keysight InfiniiVision 1200 X-Series oscilloscope (keysight_dsox1200.DSOX1200)","device_id":"mhs://localhost/keysight-dsox1200","track":"labs","category":"Electronics and measurement","topic":null,"kind":"instrument","vendor":"Keysight Technologies","model":"InfiniiVision 1200 X-Series oscilloscope","mode":"hardware","risk":"R1","family":"python-object","role":"device-driver","intro":"Keysight InfiniiVision 1200 X-Series oscilloscope (keysight_dsox1200.DSOX1200), adapted from jovanmarkov96/keysight-dsox1200-control. It reads `identity`, `channel1_probe_ratio`, `channel1_invert`, `timebase_mode` and 7 more; sets `channel1_display`, `channel1_coupling`, `channel1_scale_v_per_div`, `channel1_offset_v` and 4 more; runs `measure`, `run`, `single`, `autoscale` and 1 more. `measure`: read one scalar automatic measurement from the scope's current measurement source. A hardware driver: the market serves its fake backend, so no instrument is needed.","measures":["identity","channel1_probe_ratio","channel1_invert","timebase_mode","timebase_position_s","trigger_slope","trigger_sweep","acquire_count","acquire_points","sample_rate_hz","acquire_complete"],"adjusts":["channel1_display","channel1_coupling","channel1_scale_v_per_div","channel1_offset_v","timebase_scale_s_per_div","trigger_source","trigger_level_v","acquire_type"],"actions":[{"name":"measure","description":"Read one scalar automatic measurement from the scope's current measurement source"},{"name":"run","description":"Start continuous acquisitions (:RUN)"},{"name":"single","description":"Arm one acquisition (:SINGle)"},{"name":"autoscale","description":"Auto-configure the vertical, timebase and trigger settings (:AUToscale)"},{"name":"stop_acquisition","description":"Stop acquisitions (:STOP, the safe state); it takes no input"}],"tags":["oscilloscope","keysight","infiniivision","dsox1200","edux1052","scpi","visa"],"backends":["fake","hardware"],"served_backend":"fake","evidence":"contract_checked","upstream":{"repo_url":"https://github.com/jovanmarkov96/keysight-dsox1200-control","commit":"34ba50a758b9f4e8773dee788c3f9a4c04455f8f","license":"MIT"},"stars":0,"install":{"openai4s":"openai4s lab add labs/jovanmarkov96__keysight-dsox1200-control","mhs":"mhs serve labs/jovanmarkov96__keysight-dsox1200-control --port 7400","mcp":"mhs serve labs/jovanmarkov96__keysight-dsox1200-control --mcp"}},
{"id":"labs/jrafolsr__pyinstruments","name":"Keysight 33210A function generator","device_id":"mhs://localhost/keysight33210a","track":"labs","category":"Electronics and measurement","topic":null,"kind":"instrument","vendor":"Keysight / Agilent Technologies","model":"33210A function generator","mode":"hardware","risk":"R1","family":"scpi","role":"device-driver","intro":"Keysight 33210A function generator, adapted from jrafolsr/pyinstruments. It sets `frequency`, `amplitude`, `offset`, `function` and 2 more. A hardware driver: the market serves its fake backend, so no instrument is needed.","measures":[],"adjusts":["frequency","amplitude","offset","function","load","output"],"actions":[],"tags":["function generator","keysight","agilent","33210a","scpi"],"backends":["fake"],"served_backend":"fake","evidence":"contract_checked","upstream":{"repo_url":"https://github.com/jrafolsr/pyinstruments","commit":"631eb6fe6e61ca83e0d065aa3e36b04244c952b4","license":"MIT"},"stars":9,"install":{"openai4s":"openai4s lab add labs/jrafolsr__pyinstruments","mhs":"mhs serve labs/jrafolsr__pyinstruments --port 7400","mcp":"mhs serve labs/jrafolsr__pyinstruments --mcp"}},
{"id":"labs/kagisokgwahla__capstone-molecule-environment","name":"molecule-v0 molecular editing environment","device_id":"mhs://localhost/molecule-v0","track":"labs","category":"Simulation","topic":"chemistry","kind":"world.sim","vendor":"kagisokgwahla","model":"capstone-molecule-environment","mode":"simulated","risk":"R0","family":"gymnasium","role":"sim-env","intro":"molecule-v0 molecular editing environment, adapted from kagisokgwahla/capstone-molecule-environment. It reads `observation`, `tick` and `episode`; runs `step` and `reset_world`. `step`: advance the simulated world by a bounded number of fixed timesteps, optionally applying an action for each step, and return the resulting observation and terminal flags. A simulator: the market serves it with a stand-in that needs no simulator install.","measures":["observation","tick","episode"],"adjusts":[],"actions":[{"name":"step","description":"Advance the simulated world by a bounded number of fixed timesteps, optionally applying an action for each step, and return the resulting observation and terminal flags."},{"name":"reset_world","description":"Reset the simulated world to a scenario start state and return the initial observation. When a seed is supplied the endpoint records it in the receipt; otherwise the endpoint's declared default seed applies."}],"tags":["molecule","drug-design","reinforcement-learning","simulation","smiles"],"backends":["fake"],"served_backend":"fake","evidence":"contract_checked","upstream":{"repo_url":"https://github.com/kagisokgwahla/capstone-molecule-environment","commit":"8c1bb00fcec88b366ba3947623fa3d52990be0d2","license":"GPL-3.0"},"stars":1,"install":{"openai4s":"openai4s lab add labs/kagisokgwahla__capstone-molecule-environment","mhs":"mhs serve labs/kagisokgwahla__capstone-molecule-environment --port 7400","mcp":"mhs serve labs/kagisokgwahla__capstone-molecule-environment --mcp"}},
{"id":"labs/kajalbiju__psi_bluesky_backend","name":"Oxford Instruments Mercury iTC temperature controller (PSI Bluesky4)","device_id":"mhs://localhost/mercury-itc","track":"labs","category":"Thermal and process control","topic":null,"kind":"thermal.zone","vendor":"Oxford Instruments","model":"Mercury iTC temperature controller","mode":"hardware","risk":"R2","family":"scpi","role":"driver-pack","intro":"Oxford Instruments Mercury iTC temperature controller (PSI Bluesky4), adapted from kajalbiju/psi_bluesky_backend. It reads `temperature`; sets `temperature_setpoint`, `heater_setpoint`, `p_value`, `i_value` and 1 more; runs `heater_off`. `heater_off`: drive the temperature-loop setpoint to 0 K and the heater-loop setpoint to 0 (the safe state); it takes no input. A hardware driver: the market serves its fake backend, so no instrument is needed.","measures":["temperature"],"adjusts":["temperature_setpoint","heater_setpoint","p_value","i_value","d_value"],"actions":[{"name":"heater_off","description":"Drive the temperature-loop setpoint to 0 K and the heater-loop setpoint to 0 (the safe state); it takes no input"}],"tags":["temperature controller","mercury itc","cryogenic","pid","visa"],"backends":["fake","hardware"],"served_backend":"fake","evidence":"contract_checked","upstream":{"repo_url":"https://github.com/kajalbiju/psi_bluesky_backend","commit":"59252b014ef37fc4f2de2e37eda1fca755afe50f","license":"NOASSERTION"},"stars":0,"install":{"openai4s":"openai4s lab add labs/kajalbiju__psi_bluesky_backend","mhs":"mhs serve labs/kajalbiju__psi_bluesky_backend --port 7400","mcp":"mhs serve labs/kajalbiju__psi_bluesky_backend --mcp"}},
{"id":"labs/karimrayttu__ece-tool-suite","name":"ECE Tool Suite oscilloscope (ece_suite.instruments.keysight.KeysightScope)","device_id":"mhs://localhost/ece-scope","track":"labs","category":"Electronics and measurement","topic":null,"kind":"instrument","vendor":"Keysight Technologies","model":"InfiniiVision-class oscilloscope","mode":"hardware","risk":"R1","family":"python-object","role":"driver-pack","intro":"ECE Tool Suite oscilloscope (ece_suite.instruments.keysight.KeysightScope), adapted from karimrayttu/ece-tool-suite. It reads `identity` and `measurements`; runs `measure_item`, `measure_vpp`, `capture`, `run` and 3 more. `measure_item`: read one scalar automatic measurement from the scope's current measurement set. A hardware driver: the market serves its fake backend, so no instrument is needed.","measures":["identity","measurements"],"adjusts":[],"actions":[{"name":"measure_item","description":"Read one scalar automatic measurement from the scope's current measurement set"},{"name":"measure_vpp","description":"Measure peak-to-peak voltage on channel 1 (:MEAS:VPP?)"},{"name":"capture","description":"Capture channel 1 and report a scalar summary of the record; the waveform array itself is not transferred"},{"name":"run","description":"Start continuous acquisition (:RUN)"},{"name":"single","description":"Arm one acquisition (:SINGle)"},{"name":"reset_instrument","description":"Reset the scope to its default setup (*RST and *CLS)"},{"name":"stop_acquisition","description":"Stop acquisition (:STOP, the safe state); it takes no input"}],"tags":["oscilloscope","scpi","visa","keysight","infiniivision","measurement"],"backends":["fake","hardware"],"served_backend":"fake","evidence":"contract_checked","upstream":{"repo_url":"https://github.com/karimrayttu/ece-tool-suite","commit":"13f7962a674ebc998a2ad2a31eb8592df65ad022","license":"MIT"},"stars":1,"install":{"openai4s":"openai4s lab add labs/karimrayttu__ece-tool-suite","mhs":"mhs serve labs/karimrayttu__ece-tool-suite --port 7400","mcp":"mhs serve labs/karimrayttu__ece-tool-suite --mcp"}},
{"id":"labs/kist-csrc__batchsynthesismodule","name":"IKA RET control-visc hotplate stirrer","device_id":"mhs://localhost/ika-ret-control-visc","track":"labs","category":"Thermal and process control","topic":null,"kind":"thermal.zone","vendor":"IKA","model":"RET control-visc","mode":"hardware","risk":"R2","family":"python-object","role":"device-driver","intro":"IKA RET control-visc hotplate stirrer, adapted from kist-csrc/batchsynthesismodule. It reads `medium_temperature`, `hot_plate_temperature`, `heat_transfer_medium_setpoint`, `hot_plate_safety_setpoint` and 3 more; sets `medium_setpoint`, `hot_plate_setpoint` and `stir_rate_setpoint`; runs `heat_to`, `set_heater`, `set_stirrer`, `set_ph_meter` and 3 more. `heat_to`: set the target temperature of a thermal zone and optionally wait for the zone to reach the setpoint within a declared tolerance. A hardware driver: the market serves its fake backend, so no instrument is needed.","measures":["medium_temperature","hot_plate_temperature","heat_transfer_medium_setpoint","hot_plate_safety_setpoint","stir_rate","ph","weight"],"adjusts":["medium_setpoint","hot_plate_setpoint","stir_rate_setpoint"],"actions":[{"name":"heat_to","description":"Set the target temperature of a thermal zone and optionally wait for the zone to reach the setpoint within a declared tolerance."},{"name":"set_heater","description":"Start or stop the hot plate heater"},{"name":"set_stirrer","description":"Start or stop the stirrer"},{"name":"set_ph_meter","description":"Start or stop the integrated pH meter"},{"name":"set_weighing","description":"Start or stop the integrated weighing function"},{"name":"reset_hot_plate","description":"Send RESET to the hot plate"},{"name":"stop_heating_and_stirring","description":"Stop the heater and the stirrer (STOP_1 and STOP_4); the native safe state"}],"tags":["hotplate","stirrer","ika","serial","thermal"],"backends":["fake","hardware"],"served_backend":"fake","evidence":"contract_checked","upstream":{"repo_url":"https://github.com/kist-csrc/batchsynthesismodule","commit":"5d0e9bb2ae49758f478021be35d7e5f6c2deac8f","license":"NOASSERTION"},"stars":1,"install":{"openai4s":"openai4s lab add labs/kist-csrc__batchsynthesismodule","mhs":"mhs serve labs/kist-csrc__batchsynthesismodule --port 7400","mcp":"mhs serve labs/kist-csrc__batchsynthesismodule --mcp"}},
{"id":"labs/kletternaut__scopemcp","name":"Owon/Abestop DS1102 oscilloscope (ds1102_mcp.ScopeController)","device_id":"mhs://localhost/ds1102","track":"labs","category":"Electronics and measurement","topic":null,"kind":"instrument","vendor":"Owon/Abestop","model":"DS1102 oscilloscope","mode":"hardware","risk":"R1","family":"python-object","role":"device-driver","intro":"Owon/Abestop DS1102 oscilloscope (ds1102_mcp.ScopeController), adapted from kletternaut/scopemcp. It reads `instrument_model`, `run_status`, `channel1_frequency_hz`, `channel1_offset_raw` and 4 more; sets `channel1_scale`, `channel1_coupling`, `channel1_offset_v`, `horizontal_scale` and 4 more; runs `autoset`, `run` and `stop_acquisition`. `autoset`: run the scope's automatic setup (:AUToset on). A hardware driver: the market serves its fake backend, so no instrument is needed.","measures":["instrument_model","run_status","channel1_frequency_hz","channel1_offset_raw","channel2_frequency_hz","channel2_scale","channel2_coupling","channel2_offset_raw"],"adjusts":["channel1_scale","channel1_coupling","channel1_offset_v","horizontal_scale","trigger_mode","trigger_slope","trigger_source","trigger_level_mv"],"actions":[{"name":"autoset","description":"Run the scope's automatic setup (:AUToset on)"},{"name":"run","description":"Start continuous acquisition (:run)"},{"name":"stop_acquisition","description":"Stop the acquisition (:stop, the safe state); it takes no input"}],"tags":["oscilloscope","ds1102","usb","pyusb","scpi"],"backends":["fake","hardware"],"served_backend":"fake","evidence":"contract_checked","upstream":{"repo_url":"https://github.com/kletternaut/scopemcp","commit":"a932b777694d7bfc48c821c3afef7e3eb2da3f0e","license":"GPL-3.0"},"stars":0,"install":{"openai4s":"openai4s lab add labs/kletternaut__scopemcp","mhs":"mhs serve labs/kletternaut__scopemcp --port 7400","mcp":"mhs serve labs/kletternaut__scopemcp --mcp"}},
{"id":"labs/knerlab__sim_control_software","name":"Motorized polarizer (knerlab SIM/AO microscope)","device_id":"mhs://localhost/polarizer","track":"labs","category":"Motion control","topic":null,"kind":"motion.axis","vendor":null,"model":null,"mode":"hardware","risk":"R1","family":"serial","role":"device-driver","intro":"Motorized polarizer (knerlab SIM/AO microscope), adapted from knerlab/sim_control_software. It reads `position`; runs `move_absolute` and `stop_motion`. `move_absolute`: command one or more actuated joints to target positions in joint space, optionally over a declared duration, and report whether the target was reached within tolerance. A hardware driver: the market serves its fake backend, so no instrument is needed.","measures":["position"],"adjusts":[],"actions":[{"name":"move_absolute","description":"Command one or more actuated joints to target positions in joint space, optionally over a declared duration, and report whether the target was reached within tolerance."},{"name":"stop_motion","description":"Stop all motion on the resource with a declared deceleration profile and report the stopping position. This capability is always cancellable=false and is exempt from rate limiting."}],"tags":["motorized polarizer","rotation stage","usmc","structured illumination","motion"],"backends":["fake","hardware"],"served_backend":"fake","evidence":"contract_checked","upstream":{"repo_url":"https://github.com/knerlab/sim_control_software","commit":"4abc7e9ddafa89bc0ab0fc8f6e25321fe676d95c","license":"GPL-3.0"},"stars":7,"install":{"openai4s":"openai4s lab add labs/knerlab__sim_control_software","mhs":"mhs serve labs/knerlab__sim_control_software --port 7400","mcp":"mhs serve labs/knerlab__sim_control_software --mcp"}},
{"id":"labs/ksunden__zaber.serial","name":"Zaber serial axis (zaber.serial.ascii.AsciiAxis)","device_id":"mhs://localhost/zaber-axis","track":"labs","category":"Motion control","topic":null,"kind":"motion.axis","vendor":"Zaber Technologies","model":"Zaber device over the ASCII serial protocol","mode":"hardware","risk":"R1","family":"python-object","role":"device-driver","intro":"Zaber serial axis (zaber.serial.ascii.AsciiAxis), adapted from ksunden/zaber.serial. It reads `position` and `status`; runs `home_axis`, `move_abs`, `move_rel`, `move_vel` and 1 more. `home_axis`: send the native home command and wait until the axis reports idle. A hardware driver: the market serves its fake backend, so no instrument is needed.","measures":["position","status"],"adjusts":[],"actions":[{"name":"home_axis","description":"Send the native home command and wait until the axis reports idle"},{"name":"move_abs","description":"Move the axis to an absolute native position in microsteps and wait until idle"},{"name":"move_rel","description":"Move the axis by a relative distance in microsteps and wait until idle"},{"name":"move_vel","description":"Start continuous motion at a native speed; call stop to end it"},{"name":"stop_axis","description":"Stop the axis with the native stop command and wait until it reports idle"}],"tags":["zaber","serial","ascii","motion","axis"],"backends":["fake","hardware"],"served_backend":"fake","evidence":"contract_checked","upstream":{"repo_url":"https://github.com/ksunden/zaber.serial","commit":"4bd9e1103f6a057fd376edcdf574251637465fba","license":"Apache-2.0"},"stars":1,"install":{"openai4s":"openai4s lab add labs/ksunden__zaber.serial","mhs":"mhs serve labs/ksunden__zaber.serial --port 7400","mcp":"mhs serve labs/ksunden__zaber.serial --mcp"}},
{"id":"labs/kzhao1228__pystage_apt","name":"Thorlabs APT stage controller (pystage-apt)","device_id":"mhs://localhost/apt-stage","track":"labs","category":"Motion control","topic":null,"kind":"motion.axis","vendor":"Thorlabs","model":"APT single-channel stage controller","mode":"hardware","risk":"R1","family":"python-object","role":"device-driver","intro":"Thorlabs APT stage controller (pystage-apt), adapted from kzhao1228/pystage_apt. It reads `in_motion`, `homed`, `channel_enabled`, `forward_limit_active` and 6 more; sets `position`, `maximum_velocity`, `acceleration`, `home_direction` and 1 more; runs `home`, `move_relative` and `stop_motion`. `home`: drive axes to their declared home position or reference switch, establishing the coordinate reference needed by other motion capabilities. A hardware driver: the market serves its fake backend, so no instrument is needed.","measures":["in_motion","homed","channel_enabled","forward_limit_active","reverse_limit_active","stage_model","serial_number","units","minimum_velocity","home_velocity"],"adjusts":["position","maximum_velocity","acceleration","home_direction","home_limit_switch"],"actions":[{"name":"home","description":"Drive axes to their declared home position or reference switch, establishing the coordinate reference needed by other motion capabilities."},{"name":"move_relative","description":"Move the stage relative to its current position"},{"name":"stop_motion","description":"Stop all motion on the resource with a declared deceleration profile and report the stopping position. This capability is always cancellable=false and is exempt from rate limiting."}],"tags":["thorlabs","apt","motion","stage","serial","usb"],"backends":["fake","hardware"],"served_backend":"fake","evidence":"contract_checked","upstream":{"repo_url":"https://github.com/kzhao1228/pystage_apt","commit":"34bf8886ae996f30469338be3b02c42455ffea65","license":"MIT"},"stars":10,"install":{"openai4s":"openai4s lab add labs/kzhao1228__pystage_apt","mhs":"mhs serve labs/kzhao1228__pystage_apt --port 7400","mcp":"mhs serve labs/kzhao1228__pystage_apt --mcp"}},
{"id":"labs/l-johnston__tekinstr","name":"Tektronix MDO3000 series oscilloscope (tekinstr.Oscilloscope)","device_id":"mhs://localhost/mdo3000","track":"labs","category":"Electronics and measurement","topic":null,"kind":"instrument","vendor":"Tektronix","model":"MDO3000 series oscilloscope","mode":"hardware","risk":"R1","family":"python-object","role":"device-driver","intro":"Tektronix MDO3000 series oscilloscope (tekinstr.Oscilloscope), adapted from l-johnston/tekinstr. It reads `sample_rate`, `acquisition_count` and `trigger_state`; sets `record_length`, `horizontal_scale`, `horizontal_delay_mode`, `acquisition_mode` and 3 more; runs `force_trigger`. `force_trigger`: force a trigger event and report the trigger state afterwards. A hardware driver: the market serves its fake backend, so no instrument is needed.","measures":["sample_rate","acquisition_count","trigger_state"],"adjusts":["record_length","horizontal_scale","horizontal_delay_mode","acquisition_mode","num_averages","acquisition_state","single_acquisition"],"actions":[{"name":"force_trigger","description":"Force a trigger event and report the trigger state afterwards"}],"tags":["oscilloscope","tektronix","mdo3000","scpi","visa","test instrument"],"backends":["fake","hardware"],"served_backend":"fake","evidence":"contract_checked","upstream":{"repo_url":"https://github.com/l-johnston/tekinstr","commit":"7949430c1a6818d30aec152663c18dde85f2a7d7","license":"MIT"},"stars":1,"install":{"openai4s":"openai4s lab add labs/l-johnston__tekinstr","mhs":"mhs serve labs/l-johnston__tekinstr --port 7400","mcp":"mhs serve labs/l-johnston__tekinstr --mcp"}},
{"id":"labs/labjack__labjackpython","name":"LabJack U3 USB DAQ (LabJackPython U3)","device_id":"mhs://localhost/labjack-u3","track":"labs","category":"Electronics and measurement","topic":null,"kind":"instrument.dmm","vendor":"LabJack","model":"U3","mode":"hardware","risk":"R1","family":"python-object","role":"device-driver","intro":"LabJack U3 USB DAQ (LabJackPython U3), adapted from labjack/labjackpython. It reads `analog_input_0`, `internal_temperature`, `dio_states` and `measure_voltage`; sets `fio_analog` and `eio_analog`; runs `set_digital_output` and `reset_device`. `set_digital_output`: drive one U3 digital I/O line high or low; the line is also set to output. A hardware driver: the market serves its fake backend, so no instrument is needed.","measures":["analog_input_0","internal_temperature","dio_states","measure_voltage"],"adjusts":["fio_analog","eio_analog"],"actions":[{"name":"set_digital_output","description":"Drive one U3 digital I/O line high or low; the line is also set to output"},{"name":"reset_device","description":"Soft-reset the U3 to its power-up state (the native reset); it takes no input"}],"tags":["daq","labjack","u3","analog input","digital io","usb"],"backends":["fake","hardware"],"served_backend":"fake","evidence":"contract_checked","upstream":{"repo_url":"https://github.com/labjack/labjackpython","commit":"a2f13eb548cca6416b1d44b08b63f7c5fd7f943b","license":"MIT"},"stars":124,"install":{"openai4s":"openai4s lab add labs/labjack__labjackpython","mhs":"mhs serve labs/labjack__labjackpython --port 7400","mcp":"mhs serve labs/labjack__labjackpython --mcp"}},
{"id":"labs/labpy__lantz","name":"LabJack U12 USB DAQ (Lantz U12)","device_id":"mhs://localhost/labjack-u12","track":"labs","category":"Electronics and measurement","topic":null,"kind":"instrument.dmm","vendor":"LabJack","model":"U12","mode":"hardware","risk":"R1","family":"python-object","role":"driver-pack","intro":"LabJack U12 USB DAQ (Lantz U12), adapted from labpy/lantz. It reads `driver_version`, `firmware_version`, `analog_input_0`, `counter` and 2 more; sets `local_id`; runs `sample_voltages`, `set_analog_outputs`, `pulse_out` and `reset_device`. `sample_voltages`: acquire a block of analog input scans from channel 0 with aiBurst. A hardware driver: the market serves its fake backend, so no instrument is needed.","measures":["driver_version","firmware_version","analog_input_0","counter","streaming","measure_voltage"],"adjusts":["local_id"],"actions":[{"name":"sample_voltages","description":"Acquire a block of analog input scans from channel 0 with aiBurst"},{"name":"set_analog_outputs","description":"Set both analog output voltages (U12.eAnalogOut)"},{"name":"pulse_out","description":"Start a pulse train on the selected D0-D7 bits (U12.pulseOutStart)"},{"name":"reset_device","description":"Reset the U12 (U12.reset), the safe state; it takes no input"}],"tags":["daq","labjack","u12","analog input","analog output","pulse","counter"],"backends":["fake","hardware"],"served_backend":"fake","evidence":"contract_checked","upstream":{"repo_url":"https://github.com/labpy/lantz","commit":"3e878e3f765a4295b0089d04e241d4beb7b8a65b","license":"BSD-3-Clause"},"stars":139,"install":{"openai4s":"openai4s lab add labs/labpy__lantz","mhs":"mhs serve labs/labpy__lantz --port 7400","mcp":"mhs serve labs/labpy__lantz --mcp"}},
{"id":"labs/lachlangunn__oic","name":"OIC Arduino DAQ / meter","device_id":"mhs://localhost/oic-meter","track":"labs","category":"Electronics and measurement","topic":null,"kind":"instrument","vendor":"Lachlan Gunn","model":"OIC Meter (Arduino DAQ)","mode":"hardware","risk":"R1","family":"scpi","role":"device-driver","intro":"OIC Arduino DAQ / meter, adapted from lachlangunn/oic. It reads `voltage2`; sets `voltage0` and `voltage1`. A hardware driver: the market serves its fake backend, so no instrument is needed.","measures":["voltage2"],"adjusts":["voltage0","voltage1"],"actions":[],"tags":["arduino","daq","dmm","scpi","serial","pwm"],"backends":["fake"],"served_backend":"fake","evidence":"contract_checked","upstream":{"repo_url":"https://github.com/lachlangunn/oic","commit":"6c7ab800893dcd32584053b49a7825452e3119a9","license":"MIT"},"stars":55,"install":{"openai4s":"openai4s lab add labs/lachlangunn__oic","mhs":"mhs serve labs/lachlangunn__oic --port 7400","mcp":"mhs serve labs/lachlangunn__oic --mcp"}},
{"id":"labs/lando1784__pyagilis","name":"Newport Agilis agUC2","device_id":"mhs://localhost/agilis-aguc2","track":"labs","category":"Motion control","topic":null,"kind":"motion.axis","vendor":"Newport","model":"Agilis agUC2 piezo motion controller","mode":"hardware","risk":"R1","family":"serial","role":"device-driver","intro":"Newport Agilis agUC2, adapted from lando1784/pyagilis. It reads `x_steps`, `y_steps`, `x_at_limit`, `y_at_limit` and 2 more; runs `jog`, `go_to_zero`, `set_zero` and `stop_motion`. `jog`: jog axis 1 and axis 2 by signed step counts (relative motion). A hardware driver: the market serves its fake backend, so no instrument is needed.","measures":["x_steps","y_steps","x_at_limit","y_at_limit","x_last_operation","y_last_operation"],"adjusts":[],"actions":[{"name":"jog","description":"Jog axis 1 and axis 2 by signed step counts (relative motion)"},{"name":"go_to_zero","description":"Move both axes back to counter zero (the upstream goToZero)"},{"name":"set_zero","description":"Reset both axis counters to zero without moving (the upstream setZero)"},{"name":"stop_motion","description":"Stop both axes (the native stop); the device's safe state"}],"tags":["newport","agilis","piezo","motion-controller","serial"],"backends":["fake","hardware"],"served_backend":"fake","evidence":"contract_checked","upstream":{"repo_url":"https://github.com/lando1784/pyagilis","commit":"7d27bd1571aa6b4187e2e0d40c9f34feb45456f2","license":"LGPL-3.0"},"stars":5,"install":{"openai4s":"openai4s lab add labs/lando1784__pyagilis","mhs":"mhs serve labs/lando1784__pyagilis --port 7400","mcp":"mhs serve labs/lando1784__pyagilis --mcp"}},
{"id":"labs/laristizabal1__pv-emulator","name":"EA-PS 10060-170 programmable DC source (PV emulator)","device_id":"mhs://localhost/pv-emulator","track":"labs","category":"Electronics and measurement","topic":null,"kind":"instrument","vendor":"EA Elektro-Automatik","model":"EA-PS 10060-170","mode":"hardware","risk":"R2","family":"python-object","role":"device-driver","intro":"EA-PS 10060-170 programmable DC source (PV emulator), adapted from laristizabal1/pv-emulator. It reads `voltage`, `current`, `power` and `error_code`; sets `voltage_setpoint`, `current_setpoint` and `output`; runs `output_off`. `output_off`: switch the DC output off (OUTP OFF); this action is the safe state and takes no input. A hardware driver: the market serves its fake backend, so no instrument is needed.","measures":["voltage","current","power","error_code"],"adjusts":["voltage_setpoint","current_setpoint","output"],"actions":[{"name":"output_off","description":"Switch the DC output off (OUTP OFF); this action is the safe state and takes no input"}],"tags":["dc source","power supply","pv emulator","scpi","ea-ps"],"backends":["fake","hardware"],"served_backend":"fake","evidence":"contract_checked","upstream":{"repo_url":"https://github.com/laristizabal1/pv-emulator","commit":"a2339189e88c80889a86ac67bcf98b5cc9fc4447","license":"MIT"},"stars":0,"install":{"openai4s":"openai4s lab add labs/laristizabal1__pv-emulator","mhs":"mhs serve labs/laristizabal1__pv-emulator --port 7400","mcp":"mhs serve labs/laristizabal1__pv-emulator --mcp"}},
{"id":"labs/ledger-donjon__pypdm","name":"AlphANOV PDM laser source (pypdm.pdm:PDM)","device_id":"mhs://localhost/pdm","track":"labs","category":"Optics and microscopy","topic":null,"kind":"optics.laser","vendor":"AlphANOV","model":"PDM pulsed laser source","mode":"hardware","risk":"R2","family":"python-object","role":"device-driver","intro":"AlphANOV PDM laser source (pypdm.pdm:PDM), adapted from ledger-donjon/pypdm. It reads `address`, `protocol_version`, `activation`, `interlock_closed` and 13 more; runs `configure_pulse` and `disable_emission`. `configure_pulse`: write the pulse frequency and the diode current instructions and apply them to the device. A hardware driver: the market serves its fake backend, so no instrument is needed.","measures":["address","protocol_version","activation","interlock_closed","temperature","current","current_percentage","maximum_current","maximum_mean_current","offset_current","frequency","pulse_width","delay","operating_mode","current_source","sync_source","delay_line_type"],"adjusts":[],"actions":[{"name":"configure_pulse","description":"Write the pulse frequency and the diode current instructions and apply them to the device"},{"name":"disable_emission","description":"Clear the laser activation instruction and apply it (the native safe state); it takes no input"}],"tags":["laser","pulsed-laser","laser-diode","serial","binary-protocol"],"backends":["fake","hardware"],"served_backend":"fake","evidence":"contract_checked","upstream":{"repo_url":"https://github.com/ledger-donjon/pypdm","commit":"a059c30e5054a9e1276769c18c4f13e56a404a6a","license":"LGPL-3.0"},"stars":14,"install":{"openai4s":"openai4s lab add labs/ledger-donjon__pypdm","mhs":"mhs serve labs/ledger-donjon__pypdm --port 7400","mcp":"mhs serve labs/ledger-donjon__pypdm --mcp"}},
{"id":"labs/lewbert__talos-2d-transfer","name":"Zolix ZC300 XYR sample stage (talos.hal.devices.zolix:ZolixXYRStage)","device_id":"mhs://localhost/talos-zolix","track":"labs","category":"Motion control","topic":null,"kind":"motion.axis","vendor":"Zolix","model":"ZC300 XYR sample stage","mode":"hardware","risk":"R2","family":"python-object","role":"device-driver","intro":"Zolix ZC300 XYR sample stage (talos.hal.devices.zolix:ZolixXYRStage), adapted from lewbert/talos-2d-transfer. It reads `x_um`, `y_um`, `r_deg`, `moving` and 2 more; runs `move_abs` and `stop_motion`. `move_abs`: move the stage to an absolute X/Y position (and R when given) and wait, bounded by the request deadline, until the controller reports no axis moving; the position it reports is returned. A hardware driver: the market serves its fake backend, so no instrument is needed.","measures":["x_um","y_um","r_deg","moving","estop_active","alarm"],"adjusts":[],"actions":[{"name":"move_abs","description":"Move the stage to an absolute X/Y position (and R when given) and wait, bounded by the request deadline, until the controller reports no axis moving; the position it reports is returned"},{"name":"stop_motion","description":"Stop all motion on the resource with a declared deceleration profile and report the stopping position. This capability is always cancellable=false and is exempt from rate limiting."}],"tags":["zolix","zc300","xyr stage","motion","modbus rtu","serial"],"backends":["fake","hardware"],"served_backend":"fake","evidence":"contract_checked","upstream":{"repo_url":"https://github.com/lewbert/talos-2d-transfer","commit":"2b85b6a9c74b194d4507e3d7713f343a00680a32","license":"GPL-3.0"},"stars":1,"install":{"openai4s":"openai4s lab add labs/lewbert__talos-2d-transfer","mhs":"mhs serve labs/lewbert__talos-2d-transfer --port 7400","mcp":"mhs serve labs/lewbert__talos-2d-transfer --mcp"}},
{"id":"labs/liamsgithub__as7265x-spectrometer","name":"SparkFun Triad AS7265x spectrometer","device_id":"mhs://localhost/as7265x-spectrometer","track":"labs","category":"Spectroscopy","topic":null,"kind":"instrument.spectrometer","vendor":"SparkFun","model":"Triad Spectroscopy Sensor (AS7265x)","mode":"hardware","risk":"R1","family":"python-object","role":"device-driver","intro":"SparkFun Triad AS7265x spectrometer, adapted from liamsgithub/as7265x-spectrometer. It reads `board_present`, `hardware_version`, `temperatures` and `measure_intensity`; sets `integration_time_register`, `gain`, `led_drive_current`, `blue_led` and 1 more; runs `read_spectrum`, `factory_reset` and `leds_off`. `read_spectrum`: read all 18 raw and all 18 calibrated channel values in the ascending-frequency order of the clone. A hardware driver: the market serves its fake backend, so no instrument is needed.","measures":["board_present","hardware_version","temperatures","measure_intensity"],"adjusts":["integration_time_register","gain","led_drive_current","blue_led","shutter_leds"],"actions":[{"name":"read_spectrum","description":"Read all 18 raw and all 18 calibrated channel values in the ascending-frequency order of the clone"},{"name":"factory_reset","description":"Reset all three AS7265x devices to their factory defaults with the native init and report whether the board is present afterwards"},{"name":"leds_off","description":"Turn off the master blue LED and the shutter LEDs of all three devices (the safe state) and read them back; it takes no input"}],"tags":["spectrometer","as7265x","sparkfun","triad","i2c","led"],"backends":["fake","hardware"],"served_backend":"fake","evidence":"contract_checked","upstream":{"repo_url":"https://github.com/liamsgithub/as7265x-spectrometer","commit":"9b0ce11be6b904a89e907dc18dd10b03620cc90f","license":"NOASSERTION"},"stars":21,"install":{"openai4s":"openai4s lab add labs/liamsgithub__as7265x-spectrometer","mhs":"mhs serve labs/liamsgithub__as7265x-spectrometer --port 7400","mcp":"mhs serve labs/liamsgithub__as7265x-spectrometer --mcp"}},
{"id":"labs/little-did-i-know__scpi-instrument-control","name":"Siglent SPD3303X programmable power supply","device_id":"mhs://localhost/spd3303x","track":"labs","category":"Electronics and measurement","topic":null,"kind":"instrument","vendor":"Siglent","model":"SPD3303X / SPD3303X-E","mode":"hardware","risk":"R1","family":"scpi","role":"twin-candidate","intro":"Siglent SPD3303X programmable power supply, adapted from little-did-i-know/scpi-instrument-control. It reads `measured_voltage`, `measured_current`, `identity` and `last_error`; sets `voltage`, `current` and `tracking`; runs `identify`, `measure_voltage` and `measure_current`. `identify`: read the instrument identity. A hardware driver: the market serves its fake backend, so no instrument is needed.","measures":["measured_voltage","measured_current","identity","last_error"],"adjusts":["voltage","current","tracking"],"actions":[{"name":"identify","description":"Read the instrument identity"},{"name":"measure_voltage","description":"Measure output 1 voltage"},{"name":"measure_current","description":"Measure output 1 current"}],"tags":["power supply","psu","siglent","spd3303x","scpi"],"backends":["fake"],"served_backend":"fake","evidence":"contract_checked","upstream":{"repo_url":"https://github.com/little-did-i-know/scpi-instrument-control","commit":"e252a04dd33d57a543f5a65280cadfbaa634a4a5","license":"MIT"},"stars":13,"install":{"openai4s":"openai4s lab add labs/little-did-i-know__scpi-instrument-control","mhs":"mhs serve labs/little-did-i-know__scpi-instrument-control --port 7400","mcp":"mhs serve labs/little-did-i-know__scpi-instrument-control --mcp"}},
{"id":"labs/ludwigregalado__lock-in_sr830","name":"SRS SR830 lock-in amplifier","device_id":"mhs://localhost/sr830","track":"labs","category":"Electronics and measurement","topic":null,"kind":"instrument","vendor":"Stanford Research Systems","model":"SR830","mode":"hardware","risk":"R1","family":"serial","role":"device-driver","intro":"SRS SR830 lock-in amplifier, adapted from ludwigregalado/lock-in_sr830. It reads `x`, `y`, `r`, `theta` and 2 more; sets `frequency`, `amplitude`, `input_config`, `ground` and 6 more. A hardware driver: the market serves its fake backend, so no instrument is needed.","measures":["x","y","r","theta","phase","identity"],"adjusts":["frequency","amplitude","input_config","ground","coupling","line_filter","reserve","time_constant_index","slope","sync"],"actions":[],"tags":["lock-in amplifier","sr830","serial","measurement","phase"],"backends":["fake"],"served_backend":"fake","evidence":"contract_checked","upstream":{"repo_url":"https://github.com/ludwigregalado/lock-in_sr830","commit":"fbd78df88f25a051d938cdbe5b0a1263b938e6de","license":"NOASSERTION"},"stars":2,"install":{"openai4s":"openai4s lab add labs/ludwigregalado__lock-in_sr830","mhs":"mhs serve labs/ludwigregalado__lock-in_sr830 --port 7400","mcp":"mhs serve labs/ludwigregalado__lock-in_sr830 --mcp"}},
{"id":"labs/lxkang00__oscilloscope-mcp","name":"Siglent SDS2000X Plus through lxkang00/oscilloscope-mcp (SCPI transport)","device_id":"mhs://localhost/siglent_sds","track":"labs","category":"Electronics and measurement","topic":null,"kind":"instrument","vendor":"Siglent","model":"SDS2000X Plus series","mode":"hardware","risk":"R0","family":"python-object","role":"device-driver","intro":"Siglent SDS2000X Plus through lxkang00/oscilloscope-mcp (SCPI transport), adapted from lxkang00/oscilloscope-mcp. It reads `identity`, `trigger_status` and `acquisition_state`; runs `acquisition_control`, `configure_channel`, `get_channel`, `configure_timebase` and 18 more. `acquisition_control`: send one acquisition control: run, stop, autoset, force trigger, clear measurement statistics or factory reset. The driver sends the same SCPI word the pinned handler sends. A hardware driver: the market serves its fake backend, so no instrument is needed.","measures":["identity","trigger_status","acquisition_state"],"adjusts":[],"actions":[{"name":"acquisition_control","description":"Send one acquisition control: run, stop, autoset, force trigger, clear measurement statistics or factory reset. The driver sends the same SCPI word the pinned handler sends."},{"name":"configure_channel","description":"Set analog channel settings with the pinned :CHANnelN: commands; reply is the handler summary."},{"name":"get_channel","description":"Read the eight settings the pinned get_channel handler reads. A native failure is reported as a failed call instead of being hidden behind the handler's N/A fallback."},{"name":"configure_timebase","description":"Set main timebase scale, delay and mode under :TIMebase:."},{"name":"get_timebase","description":"Read timebase scale, delay and mode."},{"name":"configure_trigger","description":"Set trigger sweep, type, source, level, slope, coupling and holdoff in the pinned order."},{"name":"get_trigger","description":"Read the current trigger type, sweep, source, level and slope."},{"name":"configure_acquisition","description":"Set acquisition mode, memory depth, interpolation and average count under :ACQuire:."},{"name":"get_acquisition","description":"Read acquisition mode, memory depth, sample rate and interpolation."},{"name":"measure","description":"Select and read one automatic measurement item. The reply is the pinned handler's text; the numeric value is parsed from the same reply and is null when it is not a number."},{"name":"get_measure_stats","description":"Read count, mean, minimum, maximum and standard deviation of the measurement statistics."},{"name":"get_waveform_preamble","description":"Read and parse the ten-field waveform preamble. The waveform sample array is not carried by this binding."},{"name":"configure_display","description":"Set display grid, persistence, intensity, grid style and axis mode."},{"name":"configure_cursors","description":"Set cursor mode, sources and manual cursor type."},{"name":"get_cursor_values","description":"Read cursor mode and, when cursors are on, delta X and delta Y."},{"name":"configure_math","description":"Set math display, function, sources, scale, offset and FFT options."},{"name":"configure_digital","description":"Set digital-bus display, position, height, label and threshold on MSO models."},{"name":"save_setup","description":"Save the current setup to internal memory or USB with the pinned filename validation."},{"name":"recall_setup","description":"Recall a saved setup from internal memory or USB with the pinned filename validation."},{"name":"get_frequency_counter","description":"Read the hardware frequency counter mode, source and current frequency."},{"name":"get_status","description":"Read acquisition state, trigger state, operation complete and event status register."},{"name":"get_next_error","description":"Read and clear the next device error-queue entry."}],"tags":["oscilloscope","scpi","siglent","mcp-server","fake-only"],"backends":["fake","hardware"],"served_backend":"fake","evidence":"contract_checked","upstream":{"repo_url":"https://github.com/lxkang00/oscilloscope-mcp","commit":"3eebcdfb3c339d7038b80a9a31573538bc84a331","license":"NOASSERTION"},"stars":0,"install":{"openai4s":"openai4s lab add labs/lxkang00__oscilloscope-mcp","mhs":"mhs serve labs/lxkang00__oscilloscope-mcp --port 7400","mcp":"mhs serve labs/lxkang00__oscilloscope-mcp --mcp"}},
{"id":"labs/mabl__pymso5000","name":"RIGOL MSO5000 series oscilloscope (pymso5000.Scope)","device_id":"mhs://localhost/mso5000","track":"labs","category":"Electronics and measurement","topic":null,"kind":"instrument","vendor":"RIGOL Technologies","model":"MSO5000 series oscilloscope","mode":"hardware","risk":"R1","family":"python-object","role":"device-driver","intro":"RIGOL MSO5000 series oscilloscope (pymso5000.Scope), adapted from mabl/pymso5000. It reads `identity`, `trigger_status`, `average_count`, `sample_rate` and 6 more; sets `acquisition_type`, `channel1_scale_per_div`, `channel1_offset`, `timebase_scale_s_per_div` and 2 more; runs `run`, `measure` and `configure_channel_input`. `run`: start continuous acquisition (the native RUN command). A hardware driver: the market serves its fake backend, so no instrument is needed.","measures":["identity","trigger_status","average_count","sample_rate","memory_depth_points","channel1_enabled","channel1_coupling","channel1_probe_ratio","channel1_bandwidth_limit","timebase_mode"],"adjusts":["acquisition_type","channel1_scale_per_div","channel1_offset","timebase_scale_s_per_div","timebase_offset_s","memory_depth"],"actions":[{"name":"run","description":"Start continuous acquisition (the native RUN command)"},{"name":"measure","description":"Read one scalar automatic measurement item from one analog channel"},{"name":"configure_channel_input","description":"Set the analog channel 1 display and input conditioning"}],"tags":["oscilloscope","scpi","visa","mso5000","mso5074","pymso5000"],"backends":["fake","hardware"],"served_backend":"fake","evidence":"contract_checked","upstream":{"repo_url":"https://github.com/mabl/pymso5000","commit":"48ebacc0317ada6d6f54a58ab03916c5d5a44e80","license":"MIT"},"stars":3,"install":{"openai4s":"openai4s lab add labs/mabl__pymso5000","mhs":"mhs serve labs/mabl__pymso5000 --port 7400","mcp":"mhs serve labs/mabl__pymso5000 --mcp"}},
{"id":"labs/mabuchilab__instrumental","name":"Thorlabs DCx (UC480) camera (Instrumental UC480_Camera)","device_id":"mhs://localhost/uc480-camera","track":"labs","category":"Sensors and cameras","topic":null,"kind":"sensor.camera","vendor":"Thorlabs","model":"DCx (UC480) camera","mode":"hardware","risk":"R1","family":"python-object","role":"driver-pack","intro":"Thorlabs DCx (UC480) camera (Instrumental UC480_Camera), adapted from mabuchilab/instrumental. It reads `trigger_mode`, `trigger_level`, `auto_gain`, `auto_framerate` and 9 more; sets `trigger_delay`, `exposure_time`, `gamma` and `auto_exposure`; runs `configure_trigger`, `capture`, `start_live_video`, `stop_live_video` and 1 more. `configure_trigger`: set the camera trigger mode and, for hardware triggering, the edge. A hardware driver: the market serves its fake backend, so no instrument is needed.","measures":["trigger_mode","trigger_level","auto_gain","auto_framerate","auto_whitebalance","auto_sensor_exposure","auto_sensor_framerate","auto_sensor_gain","auto_sensor_whitebalance","bytes_per_line","width","height","is_open"],"adjusts":["trigger_delay","exposure_time","gamma","auto_exposure"],"actions":[{"name":"configure_trigger","description":"Set the camera trigger mode and, for hardware triggering, the edge"},{"name":"capture","description":"Capture one finite sequence and report the frame dimensions; the pixel array is not carried"},{"name":"start_live_video","description":"Start continuous acquisition"},{"name":"stop_live_video","description":"Stop continuous acquisition"},{"name":"close_camera","description":"Close the camera and release its image memory (the native safe state); it takes no input"}],"tags":["camera","uc480","thorlabs","ids","imaging","windows"],"backends":["fake","hardware"],"served_backend":"fake","evidence":"contract_checked","upstream":{"repo_url":"https://github.com/mabuchilab/instrumental","commit":"64272832594964a26ba05ee220a2b56042d04b62","license":"GPL-3.0"},"stars":137,"install":{"openai4s":"openai4s lab add labs/mabuchilab__instrumental","mhs":"mhs serve labs/mabuchilab__instrumental --port 7400","mcp":"mhs serve labs/mabuchilab__instrumental --mcp"}},
{"id":"labs/machineagency__science-jubilee","name":"Science Jubilee motion platform (science_jubilee.Machine.Machine)","device_id":"mhs://localhost/science-jubilee","track":"labs","category":"Robot arms and grippers","topic":null,"kind":"robot.arm","vendor":"Machine Agency","model":"Science Jubilee","mode":"hardware","risk":"R2","family":"python-object","role":"device-driver","intro":"Science Jubilee motion platform (science_jubilee.Machine.Machine), adapted from machineagency/science-jubilee. It reads `x_position`, `y_position` and `z_position`; runs `move_to`, `home` and `set_tool_offset`. `move_to`: move the tool centre point to a Cartesian position and orientation in a named frame. The endpoint solves inverse kinematics; an unreachable target is rejected before motion. A hardware driver: the market serves its fake backend, so no instrument is needed.","measures":["x_position","y_position","z_position"],"adjusts":[],"actions":[{"name":"move_to","description":"Move the tool centre point to a Cartesian position and orientation in a named frame. The endpoint solves inverse kinematics; an unreachable target is rejected before motion."},{"name":"home","description":"Drive axes to their declared home position or reference switch, establishing the coordinate reference needed by other motion capabilities."},{"name":"set_tool_offset","description":"Set the X/Y/Z tool offset of a configured tool with the upstream G10 command"}],"tags":["jubilee","motion","gantry","tool changer","gcode","duet"],"backends":["fake","hardware"],"served_backend":"fake","evidence":"contract_checked","upstream":{"repo_url":"https://github.com/machineagency/science-jubilee","commit":"bb918fa78f300f57cc379a80731cfca7bdb55c66","license":"MIT"},"stars":47,"install":{"openai4s":"openai4s lab add labs/machineagency__science-jubilee","mhs":"mhs serve labs/machineagency__science-jubilee --port 7400","mcp":"mhs serve labs/machineagency__science-jubilee --mcp"}},
{"id":"labs/madhankumar623__instruments_automation_scpi_commands","name":"Programmable DC power supply (PowerSupply_Automation.py, DCsupply_1)","device_id":"mhs://localhost/madhankumar623-psu","track":"labs","category":"Electronics and measurement","topic":null,"kind":"instrument.smu","vendor":null,"model":"Programmable DC power supply (DCsupply_1, channels 2 and 3)","mode":"hardware","risk":"R2","family":"scpi","role":"device-driver","intro":"Programmable DC power supply (PowerSupply_Automation.py, DCsupply_1), adapted from madhankumar623/instruments_automation_scpi_commands. It reads `voltage_ch2`, `current_ch2`, `voltage_ch3` and `current_ch3`; sets `voltage_setpoint_ch2`, `current_setpoint_ch2`, `output_enabled_ch2`, `voltage_setpoint_ch3` and 2 more; runs `output_off`. `output_off`: switch both controlled channel outputs of DCsupply_1 off (INST:NSEL 2;OUTP OFF and INST:NSEL 3;OUTP OFF); it takes no input and is the declared safe state. A hardware driver: the market serves its fake backend, so no instrument is needed.","measures":["voltage_ch2","current_ch2","voltage_ch3","current_ch3"],"adjusts":["voltage_setpoint_ch2","current_setpoint_ch2","output_enabled_ch2","voltage_setpoint_ch3","current_setpoint_ch3","output_enabled_ch3"],"actions":[{"name":"output_off","description":"Switch both controlled channel outputs of DCsupply_1 off (INST:NSEL 2;OUTP OFF and INST:NSEL 3;OUTP OFF); it takes no input and is the declared safe state"}],"tags":["power-supply","dc-source","scpi","visa","mcu-monitoring"],"backends":["fake"],"served_backend":"fake","evidence":"contract_checked","upstream":{"repo_url":"https://github.com/madhankumar623/instruments_automation_scpi_commands","commit":"2080effa969d0a911188f24e92f5d9551f1b22c9","license":"NOASSERTION"},"stars":0,"install":{"openai4s":"openai4s lab add labs/madhankumar623__instruments_automation_scpi_commands","mhs":"mhs serve labs/madhankumar623__instruments_automation_scpi_commands --port 7400","mcp":"mhs serve labs/madhankumar623__instruments_automation_scpi_commands --mcp"}},
{"id":"labs/majidbenk__interfaz-virtual-control-remoto-instrumentos-rigol","name":"RIGOL DP832A DC power supply","device_id":"mhs://localhost/rigol-dp832a","track":"labs","category":"Electronics and measurement","topic":null,"kind":"instrument","vendor":"RIGOL","model":"DP832A triple-output DC power supply","mode":"hardware","risk":"R1","family":"scpi","role":"device-driver","intro":"RIGOL DP832A DC power supply, adapted from majidbenk/interfaz-virtual-control-remoto-instrumentos-rigol. It reads `measured_voltage_1`, `measured_voltage_2`, `measured_voltage_3`, `measured_current_1` and 5 more; sets `voltage_1`, `voltage_2`, `voltage_3`, `current_1` and 11 more; runs `output_off`. `output_off`: disable all three channel outputs; the safe state of the supply. A hardware driver: the market serves its fake backend, so no instrument is needed.","measures":["measured_voltage_1","measured_voltage_2","measured_voltage_3","measured_current_1","measured_current_2","measured_current_3","measured_power_1","measured_power_2","measured_power_3"],"adjusts":["voltage_1","voltage_2","voltage_3","current_1","current_2","current_3","ovp_1","ovp_2","ovp_3","ocp_1","ocp_2","ocp_3","out_1","out_2","out_3"],"actions":[{"name":"output_off","description":"Disable all three channel outputs; the safe state of the supply"}],"tags":["power-supply","dc-source","rigol","dp832a","scpi","visa"],"backends":["fake"],"served_backend":"fake","evidence":"contract_checked","upstream":{"repo_url":"https://github.com/majidbenk/interfaz-virtual-control-remoto-instrumentos-rigol","commit":"770ab3a1f81699873a7aeb86df0b1ab4a5061f5f","license":"NOASSERTION"},"stars":1,"install":{"openai4s":"openai4s lab add labs/majidbenk__interfaz-virtual-control-remoto-instrumentos-rigol","mhs":"mhs serve labs/majidbenk__interfaz-virtual-control-remoto-instrumentos-rigol --port 7400","mcp":"mhs serve labs/majidbenk__interfaz-virtual-control-remoto-instrumentos-rigol --mcp"}},
{"id":"labs/manasp21__oscilloscope_mcp","name":"Oscilloscope MCP Ethernet backend (oscilloscope_mcp.EthernetOscilloscope)","device_id":"mhs://localhost/oscilloscope","track":"labs","category":"Electronics and measurement","topic":null,"kind":"instrument","vendor":"manasp21","model":"Ethernet oscilloscope backend (simulation stub)","mode":"hardware","risk":"R1","family":"python-object","role":"twin-candidate","intro":"Oscilloscope MCP Ethernet backend (oscilloscope_mcp.EthernetOscilloscope), adapted from manasp21/oscilloscope_mcp. It reads `initialized`, `acquisition_active`, `channel_count`, `trigger_source` and 4 more; sets `sample_rate_hz`, `record_length`, `voltage_range_v`, `coupling` and 1 more; runs `configure_channel`, `setup_trigger`, `acquire_waveform` and `stop_acquisition`. `configure_channel`: configure one channel's voltage range, coupling and impedance. A hardware driver: the market serves its fake backend, so no instrument is needed.","measures":["initialized","acquisition_active","channel_count","trigger_source","trigger_type","trigger_level_v","trigger_edge","trigger_holdoff_s"],"adjusts":["sample_rate_hz","record_length","voltage_range_v","coupling","impedance"],"actions":[{"name":"configure_channel","description":"Configure one channel's voltage range, coupling and impedance"},{"name":"setup_trigger","description":"Configure the trigger source, type, level, edge and holdoff"},{"name":"acquire_waveform","description":"Acquire one channel and report the scalar measurements of the captured trace"},{"name":"stop_acquisition","description":"Stop the acquisition (the native safe state); it takes no input"}],"tags":["oscilloscope","instrument","acquisition","simulation","asyncio"],"backends":["fake","hardware"],"served_backend":"fake","evidence":"contract_checked","upstream":{"repo_url":"https://github.com/manasp21/oscilloscope_mcp","commit":"49b9c4a7b06b0a98688f5f9cd689ec21c25d3eeb","license":"MIT"},"stars":2,"install":{"openai4s":"openai4s lab add labs/manasp21__oscilloscope_mcp","mhs":"mhs serve labs/manasp21__oscilloscope_mcp --port 7400","mcp":"mhs serve labs/manasp21__oscilloscope_mcp --mcp"}},
{"id":"labs/martinhjelmare__leicacam","name":"Leica LASAF CAM server (leicacam.CAM)","device_id":"mhs://localhost/leicacam","track":"labs","category":"Optics and microscopy","topic":null,"kind":"instrument.microscope","vendor":"Leica Microsystems","model":"LASAF CAM socket interface","mode":"hardware","risk":"R1","family":"python-object","role":"device-driver","intro":"Leica LASAF CAM server (leicacam.CAM), adapted from martinhjelmare/leicacam. It reads `stage_information`; runs `start_matrix_scan`, `stop_matrix_scan`, `pause_matrix_scan`, `autofocus_scan` and 4 more. `start_matrix_scan`: start the matrix scan (the CAM startscan command). A hardware driver: the market serves its fake backend, so no instrument is needed.","measures":["stage_information"],"adjusts":[],"actions":[{"name":"start_matrix_scan","description":"Start the matrix scan (the CAM startscan command)"},{"name":"stop_matrix_scan","description":"Stop the matrix scan (the CAM stopscan command), the safe state of the scan"},{"name":"pause_matrix_scan","description":"Toggle the pause of the matrix scan (the CAM pausescan command)"},{"name":"autofocus_scan","description":"Start the matrix focus scan (the CAM autofocusscan command)"},{"name":"enable_scan_field","description":"Enable one scan field of the experiment matrix (the CAM enable command with value true)"},{"name":"disable_scan_field","description":"Disable one scan field of the experiment matrix (the CAM enable command with value false)"},{"name":"enable_all_scan_fields","description":"Enable every scan field of the experiment matrix (the CAM enableall command with value true)"},{"name":"disable_all_scan_fields","description":"Disable every scan field of the experiment matrix (the CAM enableall command with value false)"}],"tags":["microscope","leica","lasaf","cam","matrix scan","autofocus"],"backends":["fake","hardware"],"served_backend":"fake","evidence":"contract_checked","upstream":{"repo_url":"https://github.com/martinhjelmare/leicacam","commit":"5c33a0d6daa179377390eccf40f1fc3e584b2dad","license":"MIT"},"stars":22,"install":{"openai4s":"openai4s lab add labs/martinhjelmare__leicacam","mhs":"mhs serve labs/martinhjelmare__leicacam --port 7400","mcp":"mhs serve labs/martinhjelmare__leicacam --mcp"}},
{"id":"labs/masahiro-999__oscilloscope-mcp","name":"RIGOL DS1000Z-series oscilloscope (RigolDs1000z)","device_id":"mhs://localhost/rigol-ds1000z","track":"labs","category":"Electronics and measurement","topic":null,"kind":"instrument","vendor":"RIGOL","model":"DS1000Z series (DS1054Z / DS1074Z / DS1104Z)","mode":"hardware","risk":"R1","family":"python-object","role":"device-driver","intro":"RIGOL DS1000Z-series oscilloscope (RigolDs1000z), adapted from masahiro-999/oscilloscope-mcp. It reads `identity`, `active_channel_count`, `acquire_memory_depth`, `acquire_sample_rate` and 3 more; sets `channel_1_scale`, `channel_1_offset`, `channel_1_probe`, `channel_1_coupling` and 8 more; runs `measure` and `run_control`. `measure`: read the scope-side automatic measurements for one or more items on a channel. A hardware driver: the market serves its fake backend, so no instrument is needed.","measures":["identity","active_channel_count","acquire_memory_depth","acquire_sample_rate","trigger_mode","trigger_status","trigger_holdoff"],"adjusts":["channel_1_scale","channel_1_offset","channel_1_probe","channel_1_coupling","channel_1_display","timebase_scale","timebase_offset","timebase_mode","acquire_type","acquire_averages","trigger_sweep","trigger_coupling"],"actions":[{"name":"measure","description":"Read the scope-side automatic measurements for one or more items on a channel"},{"name":"run_control","description":"Start, stop, arm a single acquisition, or force a trigger"}],"tags":["oscilloscope","instrument","scpi","rigol","ds1000z","measurement"],"backends":["fake","hardware"],"served_backend":"fake","evidence":"contract_checked","upstream":{"repo_url":"https://github.com/masahiro-999/oscilloscope-mcp","commit":"e45773551e2b956e1fb086ad99cbfec546eaad4b","license":"MIT"},"stars":3,"install":{"openai4s":"openai4s lab add labs/masahiro-999__oscilloscope-mcp","mhs":"mhs serve labs/masahiro-999__oscilloscope-mcp --port 7400","mcp":"mhs serve labs/masahiro-999__oscilloscope-mcp --mcp"}},
{"id":"labs/matteobroketa__harvard_pump_diy_control","name":"Harvard PHD 2000 syringe pump (Model 44)","device_id":"mhs://localhost/harvard-phd2000","track":"labs","category":"Liquid handling and fluidics","topic":null,"kind":"fluid.pump","vendor":"Harvard Apparatus","model":"PHD 2000 syringe pump","mode":"hardware","risk":"R2","family":"python-object","role":"device-driver","intro":"Harvard PHD 2000 syringe pump (Model 44), adapted from matteobroketa/harvard_pump_diy_control. It reads `running`, `status` and `address`; sets `flow_rate`, `direction` and `syringe_diameter_mm`; runs `run_pump`, `pause_pump`, `resume_pump` and `stop_pump`. `run_pump`: start the pump in the configured direction (RUN). A hardware driver: the market serves its fake backend, so no instrument is needed.","measures":["running","status","address"],"adjusts":["flow_rate","direction","syringe_diameter_mm"],"actions":[{"name":"run_pump","description":"Start the pump in the configured direction (RUN)"},{"name":"pause_pump","description":"Stop the pump and keep the configured rate for a later resume (the upstream pause is the native stop)"},{"name":"resume_pump","description":"Resume pumping in the configured direction after a pause (the upstream resume is the native start)"},{"name":"stop_pump","description":"Stop the pump with the addressed STP command (the native stop, the safe state); it takes no input"}],"tags":["syringe pump","harvard","phd 2000","serial","infusion","withdrawal"],"backends":["fake","hardware"],"served_backend":"fake","evidence":"contract_checked","upstream":{"repo_url":"https://github.com/matteobroketa/harvard_pump_diy_control","commit":"d4a888432a81d69dad963fddb9df5adf3bc94633","license":"MIT"},"stars":1,"install":{"openai4s":"openai4s lab add labs/matteobroketa__harvard_pump_diy_control","mhs":"mhs serve labs/matteobroketa__harvard_pump_diy_control --port 7400","mcp":"mhs serve labs/matteobroketa__harvard_pump_diy_control --mcp"}},
{"id":"labs/mattjax16__rigol-dho-mcp","name":"Rigol DHO oscilloscope through rigol-dho-mcp (controlled MCP contract)","device_id":"mhs://localhost/rigol_dho","track":"labs","category":"Electronics and measurement","topic":null,"kind":"instrument","vendor":"RIGOL","model":"DHO800/DHO900 series","mode":"hardware","risk":"R0","family":"mcp-client","role":"device-driver","intro":"Rigol DHO oscilloscope through rigol-dho-mcp (controlled MCP contract), adapted from mattjax16/rigol-dho-mcp. It reads `trigger_status`; runs `identify`, `get_status`, `run_control`, `configure_channel` and 12 more. `identify`: query the *IDN? identity string through the identify tool. A hardware driver: the market serves its fake backend, so no instrument is needed.","measures":["trigger_status"],"adjusts":[],"actions":[{"name":"identify","description":"Query the *IDN? identity string through the identify tool."},{"name":"get_status","description":"Read trigger status, sample rate, memory depth, acquisition type, timebase and enabled-channel settings, as the strings the scope returns."},{"name":"run_control","description":"Send one acquisition control (run, stop, single, autoset, clear, force_trigger); the reply carries the queried trigger status."},{"name":"configure_channel","description":"Change only the supplied analog-channel settings; returns the queried channel settings (no inversion readback)."},{"name":"configure_timebase","description":"Set the main timebase scale and/or offset; returns the queried values."},{"name":"configure_trigger_edge","description":"Set EDGE trigger mode, then the supplied source, slope, level and sweep; returns the queried trigger settings and status."},{"name":"configure_acquisition","description":"Set memory depth, acquisition type and average count; returns the queried values and sample rate."},{"name":"configure_cursors","description":"Set the cursor mode (OFF, MANual, TRACk) with type and source or track sources; returns the queried mode. Coordinates use the typed cursor bindings."},{"name":"get_cursor_values","description":"Read cursor positions and deltas of the active mode; the complete result is a JSON artifact."},{"name":"get_measurement","description":"Select and read one automatic measurement item on one channel (SI units); selecting is a scope write."},{"name":"measure_between","description":"Select and read a delay (s) or phase (degrees) item between two channels; selecting is a scope write."},{"name":"get_waveform","description":"Capture the screen or deep-memory waveform: statistics plus every returned decimated time/voltage sample, as a JSON artifact. Memory mode needs a fresh STOP status first."},{"name":"get_screenshot","description":"Capture the scope display as a PNG image artifact."},{"name":"configure_cursors_time","description":"Manual TIME cursors: sets type TIME and cursor A/B coordinates in seconds."},{"name":"configure_cursors_amplitude","description":"Manual AMPLitude cursors: sets type AMPLitude and cursor A/B coordinates in volts."},{"name":"configure_cursors_current","description":"Manual cursors on the retained type: enters MANual, reads the type, applies only that axis's candidates and omits cursor_type. An unreadable type leaves the mode change unresolved."}],"tags":["mcp","oscilloscope","scpi","controlled-peer","native-blocked"],"backends":["fake","hardware"],"served_backend":"fake","evidence":"contract_checked","upstream":{"repo_url":"https://github.com/mattjax16/rigol-dho-mcp","commit":"f9ac7191869845ae46ca714de69a877c388b2530","license":"MIT"},"stars":2,"install":{"openai4s":"openai4s lab add labs/mattjax16__rigol-dho-mcp","mhs":"mhs serve labs/mattjax16__rigol-dho-mcp --port 7400","mcp":"mhs serve labs/mattjax16__rigol-dho-mcp --mcp"}},
{"id":"labs/maximilianb2__pc-gym","name":"pc-gym CSTR process-control environment","device_id":"mhs://localhost/pcgym-cstr","track":"labs","category":"Simulation","topic":"wet-lab automation and chemistry","kind":"world.sim","vendor":"maximilianb2","model":"pc-gym (cstr)","mode":"simulated","risk":"R0","family":"gymnasium","role":"sim-env","intro":"pc-gym CSTR process-control environment, adapted from maximilianb2/pc-gym. It reads `observation`, `reward`, `terminated`, `truncated` and 4 more; runs `step`, `reset` and `seed`. `step`: advance the simulated world by a bounded number of fixed timesteps, optionally applying an action for each step, and return the resulting observation and terminal flags. A simulator: the market serves it with a stand-in that needs no simulator install.","measures":["observation","reward","terminated","truncated","tick","episode","seed","info"],"adjusts":[],"actions":[{"name":"step","description":"Advance the simulated world by a bounded number of fixed timesteps, optionally applying an action for each step, and return the resulting observation and terminal flags."},{"name":"reset","description":"Reset the simulated world to a scenario start state and return the initial observation. When a seed is supplied the endpoint records it in the receipt; otherwise the endpoint's declared default seed applies."},{"name":"seed","description":"Set the seed used by the simulated world's random number generators for subsequent steps, without resetting the world. The accepted seed is echoed in the receipt."}],"tags":["cstr","process-control","reinforcement-learning","simulation","gymnasium"],"backends":["fake"],"served_backend":"fake","evidence":"contract_checked","upstream":{"repo_url":"https://github.com/maximilianb2/pc-gym","commit":"fbfb36bf84b494cd157cff88292e1fd1b864cee5","license":"MIT"},"stars":102,"install":{"openai4s":"openai4s lab add labs/maximilianb2__pc-gym","mhs":"mhs serve labs/maximilianb2__pc-gym --port 7400","mcp":"mhs serve labs/maximilianb2__pc-gym --mcp"}},
{"id":"labs/maxiv-kitscontrols__sardana-albaem","name":"ALBA EM2 four-channel electrometer","device_id":"mhs://localhost/albaem2","track":"labs","category":"Electronics and measurement","topic":null,"kind":"instrument.dmm","vendor":"MAX IV Laboratory","model":"AlbaEM2 four-channel electrometer","mode":"hardware","risk":"R1","family":"python-object","role":"device-driver","intro":"ALBA EM2 four-channel electrometer, adapted from maxiv-kitscontrols/sardana-albaem. It reads `identity`, `acquisition_state`, `nb_points_ready`, `current_ch1` and 11 more; sets `acquisition_mode`, `integration_time`, `nb_points`, `trigger_mode` and 5 more; runs `measure_current`, `configure_channel`, `start_acquisition`, `software_trigger` and 1 more. `measure_current`: measure current on a declared channel and return the value with its timestamp and range. A hardware driver: the market serves its fake backend, so no instrument is needed.","measures":["identity","acquisition_state","nb_points_ready","current_ch1","current_ch2","current_ch3","current_ch4","range_ch1","range_ch2","range_ch3","range_ch4","inversion_ch1","inversion_ch2","inversion_ch3","inversion_ch4"],"adjusts":["acquisition_mode","integration_time","nb_points","trigger_mode","trigger_input","trigger_polarity","trigger_precision","trigger_delay","timestamp_data"],"actions":[{"name":"measure_current","description":"Measure current on a declared channel and return the value with its timestamp and range."},{"name":"configure_channel","description":"Read or set the amplifier range and digital inversion of one channel"},{"name":"start_acquisition","description":"Start an acquisition with the current settings"},{"name":"software_trigger","description":"Send a software trigger to the electrometer"},{"name":"stop_acquisition","description":"Stop the acquisition and the streaming receiver (the native stop, the safe state)"}],"tags":["electrometer","current","four-channel","scpi","alba"],"backends":["fake","hardware"],"served_backend":"fake","evidence":"contract_checked","upstream":{"repo_url":"https://github.com/maxiv-kitscontrols/sardana-albaem","commit":"99e701a5101781fbd7855a03b5ec3a755e8c6d46","license":"GPL-3.0"},"stars":0,"install":{"openai4s":"openai4s lab add labs/maxiv-kitscontrols__sardana-albaem","mhs":"mhs serve labs/maxiv-kitscontrols__sardana-albaem --port 7400","mcp":"mhs serve labs/maxiv-kitscontrols__sardana-albaem --mcp"}},
{"id":"labs/mba2d__test_equipment_control","name":"A2D electronic load","device_id":"mhs://localhost/a2d-eload","track":"labs","category":"Electronics and measurement","topic":null,"kind":"instrument","vendor":"A2D Electronics","model":"A2D Eload (RS485 electronic load)","mode":"hardware","risk":"R1","family":"scpi","role":"device-driver","intro":"A2D electronic load, adapted from mba2d/test_equipment_control. It reads `voltage`, `adc_voltage`, `current_reported` and `temperature`; sets `current`, `output`, `led` and `fan`. A hardware driver: the market serves its fake backend, so no instrument is needed.","measures":["voltage","adc_voltage","current_reported","temperature"],"adjusts":["current","output","led","fan"],"actions":[],"tags":["electronic load","battery test","rs485","scpi","pyvisa"],"backends":["fake"],"served_backend":"fake","evidence":"contract_checked","upstream":{"repo_url":"https://github.com/mba2d/test_equipment_control","commit":"34bb54c13c766fdfe7e6260872a03e8dfefd3ad2","license":"GPL-3.0"},"stars":24,"install":{"openai4s":"openai4s lab add labs/mba2d__test_equipment_control","mhs":"mhs serve labs/mba2d__test_equipment_control --port 7400","mcp":"mhs serve labs/mba2d__test_equipment_control --mcp"}},
{"id":"labs/mcleu__pyapt","name":"Thorlabs APT motion controller (PyAPT)","device_id":"mhs://localhost/pyapt","track":"labs","category":"Motion control","topic":null,"kind":"motion.axis","vendor":"Thorlabs","model":"APT motion controller (PyAPT)","mode":"hardware","risk":"R1","family":"python-object","role":"device-driver","intro":"Thorlabs APT motion controller (PyAPT), adapted from mcleu/pyapt. It reads `connected`, `stage_minimum`, `stage_maximum`, `stage_units` and 6 more; sets `position`, `acceleration` and `maximum_velocity`; runs `move_relative`, `home` and `stop_stage`. `move_relative`: move the stage relative to its current position; mRel waits for the move and the driver returns the position the controller reports afterwards. A hardware driver: the market serves its fake backend, so no instrument is needed.","measures":["connected","stage_minimum","stage_maximum","stage_units","pitch","minimum_velocity","maximum_acceleration_limit","maximum_velocity_limit","reverse_limit_switch","forward_limit_switch"],"adjusts":["position","acceleration","maximum_velocity"],"actions":[{"name":"move_relative","description":"Move the stage relative to its current position; mRel waits for the move and the driver returns the position the controller reports afterwards"},{"name":"home","description":"Home the stage with the controller's configured homing parameters; go_home waits for the move and the driver returns the position the controller reports afterwards"},{"name":"stop_stage","description":"Stop stage motion with the native APT profiled stop (MOT_StopProfiled); it takes no input"}],"tags":["thorlabs","apt","motion","stage","ctypes","windows"],"backends":["fake","hardware"],"served_backend":"fake","evidence":"contract_checked","upstream":{"repo_url":"https://github.com/mcleu/pyapt","commit":"2d5c4c64350d70daa60c0bd49c9afd03f85bc412","license":"MIT"},"stars":32,"install":{"openai4s":"openai4s lab add labs/mcleu__pyapt","mhs":"mhs serve labs/mcleu__pyapt --port 7400","mcp":"mhs serve labs/mcleu__pyapt --mcp"}},
{"id":"labs/mclim9__rssd","name":"Rohde & Schwarz FSWP phase noise analyzer (rssd PNA class)","device_id":"mhs://localhost/fswp","track":"labs","category":"Electronics and measurement","topic":null,"kind":"instrument","vendor":"Rohde & Schwarz","model":"FSWP phase noise analyzer","mode":"hardware","risk":"R1","family":"scpi","role":"device-driver","intro":"Rohde & Schwarz FSWP phase noise analyzer (rssd PNA class), adapted from mclim9/rssd. It reads `channels`, `sweep_time_s`, `sweep_type` and `reference_level_db`; sets `attenuation_db`, `center_freq_hz` and `sweep_points`. A hardware driver: the market serves its fake backend, so no instrument is needed.","measures":["channels","sweep_time_s","sweep_type","reference_level_db"],"adjusts":["attenuation_db","center_freq_hz","sweep_points"],"actions":[],"tags":["phase noise analyzer","signal analyzer","fswp","scpi","rohde-schwarz"],"backends":["fake"],"served_backend":"fake","evidence":"contract_checked","upstream":{"repo_url":"https://github.com/mclim9/rssd","commit":"7b040ee12841e721953a1f737297586135c0c110","license":"MIT"},"stars":51,"install":{"openai4s":"openai4s lab add labs/mclim9__rssd","mhs":"mhs serve labs/mclim9__rssd --port 7400","mcp":"mhs serve labs/mclim9__rssd --mcp"}},
{"id":"labs/mfg92__hantek1008py","name":"Hantek 1008C USB oscilloscope (hantek1008.Hantek1008)","device_id":"mhs://localhost/hantek-1008","track":"labs","category":"Electronics and measurement","topic":null,"kind":"instrument","vendor":"Hantek","model":"1008C","mode":"hardware","risk":"R1","family":"python-object","role":"device-driver","intro":"Hantek 1008C USB oscilloscope (hantek1008.Hantek1008), adapted from mfg92/hantek1008py. It reads `active_channels`, `vertical_scales`, `zero_offsets`, `paused` and 1 more; runs `set_generator_on`, `set_generator_speed`, `set_generator_waveform`, `set_paused` and 1 more. `set_generator_on`: enable or disable the eight digital waveform-generator outputs. A hardware driver: the market serves its fake backend, so no instrument is needed.","measures":["active_channels","vertical_scales","zero_offsets","paused","generator_waveform_max_length"],"adjusts":[],"actions":[{"name":"set_generator_on","description":"Enable or disable the eight digital waveform-generator outputs"},{"name":"set_generator_speed","description":"Set the generator speed in revolutions per minute"},{"name":"set_generator_waveform","description":"Upload a waveform as bytes; bit i of each byte is digital output i"},{"name":"set_paused","description":"Start or stop the USB keep-alive pause thread"},{"name":"generator_off","description":"Disable the waveform generator outputs (the safe state); it takes no input"}],"tags":["oscilloscope","hantek","usb","signal-generator","measurement"],"backends":["fake","hardware"],"served_backend":"fake","evidence":"contract_checked","upstream":{"repo_url":"https://github.com/mfg92/hantek1008py","commit":"302e45ad9d47dafec8a57c36aaca0b76647b221d","license":"Apache-2.0"},"stars":22,"install":{"openai4s":"openai4s lab add labs/mfg92__hantek1008py","mhs":"mhs serve labs/mfg92__hantek1008py --port 7400","mcp":"mhs serve labs/mfg92__hantek1008py --mcp"}},
{"id":"labs/michel4j__aunt-isara","name":"ISARA sample automounter (AuntISARAApp)","device_id":"mhs://localhost/isara","track":"labs","category":"Robot arms and grippers","topic":null,"kind":"robot.arm","vendor":"michel4j","model":"ISARA Automounter","mode":"hardware","risk":"R2","family":"python-object","role":"device-driver","intro":"ISARA sample automounter (AuntISARAApp), adapted from michel4j/aunt-isara. It reads `status`, `action`, `position`, `tool` and 7 more; runs `select_mount_port`, `home` and `stop_all_motion`. `select_mount_port`: convert a dewar port into the native tool, puck and sample mount parameters and store it as the next port; this prepares a mount and does not move the robot. A hardware driver: the market serves its fake backend, so no instrument is needed.","measures":["status","action","position","tool","emergency_ok","collision_ok","lid_open","mounted_sample","next_port","dewar_temperature_1","dewar_temperature_2"],"adjusts":[],"actions":[{"name":"select_mount_port","description":"Convert a dewar port into the native tool, puck and sample mount parameters and store it as the next port; this prepares a mount and does not move the robot"},{"name":"home","description":"Home the automounter with the current tool and report whether the controller reached HOME and is idle"},{"name":"stop_all_motion","description":"Stop all sample-operation motion by queueing the native panic command; it takes no input"}],"tags":["sample-handler","automounter","robot-arm","cryo","dewar"],"backends":["fake","hardware"],"served_backend":"fake","evidence":"contract_checked","upstream":{"repo_url":"https://github.com/michel4j/aunt-isara","commit":"f95cff5e6cec38e0b9945ae5673251fa5d11466f","license":"BSD-3-Clause"},"stars":1,"install":{"openai4s":"openai4s lab add labs/michel4j__aunt-isara","mhs":"mhs serve labs/michel4j__aunt-isara --port 7400","mcp":"mhs serve labs/michel4j__aunt-isara --mcp"}},
{"id":"labs/miked63017__dinolite_uvc_led_control","name":"Dino-Lite UVC LED control (dinoliteuvccontrol.DinoLiteUVCControl)","device_id":"mhs://localhost/dinolite-uvc-led","track":"labs","category":"Optics and microscopy","topic":null,"kind":"instrument.microscope","vendor":"Dino-Lite","model":"USB microscope with UVC LED/FLC control","mode":"hardware","risk":"R1","family":"python-object","role":"device-driver","intro":"Dino-Lite UVC LED control (dinoliteuvccontrol.DinoLiteUVCControl), adapted from miked63017/dinolite_uvc_led_control. It reads `main_led_on`, `flc_on`, `flc_brightness`, `auto_exposure` and 3 more; runs `set_illumination`, `set_flc_brightness`, `toggle_flc_led`, `toggle_auto_exposure` and 2 more. `set_illumination`: turn the main LED or the FLC illumination on or off. A hardware driver: the market serves its fake backend, so no instrument is needed.","measures":["main_led_on","flc_on","flc_brightness","auto_exposure","exposure_time","video_device","product_id"],"adjusts":[],"actions":[{"name":"set_illumination","description":"Turn the main LED or the FLC illumination on or off"},{"name":"set_flc_brightness","description":"Set the FLC brightness level (0 to 6); FLC is switched on first when it is off"},{"name":"toggle_flc_led","description":"Toggle one of the four FLC LEDs; FLC is switched on first when it is off"},{"name":"toggle_auto_exposure","description":"Toggle automatic exposure on the microscope"},{"name":"step_exposure","description":"Move one step in the device's exposure table; auto exposure is switched off first"},{"name":"illumination_off","description":"Switch all illumination off (the safe state); it takes no input"}],"tags":["microscope","dinolite","uvc","led","illumination","flc","exposure"],"backends":["fake","hardware"],"served_backend":"fake","evidence":"contract_checked","upstream":{"repo_url":"https://github.com/miked63017/dinolite_uvc_led_control","commit":"f70a4cedfa1f04fa15d5cdffe2d382851291248a","license":"NOASSERTION"},"stars":26,"install":{"openai4s":"openai4s lab add labs/miked63017__dinolite_uvc_led_control","mhs":"mhs serve labs/miked63017__dinolite_uvc_led_control --port 7400","mcp":"mhs serve labs/miked63017__dinolite_uvc_led_control --mcp"}},
{"id":"labs/moler-group__scanning-squid","name":"Scanning SQUID microscope: Attocube coarse positioning (scanning-squid)","device_id":"mhs://localhost/scanning-squid-microscope","track":"labs","category":"Optics and microscopy","topic":null,"kind":"instrument.microscope","vendor":"Moler group (Stanford)","model":"scanning SQUID susceptometer microscope (Attocube ANC300 positioner)","mode":"hardware","risk":"R2","family":"python-object","role":"device-driver","intro":"Scanning SQUID microscope: Attocube coarse positioning (scanning-squid), adapted from moler-group/scanning-squid. It reads `scanner_position` and `attocube_modes`; runs `step` and `ground`. `step`: step one Attocube axis with atto.step: mode stp, stepu or stepd with the count (the upstream writes it twice, atto.py:109-124, 169, so the steps made are not known from the source), stepw, a wait, mode gnd. A hardware driver: the market serves its fake backend, so no instrument is needed.","measures":["scanner_position","attocube_modes"],"adjusts":[],"actions":[{"name":"step","description":"Step one Attocube axis with atto.step: mode stp, stepu or stepd with the count (the upstream writes it twice, atto.py:109-124, 169, so the steps made are not known from the source), stepw, a wait, mode gnd"},{"name":"ground","description":"Stop and ground every Attocube axis (atto.stop) and read each mode back"}],"tags":["scanning squid","microscope","attocube","anc300","qcodes","cryogenic","positioner"],"backends":["fake","hardware"],"served_backend":"fake","evidence":"contract_checked","upstream":{"repo_url":"https://github.com/moler-group/scanning-squid","commit":"32a61e8f8f4f6671f04e583752e361cb00276188","license":"MIT"},"stars":4,"install":{"openai4s":"openai4s lab add labs/moler-group__scanning-squid","mhs":"mhs serve labs/moler-group__scanning-squid --port 7400","mcp":"mhs serve labs/moler-group__scanning-squid --mcp"}},
{"id":"labs/msuarezrodriguez__python-instrument-control","name":"Lake Shore 336 temperature controller (QCoDeS VisaInstrument)","device_id":"mhs://localhost/lakeshore-336","track":"labs","category":"Thermal and process control","topic":null,"kind":"thermal.zone","vendor":"Lake Shore Cryotronics","model":"Model 336 temperature controller","mode":"hardware","risk":"R2","family":"python-object","role":"device-driver","intro":"Lake Shore 336 temperature controller (QCoDeS VisaInstrument), adapted from msuarezrodriguez/python-instrument-control. It reads `identity`, `temperature` and `sensor_units`; sets `setpoint`, `ramp_rate`, `ramp_enabled`, `heater_range` and 4 more; runs `heaters_off`. `heaters_off`: turn both heater outputs off (RANGE n,0 and OUTMODE n,0,0,0) and read the ranges and modes back; this is the safe-state action. A hardware driver: the market serves its fake backend, so no instrument is needed.","measures":["identity","temperature","sensor_units"],"adjusts":["setpoint","ramp_rate","ramp_enabled","heater_range","output_mode","output_input","output_powerup_enable","manual_output"],"actions":[{"name":"heaters_off","description":"Turn both heater outputs off (RANGE n,0 and OUTMODE n,0,0,0) and read the ranges and modes back; this is the safe-state action"}],"tags":["qcodes","visa","gpib","temperature-controller","cryostat","heater","lakeshore"],"backends":["fake","hardware"],"served_backend":"fake","evidence":"contract_checked","upstream":{"repo_url":"https://github.com/msuarezrodriguez/python-instrument-control","commit":"e56156e1ba6a2e5469094291fef91945ca9ee069","license":"NOASSERTION"},"stars":2,"install":{"openai4s":"openai4s lab add labs/msuarezrodriguez__python-instrument-control","mhs":"mhs serve labs/msuarezrodriguez__python-instrument-control --port 7400","mcp":"mhs serve labs/msuarezrodriguez__python-instrument-control --mcp"}},
{"id":"labs/naqslab__naqslab_devices","name":"SRS SR865 lock-in amplifier","device_id":"mhs://localhost/sr865","track":"labs","category":"Electronics and measurement","topic":null,"kind":"instrument","vendor":"Stanford Research Systems","model":"SR865 lock-in amplifier","mode":"hardware","risk":"R1","family":"scpi","role":"device-driver","intro":"SRS SR865 lock-in amplifier, adapted from naqslab/naqslab_devices. It reads `tau_index` and `sens_index`; sets `time_constant`, `sensitivity` and `phase`. A hardware driver: the market serves its fake backend, so no instrument is needed.","measures":["tau_index","sens_index"],"adjusts":["time_constant","sensitivity","phase"],"actions":[],"tags":["lock-in amplifier","sr865","scpi","labscript"],"backends":["fake"],"served_backend":"fake","evidence":"contract_checked","upstream":{"repo_url":"https://github.com/naqslab/naqslab_devices","commit":"2c0ac4fb715ec7ad71c6f0061cd3c7e3d6583b69","license":"NOASSERTION"},"stars":6,"install":{"openai4s":"openai4s lab add labs/naqslab__naqslab_devices","mhs":"mhs serve labs/naqslab__naqslab_devices --port 7400","mcp":"mhs serve labs/naqslab__naqslab_devices --mcp"}},
{"id":"labs/natlabrockies__keithley_gpt","name":"Keithley 2400 series source measure unit","device_id":"mhs://localhost/keithley2400","track":"labs","category":"Electronics and measurement","topic":null,"kind":"instrument.smu","vendor":"Keithley","model":"2400 series source measure unit","mode":"hardware","risk":"R1","family":"scpi","role":"device-driver","intro":"Keithley 2400 series source measure unit, adapted from natlabrockies/keithley_gpt. It reads `identity`; sets `current_compliance`, `measure_current_range`, `measure_voltage_range`, `four_wire` and 4 more. A hardware driver: the market serves its fake backend, so no instrument is needed.","measures":["identity"],"adjusts":["current_compliance","measure_current_range","measure_voltage_range","four_wire","nplc_current","nplc_voltage","source_current_range","source_voltage_range"],"actions":[],"tags":["source measure unit","smu","keithley 2400","scpi"],"backends":["fake"],"served_backend":"fake","evidence":"contract_checked","upstream":{"repo_url":"https://github.com/natlabrockies/keithley_gpt","commit":"4cad464fd26eac9684d3b2df8ed88c17a6dff972","license":"NOASSERTION"},"stars":3,"install":{"openai4s":"openai4s lab add labs/natlabrockies__keithley_gpt","mhs":"mhs serve labs/natlabrockies__keithley_gpt --port 7400","mcp":"mhs serve labs/natlabrockies__keithley_gpt --mcp"}},
{"id":"labs/natlabrockies__multi-tube-od-reader","name":"Multi-Tube-OD-Reader (my_app.classes.device.Device)","device_id":"mhs://localhost/multi-tube-od-reader","track":"labs","category":"Sensors and cameras","topic":null,"kind":"sensor","vendor":"NREL","model":"Multi-Tube-OD-Reader","mode":"hardware","risk":"R1","family":"python-object","role":"device-driver","intro":"Multi-Tube-OD-Reader (my_app.classes.device.Device), adapted from natlabrockies/multi-tube-od-reader. It reads `serial_number`, `port_positions` and `port_usage`; sets `name`; runs `measure_voltage` and `blink`. `measure_voltage`: measure a DC or RMS voltage on a declared channel or terminal pair and return the value with its sampling timestamp and measurement range. A hardware driver: the market serves its fake backend, so no instrument is needed.","measures":["serial_number","port_positions","port_usage"],"adjusts":["name"],"actions":[{"name":"measure_voltage","description":"Measure a DC or RMS voltage on a declared channel or terminal pair and return the value with its sampling timestamp and measurement range."},{"name":"blink","description":"Blink the device indicator LED through the native Device.blink sequence"}],"tags":["optical density","growth monitoring","labjack u3","analog input","16-port"],"backends":["fake","hardware"],"served_backend":"fake","evidence":"contract_checked","upstream":{"repo_url":"https://github.com/natlabrockies/multi-tube-od-reader","commit":"e3948da8586d40093ffb7cc64706f4c6defa6326","license":"BSD-3-Clause"},"stars":2,"install":{"openai4s":"openai4s lab add labs/natlabrockies__multi-tube-od-reader","mhs":"mhs serve labs/natlabrockies__multi-tube-od-reader --port 7400","mcp":"mhs serve labs/natlabrockies__multi-tube-od-reader --mcp"}},
{"id":"labs/nbush257__pyexpcontrol","name":"nebPod NPX rig controller (nebPod.Controller)","device_id":"mhs://localhost/npx-rig","track":"labs","category":"Thermal and process control","topic":null,"kind":"process.controller","vendor":"nbush257","model":"nebPod NPX rig controller","mode":"hardware","risk":"R3","family":"python-object","role":"device-driver","intro":"nebPod NPX rig controller (nebPod.Controller), adapted from nbush257/pyexpcontrol. It reads `valves`, `gpio` and `camera_triggering`; sets `laser_amplitude`; runs `set_valve`, `set_all_valves`, `set_gpio`, `start_camera_trigger` and 2 more. `set_valve`: open or close one olfactometer valve. A hardware driver: the market serves its fake backend, so no instrument is needed.","measures":["valves","gpio","camera_triggering"],"adjusts":["laser_amplitude"],"actions":[{"name":"set_valve","description":"Open or close one olfactometer valve"},{"name":"set_all_valves","description":"Set all eight olfactometer valves from an eight-character binary pattern (leftmost character is Valve 1, '1' is open)"},{"name":"set_gpio","description":"Drive one GPIO pin high or low"},{"name":"start_camera_trigger","description":"Start the camera trigger with the upstream default frame rate"},{"name":"stop_camera_trigger","description":"Stop the camera trigger"},{"name":"all_off","description":"Safe state: laser off at 0 V, all olfactometer valves closed, camera trigger stopped"}],"tags":["teensy","olfactometer","laser","gpio","camera-trigger","serial"],"backends":["fake","hardware"],"served_backend":"fake","evidence":"contract_checked","upstream":{"repo_url":"https://github.com/nbush257/pyexpcontrol","commit":"06e94c4d22ac2d9fc542a3ebee035a8b9e360ea7","license":"NOASSERTION"},"stars":4,"install":{"openai4s":"openai4s lab add labs/nbush257__pyexpcontrol","mhs":"mhs serve labs/nbush257__pyexpcontrol --port 7400","mcp":"mhs serve labs/nbush257__pyexpcontrol --mcp"}},
{"id":"labs/nelsond__thorlabs-mtd415t","name":"Thorlabs MTD415T temperature controller","device_id":"mhs://localhost/thorlabs-mtd415t","track":"labs","category":"Thermal and process control","topic":null,"kind":"instrument.thermometer","vendor":"Thorlabs","model":"MTD415T OEM temperature controller","mode":"hardware","risk":"R0","family":"python-object","role":"device-driver","intro":"Thorlabs MTD415T temperature controller, adapted from nelsond/thorlabs-mtd415t. It reads `temperature`, `setpoint`, `tec_current`, `tec_voltage` and 6 more. A hardware driver: the market serves its fake backend, so no instrument is needed.","measures":["temperature","setpoint","tec_current","tec_voltage","tec_current_limit","errors","idn","uid","is_open","measure_temperature"],"adjusts":[],"actions":[],"tags":["thorlabs","mtd415t","temperature","thermometer","tec","serial"],"backends":["fake","hardware"],"served_backend":"fake","evidence":"contract_checked","upstream":{"repo_url":"https://github.com/nelsond/thorlabs-mtd415t","commit":"c53ec5c7db67f4cb47619d2ceaa4aead5e583923","license":"MIT"},"stars":5,"install":{"openai4s":"openai4s lab add labs/nelsond__thorlabs-mtd415t","mhs":"mhs serve labs/nelsond__thorlabs-mtd415t --port 7400","mcp":"mhs serve labs/nelsond__thorlabs-mtd415t --mcp"}},
{"id":"labs/ni__nidaqmx-python","name":"NI-DAQmx analog input task (voltage measurement)","device_id":"mhs://localhost/nidaqmx-ai","track":"labs","category":"Electronics and measurement","topic":null,"kind":"instrument.dmm","vendor":"NI","model":"NI-DAQmx analog input voltage task","mode":"hardware","risk":"R1","family":"python-object","role":"device-driver","intro":"NI-DAQmx analog input task (voltage measurement), adapted from ni/nidaqmx-python. It reads `task_done`, `channel_name` and `measure_voltage`; runs `sample_voltages`, `start_task` and `stop_task`. `sample_voltages`: acquire a block of voltage samples from the analog input task. A hardware driver: the market serves its fake backend, so no instrument is needed.","measures":["task_done","channel_name","measure_voltage"],"adjusts":[],"actions":[{"name":"sample_voltages","description":"Acquire a block of voltage samples from the analog input task"},{"name":"start_task","description":"Start the task (the native start) so it begins the measurement"},{"name":"stop_task","description":"Stop the task (the native stop, the safe state); it takes no input"}],"tags":["daq","nidaqmx","ni-daqmx","analog input","voltage measurement"],"backends":["fake","hardware"],"served_backend":"fake","evidence":"contract_checked","upstream":{"repo_url":"https://github.com/ni/nidaqmx-python","commit":"04211cd36322a1fa2269c7d6edd63b6051daf034","license":"MIT"},"stars":590,"install":{"openai4s":"openai4s lab add labs/ni__nidaqmx-python","mhs":"mhs serve labs/ni__nidaqmx-python --port 7400","mcp":"mhs serve labs/ni__nidaqmx-python --mcp"}},
{"id":"labs/nicholasmorrow__zeus","name":"ZEUS liquid-handling module (zeus.ZeusModule)","device_id":"mhs://localhost/zeus","track":"labs","category":"Liquid handling and fluidics","topic":null,"kind":"lab.liquid_handler","vendor":"nicholasmorrow","model":"ZEUS module (ZeusModule)","mode":"hardware","risk":"R2","family":"python-object","role":"device-driver","intro":"ZEUS liquid-handling module (zeus.ZeusModule), adapted from nicholasmorrow/zeus. It reads `z_position`; runs `initialize`, `move_z`, `pick_tip`, `discard_tip` and 3 more. `initialize`: initialize the Z-drive and the dosing drive (native initZDrive and initDosingDrive). A hardware driver: the market serves its fake backend, so no instrument is needed.","measures":["z_position"],"adjusts":[],"actions":[{"name":"initialize","description":"Initialize the Z-drive and the dosing drive (native initZDrive and initDosingDrive)"},{"name":"move_z","description":"Command the Z-drive to a position at slow or fast speed (native GZ command)"},{"name":"pick_tip","description":"Pick up a tip from a tip type and deck geometry table entry (native GT command)"},{"name":"discard_tip","description":"Discard the tip at a deck geometry table entry (native GU command)"},{"name":"aspirate","description":"Aspirate a volume with the dosing drive (native GA command)"},{"name":"dispense","description":"Dispense a volume with the dosing drive (native GD command)"},{"name":"emergency_stop","description":"Engage the native emergency stop (AB); it takes no input"}],"tags":["liquid-handling","pipetting","can","socketcan","zeus"],"backends":["fake","hardware"],"served_backend":"fake","evidence":"contract_checked","upstream":{"repo_url":"https://github.com/nicholasmorrow/zeus","commit":"d2f5dbc1bc4fa80e930af49b3701ba5a1e0ed5fc","license":"NOASSERTION"},"stars":7,"install":{"openai4s":"openai4s lab add labs/nicholasmorrow__zeus","mhs":"mhs serve labs/nicholasmorrow__zeus --port 7400","mcp":"mhs serve labs/nicholasmorrow__zeus --mcp"}},
{"id":"labs/nion-software__nionswift-instrumentation-kit","name":"Nion STEM instrument (nion.device_kit.InstrumentDevice:Instrument)","device_id":"mhs://localhost/nion-instrument","track":"labs","category":"Optics and microscopy","topic":null,"kind":"instrument.microscope","vendor":"Nion","model":"nionswift-instrumentation-kit Instrument","mode":"hardware","risk":"R3","family":"python-object","role":"device-driver","intro":"Nion STEM instrument (nion.device_kit.InstrumentDevice:Instrument), adapted from nion-software/nionswift-instrumentation-kit. It reads `beam_current_a`; sets `beam_voltage`, `defocus_m` and `energy_offset_ev`; runs `high_tension_off`. `high_tension_off`: remove the high tension: write the EHT control as 0 through the value manager; no input. A hardware driver: the market serves its fake backend, so no instrument is needed.","measures":["beam_current_a"],"adjusts":["beam_voltage","defocus_m","energy_offset_ev"],"actions":[{"name":"high_tension_off","description":"Remove the high tension: write the EHT control as 0 through the value manager; no input"}],"tags":["stem","electron-microscope","high-voltage","instrument"],"backends":["fake","hardware"],"served_backend":"fake","evidence":"contract_checked","upstream":{"repo_url":"https://github.com/nion-software/nionswift-instrumentation-kit","commit":"4db575faa502752dc5018754006391c4850a604b","license":"GPL-3.0"},"stars":1,"install":{"openai4s":"openai4s lab add labs/nion-software__nionswift-instrumentation-kit","mhs":"mhs serve labs/nion-software__nionswift-instrumentation-kit --port 7400","mcp":"mhs serve labs/nion-software__nionswift-instrumentation-kit --mcp"}},
{"id":"labs/nominal-io__instro","name":"Siglent SPD3303 series power supply (instro.psu.drivers.siglent_spd3303.SiglentSPD3303)","device_id":"mhs://localhost/siglent-spd3303","track":"labs","category":"Electronics and measurement","topic":null,"kind":"instrument","vendor":"Siglent","model":"SPD3303 series programmable DC power supply","mode":"hardware","risk":"R1","family":"python-object","role":"driver-pack","intro":"Siglent SPD3303 series power supply (instro.psu.drivers.siglent_spd3303.SiglentSPD3303), adapted from nominal-io/instro. It reads `voltage_ch1`, `current_ch1`, `regulation_mode_ch1`, `voltage_ch2` and 3 more; sets `voltage_setpoint_ch1`, `current_setpoint_ch1`, `output_enabled_ch1`, `voltage_setpoint_ch2` and 2 more; runs `output_off`. `output_off`: disable both channel outputs (OUTP CH1,OFF and OUTP CH2,OFF); it takes no input and is the declared safe state. A hardware driver: the market serves its fake backend, so no instrument is needed.","measures":["voltage_ch1","current_ch1","regulation_mode_ch1","voltage_ch2","current_ch2","regulation_mode_ch2","psu_mode"],"adjusts":["voltage_setpoint_ch1","current_setpoint_ch1","output_enabled_ch1","voltage_setpoint_ch2","current_setpoint_ch2","output_enabled_ch2"],"actions":[{"name":"output_off","description":"Disable both channel outputs (OUTP CH1,OFF and OUTP CH2,OFF); it takes no input and is the declared safe state"}],"tags":["power-supply","dc-source","scpi","visa","two-channel"],"backends":["fake","hardware"],"served_backend":"fake","evidence":"contract_checked","upstream":{"repo_url":"https://github.com/nominal-io/instro","commit":"311aee4ae227205b773e6cc9c523df9ea7e7ce03","license":"Apache-2.0"},"stars":718,"install":{"openai4s":"openai4s lab add labs/nominal-io__instro","mhs":"mhs serve labs/nominal-io__instro --port 7400","mcp":"mhs serve labs/nominal-io__instro --mcp"}},
{"id":"labs/norlovs__ot2-robotics-cv-control","name":"OT-2 pipetting-robot digital twin (OT2Env)","device_id":"mhs://localhost/ot2-twin","track":"labs","category":"Simulation","topic":"wet-lab automation and chemistry","kind":"world.sim","vendor":"norlovs","model":"OT-2 Robotics CV Control","mode":"simulated","risk":"R0","family":"gymnasium","role":"sim-env","intro":"OT-2 pipetting-robot digital twin (OT2Env), adapted from norlovs/ot2-robotics-cv-control. It reads `observation`, `reward`, `terminated`, `truncated` and 4 more; runs `step`, `reset` and `seed`. `step`: advance the simulated world by a bounded number of fixed timesteps, optionally applying an action for each step, and return the resulting observation and terminal flags. A simulator: the market serves it with a stand-in that needs no simulator install.","measures":["observation","reward","terminated","truncated","tick","episode","seed","info"],"adjusts":[],"actions":[{"name":"step","description":"Advance the simulated world by a bounded number of fixed timesteps, optionally applying an action for each step, and return the resulting observation and terminal flags."},{"name":"reset","description":"Reset the simulated world to a scenario start state and return the initial observation. When a seed is supplied the endpoint records it in the receipt; otherwise the endpoint's declared default seed applies."},{"name":"seed","description":"Set the seed used by the simulated world's random number generators for subsequent steps, without resetting the world. The accepted seed is echoed in the receipt."}],"tags":["ot-2","opentrons","digital-twin","pipetting","pybullet","reinforcement-learning","simulation","gymnasium"],"backends":["fake"],"served_backend":"fake","evidence":"contract_checked","upstream":{"repo_url":"https://github.com/norlovs/ot2-robotics-cv-control","commit":"a0a621e5a79c32e70c8c97864d256693d3b3eac0","license":"NOASSERTION"},"stars":1,"install":{"openai4s":"openai4s lab add labs/norlovs__ot2-robotics-cv-control","mhs":"mhs serve labs/norlovs__ot2-robotics-cv-control --port 7400","mcp":"mhs serve labs/norlovs__ot2-robotics-cv-control --mcp"}},
{"id":"labs/nsls-ii-ari__ari_sxn_common","name":"ARI M1 mirror section (ari_sxn_common, read only)","device_id":"mhs://localhost/ari-m1-section","track":"labs","category":"Optics and microscopy","topic":null,"kind":"optics.mirror","vendor":"NSLS-II ARI/SXN","model":"M1 mirror section (ARI M1)","mode":"hardware","risk":"R0","family":"python-object","role":"device-driver","intro":"ARI M1 mirror section (ari_sxn_common, read only), adapted from nsls-ii-ari/ari_sxn_common. It reads `ry_coarse`, `ry_fine`, `rz`, `x` and 20 more. A hardware driver: the market serves its fake backend, so no instrument is needed.","measures":["ry_coarse","ry_fine","rz","x","y","slit_top","slit_bottom","slit_inboard","slit_outboard","diag_blade","diag_filter","diag_current1","diag_current2","diag_current3","diag_current4","slit_current1","slit_current2","slit_current3","slit_current4","vacuum_ccg","vacuum_tcg","vacuum_ip","locations","read_photocurrent"],"adjusts":[],"actions":[],"tags":["ophyd","bluesky","epics","nsls-ii","ari","mirror","baffle-slit","diagnostic","read-only"],"backends":["fake","hardware"],"served_backend":"fake","evidence":"contract_checked","upstream":{"repo_url":"https://github.com/nsls-ii-ari/ari_sxn_common","commit":"13892fc39dd2605a8641d76649e7b13c434d9183","license":"BSD-3-Clause"},"stars":1,"install":{"openai4s":"openai4s lab add labs/nsls-ii-ari__ari_sxn_common","mhs":"mhs serve labs/nsls-ii-ari__ari_sxn_common --port 7400","mcp":"mhs serve labs/nsls-ii-ari__ari_sxn_common --mcp"}},
{"id":"labs/nsls-ii-chx__syringe_pump_controller","name":"NSLS-II CHX syringe pump controller","device_id":"mhs://localhost/nsls-ii-chx-syringe-pump","track":"labs","category":"Liquid handling and fluidics","topic":null,"kind":"fluid.pump","vendor":"NSLS-II CHX","model":"syringe pump controller","mode":"hardware","risk":"R2","family":"serial","role":"device-driver","intro":"NSLS-II CHX syringe pump controller, adapted from nsls-ii-chx/syringe_pump_controller. It reads `direction` and `dispensed_volume`; sets `flow_rate` and `volume`; runs `dispense` and `stop_pump`. `dispense`: run a pump at a declared flow rate for a declared duration or volume in a declared direction, reporting the volume moved. A hardware driver: the market serves its fake backend, so no instrument is needed.","measures":["direction","dispensed_volume"],"adjusts":["flow_rate","volume"],"actions":[{"name":"dispense","description":"Run a pump at a declared flow rate for a declared duration or volume in a declared direction, reporting the volume moved."},{"name":"stop_pump","description":"Stop every pump with the CR-terminated STP command; takes no input"}],"tags":["syringe pump","serial","nsls-ii","chx","fluid"],"backends":["fake","hardware"],"served_backend":"fake","evidence":"contract_checked","upstream":{"repo_url":"https://github.com/nsls-ii-chx/syringe_pump_controller","commit":"cbda9ca1c20127a220eb91a61b6420a366ae5cf8","license":"NOASSERTION"},"stars":0,"install":{"openai4s":"openai4s lab add labs/nsls-ii-chx__syringe_pump_controller","mhs":"mhs serve labs/nsls-ii-chx__syringe_pump_controller --port 7400","mcp":"mhs serve labs/nsls-ii-chx__syringe_pump_controller --mcp"}},
{"id":"labs/nsls-ii-sst__caproto_cryostat","name":"NSLS-II SST ADR cryostat (caproto EPICS IOC, read only)","device_id":"mhs://localhost/caproto-cryostat","track":"labs","category":"Thermal and process control","topic":null,"kind":"thermal.zone","vendor":"NSLS-II SST","model":"ADR cryostat","mode":"hardware","risk":"R0","family":"tag-bridge","role":"device-driver","intro":"NSLS-II SST ADR cryostat (caproto EPICS IOC, read only), adapted from nsls-ii-sst/caproto_cryostat. It reads `temperature`, `setpoint_readback`, `temperature_rms`, `alternate_temperature` and 4 more. A hardware driver: the market serves its fake backend, so no instrument is needed.","measures":["temperature","setpoint_readback","temperature_rms","alternate_temperature","heater_output","state","cycle_uid","read_adr"],"adjusts":[],"actions":[],"tags":["cryostat","adr","epics","caproto","tag-bridge","temperature","read-only"],"backends":["fake","hardware"],"served_backend":"fake","evidence":"contract_checked","upstream":{"repo_url":"https://github.com/nsls-ii-sst/caproto_cryostat","commit":"bc89595479d634106426f698eef27a993a5cb99a","license":"NOASSERTION"},"stars":0,"install":{"openai4s":"openai4s lab add labs/nsls-ii-sst__caproto_cryostat","mhs":"mhs serve labs/nsls-ii-sst__caproto_cryostat --port 7400","mcp":"mhs serve labs/nsls-ii-sst__caproto_cryostat --mcp"}},
{"id":"labs/nsls2__pamila","name":"PAMILA read-only middle-layer variable list","device_id":"mhs://localhost/pamila-variable-list","track":"labs","category":"Sensors and cameras","topic":null,"kind":"sensor","vendor":"nsls2","model":"PAMILA MiddleLayerVariableListRO","mode":"hardware","risk":"R0","family":"python-object","role":"device-driver","intro":"PAMILA read-only middle-layer variable list, adapted from nsls2/pamila. It reads `mlv_count`, `mlv_names`, `enabled_mlv_names`, `enabled_status` and 3 more. A hardware driver: the market serves its fake backend, so no instrument is needed.","measures":["mlv_count","mlv_names","enabled_mlv_names","enabled_status","values","value_units","read_channels"],"adjusts":[],"actions":[],"tags":["pamila","bluesky","ophyd","middle-layer","epics","sensor","read-only-list"],"backends":["fake","hardware"],"served_backend":"fake","evidence":"contract_checked","upstream":{"repo_url":"https://github.com/nsls2/pamila","commit":"62a439b6be7cb72353575183a7fea26b45a35394","license":"BSD-3-Clause"},"stars":3,"install":{"openai4s":"openai4s lab add labs/nsls2__pamila","mhs":"mhs serve labs/nsls2__pamila --port 7400","mcp":"mhs serve labs/nsls2__pamila --mcp"}},
{"id":"labs/oelemento__star-sim","name":"Hamilton STARlet digital twin (star_sim.RobotEnv, PyLabRobot ChatterBox)","device_id":"mhs://localhost/star-sim","track":"labs","category":"Liquid handling and fluidics","topic":null,"kind":"lab.liquid_handler","vendor":"oelemento","model":"star-sim Hamilton STARlet digital twin","mode":"simulated","risk":"R2","family":"pylabrobot","role":"twin-candidate","intro":"Hamilton STARlet digital twin (star_sim.RobotEnv, PyLabRobot ChatterBox), adapted from oelemento/star-sim. It reads `tips_remaining_columns`; runs `transfer`, `mix` and `tracked_volumes`. `transfer`: pick up fresh tips, aspirate the source wells, dispense the target wells, discard the tips; no cleanup after a failure. A simulator: the market serves it with a stand-in that needs no simulator install.","measures":["tips_remaining_columns"],"adjusts":[],"actions":[{"name":"transfer","description":"Pick up fresh tips, aspirate the source wells, dispense the target wells, discard the tips; no cleanup after a failure"},{"name":"mix","description":"Pick up fresh tips, aspirate and dispense the same wells per cycle, discard the tips; no cleanup after a failure"},{"name":"tracked_volumes","description":"Tracked liquid volume of declared wells (PyLabRobot volume tracker bookkeeping, not a measurement)"}],"tags":["liquid-handler","pylabrobot","hamilton","starlet","digital-twin","simulation"],"backends":["fake"],"served_backend":"fake","evidence":"contract_checked","upstream":{"repo_url":"https://github.com/oelemento/star-sim","commit":"5b5211a4c5414e5a9752b286515fbe87e769842d","license":"MIT"},"stars":0,"install":{"openai4s":"openai4s lab add labs/oelemento__star-sim","mhs":"mhs serve labs/oelemento__star-sim --port 7400","mcp":"mhs serve labs/oelemento__star-sim --mcp"}},
{"id":"labs/ombayley__chemklipper","name":"ChemKlipper CoreXY gantry (chem_klipper.devices.gantry:Gantry)","device_id":"mhs://localhost/chemklipper-gantry","track":"labs","category":"Motion control","topic":null,"kind":"motion.axis","vendor":null,"model":null,"mode":"hardware","risk":"R2","family":"python-object","role":"device-driver","intro":"ChemKlipper CoreXY gantry (chem_klipper.devices.gantry:Gantry), adapted from ombayley/chemklipper. It reads `connected`, `status`, `position` and `target_position`; runs `home_gantry`, `move_cartesian` and `stop_motion`. `home_gantry`: home all gantry axes with the native G28. A hardware driver: the market serves its fake backend, so no instrument is needed.","measures":["connected","status","position","target_position"],"adjusts":[],"actions":[{"name":"home_gantry","description":"Home all gantry axes with the native G28"},{"name":"move_cartesian","description":"Move the gantry to a Cartesian X/Y/Z point in millimetres"},{"name":"stop_motion","description":"De-energise the gantry motors (M18), the native safe state"}],"tags":["gantry","corexy","klipper","motion","asyncio"],"backends":["fake","hardware"],"served_backend":"fake","evidence":"contract_checked","upstream":{"repo_url":"https://github.com/ombayley/chemklipper","commit":"e88503106b481ad12a2469b3dbe991c18186e650","license":"GPL-3.0"},"stars":0,"install":{"openai4s":"openai4s lab add labs/ombayley__chemklipper","mhs":"mhs serve labs/ombayley__chemklipper --port 7400","mcp":"mhs serve labs/ombayley__chemklipper --mcp"}},
{"id":"labs/opentrons__opentrons-modules","name":"Opentrons Temp Deck Gen 3","device_id":"mhs://localhost/tempdeck-gen3","track":"labs","category":"Thermal and process control","topic":null,"kind":"lab.thermal_block","vendor":"Opentrons","model":"Temperature Deck Gen 3","mode":"hardware","risk":"R2","family":"serial","role":"device-driver","intro":"Opentrons Temp Deck Gen 3, adapted from opentrons/opentrons-modules. It reads `plate_temperature_1`, `plate_temperature_2`, `heatsink_temperature`, `peltier_current` and 2 more; sets `fan_power`; runs `set_target_temperature` and `deactivate`. `set_target_temperature`: set the target temperature of a thermal zone and optionally wait for the zone to reach the setpoint within a declared tolerance. A hardware driver: the market serves its fake backend, so no instrument is needed.","measures":["plate_temperature_1","plate_temperature_2","heatsink_temperature","peltier_current","fan_speed","peltier_power"],"adjusts":["fan_power"],"actions":[{"name":"set_target_temperature","description":"Set the target temperature of a thermal zone and optionally wait for the zone to reach the setpoint within a declared tolerance."},{"name":"deactivate","description":"Deactivate the thermal system (M18): clear the target, disable the peltier and set fan power 0"}],"tags":["opentrons","temperature module","tempdeck","thermal","peltier","serial"],"backends":["fake","hardware"],"served_backend":"fake","evidence":"contract_checked","upstream":{"repo_url":"https://github.com/opentrons/opentrons-modules","commit":"bb98120ac93ccff0ae9224f95309604dd8b7d0aa","license":"NOASSERTION"},"stars":33,"install":{"openai4s":"openai4s lab add labs/opentrons__opentrons-modules","mhs":"mhs serve labs/opentrons__opentrons-modules --port 7400","mcp":"mhs serve labs/opentrons__opentrons-modules --mcp"}},
{"id":"labs/openuc2__imswitch","name":"OpenUC2 ESP32 microscope stage","device_id":"mhs://localhost/uc2-stage","track":"labs","category":"Motion control","topic":null,"kind":"motion.axis","vendor":"OpenUC2","model":"ESP32 stage (ImSwitch ESP32StageManager)","mode":"hardware","risk":"R2","family":"python-object","role":"driver-pack","intro":"OpenUC2 ESP32 microscope stage, adapted from openuc2/imswitch. It reads `x_um`, `y_um` and `z_um`; runs `move_xyz` and `stop_motion`. `move_xyz`: move the X, Y and Z stage axes to absolute positions in micrometres with the coordinated upstream XYZ move, and report the position a device query returns afterwards; a move whose native call raises or whose position query fails ends unknown. A hardware driver: the market serves its fake backend, so no instrument is needed.","measures":["x_um","y_um","z_um"],"adjusts":[],"actions":[{"name":"move_xyz","description":"Move the X, Y and Z stage axes to absolute positions in micrometres with the coordinated upstream XYZ move, and report the position a device query returns afterwards; a move whose native call raises or whose position query fails ends unknown"},{"name":"stop_motion","description":"Stop all motion on the resource with a declared deceleration profile and report the stopping position. This capability is always cancellable=false and is exempt from rate limiting."}],"tags":["openuc2","uc2","stage","positioner","esp32","imswitch"],"backends":["fake","hardware"],"served_backend":"fake","evidence":"contract_checked","upstream":{"repo_url":"https://github.com/openuc2/imswitch","commit":"e5db60f1021b0d7b72f171069258768127880ac5","license":"GPL-3.0"},"stars":19,"install":{"openai4s":"openai4s lab add labs/openuc2__imswitch","mhs":"mhs serve labs/openuc2__imswitch --port 7400","mcp":"mhs serve labs/openuc2__imswitch --mcp"}},
{"id":"labs/opntec__open-spectrometer-python","name":"TCD1304 linear CCD on a PSLab (open-spectrometer-python)","device_id":"mhs://localhost/tcd1304","track":"labs","category":"Spectroscopy","topic":null,"kind":"instrument.spectrometer","vendor":"OpnTec open spectrometer project","model":"TCD1304 linear CCD on PSLab","mode":"hardware","risk":"R1","family":"python-object","role":"device-driver","intro":"TCD1304 linear CCD on a PSLab (open-spectrometer-python), adapted from opntec/open-spectrometer-python. It reads `master_clock_frequency`; sets `integration_time`; runs `measure_intensity` and `power_on`. `measure_intensity`: measure optical or radiant intensity at a declared wavelength or channel and return the value with its unit and integration time. A hardware driver: the market serves its fake backend, so no instrument is needed.","measures":["master_clock_frequency"],"adjusts":["integration_time"],"actions":[{"name":"measure_intensity","description":"Measure optical or radiant intensity at a declared wavelength or channel and return the value with its unit and integration time."},{"name":"power_on","description":"Power the CCD on again after a safety reset (the declared re-enable): poweron() sets the PV1 supply to 5 V; it takes no input, is refused while the e-stop is latched and is never run by the reset"}],"tags":["spectrometer","ccd","tcd1304","pslab","optics","intensity"],"backends":["fake","hardware"],"served_backend":"fake","evidence":"contract_checked","upstream":{"repo_url":"https://github.com/opntec/open-spectrometer-python","commit":"a15b67d9afb48713baeb748000433554adf26980","license":"Apache-2.0"},"stars":1386,"install":{"openai4s":"openai4s lab add labs/opntec__open-spectrometer-python","mhs":"mhs serve labs/opntec__open-spectrometer-python --port 7400","mcp":"mhs serve labs/opntec__open-spectrometer-python --mcp"}},
{"id":"labs/pangea567__gnsdo-scpi-simulator","name":"Jackson Labs Low Noise Rubidium GNSDO","device_id":"mhs://localhost/gnsdo","track":"labs","category":"Electronics and measurement","topic":null,"kind":"instrument","vendor":"Jackson Labs","model":"Low Noise Rubidium GNSDO (PRE), GPS/GNSS-disciplined rubidium oscillator","mode":"hardware","risk":"R0","family":"serial","role":"twin-candidate","intro":"Jackson Labs Low Noise Rubidium GNSDO, adapted from pangea567/gnsdo-scpi-simulator. It reads `identity`, `sync_locked`, `tint`, `health` and 14 more; runs `start_holdover`, `recover_from_holdover`, `set_sync_source` and `set_ptime_output`. `start_holdover`: put the oscillator into holdover (the device keeps the last known frequency without GPS). A hardware driver: the market serves its fake backend, so no instrument is needed.","measures":["identity","sync_locked","tint","health","satellites_tracked","satellites_visible","pcb_temperature","tcxo_voltage","power_supply_voltage","csac_temperature","csac_status","lifetime","csac_lifetime","leap_seconds","ptime_output","ptime_date","ptime_time","holdover_duration"],"adjusts":[],"actions":[{"name":"start_holdover","description":"Put the oscillator into holdover (the device keeps the last known frequency without GPS)"},{"name":"recover_from_holdover","description":"End holdover and return the oscillator to its reference"},{"name":"set_sync_source","description":"Set the synchronization source mode; the clone's documentation names GPS, EXTERNAL and INTERNAL as examples, and the upstream setter stores any non-empty value"},{"name":"set_ptime_output","description":"Enable or disable the PTIME time-sharing output"}],"tags":["gnsdo","gpsdo","gnss","rubidium","oscillator","time reference","serial","scpi"],"backends":["fake"],"served_backend":"fake","evidence":"contract_checked","upstream":{"repo_url":"https://github.com/pangea567/gnsdo-scpi-simulator","commit":"a2d57a9759ab72fcfa42578a505d8ca4248bc0a4","license":"MIT"},"stars":1,"install":{"openai4s":"openai4s lab add labs/pangea567__gnsdo-scpi-simulator","mhs":"mhs serve labs/pangea567__gnsdo-scpi-simulator --port 7400","mcp":"mhs serve labs/pangea567__gnsdo-scpi-simulator --mcp"}},
{"id":"labs/pcdshub__ophyd-ads","name":"TwinCAT NC axis telemetry (ophyd-ads, read only)","device_id":"mhs://localhost/ophyd-ads-nc-axis","track":"labs","category":"Sensors and cameras","topic":null,"kind":"sensor","vendor":"Beckhoff","model":"TwinCAT NC axis through ophyd-ads","mode":"hardware","risk":"R0","family":"python-object","role":"device-driver","intro":"TwinCAT NC axis telemetry (ophyd-ads, read only), adapted from pcdshub/ophyd-ads. It reads `act_acc`, `act_pos`, `act_pos_modulo`, `act_torque` and 8 more. A hardware driver: the market serves its fake backend, so no instrument is needed.","measures":["act_acc","act_pos","act_pos_modulo","act_torque","act_velo","axis_state","cmd_no","control_d_word","couple_state","ctrl_output","drive_output","read_channels"],"adjusts":[],"actions":[],"tags":["ophyd","ads","beckhoff","twincat","nc-axis","telemetry","read-only"],"backends":["fake","hardware"],"served_backend":"fake","evidence":"contract_checked","upstream":{"repo_url":"https://github.com/pcdshub/ophyd-ads","commit":"2029e0bebee6148aba47e5947467574337fea61a","license":"BSD-3-Clause"},"stars":0,"install":{"openai4s":"openai4s lab add labs/pcdshub__ophyd-ads","mhs":"mhs serve labs/pcdshub__ophyd-ads --port 7400","mcp":"mhs serve labs/pcdshub__ophyd-ads --mcp"}},
{"id":"labs/pcdshub__pcdsdevices","name":"LCLS TPR trigger channel (pcdsdevices.TprTrigger)","device_id":"mhs://localhost/tpr-trigger","track":"labs","category":"Electronics and measurement","topic":null,"kind":"io.digital","vendor":"SLAC PCDS","model":"LCLS timing-pattern receiver (TPR) trigger channel","mode":"hardware","risk":"R1","family":"python-object","role":"device-driver","intro":"LCLS TPR trigger channel (pcdsdevices.TprTrigger), adapted from pcdshub/pcdsdevices. It reads `channel_enabled`, `trigger_enabled`, `eventrate` and `label`; sets `delay_ns` and `width_ns`; runs `set_trigger_enabled`. `set_trigger_enabled`: enable or disable the configured TPR channel, its trigger output, or both. A hardware driver: the market serves its fake backend, so no instrument is needed.","measures":["channel_enabled","trigger_enabled","eventrate","label"],"adjusts":["delay_ns","width_ns"],"actions":[{"name":"set_trigger_enabled","description":"Enable or disable the configured TPR channel, its trigger output, or both"}],"tags":["ophyd","epics","timing","trigger","lcls"],"backends":["fake","hardware"],"served_backend":"fake","evidence":"contract_checked","upstream":{"repo_url":"https://github.com/pcdshub/pcdsdevices","commit":"d13b06eb53e6185088a7534ce0e17ab154463407","license":"BSD-3-Clause"},"stars":7,"install":{"openai4s":"openai4s lab add labs/pcdshub__pcdsdevices","mhs":"mhs serve labs/pcdshub__pcdsdevices --port 7400","mcp":"mhs serve labs/pcdshub__pcdsdevices --mcp"}},
{"id":"labs/phamdangnguyen__-control-kds-gemini-88-plus-dual-rate-syringe-pump-using-python-and-serial","name":"KDS Gemini 88 Plus dual-rate syringe pump","device_id":"mhs://localhost/kds-gemini-88","track":"labs","category":"Liquid handling and fluidics","topic":null,"kind":"fluid.pump","vendor":"KD Scientific","model":"Gemini 88 Plus dual-rate syringe pump","mode":"hardware","risk":"R2","family":"serial","role":"device-driver","intro":"KDS Gemini 88 Plus dual-rate syringe pump, adapted from phamdangnguyen/-control-kds-gemini-88-plus-dual-rate-syringe-pump-using-python-and-serial. It reads `status` and `running`; sets `syringe_volume`, `diameter`, `target_time`, `target_volume` and 1 more; runs `syringe`, `run` and `stop_pump`. `syringe`: select the syringe for both channels with 'syr {channel} {code} {index}'. A hardware driver: the market serves its fake backend, so no instrument is needed.","measures":["status","running"],"adjusts":["syringe_volume","diameter","target_time","target_volume","flow_rate"],"actions":[{"name":"syringe","description":"Select the syringe for both channels with 'syr {channel} {code} {index}'"},{"name":"run","description":"Run the configured pump program on the selected channel(s) with 'run {channel}'"},{"name":"stop_pump","description":"Stop both pump channels with 'stop ab' (the native stop and the safe state); takes no input"}],"tags":["syringe pump","kds","gemini 88","serial","infuse","withdraw","dual rate"],"backends":["fake","hardware"],"served_backend":"fake","evidence":"contract_checked","upstream":{"repo_url":"https://github.com/phamdangnguyen/-control-kds-gemini-88-plus-dual-rate-syringe-pump-using-python-and-serial","commit":"ab6a02be981ea541d11f8788567030073ad2a378","license":"NOASSERTION"},"stars":2,"install":{"openai4s":"openai4s lab add labs/phamdangnguyen__-control-kds-gemini-88-plus-dual-rate-syringe-pump-using-python-and-serial","mhs":"mhs serve labs/phamdangnguyen__-control-kds-gemini-88-plus-dual-rate-syringe-pump-using-python-and-serial --port 7400","mcp":"mhs serve labs/phamdangnguyen__-control-kds-gemini-88-plus-dual-rate-syringe-pump-using-python-and-serial --mcp"}},
{"id":"labs/picoquant__lumipy","name":"PicoQuant Luminosa through LumiPy Measurement","device_id":"mhs://localhost/lumipy","track":"labs","category":"Optics and microscopy","topic":null,"kind":"instrument.microscope","vendor":"PicoQuant","model":"Luminosa (LumiPy)","mode":"hardware","risk":"R2","family":"python-object","role":"device-driver","intro":"PicoQuant Luminosa through LumiPy Measurement, adapted from picoquant/lumipy. It reads `version`, `analysis_names`, `running`, `elapsed_meas_time` and 16 more; sets `scan_range_left`, `scan_range_top`, `scan_range_width`, `scan_range_height` and 2 more; runs `configure_image_stop`, `configure_point_stop`, `set_ptu_output`, `start_measurement` and 7 more. `configure_image_stop`: configure the image stop conditions (frame count, photon threshold, time). A hardware driver: the market serves its fake backend, so no instrument is needed.","measures":["version","analysis_names","running","elapsed_meas_time","scan_range_min_x","scan_range_max_x","scan_range_min_y","scan_range_max_y","stop_on_num_frames","num_frames","stop_on_photons_in_brightest_px","photons_in_brightest_px","img_stop_on_meas_time","img_meas_time","point_stop_on_photons","point_num_photons","point_stop_on_meas_time","point_meas_time","write_ptu_file","path_to_ptu"],"adjusts":["scan_range_left","scan_range_top","scan_range_width","scan_range_height","scan_speed","image_size"],"actions":[{"name":"configure_image_stop","description":"Configure the image stop conditions (frame count, photon threshold, time)."},{"name":"configure_point_stop","description":"Configure the point stop conditions (photon threshold and time)."},{"name":"set_ptu_output","description":"Enable or disable PTU output during the next scan."},{"name":"start_measurement","description":"Start an image, line or point measurement (the native start_meas)."},{"name":"stop_measurement","description":"Stop the measurement (native stop_meas) and confirm meas_status reads False; safe state."},{"name":"set_measurement_name","description":"Set the name of the next measurement (the native set_next_measurement_name)."},{"name":"get_analysis_curve","description":"Read one live analysis curve and its optional fit arrays."},{"name":"get_analysis_curve_types","description":"List the curve types available for one live analysis."},{"name":"get_analysis_image_types","description":"List the image types available for one live analysis."},{"name":"get_analysis_param","description":"Read one live analysis parameter; its keys depend on the analysis and parameter type."},{"name":"get_analysis_param_types","description":"List the parameter types available for one live analysis."}],"tags":["microscope","confocal","lumipy","luminosa","measurement"],"backends":["fake","hardware"],"served_backend":"fake","evidence":"contract_checked","upstream":{"repo_url":"https://github.com/picoquant/lumipy","commit":"dc0fe266a55219811d171ccfc99a742e4eb4fffd","license":"MIT"},"stars":6,"install":{"openai4s":"openai4s lab add labs/picoquant__lumipy","mhs":"mhs serve labs/picoquant__lumipy --port 7400","mcp":"mhs serve labs/picoquant__lumipy --mcp"}},
{"id":"labs/plasmon360__python_newport_1918_powermeter","name":"Newport 1918-C optical power meter (newport_1918c.Newport_1918c)","device_id":"mhs://localhost/newport-1918c","track":"labs","category":"Optics and microscopy","topic":null,"kind":"sensor.optical","vendor":"Newport","model":"1918-C optical power meter","mode":"hardware","risk":"R1","family":"python-object","role":"device-driver","intro":"Newport 1918-C optical power meter (newport_1918c.Newport_1918c), adapted from plasmon360/python_newport_1918_powermeter. It reads `serial_number` and `model_number`; sets `wavelength_nm`; runs `measure_intensity`. `measure_intensity`: measure optical or radiant intensity at a declared wavelength or channel and return the value with its unit and integration time. A hardware driver: the market serves its fake backend, so no instrument is needed.","measures":["serial_number","model_number"],"adjusts":["wavelength_nm"],"actions":[{"name":"measure_intensity","description":"Measure optical or radiant intensity at a declared wavelength or channel and return the value with its unit and integration time."}],"tags":["optical-power","power-meter","newport","usb","ctypes","measurement"],"backends":["fake","hardware"],"served_backend":"fake","evidence":"contract_checked","upstream":{"repo_url":"https://github.com/plasmon360/python_newport_1918_powermeter","commit":"5c8ae02c1f9d412c0cbabec39141e99393e0f048","license":"NOASSERTION"},"stars":12,"install":{"openai4s":"openai4s lab add labs/plasmon360__python_newport_1918_powermeter","mhs":"mhs serve labs/plasmon360__python_newport_1918_powermeter --port 7400","mcp":"mhs serve labs/plasmon360__python_newport_1918_powermeter --mcp"}},
{"id":"labs/pmezydlo__oscilloscope_lan_data_capture","name":"Rigol DS1000Z series oscilloscope (oscilloscope_functions.oscilloscope)","device_id":"mhs://localhost/rigol-ds1000z","track":"labs","category":"Electronics and measurement","topic":null,"kind":"instrument","vendor":"Rigol","model":"DS1000Z series oscilloscope","mode":"hardware","risk":"R0","family":"serial","role":"device-driver","intro":"Rigol DS1000Z series oscilloscope (oscilloscope_functions.oscilloscope), adapted from pmezydlo/oscilloscope_lan_data_capture. It reads `manufacturer`, `instrument_model`, `serial_number`, `firmware_version` and 4 more. A hardware driver: the market serves its fake backend, so no instrument is needed.","measures":["manufacturer","instrument_model","serial_number","firmware_version","active_channels","timebase_scale_s_per_div","timebase_offset_s","settings"],"adjusts":[],"actions":[],"tags":["oscilloscope","rigol","ds1000z","scpi","lan","serial","usb","waveform"],"backends":["fake"],"served_backend":"fake","evidence":"contract_checked","upstream":{"repo_url":"https://github.com/pmezydlo/oscilloscope_lan_data_capture","commit":"f68c0b8d5acb7592ad21fd39b453d5a4d892a91e","license":"NOASSERTION"},"stars":4,"install":{"openai4s":"openai4s lab add labs/pmezydlo__oscilloscope_lan_data_capture","mhs":"mhs serve labs/pmezydlo__oscilloscope_lan_data_capture --port 7400","mcp":"mhs serve labs/pmezydlo__oscilloscope_lan_data_capture --mcp"}},
{"id":"labs/prathameshnium__pica-python-instrument-control-and-automation","name":"Cryo-con 34 temperature controller (PICA Cryocon34Backend)","device_id":"mhs://localhost/cryocon34","track":"labs","category":"Thermal and process control","topic":null,"kind":"thermal.zone","vendor":"Cryo-con","model":"Model 34","mode":"hardware","risk":"R2","family":"python-object","role":"driver-pack","intro":"Cryo-con 34 temperature controller (PICA Cryocon34Backend), adapted from prathameshnium/pica-python-instrument-control-and-automation. It reads `temperature`, `control_engaged`, `heater_readback`, `ramp_rate` and 11 more; sets `setpoint`, `loop_type`, `loop_source`, `max_power` and 4 more; runs `control_engage` and `control_stop`. `control_engage`: engage every enabled control loop at the configured setpoint (native CONTROL). A hardware driver: the market serves its fake backend, so no instrument is needed.","measures":["temperature","control_engaged","heater_readback","ramp_rate","input_units","source_units","input_name","alarm_status","alarm","ambient","idn","error_queue","display_resolution","lockout","factory_sensor_index"],"adjusts":["setpoint","loop_type","loop_source","max_power","max_setpoint","manual_power","display_time_constant","load"],"actions":[{"name":"control_engage","description":"Engage every enabled control loop at the configured setpoint (native CONTROL)"},{"name":"control_stop","description":"Disengage all control loops and disconnect the heaters (native STOP), the safe state"}],"tags":["cryocon","temperature-controller","cryostat","gpib","direct-control"],"backends":["fake","hardware"],"served_backend":"fake","evidence":"contract_checked","upstream":{"repo_url":"https://github.com/prathameshnium/pica-python-instrument-control-and-automation","commit":"17ce57d76e679841379bcc13d33f77fe046f9c87","license":"MIT"},"stars":12,"install":{"openai4s":"openai4s lab add labs/prathameshnium__pica-python-instrument-control-and-automation","mhs":"mhs serve labs/prathameshnium__pica-python-instrument-control-and-automation --port 7400","mcp":"mhs serve labs/prathameshnium__pica-python-instrument-control-and-automation --mcp"}},
{"id":"labs/prr8691__optosigma-gsc02c-python","name":"OptoSigma GSC-02C delay stage (optosigma_gsc02c.GSC02C)","device_id":"mhs://localhost/gsc02c","track":"labs","category":"Motion control","topic":null,"kind":"motion.axis","vendor":"OptoSigma / Sigma Koki","model":"GSC-02C controller with OSMS20-85 stage","mode":"hardware","risk":"R1","family":"python-object","role":"device-driver","intro":"OptoSigma GSC-02C delay stage (optosigma_gsc02c.GSC02C), adapted from prr8691/optosigma-gsc02c-python. It reads `position_mm`, `position_pulses`, `busy` and `status`; runs `configure_motion`, `move_absolute_mm`, `move_relative_mm`, `move_absolute_pulses` and 3 more. `configure_motion`: set the D: motion ramp used by later moves. A hardware driver: the market serves its fake backend, so no instrument is needed.","measures":["position_mm","position_pulses","busy","status"],"adjusts":[],"actions":[{"name":"configure_motion","description":"Set the D: motion ramp used by later moves"},{"name":"move_absolute_mm","description":"Move to an absolute position in millimetres (A: then G:)"},{"name":"move_relative_mm","description":"Move by a distance in millimetres (M: then G:)"},{"name":"move_absolute_pulses","description":"Move to an absolute controller coordinate in pulses (A: then G:)"},{"name":"move_relative_pulses","description":"Move by a signed number of pulses (M: then G:)"},{"name":"home","description":"Run the controller's mechanical-origin search (H:)"},{"name":"stop_motion","description":"Stop motion with the controller's native controlled deceleration (L:)"}],"tags":["motion","stage","delay-stage","serial","open-loop"],"backends":["fake","hardware"],"served_backend":"fake","evidence":"contract_checked","upstream":{"repo_url":"https://github.com/prr8691/optosigma-gsc02c-python","commit":"d3403dc83f62fd39a3b437c13076ee676122e760","license":"NOASSERTION"},"stars":0,"install":{"openai4s":"openai4s lab add labs/prr8691__optosigma-gsc02c-python","mhs":"mhs serve labs/prr8691__optosigma-gsc02c-python --port 7400","mcp":"mhs serve labs/prr8691__optosigma-gsc02c-python --mcp"}},
{"id":"labs/pycroscopy__dtmicroscope","name":"DTMicroscope TEM client (DTMicroscope.base.twisted_client.TEMClient)","device_id":"mhs://localhost/dtmicroscope","track":"labs","category":"Optics and microscopy","topic":null,"kind":"instrument.microscope","vendor":"pycroscopy","model":"DTMicroscope TEM client (AutoScript-backed twisted server)","mode":"hardware","risk":"R1","family":"python-object","role":"twin-candidate","intro":"DTMicroscope TEM client (DTMicroscope.base.twisted_client.TEMClient), adapted from pycroscopy/dtmicroscope. It reads `detectors`, `microscope_status` and `vacuum`; sets `stage` and `beam_position`; runs `acquire_image` and `acquire_spectrum`. `acquire_image`: acquire a microscope image of the current field of view for a declared channel, exposure, binning and region of interest, returning an image artifact. A hardware driver: the market serves its fake backend, so no instrument is needed.","measures":["detectors","microscope_status","vacuum"],"adjusts":["stage","beam_position"],"actions":[{"name":"acquire_image","description":"Acquire a microscope image of the current field of view for a declared channel, exposure, binning and region of interest, returning an image artifact."},{"name":"acquire_spectrum","description":"Acquire one spectrum from a detector and return its samples"}],"tags":["electron-microscope","tem","digital-twin","json-rpc","stage"],"backends":["fake","hardware"],"served_backend":"fake","evidence":"contract_checked","upstream":{"repo_url":"https://github.com/pycroscopy/dtmicroscope","commit":"17245ba6df4299aa3f13e2a8f33d9ba48a8000b4","license":"MIT"},"stars":27,"install":{"openai4s":"openai4s lab add labs/pycroscopy__dtmicroscope","mhs":"mhs serve labs/pycroscopy__dtmicroscope --port 7400","mcp":"mhs serve labs/pycroscopy__dtmicroscope --mcp"}},
{"id":"labs/pyepics__newportxps","name":"Newport XPS motion controller (newportxps.NewportXPS)","device_id":"mhs://localhost/newportxps","track":"labs","category":"Motion control","topic":null,"kind":"motion.axis","vendor":"Newport","model":"XPS motion controller","mode":"hardware","risk":"R1","family":"python-object","role":"device-driver","intro":"Newport XPS motion controller (newportxps.NewportXPS), adapted from pyepics/newportxps. It reads `stage`, `group`, `position`, `group_status` and 3 more; runs `move_stage`, `move_stage_relative`, `home_group`, `enable_group` and 2 more. `move_stage`: move the bound stage to an absolute position in controller user units. A hardware driver: the market serves its fake backend, so no instrument is needed.","measures":["stage","group","position","group_status","hardware_status","positioner_errors","tuning"],"adjusts":[],"actions":[{"name":"move_stage","description":"Move the bound stage to an absolute position in controller user units"},{"name":"move_stage_relative","description":"Move the bound stage by a relative offset in controller user units"},{"name":"home_group","description":"Run the native home search of the bound group (the stage moves to its reference)"},{"name":"enable_group","description":"Enable motion on the bound group (the native GroupMotionEnable)"},{"name":"disable_group","description":"Disable motion on the bound group (the native GroupMotionDisable)"},{"name":"abort_group","description":"Abort the bound group's running move (the native GroupMoveAbort); the controller applies its configured deceleration and the call takes no profile"}],"tags":["motion","positioner","stage","newport","xps"],"backends":["fake","hardware"],"served_backend":"fake","evidence":"contract_checked","upstream":{"repo_url":"https://github.com/pyepics/newportxps","commit":"5ee41fced858f2db7edec1f75d2de52f144c51e4","license":"MIT"},"stars":26,"install":{"openai4s":"openai4s lab add labs/pyepics__newportxps","mhs":"mhs serve labs/pyepics__newportxps --port 7400","mcp":"mhs serve labs/pyepics__newportxps --mcp"}},
{"id":"labs/pymeasure__pymeasure","name":"Keithley DMM6500 multimeter","device_id":"mhs://localhost/keithley-dmm6500","track":"labs","category":"Electronics and measurement","topic":null,"kind":"instrument.dmm","vendor":"Keithley","model":"DMM6500 6.5-digit multimeter","mode":"hardware","risk":"R1","family":"python-object","role":"driver-pack","intro":"Keithley DMM6500 multimeter, adapted from pymeasure/pymeasure. It reads `mode`, `digits`, `measure_voltage` and `measure_resistance`; sets `nplc`; runs `measure_current`. `measure_current`: measure current on a declared channel and return the value with its timestamp and range. A hardware driver: the market serves its fake backend, so no instrument is needed.","measures":["mode","digits","measure_voltage","measure_resistance"],"adjusts":["nplc"],"actions":[{"name":"measure_current","description":"Measure current on a declared channel and return the value with its timestamp and range."}],"tags":["dmm","multimeter","electrical measurement","scpi","keithley"],"backends":["fake","hardware"],"served_backend":"fake","evidence":"contract_checked","upstream":{"repo_url":"https://github.com/pymeasure/pymeasure","commit":"9c6a96014e74bda79988ae0757a6b38ca390d247","license":"MIT"},"stars":785,"install":{"openai4s":"openai4s lab add labs/pymeasure__pymeasure","mhs":"mhs serve labs/pymeasure__pymeasure --port 7400","mcp":"mhs serve labs/pymeasure__pymeasure --mcp"}},
{"id":"labs/pymodaq__pymodaq_plugins_andor","name":"Andor SDK3 camera (pymodaq_plugins_andor AndorCamera)","device_id":"mhs://localhost/andor_camera","track":"labs","category":"Sensors and cameras","topic":null,"kind":"sensor.camera","vendor":"Andor","model":"SDK3 camera (Neo / SCMOS family)","mode":"hardware","risk":"R1","family":"python-object","role":"device-driver","intro":"Andor SDK3 camera (pymodaq_plugins_andor AndorCamera), adapted from pymodaq/pymodaq_plugins_andor. It reads `sensor_width`, `sensor_height`, `roi_width`, `roi_height` and 8 more; sets `integration_time`. A hardware driver: the market serves its fake backend, so no instrument is needed.","measures":["sensor_width","sensor_height","roi_width","roi_height","serial_number","actual_exposure_time","sensor_temperature","sensor_cooling","temperature_status","temperature_control","frame_rate","overlap"],"adjusts":["integration_time"],"actions":[],"tags":["camera","ccd","scmos","andor","sdk3"],"backends":["fake","hardware"],"served_backend":"fake","evidence":"contract_checked","upstream":{"repo_url":"https://github.com/pymodaq/pymodaq_plugins_andor","commit":"673a12ae4e9eaf13ed58ce7412d180002386fd5c","license":"MIT"},"stars":1,"install":{"openai4s":"openai4s lab add labs/pymodaq__pymodaq_plugins_andor","mhs":"mhs serve labs/pymodaq__pymodaq_plugins_andor --port 7400","mcp":"mhs serve labs/pymodaq__pymodaq_plugins_andor --mcp"}},
{"id":"labs/pymodaq__pymodaq_plugins_basler","name":"Basler camera (pymodaq_plugins_basler.hardware.basler:BaslerCamera)","device_id":"mhs://localhost/basler","track":"labs","category":"Sensors and cameras","topic":null,"kind":"sensor.camera","vendor":"Basler","model":"Basler camera through pypylon (pymodaq_plugins_basler)","mode":"hardware","risk":"R1","family":"python-object","role":"device-driver","intro":"Basler camera (pymodaq_plugins_basler.hardware.basler:BaslerCamera), adapted from pymodaq/pymodaq_plugins_basler. It reads `model_name`, `detector_size`, `exposure_ms`, `gain` and 3 more; sets `roi_x0`, `roi_x1`, `roi_y0`, `roi_y1` and 2 more; runs `start_grabbing`, `stop_grabbing` and `clear_roi`. `start_grabbing`: start continuous acquisition with the camera's current frame rate (the native start_grabbing with None). A hardware driver: the market serves its fake backend, so no instrument is needed.","measures":["model_name","detector_size","exposure_ms","gain","frame_rate","pixel_format","grabbing"],"adjusts":["roi_x0","roi_x1","roi_y0","roi_y1","binning_x","binning_y"],"actions":[{"name":"start_grabbing","description":"Start continuous acquisition with the camera's current frame rate (the native start_grabbing with None)"},{"name":"stop_grabbing","description":"Stop continuous acquisition (the native stop, the safe state); it takes no input"},{"name":"clear_roi","description":"Reset the ROI and binning to the full detector (the native set_roi with binning 1)"}],"tags":["camera","basler","pypylon","imaging","roi"],"backends":["fake","hardware"],"served_backend":"fake","evidence":"contract_checked","upstream":{"repo_url":"https://github.com/pymodaq/pymodaq_plugins_basler","commit":"2bb80b0f2f1f904675065ff432302b885389ee99","license":"MIT"},"stars":1,"install":{"openai4s":"openai4s lab add labs/pymodaq__pymodaq_plugins_basler","mhs":"mhs serve labs/pymodaq__pymodaq_plugins_basler --port 7400","mcp":"mhs serve labs/pymodaq__pymodaq_plugins_basler --mcp"}},
{"id":"labs/pymodaq__pymodaq_plugins_daqmx","name":"NI-DAQmx analog output (PyMoDAQ DAQ_NIDAQmx_Actuator)","device_id":"mhs://localhost/nidaqmx","track":"labs","category":"Electronics and measurement","topic":null,"kind":"instrument","vendor":"National Instruments","model":"NI-DAQmx analog output task","mode":"hardware","risk":"R1","family":"python-object","role":"device-driver","intro":"NI-DAQmx analog output (PyMoDAQ DAQ_NIDAQmx_Actuator), adapted from pymodaq/pymodaq_plugins_daqmx. It reads `device`, `analog_output_max_rate`, `analog_input_max_rate`, `analog_triggering_supported` and 2 more; sets `analog_output`. A hardware driver: the market serves its fake backend, so no instrument is needed.","measures":["device","analog_output_max_rate","analog_input_max_rate","analog_triggering_supported","trigger_source_count","last_write_index"],"adjusts":["analog_output"],"actions":[],"tags":["ni-daqmx","daq","analog-output","pymodaq"],"backends":["fake","hardware"],"served_backend":"fake","evidence":"contract_checked","upstream":{"repo_url":"https://github.com/pymodaq/pymodaq_plugins_daqmx","commit":"f2129a920a64338b2ca3b0e06614680b30385072","license":"MIT"},"stars":2,"install":{"openai4s":"openai4s lab add labs/pymodaq__pymodaq_plugins_daqmx","mhs":"mhs serve labs/pymodaq__pymodaq_plugins_daqmx --port 7400","mcp":"mhs serve labs/pymodaq__pymodaq_plugins_daqmx --mcp"}},
{"id":"labs/pymodaq__pymodaq_plugins_keithley","name":"Keithley 2100 digital multimeter","device_id":"mhs://localhost/keithley2100","track":"labs","category":"Electronics and measurement","topic":null,"kind":"instrument.dmm","vendor":"Keithley Instruments","model":"2100","mode":"hardware","risk":"R1","family":"scpi","role":"device-driver","intro":"Keithley 2100 digital multimeter, adapted from pymodaq/pymodaq_plugins_keithley. It reads `reading`, `identification`, `card` and `error`; sets `mode`; runs `reset_instrument`. `reset_instrument`: reset the instrument with the native reset (*CLS, *RST). A hardware driver: the market serves its fake backend, so no instrument is needed.","measures":["reading","identification","card","error"],"adjusts":["mode"],"actions":[{"name":"reset_instrument","description":"Reset the instrument with the native reset (*CLS, *RST)"}],"tags":["keithley","2100","multimeter","dmm","visa","scpi"],"backends":["fake","hardware"],"served_backend":"fake","evidence":"contract_checked","upstream":{"repo_url":"https://github.com/pymodaq/pymodaq_plugins_keithley","commit":"7698a50e9f596e6655b33de2b88dedd4b79786f4","license":"MIT"},"stars":0,"install":{"openai4s":"openai4s lab add labs/pymodaq__pymodaq_plugins_keithley","mhs":"mhs serve labs/pymodaq__pymodaq_plugins_keithley --port 7400","mcp":"mhs serve labs/pymodaq__pymodaq_plugins_keithley --mcp"}},
{"id":"labs/pymodaq__pymodaq_plugins_newport","name":"Newport SMC100 single-axis motion controller","device_id":"mhs://localhost/smc100","track":"labs","category":"Motion control","topic":null,"kind":"motion.axis","vendor":"Newport","model":"SMC100","mode":"hardware","risk":"R1","family":"scpi","role":"device-driver","intro":"Newport SMC100 single-axis motion controller, adapted from pymodaq/pymodaq_plugins_newport. It reads `identity`, `position`, `is_moving`, `speed` and 1 more; runs `move_abs`, `move_rel`, `home` and `stop_motion`. `move_abs`: command an absolute move with PA; the controller reports completion through is_moving. A hardware driver: the market serves its fake backend, so no instrument is needed.","measures":["identity","position","is_moving","speed","acceleration"],"adjusts":[],"actions":[{"name":"move_abs","description":"Command an absolute move with PA; the controller reports completion through is_moving"},{"name":"move_rel","description":"Command a relative move with PR; the controller reports completion through is_moving"},{"name":"home","description":"Drive axes to their declared home position or reference switch, establishing the coordinate reference needed by other motion capabilities."},{"name":"stop_motion","description":"Stop motion with the controller's ST command"}],"tags":["newport","smc100","motion controller","positioner","serial"],"backends":["fake","hardware"],"served_backend":"fake","evidence":"contract_checked","upstream":{"repo_url":"https://github.com/pymodaq/pymodaq_plugins_newport","commit":"bad8a714aa079f9ae2aab95851efedc32a8505ba","license":"MIT"},"stars":0,"install":{"openai4s":"openai4s lab add labs/pymodaq__pymodaq_plugins_newport","mhs":"mhs serve labs/pymodaq__pymodaq_plugins_newport --port 7400","mcp":"mhs serve labs/pymodaq__pymodaq_plugins_newport --mcp"}},
{"id":"labs/pymodaq__pymodaq_plugins_oceaninsight","name":"Ocean Insight spectrometer (PyMoDAQ Omnidriver plugin)","device_id":"mhs://localhost/oceaninsight-omnidriver","track":"labs","category":"Spectroscopy","topic":null,"kind":"instrument.spectrometer","vendor":"Ocean Insight","model":"OmniDriver NETWrapper spectrometer (PyMoDAQ plugin)","mode":"hardware","risk":"R1","family":"python-object","role":"device-driver","intro":"Ocean Insight spectrometer (PyMoDAQ Omnidriver plugin), adapted from pymodaq/pymodaq_plugins_oceaninsight. It reads `wavelength_min_nm`, `wavelength_max_nm` and `pixel_count`; sets `integration_time_ms`; runs `measure_intensity`. `measure_intensity`: measure optical or radiant intensity at a declared wavelength or channel and return the value with its unit and integration time. A hardware driver: the market serves its fake backend, so no instrument is needed.","measures":["wavelength_min_nm","wavelength_max_nm","pixel_count"],"adjusts":["integration_time_ms"],"actions":[{"name":"measure_intensity","description":"Measure optical or radiant intensity at a declared wavelength or channel and return the value with its unit and integration time."}],"tags":["spectrometer","ocean-insight","ocean-optics","omnidriver","pymodaq","spectroscopy"],"backends":["fake","hardware"],"served_backend":"fake","evidence":"contract_checked","upstream":{"repo_url":"https://github.com/pymodaq/pymodaq_plugins_oceaninsight","commit":"298f768a2f2c5643a45e61f416300b3805b8c893","license":"MIT"},"stars":1,"install":{"openai4s":"openai4s lab add labs/pymodaq__pymodaq_plugins_oceaninsight","mhs":"mhs serve labs/pymodaq__pymodaq_plugins_oceaninsight --port 7400","mcp":"mhs serve labs/pymodaq__pymodaq_plugins_oceaninsight --mcp"}},
{"id":"labs/pymodaq__pymodaq_plugins_physik_instrumente","name":"PI GCS2 stage controller (PyMoDAQ PIWrapper)","device_id":"mhs://localhost/pi-gcs2","track":"labs","category":"Motion control","topic":null,"kind":"motion.axis","vendor":"Physik Instrumente (PI)","model":"GCS2 controller with PI stages","mode":"hardware","risk":"R1","family":"python-object","role":"device-driver","intro":"PI GCS2 stage controller (PyMoDAQ PIWrapper), adapted from pymodaq/pymodaq_plugins_physik_instrumente. It reads `identity`, `axis_names`, `axis_units`, `positions` and 2 more; runs `move_absolute`, `move_relative`, `home_axis` and `stop_motion`. `move_absolute`: move one axis to an absolute position with the native move_absolute() and report the position the controller reads back. A hardware driver: the market serves its fake backend, so no instrument is needed.","measures":["identity","axis_names","axis_units","positions","referenced","servo_enabled"],"adjusts":[],"actions":[{"name":"move_absolute","description":"Move one axis to an absolute position with the native move_absolute() and report the position the controller reads back"},{"name":"move_relative","description":"Move one axis by a relative step with the native move_relative() and report the position the controller reads back"},{"name":"home_axis","description":"Home one axis with the native move_home() and report whether the controller then reports it as referenced"},{"name":"stop_motion","description":"Stop all motion with the native stop() (the controller's StopAll command). It takes no input because the native stop takes no profile or position"}],"tags":["motion","stage","actuator","piezo","pi","gcs2"],"backends":["fake","hardware"],"served_backend":"fake","evidence":"contract_checked","upstream":{"repo_url":"https://github.com/pymodaq/pymodaq_plugins_physik_instrumente","commit":"6fb8d954c432eac431e87c511a70e82c7b4df5f8","license":"MIT"},"stars":2,"install":{"openai4s":"openai4s lab add labs/pymodaq__pymodaq_plugins_physik_instrumente","mhs":"mhs serve labs/pymodaq__pymodaq_plugins_physik_instrumente --port 7400","mcp":"mhs serve labs/pymodaq__pymodaq_plugins_physik_instrumente --mcp"}},
{"id":"labs/pymodaq__pymodaq_plugins_smaract","name":"SmarAct MCS2 controller channel (pymodaq_plugins_smaract)","device_id":"mhs://localhost/smaract-mcs2","track":"labs","category":"Motion control","topic":null,"kind":"motion.axis","vendor":"SmarAct","model":"MCS2","mode":"hardware","risk":"R1","family":"python-object","role":"device-driver","intro":"SmarAct MCS2 controller channel (pymodaq_plugins_smaract), adapted from pymodaq/pymodaq_plugins_smaract. It reads `position`, `units`, `base_resolution`, `positioner_type` and 3 more; runs `absolute_move`, `relative_move`, `find_reference` and `stop_motion`. `absolute_move`: move the bound MCS2 channel to an absolute position given in controller base units. A hardware driver: the market serves its fake backend, so no instrument is needed.","measures":["position","units","base_resolution","positioner_type","device_name","number_of_channels","channel"],"adjusts":[],"actions":[{"name":"absolute_move","description":"Move the bound MCS2 channel to an absolute position given in controller base units"},{"name":"relative_move","description":"Move the bound MCS2 channel by a relative offset given in controller base units"},{"name":"find_reference","description":"Start the reference search of the bound MCS2 channel (the native find_reference); the search itself is asynchronous"},{"name":"stop_motion","description":"Stop motion on the bound MCS2 channel (the native stop); the controller applies its configured stop profile and the call takes no profile"}],"tags":["positioner","motion","piezo","mcs2","smaract"],"backends":["fake","hardware"],"served_backend":"fake","evidence":"contract_checked","upstream":{"repo_url":"https://github.com/pymodaq/pymodaq_plugins_smaract","commit":"eeb3fa8ced4ce9eab102951a4ad482ee4152fe6c","license":"MIT"},"stars":1,"install":{"openai4s":"openai4s lab add labs/pymodaq__pymodaq_plugins_smaract","mhs":"mhs serve labs/pymodaq__pymodaq_plugins_smaract --port 7400","mcp":"mhs serve labs/pymodaq__pymodaq_plugins_smaract --mcp"}},
{"id":"labs/pymodaq__pymodaq_plugins_thorlabs","name":"Thorlabs Kinesis brushless DC motor controller channel","device_id":"mhs://localhost/thorlabs-brushless-channel","track":"labs","category":"Motion control","topic":null,"kind":"motion.axis","vendor":"Thorlabs","model":"Kinesis Benchtop Brushless Motor controller","mode":"hardware","risk":"R1","family":"python-object","role":"device-driver","intro":"Thorlabs Kinesis brushless DC motor controller channel, adapted from pymodaq/pymodaq_plugins_thorlabs. It reads `position`, `target_position`, `units`, `homed` and 1 more; runs `move_abs`, `move_rel`, `home` and `stop_motion`. `move_abs`: move the bound Kinesis channel to an absolute target with the controller's native MoveTo. A hardware driver: the market serves its fake backend, so no instrument is needed.","measures":["position","target_position","units","homed","channel"],"adjusts":[],"actions":[{"name":"move_abs","description":"Move the bound Kinesis channel to an absolute target with the controller's native MoveTo"},{"name":"move_rel","description":"Move the bound Kinesis channel by a relative offset; the target is computed from the current position and issued through the native absolute move, as the PyMoDAQ plugin does"},{"name":"home","description":"Start the native home move of the bound Kinesis channel; the controller performs the move asynchronously"},{"name":"stop_motion","description":"Stop motion of the bound Kinesis channel with the native Stop(0); the call takes no deceleration profile"}],"tags":["thorlabs","kinesis","brushless","motor","stage","motion"],"backends":["fake","hardware"],"served_backend":"fake","evidence":"contract_checked","upstream":{"repo_url":"https://github.com/pymodaq/pymodaq_plugins_thorlabs","commit":"4aaf06acf6ea46b93fb900b76701f077dee44e28","license":"MIT"},"stars":3,"install":{"openai4s":"openai4s lab add labs/pymodaq__pymodaq_plugins_thorlabs","mhs":"mhs serve labs/pymodaq__pymodaq_plugins_thorlabs --port 7400","mcp":"mhs serve labs/pymodaq__pymodaq_plugins_thorlabs --mcp"}},
{"id":"labs/python-ivi__python-ivi","name":"LeCroy WaveRunner 104MXi-A oscilloscope","device_id":"mhs://localhost/lecroy-wr104mxia","track":"labs","category":"Electronics and measurement","topic":null,"kind":"instrument","vendor":"LeCroy","model":"WaveRunner 104MXi-A","mode":"hardware","risk":"R1","family":"scpi","role":"device-driver","intro":"LeCroy WaveRunner 104MXi-A oscilloscope, adapted from python-ivi/python-ivi. It reads `measurement_frequency`, `measurement_period` and `measurement_vpp`; sets `trigger_mode`, `acquisition_type`, `sample_mode`, `acquisition_averages` and 2 more. A hardware driver: the market serves its fake backend, so no instrument is needed.","measures":["measurement_frequency","measurement_period","measurement_vpp"],"adjusts":["trigger_mode","acquisition_type","sample_mode","acquisition_averages","timebase_mode","timebase_reference"],"actions":[],"tags":["oscilloscope","lecroy","waverunner","wr104mxia","scpi"],"backends":["fake"],"served_backend":"fake","evidence":"contract_checked","upstream":{"repo_url":"https://github.com/python-ivi/python-ivi","commit":"cfa45ceade0758debe4bc24ba4c8195222cad1e2","license":"MIT"},"stars":237,"install":{"openai4s":"openai4s lab add labs/python-ivi__python-ivi","mhs":"mhs serve labs/python-ivi__python-ivi --port 7400","mcp":"mhs serve labs/python-ivi__python-ivi --mcp"}},
{"id":"labs/python-microscope__microscope","name":"Cobolt laser (microscope.lights.cobolt:CoboltLaser)","device_id":"mhs://localhost/cobolt-laser","track":"labs","category":"Optics and microscopy","topic":null,"kind":"optics.laser","vendor":"Cobolt","model":"Cobolt diode-pumped laser (04 series)","mode":"hardware","risk":"R2","family":"python-object","role":"driver-pack","intro":"Cobolt laser (microscope.lights.cobolt:CoboltLaser), adapted from python-microscope/microscope. It reads `is_on`, `enabled`, `measured_power` and `status`; sets `power`; runs `enable_emission` and `disable_emission`. `enable_emission`: switch the laser emission on (the native enable). A hardware driver: the market serves its fake backend, so no instrument is needed.","measures":["is_on","enabled","measured_power","status"],"adjusts":["power"],"actions":[{"name":"enable_emission","description":"Switch the laser emission on (the native enable)"},{"name":"disable_emission","description":"Switch the laser emission off (the native disable, the safe state); it takes no input"}],"tags":["laser","light-source","serial"],"backends":["fake","hardware"],"served_backend":"fake","evidence":"contract_checked","upstream":{"repo_url":"https://github.com/python-microscope/microscope","commit":"47c13d0342dca476a279f2de2da5b84ce2162326","license":"GPL-3.0"},"stars":85,"install":{"openai4s":"openai4s lab add labs/python-microscope__microscope","mhs":"mhs serve labs/python-microscope__microscope --port 7400","mcp":"mhs serve labs/python-microscope__microscope --mcp"}},
{"id":"labs/qcodes__qcodes_contrib_drivers","name":"Thorlabs PM100D optical power meter (QCoDeS contrib driver)","device_id":"mhs://localhost/thorlabs-pm100d","track":"labs","category":"Optics and microscopy","topic":null,"kind":"sensor.optical","vendor":"Thorlabs","model":"PM100D","mode":"hardware","risk":"R1","family":"qcodes","role":"driver-pack","intro":"Thorlabs PM100D optical power meter (QCoDeS contrib driver), adapted from qcodes/qcodes_contrib_drivers. It reads `power`, `attenuation`, `averaging`, `zero_value` and 1 more; sets `power_range` and `auto_range`. A hardware driver: the market serves its fake backend, so no instrument is needed.","measures":["power","attenuation","averaging","zero_value","current_range"],"adjusts":["power_range","auto_range"],"actions":[],"tags":["qcodes","visa","scpi","optical-power-meter","photodiode"],"backends":["fake","hardware"],"served_backend":"fake","evidence":"contract_checked","upstream":{"repo_url":"https://github.com/qcodes/qcodes_contrib_drivers","commit":"187164d608ed3a281fccdf3f68693d29b2d46a62","license":"MIT"},"stars":69,"install":{"openai4s":"openai4s lab add labs/qcodes__qcodes_contrib_drivers","mhs":"mhs serve labs/qcodes__qcodes_contrib_drivers --port 7400","mcp":"mhs serve labs/qcodes__qcodes_contrib_drivers --mcp"}},
{"id":"labs/qpit__thorlabs_apt","name":"Thorlabs APT motor (thorlabs_apt.Motor)","device_id":"mhs://localhost/thorlabs-apt-motor","track":"labs","category":"Motion control","topic":null,"kind":"motion.axis","vendor":"Thorlabs","model":"APT motor (Thorlabs APT.dll)","mode":"hardware","risk":"R1","family":"python-object","role":"device-driver","intro":"Thorlabs APT motor (thorlabs_apt.Motor), adapted from qpit/thorlabs_apt. It reads `position`, `serial_number`, `in_motion`, `homing_completed` and 9 more; sets `velocity_maximum`, `acceleration`, `reverse_limit_switch`, `forward_limit_switch` and 2 more; runs `move_to`, `move_by`, `move_home`, `move_velocity` and 3 more. `move_to`: move to an absolute position in the native stage units (mm or degrees). A hardware driver: the market serves its fake backend, so no instrument is needed.","measures":["position","serial_number","in_motion","homing_completed","settled","motion_error","enabled","forward_limit_active","reverse_limit_active","active_channel","stage_minimum","stage_maximum","stage_units"],"adjusts":["velocity_maximum","acceleration","reverse_limit_switch","forward_limit_switch","move_home_direction","move_home_lim_switch"],"actions":[{"name":"move_to","description":"Move to an absolute position in the native stage units (mm or degrees)"},{"name":"move_by","description":"Move by a relative distance in the native stage units (mm or degrees)"},{"name":"move_home","description":"Home the axis with the native homing move"},{"name":"move_velocity","description":"Move at constant velocity in the given direction"},{"name":"enable","description":"Enable the active motor channel"},{"name":"disable","description":"Disable the active motor channel"},{"name":"stop_profiled","description":"Stop the motor with the native profiled stop"}],"tags":["thorlabs","apt","motor","stage","motion","windows"],"backends":["fake","hardware"],"served_backend":"fake","evidence":"contract_checked","upstream":{"repo_url":"https://github.com/qpit/thorlabs_apt","commit":"7b5c84607c22684cc896e3c337045b9358ee7c47","license":"GPL-2.0"},"stars":86,"install":{"openai4s":"openai4s lab add labs/qpit__thorlabs_apt","mhs":"mhs serve labs/qpit__thorlabs_apt --port 7400","mcp":"mhs serve labs/qpit__thorlabs_apt --mcp"}},
{"id":"labs/qte77__i3mega-pipettebot","name":"Anycubic i3 Mega pipettebot gantry","device_id":"mhs://localhost/i3mega-pipettebot","track":"labs","category":"Robot arms and grippers","topic":null,"kind":"robot.arm","vendor":"Anycubic","model":"i3 Mega (3-axis motion platform)","mode":"hardware","risk":"R2","family":"python-object","role":"device-driver","intro":"Anycubic i3 Mega pipettebot gantry, adapted from qte77/i3mega-pipettebot. It reads `x`, `y` and `z`; runs `move_to`, `home` and `emergency_stop`. `move_to`: move the tool centre point to a Cartesian position and orientation in a named frame. The endpoint solves inverse kinematics; an unreachable target is rejected before motion. A hardware driver: the market serves its fake backend, so no instrument is needed.","measures":["x","y","z"],"adjusts":[],"actions":[{"name":"move_to","description":"Move the tool centre point to a Cartesian position and orientation in a named frame. The endpoint solves inverse kinematics; an unreachable target is rejected before motion."},{"name":"home","description":"Drive axes to their declared home position or reference switch, establishing the coordinate reference needed by other motion capabilities."},{"name":"emergency_stop","description":"Send the firmware emergency stop M112; it takes no input and is the declared safe state"}],"tags":["gantry","cartesian","marlin","3d-printer","pipetting-robot"],"backends":["fake","hardware"],"served_backend":"fake","evidence":"contract_checked","upstream":{"repo_url":"https://github.com/qte77/i3mega-pipettebot","commit":"99dc2e0a8c15067f3d994e6484507fa2be2301d7","license":"Apache-2.0"},"stars":0,"install":{"openai4s":"openai4s lab add labs/qte77__i3mega-pipettebot","mhs":"mhs serve labs/qte77__i3mega-pipettebot --port 7400","mcp":"mhs serve labs/qte77__i3mega-pipettebot --mcp"}},
{"id":"labs/quantumllama__python-lab-drivers","name":"Siglent SDG 2042X function/arbitrary waveform generator","device_id":"mhs://localhost/sdg2042x","track":"labs","category":"Electronics and measurement","topic":null,"kind":"instrument","vendor":"Siglent Technologies","model":"SDG 2042X","mode":"hardware","risk":"R1","family":"scpi","role":"device-driver","intro":"Siglent SDG 2042X function/arbitrary waveform generator, adapted from quantumllama/python-lab-drivers. It sets `output`, `waveform`, `frequency`, `amplitude` and 2 more. A hardware driver: the market serves its fake backend, so no instrument is needed.","measures":[],"adjusts":["output","waveform","frequency","amplitude","offset","duty_cycle"],"actions":[],"tags":["signal generator","function generator","waveform generator","awg","siglent","sdg2042x","scpi"],"backends":["fake"],"served_backend":"fake","evidence":"contract_checked","upstream":{"repo_url":"https://github.com/quantumllama/python-lab-drivers","commit":"3fee8226c25d749e86f9108c0c9df2051a4aceb8","license":"NOASSERTION"},"stars":1,"install":{"openai4s":"openai4s lab add labs/quantumllama__python-lab-drivers","mhs":"mhs serve labs/quantumllama__python-lab-drivers --port 7400","mcp":"mhs serve labs/quantumllama__python-lab-drivers --mcp"}},
{"id":"labs/raphaelsura__pythonphotonicslab","name":"SRS DG645 digital delay generator","device_id":"mhs://localhost/dg645","track":"labs","category":"Electronics and measurement","topic":null,"kind":"instrument","vendor":"Stanford Research Systems","model":"DG645 digital delay generator","mode":"hardware","risk":"R1","family":"scpi","role":"device-driver","intro":"SRS DG645 digital delay generator, adapted from raphaelsura/pythonphotonicslab. It reads `timebase`, `trigger_source` and `last_error`; sets `amplitude`, `offset`, `polarity`, `delay` and 8 more. A hardware driver: the market serves its fake backend, so no instrument is needed.","measures":["timebase","trigger_source","last_error"],"adjusts":["amplitude","offset","polarity","delay","holdoff","trigger_level","trigger_rate","burst_count","burst_delay","burst_mode","burst_period","burst_config"],"actions":[],"tags":["delay generator","dg645","srs","scpi","instrument"],"backends":["fake"],"served_backend":"fake","evidence":"contract_checked","upstream":{"repo_url":"https://github.com/raphaelsura/pythonphotonicslab","commit":"bdef2648d4aec219566f710ade6c1b9ba224bc19","license":"NOASSERTION"},"stars":3,"install":{"openai4s":"openai4s lab add labs/raphaelsura__pythonphotonicslab","mhs":"mhs serve labs/raphaelsura__pythonphotonicslab --port 7400","mcp":"mhs serve labs/raphaelsura__pythonphotonicslab --mcp"}},
{"id":"labs/rk-exxec__pymupump","name":"Harvard Apparatus Microliter OEM syringe pump (pymupump.Microliter)","device_id":"mhs://localhost/pymupump-microliter","track":"labs","category":"Liquid handling and fluidics","topic":null,"kind":"fluid.pump","vendor":"Harvard Apparatus","model":"Microliter OEM syringe pump","mode":"hardware","risk":"R2","family":"serial","role":"device-driver","intro":"Harvard Apparatus Microliter OEM syringe pump (pymupump.Microliter), adapted from rk-exxec/pymupump. It sets `diameter`, `flowrate` and `targetvolume`; runs `pump` and `stop_pump`. `pump`: run a pump at a declared flow rate for a declared duration or volume in a declared direction, reporting the volume moved. A hardware driver: the market serves its fake backend, so no instrument is needed.","measures":[],"adjusts":["diameter","flowrate","targetvolume"],"actions":[{"name":"pump","description":"Run a pump at a declared flow rate for a declared duration or volume in a declared direction, reporting the volume moved."},{"name":"stop_pump","description":"Stop the pump with STP (the native stop, the safe state); it takes no input"}],"tags":["syringe pump","harvard apparatus","microliter oem","serial","infuse","withdraw","pymupump"],"backends":["fake","hardware"],"served_backend":"fake","evidence":"contract_checked","upstream":{"repo_url":"https://github.com/rk-exxec/pymupump","commit":"2de8fb492bbf11b44ad30f571ebb5e64239c6176","license":"GPL-3.0"},"stars":1,"install":{"openai4s":"openai4s lab add labs/rk-exxec__pymupump","mhs":"mhs serve labs/rk-exxec__pymupump --port 7400","mcp":"mhs serve labs/rk-exxec__pymupump --mcp"}},
{"id":"labs/roesel__elliptec","name":"Thorlabs Elliptec shutter (elliptec.Shutter)","device_id":"mhs://localhost/elliptec-shutter","track":"labs","category":"Optics and microscopy","topic":null,"kind":"optics.shutter","vendor":"Thorlabs","model":"Elliptec Dual-Position Slider (ELL6)","mode":"hardware","risk":"R2","family":"python-object","role":"device-driver","intro":"Thorlabs Elliptec shutter (elliptec.Shutter), adapted from roesel/elliptec. It reads `is_open`, `is_closed` and `slot`; runs `set_state`, `home_shutter`, `move_to_slot` and `close_shutter`. `set_state`: open or close a mechanical or electronic shutter in the optical path, reporting the resulting state and, for an open shutter, the open duration. A hardware driver: the market serves its fake backend, so no instrument is needed.","measures":["is_open","is_closed","slot"],"adjusts":[],"actions":[{"name":"set_state","description":"Open or close a mechanical or electronic shutter in the optical path, reporting the resulting state and, for an open shutter, the open duration."},{"name":"home_shutter","description":"Home the shutter slider (Shutter.home) so that its slot positions are referenced; the device drives to its home position"},{"name":"move_to_slot","description":"Move the slider to a slot with Shutter.set_slot: slot 1 or slot 2 of a non-inverted shutter"},{"name":"close_shutter","description":"Close the shutter (the native Shutter.close, the safe state of the optical path); it takes no input"}],"tags":["shutter","beam-block","optical-path","elliptec","thorlabs","slider"],"backends":["fake","hardware"],"served_backend":"fake","evidence":"contract_checked","upstream":{"repo_url":"https://github.com/roesel/elliptec","commit":"5f86ca595f80397bca280347830339c832a7b0bc","license":"GPL-3.0"},"stars":36,"install":{"openai4s":"openai4s lab add labs/roesel__elliptec","mhs":"mhs serve labs/roesel__elliptec --port 7400","mcp":"mhs serve labs/roesel__elliptec --mcp"}},
{"id":"labs/romerolab__syringe-pump-controller","name":"New Era NE-500/501 syringe pump","device_id":"mhs://localhost/new-era-syringe-pump","track":"labs","category":"Liquid handling and fluidics","topic":null,"kind":"fluid.pump","vendor":"New Era Pump Systems","model":"NE-500/501 syringe pump","mode":"hardware","risk":"R2","family":"serial","role":"device-driver","intro":"New Era NE-500/501 syringe pump, adapted from romerolab/syringe-pump-controller. It reads `direction`; sets `flow_rate` and `diameter`; runs `dispense`, `prime` and `stop_all`. `dispense`: run a pump at a declared flow rate for a declared duration or volume in a declared direction, reporting the volume moved. A hardware driver: the market serves its fake backend, so no instrument is needed.","measures":["direction"],"adjusts":["flow_rate","diameter"],"actions":[{"name":"dispense","description":"Run a pump at a declared flow rate for a declared duration or volume in a declared direction, reporting the volume moved."},{"name":"prime","description":"Prime the pump: INF direction, 10.0 MH, run (the upstream prime sequence)"},{"name":"stop_all","description":"Stop all pumps with the broadcast *STP command; takes no input"}],"tags":["syringe pump","new era","ne-500","ne-501","serial","fluid"],"backends":["fake","hardware"],"served_backend":"fake","evidence":"contract_checked","upstream":{"repo_url":"https://github.com/romerolab/syringe-pump-controller","commit":"7c2af002a04ae3abbc7f9fba435b286e69c820fc","license":"LGPL-3.0"},"stars":5,"install":{"openai4s":"openai4s lab add labs/romerolab__syringe-pump-controller","mhs":"mhs serve labs/romerolab__syringe-pump-controller --port 7400","mcp":"mhs serve labs/romerolab__syringe-pump-controller --mcp"}},
{"id":"labs/rwb27__openflexure_microscope_software","name":"OpenFlexure Microscope (openflexure_microscope.microscope:Microscope)","device_id":"mhs://localhost/openflexure-microscope","track":"labs","category":"Optics and microscopy","topic":null,"kind":"instrument.microscope","vendor":"OpenFlexure","model":"OpenFlexure Microscope (Raspberry Pi camera + OpenFlexure stage)","mode":"hardware","risk":"R1","family":"python-object","role":"device-driver","intro":"OpenFlexure Microscope (openflexure_microscope.microscope:Microscope), adapted from rwb27/openflexure_microscope_software. It reads `resolution`, `shutter_speed` and `awb_mode`; sets `zoom`; runs `autofocus_scan`. `autofocus_scan`: run the microscope's autofocus over stage z positions and report the sharpness at each. A hardware driver: the market serves its fake backend, so no instrument is needed.","measures":["resolution","shutter_speed","awb_mode"],"adjusts":["zoom"],"actions":[{"name":"autofocus_scan","description":"Run the microscope's autofocus over stage z positions and report the sharpness at each"}],"tags":["microscope","openflexure","camera","zoom","autofocus"],"backends":["fake","hardware"],"served_backend":"fake","evidence":"contract_checked","upstream":{"repo_url":"https://github.com/rwb27/openflexure_microscope_software","commit":"991e1b72b94d796a05caf4c896c0b001ea5a2c97","license":"GPL-3.0"},"stars":15,"install":{"openai4s":"openai4s lab add labs/rwb27__openflexure_microscope_software","mhs":"mhs serve labs/rwb27__openflexure_microscope_software --port 7400","mcp":"mhs serve labs/rwb27__openflexure_microscope_software --mcp"}},
{"id":"labs/rwb27__openflexure_nano_motor_controller","name":"OpenFlexure Motor Board stage","device_id":"mhs://localhost/openflexure-stage","track":"labs","category":"Optics and microscopy","topic":null,"kind":"optics.stage","vendor":"OpenFlexure","model":"Motor Board (Sangaboard v0.2)","mode":"hardware","risk":"R1","family":"python-object","role":"device-driver","intro":"OpenFlexure Motor Board stage, adapted from rwb27/openflexure_nano_motor_controller. It reads `firmware`, `position`, `step_time`, `ramp_time` and 2 more; runs `move_relative`, `move_absolute`, `focus_relative`, `home` and 1 more. `move_relative`: move the stage by a relative displacement in integer motor steps. A hardware driver: the market serves its fake backend, so no instrument is needed.","measures":["firmware","position","step_time","ramp_time","endstop_status","endstop_maxima"],"adjusts":[],"actions":[{"name":"move_relative","description":"Move the stage by a relative displacement in integer motor steps"},{"name":"move_absolute","description":"Move the stage to an absolute position in integer motor steps"},{"name":"focus_relative","description":"Move the focus axis (Z) by a relative displacement in integer motor steps"},{"name":"home","description":"Home the selected axes to their minimum, maximum or both endstops"},{"name":"release_motors","description":"De-energise the stepper motor coils with the firmware release command"}],"tags":["microscope","stage","stepper","serial","openflexure"],"backends":["fake","hardware"],"served_backend":"fake","evidence":"contract_checked","upstream":{"repo_url":"https://github.com/rwb27/openflexure_nano_motor_controller","commit":"18a19977dde0cd78f14154c41073a857e2332e54","license":"GPL-3.0"},"stars":15,"install":{"openai4s":"openai4s lab add labs/rwb27__openflexure_nano_motor_controller","mhs":"mhs serve labs/rwb27__openflexure_nano_motor_controller --port 7400","mcp":"mhs serve labs/rwb27__openflexure_nano_motor_controller --mcp"}},
{"id":"labs/samdejong86__agilent33600","name":"Agilent 33600A arbitrary waveform generator","device_id":"mhs://localhost/agilent33600","track":"labs","category":"Electronics and measurement","topic":null,"kind":"instrument","vendor":"Agilent (Keysight)","model":"33600A arbitrary waveform generator","mode":"hardware","risk":"R1","family":"scpi","role":"device-driver","intro":"Agilent 33600A arbitrary waveform generator, adapted from samdejong86/agilent33600. It reads `identity`; sets `frequency`, `amplitude`, `offset`, `function` and 2 more. A hardware driver: the market serves its fake backend, so no instrument is needed.","measures":["identity"],"adjusts":["frequency","amplitude","offset","function","waveform","sample_rate"],"actions":[],"tags":["awg","waveform generator","agilent","keysight","33600a","scpi"],"backends":["fake"],"served_backend":"fake","evidence":"contract_checked","upstream":{"repo_url":"https://github.com/samdejong86/agilent33600","commit":"262275ddb4e1486c9643587725908456d765b12b","license":"NOASSERTION"},"stars":10,"install":{"openai4s":"openai4s lab add labs/samdejong86__agilent33600","mhs":"mhs serve labs/samdejong86__agilent33600 --port 7400","mcp":"mhs serve labs/samdejong86__agilent33600 --mcp"}},
{"id":"labs/samdejong86__tektronix-serial-daq-python","name":"Tektronix TDS 3052 oscilloscope","device_id":"mhs://localhost/tds3052","track":"labs","category":"Electronics and measurement","topic":null,"kind":"instrument","vendor":"Tektronix","model":"TDS 3052","mode":"hardware","risk":"R1","family":"scpi","role":"device-driver","intro":"Tektronix TDS 3052 oscilloscope, adapted from samdejong86/tektronix-serial-daq-python. It sets `ch1_scale`, `ch2_scale`, `coupling_ch1`, `coupling_ch2` and 8 more. A hardware driver: the market serves its fake backend, so no instrument is needed.","measures":[],"adjusts":["ch1_scale","ch2_scale","coupling_ch1","coupling_ch2","horizontal_scale","impedance_ch1","impedance_ch2","record_length","trigger_level","trigger_position","trigger_source","trigger_slope"],"actions":[],"tags":["oscilloscope","tds 3052","tektronix","serial","scpi"],"backends":["fake"],"served_backend":"fake","evidence":"contract_checked","upstream":{"repo_url":"https://github.com/samdejong86/tektronix-serial-daq-python","commit":"e7728bc44030b530d76ea3dbd66904237c12e180","license":"NOASSERTION"},"stars":3,"install":{"openai4s":"openai4s lab add labs/samdejong86__tektronix-serial-daq-python","mhs":"mhs serve labs/samdejong86__tektronix-serial-daq-python --port 7400","mcp":"mhs serve labs/samdejong86__tektronix-serial-daq-python --mcp"}},
{"id":"labs/sanket7941__pyinstrument","name":"pyinstrument PSupply power supply","device_id":"mhs://localhost/psupply","track":"labs","category":"Electronics and measurement","topic":null,"kind":"instrument.smu","vendor":null,"model":"PSupply (generic SCPI programmable power supply)","mode":"hardware","risk":"R1","family":"scpi","role":"device-driver","intro":"pyinstrument PSupply power supply, adapted from sanket7941/pyinstrument. It reads `voltage`, `current`, `measure_voltage` and `measure_current`; sets `voltage_setpoint`, `current_setpoint` and `output_enabled`. A hardware driver: the market serves its fake backend, so no instrument is needed.","measures":["voltage","current","measure_voltage","measure_current"],"adjusts":["voltage_setpoint","current_setpoint","output_enabled"],"actions":[],"tags":["power supply","psu","scpi","visa","voltage","current"],"backends":["fake","hardware"],"served_backend":"fake","evidence":"contract_checked","upstream":{"repo_url":"https://github.com/sanket7941/pyinstrument","commit":"74278e53b075418f155d0567410e03a8503f347f","license":"Unlicense"},"stars":7,"install":{"openai4s":"openai4s lab add labs/sanket7941__pyinstrument","mhs":"mhs serve labs/sanket7941__pyinstrument --port 7400","mcp":"mhs serve labs/sanket7941__pyinstrument --mcp"}},
{"id":"labs/scaxlibur__wavebench","name":"RIGOL DG4202 signal source (WaveBench dg4202 driver)","device_id":"mhs://localhost/dg4202","track":"labs","category":"Electronics and measurement","topic":null,"kind":"instrument","vendor":"RIGOL Technologies","model":"DG4202 (DG4000 series function/arbitrary waveform generator)","mode":"hardware","risk":"R1","family":"python-object","role":"device-driver","intro":"RIGOL DG4202 signal source (WaveBench dg4202 driver), adapted from scaxlibur/wavebench. It reads `identity` and `amplitude_unit`; sets `output`, `function`, `frequency`, `amplitude` and 1 more. A hardware driver: the market serves its fake backend, so no instrument is needed.","measures":["identity","amplitude_unit"],"adjusts":["output","function","frequency","amplitude","duty_cycle"],"actions":[],"tags":["signal generator","function generator","waveform generator","dg4202","dg4000","scpi","wavebench"],"backends":["fake","hardware"],"served_backend":"fake","evidence":"contract_checked","upstream":{"repo_url":"https://github.com/scaxlibur/wavebench","commit":"44506c4975d8615ace0d2dbababe880b89567709","license":"MIT"},"stars":71,"install":{"openai4s":"openai4s lab add labs/scaxlibur__wavebench","mhs":"mhs serve labs/scaxlibur__wavebench --port 7400","mcp":"mhs serve labs/scaxlibur__wavebench --mcp"}},
{"id":"labs/schimmilab__pico-mcp","name":"PicoScope 5000A/B series oscilloscope (pico_mcp.scope.Scope)","device_id":"mhs://localhost/picoscope-5000a","track":"labs","category":"Electronics and measurement","topic":null,"kind":"instrument","vendor":"Pico Technology","model":"PicoScope 5000A/B series USB oscilloscope","mode":"hardware","risk":"R1","family":"python-object","role":"device-driver","intro":"PicoScope 5000A/B series oscilloscope (pico_mcp.scope.Scope), adapted from schimmilab/pico-mcp. It reads `connected`, `variant`, `serial`, `resolution_bits` and 1 more; sets `channel_a_enabled`, `channel_a_coupling`, `channel_a_range_v`, `channel_b_enabled` and 8 more; runs `set_signal_generator`, `stop_signal_generator` and `capture_block`. `set_signal_generator`: configure the built-in signal generator (AWG) through ps5000aSetSigGenBuiltInV2. A hardware driver: the market serves its fake backend, so no instrument is needed.","measures":["connected","variant","serial","resolution_bits","max_adc"],"adjusts":["channel_a_enabled","channel_a_coupling","channel_a_range_v","channel_b_enabled","channel_b_coupling","channel_b_range_v","channel_c_enabled","channel_c_coupling","channel_c_range_v","channel_d_enabled","channel_d_coupling","channel_d_range_v"],"actions":[{"name":"set_signal_generator","description":"Configure the built-in signal generator (AWG) through ps5000aSetSigGenBuiltInV2"},{"name":"stop_signal_generator","description":"Turn the built-in signal generator off (DC at 0 V); the safe state, no input"},{"name":"capture_block","description":"Capture one block on all enabled channels and return the scalar measurements"}],"tags":["oscilloscope","picoscope","ps5000a","usb","signal-generator","block-capture"],"backends":["fake","hardware"],"served_backend":"fake","evidence":"contract_checked","upstream":{"repo_url":"https://github.com/schimmilab/pico-mcp","commit":"08fd81ee1c1e79b4d82e0997ca840b46adeef811","license":"MIT"},"stars":1,"install":{"openai4s":"openai4s lab add labs/schimmilab__pico-mcp","mhs":"mhs serve labs/schimmilab__pico-mcp --port 7400","mcp":"mhs serve labs/schimmilab__pico-mcp --mcp"}},
{"id":"labs/sciencecorp__galago-tools","name":"Opentrons OT-2 through galago-tools' Ot2Driver","device_id":"mhs://localhost/galago-ot2","track":"labs","category":"Liquid handling and fluidics","topic":null,"kind":"lab.liquid_handler","vendor":"Opentrons","model":"OT-2 (galago-tools opentrons2 tool)","mode":"hardware","risk":"R2","family":"python-object","role":"device-driver","intro":"Opentrons OT-2 through galago-tools' Ot2Driver, adapted from sciencecorp/galago-tools. It reads `run_id` and `run_status`; runs `run_protocol` and `stop_run`. `run_protocol`: upload an operator-approved protocol file, create a run of it and play it. A hardware driver: the market serves its fake backend, so no instrument is needed.","measures":["run_id","run_status"],"adjusts":[],"actions":[{"name":"run_protocol","description":"Upload an operator-approved protocol file, create a run of it and play it"},{"name":"stop_run","description":"Stop this endpoint's run and read its status until it is succeeded, stopped or failed"}],"tags":["opentrons","ot-2","liquid handler","pipetting","http","galago"],"backends":["fake","hardware"],"served_backend":"fake","evidence":"contract_checked","upstream":{"repo_url":"https://github.com/sciencecorp/galago-tools","commit":"7ddf68c7bb7eda0243f6466cfbd6b97fdcfcf782","license":"Apache-2.0"},"stars":19,"install":{"openai4s":"openai4s lab add labs/sciencecorp__galago-tools","mhs":"mhs serve labs/sciencecorp__galago-tools --port 7400","mcp":"mhs serve labs/sciencecorp__galago-tools --mcp"}},
{"id":"labs/scopefoundry__hw_acton_spec","name":"Acton spectrometer (acton_spec_interface:ActonSpectrometer)","device_id":"mhs://localhost/acton-spectrometer","track":"labs","category":"Spectroscopy","topic":null,"kind":"instrument.spectrometer","vendor":"Princeton Instruments / Acton","model":"Acton 2300i / 300 series","mode":"hardware","risk":"R1","family":"python-object","role":"device-driver","intro":"Acton spectrometer (acton_spec_interface:ActonSpectrometer), adapted from scopefoundry/hw_acton_spec. It reads `done_status`, `grating_name` and `turret`; sets `center_wl`, `grating_id`, `exit_mirror`, `entrance_slit` and 1 more. A hardware driver: the market serves its fake backend, so no instrument is needed.","measures":["done_status","grating_name","turret"],"adjusts":["center_wl","grating_id","exit_mirror","entrance_slit","exit_slit"],"actions":[],"tags":["spectrometer","monochromator","acton","princeton-instruments","serial","grating","slit"],"backends":["fake","hardware"],"served_backend":"fake","evidence":"contract_checked","upstream":{"repo_url":"https://github.com/scopefoundry/hw_acton_spec","commit":"a4e112406b7fd275a8d23048631a21f0a82758e7","license":"BSD-3-Clause"},"stars":2,"install":{"openai4s":"openai4s lab add labs/scopefoundry__hw_acton_spec","mhs":"mhs serve labs/scopefoundry__hw_acton_spec --port 7400","mcp":"mhs serve labs/scopefoundry__hw_acton_spec --mcp"}},
{"id":"labs/scopefoundry__hw_picam","name":"Princeton Instruments PICam camera (ScopeFoundryHW.picam)","device_id":"mhs://localhost/hw-picam","track":"labs","category":"Sensors and cameras","topic":null,"kind":"sensor.camera","vendor":"Princeton Instruments","model":"PICam camera (tested upstream on a PI PIXIS)","mode":"hardware","risk":"R1","family":"python-object","role":"device-driver","intro":"Princeton Instruments PICam camera (ScopeFoundryHW.picam), adapted from scopefoundry/hw_picam. It reads `adc_speed`, `sensor_temperature_status` and `readout_stride`; sets `exposure_time`, `roi_x`, `roi_width`, `roi_x_binning` and 3 more; runs `capture`. `capture`: capture a single image from a named camera with a declared resolution and exposure and return an image artifact reference. A hardware driver: the market serves its fake backend, so no instrument is needed.","measures":["adc_speed","sensor_temperature_status","readout_stride"],"adjusts":["exposure_time","roi_x","roi_width","roi_x_binning","roi_y","roi_height","roi_y_binning"],"actions":[{"name":"capture","description":"Capture a single image from a named camera with a declared resolution and exposure and return an image artifact reference."}],"tags":["camera","ccd","picam","princeton-instruments","imaging","scopefoundry"],"backends":["fake","hardware"],"served_backend":"fake","evidence":"contract_checked","upstream":{"repo_url":"https://github.com/scopefoundry/hw_picam","commit":"fab5d61440b38e04e176e66ff880d16061f23997","license":"BSD-3-Clause"},"stars":1,"install":{"openai4s":"openai4s lab add labs/scopefoundry__hw_picam","mhs":"mhs serve labs/scopefoundry__hw_picam --port 7400","mcp":"mhs serve labs/scopefoundry__hw_picam --mcp"}},
{"id":"labs/sergey12malyshev__owon-power-supply-driver","name":"OWON power supply (owon_ps.OwonPowerSupply)","device_id":"mhs://localhost/owon-power-supply","track":"labs","category":"Electronics and measurement","topic":null,"kind":"instrument","vendor":"OWON","model":"SP/SPE series single-channel DC power supply","mode":"hardware","risk":"R1","family":"python-object","role":"device-driver","intro":"OWON power supply (owon_ps.OwonPowerSupply), adapted from sergey12malyshev/owon-power-supply-driver. It reads `voltage`, `current`, `power`, `identity` and 1 more; sets `voltage_setpoint`, `current_setpoint`, `voltage_limit`, `current_limit` and 1 more; runs `reset_config` and `output_off`. `reset_config`: reset the instrument to its factory configuration (*RST); it takes no input. A hardware driver: the market serves its fake backend, so no instrument is needed.","measures":["voltage","current","power","identity","all_parameters"],"adjusts":["voltage_setpoint","current_setpoint","voltage_limit","current_limit","output_enabled"],"actions":[{"name":"reset_config","description":"Reset the instrument to its factory configuration (*RST); it takes no input"},{"name":"output_off","description":"Disable the output (OUTPut OFF); it takes no input and is the declared safe state"}],"tags":["power-supply","dc-source","scpi","serial"],"backends":["fake","hardware"],"served_backend":"fake","evidence":"contract_checked","upstream":{"repo_url":"https://github.com/sergey12malyshev/owon-power-supply-driver","commit":"37ec9d93df28640d7522162922472cc531be7758","license":"Apache-2.0"},"stars":0,"install":{"openai4s":"openai4s lab add labs/sergey12malyshev__owon-power-supply-driver","mhs":"mhs serve labs/sergey12malyshev__owon-power-supply-driver --port 7400","mcp":"mhs serve labs/sergey12malyshev__owon-power-supply-driver --mcp"}},
{"id":"labs/sfinucane__sindri","name":"Tektronix BERTScope bit error rate analyzer (sindri.tektronix.bertscope:BERTScope_TCP)","device_id":"mhs://localhost/bertscope","track":"labs","category":"Electronics and measurement","topic":null,"kind":"instrument","vendor":"Tektronix","model":"BERTScope bit error rate analyzer","mode":"hardware","risk":"R1","family":"python-object","role":"device-driver","intro":"Tektronix BERTScope bit error rate analyzer (sindri.tektronix.bertscope:BERTScope_TCP), adapted from sfinucane/sindri. It reads `identity`, `internal_temperature`, `running`, `detector_bit_count` and 6 more; sets `run_duration`; runs `start_run`, `halt_run`, `factory_reset` and `reset_detector_results`. `start_run`: start all systems within the BERTScope mainframe (RST 1). A hardware driver: the market serves its fake backend, so no instrument is needed.","measures":["identity","internal_temperature","running","detector_bit_count","detector_error_count","detector_bit_error_rate","detector_elapsed_time","detector_resyncs","detector_error_free_bits_count","detector_error_free_time"],"adjusts":["run_duration"],"actions":[{"name":"start_run","description":"Start all systems within the BERTScope mainframe (RST 1)"},{"name":"halt_run","description":"Stop all systems within the BERTScope mainframe (RST 0, the safe state); it takes no input"},{"name":"factory_reset","description":"Set the instrument functions to the factory default power up state (*RST)"},{"name":"reset_detector_results","description":"Reset the error detector results (DET:RRES)"}],"tags":["bertscope","tektronix","bit-error-rate","ber","instrument","scpi","tcp"],"backends":["fake","hardware"],"served_backend":"fake","evidence":"contract_checked","upstream":{"repo_url":"https://github.com/sfinucane/sindri","commit":"d560635a28a57230f1fa32cea3b9d4df0c8af8e7","license":"NOASSERTION"},"stars":5,"install":{"openai4s":"openai4s lab add labs/sfinucane__sindri","mhs":"mhs serve labs/sfinucane__sindri --port 7400","mcp":"mhs serve labs/sfinucane__sindri --mcp"}},
{"id":"labs/silab-bonn__basil","name":"ISEG SHQ/NQH series high-voltage supply","device_id":"mhs://localhost/iseg-hv","track":"labs","category":"Electronics and measurement","topic":null,"kind":"instrument.smu","vendor":"iseg","model":"SHQ/NQH series high-voltage supply","mode":"hardware","risk":"R3","family":"python-object","role":"device-driver","intro":"ISEG SHQ/NQH series high-voltage supply, adapted from silab-bonn/basil. It reads `voltage` and `current`; sets `voltage_target`, `ramp_speed`, `answer_delay`, `autostart` and 1 more; runs `output_off`. `output_off`: set the channel's target voltage to 0 V (the upstream off()), the safe state of the supply. A hardware driver: the market serves its fake backend, so no instrument is needed.","measures":["voltage","current"],"adjusts":["voltage_target","ramp_speed","answer_delay","autostart","channel"],"actions":[{"name":"output_off","description":"Set the channel's target voltage to 0 V (the upstream off()), the safe state of the supply"}],"tags":["high voltage","power supply","iseg","rs-232","hv"],"backends":["fake","hardware"],"served_backend":"fake","evidence":"contract_checked","upstream":{"repo_url":"https://github.com/silab-bonn/basil","commit":"0630d8fd717fed83cb036b0c1b6015bdd7b25547","license":"BSD-3-Clause"},"stars":48,"install":{"openai4s":"openai4s lab add labs/silab-bonn__basil","mhs":"mhs serve labs/silab-bonn__basil --port 7400","mcp":"mhs serve labs/silab-bonn__basil --mcp"}},
{"id":"labs/simonmeersschaut__stagecontroller","name":"StageController (Phytron stepper over serial)","device_id":"mhs://localhost/stagecontroller","track":"labs","category":"Motion control","topic":null,"kind":"motion.axis","vendor":"Phytron","model":"stepper motor controller","mode":"hardware","risk":"R1","family":"serial","role":"device-driver","intro":"StageController (Phytron stepper over serial), adapted from simonmeersschaut/stagecontroller. It runs `start_rotation` and `stop_rotation`. `start_rotation`: start the stepper rotation by sending the upstream XL+ command. A hardware driver: the market serves its fake backend, so no instrument is needed.","measures":[],"adjusts":[],"actions":[{"name":"start_rotation","description":"Start the stepper rotation by sending the upstream XL+ command"},{"name":"stop_rotation","description":"Stop the stepper by sending the upstream XS stop command"}],"tags":["stage","stepper","motion","phytron","serial"],"backends":["fake","hardware"],"served_backend":"fake","evidence":"contract_checked","upstream":{"repo_url":"https://github.com/simonmeersschaut/stagecontroller","commit":"7edb1ac137a0cfedba78966815421fbfd5e73b38","license":"NOASSERTION"},"stars":0,"install":{"openai4s":"openai4s lab add labs/simonmeersschaut__stagecontroller","mhs":"mhs serve labs/simonmeersschaut__stagecontroller --port 7400","mcp":"mhs serve labs/simonmeersschaut__stagecontroller --mcp"}},
{"id":"labs/slietar__nikon","name":"Nikon Ti2-E microscope (nikon.microscope:MicroscopeDevice)","device_id":"mhs://localhost/nikon-ti2-e","track":"labs","category":"Optics and microscopy","topic":null,"kind":"instrument.microscope","vendor":"Nikon","model":"Ti2-E microscope","mode":"hardware","risk":"R1","family":"python-object","role":"device-driver","intro":"Nikon Ti2-E microscope (nikon.microscope:MicroscopeDevice), adapted from slietar/nikon. It reads `firmware_version` and `zoom`; sets `x`, `y`, `z`, `condenser` and 6 more. A hardware driver: the market serves its fake backend, so no instrument is needed.","measures":["firmware_version","zoom"],"adjusts":["x","y","z","condenser","dia","filter","light","objective","optical_path","shutter"],"actions":[],"tags":["microscope","nikon","ti2-e","stage","optics","asyncio"],"backends":["fake","hardware"],"served_backend":"fake","evidence":"contract_checked","upstream":{"repo_url":"https://github.com/slietar/nikon","commit":"d53b4e261ae487f237a65048cf1931a40e39794b","license":"EUPL-1.2"},"stars":6,"install":{"openai4s":"openai4s lab add labs/slietar__nikon","mhs":"mhs serve labs/slietar__nikon --port 7400","mcp":"mhs serve labs/slietar__nikon --mcp"}},
{"id":"labs/smithsonian__rxlab-instruments","name":"Agilent E8257D PSG signal generator","device_id":"mhs://localhost/e8257d","track":"labs","category":"Electronics and measurement","topic":null,"kind":"instrument","vendor":"Agilent","model":"E8257D PSG analog signal generator","mode":"hardware","risk":"R1","family":"scpi","role":"device-driver","intro":"Agilent E8257D PSG signal generator, adapted from smithsonian/rxlab-instruments. It reads `identity`; sets `frequency`, `power` and `output_enabled`; runs `scpi_rst`. `scpi_rst`: call GenericInstrument.reset, which writes '*RST' (labinstruments/generic.py:65-68). The docstring says only 'Reset instrument' and does not state the effect on the RF output, the frequency or the power. An ordinary command: the safety reset does not call it, and it is not a re-enable or a safe-state action. A later read returns the instrument's reply and does not state what '*RST' set. The operator confirms the instrument, including whether the RF output is enabled. A hardware driver: the market serves its fake backend, so no instrument is needed.","measures":["identity"],"adjusts":["frequency","power","output_enabled"],"actions":[{"name":"scpi_rst","description":"Call GenericInstrument.reset, which writes '*RST' (labinstruments/generic.py:65-68). The docstring says only 'Reset instrument' and does not state the effect on the RF output, the frequency or the power. An ordinary command: the safety reset does not call it, and it is not a re-enable or a safe-state action. A later read returns the instrument's reply and does not state what '*RST' set. The operator confirms the instrument, including whether the RF output is enabled."}],"tags":["signal generator","rf","agilent","e8257d","e8267d","scpi"],"backends":["fake","hardware"],"served_backend":"fake","evidence":"contract_checked","upstream":{"repo_url":"https://github.com/smithsonian/rxlab-instruments","commit":"2fbf8e6913e9eb2143088ed3a0b49d01a22fb93c","license":"MIT"},"stars":2,"install":{"openai4s":"openai4s lab add labs/smithsonian__rxlab-instruments","mhs":"mhs serve labs/smithsonian__rxlab-instruments --port 7400","mcp":"mhs serve labs/smithsonian__rxlab-instruments --mcp"}},
{"id":"labs/snhobbs__hp894xx","name":"HP 89400 series vector signal analyzer (HP894xx.HP89400Device)","device_id":"mhs://localhost/hp89400","track":"labs","category":"Electronics and measurement","topic":null,"kind":"instrument","vendor":"Hewlett-Packard","model":"HP 89400 series vector signal analyzer","mode":"hardware","risk":"R0","family":"python-object","role":"device-driver","intro":"HP 89400 series vector signal analyzer (HP894xx.HP89400Device), adapted from snhobbs/hp894xx. It reads `center_frequency`, `span`, `x_units`, `y_units` and 5 more; runs `acquire_spectrum`, `abort_measurement` and `enable_autorange`. `acquire_spectrum`: read one trace: start a data read, return the Y values and the X/Y metadata the analyzer reports. A hardware driver: the market serves its fake backend, so no instrument is needed.","measures":["center_frequency","span","x_units","y_units","data_points","average_count","operating_condition","error_code","errors"],"adjusts":[],"actions":[{"name":"acquire_spectrum","description":"Read one trace: start a data read, return the Y values and the X/Y metadata the analyzer reports"},{"name":"abort_measurement","description":"Abort the measurement with the native abor write"},{"name":"enable_autorange","description":"Enable or disable the input autorange with SENS:VOLT:RANGE:AUTO"}],"tags":["vector signal analyzer","spectrum","gpib","prologix","measurement"],"backends":["fake","hardware"],"served_backend":"fake","evidence":"contract_checked","upstream":{"repo_url":"https://github.com/snhobbs/hp894xx","commit":"6745a53c20fb02b1a178fde70b1975b6b86f3518","license":"MIT"},"stars":1,"install":{"openai4s":"openai4s lab add labs/snhobbs__hp894xx","mhs":"mhs serve labs/snhobbs__hp894xx --port 7400","mcp":"mhs serve labs/snhobbs__hp894xx --mcp"}},
{"id":"labs/solgaardlab__apt_piezo","name":"Thorlabs APT piezo channel (interface.module.Module)","device_id":"mhs://localhost/apt-piezo","track":"labs","category":"Motion control","topic":null,"kind":"motion.axis","vendor":"Thorlabs","model":"BPC-303 piezo controller (one bay)","mode":"hardware","risk":"R1","family":"python-object","role":"device-driver","intro":"Thorlabs APT piezo channel (interface.module.Module), adapted from solgaardlab/apt_piezo. It reads `max_travel`; sets `position` and `closed_loop`; runs `move_piezo` and `zero_piezo`. `move_piezo`: command the piezo module to a travel in micrometres (native move()). A hardware driver: the market serves its fake backend, so no instrument is needed.","measures":["max_travel"],"adjusts":["position","closed_loop"],"actions":[{"name":"move_piezo","description":"Command the piezo module to a travel in micrometres (native move())"},{"name":"zero_piezo","description":"Command the piezo to its zero position (native zero()); it takes no input and is the safe state"}],"tags":["piezo","thorlabs","apt","motion","actuator"],"backends":["fake","hardware"],"served_backend":"fake","evidence":"contract_checked","upstream":{"repo_url":"https://github.com/solgaardlab/apt_piezo","commit":"677eb8f632b6b1d7c84c1fd83a5821239331e4a5","license":"NOASSERTION"},"stars":3,"install":{"openai4s":"openai4s lab add labs/solgaardlab__apt_piezo","mhs":"mhs serve labs/solgaardlab__apt_piezo --port 7400","mcp":"mhs serve labs/solgaardlab__apt_piezo --mcp"}},
{"id":"labs/sparks-baird__self-driving-lab-demo","name":"CLSLab:Light NeoPixel + AS7341 (nonwireless serial)","device_id":"mhs://localhost/clslab-light","track":"labs","category":"Spectroscopy","topic":null,"kind":"instrument.spectrometer","vendor":"sparks-baird","model":"CLSLab:Light nonwireless Pico demo","mode":"hardware","risk":"R1","family":"python-object","role":"device-driver","intro":"CLSLab:Light NeoPixel + AS7341 (nonwireless serial), adapted from sparks-baird/self-driving-lab-demo. It sets `color`; runs `measure_spectrum`. `measure_spectrum`: measure the eight fixed AS7341 bands through the current NeoPixel color, with the ATIME, ASTEP and gain settings the command carries; the reply is one list of eight intensities. A hardware driver: the market serves its fake backend, so no instrument is needed.","measures":[],"adjusts":["color"],"actions":[{"name":"measure_spectrum","description":"Measure the eight fixed AS7341 bands through the current NeoPixel color, with the ATIME, ASTEP and gain settings the command carries; the reply is one list of eight intensities"}],"tags":["spectrometer","as7341","neopixel","led","serial","self-driving-lab","color-matching"],"backends":["fake","hardware"],"served_backend":"fake","evidence":"contract_checked","upstream":{"repo_url":"https://github.com/sparks-baird/self-driving-lab-demo","commit":"051e91e34b63e5ce357df3db7e7425186c5c635c","license":"MIT"},"stars":89,"install":{"openai4s":"openai4s lab add labs/sparks-baird__self-driving-lab-demo","mhs":"mhs serve labs/sparks-baird__self-driving-lab-demo --port 7400","mcp":"mhs serve labs/sparks-baird__self-driving-lab-demo --mcp"}},
{"id":"labs/sqlim__sr860-python","name":"Stanford Research Systems SR860 DSP lock-in amplifier","device_id":"mhs://localhost/sr860","track":"labs","category":"Electronics and measurement","topic":null,"kind":"instrument","vendor":"Stanford Research Systems","model":"SR860/SR865/SR865A DSP lock-in amplifier","mode":"hardware","risk":"R1","family":"scpi","role":"device-driver","intro":"Stanford Research Systems SR860 DSP lock-in amplifier, adapted from sqlim/sr860-python. It reads `time_constant_index`, `x`, `y`, `r` and 1 more; sets `frequency`, `amplitude`, `phase`, `dc_offset` and 10 more. A hardware driver: the market serves its fake backend, so no instrument is needed.","measures":["time_constant_index","x","y","r","theta"],"adjusts":["frequency","amplitude","phase","dc_offset","harmonic","time_constant","sync_filter_enable","adv_filter_enable","x_offset","y_offset","r_offset","x_offset_enable","y_offset_enable","r_offset_enable"],"actions":[],"tags":["lock-in amplifier","sr860","sr865","sr865a","scpi"],"backends":["fake"],"served_backend":"fake","evidence":"contract_checked","upstream":{"repo_url":"https://github.com/sqlim/sr860-python","commit":"00fa066450759cfa994b1e999eeec7074bc5724c","license":"MIT"},"stars":0,"install":{"openai4s":"openai4s lab add labs/sqlim__sr860-python","mhs":"mhs serve labs/sqlim__sr860-python --port 7400","mcp":"mhs serve labs/sqlim__sr860-python --mcp"}},
{"id":"labs/squad-lab__qcdrivers","name":"SQUAD Lab AD75019 crosspoint switch (qcdrivers Muxi)","device_id":"mhs://localhost/squad-ad75019-mux","track":"labs","category":"Electronics and measurement","topic":null,"kind":"instrument","vendor":"SQUAD Lab","model":"AD75019 crosspoint switch (Arduino firmware)","mode":"hardware","risk":"R1","family":"python-object","role":"device-driver","intro":"SQUAD Lab AD75019 crosspoint switch (qcdrivers Muxi), adapted from squad-lab/qcdrivers. It reads `identity`; runs `connect`, `status` and `reset_matrix`. `connect`: close one crosspoint with SWITCH32 x,y and read it back with STAT? x,y. A hardware driver: the market serves its fake backend, so no instrument is needed.","measures":["identity"],"adjusts":[],"actions":[{"name":"connect","description":"Close one crosspoint with SWITCH32 x,y and read it back with STAT? x,y"},{"name":"status","description":"Read one crosspoint of the firmware's 32x32 route buffer with STAT? x,y"},{"name":"reset_matrix","description":"Open every crosspoint with *RST and read this command's two reply lines"}],"tags":["qcodes","visa","crosspoint","switch","ad75019","squad-lab"],"backends":["fake","hardware"],"served_backend":"fake","evidence":"contract_checked","upstream":{"repo_url":"https://github.com/squad-lab/qcdrivers","commit":"6704e1c1794eff30811b8db62593673b2e39b6b4","license":"AGPL-3.0"},"stars":0,"install":{"openai4s":"openai4s lab add labs/squad-lab__qcdrivers","mhs":"mhs serve labs/squad-lab__qcdrivers --port 7400","mcp":"mhs serve labs/squad-lab__qcdrivers --mcp"}},
{"id":"labs/steinkohl__korad_powersupply","name":"Korad KC3405P power supply (korad.KC3405P)","device_id":"mhs://localhost/korad-psu","track":"labs","category":"Electronics and measurement","topic":null,"kind":"instrument.smu","vendor":"Korad","model":"KC3405P","mode":"hardware","risk":"R2","family":"python-object","role":"device-driver","intro":"Korad KC3405P power supply (korad.KC3405P), adapted from steinkohl/korad_powersupply. It reads `channel`, `voltage`, `current`, `regulation_mode` and 4 more; sets `voltage_setpoint`, `current_setpoint`, `overvoltage_protection_setpoint`, `overcurrent_protection_setpoint` and 3 more; runs `output_off`. `output_off`: send OUT1234:0 to all four outputs through the native send path (the safe state); it takes no input and does not wait for a status reply. A hardware driver: the market serves its fake backend, so no instrument is needed.","measures":["channel","voltage","current","regulation_mode","device_info","status","measure_voltage","measure_current"],"adjusts":["voltage_setpoint","current_setpoint","overvoltage_protection_setpoint","overcurrent_protection_setpoint","overvoltage_protection_enabled","overcurrent_protection_enabled","output_enabled"],"actions":[{"name":"output_off","description":"Send OUT1234:0 to all four outputs through the native send path (the safe state); it takes no input and does not wait for a status reply"}],"tags":["power supply","psu","udp","voltage","current","protection"],"backends":["fake","hardware"],"served_backend":"fake","evidence":"contract_checked","upstream":{"repo_url":"https://github.com/steinkohl/korad_powersupply","commit":"fd2e8b7c59a4dd9f9e609bdacf15b3d7bc1b3d5e","license":"MIT"},"stars":0,"install":{"openai4s":"openai4s lab add labs/steinkohl__korad_powersupply","mhs":"mhs serve labs/steinkohl__korad_powersupply --port 7400","mcp":"mhs serve labs/steinkohl__korad_powersupply --mcp"}},
{"id":"labs/steiva__opentrons-ot2-http-python-wrapper","name":"Opentrons OT-2 (HTTP wrapper)","device_id":"mhs://localhost/opentrons-ot2","track":"labs","category":"Liquid handling and fluidics","topic":null,"kind":"lab.liquid_handler","vendor":"Opentrons","model":"OT-2","mode":"hardware","risk":"R2","family":"python-object","role":"device-driver","intro":"Opentrons OT-2 (HTTP wrapper), adapted from steiva/opentrons-ot2-http-python-wrapper. It reads `robot_model` and `run_count`; runs `aspirate`, `dispense`, `create_run`, `load_pipette` and 4 more. `aspirate`: draw a specified volume of liquid from a declared labware well into a pipette tip, with a bounded flow rate and an optional liquid-level offset. A hardware driver: the market serves its fake backend, so no instrument is needed.","measures":["robot_model","run_count"],"adjusts":[],"actions":[{"name":"aspirate","description":"Draw a specified volume of liquid from a declared labware well into a pipette tip, with a bounded flow rate and an optional liquid-level offset."},{"name":"dispense","description":"Dispense a specified volume from the pipette into a declared labware well, with optional blowout and mixing after dispense."},{"name":"create_run","description":"Create a run on the robot; needed before pipette, labware, movement and fluid commands"},{"name":"load_pipette","description":"Load the configured pipette on a mount"},{"name":"load_labware","description":"Load labware into a deck slot"},{"name":"home","description":"Home the robot gantry"},{"name":"control_run","description":"Play, pause, stop or recover the current run"},{"name":"stop_run","description":"Stop the current run (the safe-state action); it takes no input"}],"tags":["liquid-handler","pipette","robot","http"],"backends":["fake","hardware"],"served_backend":"fake","evidence":"contract_checked","upstream":{"repo_url":"https://github.com/steiva/opentrons-ot2-http-python-wrapper","commit":"6bf929c11fe94a03c8b444c70e13be273933f365","license":"NOASSERTION"},"stars":0,"install":{"openai4s":"openai4s lab add labs/steiva__opentrons-ot2-http-python-wrapper","mhs":"mhs serve labs/steiva__opentrons-ot2-http-python-wrapper --port 7400","mcp":"mhs serve labs/steiva__opentrons-ot2-http-python-wrapper --mcp"}},
{"id":"labs/t--wagner__pymeasure","name":"Keithley 2000 multimeter","device_id":"mhs://localhost/keithley2000","track":"labs","category":"Electronics and measurement","topic":null,"kind":"instrument.dmm","vendor":"Keithley Instruments","model":"2000 multimeter","mode":"hardware","risk":"R1","family":"scpi","role":"device-driver","intro":"Keithley 2000 multimeter, adapted from t--wagner/pymeasure. It reads `identification`, `voltage_dc`, `current_dc` and `resistance`; sets `voltage_range`; runs `measure_voltage`, `measure_current` and `measure_resistance`. `measure_voltage`: measure a DC or RMS voltage on a declared channel or terminal pair and return the value with its sampling timestamp and measurement range. A hardware driver: the market serves its fake backend, so no instrument is needed.","measures":["identification","voltage_dc","current_dc","resistance"],"adjusts":["voltage_range"],"actions":[{"name":"measure_voltage","description":"Measure a DC or RMS voltage on a declared channel or terminal pair and return the value with its sampling timestamp and measurement range."},{"name":"measure_current","description":"Measure current on a declared channel and return the value with its timestamp and range."},{"name":"measure_resistance","description":"Measure resistance or impedance on a declared channel and return the value with its timestamp and excitation method."}],"tags":["keithley","2000","dmm","multimeter","voltage","current","resistance"],"backends":["fake","hardware"],"served_backend":"fake","evidence":"contract_checked","upstream":{"repo_url":"https://github.com/t--wagner/pymeasure","commit":"d9c552f3a3fabd51c9fb4b76cd1e095f738e96bf","license":"GPL-3.0"},"stars":1,"install":{"openai4s":"openai4s lab add labs/t--wagner__pymeasure","mhs":"mhs serve labs/t--wagner__pymeasure --port 7400","mcp":"mhs serve labs/t--wagner__pymeasure --mcp"}},
{"id":"labs/tektronix__curvequery","name":"Tektronix 4/5/6 Series MSO waveform download (curvequery)","device_id":"mhs://localhost/mso","track":"labs","category":"Electronics and measurement","topic":null,"kind":"instrument","vendor":"Tektronix","model":"4/5/6 Series MSO oscilloscope","mode":"hardware","risk":"R0","family":"scpi","role":"device-driver","intro":"Tektronix 4/5/6 Series MSO waveform download (curvequery), adapted from tektronix/curvequery. It runs `download_curves`. `download_curves`: download every displayed waveform source through the curvequery feature and return the traces. A hardware driver: the market serves its fake backend, so no instrument is needed.","measures":[],"adjusts":[],"actions":[{"name":"download_curves","description":"Download every displayed waveform source through the curvequery feature and return the traces"}],"tags":["oscilloscope","tektronix","mso44","mso46","mso54","mso56","mso58","curvequery","visa"],"backends":["fake","hardware"],"served_backend":"fake","evidence":"contract_checked","upstream":{"repo_url":"https://github.com/tektronix/curvequery","commit":"57e59cc076eb41feaa3c606dcc5a68d447b44026","license":"Apache-2.0"},"stars":16,"install":{"openai4s":"openai4s lab add labs/tektronix__curvequery","mhs":"mhs serve labs/tektronix__curvequery --port 7400","mcp":"mhs serve labs/tektronix__curvequery --mcp"}},
{"id":"labs/tgojname__picocontroller_gui","name":"Newport 8742 picomotor controller","device_id":"mhs://localhost/picocontroller","track":"labs","category":"Motion control","topic":null,"kind":"motion.axis","vendor":"Newport","model":"8742","mode":"hardware","risk":"R1","family":"python-object","role":"device-driver","intro":"Newport 8742 picomotor controller, adapted from tgojname/picocontroller_gui. It reads `version`, `motor_types` and `motion_done`; runs `jog_axis` and `stop_motion`. `jog_axis`: set one channel's velocity and start a continuous jog when the channel is motion done. A hardware driver: the market serves its fake backend, so no instrument is needed.","measures":["version","motor_types","motion_done"],"adjusts":[],"actions":[{"name":"jog_axis","description":"Set one channel's velocity and start a continuous jog when the channel is motion done"},{"name":"stop_motion","description":"Stop all motion on the resource with a declared deceleration profile and report the stopping position. This capability is always cancellable=false and is exempt from rate limiting."}],"tags":["picomotor","motion","usb","newfocus"],"backends":["fake","hardware"],"served_backend":"fake","evidence":"contract_checked","upstream":{"repo_url":"https://github.com/tgojname/picocontroller_gui","commit":"82a5f65663c916fd971e18deaadbab0eb714f233","license":"NOASSERTION"},"stars":3,"install":{"openai4s":"openai4s lab add labs/tgojname__picocontroller_gui","mhs":"mhs serve labs/tgojname__picocontroller_gui --port 7400","mcp":"mhs serve labs/tgojname__picocontroller_gui --mcp"}},
{"id":"labs/thedeanlab__navigate","name":"ASI MS-2000 motorised stage (navigate.MS2000Stage)","device_id":"mhs://localhost/asi-ms2000","track":"labs","category":"Optics and microscopy","topic":null,"kind":"optics.stage","vendor":"Applied Scientific Instrumentation","model":"MS-2000","mode":"hardware","risk":"R1","family":"python-object","role":"driver-pack","intro":"ASI MS-2000 motorised stage (navigate.MS2000Stage), adapted from thedeanlab/navigate. It reads `x_position`, `y_position` and `z_position`; runs `move_axis_absolute` and `stop_scan`. `move_axis_absolute`: move one stage axis to an absolute position in micrometres. A hardware driver: the market serves its fake backend, so no instrument is needed.","measures":["x_position","y_position","z_position"],"adjusts":[],"actions":[{"name":"move_axis_absolute","description":"Move one stage axis to an absolute position in micrometres"},{"name":"stop_scan","description":"Stop a running line scan (the native scan stop); it takes no input"}],"tags":["stage","microscope","motion","serial","asi"],"backends":["fake","hardware"],"served_backend":"fake","evidence":"contract_checked","upstream":{"repo_url":"https://github.com/thedeanlab/navigate","commit":"da14920d7b40d048a5d2225a7846d11f78e05212","license":"BSD-3-Clause-Clear"},"stars":40,"install":{"openai4s":"openai4s lab add labs/thedeanlab__navigate","mhs":"mhs serve labs/thedeanlab__navigate --port 7400","mcp":"mhs serve labs/thedeanlab__navigate --mcp"}},
{"id":"labs/thinksrs__srsinst.sr860","name":"SRS SR860 lock-in amplifier","device_id":"mhs://localhost/sr860","track":"labs","category":"Electronics and measurement","topic":null,"kind":"instrument","vendor":"Stanford Research Systems","model":"SR860 series lock-in amplifier","mode":"hardware","risk":"R1","family":"scpi","role":"device-driver","intro":"SRS SR860 lock-in amplifier, adapted from thinksrs/srsinst.sr860. It reads `x`, `y`, `r` and `theta`; sets `frequency`, `amplitude` and `time_constant`. A hardware driver: the market serves its fake backend, so no instrument is needed.","measures":["x","y","r","theta"],"adjusts":["frequency","amplitude","time_constant"],"actions":[],"tags":["lock-in amplifier","sr860","sr865","sr865a","scpi"],"backends":["fake"],"served_backend":"fake","evidence":"contract_checked","upstream":{"repo_url":"https://github.com/thinksrs/srsinst.sr860","commit":"c234ec204329c1682fcc5a77d28164e99cdd1f3e","license":"MIT"},"stars":9,"install":{"openai4s":"openai4s lab add labs/thinksrs__srsinst.sr860","mhs":"mhs serve labs/thinksrs__srsinst.sr860 --port 7400","mcp":"mhs serve labs/thinksrs__srsinst.sr860 --mcp"}},
{"id":"labs/thorlabs__light_analysis_examples","name":"Thorlabs BC207/BC210 beam profiler (TLBC2.py)","device_id":"mhs://localhost/tlbc2","track":"labs","category":"Sensors and cameras","topic":null,"kind":"sensor.camera","vendor":"Thorlabs","model":"BC207/BC210 beam profiler","mode":"hardware","risk":"R1","family":"python-object","role":"device-driver","intro":"Thorlabs BC207/BC210 beam profiler (TLBC2.py), adapted from thorlabs/light_analysis_examples. It reads `sensor_pixels_x`, `sensor_pixels_y`, `pixel_pitch_horizontal`, `pixel_pitch_vertical` and 5 more; sets `exposure_time`, `wavelength`, `precision_mode` and `binning`; runs `capture` and `measure_beam`. `capture`: capture a single image from a named camera with a declared resolution and exposure and return an image artifact reference. A hardware driver: the market serves its fake backend, so no instrument is needed.","measures":["sensor_pixels_x","sensor_pixels_y","pixel_pitch_horizontal","pixel_pitch_vertical","roi_left","roi_top","roi_width","roi_height","sensor_temperature"],"adjusts":["exposure_time","wavelength","precision_mode","binning"],"actions":[{"name":"capture","description":"Capture a single image from a named camera with a declared resolution and exposure and return an image artifact reference."},{"name":"measure_beam","description":"Request a new measurement and return the 4-sigma beam widths, centroid, peak, saturation and total power the instrument calculated"}],"tags":["beam-profiler","camera","thorlabs","bc207","bc210","ctypes","windows"],"backends":["fake","hardware"],"served_backend":"fake","evidence":"contract_checked","upstream":{"repo_url":"https://github.com/thorlabs/light_analysis_examples","commit":"1e7f3aa6fe29ca9739c582464bf870232232567b","license":"MIT"},"stars":67,"install":{"openai4s":"openai4s lab add labs/thorlabs__light_analysis_examples","mhs":"mhs serve labs/thorlabs__light_analysis_examples --port 7400","mcp":"mhs serve labs/thorlabs__light_analysis_examples --mcp"}},
{"id":"labs/tiagocoutinho__cryocon","name":"CryoCon temperature controller (cryocon.CryoCon)","device_id":"mhs://localhost/cryocon","track":"labs","category":"Thermal and process control","topic":null,"kind":"instrument.thermometer","vendor":"Cryo-con","model":"M24C/M32 temperature controller","mode":"hardware","risk":"R0","family":"python-object","role":"device-driver","intro":"CryoCon temperature controller (cryocon.CryoCon), adapted from tiagocoutinho/cryocon. It reads `idn`, `name`, `hw_revision`, `fw_revision` and 20 more. A hardware driver: the market serves its fake backend, so no instrument is needed.","measures":["idn","name","hw_revision","fw_revision","lockout","led","display_filter_time","date","time","control","channel","channel_name","temperature","temperature_unit","minimum","maximum","alarm","loop","loop_setpoint","loop_source","loop_type","loop_output_power","loop_range","measure_temperature"],"adjusts":[],"actions":[],"tags":["cryocon","temperature","thermometer","controller","read-only"],"backends":["fake","hardware"],"served_backend":"fake","evidence":"contract_checked","upstream":{"repo_url":"https://github.com/tiagocoutinho/cryocon","commit":"a60636963d001e407c534494443b772742f6f545","license":"LGPL-3.0"},"stars":4,"install":{"openai4s":"openai4s lab add labs/tiagocoutinho__cryocon","mhs":"mhs serve labs/tiagocoutinho__cryocon --port 7400","mcp":"mhs serve labs/tiagocoutinho__cryocon --mcp"}},
{"id":"labs/tiagocoutinho__gepace","name":"GE Druck Pace pressure controller (gepace.Pace)","device_id":"mhs://localhost/gepace","track":"labs","category":"Thermal and process control","topic":null,"kind":"process.controller","vendor":"GE Druck","model":"Pace 1000/5000/6000","mode":"hardware","risk":"R2","family":"python-object","role":"device-driver","intro":"GE Druck Pace pressure controller (gepace.Pace), adapted from tiagocoutinho/gepace. It reads `idn`, `version`, `mac`, `task` and 11 more; runs `set_pressure_control`, `start_pressure_control` and `stop_pressure_control`. `set_pressure_control`: enable or disable the pressure control output of module 1 (OUTP1:STAT). A hardware driver: the market serves its fake backend, so no instrument is needed.","measures":["idn","version","mac","task","world_area","hw_test","error","startup_mode","serial_numbers","pressure","barometric_pressure","pressure_control","pressure_unit","pressure_range","pressure_in_limits"],"adjusts":[],"actions":[{"name":"set_pressure_control","description":"Enable or disable the pressure control output of module 1 (OUTP1:STAT)"},{"name":"start_pressure_control","description":"Enable the pressure control output of module 1 (the native start, OUTP1:STAT 1)"},{"name":"stop_pressure_control","description":"Disable the pressure control output of module 1 (the native stop, the safe state); it takes no input"}],"tags":["pressure","pressure-controller","calibration","gepace","pace","scpi","asyncio"],"backends":["fake","hardware"],"served_backend":"fake","evidence":"contract_checked","upstream":{"repo_url":"https://github.com/tiagocoutinho/gepace","commit":"4caa5f8c404277281033bc7f10b280d42941dfeb","license":"LGPL-3.0"},"stars":6,"install":{"openai4s":"openai4s lab add labs/tiagocoutinho__gepace","mhs":"mhs serve labs/tiagocoutinho__gepace --port 7400","mcp":"mhs serve labs/tiagocoutinho__gepace --mcp"}},
{"id":"labs/tiagocoutinho__julabo","name":"JULABO circulator (julabo.JulaboCF)","device_id":"mhs://localhost/julabo","track":"labs","category":"Thermal and process control","topic":null,"kind":"thermal.zone","vendor":"JULABO","model":"CF cryo-compact circulator","mode":"hardware","risk":"R2","family":"python-object","role":"device-driver","intro":"JULABO circulator (julabo.JulaboCF), adapted from tiagocoutinho/julabo. It reads `bath_temperature`, `external_temperature`, `active_set_point_channel`, `running` and 1 more; sets `setpoint`; runs `start_circulation` and `stop_circulation`. `start_circulation`: start the circulator (the native start). A hardware driver: the market serves its fake backend, so no instrument is needed.","measures":["bath_temperature","external_temperature","active_set_point_channel","running","status"],"adjusts":["setpoint"],"actions":[{"name":"start_circulation","description":"Start the circulator (the native start)"},{"name":"stop_circulation","description":"Stop the circulator (the native stop, the safe state); it takes no input"}],"tags":["circulator","temperature-control","bath","asyncio"],"backends":["fake","hardware"],"served_backend":"fake","evidence":"contract_checked","upstream":{"repo_url":"https://github.com/tiagocoutinho/julabo","commit":"650da2138459d93e3bfdb8db17ce0bd161c6a9a7","license":"LGPL-3.0"},"stars":6,"install":{"openai4s":"openai4s lab add labs/tiagocoutinho__julabo","mhs":"mhs serve labs/tiagocoutinho__julabo --port 7400","mcp":"mhs serve labs/tiagocoutinho__julabo --mcp"}},
{"id":"labs/tiagocoutinho__vacuubrand","name":"Vacuubrand DCP 3000 vacuum controller","device_id":"mhs://localhost/vacuubrand-dcp3000","track":"labs","category":"Electronics and measurement","topic":null,"kind":"instrument.gauge","vendor":"Vacuubrand","model":"DCP 3000","mode":"hardware","risk":"R1","family":"python-object","role":"device-driver","intro":"Vacuubrand DCP 3000 vacuum controller, adapted from tiagocoutinho/vacuubrand. It reads `pressure`, `transducer_pressures`, `configuration`, `errors` and 2 more; sets `event_time_interval`, `on_setpoint_1`, `off_setpoint_1`, `on_setpoint_2` and 5 more; runs `measure_pressure`, `switch_on`, `switch_off`, `open_venting_valve` and 2 more. `measure_pressure`: measure absolute, gauge or differential pressure at a declared port and return the value with its reference and timestamp. A hardware driver: the market serves its fake backend, so no instrument is needed.","measures":["pressure","transducer_pressures","configuration","errors","version","recording_time_interval"],"adjusts":["event_time_interval","on_setpoint_1","off_setpoint_1","on_setpoint_2","off_setpoint_2","on_setpoint_3","off_setpoint_3","on_setpoint_4","off_setpoint_4"],"actions":[{"name":"measure_pressure","description":"Measure absolute, gauge or differential pressure at a declared port and return the value with its reference and timestamp."},{"name":"switch_on","description":"Enter remote control (native REMOTE 1)"},{"name":"switch_off","description":"Release remote control (native REMOTE -); it takes no input"},{"name":"open_venting_valve","description":"Open the venting valve (native OUT_VENT 1); it takes no input"},{"name":"close_venting_valve","description":"Close the venting valve (native OUT_VENT 0); it takes no input and is the safe-state valve command"},{"name":"vent","description":"Vent until atmospheric pressure (native OUT_VENT 2); it takes no input"}],"tags":["vacuum","pressure","gauge","controller","setpoint","venting-valve","serial","asyncio"],"backends":["fake","hardware"],"served_backend":"fake","evidence":"contract_checked","upstream":{"repo_url":"https://github.com/tiagocoutinho/vacuubrand","commit":"12b2e12aa43866ffa2ab986fc466c5548a7aba07","license":"LGPL-3.0"},"stars":1,"install":{"openai4s":"openai4s lab add labs/tiagocoutinho__vacuubrand","mhs":"mhs serve labs/tiagocoutinho__vacuubrand --port 7400","mcp":"mhs serve labs/tiagocoutinho__vacuubrand --mcp"}},
{"id":"labs/tiagocoutinho__xia-pfcu","name":"XIA PFCU-4 filter set and shutter controller","device_id":"mhs://localhost/pfcu","track":"labs","category":"Optics and microscopy","topic":null,"kind":"optics.shutter","vendor":"XIA","model":"PFCU-4 (PF4)","mode":"hardware","risk":"R2","family":"python-object","role":"device-driver","intro":"XIA PFCU-4 filter set and shutter controller, adapted from tiagocoutinho/xia-pfcu. It reads `status`, `identity`, `shutter_state` and `remote_control_enabled`; sets `filter_a`, `filter_b`, `filter_c`, `filter_d` and 3 more; runs `set_state`, `start_exposure` and `close_shutter`. `set_state`: open or close a mechanical or electronic shutter in the optical path, reporting the resulting state and, for an open shutter, the open duration. A hardware driver: the market serves its fake backend, so no instrument is needed.","measures":["status","identity","shutter_state","remote_control_enabled"],"adjusts":["filter_a","filter_b","filter_c","filter_d","decimation","shutter_enabled","remote_control_only"],"actions":[{"name":"set_state","description":"Open or close a mechanical or electronic shutter in the optical path, reporting the resulting state and, for an open shutter, the open duration."},{"name":"start_exposure","description":"Start a fixed-length exposure with the native start_exposure; the duration is in seconds"},{"name":"close_shutter","description":"Close the shutter (the native close_shutter, the safe state of the optical path); it takes no input"}],"tags":["filter-set","shutter","optical-path","xia","pfcu"],"backends":["fake","hardware"],"served_backend":"fake","evidence":"contract_checked","upstream":{"repo_url":"https://github.com/tiagocoutinho/xia-pfcu","commit":"ed95e031f718c343842bc340f4ae91eb2cb6894a","license":"LGPL-3.0"},"stars":4,"install":{"openai4s":"openai4s lab add labs/tiagocoutinho__xia-pfcu","mhs":"mhs serve labs/tiagocoutinho__xia-pfcu --port 7400","mcp":"mhs serve labs/tiagocoutinho__xia-pfcu --mcp"}},
{"id":"labs/tipith__py6632b","name":"HP 6632B DC source (py6632B.HP6632B)","device_id":"mhs://localhost/py6632b","track":"labs","category":"Electronics and measurement","topic":null,"kind":"instrument.smu","vendor":"Hewlett-Packard","model":"6632B","mode":"hardware","risk":"R2","family":"python-object","role":"device-driver","intro":"HP 6632B DC source (py6632B.HP6632B), adapted from tipith/py6632b. It reads `voltage`, `current`, `output_enabled` and `identity`; runs `set_source`, `set_output` and `stop_output`. `set_source`: set the output voltage and current limit together with one native SOUR:VOLT/CURR command. A hardware driver: the market serves its fake backend, so no instrument is needed.","measures":["voltage","current","output_enabled","identity"],"adjusts":[],"actions":[{"name":"set_source","description":"Set the output voltage and current limit together with one native SOUR:VOLT/CURR command"},{"name":"set_output","description":"Enable or disable the source output"},{"name":"stop_output","description":"Disable the source output (the safe state); it takes no input"}],"tags":["power-supply","dc-source","battery-charger","serial"],"backends":["fake","hardware"],"served_backend":"fake","evidence":"contract_checked","upstream":{"repo_url":"https://github.com/tipith/py6632b","commit":"a91f78a004f592e7588d483f28daebcbab8572e8","license":"NOASSERTION"},"stars":0,"install":{"openai4s":"openai4s lab add labs/tipith__py6632b","mhs":"mhs serve labs/tipith__py6632b --port 7400","mcp":"mhs serve labs/tipith__py6632b --mcp"}},
{"id":"labs/tomwphillips__pumpy","name":"Harvard PHD 2000 syringe pump (pumpy.PHD2000)","device_id":"mhs://localhost/pumpy-phd2000","track":"labs","category":"Liquid handling and fluidics","topic":null,"kind":"fluid.pump","vendor":"Harvard Apparatus","model":"PHD 2000 syringe pump","mode":"hardware","risk":"R2","family":"python-object","role":"device-driver","intro":"Harvard PHD 2000 syringe pump (pumpy.PHD2000), adapted from tomwphillips/pumpy. It sets `diameter`, `flowrate` and `targetvolume`; runs `pump` and `stop_pump`. `pump`: run a pump at a declared flow rate for a declared duration or volume in a declared direction, reporting the volume moved. A hardware driver: the market serves its fake backend, so no instrument is needed.","measures":[],"adjusts":["diameter","flowrate","targetvolume"],"actions":[{"name":"pump","description":"Run a pump at a declared flow rate for a declared duration or volume in a declared direction, reporting the volume moved."},{"name":"stop_pump","description":"Stop the pump with STP (the native stop, the safe state); it takes no input"}],"tags":["syringe pump","harvard","phd2000","serial","infuse","withdraw","pumpy"],"backends":["fake","hardware"],"served_backend":"fake","evidence":"contract_checked","upstream":{"repo_url":"https://github.com/tomwphillips/pumpy","commit":"3e49d71a73d23ea6f16082109bd4fac90a69119b","license":"MIT"},"stars":20,"install":{"openai4s":"openai4s lab add labs/tomwphillips__pumpy","mhs":"mhs serve labs/tomwphillips__pumpy --port 7400","mcp":"mhs serve labs/tomwphillips__pumpy --mcp"}},
{"id":"labs/trash-hold__oscilloscope_dimserver","name":"Tektronix TDS3054C oscilloscope (oscilloscope_dimserver)","device_id":"mhs://localhost/tds3054c","track":"labs","category":"Electronics and measurement","topic":null,"kind":"instrument","vendor":"Tektronix","model":"TDS3054C","mode":"hardware","risk":"R1","family":"python-object","role":"device-driver","intro":"Tektronix TDS3054C oscilloscope (oscilloscope_dimserver), adapted from trash-hold/oscilloscope_dimserver. It reads `horizontal_increment`; sets `channel`, `channel_enabled`, `vertical_scale`, `vertical_position` and 5 more; runs `single_acquisition` and `stop_acquisition`. `single_acquisition`: run one single-sequence acquisition and wait for it to finish (the native sample). A hardware driver: the market serves its fake backend, so no instrument is needed.","measures":["horizontal_increment"],"adjusts":["channel","channel_enabled","vertical_scale","vertical_position","horizontal_scale","horizontal_position","trigger_channel","trigger_level","trigger_slope"],"actions":[{"name":"single_acquisition","description":"Run one single-sequence acquisition and wait for it to finish (the native sample)"},{"name":"stop_acquisition","description":"Stop the acquisition (ACQ:STATE STOP); this is the safe state and takes no input"}],"tags":["oscilloscope","scope","tektronix","tds3054c","instrument"],"backends":["fake","hardware"],"served_backend":"fake","evidence":"contract_checked","upstream":{"repo_url":"https://github.com/trash-hold/oscilloscope_dimserver","commit":"6a34db58756fc0ac7ef8d4021bc290973d5cb65f","license":"NOASSERTION"},"stars":1,"install":{"openai4s":"openai4s lab add labs/trash-hold__oscilloscope_dimserver","mhs":"mhs serve labs/trash-hold__oscilloscope_dimserver --port 7400","mcp":"mhs serve labs/trash-hold__oscilloscope_dimserver --mcp"}},
{"id":"labs/undalogic__usmu_py","name":"uSMU source-measure unit (usmu_py.USMU)","device_id":"mhs://localhost/usmu","track":"labs","category":"Electronics and measurement","topic":null,"kind":"instrument.smu","vendor":"undalogic","model":"uSMU source-measure unit","mode":"hardware","risk":"R1","family":"python-object","role":"device-driver","intro":"uSMU source-measure unit (usmu_py.USMU), adapted from undalogic/usmu_py. It reads `identification` and `adc_0_1`; runs `configure`, `iv_point` and `output`. `configure`: set the oversample rate and lock the current range; the native class has no query for either setting, so the applied values are returned. A hardware driver: the market serves its fake backend, so no instrument is needed.","measures":["identification","adc_0_1"],"adjusts":[],"actions":[{"name":"configure","description":"Set the oversample rate and lock the current range; the native class has no query for either setting, so the applied values are returned"},{"name":"iv_point","description":"Set the current limit, source the voltage and return the voltage and current the device measures for that point"},{"name":"output","description":"Enable or disable the output: CH1:ENA enables it, CH1:DIS disables it into the high-impedance state"}],"tags":["smu","source measure unit","iv sweep","serial","vcp","voltage","current"],"backends":["fake","hardware"],"served_backend":"fake","evidence":"contract_checked","upstream":{"repo_url":"https://github.com/undalogic/usmu_py","commit":"345dc809f9711162a7cc60ca273a3fd13693735a","license":"MIT"},"stars":5,"install":{"openai4s":"openai4s lab add labs/undalogic__usmu_py","mhs":"mhs serve labs/undalogic__usmu_py --port 7400","mcp":"mhs serve labs/undalogic__usmu_py --mcp"}},
{"id":"labs/unine-chyn__thorpy","name":"Thorlabs APT stage (Thorpy)","device_id":"mhs://localhost/thorpy-stage","track":"labs","category":"Motion control","topic":null,"kind":"motion.axis","vendor":"Thorlabs","model":"APT single-channel stage controller","mode":"hardware","risk":"R1","family":"serial","role":"device-driver","intro":"Thorlabs APT stage (Thorpy), adapted from unine-chyn/thorpy. It reads `homed`; sets `position`, `max_velocity` and `acceleration`; runs `home` and `stop_motion`. `home`: start a home move and wait until the controller reports homed. A hardware driver: the market serves its fake backend, so no instrument is needed.","measures":["homed"],"adjusts":["position","max_velocity","acceleration"],"actions":[{"name":"home","description":"Start a home move and wait until the controller reports homed"},{"name":"stop_motion","description":"Stop every kind of motor move on the channel immediately"}],"tags":["thorlabs","apt","stage","motion","serial"],"backends":["fake","hardware"],"served_backend":"fake","evidence":"contract_checked","upstream":{"repo_url":"https://github.com/unine-chyn/thorpy","commit":"e8f000bd8a5bcc5a11b52f59742024d929751827","license":"NOASSERTION"},"stars":45,"install":{"openai4s":"openai4s lab add labs/unine-chyn__thorpy","mhs":"mhs serve labs/unine-chyn__thorpy --port 7400","mcp":"mhs serve labs/unine-chyn__thorpy --mcp"}},
{"id":"labs/urmel79__jupyter_pyvisa_lab","name":"Benning MM12 digital multimeter","device_id":"mhs://localhost/benning-mm12","track":"labs","category":"Sensors and cameras","topic":null,"kind":"sensor","vendor":"Benning","model":"MM12 digital multimeter","mode":"hardware","risk":"R0","family":"scpi","role":"device-driver","intro":"Benning MM12 digital multimeter, adapted from urmel79/jupyter_pyvisa_lab. It reads `device_model`, `device_serial`, `model_id`, `firmware_version` and 6 more. A hardware driver: the market serves its fake backend, so no instrument is needed.","measures":["device_model","device_serial","model_id","firmware_version","function","value_base","base_unit","value_display","display_unit","read_display"],"adjusts":[],"actions":[],"tags":["multimeter","dmm","benning","serial","measurement"],"backends":["fake","hardware"],"served_backend":"fake","evidence":"contract_checked","upstream":{"repo_url":"https://github.com/urmel79/jupyter_pyvisa_lab","commit":"418a7f6bbef16a7c30ece599f8367fe5585291d9","license":"GPL-3.0"},"stars":4,"install":{"openai4s":"openai4s lab add labs/urmel79__jupyter_pyvisa_lab","mhs":"mhs serve labs/urmel79__jupyter_pyvisa_lab --port 7400","mcp":"mhs serve labs/urmel79__jupyter_pyvisa_lab --mcp"}},
{"id":"labs/usnistgov__ssmdevices","name":"Mini-Circuits RCDAT USB switch attenuator","device_id":"mhs://localhost/minicircuits-rcdat","track":"labs","category":"Electronics and measurement","topic":null,"kind":"instrument","vendor":"Mini-Circuits","model":"RCDAT USB switch attenuator","mode":"hardware","risk":"R1","family":"python-object","role":"device-driver","intro":"Mini-Circuits RCDAT USB switch attenuator, adapted from usnistgov/ssmdevices. It reads `part_number` and `serial_number`; sets `attenuation_setting`. A hardware driver: the market serves its fake backend, so no instrument is needed.","measures":["part_number","serial_number"],"adjusts":["attenuation_setting"],"actions":[],"tags":["attenuator","rf","usb","hid","minicircuits","rcdat"],"backends":["fake","hardware"],"served_backend":"fake","evidence":"contract_checked","upstream":{"repo_url":"https://github.com/usnistgov/ssmdevices","commit":"4680dde885660d6aa467dc883aec1226f401589a","license":"NIST-PD"},"stars":2,"install":{"openai4s":"openai4s lab add labs/usnistgov__ssmdevices","mhs":"mhs serve labs/usnistgov__ssmdevices --port 7400","mcp":"mhs serve labs/usnistgov__ssmdevices --mcp"}},
{"id":"labs/uw-loci__flamingo_control","name":"Flamingo stage position controller (PositionController)","device_id":"mhs://localhost/flamingo-stage","track":"labs","category":"Motion control","topic":null,"kind":"motion.axis","vendor":"University of Washington LOCI","model":"Flamingo light sheet microscope stage","mode":"hardware","risk":"R1","family":"python-object","role":"device-driver","intro":"Flamingo stage position controller (PositionController), adapted from uw-loci/flamingo_control. It reads `position_x`, `position_y`, `position_z` and `rotation`; sets `home_x`, `home_y`, `home_z` and `home_rotation`; runs `move_stage` and `stop_motion`. `move_stage`: move all four stage axes to an absolute position with the controller's move_to_position; a target outside the configured stage limits is refused instead of clamped. A hardware driver: the market serves its fake backend, so no instrument is needed.","measures":["position_x","position_y","position_z","rotation"],"adjusts":["home_x","home_y","home_z","home_rotation"],"actions":[{"name":"move_stage","description":"Move all four stage axes to an absolute position with the controller's move_to_position; a target outside the configured stage limits is refused instead of clamped"},{"name":"stop_motion","description":"Stop all motion on the resource with a declared deceleration profile and report the stopping position. This capability is always cancellable=false and is exempt from rate limiting."}],"tags":["microscope","light sheet","stage","position","motion","flamingo"],"backends":["fake","hardware"],"served_backend":"fake","evidence":"contract_checked","upstream":{"repo_url":"https://github.com/uw-loci/flamingo_control","commit":"0eee5dac8e54edbb02ec0c4a18d3e362ad772310","license":"MIT"},"stars":2,"install":{"openai4s":"openai4s lab add labs/uw-loci__flamingo_control","mhs":"mhs serve labs/uw-loci__flamingo_control --port 7400","mcp":"mhs serve labs/uw-loci__flamingo_control --mcp"}},
{"id":"labs/uwo-fast__openreactor","name":"openreactor RLHT heater slice (openreactor.rlht.RlhtSlice)","device_id":"mhs://localhost/rlht_heater","track":"labs","category":"Thermal and process control","topic":null,"kind":"thermal.zone","vendor":"uwo-fast","model":"RLHT heater slice","mode":"hardware","risk":"R2","family":"python-object","role":"device-driver","intro":"openreactor RLHT heater slice (openreactor.rlht.RlhtSlice), adapted from uwo-fast/openreactor. It reads `state`, `version`, `mode`, `estop` and 2 more; sets `setpoint_1` and `setpoint_2`; runs `stop_heating`. `stop_heating`: put both heater outputs in the safe state (setpoints zero, then open-loop duty zero). A hardware driver: the market serves its fake backend, so no instrument is needed.","measures":["state","version","mode","estop","temperature_1","temperature_2"],"adjusts":["setpoint_1","setpoint_2"],"actions":[{"name":"stop_heating","description":"Put both heater outputs in the safe state (setpoints zero, then open-loop duty zero)"}],"tags":["reactor","heater","thermal","rlht","i2c"],"backends":["fake","hardware"],"served_backend":"fake","evidence":"contract_checked","upstream":{"repo_url":"https://github.com/uwo-fast/openreactor","commit":"ade88dc17e1c06775ddcb1cdc9ca6c40e4083db0","license":"AGPL-3.0"},"stars":0,"install":{"openai4s":"openai4s lab add labs/uwo-fast__openreactor","mhs":"mhs serve labs/uwo-fast__openreactor --port 7400","mcp":"mhs serve labs/uwo-fast__openreactor --mcp"}},
{"id":"labs/vadter__hantek1008c","name":"Hantek 1008C eight-channel USB instrument (pyhantek1008C.Hantek1008)","device_id":"mhs://localhost/hantek1008c","track":"labs","category":"Electronics and measurement","topic":null,"kind":"instrument","vendor":"Hantek","model":"1008C","mode":"hardware","risk":"R1","family":"python-object","role":"device-driver","intro":"Hantek 1008C eight-channel USB instrument (pyhantek1008C.Hantek1008), adapted from vadter/hantek1008c. It reads `active_channels`, `time`, `vscales`, `generator_waveform_max_length` and 1 more; sets `generator_on` and `generator_speed`; runs `set_generator_waveform`, `pause`, `resume` and `generator_off`. `set_generator_waveform`: send a generator waveform: one byte per part of the wave, each bit an output. A hardware driver: the market serves its fake backend, so no instrument is needed.","measures":["active_channels","time","vscales","generator_waveform_max_length","paused"],"adjusts":["generator_on","generator_speed"],"actions":[{"name":"set_generator_waveform","description":"Send a generator waveform: one byte per part of the wave, each bit an output"},{"name":"pause","description":"Start the upstream keep-alive pause thread that pings the instrument every 0.01 s"},{"name":"resume","description":"Stop the upstream keep-alive pause thread"},{"name":"generator_off","description":"Switch the generator off and stop the keep-alive pause thread (the safe state)"}],"tags":["oscilloscope","usb","eight-channel","waveform-generator","measurement"],"backends":["fake","hardware"],"served_backend":"fake","evidence":"contract_checked","upstream":{"repo_url":"https://github.com/vadter/hantek1008c","commit":"178773a7a7161e8ddf68a9230e944bb4c5205884","license":"NOASSERTION"},"stars":0,"install":{"openai4s":"openai4s lab add labs/vadter__hantek1008c","mhs":"mhs serve labs/vadter__hantek1008c --port 7400","mcp":"mhs serve labs/vadter__hantek1008c --mcp"}},
{"id":"labs/vadter__hantek6022be","name":"Hantek 6022BE USB oscilloscope (pyhantek6022BE.Hantek)","device_id":"mhs://localhost/hantek6022be","track":"labs","category":"Electronics and measurement","topic":null,"kind":"instrument","vendor":"Hantek","model":"6022BE","mode":"hardware","risk":"R1","family":"python-object","role":"device-driver","intro":"Hantek 6022BE USB oscilloscope (pyhantek6022BE.Hantek), adapted from vadter/hantek6022be. It reads `acquisition`; sets `sample_rate`, `ch1_vdiv` and `ch2_vdiv`. A hardware driver: the market serves its fake backend, so no instrument is needed.","measures":["acquisition"],"adjusts":["sample_rate","ch1_vdiv","ch2_vdiv"],"actions":[],"tags":["oscilloscope","usb","instrument","acquisition","voltage"],"backends":["fake","hardware"],"served_backend":"fake","evidence":"contract_checked","upstream":{"repo_url":"https://github.com/vadter/hantek6022be","commit":"548ff23984044ed1b8265358cfd20312e37cce8b","license":"NOASSERTION"},"stars":1,"install":{"openai4s":"openai4s lab add labs/vadter__hantek6022be","mhs":"mhs serve labs/vadter__hantek6022be --port 7400","mcp":"mhs serve labs/vadter__hantek6022be --mcp"}},
{"id":"labs/vcjdeboer__odyssey-app-hap","name":"LI-COR Odyssey Classic 9120 infrared imager (CGI over HTTP)","device_id":"mhs://localhost/odyssey-classic","track":"labs","category":"Sensors and cameras","topic":null,"kind":"sensor.camera","vendor":"LI-COR Biosciences","model":"Odyssey Classic 9120","mode":"hardware","risk":"R2","family":"python-object","role":"device-driver","intro":"LI-COR Odyssey Classic 9120 infrared imager (CGI over HTTP), adapted from vcjdeboer/odyssey-app-hap. It reads `state`, `progress_percent`, `time_remaining`, `current_user` and 2 more; sets `scan_name`, `scan_group`, `resolution`, `quality` and 9 more; runs `control_scan`, `safe_stop` and `capture`. `control_scan`: start, pause, stop or cancel the configured scan through command.pl. A hardware driver: the market serves its fake backend, so no instrument is needed.","measures":["state","progress_percent","time_remaining","current_user","lid_open","instrument_info"],"adjusts":["scan_name","scan_group","resolution","quality","intensity_700","intensity_800","channel_700","channel_800","origin_x_cm","origin_y_cm","width_cm","height_cm","focus_offset_mm"],"actions":[{"name":"control_scan","description":"Start, pause, stop or cancel the configured scan through command.pl"},{"name":"safe_stop","description":"Send the status-page Stop and confirm the status page then reports Idle or Stopped"},{"name":"capture","description":"Capture a single image from a named camera with a declared resolution and exposure and return an image artifact reference."}],"tags":["scanner","infrared","fluorescence","western-blot","li-cor","odyssey","http","cgi"],"backends":["fake","hardware"],"served_backend":"fake","evidence":"contract_checked","upstream":{"repo_url":"https://github.com/vcjdeboer/odyssey-app-hap","commit":"4dffe3a3ed0b32153c50b398ccac3fc7d30db7d1","license":"MIT"},"stars":0,"install":{"openai4s":"openai4s lab add labs/vcjdeboer__odyssey-app-hap","mhs":"mhs serve labs/vcjdeboer__odyssey-app-hap --port 7400","mcp":"mhs serve labs/vcjdeboer__odyssey-app-hap --mcp"}},
{"id":"labs/veerwang__octoaxes","name":"Octoaxes 7-axis microscope stage","device_id":"mhs://localhost/octoaxes","track":"labs","category":"Optics and microscopy","topic":null,"kind":"instrument.microscope","vendor":"veerwang","model":"Octoaxes","mode":"hardware","risk":"R1","family":"serial","role":"device-driver","intro":"Octoaxes 7-axis microscope stage, adapted from veerwang/octoaxes. It reads `x_position_um`, `y_position_um`, `z_steps`, `moving` and 2 more; runs `move_xy`, `set_illumination` and `deenergise`. `move_xy`: move the X and Y stage axes to absolute positions in micrometres. A hardware driver: the market serves its fake backend, so no instrument is needed.","measures":["x_position_um","y_position_um","z_steps","moving","illumination_port","illumination_percent"],"adjusts":[],"actions":[{"name":"move_xy","description":"Move the X and Y stage axes to absolute positions in micrometres"},{"name":"set_illumination","description":"Set the illumination channel and intensity used for subsequent imaging or observation, with an optional bounded on-duration after which the light is turned off."},{"name":"deenergise","description":"De-energise every stage axis and switch all illumination ports off"}],"tags":["microscope","stage","motion","illumination","serial","teensy"],"backends":["fake","hardware"],"served_backend":"fake","evidence":"contract_checked","upstream":{"repo_url":"https://github.com/veerwang/octoaxes","commit":"77cb47e0fdf83bde33c85d24be4d4b3723e74e15","license":"NOASSERTION"},"stars":0,"install":{"openai4s":"openai4s lab add labs/veerwang__octoaxes","mhs":"mhs serve labs/veerwang__octoaxes --port 7400","mcp":"mhs serve labs/veerwang__octoaxes --mcp"}},
{"id":"labs/wasatchphotonics__wasatch.py","name":"Wasatch Photonics FID spectrometer (wasatch.FeatureIdentificationDevice)","device_id":"mhs://localhost/wasatch","track":"labs","category":"Spectroscopy","topic":null,"kind":"instrument.spectrometer","vendor":"Wasatch Photonics","model":"FeatureIdentificationDevice (FID) spectrometer","mode":"hardware","risk":"R2","family":"python-object","role":"device-driver","intro":"Wasatch Photonics FID spectrometer (wasatch.FeatureIdentificationDevice), adapted from wasatchphotonics/wasatch.py. It reads `detector_temperature_degC`, `detector_tec_setpoint_degC`, `tec_enabled`, `ambient_temperature_degC` and 1 more; sets `integration_time_ms`; runs `acquire_spectrum` and `laser_off`. `acquire_spectrum`: acquire one spectrum with the current integration time. A hardware driver: the market serves its fake backend, so no instrument is needed.","measures":["detector_temperature_degC","detector_tec_setpoint_degC","tec_enabled","ambient_temperature_degC","laser_enabled"],"adjusts":["integration_time_ms"],"actions":[{"name":"acquire_spectrum","description":"Acquire one spectrum with the current integration time"},{"name":"laser_off","description":"Disable the laser (the safe state); it takes no input"}],"tags":["spectrometer","raman","spectrum","tec","laser"],"backends":["fake","hardware"],"served_backend":"fake","evidence":"contract_checked","upstream":{"repo_url":"https://github.com/wasatchphotonics/wasatch.py","commit":"c3ea52bde83d9d004d0b97850f09515dfc42f741","license":"MIT"},"stars":22,"install":{"openai4s":"openai4s lab add labs/wasatchphotonics__wasatch.py","mhs":"mhs serve labs/wasatchphotonics__wasatch.py --port 7400","mcp":"mhs serve labs/wasatchphotonics__wasatch.py --mcp"}},
{"id":"labs/wetenschaap__pycrofluidics","name":"Elveflow OB1 pressure controller (pycrofluidics.OB1elve)","device_id":"mhs://localhost/elveflow-ob1","track":"labs","category":"Electronics and measurement","topic":null,"kind":"instrument","vendor":"Elveflow","model":"OB1 pressure controller (Mk4)","mode":"hardware","risk":"R2","family":"python-object","role":"device-driver","intro":"Elveflow OB1 pressure controller (pycrofluidics.OB1elve), adapted from wetenschaap/pycrofluidics. It reads `flow_1`, `flow_2`, `flow_3`, `flow_4` and 1 more; sets `pressure_1`, `pressure_2`, `pressure_3` and `pressure_4`; runs `read_pressure`, `read_flow`, `start_remote` and `stop_remote`. `read_pressure`: read the pressure of one OB1 channel and return it in mbar. A hardware driver: the market serves its fake backend, so no instrument is needed.","measures":["flow_1","flow_2","flow_3","flow_4","remote"],"adjusts":["pressure_1","pressure_2","pressure_3","pressure_4"],"actions":[{"name":"read_pressure","description":"Read the pressure of one OB1 channel and return it in mbar"},{"name":"read_flow","description":"Read the flow sensor of one OB1 channel and return it in uL/min"},{"name":"start_remote","description":"Start the upstream remote control loop, which reads all sensors and regulators"},{"name":"stop_remote","description":"Stop the remote control loop and command all four pressure channels to 0 mbar (safe state)"}],"tags":["pressure-controller","microfluidics","elveflow","ob1","flow-sensor"],"backends":["fake","hardware"],"served_backend":"fake","evidence":"contract_checked","upstream":{"repo_url":"https://github.com/wetenschaap/pycrofluidics","commit":"319de9d08c1a5f39ddd5030c98d8c356fbfb0f9c","license":"GPL-3.0"},"stars":6,"install":{"openai4s":"openai4s lab add labs/wetenschaap__pycrofluidics","mhs":"mhs serve labs/wetenschaap__pycrofluidics --port 7400","mcp":"mhs serve labs/wetenschaap__pycrofluidics --mcp"}},
{"id":"labs/wetenschaap__pymista","name":"Zaber microscopy stage (pymista.ZaberStage)","device_id":"mhs://localhost/pymista","track":"labs","category":"Motion control","topic":null,"kind":"motion.axis","vendor":"Zaber Technologies","model":"Zaber ASCII stage","mode":"hardware","risk":"R1","family":"python-object","role":"device-driver","intro":"Zaber microscopy stage (pymista.ZaberStage), adapted from wetenschaap/pymista. It reads `position`, `moving` and `homed`; runs `move_absolute`, `move_relative`, `home_axes` and `stop_motion`. `move_absolute`: move the axes to absolute positions in micrometres and wait until the stage is idle. The array names the leading axes in order; trailing axes keep their current position. A hardware driver: the market serves its fake backend, so no instrument is needed.","measures":["position","moving","homed"],"adjusts":[],"actions":[{"name":"move_absolute","description":"Move the axes to absolute positions in micrometres and wait until the stage is idle. The array names the leading axes in order; trailing axes keep their current position."},{"name":"move_relative","description":"Move the axes by relative displacements in micrometres and wait until the stage is idle. The array names the leading axes in order; trailing axes do not move."},{"name":"home_axes","description":"Home every axis with the native force homing and report whether every axis is homed. It takes no input."},{"name":"stop_motion","description":"Stop all motion on the resource with a declared deceleration profile and report the stopping position. This capability is always cancellable=false and is exempt from rate limiting."}],"tags":["stage","motion","zaber","microscopy","micrometre"],"backends":["fake","hardware"],"served_backend":"fake","evidence":"contract_checked","upstream":{"repo_url":"https://github.com/wetenschaap/pymista","commit":"b30040a192c329b6144a120f0dfea2ca68060760","license":"GPL-3.0"},"stars":1,"install":{"openai4s":"openai4s lab add labs/wetenschaap__pymista","mhs":"mhs serve labs/wetenschaap__pymista --port 7400","mcp":"mhs serve labs/wetenschaap__pymista --mcp"}},
{"id":"labs/williamtsalter__fielddinomicroscopy","name":"Dino-Lite AM7515 USB microscope (dnx64.DNX64)","device_id":"mhs://localhost/dino-lite","track":"labs","category":"Optics and microscopy","topic":null,"kind":"instrument.microscope","vendor":"Dino-Lite","model":"AM7515 series USB digital microscope","mode":"hardware","risk":"R1","family":"python-object","role":"device-driver","intro":"Dino-Lite AM7515 USB microscope (dnx64.DNX64), adapted from williamtsalter/fielddinomicroscopy. It reads `device_name` and `device_id`; sets `exposure_value`, `ae_target` and `auto_exposure`; runs `set_led`, `set_flc_level` and `switch_off_illumination`. `set_led`: turn the microscope LED on or off (SetLEDState). A hardware driver: the market serves its fake backend, so no instrument is needed.","measures":["device_name","device_id"],"adjusts":["exposure_value","ae_target","auto_exposure"],"actions":[{"name":"set_led","description":"Turn the microscope LED on or off (SetLEDState)"},{"name":"set_flc_level","description":"Set the FLC level (SetFLCLevel)"},{"name":"switch_off_illumination","description":"Turn the LED off (SetLEDState 0), the safe state; it takes no input"}],"tags":["microscope","dino-lite","usb","led","exposure","fielddino"],"backends":["fake","hardware"],"served_backend":"fake","evidence":"contract_checked","upstream":{"repo_url":"https://github.com/williamtsalter/fielddinomicroscopy","commit":"e67297f1822dbe3b5a385a41828fb5064cdf8b25","license":"NOASSERTION"},"stars":12,"install":{"openai4s":"openai4s lab add labs/williamtsalter__fielddinomicroscopy","mhs":"mhs serve labs/williamtsalter__fielddinomicroscopy --port 7400","mcp":"mhs serve labs/williamtsalter__fielddinomicroscopy --mcp"}},
{"id":"labs/xylophoneengine__pycss45","name":"Gigahertz-Optik CSS45 spectral sensor (pycss45.CSS45)","device_id":"mhs://localhost/css45","track":"labs","category":"Spectroscopy","topic":null,"kind":"instrument.spectrometer","vendor":"Gigahertz-Optik","model":"CSS45 (MSC15 family)","mode":"hardware","risk":"R0","family":"python-object","role":"device-driver","intro":"Gigahertz-Optik CSS45 spectral sensor (pycss45.CSS45), adapted from xylophoneengine/pycss45. It reads `serial_number`, `firmware_version`, `status`, `temperature` and 7 more; runs `measure_spectrum`. `measure_spectrum`: acquire an optical or mass spectrum over a declared wavelength or mass range and return the axis and intensity arrays, or an artifact reference for large spectra. A hardware driver: the market serves its fake backend, so no instrument is needed.","measures":["serial_number","firmware_version","status","temperature","cct","photopic","par","radiometric_unit","last_integration_time","wavelength_start","wavelength_end"],"adjusts":[],"actions":[{"name":"measure_spectrum","description":"Acquire an optical or mass spectrum over a declared wavelength or mass range and return the axis and intensity arrays, or an artifact reference for large spectra."}],"tags":["spectrometer","spectral-sensor","optical","gigahertz-optik","css45","msc15"],"backends":["fake","hardware"],"served_backend":"fake","evidence":"contract_checked","upstream":{"repo_url":"https://github.com/xylophoneengine/pycss45","commit":"e4364bae4d889efd579ffb3c4947099405becb27","license":"MIT"},"stars":1,"install":{"openai4s":"openai4s lab add labs/xylophoneengine__pycss45","mhs":"mhs serve labs/xylophoneengine__pycss45 --port 7400","mcp":"mhs serve labs/xylophoneengine__pycss45 --mcp"}},
{"id":"labs/xzf89718__oscilloscope_scripts","name":"Tektronix TBS2000B oscilloscope","device_id":"mhs://localhost/tbs2000b","track":"labs","category":"Electronics and measurement","topic":null,"kind":"instrument","vendor":"Tektronix","model":"TBS2000B","mode":"hardware","risk":"R1","family":"scpi","role":"device-driver","intro":"Tektronix TBS2000B oscilloscope, adapted from xzf89718/oscilloscope_scripts. It reads `frequency`, `amplitude` and `high`; sets `channel`. A hardware driver: the market serves its fake backend, so no instrument is needed.","measures":["frequency","amplitude","high"],"adjusts":["channel"],"actions":[],"tags":["oscilloscope","tektronix","tbs2000b","scpi","measurement"],"backends":["fake","hardware"],"served_backend":"fake","evidence":"contract_checked","upstream":{"repo_url":"https://github.com/xzf89718/oscilloscope_scripts","commit":"105e6021650f5b4f6557e733451612e4696a860d","license":"MIT"},"stars":8,"install":{"openai4s":"openai4s lab add labs/xzf89718__oscilloscope_scripts","mhs":"mhs serve labs/xzf89718__oscilloscope_scripts --port 7400","mcp":"mhs serve labs/xzf89718__oscilloscope_scripts --mcp"}},
{"id":"labs/ymzds__niscope-mcp","name":"NI PXIe oscilloscope (niscope DirectBackend)","device_id":"mhs://localhost/niscope","track":"labs","category":"Electronics and measurement","topic":null,"kind":"instrument","vendor":"National Instruments","model":"PXIe-5160 / 5164 / 5110","mode":"hardware","risk":"R1","family":"python-object","role":"device-driver","intro":"NI PXIe oscilloscope (niscope DirectBackend), adapted from ymzds/niscope-mcp. It reads `device_model`; sets `channel_enabled`, `vertical_range`, `vertical_offset`, `vertical_coupling` and 7 more; runs `measure_waveform` and `auto_setup`. `measure_waveform`: acquire one channel and return its scalar waveform measurements. A hardware driver: the market serves its fake backend, so no instrument is needed.","measures":["device_model"],"adjusts":["channel_enabled","vertical_range","vertical_offset","vertical_coupling","probe_attenuation","input_impedance","sample_rate","record_length","trigger_source","trigger_level","trigger_slope"],"actions":[{"name":"measure_waveform","description":"Acquire one channel and return its scalar waveform measurements"},{"name":"auto_setup","description":"Run the native oscilloscope auto setup (Autoset)"}],"tags":["oscilloscope","ni-scope","pxie","waveform","instrument"],"backends":["fake","hardware"],"served_backend":"fake","evidence":"contract_checked","upstream":{"repo_url":"https://github.com/ymzds/niscope-mcp","commit":"75a3a09bb6eab9b1b0dd9e48ecdb30e93bbac6ed","license":"MIT"},"stars":0,"install":{"openai4s":"openai4s lab add labs/ymzds__niscope-mcp","mhs":"mhs serve labs/ymzds__niscope-mcp --port 7400","mcp":"mhs serve labs/ymzds__niscope-mcp --mcp"}},
{"id":"labs/yongxb__keithley-smu-controls","name":"Keithley 2450 source-measure unit","device_id":"mhs://localhost/keithley2450","track":"labs","category":"Electronics and measurement","topic":null,"kind":"instrument.smu","vendor":"Keithley Instruments","model":"Keithley 2450 source-measure unit","mode":"hardware","risk":"R3","family":"scpi","role":"device-driver","intro":"Keithley 2450 source-measure unit, adapted from yongxb/keithley-smu-controls. It reads `voltage` and `current`; sets `source_current`, `compliance_voltage` and `output`; runs `safe_state`. `safe_state`: disable the source output and set the source current to zero. A hardware driver: the market serves its fake backend, so no instrument is needed.","measures":["voltage","current"],"adjusts":["source_current","compliance_voltage","output"],"actions":[{"name":"safe_state","description":"Disable the source output and set the source current to zero"}],"tags":["keithley","2450","source-measure unit","smu","tsp","visa"],"backends":["fake"],"served_backend":"fake","evidence":"contract_checked","upstream":{"repo_url":"https://github.com/yongxb/keithley-smu-controls","commit":"6afb567c29125beb133facbbe62bb88c37d8529f","license":"NOASSERTION"},"stars":2,"install":{"openai4s":"openai4s lab add labs/yongxb__keithley-smu-controls","mhs":"mhs serve labs/yongxb__keithley-smu-controls --port 7400","mcp":"mhs serve labs/yongxb__keithley-smu-controls --mcp"}},
{"id":"labs/yuanxun-yx__syrpp","name":"New Era SyringeONE NE-1000 syringe pump (syrpp.SyrPump)","device_id":"mhs://localhost/syrpump","track":"labs","category":"Liquid handling and fluidics","topic":null,"kind":"fluid.pump","vendor":"New Era Instruments","model":"SyringeONE NE-1000","mode":"hardware","risk":"R2","family":"python-object","role":"device-driver","intro":"New Era SyringeONE NE-1000 syringe pump (syrpp.SyrPump), adapted from yuanxun-yx/syrpp. It reads `status`, `firmware_version`, `volume` and `volume_dispensed`; sets `diameter`, `phase`, `phase_function`, `pumping_rate` and 5 more; runs `start_program` and `stop_program`. `start_program`: start the configured pumping program (RUN) and report the pump prompt afterwards. A hardware driver: the market serves its fake backend, so no instrument is needed.","measures":["status","firmware_version","volume","volume_dispensed"],"adjusts":["diameter","phase","phase_function","pumping_rate","direction","alarm","power_fail","key_beep","buzzer"],"actions":[{"name":"start_program","description":"Start the configured pumping program (RUN) and report the pump prompt afterwards"},{"name":"stop_program","description":"Stop the pumping program (STP); the native stop and the safe-state action"}],"tags":["syringe-pump","serial","infuse","withdraw","pump"],"backends":["fake","hardware"],"served_backend":"fake","evidence":"contract_checked","upstream":{"repo_url":"https://github.com/yuanxun-yx/syrpp","commit":"ae784882903cd9d1b72162835902dca0074b2e14","license":"MIT"},"stars":0,"install":{"openai4s":"openai4s lab add labs/yuanxun-yx__syrpp","mhs":"mhs serve labs/yuanxun-yx__syrpp --port 7400","mcp":"mhs serve labs/yuanxun-yx__syrpp --mcp"}},
{"id":"labs/zhangxp93__pyinsts","name":"Rohde & Schwarz FSV3030 spectrum analyzer","device_id":"mhs://localhost/fsv3030","track":"labs","category":"Electronics and measurement","topic":null,"kind":"instrument","vendor":"Rohde & Schwarz","model":"FSV3030 spectrum analyzer","mode":"hardware","risk":"R1","family":"scpi","role":"device-driver","intro":"Rohde & Schwarz FSV3030 spectrum analyzer, adapted from zhangxp93/pyinsts. It reads `marker_level`, `delta_marker_frequency` and `delta_marker_level`; sets `center_frequency`, `span`, `marker_frequency`, `error_display` and 1 more. A hardware driver: the market serves its fake backend, so no instrument is needed.","measures":["marker_level","delta_marker_frequency","delta_marker_level"],"adjusts":["center_frequency","span","marker_frequency","error_display","continuous_peak"],"actions":[],"tags":["spectrum analyzer","fsv3030","rohde schwarz","scpi"],"backends":["fake"],"served_backend":"fake","evidence":"contract_checked","upstream":{"repo_url":"https://github.com/zhangxp93/pyinsts","commit":"3bcaa2acbea14bb3ed30de140808e9d0de70c96a","license":"MIT"},"stars":14,"install":{"openai4s":"openai4s lab add labs/zhangxp93__pyinsts","mhs":"mhs serve labs/zhangxp93__pyinsts --port 7400","mcp":"mhs serve labs/zhangxp93__pyinsts --mcp"}},
{"id":"labs/zhinst__zhinst-qcodes","name":"Zurich Instruments PQSC trigger distributor (zhinst-qcodes)","device_id":"mhs://localhost/zhinst-pqsc","track":"labs","category":"Electronics and measurement","topic":null,"kind":"instrument","vendor":"Zurich Instruments","model":"PQSC","mode":"hardware","risk":"R1","family":"python-object","role":"device-driver","intro":"Zurich Instruments PQSC trigger distributor (zhinst-qcodes), adapted from zhinst/zhinst-qcodes. It reads `device_type`, `serial`, `firmware`, `streaming_nodes` and 1 more; runs `trigger` and `wait_done`. `trigger`: arm, run, stop or factory-reset the PQSC trigger generation. A hardware driver: the market serves its fake backend, so no instrument is needed.","measures":["device_type","serial","firmware","streaming_nodes","ref_clock_locked"],"adjusts":[],"actions":[{"name":"trigger","description":"Arm, run, stop or factory-reset the PQSC trigger generation"},{"name":"wait_done","description":"Wait until trigger generation and feedback processing is done"}],"tags":["qcodes","zhinst","labone","pqsc","trigger-distributor","zsync"],"backends":["fake","hardware"],"served_backend":"fake","evidence":"contract_checked","upstream":{"repo_url":"https://github.com/zhinst/zhinst-qcodes","commit":"042dd17a5bf492cc4c573e465b2bc399e68d3203","license":"MIT"},"stars":11,"install":{"openai4s":"openai4s lab add labs/zhinst__zhinst-qcodes","mhs":"mhs serve labs/zhinst__zhinst-qcodes --port 7400","mcp":"mhs serve labs/zhinst__zhinst-qcodes --mcp"}},
{"id":"robots/6-robot__wpr_simulation","name":"WPR Gazebo mobile-robot simulation","device_id":"mhs://localhost/wpr-simulation","track":"robots","category":"Simulation","topic":"mobile robots","kind":"world.sim","vendor":"6-robot","model":"WPRPlugin (libwpr_plugin.so) and wpb_home_sim","mode":"simulated","risk":"R2","family":"ros","role":"sim-env","intro":"WPR Gazebo mobile-robot simulation, adapted from 6-robot/wpr_simulation. It reads `read_odometry` and `read_pose_diff`; runs `publish_cmd_vel` and `resume_simulation`. `publish_cmd_vel`: publish one geometry_msgs/Twist velocity setpoint on /cmd_vel. The WPRPlugin callback stores the components, also while the world is paused; the receipt is transmission evidence and the values sent, not motion or stopping. A simulator: the market serves it with a stand-in that needs no simulator install.","measures":["read_odometry","read_pose_diff"],"adjusts":[],"actions":[{"name":"publish_cmd_vel","description":"Publish one geometry_msgs/Twist velocity setpoint on /cmd_vel. The WPRPlugin callback stores the components, also while the world is paused; the receipt is transmission evidence and the values sent, not motion or stopping."},{"name":"resume_simulation","description":"The declared re-enable after a safety reset: publish a zero Twist on /cmd_vel, then unpause the Gazebo world with /gazebo/unpause_physics. WPRPlugin keeps the last cmd_vel it stored and applies it as soon as the world runs; the zero replaces it, but it is an unacknowledged publication, so a stored command can still act for a few world steps."}],"tags":["ros","ros1","simulation","gazebo","wpr","wpb-home","cmd-vel","odometry"],"backends":["fake"],"served_backend":"fake","evidence":"contract_checked","upstream":{"repo_url":"https://github.com/6-robot/wpr_simulation","commit":"9c2861944205b087e55482d46911cb1819532be6","license":"GPL-3.0"},"stars":1031,"install":{"openai4s":"openai4s lab add robots/6-robot__wpr_simulation","mhs":"mhs serve robots/6-robot__wpr_simulation --port 7400","mcp":"mhs serve robots/6-robot__wpr_simulation --mcp"}},
{"id":"robots/aalmuzairee__squint","name":"Squint SO-101 LiftCube (ManiSkill)","device_id":"mhs://localhost/so101-lift-cube","track":"robots","category":"Simulation","topic":null,"kind":"world.sim","vendor":"Abdulaziz Almuzairee","model":"SO101LiftCube-v1","mode":"simulated","risk":"R0","family":"gymnasium","role":"sim-env","intro":"Squint SO-101 LiftCube (ManiSkill), adapted from aalmuzairee/squint. It reads `observation`, `reward`, `terminated`, `truncated` and 4 more; runs `step`, `reset` and `seed`. `step`: advance the simulated world by a bounded number of fixed timesteps, optionally applying an action for each step, and return the resulting observation and terminal flags. A simulator: the market serves it with a stand-in that needs no simulator install.","measures":["observation","reward","terminated","truncated","tick","episode","seed","info"],"adjusts":[],"actions":[{"name":"step","description":"Advance the simulated world by a bounded number of fixed timesteps, optionally applying an action for each step, and return the resulting observation and terminal flags."},{"name":"reset","description":"Reset the simulated world to a scenario start state and return the initial observation. When a seed is supplied the endpoint records it in the receipt; otherwise the endpoint's declared default seed applies."},{"name":"seed","description":"Set the seed used by the simulated world's random number generators for subsequent steps, without resetting the world. The accepted seed is echoed in the receipt."}],"tags":["so101","manipulation","lift","reinforcement-learning","simulation","maniskill","gymnasium"],"backends":["fake"],"served_backend":"fake","evidence":"contract_checked","upstream":{"repo_url":"https://github.com/aalmuzairee/squint","commit":"7086fd516eda7df585a5261c541e0670a6d916b4","license":"MIT"},"stars":98,"install":{"openai4s":"openai4s lab add robots/aalmuzairee__squint","mhs":"mhs serve robots/aalmuzairee__squint --port 7400","mcp":"mhs serve robots/aalmuzairee__squint --mcp"}},
{"id":"robots/abizovnuralem__go2_omniverse","name":"Unitree Go2 velocity task in Isaac Sim / Isaac Lab (go2_omniverse)","device_id":"mhs://localhost/go2-omniverse","track":"robots","category":"Simulation","topic":"legged robots","kind":"world.sim","vendor":"abizovnuralem","model":"go2_omniverse","mode":"simulated","risk":"R0","family":"gymnasium","role":"sim-env","intro":"Unitree Go2 velocity task in Isaac Sim / Isaac Lab (go2_omniverse), adapted from abizovnuralem/go2_omniverse. It reads `observation`, `reward`, `terminated`, `truncated` and 4 more; runs `step`, `reset` and `seed`. `step`: advance the simulated world by a bounded number of fixed timesteps, optionally applying an action for each step, and return the resulting observation and terminal flags. A simulator: the market serves it with a stand-in that needs no simulator install.","measures":["observation","reward","terminated","truncated","tick","episode","seed","info"],"adjusts":[],"actions":[{"name":"step","description":"Advance the simulated world by a bounded number of fixed timesteps, optionally applying an action for each step, and return the resulting observation and terminal flags."},{"name":"reset","description":"Reset the simulated world to a scenario start state and return the initial observation. When a seed is supplied the endpoint records it in the receipt; otherwise the endpoint's declared default seed applies."},{"name":"seed","description":"Set the seed used by the simulated world's random number generators for subsequent steps, without resetting the world. The accepted seed is echoed in the receipt."}],"tags":["unitree","go2","quadruped","locomotion","isaac-sim","isaac-lab","reinforcement-learning","simulation","gymnasium"],"backends":["fake"],"served_backend":"fake","evidence":"contract_checked","upstream":{"repo_url":"https://github.com/abizovnuralem/go2_omniverse","commit":"db18970d66fa77a68bf0976b0f7c183825cd2292","license":"BSD-2-Clause"},"stars":1082,"install":{"openai4s":"openai4s lab add robots/abizovnuralem__go2_omniverse","mhs":"mhs serve robots/abizovnuralem__go2_omniverse --port 7400","mcp":"mhs serve robots/abizovnuralem__go2_omniverse --mcp"}},
{"id":"robots/abmorobotics__rlroverlab","name":"RLRoverLab AAU Rover navigation (Isaac Lab)","device_id":"mhs://localhost/rlroverlab","track":"robots","category":"Simulation","topic":null,"kind":"world.sim","vendor":"abmoRobotics","model":"AAURoverEnv-v0","mode":"simulated","risk":"R0","family":"gymnasium","role":"sim-env","intro":"RLRoverLab AAU Rover navigation (Isaac Lab), adapted from abmorobotics/rlroverlab. It reads `observation`, `reward`, `terminated`, `truncated` and 4 more; runs `step`, `reset` and `seed`. `step`: advance the simulated world by a bounded number of fixed timesteps, optionally applying an action for each step, and return the resulting observation and terminal flags. A simulator: the market serves it with a stand-in that needs no simulator install.","measures":["observation","reward","terminated","truncated","tick","episode","seed","info"],"adjusts":[],"actions":[{"name":"step","description":"Advance the simulated world by a bounded number of fixed timesteps, optionally applying an action for each step, and return the resulting observation and terminal flags."},{"name":"reset","description":"Reset the simulated world to a scenario start state and return the initial observation. When a seed is supplied the endpoint records it in the receipt; otherwise the endpoint's declared default seed applies."},{"name":"seed","description":"Set the seed used by the simulated world's random number generators for subsequent steps, without resetting the world. The accepted seed is echoed in the receipt."}],"tags":["aau-rover","navigation","reinforcement-learning","isaac-lab","simulation","gymnasium"],"backends":["fake"],"served_backend":"fake","evidence":"contract_checked","upstream":{"repo_url":"https://github.com/abmorobotics/rlroverlab","commit":"578906ad5c3383087aeec038be82b87e05d4ee2c","license":"Apache-2.0"},"stars":124,"install":{"openai4s":"openai4s lab add robots/abmorobotics__rlroverlab","mhs":"mhs serve robots/abmorobotics__rlroverlab --port 7400","mcp":"mhs serve robots/abmorobotics__rlroverlab --mcp"}},
{"id":"robots/abrar2652__imitation-learning-aloha","name":"Gym Aloha bimanual insertion (AlohaInsertion-v0)","device_id":"mhs://localhost/aloha-insertion","track":"robots","category":"Simulation","topic":"robot arm manipulation","kind":"world.sim","vendor":"abrar2652","model":"gym_aloha/AlohaInsertion-v0","mode":"simulated","risk":"R0","family":"gymnasium","role":"sim-env","intro":"Gym Aloha bimanual insertion (AlohaInsertion-v0), adapted from abrar2652/imitation-learning-aloha. It reads `observation`, `reward`, `terminated`, `truncated` and 4 more; runs `step`, `reset` and `seed`. `step`: advance the simulated world by a bounded number of fixed timesteps, optionally applying an action for each step, and return the resulting observation and terminal flags. A simulator: the market serves it with a stand-in that needs no simulator install.","measures":["observation","reward","terminated","truncated","tick","episode","seed","info"],"adjusts":[],"actions":[{"name":"step","description":"Advance the simulated world by a bounded number of fixed timesteps, optionally applying an action for each step, and return the resulting observation and terminal flags."},{"name":"reset","description":"Reset the simulated world to a scenario start state and return the initial observation. When a seed is supplied the endpoint records it in the receipt; otherwise the endpoint's declared default seed applies."},{"name":"seed","description":"Set the seed used by the simulated world's random number generators for subsequent steps, without resetting the world. The accepted seed is echoed in the receipt."}],"tags":["aloha","bimanual","insertion","manipulation","imitation-learning","simulation","gymnasium"],"backends":["fake"],"served_backend":"fake","evidence":"contract_checked","upstream":{"repo_url":"https://github.com/abrar2652/imitation-learning-aloha","commit":"4180b39b634420e614be283c9336c1a62e307499","license":"MIT"},"stars":4,"install":{"openai4s":"openai4s lab add robots/abrar2652__imitation-learning-aloha","mhs":"mhs serve robots/abrar2652__imitation-learning-aloha --port 7400","mcp":"mhs serve robots/abrar2652__imitation-learning-aloha --mcp"}},
{"id":"robots/ac-93__tactile_gym","name":"tactile_gym edge_follow-v0 (PyBullet simulation)","device_id":"mhs://localhost/tactile_edge_follow","track":"robots","category":"Simulation","topic":null,"kind":"world.sim","vendor":"ac-93","model":"tactile_gym edge_follow-v0","mode":"simulated","risk":"R1","family":"gymnasium","role":"sim-env","intro":"tactile_gym edge_follow-v0 (PyBullet simulation), adapted from ac-93/tactile_gym. It reads `observation`, `reward`, `terminated`, `truncated` and 4 more; runs `step`, `reset` and `seed`. `step`: advance the simulated world by a bounded number of fixed timesteps, optionally applying an action for each step, and return the resulting observation and terminal flags. A simulator: the market serves it with a stand-in that needs no simulator install.","measures":["observation","reward","terminated","truncated","tick","episode","seed","info"],"adjusts":[],"actions":[{"name":"step","description":"Advance the simulated world by a bounded number of fixed timesteps, optionally applying an action for each step, and return the resulting observation and terminal flags."},{"name":"reset","description":"Reset the simulated world to a scenario start state and return the initial observation. When a seed is supplied the endpoint records it in the receipt; otherwise the endpoint's declared default seed applies."},{"name":"seed","description":"Set the seed used by the simulated world's random number generators for subsequent steps, without resetting the world. The accepted seed is echoed in the receipt."}],"tags":["tactile","edge-follow","pybullet","robot-arm","exploration","reinforcement-learning","simulation","gymnasium"],"backends":["fake"],"served_backend":"fake","evidence":"contract_checked","upstream":{"repo_url":"https://github.com/ac-93/tactile_gym","commit":"28417ebaf52ac325200c4fbd351cd13c6a466f7d","license":"GPL-3.0"},"stars":185,"install":{"openai4s":"openai4s lab add robots/ac-93__tactile_gym","mhs":"mhs serve robots/ac-93__tactile_gym --port 7400","mcp":"mhs serve robots/ac-93__tactile_gym --mcp"}},
{"id":"robots/acutronicrobotics__gym-gazebo2","name":"gym-gazebo2 MARA simulated arm","device_id":"mhs://localhost/gym-gazebo2-mara","track":"robots","category":"Simulation","topic":"general robot platforms","kind":"world.sim","vendor":"Acutronic Robotics","model":"MARA-v0","mode":"simulated","risk":"R2","family":"gymnasium","role":"sim-env","intro":"gym-gazebo2 MARA simulated arm, adapted from acutronicrobotics/gym-gazebo2. It reads `observation`, `reward`, `terminated`, `truncated` and 4 more; runs `step`, `reset` and `seed`. `step`: advance the simulated world by a bounded number of fixed timesteps, optionally applying an action for each step, and return the resulting observation and terminal flags. A simulator: the market serves it with a stand-in that needs no simulator install.","measures":["observation","reward","terminated","truncated","tick","episode","seed","info"],"adjusts":[],"actions":[{"name":"step","description":"Advance the simulated world by a bounded number of fixed timesteps, optionally applying an action for each step, and return the resulting observation and terminal flags."},{"name":"reset","description":"Reset the simulated world to a scenario start state and return the initial observation. When a seed is supplied the endpoint records it in the receipt; otherwise the endpoint's declared default seed applies."},{"name":"seed","description":"Set the seed used by the simulated world's random number generators for subsequent steps, without resetting the world. The accepted seed is echoed in the receipt."}],"tags":["gym-gazebo2","mara","robot-arm","ros2","gazebo","simulation","gymnasium"],"backends":["fake"],"served_backend":"fake","evidence":"contract_checked","upstream":{"repo_url":"https://github.com/acutronicrobotics/gym-gazebo2","commit":"545e203e07895927fd7aae66596d83d97ee89fe5","license":"Apache-2.0"},"stars":483,"install":{"openai4s":"openai4s lab add robots/acutronicrobotics__gym-gazebo2","mhs":"mhs serve robots/acutronicrobotics__gym-gazebo2 --port 7400","mcp":"mhs serve robots/acutronicrobotics__gym-gazebo2 --mcp"}},
{"id":"robots/adipandas__gym_multirotor","name":"gym_multirotor QuadrotorPlusHoverEnv-v0 (MuJoCo quadrotor)","device_id":"mhs://localhost/quadrotor-plus-hover","track":"robots","category":"Simulation","topic":"UAVs","kind":"world.sim","vendor":"adipandas","model":"QuadrotorPlusHoverEnv-v0","mode":"simulated","risk":"R0","family":"gymnasium","role":"sim-env","intro":"gym_multirotor QuadrotorPlusHoverEnv-v0 (MuJoCo quadrotor), adapted from adipandas/gym_multirotor. It reads `observation`, `reward`, `terminated`, `truncated` and 4 more; runs `step`, `reset` and `seed`. `step`: advance the simulated world by a bounded number of fixed timesteps, optionally applying an action for each step, and return the resulting observation and terminal flags. A simulator: the market serves it with a stand-in that needs no simulator install.","measures":["observation","reward","terminated","truncated","tick","episode","seed","info"],"adjusts":[],"actions":[{"name":"step","description":"Advance the simulated world by a bounded number of fixed timesteps, optionally applying an action for each step, and return the resulting observation and terminal flags."},{"name":"reset","description":"Reset the simulated world to a scenario start state and return the initial observation. When a seed is supplied the endpoint records it in the receipt; otherwise the endpoint's declared default seed applies."},{"name":"seed","description":"Set the seed used by the simulated world's random number generators for subsequent steps, without resetting the world. The accepted seed is echoed in the receipt."}],"tags":["quadrotor","uav","mujoco","hover","reinforcement-learning","simulation","gym"],"backends":["fake"],"served_backend":"fake","evidence":"contract_checked","upstream":{"repo_url":"https://github.com/adipandas/gym_multirotor","commit":"c13535254b6f6ecc84a32e49320cd989b54304d5","license":"MIT"},"stars":60,"install":{"openai4s":"openai4s lab add robots/adipandas__gym_multirotor","mhs":"mhs serve robots/adipandas__gym_multirotor --port 7400","mcp":"mhs serve robots/adipandas__gym_multirotor --mcp"}},
{"id":"robots/adlink-ros__ydlidar_ros2","name":"YDLIDAR ROS 2 laser scanner","device_id":"mhs://localhost/ydlidar","track":"robots","category":"Sensors and cameras","topic":null,"kind":"sensor.depth","vendor":"EAI","model":null,"mode":"hardware","risk":"R0","family":"ros","role":"device-driver","intro":"YDLIDAR ROS 2 laser scanner, adapted from adlink-ros/ydlidar_ros2. It reads `read_scan`. A hardware driver: the market serves its fake backend, so no instrument is needed.","measures":["read_scan"],"adjusts":[],"actions":[],"tags":["ros","ros2","lidar","laser-scan","ydlidar","sensor"],"backends":["fake"],"served_backend":"fake","evidence":"contract_checked","upstream":{"repo_url":"https://github.com/adlink-ros/ydlidar_ros2","commit":"482c76acf5c0a563909e1249051c751011ae74c1","license":"NOASSERTION"},"stars":0,"install":{"openai4s":"openai4s lab add robots/adlink-ros__ydlidar_ros2","mhs":"mhs serve robots/adlink-ros__ydlidar_ros2 --port 7400","mcp":"mhs serve robots/adlink-ros__ydlidar_ros2 --mcp"}},
{"id":"robots/agilexrobotics__piper_isaac_sim","name":"AgileX PiPER Isaac Sim MJCF","device_id":"mhs://localhost/piper-isaac-sim","track":"robots","category":"Simulation","topic":"robot arm manipulation","kind":"world.sim","vendor":"AgileX Robotics","model":"PiPER","mode":"simulated","risk":"R0","family":"mujoco","role":"twin-candidate","intro":"AgileX PiPER Isaac Sim MJCF, adapted from agilexrobotics/piper_isaac_sim. It reads `time_ms`, `qpos`, `qvel`, `ctrl` and 4 more; runs `step` and `reset`. `step`: advance the simulated world by a bounded number of fixed timesteps, optionally applying an action for each step, and return the resulting observation and terminal flags. A simulator: the market serves it with a stand-in that needs no simulator install.","measures":["time_ms","qpos","qvel","ctrl","tick","timestep_ms","seed","native_checkpoint"],"adjusts":[],"actions":[{"name":"step","description":"Advance the simulated world by a bounded number of fixed timesteps, optionally applying an action for each step, and return the resulting observation and terminal flags."},{"name":"reset","description":"Reset the simulated world to a scenario start state and return the initial observation. When a seed is supplied the endpoint records it in the receipt; otherwise the endpoint's declared default seed applies."}],"tags":["agilex","piper","isaac-sim","mujoco","robot","arm","description","simulation"],"backends":["fake"],"served_backend":"fake","evidence":"contract_checked","upstream":{"repo_url":"https://github.com/agilexrobotics/piper_isaac_sim","commit":"8e1f88fdb7afca49c40e9a0c1c01cc588e86f0d2","license":"NOASSERTION"},"stars":118,"install":{"openai4s":"openai4s lab add robots/agilexrobotics__piper_isaac_sim","mhs":"mhs serve robots/agilexrobotics__piper_isaac_sim --port 7400","mcp":"mhs serve robots/agilexrobotics__piper_isaac_sim --mcp"}},
{"id":"robots/agilexrobotics__ugv_gazebo_sim","name":"AgileX Scout V2 Gazebo empty world","device_id":"mhs://localhost/scout-v2-gazebo","track":"robots","category":"Simulation","topic":"mobile robots","kind":"world.sim","vendor":"AgileX Robotics","model":"Scout V2 (scout_empty_world.launch)","mode":"simulated","risk":"R2","family":"ros","role":"sim-env","intro":"AgileX Scout V2 Gazebo empty world, adapted from agilexrobotics/ugv_gazebo_sim. It runs `publish_cmd_vel`. `publish_cmd_vel`: publish geometry_msgs/Twist linear.x and angular.z on /cmd_vel. TwistCmdCallback converts them to four Float64 wheel commands and stores no Twist. The receipt is transmission evidence and the values sent, not a measured velocity and not a cleared controller. A simulator: the market serves it with a stand-in that needs no simulator install.","measures":[],"adjusts":[],"actions":[{"name":"publish_cmd_vel","description":"Publish geometry_msgs/Twist linear.x and angular.z on /cmd_vel. TwistCmdCallback converts them to four Float64 wheel commands and stores no Twist. The receipt is transmission evidence and the values sent, not a measured velocity and not a cleared controller."}],"tags":["ros","ros1","simulation","gazebo","scout","scout-v2","cmd-vel"],"backends":["fake"],"served_backend":"fake","evidence":"contract_checked","upstream":{"repo_url":"https://github.com/agilexrobotics/ugv_gazebo_sim","commit":"27633a956c845903ee630538afeb17fe70afdd84","license":"NOASSERTION"},"stars":330,"install":{"openai4s":"openai4s lab add robots/agilexrobotics__ugv_gazebo_sim","mhs":"mhs serve robots/agilexrobotics__ugv_gazebo_sim --port 7400","mcp":"mhs serve robots/agilexrobotics__ugv_gazebo_sim --mcp"}},
{"id":"robots/aicrowd__real_robots","name":"REALRobot2020 Kuka iiwa tabletop (PyBullet simulation)","device_id":"mhs://localhost/real-robots","track":"robots","category":"Simulation","topic":"robot arm manipulation","kind":"world.sim","vendor":"AIcrowd","model":"REALRobot2020","mode":"simulated","risk":"R0","family":"gymnasium","role":"sim-env","intro":"REALRobot2020 Kuka iiwa tabletop (PyBullet simulation), adapted from aicrowd/real_robots. It reads `observation`, `reward`, `terminated`, `truncated` and 4 more; runs `step`, `reset` and `seed`. `step`: advance the simulated world by a bounded number of fixed timesteps, optionally applying an action for each step, and return the resulting observation and terminal flags. A simulator: the market serves it with a stand-in that needs no simulator install.","measures":["observation","reward","terminated","truncated","tick","episode","seed","info"],"adjusts":[],"actions":[{"name":"step","description":"Advance the simulated world by a bounded number of fixed timesteps, optionally applying an action for each step, and return the resulting observation and terminal flags."},{"name":"reset","description":"Reset the simulated world to a scenario start state and return the initial observation. When a seed is supplied the endpoint records it in the receipt; otherwise the endpoint's declared default seed applies."},{"name":"seed","description":"Set the seed used by the simulated world's random number generators for subsequent steps, without resetting the world. The accepted seed is echoed in the receipt."}],"tags":["kuka","iiwa","manipulation","pybullet","reinforcement-learning","simulation","gym"],"backends":["fake"],"served_backend":"fake","evidence":"contract_checked","upstream":{"repo_url":"https://github.com/aicrowd/real_robots","commit":"6dd5b70bad14426483e2d3ee29b3d8708d34e1ba","license":"MIT"},"stars":34,"install":{"openai4s":"openai4s lab add robots/aicrowd__real_robots","mhs":"mhs serve robots/aicrowd__real_robots --port 7400","mcp":"mhs serve robots/aicrowd__real_robots --mcp"}},
{"id":"robots/akselov__digital-twin-opcua","name":"KUKA KR 16-2 via KUKAVARPROXY (KUKAVARPROXY_communication.KUKA)","device_id":"mhs://localhost/kuka-kr16-2","track":"robots","category":"Robot arms and grippers","topic":null,"kind":"robot.arm","vendor":"KUKA","model":"KR 16-2 on a KR C4 controller (KUKAVARPROXY)","mode":"hardware","risk":"R2","family":"python-object","role":"device-driver","intro":"KUKA KR 16-2 via KUKAVARPROXY (KUKAVARPROXY_communication.KUKA), adapted from akselov/digital-twin-opcua. It reads `joint_positions`, `motor_velocities`, `motor_torques` and `motor_currents`; runs `move_joints`. `move_joints`: write the six axis values to TARGET_AXIS as an E6AXIS string; the KRL program moves to it. A hardware driver: the market serves its fake backend, so no instrument is needed.","measures":["joint_positions","motor_velocities","motor_torques","motor_currents"],"adjusts":[],"actions":[{"name":"move_joints","description":"Write the six axis values to TARGET_AXIS as an E6AXIS string; the KRL program moves to it"}],"tags":["kuka","kuka kr 16-2","kr c4","kukavarproxy","kvp","robot arm","six axes"],"backends":["fake","hardware"],"served_backend":"fake","evidence":"contract_checked","upstream":{"repo_url":"https://github.com/akselov/digital-twin-opcua","commit":"adc30f46466595a278f87f23a304a3630deca4da","license":"NOASSERTION"},"stars":127,"install":{"openai4s":"openai4s lab add robots/akselov__digital-twin-opcua","mhs":"mhs serve robots/akselov__digital-twin-opcua --port 7400","mcp":"mhs serve robots/akselov__digital-twin-opcua --mcp"}},
{"id":"robots/alexanderkeijzer__ros-gym-env-webots","name":"Webots gym_env Panda bridge","device_id":"mhs://localhost/ros-gym-env-webots","track":"robots","category":"Simulation","topic":"mobile robots","kind":"world.sim","vendor":"alexanderkeijzer","model":"Panda in Webots","mode":"simulated","risk":"R2","family":"ros","role":"sim-env","intro":"Webots gym_env Panda bridge, adapted from alexanderkeijzer/ros-gym-env-webots. It reads `read_joint_positions` and `read_reward`; runs `act_and_step`, `step_simulation` and `reset_simulation`. `act_and_step`: publish one normalized nine-joint action vector, request one Webots time_step and read the joint positions after it; a failure after the publication is an unknown outcome, and the observation does not prove that the node applied the action before the step. A simulator: the market serves it with a stand-in that needs no simulator install.","measures":["read_joint_positions","read_reward"],"adjusts":[],"actions":[{"name":"act_and_step","description":"Publish one normalized nine-joint action vector, request one Webots time_step and read the joint positions after it; a failure after the publication is an unknown outcome, and the observation does not prove that the node applied the action before the step"},{"name":"step_simulation","description":"Request one Webots robot/time_step advance through the gym_env step service"},{"name":"reset_simulation","description":"Reset the Webots simulation through the gym_env reset service"}],"tags":["ros","ros1","webots","simulation","gym","panda","robot-arm","joint-action"],"backends":["fake"],"served_backend":"fake","evidence":"contract_checked","upstream":{"repo_url":"https://github.com/alexanderkeijzer/ros-gym-env-webots","commit":"6cc613bdee4bad0adb157230df51a9bacdf621e4","license":"NOASSERTION"},"stars":0,"install":{"openai4s":"openai4s lab add robots/alexanderkeijzer__ros-gym-env-webots","mhs":"mhs serve robots/alexanderkeijzer__ros-gym-env-webots --port 7400","mcp":"mhs serve robots/alexanderkeijzer__ros-gym-env-webots --mcp"}},
{"id":"robots/allenai__molmospaces","name":"MolmoSpaces GymEnv (Franka pick, simulated)","device_id":"mhs://localhost/molmospaces","track":"robots","category":"Simulation","topic":"robot arm manipulation","kind":"world.sim","vendor":"Allen Institute for AI","model":"MolmoSpaces","mode":"simulated","risk":"R0","family":"gymnasium","role":"sim-env","intro":"MolmoSpaces GymEnv (Franka pick, simulated), adapted from allenai/molmospaces. It reads `observation`, `reward`, `terminated`, `truncated` and 4 more; runs `step`, `reset` and `seed`. `step`: advance the simulated world by a bounded number of fixed timesteps, optionally applying an action for each step, and return the resulting observation and terminal flags. A simulator: the market serves it with a stand-in that needs no simulator install.","measures":["observation","reward","terminated","truncated","tick","episode","seed","info"],"adjusts":[],"actions":[{"name":"step","description":"Advance the simulated world by a bounded number of fixed timesteps, optionally applying an action for each step, and return the resulting observation and terminal flags."},{"name":"reset","description":"Reset the simulated world to a scenario start state and return the initial observation. When a seed is supplied the endpoint records it in the receipt; otherwise the endpoint's declared default seed applies."},{"name":"seed","description":"Set the seed used by the simulated world's random number generators for subsequent steps, without resetting the world. The accepted seed is echoed in the receipt."}],"tags":["molmospaces","gymnasium","simulation","reinforcement-learning","franka","mujoco"],"backends":["fake"],"served_backend":"fake","evidence":"contract_checked","upstream":{"repo_url":"https://github.com/allenai/molmospaces","commit":"713fd12ab593c3bbb4abfaa76622e14249aa36b3","license":"Apache-2.0"},"stars":0,"install":{"openai4s":"openai4s lab add robots/allenai__molmospaces","mhs":"mhs serve robots/allenai__molmospaces --port 7400","mcp":"mhs serve robots/allenai__molmospaces --mcp"}},
{"id":"robots/alrhub__d3il","name":"d3il sorting-v0 (MuJoCo Panda sorting)","device_id":"mhs://localhost/d3il-sorting","track":"robots","category":"Simulation","topic":"robot arm manipulation","kind":"world.sim","vendor":"alrhub","model":"sorting-v0","mode":"simulated","risk":"R0","family":"gymnasium","role":"sim-env","intro":"d3il sorting-v0 (MuJoCo Panda sorting), adapted from alrhub/d3il. It reads `observation`, `reward`, `terminated`, `truncated` and 4 more; runs `step`, `reset` and `seed`. `step`: advance the simulated world by a bounded number of fixed timesteps, optionally applying an action for each step, and return the resulting observation and terminal flags. A simulator: the market serves it with a stand-in that needs no simulator install.","measures":["observation","reward","terminated","truncated","tick","episode","seed","info"],"adjusts":[],"actions":[{"name":"step","description":"Advance the simulated world by a bounded number of fixed timesteps, optionally applying an action for each step, and return the resulting observation and terminal flags."},{"name":"reset","description":"Reset the simulated world to a scenario start state and return the initial observation. When a seed is supplied the endpoint records it in the receipt; otherwise the endpoint's declared default seed applies."},{"name":"seed","description":"Set the seed used by the simulated world's random number generators for subsequent steps, without resetting the world. The accepted seed is echoed in the receipt."}],"tags":["sorting","manipulation","mujoco","reinforcement-learning","simulation","gymnasium","d3il"],"backends":["fake"],"served_backend":"fake","evidence":"contract_checked","upstream":{"repo_url":"https://github.com/alrhub/d3il","commit":"1d9c71850d4fc1477cee17b557c8b97d70b13071","license":"MIT"},"stars":110,"install":{"openai4s":"openai4s lab add robots/alrhub__d3il","mhs":"mhs serve robots/alrhub__d3il --port 7400","mcp":"mhs serve robots/alrhub__d3il --mcp"}},
{"id":"robots/alrhub__fancy_gym","name":"fancy_gym SimpleReacher-v0 (classic control)","device_id":"mhs://localhost/simple-reacher","track":"robots","category":"Simulation","topic":"robot arm manipulation","kind":"world.sim","vendor":"alrhub","model":"fancy/SimpleReacher-v0","mode":"simulated","risk":"R0","family":"gymnasium","role":"sim-env","intro":"fancy_gym SimpleReacher-v0 (classic control), adapted from alrhub/fancy_gym. It reads `observation`, `reward`, `terminated`, `truncated` and 4 more; runs `step`, `reset` and `seed`. `step`: advance the simulated world by a bounded number of fixed timesteps, optionally applying an action for each step, and return the resulting observation and terminal flags. A simulator: the market serves it with a stand-in that needs no simulator install.","measures":["observation","reward","terminated","truncated","tick","episode","seed","info"],"adjusts":[],"actions":[{"name":"step","description":"Advance the simulated world by a bounded number of fixed timesteps, optionally applying an action for each step, and return the resulting observation and terminal flags."},{"name":"reset","description":"Reset the simulated world to a scenario start state and return the initial observation. When a seed is supplied the endpoint records it in the receipt; otherwise the endpoint's declared default seed applies."},{"name":"seed","description":"Set the seed used by the simulated world's random number generators for subsequent steps, without resetting the world. The accepted seed is echoed in the receipt."}],"tags":["reacher","classic-control","torque-control","reinforcement-learning","simulation","gymnasium"],"backends":["fake"],"served_backend":"fake","evidence":"contract_checked","upstream":{"repo_url":"https://github.com/alrhub/fancy_gym","commit":"da1bced0181ced8267247779c001509a2fc94635","license":"MIT"},"stars":44,"install":{"openai4s":"openai4s lab add robots/alrhub__fancy_gym","mhs":"mhs serve robots/alrhub__fancy_gym --port 7400","mcp":"mhs serve robots/alrhub__fancy_gym --mcp"}},
{"id":"robots/amacati__soulsgym","name":"SoulsGym Iudex Gundyr (Dark Souls III)","device_id":"mhs://localhost/soulsgym-iudex","track":"robots","category":"Simulation","topic":null,"kind":"world.sim","vendor":"amacati","model":"SoulsGymIudex-v0","mode":"simulated","risk":"R0","family":"gymnasium","role":"sim-env","intro":"SoulsGym Iudex Gundyr (Dark Souls III), adapted from amacati/soulsgym. It reads `observation`, `reward`, `terminated`, `truncated` and 4 more; runs `step`, `reset` and `seed`. `step`: advance the simulated world by a bounded number of fixed timesteps, optionally applying an action for each step, and return the resulting observation and terminal flags. A simulator: the market serves it with a stand-in that needs no simulator install.","measures":["observation","reward","terminated","truncated","tick","episode","seed","info"],"adjusts":[],"actions":[{"name":"step","description":"Advance the simulated world by a bounded number of fixed timesteps, optionally applying an action for each step, and return the resulting observation and terminal flags."},{"name":"reset","description":"Reset the simulated world to a scenario start state and return the initial observation. When a seed is supplied the endpoint records it in the receipt; otherwise the endpoint's declared default seed applies."},{"name":"seed","description":"Set the seed used by the simulated world's random number generators for subsequent steps, without resetting the world. The accepted seed is echoed in the receipt."}],"tags":["soulsgym","dark-souls-iii","boss-fight","reinforcement-learning","simulation","gymnasium"],"backends":["fake"],"served_backend":"fake","evidence":"contract_checked","upstream":{"repo_url":"https://github.com/amacati/soulsgym","commit":"29c94d89ac8a47846c619019296d0ba55c6e80d5","license":"MIT"},"stars":161,"install":{"openai4s":"openai4s lab add robots/amacati__soulsgym","mhs":"mhs serve robots/amacati__soulsgym --port 7400","mcp":"mhs serve robots/amacati__soulsgym --mcp"}},
{"id":"robots/amathislab__musclemimic_models","name":"MuscleMimic MyoBimanualArm (MuJoCo model)","device_id":"mhs://localhost/myoarm-bimanual","track":"robots","category":"Simulation","topic":null,"kind":"world.sim","vendor":"MuscleMimic Team","model":"MyoBimanualArm","mode":"simulated","risk":"R0","family":"mujoco","role":"twin-candidate","intro":"MuscleMimic MyoBimanualArm (MuJoCo model), adapted from amathislab/musclemimic_models. It reads `time_ms`, `qpos`, `qvel`, `ctrl` and 4 more; runs `step` and `reset`. `step`: advance the simulated world by a bounded number of fixed timesteps, optionally applying an action for each step, and return the resulting observation and terminal flags. A simulator: the market serves it with a stand-in that needs no simulator install.","measures":["time_ms","qpos","qvel","ctrl","tick","timestep_ms","seed","native_checkpoint"],"adjusts":[],"actions":[{"name":"step","description":"Advance the simulated world by a bounded number of fixed timesteps, optionally applying an action for each step, and return the resulting observation and terminal flags."},{"name":"reset","description":"Reset the simulated world to a scenario start state and return the initial observation. When a seed is supplied the endpoint records it in the receipt; otherwise the endpoint's declared default seed applies."}],"tags":["biomechanics","bimanual","mujoco","muscle","musculoskeletal","simulation"],"backends":["fake"],"served_backend":"fake","evidence":"contract_checked","upstream":{"repo_url":"https://github.com/amathislab/musclemimic_models","commit":"001b723e1be89a055a4cf79d23e2e7aaf968fb40","license":"Apache-2.0"},"stars":57,"install":{"openai4s":"openai4s lab add robots/amathislab__musclemimic_models","mhs":"mhs serve robots/amathislab__musclemimic_models --port 7400","mcp":"mhs serve robots/amathislab__musclemimic_models --mcp"}},
{"id":"robots/ambench__ambench","name":"AM-Bench PressButton (free end-effector, absolute PID pose)","device_id":"mhs://localhost/ambench-press-button","track":"robots","category":"Simulation","topic":"UAVs","kind":"world.sim","vendor":"The AM-Bench Contributors","model":"PressButton-Am-EE-Abs-PID-Direct-v0","mode":"simulated","risk":"R0","family":"gymnasium","role":"sim-env","intro":"AM-Bench PressButton (free end-effector, absolute PID pose), adapted from ambench/ambench. It reads `observation`, `reward`, `terminated`, `truncated` and 4 more; runs `step`, `reset` and `seed`. `step`: advance the simulated world by a bounded number of fixed timesteps, optionally applying an action for each step, and return the resulting observation and terminal flags. A simulator: the market serves it with a stand-in that needs no simulator install.","measures":["observation","reward","terminated","truncated","tick","episode","seed","info"],"adjusts":[],"actions":[{"name":"step","description":"Advance the simulated world by a bounded number of fixed timesteps, optionally applying an action for each step, and return the resulting observation and terminal flags."},{"name":"reset","description":"Reset the simulated world to a scenario start state and return the initial observation. When a seed is supplied the endpoint records it in the receipt; otherwise the endpoint's declared default seed applies."},{"name":"seed","description":"Set the seed used by the simulated world's random number generators for subsequent steps, without resetting the world. The accepted seed is echoed in the receipt."}],"tags":["aerial-manipulation","isaac-lab","isaac-sim","press-button","reinforcement-learning","simulation","gymnasium"],"backends":["fake"],"served_backend":"fake","evidence":"contract_checked","upstream":{"repo_url":"https://github.com/ambench/ambench","commit":"60bf5b73041df4eab571f7d9f0a297aeecbf2e0d","license":"Apache-2.0"},"stars":0,"install":{"openai4s":"openai4s lab add robots/ambench__ambench","mhs":"mhs serve robots/ambench__ambench --port 7400","mcp":"mhs serve robots/ambench__ambench --mcp"}},
{"id":"robots/ammar-n-abbas__sim2real-ur-gym-gazebo","name":"Sim2Real UR5 task-space environment (ROS Gazebo)","device_id":"mhs://localhost/ur5-task-space","track":"robots","category":"Simulation","topic":"robot arm manipulation","kind":"world.sim","vendor":"ammar-n-abbas","model":"UR5TaskSpaceEnv-v0","mode":"simulated","risk":"R2","family":"gymnasium","role":"sim-env","intro":"Sim2Real UR5 task-space environment (ROS Gazebo), adapted from ammar-n-abbas/sim2real-ur-gym-gazebo. It reads `observation`, `reward`, `terminated`, `truncated` and 4 more; runs `step`, `reset` and `seed`. `step`: advance the simulated world by a bounded number of fixed timesteps, optionally applying an action for each step, and return the resulting observation and terminal flags. A simulator: the market serves it with a stand-in that needs no simulator install.","measures":["observation","reward","terminated","truncated","tick","episode","seed","info"],"adjusts":[],"actions":[{"name":"step","description":"Advance the simulated world by a bounded number of fixed timesteps, optionally applying an action for each step, and return the resulting observation and terminal flags."},{"name":"reset","description":"Reset the simulated world to a scenario start state and return the initial observation. When a seed is supplied the endpoint records it in the receipt; otherwise the endpoint's declared default seed applies."},{"name":"seed","description":"Set the seed used by the simulated world's random number generators for subsequent steps, without resetting the world. The accepted seed is echoed in the receipt."}],"tags":["ur5","universal-robots","gazebo","ros","gymnasium","reinforcement-learning","simulation","robot-arm","task-space"],"backends":["fake"],"served_backend":"fake","evidence":"contract_checked","upstream":{"repo_url":"https://github.com/ammar-n-abbas/sim2real-ur-gym-gazebo","commit":"c36c625626c21ed44d02729426a1220fde5ec56a","license":"MIT"},"stars":54,"install":{"openai4s":"openai4s lab add robots/ammar-n-abbas__sim2real-ur-gym-gazebo","mhs":"mhs serve robots/ammar-n-abbas__sim2real-ur-gym-gazebo --port 7400","mcp":"mhs serve robots/ammar-n-abbas__sim2real-ur-gym-gazebo --mcp"}},
{"id":"robots/andrejorsula__space_robotics_bench","name":"Space Robotics Bench _manipulation template (Isaac Sim Gymnasium environment)","device_id":"mhs://localhost/srb-manipulation","track":"robots","category":"Simulation","topic":"mobile robots","kind":"world.sim","vendor":"Andrej Orsula","model":"Space Robotics Bench _manipulation template","mode":"simulated","risk":"R0","family":"gymnasium","role":"sim-env","intro":"Space Robotics Bench _manipulation template (Isaac Sim Gymnasium environment), adapted from andrejorsula/space_robotics_bench. It reads `observation`, `reward`, `terminated`, `truncated` and 4 more; runs `step`, `reset` and `seed`. `step`: advance the simulated world by a bounded number of fixed timesteps, optionally applying an action for each step, and return the resulting observation and terminal flags. A simulator: the market serves it with a stand-in that needs no simulator install.","measures":["observation","reward","terminated","truncated","tick","episode","seed","info"],"adjusts":[],"actions":[{"name":"step","description":"Advance the simulated world by a bounded number of fixed timesteps, optionally applying an action for each step, and return the resulting observation and terminal flags."},{"name":"reset","description":"Reset the simulated world to a scenario start state and return the initial observation. When a seed is supplied the endpoint records it in the receipt; otherwise the endpoint's declared default seed applies."},{"name":"seed","description":"Set the seed used by the simulated world's random number generators for subsequent steps, without resetting the world. The accepted seed is echoed in the receipt."}],"tags":["space-robotics","isaac-sim","isaac-lab","gymnasium","manipulation","simulation","reinforcement-learning"],"backends":["fake"],"served_backend":"fake","evidence":"contract_checked","upstream":{"repo_url":"https://github.com/andrejorsula/space_robotics_bench","commit":"7528ff81f1ac0b34ba259b1ae150fdb4f6a90b5e","license":"Apache-2.0"},"stars":198,"install":{"openai4s":"openai4s lab add robots/andrejorsula__space_robotics_bench","mhs":"mhs serve robots/andrejorsula__space_robotics_bench --port 7400","mcp":"mhs serve robots/andrejorsula__space_robotics_bench --mcp"}},
{"id":"robots/andy-xiong6__bipedal_locomotion_isaaclab","name":"Pointfoot blind flat locomotion task (Isaac Lab / Isaac Sim)","device_id":"mhs://localhost/pointfoot-flat","track":"robots","category":"Simulation","topic":null,"kind":"world.sim","vendor":"andy-xiong6","model":"bipedal_locomotion_isaaclab","mode":"simulated","risk":"R0","family":"gymnasium","role":"sim-env","intro":"Pointfoot blind flat locomotion task (Isaac Lab / Isaac Sim), adapted from andy-xiong6/bipedal_locomotion_isaaclab. It reads `observation`, `reward`, `terminated`, `truncated` and 4 more; runs `step`, `reset` and `seed`. `step`: advance the simulated world by a bounded number of fixed timesteps, optionally applying an action for each step, and return the resulting observation and terminal flags. A simulator: the market serves it with a stand-in that needs no simulator install.","measures":["observation","reward","terminated","truncated","tick","episode","seed","info"],"adjusts":[],"actions":[{"name":"step","description":"Advance the simulated world by a bounded number of fixed timesteps, optionally applying an action for each step, and return the resulting observation and terminal flags."},{"name":"reset","description":"Reset the simulated world to a scenario start state and return the initial observation. When a seed is supplied the endpoint records it in the receipt; otherwise the endpoint's declared default seed applies."},{"name":"seed","description":"Set the seed used by the simulated world's random number generators for subsequent steps, without resetting the world. The accepted seed is echoed in the receipt."}],"tags":["pointfoot","bipedal","locomotion","blind-flat","isaac-lab","isaac-sim","reinforcement-learning","simulation","gymnasium"],"backends":["fake"],"served_backend":"fake","evidence":"contract_checked","upstream":{"repo_url":"https://github.com/andy-xiong6/bipedal_locomotion_isaaclab","commit":"748f879e099aaa3d3d19437a7eed48c9a72b1e28","license":"MIT"},"stars":87,"install":{"openai4s":"openai4s lab add robots/andy-xiong6__bipedal_locomotion_isaaclab","mhs":"mhs serve robots/andy-xiong6__bipedal_locomotion_isaaclab --port 7400","mcp":"mhs serve robots/andy-xiong6__bipedal_locomotion_isaaclab --mcp"}},
{"id":"robots/andykofman__flightmare-reinforcement-learning","name":"Flightmare FlightEnvVec (QuadrotorEnv_v1 simulation)","device_id":"mhs://localhost/flightmare-vec","track":"robots","category":"Simulation","topic":"UAVs","kind":"world.sim","vendor":"andykofman","model":"Flightmare FlightEnvVec","mode":"simulated","risk":"R0","family":"gymnasium","role":"sim-env","intro":"Flightmare FlightEnvVec (QuadrotorEnv_v1 simulation), adapted from andykofman/flightmare-reinforcement-learning. It reads `observation`, `reward`, `terminated`, `truncated` and 4 more; runs `step`, `reset` and `seed`. `step`: advance the simulated world by a bounded number of fixed timesteps, optionally applying an action for each step, and return the resulting observation and terminal flags. A simulator: the market serves it with a stand-in that needs no simulator install.","measures":["observation","reward","terminated","truncated","tick","episode","seed","info"],"adjusts":[],"actions":[{"name":"step","description":"Advance the simulated world by a bounded number of fixed timesteps, optionally applying an action for each step, and return the resulting observation and terminal flags."},{"name":"reset","description":"Reset the simulated world to a scenario start state and return the initial observation. When a seed is supplied the endpoint records it in the receipt; otherwise the endpoint's declared default seed applies."},{"name":"seed","description":"Set the seed used by the simulated world's random number generators for subsequent steps, without resetting the world. The accepted seed is echoed in the receipt."}],"tags":["flightmare","flightgym","quadrotor","reinforcement-learning","simulation","gymnasium"],"backends":["fake"],"served_backend":"fake","evidence":"contract_checked","upstream":{"repo_url":"https://github.com/andykofman/flightmare-reinforcement-learning","commit":"22fb5d16eec32b1816aa568c20643d91ca7c76f7","license":"MIT"},"stars":14,"install":{"openai4s":"openai4s lab add robots/andykofman__flightmare-reinforcement-learning","mhs":"mhs serve robots/andykofman__flightmare-reinforcement-learning --port 7400","mcp":"mhs serve robots/andykofman__flightmare-reinforcement-learning --mcp"}},
{"id":"robots/angel-ayala__gym-webots-drone","name":"Webots drone fire-scenario environment (vector observation)","device_id":"mhs://localhost/webots-drone","track":"robots","category":"Simulation","topic":"UAVs","kind":"world.sim","vendor":"Angel Ayala","model":"webots_drone/DroneEnvContinuous-v0","mode":"simulated","risk":"R0","family":"gymnasium","role":"sim-env","intro":"Webots drone fire-scenario environment (vector observation), adapted from angel-ayala/gym-webots-drone. It reads `observation`, `reward`, `terminated`, `truncated` and 4 more; runs `step`, `reset` and `seed`. `step`: advance the simulated world by a bounded number of fixed timesteps, optionally applying an action for each step, and return the resulting observation and terminal flags. A simulator: the market serves it with a stand-in that needs no simulator install.","measures":["observation","reward","terminated","truncated","tick","episode","seed","info"],"adjusts":[],"actions":[{"name":"step","description":"Advance the simulated world by a bounded number of fixed timesteps, optionally applying an action for each step, and return the resulting observation and terminal flags."},{"name":"reset","description":"Reset the simulated world to a scenario start state and return the initial observation. When a seed is supplied the endpoint records it in the receipt; otherwise the endpoint's declared default seed applies."},{"name":"seed","description":"Set the seed used by the simulated world's random number generators for subsequent steps, without resetting the world. The accepted seed is echoed in the receipt."}],"tags":["webots","drone","uav","reinforcement-learning","simulation","gym"],"backends":["fake"],"served_backend":"fake","evidence":"contract_checked","upstream":{"repo_url":"https://github.com/angel-ayala/gym-webots-drone","commit":"24eb199041403d108bc94fac0f522cb33a544c9c","license":"GPL-3.0"},"stars":14,"install":{"openai4s":"openai4s lab add robots/angel-ayala__gym-webots-drone","mhs":"mhs serve robots/angel-ayala__gym-webots-drone --port 7400","mcp":"mhs serve robots/angel-ayala__gym-webots-drone --mcp"}},
{"id":"robots/angelomorgado__carla-gymdrive","name":"CARLA GymDrive (carla-rl-gym-v0)","device_id":"mhs://localhost/carla-gymdrive","track":"robots","category":"Simulation","topic":null,"kind":"world.sim","vendor":"angelomorgado","model":"carla-rl-gym-v0","mode":"simulated","risk":"R0","family":"gymnasium","role":"sim-env","intro":"CARLA GymDrive (carla-rl-gym-v0), adapted from angelomorgado/carla-gymdrive. It reads `observation`, `reward`, `terminated`, `truncated` and 4 more; runs `step`, `reset` and `seed`. `step`: advance the simulated world by a bounded number of fixed timesteps, optionally applying an action for each step, and return the resulting observation and terminal flags. A simulator: the market serves it with a stand-in that needs no simulator install.","measures":["observation","reward","terminated","truncated","tick","episode","seed","info"],"adjusts":[],"actions":[{"name":"step","description":"Advance the simulated world by a bounded number of fixed timesteps, optionally applying an action for each step, and return the resulting observation and terminal flags."},{"name":"reset","description":"Reset the simulated world to a scenario start state and return the initial observation. When a seed is supplied the endpoint records it in the receipt; otherwise the endpoint's declared default seed applies."},{"name":"seed","description":"Set the seed used by the simulated world's random number generators for subsequent steps, without resetting the world. The accepted seed is echoed in the receipt."}],"tags":["carla","driving","reinforcement-learning","simulation","gymnasium","sim-env"],"backends":["fake"],"served_backend":"fake","evidence":"contract_checked","upstream":{"repo_url":"https://github.com/angelomorgado/carla-gymdrive","commit":"7d950f9d90d20b7dfbc17fa5b77e67437bde2d29","license":"MIT"},"stars":55,"install":{"openai4s":"openai4s lab add robots/angelomorgado__carla-gymdrive","mhs":"mhs serve robots/angelomorgado__carla-gymdrive --port 7400","mcp":"mhs serve robots/angelomorgado__carla-gymdrive --mcp"}},
{"id":"robots/anhtuduong__ur5legovision","name":"UR5LegoVision UR5 ROS 1 arm","device_id":"mhs://localhost/ur5legovision","track":"robots","category":"Robot arms and grippers","topic":null,"kind":"robot.arm","vendor":"Anh Tu Duong","model":null,"mode":"simulated","risk":"R2","family":"ros","role":"sim-env","intro":"UR5LegoVision UR5 ROS 1 arm, adapted from anhtuduong/ur5legovision. It reads `read_joint_state` and `read_ee_pose`; runs `move_joints`, `move_gripper`, `pause` and `resume`. `move_joints`: command six joint positions through the upstream /ur5/move_joints service; the boolean acknowledgement does not establish measured arrival. A simulator: the market serves it with a stand-in that needs no simulator install.","measures":["read_joint_state","read_ee_pose"],"adjusts":[],"actions":[{"name":"move_joints","description":"Command six joint positions through the upstream /ur5/move_joints service; the boolean acknowledgement does not establish measured arrival"},{"name":"move_gripper","description":"Command the soft-gripper opening diameter through /ur5/move_gripper; the ack means the upstream loop finished, not that an object was grasped"},{"name":"pause","description":"Pause the Gazebo simulation with the acknowledged /gazebo/pause_physics service"},{"name":"resume","description":"Resume the Gazebo simulation with the acknowledged /gazebo/unpause_physics service; an interrupted motion callback then continues its old motion"}],"tags":["ros","ros1","ur5","robot-arm","lego","gazebo","moveit","joint-state"],"backends":["fake"],"served_backend":"fake","evidence":"contract_checked","upstream":{"repo_url":"https://github.com/anhtuduong/ur5legovision","commit":"7cf487fbadcfd42e2fe09f75c7345d24920a1e3d","license":"MIT"},"stars":30,"install":{"openai4s":"openai4s lab add robots/anhtuduong__ur5legovision","mhs":"mhs serve robots/anhtuduong__ur5legovision --port 7400","mcp":"mhs serve robots/anhtuduong__ur5legovision --mcp"}},
{"id":"robots/anki__cozmo-python-sdk","name":"Anki Cozmo robot (cozmo.robot.Robot)","device_id":"mhs://localhost/cozmo","track":"robots","category":"Robot arms and grippers","topic":null,"kind":"robot.arm","vendor":"Anki","model":"Cozmo","mode":"hardware","risk":"R1","family":"python-object","role":"device-driver","intro":"Anki Cozmo robot (cozmo.robot.Robot), adapted from anki/cozmo-python-sdk. It reads `head_angle`, `lift_ratio`, `lift_height`, `is_charging` and 1 more; runs `move_head`, `set_lift_ratio` and `stop_all`. `move_head`: command one or more actuated joints to target positions in joint space, optionally over a declared duration, and report whether the target was reached within tolerance. A hardware driver: the market serves its fake backend, so no instrument is needed.","measures":["head_angle","lift_ratio","lift_height","is_charging","cliff_detected"],"adjusts":[],"actions":[{"name":"move_head","description":"Command one or more actuated joints to target positions in joint space, optionally over a declared duration, and report whether the target was reached within tolerance."},{"name":"set_lift_ratio","description":"Move the lift to a ratio between 0.0 (bottom) and 1.0 (top) and wait until it is there"},{"name":"stop_all","description":"Stop every motor of the robot at once (the native stop_all_motors); it takes no input"}],"tags":["robot","cozmo","anki","head","lift","mobile robot"],"backends":["fake","hardware"],"served_backend":"fake","evidence":"contract_checked","upstream":{"repo_url":"https://github.com/anki/cozmo-python-sdk","commit":"dd29edef18748fcd816550469195323842a7872e","license":"Apache-2.0"},"stars":0,"install":{"openai4s":"openai4s lab add robots/anki__cozmo-python-sdk","mhs":"mhs serve robots/anki__cozmo-python-sdk --port 7400","mcp":"mhs serve robots/anki__cozmo-python-sdk --mcp"}},
{"id":"robots/anurye__gym-turtlebot","name":"TurtleBot4 Gymnasium environment","device_id":"mhs://localhost/gym-turtlebot","track":"robots","category":"Simulation","topic":"mobile robots","kind":"world.sim","vendor":"anurye","model":null,"mode":"simulated","risk":"R2","family":"gymnasium","role":"sim-env","intro":"TurtleBot4 Gymnasium environment, adapted from anurye/gym-turtlebot. It reads `observation`, `reward`, `terminated`, `truncated` and 4 more; runs `step`, `reset` and `seed`. `step`: advance the simulated world by a bounded number of fixed timesteps, optionally applying an action for each step, and return the resulting observation and terminal flags. A simulator: the market serves it with a stand-in that needs no simulator install.","measures":["observation","reward","terminated","truncated","tick","episode","seed","info"],"adjusts":[],"actions":[{"name":"step","description":"Advance the simulated world by a bounded number of fixed timesteps, optionally applying an action for each step, and return the resulting observation and terminal flags."},{"name":"reset","description":"Reset the simulated world to a scenario start state and return the initial observation. When a seed is supplied the endpoint records it in the receipt; otherwise the endpoint's declared default seed applies."},{"name":"seed","description":"Set the seed used by the simulated world's random number generators for subsequent steps, without resetting the world. The accepted seed is echoed in the receipt."}],"tags":["gymnasium","simulation","ros2","gazebo","turtlebot4","navigation","reinforcement-learning"],"backends":["fake"],"served_backend":"fake","evidence":"contract_checked","upstream":{"repo_url":"https://github.com/anurye/gym-turtlebot","commit":"c1e8b72a1081b92821dc14320fc7105b10423c54","license":"Apache-2.0"},"stars":12,"install":{"openai4s":"openai4s lab add robots/anurye__gym-turtlebot","mhs":"mhs serve robots/anurye__gym-turtlebot --port 7400","mcp":"mhs serve robots/anurye__gym-turtlebot --mcp"}},
{"id":"robots/aos55__fixedwing-airsim","name":"Fixedwing-Airsim SingleObservation (JSBSim + AirSim)","device_id":"mhs://localhost/fixedwing-airsim","track":"robots","category":"Simulation","topic":"UAVs","kind":"world.sim","vendor":"AOS55","model":"Fixedwing-Airsim x8","mode":"simulated","risk":"R0","family":"gymnasium","role":"sim-env","intro":"Fixedwing-Airsim SingleObservation (JSBSim + AirSim), adapted from aos55/fixedwing-airsim. It reads `observation`, `reward`, `terminated`, `truncated` and 4 more; runs `step`, `reset` and `seed`. `step`: advance the simulated world by a bounded number of fixed timesteps, optionally applying an action for each step, and return the resulting observation and terminal flags. A simulator: the market serves it with a stand-in that needs no simulator install.","measures":["observation","reward","terminated","truncated","tick","episode","seed","info"],"adjusts":[],"actions":[{"name":"step","description":"Advance the simulated world by a bounded number of fixed timesteps, optionally applying an action for each step, and return the resulting observation and terminal flags."},{"name":"reset","description":"Reset the simulated world to a scenario start state and return the initial observation. When a seed is supplied the endpoint records it in the receipt; otherwise the endpoint's declared default seed applies."},{"name":"seed","description":"Set the seed used by the simulated world's random number generators for subsequent steps, without resetting the world. The accepted seed is echoed in the receipt."}],"tags":["fixed-wing","jsbsim","airsim","reinforcement-learning","simulation","gymnasium"],"backends":["fake"],"served_backend":"fake","evidence":"contract_checked","upstream":{"repo_url":"https://github.com/aos55/fixedwing-airsim","commit":"c5054486fb05dc67668b123c7789e399c8d4ce02","license":"MIT"},"stars":150,"install":{"openai4s":"openai4s lab add robots/aos55__fixedwing-airsim","mhs":"mhs serve robots/aos55__fixedwing-airsim --port 7400","mcp":"mhs serve robots/aos55__fixedwing-airsim --mcp"}},
{"id":"robots/apirrone__open_duck_mini","name":"Open Duck Mini v2 (BDX_env humanoid MuJoCo environment)","device_id":"mhs://localhost/open_duck_mini","track":"robots","category":"Simulation","topic":"legged robots","kind":"world.sim","vendor":"apirrone","model":"Open Duck Mini v2","mode":"simulated","risk":"R0","family":"gymnasium","role":"sim-env","intro":"Open Duck Mini v2 (BDX_env humanoid MuJoCo environment), adapted from apirrone/open_duck_mini. It reads `observation`, `reward`, `terminated`, `truncated` and 4 more; runs `step`, `reset` and `seed`. `step`: advance the simulated world by a bounded number of fixed timesteps, optionally applying an action for each step, and return the resulting observation and terminal flags. A simulator: the market serves it with a stand-in that needs no simulator install.","measures":["observation","reward","terminated","truncated","tick","episode","seed","info"],"adjusts":[],"actions":[{"name":"step","description":"Advance the simulated world by a bounded number of fixed timesteps, optionally applying an action for each step, and return the resulting observation and terminal flags."},{"name":"reset","description":"Reset the simulated world to a scenario start state and return the initial observation. When a seed is supplied the endpoint records it in the receipt; otherwise the endpoint's declared default seed applies."},{"name":"seed","description":"Set the seed used by the simulated world's random number generators for subsequent steps, without resetting the world. The accepted seed is echoed in the receipt."}],"tags":["bdx","gymnasium","legged-robot","mujoco","open-duck-mini","reinforcement-learning","simulation"],"backends":["fake"],"served_backend":"fake","evidence":"contract_checked","upstream":{"repo_url":"https://github.com/apirrone/open_duck_mini","commit":"b23317a485b3cec7d8417f352478778b3475173c","license":"Apache-2.0"},"stars":0,"install":{"openai4s":"openai4s lab add robots/apirrone__open_duck_mini","mhs":"mhs serve robots/apirrone__open_duck_mini --port 7400","mcp":"mhs serve robots/apirrone__open_duck_mini --mcp"}},
{"id":"robots/apirrone__open_duck_playground","name":"Open Duck Mini V2 (MuJoCo rough terrain, backlash)","device_id":"mhs://localhost/open-duck-mini-v2","track":"robots","category":"Simulation","topic":"legged robots","kind":"world.sim","vendor":"apirrone (Open Duck Playground)","model":"Open Duck Mini V2","mode":"simulated","risk":"R0","family":"mujoco","role":"sim-env","intro":"Open Duck Mini V2 (MuJoCo rough terrain, backlash), adapted from apirrone/open_duck_playground. It reads `time_ms`, `qpos`, `qvel`, `ctrl` and 4 more; runs `step` and `reset`. `step`: advance the simulated world by a bounded number of fixed timesteps, optionally applying an action for each step, and return the resulting observation and terminal flags. A simulator: the market serves it with a stand-in that needs no simulator install.","measures":["time_ms","qpos","qvel","ctrl","tick","timestep_ms","seed","native_checkpoint"],"adjusts":[],"actions":[{"name":"step","description":"Advance the simulated world by a bounded number of fixed timesteps, optionally applying an action for each step, and return the resulting observation and terminal flags."},{"name":"reset","description":"Reset the simulated world to a scenario start state and return the initial observation. When a seed is supplied the endpoint records it in the receipt; otherwise the endpoint's declared default seed applies."}],"tags":["biped","humanoid","locomotion","mujoco","open-duck-mini","robot","simulation"],"backends":["fake"],"served_backend":"fake","evidence":"contract_checked","upstream":{"repo_url":"https://github.com/apirrone/open_duck_playground","commit":"b9be205ac64488c23504ca42e5ec790337adeec3","license":"NOASSERTION"},"stars":193,"install":{"openai4s":"openai4s lab add robots/apirrone__open_duck_playground","mhs":"mhs serve robots/apirrone__open_duck_playground --port 7400","mcp":"mhs serve robots/apirrone__open_duck_playground --mcp"}},
{"id":"robots/arise-initiative__robosuite-task-zoo","name":"robosuite Task Zoo HammerPlace environment","device_id":"mhs://localhost/robosuite-hammer-place","track":"robots","category":"Simulation","topic":"robot manipulation","kind":"world.sim","vendor":"ARISE-Initiative","model":"HammerPlaceEnv","mode":"simulated","risk":"R1","family":"mujoco","role":"sim-env","intro":"robosuite Task Zoo HammerPlace environment, adapted from arise-initiative/robosuite-task-zoo. It reads `observation`, `tick`, `episode`, `seed` and 2 more; runs `reset_world` and `step`. `reset_world`: reset the simulated world to a scenario start state and return the initial observation. When a seed is supplied the endpoint records it in the receipt; otherwise the endpoint's declared default seed applies. A simulator: the market serves it with a stand-in that needs no simulator install.","measures":["observation","tick","episode","seed","reward","terminated"],"adjusts":[],"actions":[{"name":"reset_world","description":"Reset the simulated world to a scenario start state and return the initial observation. When a seed is supplied the endpoint records it in the receipt; otherwise the endpoint's declared default seed applies."},{"name":"step","description":"Advance the simulated world by a bounded number of fixed timesteps, optionally applying an action for each step, and return the resulting observation and terminal flags."}],"tags":["robosuite","mujoco","manipulation","hammer","cabinet","simulation","benchmark"],"backends":["fake"],"served_backend":"fake","evidence":"contract_checked","upstream":{"repo_url":"https://github.com/arise-initiative/robosuite-task-zoo","commit":"74eab7f88214c21ca1ae8617c2b2f8d19718a9ed","license":"MIT"},"stars":39,"install":{"openai4s":"openai4s lab add robots/arise-initiative__robosuite-task-zoo","mhs":"mhs serve robots/arise-initiative__robosuite-task-zoo --port 7400","mcp":"mhs serve robots/arise-initiative__robosuite-task-zoo --mcp"}},
{"id":"robots/arise-initiative__robosuite_models","name":"robosuite_models Aloha bimanual arm (MuJoCo model)","device_id":"mhs://localhost/robosuite-aloha","track":"robots","category":"Simulation","topic":"robot arm manipulation","kind":"world.sim","vendor":"ARISE-Initiative","model":"Aloha","mode":"simulated","risk":"R0","family":"mujoco","role":"twin-candidate","intro":"robosuite_models Aloha bimanual arm (MuJoCo model), adapted from arise-initiative/robosuite_models. It reads `time_ms`, `qpos`, `qvel`, `ctrl` and 4 more; runs `step` and `reset`. `step`: advance the simulated world by a bounded number of fixed timesteps, optionally applying an action for each step, and return the resulting observation and terminal flags. A simulator: the market serves it with a stand-in that needs no simulator install.","measures":["time_ms","qpos","qvel","ctrl","tick","timestep_ms","seed","native_checkpoint"],"adjusts":[],"actions":[{"name":"step","description":"Advance the simulated world by a bounded number of fixed timesteps, optionally applying an action for each step, and return the resulting observation and terminal flags."},{"name":"reset","description":"Reset the simulated world to a scenario start state and return the initial observation. When a seed is supplied the endpoint records it in the receipt; otherwise the endpoint's declared default seed applies."}],"tags":["aloha","bimanual","manipulation","mujoco","robosuite","robot","simulation"],"backends":["fake"],"served_backend":"fake","evidence":"contract_checked","upstream":{"repo_url":"https://github.com/arise-initiative/robosuite_models","commit":"2d63a6b4319bda772420daf10594ce0de5bd793d","license":"MIT"},"stars":59,"install":{"openai4s":"openai4s lab add robots/arise-initiative__robosuite_models","mhs":"mhs serve robots/arise-initiative__robosuite_models --port 7400","mcp":"mhs serve robots/arise-initiative__robosuite_models --mcp"}},
{"id":"robots/asig-x__jeplo","name":"JEPLO Unitree Go2 locomotion (Isaac Lab)","device_id":"mhs://localhost/jeplo-go2","track":"robots","category":"Simulation","topic":"legged robots","kind":"world.sim","vendor":"ASIG-X","model":"Unitree-Go2-Locomotion","mode":"simulated","risk":"R0","family":"gymnasium","role":"sim-env","intro":"JEPLO Unitree Go2 locomotion (Isaac Lab), adapted from asig-x/jeplo. It reads `observation`, `reward`, `terminated`, `truncated` and 4 more; runs `step`, `reset` and `seed`. `step`: advance the simulated world by a bounded number of fixed timesteps, optionally applying an action for each step, and return the resulting observation and terminal flags. A simulator: the market serves it with a stand-in that needs no simulator install.","measures":["observation","reward","terminated","truncated","tick","episode","seed","info"],"adjusts":[],"actions":[{"name":"step","description":"Advance the simulated world by a bounded number of fixed timesteps, optionally applying an action for each step, and return the resulting observation and terminal flags."},{"name":"reset","description":"Reset the simulated world to a scenario start state and return the initial observation. When a seed is supplied the endpoint records it in the receipt; otherwise the endpoint's declared default seed applies."},{"name":"seed","description":"Set the seed used by the simulated world's random number generators for subsequent steps, without resetting the world. The accepted seed is echoed in the receipt."}],"tags":["unitree-go2","quadruped","isaac-lab","isaac-sim","lidar","locomotion","reinforcement-learning","simulation","gymnasium"],"backends":["fake"],"served_backend":"fake","evidence":"contract_checked","upstream":{"repo_url":"https://github.com/asig-x/jeplo","commit":"460e2272907af053d6e66b57fec71fdbe6ca1774","license":"GPL-3.0"},"stars":84,"install":{"openai4s":"openai4s lab add robots/asig-x__jeplo","mhs":"mhs serve robots/asig-x__jeplo --port 7400","mcp":"mhs serve robots/asig-x__jeplo --mcp"}},
{"id":"robots/asteriscrack__bipedrobot","name":"asteriscrack BipedRobot MuJoCo V2 (MujocoV2-v0)","device_id":"mhs://localhost/bipedrobot","track":"robots","category":"Simulation","topic":"humanoid robots","kind":"world.sim","vendor":"asteriscrack","model":"BipedRobot V2","mode":"simulated","risk":"R0","family":"gymnasium","role":"sim-env","intro":"asteriscrack BipedRobot MuJoCo V2 (MujocoV2-v0), adapted from asteriscrack/bipedrobot. It reads `observation`, `reward`, `terminated`, `truncated` and 4 more; runs `step`, `reset` and `seed`. `step`: advance the simulated world by a bounded number of fixed timesteps, optionally applying an action for each step, and return the resulting observation and terminal flags. A simulator: the market serves it with a stand-in that needs no simulator install.","measures":["observation","reward","terminated","truncated","tick","episode","seed","info"],"adjusts":[],"actions":[{"name":"step","description":"Advance the simulated world by a bounded number of fixed timesteps, optionally applying an action for each step, and return the resulting observation and terminal flags."},{"name":"reset","description":"Reset the simulated world to a scenario start state and return the initial observation. When a seed is supplied the endpoint records it in the receipt; otherwise the endpoint's declared default seed applies."},{"name":"seed","description":"Set the seed used by the simulated world's random number generators for subsequent steps, without resetting the world. The accepted seed is echoed in the receipt."}],"tags":["biped","locomotion","mujoco","gymnasium","reinforcement-learning","simulation"],"backends":["fake"],"served_backend":"fake","evidence":"contract_checked","upstream":{"repo_url":"https://github.com/asteriscrack/bipedrobot","commit":"bdaa21ee73c9cfa60a7fe76caf5082fc67329891","license":"MIT"},"stars":20,"install":{"openai4s":"openai4s lab add robots/asteriscrack__bipedrobot","mhs":"mhs serve robots/asteriscrack__bipedrobot --port 7400","mcp":"mhs serve robots/asteriscrack__bipedrobot --mcp"}},
{"id":"robots/atharva-05__unitree_ros2_sim","name":"Unitree GO1 Gazebo simulation","device_id":"mhs://localhost/unitree-go1-sim","track":"robots","category":"Mobile robots","topic":null,"kind":"robot.mobile_base","vendor":"atharva-05","model":"Unitree GO1 in the go1_sim Gazebo world","mode":"simulated","risk":"R2","family":"ros","role":"sim-env","intro":"Unitree GO1 Gazebo simulation, adapted from atharva-05/unitree_ros2_sim. It reads `read_scan` and `read_odometry`; runs `publish_cmd_vel`. `publish_cmd_vel`: publish one geometry_msgs/Twist velocity setpoint to /cmd_vel for the move_base state machine. The receipt confirms only that rosbridge accepted the publication, not motion, arrival or stopping. A simulator: the market serves it with a stand-in that needs no simulator install.","measures":["read_scan","read_odometry"],"adjusts":[],"actions":[{"name":"publish_cmd_vel","description":"Publish one geometry_msgs/Twist velocity setpoint to /cmd_vel for the move_base state machine. The receipt confirms only that rosbridge accepted the publication, not motion, arrival or stopping."}],"tags":["ros","ros2","gazebo","simulation","mobile-base","cmd-vel","odometry","laser-scan","unitree","go1"],"backends":["fake"],"served_backend":"fake","evidence":"contract_checked","upstream":{"repo_url":"https://github.com/atharva-05/unitree_ros2_sim","commit":"44659704169515708ec46d0428381dc6c7730350","license":"NOASSERTION"},"stars":53,"install":{"openai4s":"openai4s lab add robots/atharva-05__unitree_ros2_sim","mhs":"mhs serve robots/atharva-05__unitree_ros2_sim --port 7400","mcp":"mhs serve robots/atharva-05__unitree_ros2_sim --mcp"}},
{"id":"robots/aurelienroy__ardupilot_sitl_gazebo_plugin","name":"ArduPilot SITL Gazebo plugin (ROS 1 surface)","device_id":"mhs://localhost/ardupilot-sitl-gazebo","track":"robots","category":"Simulation","topic":"UAVs","kind":"world.sim","vendor":"Aurelien Roy","model":"ArduPilot SITL Gazebo plugin","mode":"simulated","risk":"R0","family":"ros","role":"sim-env","intro":"ArduPilot SITL Gazebo plugin (ROS 1 surface), adapted from aurelienroy/ardupilot_sitl_gazebo_plugin. It reads `observe_motor_speed`; runs `take_lapse_lock` and `release_lapse_lock`. `take_lapse_lock`: take the plugin's bounded wall-time lapse lock with the upstream method default horizon of 1 s; this pauses the plugin loop that steps the paused Gazebo world and exchanges packets with ArduPilot SITL, not ArduPilot itself, and the plugin clears the lock automatically when the timer expires. A simulator: the market serves it with a stand-in that needs no simulator install.","measures":["observe_motor_speed"],"adjusts":[],"actions":[{"name":"take_lapse_lock","description":"Take the plugin's bounded wall-time lapse lock with the upstream method default horizon of 1 s; this pauses the plugin loop that steps the paused Gazebo world and exchanges packets with ArduPilot SITL, not ArduPilot itself, and the plugin clears the lock automatically when the timer expires"},{"name":"release_lapse_lock","description":"Release this driver's lapse lock; succeeds only when the returned holder count is zero, because a positive count means another holder still pauses the loop"}],"tags":["ros","ros1","simulation","gazebo","ardupilot","sitl","motor-speed","lapse-lock"],"backends":["fake"],"served_backend":"fake","evidence":"contract_checked","upstream":{"repo_url":"https://github.com/aurelienroy/ardupilot_sitl_gazebo_plugin","commit":"75430fbc77967cd0a2e3c429a76b5787a9bff2d1","license":"Apache-2.0"},"stars":34,"install":{"openai4s":"openai4s lab add robots/aurelienroy__ardupilot_sitl_gazebo_plugin","mhs":"mhs serve robots/aurelienroy__ardupilot_sitl_gazebo_plugin --port 7400","mcp":"mhs serve robots/aurelienroy__ardupilot_sitl_gazebo_plugin --mcp"}},
{"id":"robots/auturbo__stridesim","name":"StrideSim ANYmal-D flat velocity tracking (Isaac Lab task)","device_id":"mhs://localhost/anymal_d_velocity","track":"robots","category":"Simulation","topic":"legged robots","kind":"world.sim","vendor":"AuTURBO StrideSim","model":"ANYmal-D","mode":"simulated","risk":"R0","family":"gymnasium","role":"sim-env","intro":"StrideSim ANYmal-D flat velocity tracking (Isaac Lab task), adapted from auturbo/stridesim. It reads `observation`, `reward`, `terminated`, `truncated` and 4 more; runs `step`, `reset` and `seed`. `step`: advance the simulated world by a bounded number of fixed timesteps, optionally applying an action for each step, and return the resulting observation and terminal flags. A simulator: the market serves it with a stand-in that needs no simulator install.","measures":["observation","reward","terminated","truncated","tick","episode","seed","info"],"adjusts":[],"actions":[{"name":"step","description":"Advance the simulated world by a bounded number of fixed timesteps, optionally applying an action for each step, and return the resulting observation and terminal flags."},{"name":"reset","description":"Reset the simulated world to a scenario start state and return the initial observation. When a seed is supplied the endpoint records it in the receipt; otherwise the endpoint's declared default seed applies."},{"name":"seed","description":"Set the seed used by the simulated world's random number generators for subsequent steps, without resetting the world. The accepted seed is echoed in the receipt."}],"tags":["anymal","anymal-d","isaac-lab","isaac-sim","locomotion","velocity-tracking","reinforcement-learning","simulation","gymnasium"],"backends":["fake"],"served_backend":"fake","evidence":"contract_checked","upstream":{"repo_url":"https://github.com/auturbo/stridesim","commit":"d941ee93cec051c9455cf0c699384fd5410d4d3f","license":"MIT"},"stars":25,"install":{"openai4s":"openai4s lab add robots/auturbo__stridesim","mhs":"mhs serve robots/auturbo__stridesim --port 7400","mcp":"mhs serve robots/auturbo__stridesim --mcp"}},
{"id":"robots/avidbots__flatland","name":"Flatland 2-D simulator","device_id":"mhs://localhost/flatland","track":"robots","category":"Simulation","topic":"mobile navigation","kind":"world.sim","vendor":"Avidbots","model":null,"mode":"simulated","risk":"R0","family":"ros","role":"sim-env","intro":"Flatland 2-D simulator, adapted from avidbots/flatland. It reads `read_sim_clock`; runs `pause` and `resume`. `pause`: pause the simulated world with the acknowledged pause service. A simulator: the market serves it with a stand-in that needs no simulator install.","measures":["read_sim_clock"],"adjusts":[],"actions":[{"name":"pause","description":"Pause the simulated world with the acknowledged pause service"},{"name":"resume","description":"Resume the simulated world with the acknowledged resume service"}],"tags":["ros","ros1","simulation","flatland","clock","pause"],"backends":["fake"],"served_backend":"fake","evidence":"contract_checked","upstream":{"repo_url":"https://github.com/avidbots/flatland","commit":"fd636eea6c283d36eb662c36604daae45266eaf9","license":"BSD-3-Clause"},"stars":123,"install":{"openai4s":"openai4s lab add robots/avidbots__flatland","mhs":"mhs serve robots/avidbots__flatland --port 7400","mcp":"mhs serve robots/avidbots__flatland --mcp"}},
{"id":"robots/avisengine__avis-engine-python-api","name":"AVIS Engine car (avisengine.Car)","device_id":"mhs://localhost/avis-engine-car","track":"robots","category":"Mobile robots","topic":null,"kind":"robot.mobile_base","vendor":"AVIS Engine","model":"AVIS Engine simulated car (Python API client)","mode":"simulated","risk":"R1","family":"python-object","role":"sim-env","intro":"AVIS Engine car (avisengine.Car), adapted from avisengine/avis-engine-python-api. It reads `speed` and `sensors`; sets `throttle`, `steering` and `sensor_angle`; runs `stop_motion`. `stop_motion`: stop all motion on the resource with a declared deceleration profile and report the stopping position. This capability is always cancellable=false and is exempt from rate limiting. A simulator: the market serves it with a stand-in that needs no simulator install.","measures":["speed","sensors"],"adjusts":["throttle","steering","sensor_angle"],"actions":[{"name":"stop_motion","description":"Stop all motion on the resource with a declared deceleration profile and report the stopping position. This capability is always cancellable=false and is exempt from rate limiting."}],"tags":["avis-engine","autonomous-vehicle","simulator","car","mobile-base","sensor","telemetry"],"backends":["fake"],"served_backend":"fake","evidence":"contract_checked","upstream":{"repo_url":"https://github.com/avisengine/avis-engine-python-api","commit":"32b9a9e063a5608b9b60a87aa32171d44c116316","license":"NOASSERTION"},"stars":22,"install":{"openai4s":"openai4s lab add robots/avisengine__avis-engine-python-api","mhs":"mhs serve robots/avisengine__avis-engine-python-api --port 7400","mcp":"mhs serve robots/avisengine__avis-engine-python-api --mcp"}},
{"id":"robots/avisingh599__roboverse","name":"Roboverse Widow250Grasp-v0 (PyBullet WidowX 250 simulation)","device_id":"mhs://localhost/widow250","track":"robots","category":"Simulation","topic":"robot manipulation","kind":"world.sim","vendor":"avisingh599/roboverse","model":"WidowX 250 (Widow250Grasp-v0)","mode":"simulated","risk":"R0","family":"gymnasium","role":"sim-env","intro":"Roboverse Widow250Grasp-v0 (PyBullet WidowX 250 simulation), adapted from avisingh599/roboverse. It reads `observation`, `reward`, `terminated`, `truncated` and 4 more; runs `step`, `reset` and `seed`. `step`: advance the simulated world by a bounded number of fixed timesteps, optionally applying an action for each step, and return the resulting observation and terminal flags. A simulator: the market serves it with a stand-in that needs no simulator install.","measures":["observation","reward","terminated","truncated","tick","episode","seed","info"],"adjusts":[],"actions":[{"name":"step","description":"Advance the simulated world by a bounded number of fixed timesteps, optionally applying an action for each step, and return the resulting observation and terminal flags."},{"name":"reset","description":"Reset the simulated world to a scenario start state and return the initial observation. When a seed is supplied the endpoint records it in the receipt; otherwise the endpoint's declared default seed applies."},{"name":"seed","description":"Set the seed used by the simulated world's random number generators for subsequent steps, without resetting the world. The accepted seed is echoed in the receipt."}],"tags":["roboverse","widow250","widowx-250","pybullet","gym","reinforcement-learning","simulation"],"backends":["fake"],"served_backend":"fake","evidence":"contract_checked","upstream":{"repo_url":"https://github.com/avisingh599/roboverse","commit":"a443f79af67529158ba409889fd7b8006b1d3f88","license":"MIT"},"stars":28,"install":{"openai4s":"openai4s lab add robots/avisingh599__roboverse","mhs":"mhs serve robots/avisingh599__roboverse --port 7400","mcp":"mhs serve robots/avisingh599__roboverse --mcp"}},
{"id":"robots/avslab__bsk_rl","name":"bsk_rl SatelliteTasking-v1 (satellite tasking simulation)","device_id":"mhs://localhost/satellite_tasking","track":"robots","category":"Simulation","topic":null,"kind":"world.sim","vendor":"AVS Lab","model":"SatelliteTasking-v1","mode":"simulated","risk":"R0","family":"gymnasium","role":"sim-env","intro":"bsk_rl SatelliteTasking-v1 (satellite tasking simulation), adapted from avslab/bsk_rl. It reads `observation`, `reward`, `terminated`, `truncated` and 4 more; runs `step`, `reset` and `seed`. `step`: advance the simulated world by a bounded number of fixed timesteps, optionally applying an action for each step, and return the resulting observation and terminal flags. A simulator: the market serves it with a stand-in that needs no simulator install.","measures":["observation","reward","terminated","truncated","tick","episode","seed","info"],"adjusts":[],"actions":[{"name":"step","description":"Advance the simulated world by a bounded number of fixed timesteps, optionally applying an action for each step, and return the resulting observation and terminal flags."},{"name":"reset","description":"Reset the simulated world to a scenario start state and return the initial observation. When a seed is supplied the endpoint records it in the receipt; otherwise the endpoint's declared default seed applies."},{"name":"seed","description":"Set the seed used by the simulated world's random number generators for subsequent steps, without resetting the world. The accepted seed is echoed in the receipt."}],"tags":["satellite","tasking","astrodynamics","basilisk","reinforcement-learning","simulation","gymnasium"],"backends":["fake"],"served_backend":"fake","evidence":"contract_checked","upstream":{"repo_url":"https://github.com/avslab/bsk_rl","commit":"e307f335a3f133ef6dc528a9bb3b2ceb06329605","license":"MIT"},"stars":122,"install":{"openai4s":"openai4s lab add robots/avslab__bsk_rl","mhs":"mhs serve robots/avslab__bsk_rl --port 7400","mcp":"mhs serve robots/avslab__bsk_rl --mcp"}},
{"id":"robots/axelbr__racecar_gym","name":"racecar_gym single-agent race environment","device_id":"mhs://localhost/racecar-gym","track":"robots","category":"Simulation","topic":"mobile robots","kind":"world.sim","vendor":"axelbr","model":"racecar_gym","mode":"simulated","risk":"R0","family":"gymnasium","role":"sim-env","intro":"racecar_gym single-agent race environment, adapted from axelbr/racecar_gym. It reads `observation`, `reward`, `terminated`, `truncated` and 4 more; runs `step`, `reset` and `seed`. `step`: advance the simulated world by a bounded number of fixed timesteps, optionally applying an action for each step, and return the resulting observation and terminal flags. A simulator: the market serves it with a stand-in that needs no simulator install.","measures":["observation","reward","terminated","truncated","tick","episode","seed","info"],"adjusts":[],"actions":[{"name":"step","description":"Advance the simulated world by a bounded number of fixed timesteps, optionally applying an action for each step, and return the resulting observation and terminal flags."},{"name":"reset","description":"Reset the simulated world to a scenario start state and return the initial observation. When a seed is supplied the endpoint records it in the receipt; otherwise the endpoint's declared default seed applies."},{"name":"seed","description":"Set the seed used by the simulated world's random number generators for subsequent steps, without resetting the world. The accepted seed is echoed in the receipt."}],"tags":["racecar","racing","reinforcement-learning","pybullet","simulation","gymnasium"],"backends":["fake"],"served_backend":"fake","evidence":"contract_checked","upstream":{"repo_url":"https://github.com/axelbr/racecar_gym","commit":"70496767d80397010ac9b5ba722647ca67e3f85c","license":"MIT"},"stars":240,"install":{"openai4s":"openai4s lab add robots/axelbr__racecar_gym","mhs":"mhs serve robots/axelbr__racecar_gym --port 7400","mcp":"mhs serve robots/axelbr__racecar_gym --mcp"}},
{"id":"robots/b4be1__rl-arch-assembly","name":"rl-arch-assembly StackingTask (simulated UR10 placing)","device_id":"mhs://localhost/rl-arch-assembly","track":"robots","category":"Simulation","topic":"robot arm manipulation","kind":"world.sim","vendor":"b4be1","model":"rl-arch-assembly StackingTask","mode":"simulated","risk":"R1","family":"gymnasium","role":"sim-env","intro":"rl-arch-assembly StackingTask (simulated UR10 placing), adapted from b4be1/rl-arch-assembly. It reads `observation`, `reward`, `terminated`, `truncated` and 4 more; runs `step`, `reset` and `seed`. `step`: advance the simulated world by a bounded number of fixed timesteps, optionally applying an action for each step, and return the resulting observation and terminal flags. A simulator: the market serves it with a stand-in that needs no simulator install.","measures":["observation","reward","terminated","truncated","tick","episode","seed","info"],"adjusts":[],"actions":[{"name":"step","description":"Advance the simulated world by a bounded number of fixed timesteps, optionally applying an action for each step, and return the resulting observation and terminal flags."},{"name":"reset","description":"Reset the simulated world to a scenario start state and return the initial observation. When a seed is supplied the endpoint records it in the receipt; otherwise the endpoint's declared default seed applies."},{"name":"seed","description":"Set the seed used by the simulated world's random number generators for subsequent steps, without resetting the world. The accepted seed is echoed in the receipt."}],"tags":["assembly","gym","placing","reinforcement-learning","robot-arm","simulation","stacking","ur10"],"backends":["fake"],"served_backend":"fake","evidence":"contract_checked","upstream":{"repo_url":"https://github.com/b4be1/rl-arch-assembly","commit":"187e460c79e41ae38e1b750d75e369f3473dd3eb","license":"NOASSERTION"},"stars":9,"install":{"openai4s":"openai4s lab add robots/b4be1__rl-arch-assembly","mhs":"mhs serve robots/b4be1__rl-arch-assembly --port 7400","mcp":"mhs serve robots/b4be1__rl-arch-assembly --mcp"}},
{"id":"robots/barisyazici__deep-rl-grasping","name":"deep-rl-grasping gripper-env-v0 (simulated grasping)","device_id":"mhs://localhost/gripper-env","track":"robots","category":"Simulation","topic":"robot arm manipulation","kind":"world.sim","vendor":"Baris Yazici","model":"gripper-env-v0","mode":"simulated","risk":"R0","family":"gymnasium","role":"sim-env","intro":"deep-rl-grasping gripper-env-v0 (simulated grasping), adapted from barisyazici/deep-rl-grasping. It reads `observation`, `reward`, `terminated`, `truncated` and 4 more; runs `step`, `reset` and `seed`. `step`: advance the simulated world by a bounded number of fixed timesteps, optionally applying an action for each step, and return the resulting observation and terminal flags. A simulator: the market serves it with a stand-in that needs no simulator install.","measures":["observation","reward","terminated","truncated","tick","episode","seed","info"],"adjusts":[],"actions":[{"name":"step","description":"Advance the simulated world by a bounded number of fixed timesteps, optionally applying an action for each step, and return the resulting observation and terminal flags."},{"name":"reset","description":"Reset the simulated world to a scenario start state and return the initial observation. When a seed is supplied the endpoint records it in the receipt; otherwise the endpoint's declared default seed applies."},{"name":"seed","description":"Set the seed used by the simulated world's random number generators for subsequent steps, without resetting the world. The accepted seed is echoed in the receipt."}],"tags":["grasping","robot","reinforcement-learning","simulation","gym","pybullet"],"backends":["fake"],"served_backend":"fake","evidence":"contract_checked","upstream":{"repo_url":"https://github.com/barisyazici/deep-rl-grasping","commit":"fd2214e42a77e80fa986f04e27e043e0133b4d51","license":"MIT"},"stars":276,"install":{"openai4s":"openai4s lab add robots/barisyazici__deep-rl-grasping","mhs":"mhs serve robots/barisyazici__deep-rl-grasping --port 7400","mcp":"mhs serve robots/barisyazici__deep-rl-grasping --mcp"}},
{"id":"robots/barisyazici__libfranka-sim","name":"Franka Hand (libfranka-sim)","device_id":"mhs://localhost/franka_hand","track":"robots","category":"Robot arms and grippers","topic":null,"kind":"robot.gripper","vendor":"Franka","model":"Franka Hand (simulated)","mode":"simulated","risk":"R2","family":"python-object","role":"twin-candidate","intro":"Franka Hand (libfranka-sim), adapted from barisyazici/libfranka-sim. It reads `width_mm`, `max_width_mm`, `is_grasped`, `is_stuck` and 1 more; runs `grasp`, `release`, `hand_home`, `hand_move` and 1 more. `grasp`: close the gripper on a target object with a bounded force and report the achieved grasp width. A failed grasp is a completed operation with grasped=false, not a silent success. A simulator: the market serves it with a stand-in that needs no simulator install.","measures":["width_mm","max_width_mm","is_grasped","is_stuck","temperature_c"],"adjusts":[],"actions":[{"name":"grasp","description":"Close the gripper on a target object with a bounded force and report the achieved grasp width. A failed grasp is a completed operation with grasped=false, not a silent success."},{"name":"release","description":"Open the gripper to release the held object, optionally to a declared opening width, and report the achieved width."},{"name":"hand_home","description":"Drive the fingers fully open and clear the grasp and stuck state"},{"name":"hand_move","description":"Drive the fingers to a width and wait until they settle"},{"name":"hand_stop","description":"Stop the hand by driving the fingers fully open, the simulator's safe state"}],"tags":["franka","gripper","franka hand","grasp","manipulation","simulation"],"backends":["fake"],"served_backend":"fake","evidence":"contract_checked","upstream":{"repo_url":"https://github.com/barisyazici/libfranka-sim","commit":"d893e17dc77a338a92a1673a8e616c8b251cc5a9","license":"Apache-2.0"},"stars":85,"install":{"openai4s":"openai4s lab add robots/barisyazici__libfranka-sim","mhs":"mhs serve robots/barisyazici__libfranka-sim --port 7400","mcp":"mhs serve robots/barisyazici__libfranka-sim --mcp"}},
{"id":"robots/bark-simulator__bark-ml","name":"BARK-ML highway-v0 (continuous highway driving)","device_id":"mhs://localhost/bark-highway","track":"robots","category":"Simulation","topic":"mobile robots","kind":"world.sim","vendor":"BARK Simulator","model":"highway-v0","mode":"simulated","risk":"R0","family":"gymnasium","role":"sim-env","intro":"BARK-ML highway-v0 (continuous highway driving), adapted from bark-simulator/bark-ml. It reads `observation`, `reward`, `terminated`, `truncated` and 4 more; runs `step`, `reset` and `seed`. `step`: advance the simulated world by a bounded number of fixed timesteps, optionally applying an action for each step, and return the resulting observation and terminal flags. A simulator: the market serves it with a stand-in that needs no simulator install.","measures":["observation","reward","terminated","truncated","tick","episode","seed","info"],"adjusts":[],"actions":[{"name":"step","description":"Advance the simulated world by a bounded number of fixed timesteps, optionally applying an action for each step, and return the resulting observation and terminal flags."},{"name":"reset","description":"Reset the simulated world to a scenario start state and return the initial observation. When a seed is supplied the endpoint records it in the receipt; otherwise the endpoint's declared default seed applies."},{"name":"seed","description":"Set the seed used by the simulated world's random number generators for subsequent steps, without resetting the world. The accepted seed is echoed in the receipt."}],"tags":["autonomous-driving","highway","reinforcement-learning","simulation","gymnasium","bark-ml"],"backends":["fake"],"served_backend":"fake","evidence":"contract_checked","upstream":{"repo_url":"https://github.com/bark-simulator/bark-ml","commit":"ea2ee58be406e71c5e95c80c0ffbe56c03d6ec60","license":"MIT"},"stars":0,"install":{"openai4s":"openai4s lab add robots/bark-simulator__bark-ml","mhs":"mhs serve robots/bark-simulator__bark-ml --port 7400","mcp":"mhs serve robots/bark-simulator__bark-ml --mcp"}},
{"id":"robots/benelot__pybullet-gym","name":"PyBullet Gymperium inverted pendulum (InvertedPendulumPyBulletEnv-v0)","device_id":"mhs://localhost/inverted-pendulum","track":"robots","category":"Simulation","topic":null,"kind":"world.sim","vendor":"Benjamin Ellenberger (benelot)","model":"InvertedPendulumPyBulletEnv-v0","mode":"simulated","risk":"R0","family":"gymnasium","role":"sim-env","intro":"PyBullet Gymperium inverted pendulum (InvertedPendulumPyBulletEnv-v0), adapted from benelot/pybullet-gym. It reads `observation`, `reward`, `terminated`, `truncated` and 4 more; runs `step`, `reset` and `seed`. `step`: advance the simulated world by a bounded number of fixed timesteps, optionally applying an action for each step, and return the resulting observation and terminal flags. A simulator: the market serves it with a stand-in that needs no simulator install.","measures":["observation","reward","terminated","truncated","tick","episode","seed","info"],"adjusts":[],"actions":[{"name":"step","description":"Advance the simulated world by a bounded number of fixed timesteps, optionally applying an action for each step, and return the resulting observation and terminal flags."},{"name":"reset","description":"Reset the simulated world to a scenario start state and return the initial observation. When a seed is supplied the endpoint records it in the receipt; otherwise the endpoint's declared default seed applies."},{"name":"seed","description":"Set the seed used by the simulated world's random number generators for subsequent steps, without resetting the world. The accepted seed is echoed in the receipt."}],"tags":["inverted-pendulum","roboschool","reinforcement-learning","simulation","pybullet"],"backends":["fake"],"served_backend":"fake","evidence":"contract_checked","upstream":{"repo_url":"https://github.com/benelot/pybullet-gym","commit":"bc68201c8101c4e30dde95f425647a0709ee2f29","license":"MIT"},"stars":884,"install":{"openai4s":"openai4s lab add robots/benelot__pybullet-gym","mhs":"mhs serve robots/benelot__pybullet-gym --port 7400","mcp":"mhs serve robots/benelot__pybullet-gym --mcp"}},
{"id":"robots/benykoz__gym_px4","name":"gym_px4 PX4 Gazebo SITL environment","device_id":"mhs://localhost/gym-px4","track":"robots","category":"Simulation","topic":"UAVs","kind":"world.sim","vendor":"benykoz","model":"px4-v0","mode":"simulated","risk":"R2","family":"gymnasium","role":"sim-env","intro":"gym_px4 PX4 Gazebo SITL environment, adapted from benykoz/gym_px4. It reads `observation`, `reward`, `terminated`, `truncated` and 4 more; runs `step`, `reset` and `seed`. `step`: advance the simulated world by a bounded number of fixed timesteps, optionally applying an action for each step, and return the resulting observation and terminal flags. A simulator: the market serves it with a stand-in that needs no simulator install.","measures":["observation","reward","terminated","truncated","tick","episode","seed","info"],"adjusts":[],"actions":[{"name":"step","description":"Advance the simulated world by a bounded number of fixed timesteps, optionally applying an action for each step, and return the resulting observation and terminal flags."},{"name":"reset","description":"Reset the simulated world to a scenario start state and return the initial observation. When a seed is supplied the endpoint records it in the receipt; otherwise the endpoint's declared default seed applies."},{"name":"seed","description":"Set the seed used by the simulated world's random number generators for subsequent steps, without resetting the world. The accepted seed is echoed in the receipt."}],"tags":["gym","gymnasium","px4","mavros","sitl","gazebo","simulation","quadcopter"],"backends":["fake"],"served_backend":"fake","evidence":"contract_checked","upstream":{"repo_url":"https://github.com/benykoz/gym_px4","commit":"d53a9d47030d7ca3132747527d66f9a097fd0986","license":"NOASSERTION"},"stars":9,"install":{"openai4s":"openai4s lab add robots/benykoz__gym_px4","mhs":"mhs serve robots/benykoz__gym_px4 --port 7400","mcp":"mhs serve robots/benykoz__gym_px4 --mcp"}},
{"id":"robots/bilalkabas__drl-nav","name":"DRL-Nav AirSim corridor (legacy Gym environment)","device_id":"mhs://localhost/drl-nav","track":"robots","category":"Simulation","topic":null,"kind":"world.sim","vendor":"Bilal Kabas","model":"DRL-Nav","mode":"simulated","risk":"R0","family":"gymnasium","role":"sim-env","intro":"DRL-Nav AirSim corridor (legacy Gym environment), adapted from bilalkabas/drl-nav. It reads `observation`, `reward`, `terminated`, `truncated` and 4 more; runs `step`, `reset` and `seed`. `step`: advance the simulated world by a bounded number of fixed timesteps, optionally applying an action for each step, and return the resulting observation and terminal flags. A simulator: the market serves it with a stand-in that needs no simulator install.","measures":["observation","reward","terminated","truncated","tick","episode","seed","info"],"adjusts":[],"actions":[{"name":"step","description":"Advance the simulated world by a bounded number of fixed timesteps, optionally applying an action for each step, and return the resulting observation and terminal flags."},{"name":"reset","description":"Reset the simulated world to a scenario start state and return the initial observation. When a seed is supplied the endpoint records it in the receipt; otherwise the endpoint's declared default seed applies."},{"name":"seed","description":"Set the seed used by the simulated world's random number generators for subsequent steps, without resetting the world. The accepted seed is echoed in the receipt."}],"tags":["drone","uav","navigation","reinforcement-learning","simulation","airsim","legacy-gym","corridor"],"backends":["fake"],"served_backend":"fake","evidence":"contract_checked","upstream":{"repo_url":"https://github.com/bilalkabas/drl-nav","commit":"a996f5461c90adfe765ca3274d4da7c8499891c3","license":"AGPL-3.0"},"stars":74,"install":{"openai4s":"openai4s lab add robots/bilalkabas__drl-nav","mhs":"mhs serve robots/bilalkabas__drl-nav --port 7400","mcp":"mhs serve robots/bilalkabas__drl-nav --mcp"}},
{"id":"robots/blackcoffeerobotics__bcr_arm","name":"BCR 7-DOF arm","device_id":"mhs://localhost/bcr_arm","track":"robots","category":"Robot arms and grippers","topic":null,"kind":"robot.arm","vendor":"Black Coffee Robotics","model":"BCR Arm","mode":"simulated","risk":"R2","family":"ros","role":"sim-env","intro":"BCR 7-DOF arm, adapted from blackcoffeerobotics/bcr_arm. It reads `joint_positions`, `joint_velocities` and `read_joint_state`; runs `follow_arm_trajectory` and `activate_trajectory_controller`. `follow_arm_trajectory`: send FollowJointTrajectory points; return the controller error_code/error_string. A simulator: the market serves it with a stand-in that needs no simulator install.","measures":["joint_positions","joint_velocities","read_joint_state"],"adjusts":[],"actions":[{"name":"follow_arm_trajectory","description":"Send FollowJointTrajectory points; return the controller error_code/error_string"},{"name":"activate_trajectory_controller","description":"The declared re-enable after a safety reset: switch joint_trajectory_controller on again through /controller_manager/switch_controller (STRICT), so the trajectory the e-stop dropped is not resumed. On activation the controller holds the state it starts from: the last command-interface values when set_last_command_interface_value_as_state_on_activation (true by default) applies and every state interface has a command interface, else the measured joints. With this deployment's position-only command interface (position and velocity states) that is the measured position; a configuration that also commanded velocity would hold the last position command, which can differ from the measured position"}],"tags":["ros","ros2","gazebo","simulation","robot-arm","trajectory","joint-state"],"backends":["fake"],"served_backend":"fake","evidence":"contract_checked","upstream":{"repo_url":"https://github.com/blackcoffeerobotics/bcr_arm","commit":"9bd3d60b306bb2ed22f5cb1fd588aca99081a711","license":"Apache-2.0"},"stars":88,"install":{"openai4s":"openai4s lab add robots/blackcoffeerobotics__bcr_arm","mhs":"mhs serve robots/blackcoffeerobotics__bcr_arm --port 7400","mcp":"mhs serve robots/blackcoffeerobotics__bcr_arm --mcp"}},
{"id":"robots/blackcoffeerobotics__bcr_bot","name":"bcr_bot MuJoCo small-warehouse simulation","device_id":"mhs://localhost/bcr_bot_sim","track":"robots","category":"Simulation","topic":"mobile robots","kind":"world.sim","vendor":"blackcoffeerobotics","model":"bcr_bot_small_warehouse","mode":"simulated","risk":"R0","family":"mujoco","role":"sim-env","intro":"bcr_bot MuJoCo small-warehouse simulation, adapted from blackcoffeerobotics/bcr_bot. It reads `time_ms`, `qpos`, `qvel`, `ctrl` and 4 more; runs `step` and `reset`. `step`: advance the simulated world by a bounded number of fixed timesteps, optionally applying an action for each step, and return the resulting observation and terminal flags. A simulator: the market serves it with a stand-in that needs no simulator install.","measures":["time_ms","qpos","qvel","ctrl","tick","timestep_ms","seed","native_checkpoint"],"adjusts":[],"actions":[{"name":"step","description":"Advance the simulated world by a bounded number of fixed timesteps, optionally applying an action for each step, and return the resulting observation and terminal flags."},{"name":"reset","description":"Reset the simulated world to a scenario start state and return the initial observation. When a seed is supplied the endpoint records it in the receipt; otherwise the endpoint's declared default seed applies."}],"tags":["mujoco","mjcf","simulation","differential-drive","mobile-base","ros2"],"backends":["fake"],"served_backend":"fake","evidence":"contract_checked","upstream":{"repo_url":"https://github.com/blackcoffeerobotics/bcr_bot","commit":"58b9220f35870bf8543db12f8b457942fa07cac3","license":"Apache-2.0"},"stars":424,"install":{"openai4s":"openai4s lab add robots/blackcoffeerobotics__bcr_bot","mhs":"mhs serve robots/blackcoffeerobotics__bcr_bot --port 7400","mcp":"mhs serve robots/blackcoffeerobotics__bcr_bot --mcp"}},
{"id":"robots/boosterrobotics__booster_train","name":"Booster T1 MotionTracking-v0 (Isaac Lab manager-based environment)","device_id":"mhs://localhost/booster-t1-motion-tracking","track":"robots","category":"Simulation","topic":null,"kind":"world.sim","vendor":"Booster Robotics","model":"Booster-T1-MotionTracking-v0","mode":"simulated","risk":"R0","family":"gymnasium","role":"sim-env","intro":"Booster T1 MotionTracking-v0 (Isaac Lab manager-based environment), adapted from boosterrobotics/booster_train. It reads `observation`, `reward`, `terminated`, `truncated` and 4 more; runs `step`, `reset` and `seed`. `step`: advance the simulated world by a bounded number of fixed timesteps, optionally applying an action for each step, and return the resulting observation and terminal flags. A simulator: the market serves it with a stand-in that needs no simulator install.","measures":["observation","reward","terminated","truncated","tick","episode","seed","info"],"adjusts":[],"actions":[{"name":"step","description":"Advance the simulated world by a bounded number of fixed timesteps, optionally applying an action for each step, and return the resulting observation and terminal flags."},{"name":"reset","description":"Reset the simulated world to a scenario start state and return the initial observation. When a seed is supplied the endpoint records it in the receipt; otherwise the endpoint's declared default seed applies."},{"name":"seed","description":"Set the seed used by the simulated world's random number generators for subsequent steps, without resetting the world. The accepted seed is echoed in the receipt."}],"tags":["booster","t1","humanoid","motion-tracking","beyondmimic","isaac-lab","isaac-sim","reinforcement-learning","simulation","gymnasium"],"backends":["fake"],"served_backend":"fake","evidence":"contract_checked","upstream":{"repo_url":"https://github.com/boosterrobotics/booster_train","commit":"8bb5b53824e0fbcfe69a5cb78a81f4bddb3e2a6e","license":"Apache-2.0"},"stars":66,"install":{"openai4s":"openai4s lab add robots/boosterrobotics__booster_train","mhs":"mhs serve robots/boosterrobotics__booster_train --port 7400","mcp":"mhs serve robots/boosterrobotics__booster_train --mcp"}},
{"id":"robots/boston-dynamics__spot-sdk","name":"Boston Dynamics Spot (bosdyn.client.robot.Robot)","device_id":"mhs://localhost/spot","track":"robots","category":"Mobile robots","topic":null,"kind":"robot.mobile_base","vendor":"Boston Dynamics","model":"Spot quadruped mobile robot","mode":"hardware","risk":"R2","family":"python-object","role":"device-driver","intro":"Boston Dynamics Spot (bosdyn.client.robot.Robot), adapted from boston-dynamics/spot-sdk. It reads `serial_number`, `nickname`, `species`, `estopped` and 5 more; sets `motors_on`. A hardware driver: the market serves its fake backend, so no instrument is needed.","measures":["serial_number","nickname","species","estopped","has_arm","usernames","frame_names","can_power_off_robot","redundant_safety_stop_enabled"],"adjusts":["motors_on"],"actions":[],"tags":["mobile robot","quadruped","spot","boston dynamics","motor power","robot state","e-stop"],"backends":["fake","hardware"],"served_backend":"fake","evidence":"contract_checked","upstream":{"repo_url":"https://github.com/boston-dynamics/spot-sdk","commit":"04537ddafe0641d1751af3eb9e76cb785fc18594","license":"LicenseRef-proprietary"},"stars":0,"install":{"openai4s":"openai4s lab add robots/boston-dynamics__spot-sdk","mhs":"mhs serve robots/boston-dynamics__spot-sdk --port 7400","mcp":"mhs serve robots/boston-dynamics__spot-sdk --mcp"}},
{"id":"robots/botianhao__humanoid_control","name":"Botianhao humanoid MuJoCo model","device_id":"mhs://localhost/humanoid_control","track":"robots","category":"Simulation","topic":"humanoid robots","kind":"world.sim","vendor":"botianhao","model":"humanoid-legged-description","mode":"simulated","risk":"R0","family":"mujoco","role":"sim-env","intro":"Botianhao humanoid MuJoCo model, adapted from botianhao/humanoid_control. It reads `time_ms`, `qpos`, `qvel`, `ctrl` and 4 more; runs `step` and `reset`. `step`: advance the simulated world by a bounded number of fixed timesteps, optionally applying an action for each step, and return the resulting observation and terminal flags. A simulator: the market serves it with a stand-in that needs no simulator install.","measures":["time_ms","qpos","qvel","ctrl","tick","timestep_ms","seed","native_checkpoint"],"adjusts":[],"actions":[{"name":"step","description":"Advance the simulated world by a bounded number of fixed timesteps, optionally applying an action for each step, and return the resulting observation and terminal flags."},{"name":"reset","description":"Reset the simulated world to a scenario start state and return the initial observation. When a seed is supplied the endpoint records it in the receipt; otherwise the endpoint's declared default seed applies."}],"tags":["botianhao","humanoid","legged","mujoco","simulation","robot"],"backends":["fake"],"served_backend":"fake","evidence":"contract_checked","upstream":{"repo_url":"https://github.com/botianhao/humanoid_control","commit":"cfb27eb205d6ee21a801abe273ffc0a53d3be0f2","license":"MIT"},"stars":42,"install":{"openai4s":"openai4s lab add robots/botianhao__humanoid_control","mhs":"mhs serve robots/botianhao__humanoid_control --port 7400","mcp":"mhs serve robots/botianhao__humanoid_control --mcp"}},
{"id":"robots/brave-eai__dexjoco","name":"DexJoCo bimanual assembly (MuJoCo scene)","device_id":"mhs://localhost/dexjoco-bimanual-assembly","track":"robots","category":"Simulation","topic":"robot arm manipulation","kind":"world.sim","vendor":"Brave EAI","model":"Arena_Allegro_Bimanual_Assembly","mode":"simulated","risk":"R0","family":"mujoco","role":"sim-env","intro":"DexJoCo bimanual assembly (MuJoCo scene), adapted from brave-eai/dexjoco. It reads `time_ms`, `qpos`, `qvel`, `ctrl` and 4 more; runs `step` and `reset`. `step`: advance the simulated world by a bounded number of fixed timesteps, optionally applying an action for each step, and return the resulting observation and terminal flags. A simulator: the market serves it with a stand-in that needs no simulator install.","measures":["time_ms","qpos","qvel","ctrl","tick","timestep_ms","seed","native_checkpoint"],"adjusts":[],"actions":[{"name":"step","description":"Advance the simulated world by a bounded number of fixed timesteps, optionally applying an action for each step, and return the resulting observation and terminal flags."},{"name":"reset","description":"Reset the simulated world to a scenario start state and return the initial observation. When a seed is supplied the endpoint records it in the receipt; otherwise the endpoint's declared default seed applies."}],"tags":["dexjoco","bimanual","dexterous-manipulation","panda","allegro","mujoco","simulation"],"backends":["fake"],"served_backend":"fake","evidence":"contract_checked","upstream":{"repo_url":"https://github.com/brave-eai/dexjoco","commit":"8d23b0fab23b17a58c4b55f3942e17013aaf8267","license":"MIT"},"stars":0,"install":{"openai4s":"openai4s lab add robots/brave-eai__dexjoco","mhs":"mhs serve robots/brave-eai__dexjoco --port 7400","mcp":"mhs serve robots/brave-eai__dexjoco --mcp"}},
{"id":"robots/caelan__ltamp","name":"LTAMP simulated PR2 (PyBullet PBController)","device_id":"mhs://localhost/ltamp-pr2-pybullet","track":"robots","category":"Robot arms and grippers","topic":null,"kind":"robot.arm","vendor":"caelan","model":"PR2 in LTAMP's PyBullet world (PBController)","mode":"simulated","risk":"R1","family":"python-object","role":"sim-env","intro":"LTAMP simulated PR2 (PyBullet PBController), adapted from caelan/ltamp. It reads `joint_positions`; sets `torso_position`; runs `move_arms`. `move_arms`: command one or more actuated joints to target positions in joint space, optionally over a declared duration, and report whether the target was reached within tolerance. A simulator: the market serves it with a stand-in that needs no simulator install.","measures":["joint_positions"],"adjusts":["torso_position"],"actions":[{"name":"move_arms","description":"Command one or more actuated joints to target positions in joint space, optionally over a declared duration, and report whether the target was reached within tolerance."}],"tags":["pybullet","pr2","robot arm","simulation","task and motion planning"],"backends":["fake"],"served_backend":"fake","evidence":"contract_checked","upstream":{"repo_url":"https://github.com/caelan/ltamp","commit":"7e0a28dca1156b1dc6d3b9459fed58607249c3ed","license":"GPL-3.0"},"stars":63,"install":{"openai4s":"openai4s lab add robots/caelan__ltamp","mhs":"mhs serve robots/caelan__ltamp --port 7400","mcp":"mhs serve robots/caelan__ltamp --mcp"}},
{"id":"robots/cai23sbp__go2_parkour_deploy","name":"Unitree GO2 parkour deployment (MuJoCo simulation)","device_id":"mhs://localhost/go2_parkour","track":"robots","category":"Simulation","topic":null,"kind":"world.sim","vendor":"Unitree","model":"GO2","mode":"simulated","risk":"R0","family":"mujoco","role":"sim-env","intro":"Unitree GO2 parkour deployment (MuJoCo simulation), adapted from cai23sbp/go2_parkour_deploy. It reads `time_ms`, `qpos`, `qvel`, `ctrl` and 4 more; runs `step` and `reset`. `step`: advance the simulated world by a bounded number of fixed timesteps, optionally applying an action for each step, and return the resulting observation and terminal flags. A simulator: the market serves it with a stand-in that needs no simulator install.","measures":["time_ms","qpos","qvel","ctrl","tick","timestep_ms","seed","native_checkpoint"],"adjusts":[],"actions":[{"name":"step","description":"Advance the simulated world by a bounded number of fixed timesteps, optionally applying an action for each step, and return the resulting observation and terminal flags."},{"name":"reset","description":"Reset the simulated world to a scenario start state and return the initial observation. When a seed is supplied the endpoint records it in the receipt; otherwise the endpoint's declared default seed applies."}],"tags":["unitree","go2","quadruped","parkour","mujoco","simulation","robot"],"backends":["fake"],"served_backend":"fake","evidence":"contract_checked","upstream":{"repo_url":"https://github.com/cai23sbp/go2_parkour_deploy","commit":"5f04c3b51dcef3629a9500aef16e247d756fcd61","license":"GPL-3.0"},"stars":71,"install":{"openai4s":"openai4s lab add robots/cai23sbp__go2_parkour_deploy","mhs":"mhs serve robots/cai23sbp__go2_parkour_deploy --port 7400","mcp":"mhs serve robots/cai23sbp__go2_parkour_deploy --mcp"}},
{"id":"robots/callmeray__maniskill-vitac2024","name":"ManiSkill-ViTac 2024 peg insertion (Gymnasium)","device_id":"mhs://localhost/vitac-peg-insertion","track":"robots","category":"Simulation","topic":"robot arm manipulation","kind":"world.sim","vendor":"callmeray","model":"ManiSkill-ViTac 2024","mode":"simulated","risk":"R0","family":"gymnasium","role":"sim-env","intro":"ManiSkill-ViTac 2024 peg insertion (Gymnasium), adapted from callmeray/maniskill-vitac2024. It reads `observation`, `reward`, `terminated`, `truncated` and 4 more; runs `step`, `reset` and `seed`. `step`: advance the simulated world by a bounded number of fixed timesteps, optionally applying an action for each step, and return the resulting observation and terminal flags. A simulator: the market serves it with a stand-in that needs no simulator install.","measures":["observation","reward","terminated","truncated","tick","episode","seed","info"],"adjusts":[],"actions":[{"name":"step","description":"Advance the simulated world by a bounded number of fixed timesteps, optionally applying an action for each step, and return the resulting observation and terminal flags."},{"name":"reset","description":"Reset the simulated world to a scenario start state and return the initial observation. When a seed is supplied the endpoint records it in the receipt; otherwise the endpoint's declared default seed applies."},{"name":"seed","description":"Set the seed used by the simulated world's random number generators for subsequent steps, without resetting the world. The accepted seed is echoed in the receipt."}],"tags":["gymnasium","sapien","tactile","peg-insertion","reinforcement-learning","simulation"],"backends":["fake"],"served_backend":"fake","evidence":"contract_checked","upstream":{"repo_url":"https://github.com/callmeray/maniskill-vitac2024","commit":"114035d58c693dba00ff616fef6e67e1fe62a1f1","license":"Apache-2.0"},"stars":54,"install":{"openai4s":"openai4s lab add robots/callmeray__maniskill-vitac2024","mhs":"mhs serve robots/callmeray__maniskill-vitac2024 --port 7400","mcp":"mhs serve robots/callmeray__maniskill-vitac2024 --mcp"}},
{"id":"robots/cambel__ur3","name":"cambel ur_gripper_gz Hand-E gz-sim bringup","device_id":"mhs://localhost/ur-gripper-gz","track":"robots","category":"Robot arms and grippers","topic":null,"kind":"robot.arm","vendor":"cambel","model":"UR with Robotiq Hand-E in the gz-sim empty world","mode":"simulated","risk":"R2","family":"ros","role":"device-driver","intro":"cambel ur_gripper_gz Hand-E gz-sim bringup, adapted from cambel/ur3. It reads `read_joint_states`. A simulator: the market serves it with a stand-in that needs no simulator install.","measures":["read_joint_states"],"adjusts":[],"actions":[],"tags":["ros","ros2","simulation","gazebo","ur","arm"],"backends":["fake"],"served_backend":"fake","evidence":"contract_checked","upstream":{"repo_url":"https://github.com/cambel/ur3","commit":"10f96dc362a7700b14e4a2469c8025134ef3e4f7","license":"MIT"},"stars":175,"install":{"openai4s":"openai4s lab add robots/cambel__ur3","mhs":"mhs serve robots/cambel__ur3 --port 7400","mcp":"mhs serve robots/cambel__ur3 --mcp"}},
{"id":"robots/carlosferrazza__humanoid-bench","name":"HumanoidBench H1 stand (h1-stand-v0)","device_id":"mhs://localhost/humanoid-bench-h1-stand","track":"robots","category":"Simulation","topic":null,"kind":"world.sim","vendor":"carlosferrazza/humanoid-bench","model":"h1-stand-v0","mode":"simulated","risk":"R0","family":"gymnasium","role":"sim-env","intro":"HumanoidBench H1 stand (h1-stand-v0), adapted from carlosferrazza/humanoid-bench. It reads `observation`, `reward`, `terminated`, `truncated` and 4 more; runs `step`, `reset` and `seed`. `step`: advance the simulated world by a bounded number of fixed timesteps, optionally applying an action for each step, and return the resulting observation and terminal flags. A simulator: the market serves it with a stand-in that needs no simulator install.","measures":["observation","reward","terminated","truncated","tick","episode","seed","info"],"adjusts":[],"actions":[{"name":"step","description":"Advance the simulated world by a bounded number of fixed timesteps, optionally applying an action for each step, and return the resulting observation and terminal flags."},{"name":"reset","description":"Reset the simulated world to a scenario start state and return the initial observation. When a seed is supplied the endpoint records it in the receipt; otherwise the endpoint's declared default seed applies."},{"name":"seed","description":"Set the seed used by the simulated world's random number generators for subsequent steps, without resetting the world. The accepted seed is echoed in the receipt."}],"tags":["humanoid","humanoid-bench","mujoco","stand","reinforcement-learning","simulation","gymnasium"],"backends":["fake"],"served_backend":"fake","evidence":"contract_checked","upstream":{"repo_url":"https://github.com/carlosferrazza/humanoid-bench","commit":"cb1189039151c8aadaaa987b442da54383c87fab","license":"MIT"},"stars":798,"install":{"openai4s":"openai4s lab add robots/carlosferrazza__humanoid-bench","mhs":"mhs serve robots/carlosferrazza__humanoid-bench --port 7400","mcp":"mhs serve robots/carlosferrazza__humanoid-bench --mcp"}},
{"id":"robots/carolzyy__modesuite","name":"MoDeSuite MoDe-Spot-Bend-v0 (simulated Spot mobile manipulator)","device_id":"mhs://localhost/modesuite-spot-bend","track":"robots","category":"Simulation","topic":"robot arm manipulation","kind":"world.sim","vendor":"carolzyy","model":"MoDeSuite MoDe-Spot-Bend-v0","mode":"simulated","risk":"R0","family":"gymnasium","role":"sim-env","intro":"MoDeSuite MoDe-Spot-Bend-v0 (simulated Spot mobile manipulator), adapted from carolzyy/modesuite. It reads `observation`, `reward`, `terminated`, `truncated` and 4 more; runs `step`, `reset` and `seed`. `step`: advance the simulated world by a bounded number of fixed timesteps, optionally applying an action for each step, and return the resulting observation and terminal flags. A simulator: the market serves it with a stand-in that needs no simulator install.","measures":["observation","reward","terminated","truncated","tick","episode","seed","info"],"adjusts":[],"actions":[{"name":"step","description":"Advance the simulated world by a bounded number of fixed timesteps, optionally applying an action for each step, and return the resulting observation and terminal flags."},{"name":"reset","description":"Reset the simulated world to a scenario start state and return the initial observation. When a seed is supplied the endpoint records it in the receipt; otherwise the endpoint's declared default seed applies."},{"name":"seed","description":"Set the seed used by the simulated world's random number generators for subsequent steps, without resetting the world. The accepted seed is echoed in the receipt."}],"tags":["modesuite","mobile-manipulation","deformable-objects","isaac-lab","simulation","gymnasium"],"backends":["fake"],"served_backend":"fake","evidence":"contract_checked","upstream":{"repo_url":"https://github.com/carolzyy/modesuite","commit":"470681a7ff117e487060ad52bc4f199e3fa34474","license":"NOASSERTION"},"stars":3,"install":{"openai4s":"openai4s lab add robots/carolzyy__modesuite","mhs":"mhs serve robots/carolzyy__modesuite --port 7400","mcp":"mhs serve robots/carolzyy__modesuite --mcp"}},
{"id":"robots/catachiii__crl-humanoid-ros","name":"CRL Humanoid ROS Unitree G1 (MuJoCo scene)","device_id":"mhs://localhost/crl-humanoid-g1","track":"robots","category":"Simulation","topic":"humanoid robots","kind":"world.sim","vendor":"Computational Robotics Lab, ETH Zurich","model":"Unitree G1 (g1_29dof_crl)","mode":"simulated","risk":"R0","family":"mujoco","role":"sim-env","intro":"CRL Humanoid ROS Unitree G1 (MuJoCo scene), adapted from catachiii/crl-humanoid-ros. It reads `time_ms`, `qpos`, `qvel`, `ctrl` and 4 more; runs `step` and `reset`. `step`: advance the simulated world by a bounded number of fixed timesteps, optionally applying an action for each step, and return the resulting observation and terminal flags. A simulator: the market serves it with a stand-in that needs no simulator install.","measures":["time_ms","qpos","qvel","ctrl","tick","timestep_ms","seed","native_checkpoint"],"adjusts":[],"actions":[{"name":"step","description":"Advance the simulated world by a bounded number of fixed timesteps, optionally applying an action for each step, and return the resulting observation and terminal flags."},{"name":"reset","description":"Reset the simulated world to a scenario start state and return the initial observation. When a seed is supplied the endpoint records it in the receipt; otherwise the endpoint's declared default seed applies."}],"tags":["ros2","humanoid","unitree","g1","mujoco","simulation","world"],"backends":["fake"],"served_backend":"fake","evidence":"contract_checked","upstream":{"repo_url":"https://github.com/catachiii/crl-humanoid-ros","commit":"31202ed7c73ab6b6735d0416274ee9d256ecdf02","license":"MIT"},"stars":47,"install":{"openai4s":"openai4s lab add robots/catachiii__crl-humanoid-ros","mhs":"mhs serve robots/catachiii__crl-humanoid-ros --port 7400","mcp":"mhs serve robots/catachiii__crl-humanoid-ros --mcp"}},
{"id":"robots/ccrprepo__robomimic_deploy","name":"RoboMimic Deploy Unitree G1 29-DoF (MuJoCo scene)","device_id":"mhs://localhost/robomimic-g1","track":"robots","category":"Simulation","topic":"humanoid robots","kind":"world.sim","vendor":"ccrprepo","model":"Unitree G1 29-DoF","mode":"simulated","risk":"R0","family":"mujoco","role":"twin-candidate","intro":"RoboMimic Deploy Unitree G1 29-DoF (MuJoCo scene), adapted from ccrprepo/robomimic_deploy. It reads `time_ms`, `qpos`, `qvel`, `ctrl` and 4 more; runs `step` and `reset`. `step`: advance the simulated world by a bounded number of fixed timesteps, optionally applying an action for each step, and return the resulting observation and terminal flags. A simulator: the market serves it with a stand-in that needs no simulator install.","measures":["time_ms","qpos","qvel","ctrl","tick","timestep_ms","seed","native_checkpoint"],"adjusts":[],"actions":[{"name":"step","description":"Advance the simulated world by a bounded number of fixed timesteps, optionally applying an action for each step, and return the resulting observation and terminal flags."},{"name":"reset","description":"Reset the simulated world to a scenario start state and return the initial observation. When a seed is supplied the endpoint records it in the receipt; otherwise the endpoint's declared default seed applies."}],"tags":["robomimic","unitree-g1","g1","humanoid","29-dof","mujoco","simulation","robot"],"backends":["fake"],"served_backend":"fake","evidence":"contract_checked","upstream":{"repo_url":"https://github.com/ccrprepo/robomimic_deploy","commit":"3a72ec1a55dcf155be88c9dcc4a32ecb5c11e313","license":"NOASSERTION"},"stars":442,"install":{"openai4s":"openai4s lab add robots/ccrprepo__robomimic_deploy","mhs":"mhs serve robots/ccrprepo__robomimic_deploy --port 7400","mcp":"mhs serve robots/ccrprepo__robomimic_deploy --mcp"}},
{"id":"robots/centre-for-biorobotics__eeuvsim_gazebo","name":"eeUVsim U-CAT AUV simulator","device_id":"mhs://localhost/eeuvsim-ucat","track":"robots","category":"Simulation","topic":"underwater robotics","kind":"world.sim","vendor":"Centre for Biorobotics, TalTech","model":"U-CAT (UCAT) fin-actuated AUV in eeuv_sim","mode":"simulated","risk":"R2","family":"ros","role":"sim-env","intro":"eeUVsim U-CAT AUV simulator, adapted from centre-for-biorobotics/eeuvsim_gazebo. It reads `name`, `pose`, `twist`, `reference_frame` and 6 more; runs `set_fin_oscillation` and `publish_reset`. `set_fin_oscillation`: publish one Flippers message with the four fin oscillation commands on /hw/flippers_cmd. The receipt confirms only that rosbridge accepted the publication, not that moveFins applied it or that the AUV moved or stopped. A simulator: the market serves it with a stand-in that needs no simulator install.","measures":["name","pose","twist","reference_frame","flipper_fr","flipper_br","flipper_bl","flipper_fl","read_auv_state","read_fin_feedback"],"adjusts":[],"actions":[{"name":"set_fin_oscillation","description":"Publish one Flippers message with the four fin oscillation commands on /hw/flippers_cmd. The receipt confirms only that rosbridge accepted the publication, not that moveFins applied it or that the AUV moved or stopped."},{"name":"publish_reset","description":"Publish one std_msgs/Bool data=true reset request on /ucat/reset. This is an unacknowledged publication: AUVMotion's reset callback and moveFins' reset_joints may be triggered, but the driver receives no completion, and the fin timer is not stopped."}],"tags":["ros","ros2","simulation","auv","underwater","ucat","flipper","fin","gazebo"],"backends":["fake"],"served_backend":"fake","evidence":"contract_checked","upstream":{"repo_url":"https://github.com/centre-for-biorobotics/eeuvsim_gazebo","commit":"7276ed34215c6b75caf03d6d5144ee550aaf6600","license":"NOASSERTION"},"stars":22,"install":{"openai4s":"openai4s lab add robots/centre-for-biorobotics__eeuvsim_gazebo","mhs":"mhs serve robots/centre-for-biorobotics__eeuvsim_gazebo --port 7400","mcp":"mhs serve robots/centre-for-biorobotics__eeuvsim_gazebo --mcp"}},
{"id":"robots/chanjin926__prompt2pose","name":"ManiSkill ArrayCan-v1 (can arraying)","device_id":"mhs://localhost/array-can","track":"robots","category":"Simulation","topic":"robot arm manipulation","kind":"world.sim","vendor":"chanjin926","model":"ArrayCan-v1","mode":"simulated","risk":"R0","family":"gymnasium","role":"sim-env","intro":"ManiSkill ArrayCan-v1 (can arraying), adapted from chanjin926/prompt2pose. It reads `observation`, `reward`, `terminated`, `truncated` and 4 more; runs `step`, `reset` and `seed`. `step`: advance the simulated world by a bounded number of fixed timesteps, optionally applying an action for each step, and return the resulting observation and terminal flags. A simulator: the market serves it with a stand-in that needs no simulator install.","measures":["observation","reward","terminated","truncated","tick","episode","seed","info"],"adjusts":[],"actions":[{"name":"step","description":"Advance the simulated world by a bounded number of fixed timesteps, optionally applying an action for each step, and return the resulting observation and terminal flags."},{"name":"reset","description":"Reset the simulated world to a scenario start state and return the initial observation. When a seed is supplied the endpoint records it in the receipt; otherwise the endpoint's declared default seed applies."},{"name":"seed","description":"Set the seed used by the simulated world's random number generators for subsequent steps, without resetting the world. The accepted seed is echoed in the receipt."}],"tags":["arraycan","maniskill","sapien","tabletop","reinforcement-learning","simulation","gymnasium"],"backends":["fake"],"served_backend":"fake","evidence":"contract_checked","upstream":{"repo_url":"https://github.com/chanjin926/prompt2pose","commit":"615098ccc37f2af4e7e1a1ed2d705c5fef279c23","license":"NOASSERTION"},"stars":0,"install":{"openai4s":"openai4s lab add robots/chanjin926__prompt2pose","mhs":"mhs serve robots/chanjin926__prompt2pose --port 7400","mcp":"mhs serve robots/chanjin926__prompt2pose --mcp"}},
{"id":"robots/chauby__coppeliasimrl","name":"CoppeliaSim cart-pole (chauby/coppeliasimrl)","device_id":"mhs://localhost/coppeliasim-cartpole","track":"robots","category":"Simulation","topic":null,"kind":"world.sim","vendor":"chauby/coppeliasimrl","model":"CartPoleEnv","mode":"simulated","risk":"R0","family":"gymnasium","role":"sim-env","intro":"CoppeliaSim cart-pole (chauby/coppeliasimrl), adapted from chauby/coppeliasimrl. It reads `observation`, `reward`, `terminated`, `truncated` and 4 more; runs `step`, `reset` and `seed`. `step`: advance the simulated world by a bounded number of fixed timesteps, optionally applying an action for each step, and return the resulting observation and terminal flags. A simulator: the market serves it with a stand-in that needs no simulator install.","measures":["observation","reward","terminated","truncated","tick","episode","seed","info"],"adjusts":[],"actions":[{"name":"step","description":"Advance the simulated world by a bounded number of fixed timesteps, optionally applying an action for each step, and return the resulting observation and terminal flags."},{"name":"reset","description":"Reset the simulated world to a scenario start state and return the initial observation. When a seed is supplied the endpoint records it in the receipt; otherwise the endpoint's declared default seed applies."},{"name":"seed","description":"Set the seed used by the simulated world's random number generators for subsequent steps, without resetting the world. The accepted seed is echoed in the receipt."}],"tags":["cartpole","coppeliasim","reinforcement-learning","simulation","gym"],"backends":["fake"],"served_backend":"fake","evidence":"contract_checked","upstream":{"repo_url":"https://github.com/chauby/coppeliasimrl","commit":"8eb98b8a42b515b61eae5ffebcc9f228e2f5fdd1","license":"NOASSERTION"},"stars":74,"install":{"openai4s":"openai4s lab add robots/chauby__coppeliasimrl","mhs":"mhs serve robots/chauby__coppeliasimrl --port 7400","mcp":"mhs serve robots/chauby__coppeliasimrl --mcp"}},
{"id":"robots/chauncygu__safe-multi-agent-robosuite","name":"Safe Multi-Agent Robosuite Baxter bimanual arm (MuJoCo model)","device_id":"mhs://localhost/robosuite-baxter","track":"robots","category":"Simulation","topic":"robot arm manipulation","kind":"world.sim","vendor":"chauncygu","model":"Baxter","mode":"simulated","risk":"R0","family":"mujoco","role":"sim-env","intro":"Safe Multi-Agent Robosuite Baxter bimanual arm (MuJoCo model), adapted from chauncygu/safe-multi-agent-robosuite. It reads `time_ms`, `qpos`, `qvel`, `ctrl` and 4 more; runs `step` and `reset`. `step`: advance the simulated world by a bounded number of fixed timesteps, optionally applying an action for each step, and return the resulting observation and terminal flags. A simulator: the market serves it with a stand-in that needs no simulator install.","measures":["time_ms","qpos","qvel","ctrl","tick","timestep_ms","seed","native_checkpoint"],"adjusts":[],"actions":[{"name":"step","description":"Advance the simulated world by a bounded number of fixed timesteps, optionally applying an action for each step, and return the resulting observation and terminal flags."},{"name":"reset","description":"Reset the simulated world to a scenario start state and return the initial observation. When a seed is supplied the endpoint records it in the receipt; otherwise the endpoint's declared default seed applies."}],"tags":["baxter","bimanual","manipulation","mujoco","multi-agent","robosuite","robot","simulation"],"backends":["fake"],"served_backend":"fake","evidence":"contract_checked","upstream":{"repo_url":"https://github.com/chauncygu/safe-multi-agent-robosuite","commit":"df9ade0fa8df984bfe6853fda7604edf10440b65","license":"MIT"},"stars":26,"install":{"openai4s":"openai4s lab add robots/chauncygu__safe-multi-agent-robosuite","mhs":"mhs serve robots/chauncygu__safe-multi-agent-robosuite --port 7400","mcp":"mhs serve robots/chauncygu__safe-multi-agent-robosuite --mcp"}},
{"id":"robots/christianrauch__raspicam2_node","name":"Raspberry Pi Camera (raspicam2)","device_id":"mhs://localhost/raspicam2","track":"robots","category":"Sensors and cameras","topic":null,"kind":"sensor.camera","vendor":"Christian Rauch","model":null,"mode":"hardware","risk":"R0","family":"ros","role":"device-driver","intro":"Raspberry Pi Camera (raspicam2), adapted from christianrauch/raspicam2_node. It reads `frame_id`, `width` and `height`; runs `capture_image`. `capture_image`: capture a single image from a named camera with a declared resolution and exposure and return an image artifact reference. A hardware driver: the market serves its fake backend, so no instrument is needed.","measures":["frame_id","width","height"],"adjusts":[],"actions":[{"name":"capture_image","description":"Capture a single image from a named camera with a declared resolution and exposure and return an image artifact reference."}],"tags":["ros","ros2","camera","image","jpeg","raspberry-pi"],"backends":["fake"],"served_backend":"fake","evidence":"contract_checked","upstream":{"repo_url":"https://github.com/christianrauch/raspicam2_node","commit":"749689a967bfc427e74520dfd107f30f5c50bf0e","license":"NOASSERTION"},"stars":0,"install":{"openai4s":"openai4s lab add robots/christianrauch__raspicam2_node","mhs":"mhs serve robots/christianrauch__raspicam2_node --port 7400","mcp":"mhs serve robots/christianrauch__raspicam2_node --mcp"}},
{"id":"robots/chuanyune__maniskill-vitac2025","name":"ManiSkill-ViTac 2025 Track 1 peg insertion (tactile-vision simulation)","device_id":"mhs://localhost/vitac2025-peg-insertion","track":"robots","category":"Simulation","topic":"robot arm manipulation","kind":"world.sim","vendor":"chuanyune","model":"ManiSkill-ViTac 2025 Track 1","mode":"simulated","risk":"R0","family":"gymnasium","role":"sim-env","intro":"ManiSkill-ViTac 2025 Track 1 peg insertion (tactile-vision simulation), adapted from chuanyune/maniskill-vitac2025. It reads `observation`, `reward`, `terminated`, `truncated` and 4 more; runs `step`, `reset` and `seed`. `step`: advance the simulated world by a bounded number of fixed timesteps, optionally applying an action for each step, and return the resulting observation and terminal flags. A simulator: the market serves it with a stand-in that needs no simulator install.","measures":["observation","reward","terminated","truncated","tick","episode","seed","info"],"adjusts":[],"actions":[{"name":"step","description":"Advance the simulated world by a bounded number of fixed timesteps, optionally applying an action for each step, and return the resulting observation and terminal flags."},{"name":"reset","description":"Reset the simulated world to a scenario start state and return the initial observation. When a seed is supplied the endpoint records it in the receipt; otherwise the endpoint's declared default seed applies."},{"name":"seed","description":"Set the seed used by the simulated world's random number generators for subsequent steps, without resetting the world. The accepted seed is echoed in the receipt."}],"tags":["manipulation","peg-insertion","tactile","vision","reinforcement-learning","simulation","gymnasium","sapien"],"backends":["fake"],"served_backend":"fake","evidence":"contract_checked","upstream":{"repo_url":"https://github.com/chuanyune/maniskill-vitac2025","commit":"a3d7df54bca9a2e57f34b37be3a3df36dc218915","license":"Apache-2.0"},"stars":59,"install":{"openai4s":"openai4s lab add robots/chuanyune__maniskill-vitac2025","mhs":"mhs serve robots/chuanyune__maniskill-vitac2025 --port 7400","mcp":"mhs serve robots/chuanyune__maniskill-vitac2025 --mcp"}},
{"id":"robots/clementperroud__gym-trading-env","name":"Gym Trading Env TradingEnv","device_id":"mhs://localhost/gym-trading-env","track":"robots","category":"Simulation","topic":null,"kind":"world.sim","vendor":"Clement Perroud","model":"gym-trading-env","mode":"simulated","risk":"R0","family":"gymnasium","role":"sim-env","intro":"Gym Trading Env TradingEnv, adapted from clementperroud/gym-trading-env. It reads `observation`, `reward`, `terminated`, `truncated` and 4 more; runs `step`, `reset` and `seed`. `step`: advance the simulated world by a bounded number of fixed timesteps, optionally applying an action for each step, and return the resulting observation and terminal flags. A simulator: the market serves it with a stand-in that needs no simulator install.","measures":["observation","reward","terminated","truncated","tick","episode","seed","info"],"adjusts":[],"actions":[{"name":"step","description":"Advance the simulated world by a bounded number of fixed timesteps, optionally applying an action for each step, and return the resulting observation and terminal flags."},{"name":"reset","description":"Reset the simulated world to a scenario start state and return the initial observation. When a seed is supplied the endpoint records it in the receipt; otherwise the endpoint's declared default seed applies."},{"name":"seed","description":"Set the seed used by the simulated world's random number generators for subsequent steps, without resetting the world. The accepted seed is echoed in the receipt."}],"tags":["trading","reinforcement-learning","simulation","gymnasium"],"backends":["fake"],"served_backend":"fake","evidence":"contract_checked","upstream":{"repo_url":"https://github.com/clementperroud/gym-trading-env","commit":"a86fc03d29759374fae2db7df4d878485808a730","license":"MIT"},"stars":498,"install":{"openai4s":"openai4s lab add robots/clementperroud__gym-trading-env","mhs":"mhs serve robots/clementperroud__gym-trading-env --port 7400","mcp":"mhs serve robots/clementperroud__gym-trading-env --mcp"}},
{"id":"robots/clvrai__furniture","name":"IKEA Furniture Assembly IKEASawyer-v0 (Gym simulation, simulated)","device_id":"mhs://localhost/ikea-furniture-sawyer","track":"robots","category":"Simulation","topic":"robot arm manipulation","kind":"world.sim","vendor":"CLVR Lab, USC","model":"IKEASawyer-v0 / FurnitureGym","mode":"simulated","risk":"R0","family":"gymnasium","role":"sim-env","intro":"IKEA Furniture Assembly IKEASawyer-v0 (Gym simulation, simulated), adapted from clvrai/furniture. It reads `observation`, `reward`, `terminated`, `truncated` and 4 more; runs `step`, `reset` and `seed`. `step`: advance the simulated world by a bounded number of fixed timesteps, optionally applying an action for each step, and return the resulting observation and terminal flags. A simulator: the market serves it with a stand-in that needs no simulator install.","measures":["observation","reward","terminated","truncated","tick","episode","seed","info"],"adjusts":[],"actions":[{"name":"step","description":"Advance the simulated world by a bounded number of fixed timesteps, optionally applying an action for each step, and return the resulting observation and terminal flags."},{"name":"reset","description":"Reset the simulated world to a scenario start state and return the initial observation. When a seed is supplied the endpoint records it in the receipt; otherwise the endpoint's declared default seed applies."},{"name":"seed","description":"Set the seed used by the simulated world's random number generators for subsequent steps, without resetting the world. The accepted seed is echoed in the receipt."}],"tags":["ikea","furniture-assembly","sawyer","gym","mujoco","manipulation","reinforcement-learning","simulation"],"backends":["fake"],"served_backend":"fake","evidence":"contract_checked","upstream":{"repo_url":"https://github.com/clvrai/furniture","commit":"ed4a905e7beb1daf3af7717d979e0ba93421077a","license":"MIT"},"stars":0,"install":{"openai4s":"openai4s lab add robots/clvrai__furniture","mhs":"mhs serve robots/clvrai__furniture --port 7400","mcp":"mhs serve robots/clvrai__furniture --mcp"}},
{"id":"robots/clvrai__furniture-bench","name":"FurnitureBench FurnitureSim-v0 (Isaac Gym)","device_id":"mhs://localhost/furniture_bench_sim","track":"robots","category":"Simulation","topic":"robot manipulation","kind":"world.sim","vendor":"CLVR @ KAIST","model":"FurnitureSim-v0","mode":"simulated","risk":"R0","family":"gymnasium","role":"sim-env","intro":"FurnitureBench FurnitureSim-v0 (Isaac Gym), adapted from clvrai/furniture-bench. It reads `observation`, `reward`, `terminated`, `truncated` and 4 more; runs `step`, `reset` and `seed`. `step`: advance the simulated world by a bounded number of fixed timesteps, optionally applying an action for each step, and return the resulting observation and terminal flags. A simulator: the market serves it with a stand-in that needs no simulator install.","measures":["observation","reward","terminated","truncated","tick","episode","seed","info"],"adjusts":[],"actions":[{"name":"step","description":"Advance the simulated world by a bounded number of fixed timesteps, optionally applying an action for each step, and return the resulting observation and terminal flags."},{"name":"reset","description":"Reset the simulated world to a scenario start state and return the initial observation. When a seed is supplied the endpoint records it in the receipt; otherwise the endpoint's declared default seed applies."},{"name":"seed","description":"Set the seed used by the simulated world's random number generators for subsequent steps, without resetting the world. The accepted seed is echoed in the receipt."}],"tags":["furniture-assembly","manipulation","isaac-gym","reinforcement-learning","simulation","gymnasium"],"backends":["fake"],"served_backend":"fake","evidence":"contract_checked","upstream":{"repo_url":"https://github.com/clvrai/furniture-bench","commit":"a87960a2490a7a19c86ea16a5ef371718b2baa70","license":"MIT"},"stars":246,"install":{"openai4s":"openai4s lab add robots/clvrai__furniture-bench","mhs":"mhs serve robots/clvrai__furniture-bench --port 7400","mcp":"mhs serve robots/clvrai__furniture-bench --mcp"}},
{"id":"robots/cmjang__dm_control_python","name":"DaMiao DM series CAN motor (DM_CAN.MotorControl)","device_id":"mhs://localhost/dm-motor","track":"robots","category":"Motion control","topic":null,"kind":"motion.axis","vendor":"DaMiao","model":"DM series CAN motor","mode":"hardware","risk":"R1","family":"python-object","role":"device-driver","intro":"DaMiao DM series CAN motor (DM_CAN.MotorControl), adapted from cmjang/dm_control_python. It reads `joint_position`, `joint_velocity`, `joint_torque` and `control_mode`; sets `enabled`; runs `move_joint` and `jog_joint`. `move_joint`: command one or more actuated joints to target positions in joint space, optionally over a declared duration, and report whether the target was reached within tolerance. A hardware driver: the market serves its fake backend, so no instrument is needed.","measures":["joint_position","joint_velocity","joint_torque","control_mode"],"adjusts":["enabled"],"actions":[{"name":"move_joint","description":"Command one or more actuated joints to target positions in joint space, optionally over a declared duration, and report whether the target was reached within tolerance."},{"name":"jog_joint","description":"Command continuous joint velocities for a bounded duration. The operation stops at the end of the duration or when cancelled."}],"tags":["motor","can","damiao","joint","position control","velocity control"],"backends":["fake","hardware"],"served_backend":"fake","evidence":"contract_checked","upstream":{"repo_url":"https://github.com/cmjang/dm_control_python","commit":"7da93877ba844d9587149d6f3a6385453aa8379f","license":"MIT"},"stars":78,"install":{"openai4s":"openai4s lab add robots/cmjang__dm_control_python","mhs":"mhs serve robots/cmjang__dm_control_python --port 7400","mcp":"mhs serve robots/cmjang__dm_control_python --mcp"}},
{"id":"robots/code-iai__iai_kinect2","name":"Kinect v2 depth camera (iai_kinect2)","device_id":"mhs://localhost/kinect2","track":"robots","category":"Sensors and cameras","topic":null,"kind":"sensor.camera","vendor":"code-iai","model":"Kinect v2","mode":"hardware","risk":"R0","family":"ros","role":"device-driver","intro":"Kinect v2 depth camera (iai_kinect2), adapted from code-iai/iai_kinect2. It reads `frame_id`, `width` and `height`; runs `capture_image`. `capture_image`: capture a single image from a named camera with a declared resolution and exposure and return an image artifact reference. A hardware driver: the market serves its fake backend, so no instrument is needed.","measures":["frame_id","width","height"],"adjusts":[],"actions":[{"name":"capture_image","description":"Capture a single image from a named camera with a declared resolution and exposure and return an image artifact reference."}],"tags":["ros","ros1","camera","depth","infrared","kinect2","image"],"backends":["fake"],"served_backend":"fake","evidence":"contract_checked","upstream":{"repo_url":"https://github.com/code-iai/iai_kinect2","commit":"0e2c5f63134a076606bb79963406e1d47f2da651","license":"Apache-2.0"},"stars":0,"install":{"openai4s":"openai4s lab add robots/code-iai__iai_kinect2","mhs":"mhs serve robots/code-iai__iai_kinect2 --port 7400","mcp":"mhs serve robots/code-iai__iai_kinect2 --mcp"}},
{"id":"robots/cognitiveaisystems__blindvla","name":"BlindVLA ManiSkill Empty-v1 (Panda)","device_id":"mhs://localhost/blindvla-empty","track":"robots","category":"Simulation","topic":null,"kind":"world.sim","vendor":"Cognitive AI Systems","model":"ManiSkill Empty-v1","mode":"simulated","risk":"R0","family":"gymnasium","role":"sim-env","intro":"BlindVLA ManiSkill Empty-v1 (Panda), adapted from cognitiveaisystems/blindvla. It reads `observation`, `reward`, `terminated`, `truncated` and 4 more; runs `step`, `reset` and `seed`. `step`: advance the simulated world by a bounded number of fixed timesteps, optionally applying an action for each step, and return the resulting observation and terminal flags. A simulator: the market serves it with a stand-in that needs no simulator install.","measures":["observation","reward","terminated","truncated","tick","episode","seed","info"],"adjusts":[],"actions":[{"name":"step","description":"Advance the simulated world by a bounded number of fixed timesteps, optionally applying an action for each step, and return the resulting observation and terminal flags."},{"name":"reset","description":"Reset the simulated world to a scenario start state and return the initial observation. When a seed is supplied the endpoint records it in the receipt; otherwise the endpoint's declared default seed applies."},{"name":"seed","description":"Set the seed used by the simulated world's random number generators for subsequent steps, without resetting the world. The accepted seed is echoed in the receipt."}],"tags":["blindvla","maniskill","empty","panda","gymnasium","simulation"],"backends":["fake"],"served_backend":"fake","evidence":"contract_checked","upstream":{"repo_url":"https://github.com/cognitiveaisystems/blindvla","commit":"06855fcb91d65c88ca351a2d45af0be860a91987","license":"MIT"},"stars":70,"install":{"openai4s":"openai4s lab add robots/cognitiveaisystems__blindvla","mhs":"mhs serve robots/cognitiveaisystems__blindvla --port 7400","mcp":"mhs serve robots/cognitiveaisystems__blindvla --mcp"}},
{"id":"robots/cognitiveaisystems__mikasa-robo","name":"MIKASA-Robo BunchOfColors3-v0 (memory manipulation simulation)","device_id":"mhs://localhost/mikasa-bunch-of-colors-3","track":"robots","category":"Simulation","topic":"robot arm manipulation","kind":"world.sim","vendor":"CognitiveAISystems","model":"mikasa-robo-suite 1.0.0","mode":"simulated","risk":"R0","family":"gymnasium","role":"sim-env","intro":"MIKASA-Robo BunchOfColors3-v0 (memory manipulation simulation), adapted from cognitiveaisystems/mikasa-robo. It reads `observation`, `reward`, `terminated`, `truncated` and 4 more; runs `step`, `reset` and `seed`. `step`: advance the simulated world by a bounded number of fixed timesteps, optionally applying an action for each step, and return the resulting observation and terminal flags. A simulator: the market serves it with a stand-in that needs no simulator install.","measures":["observation","reward","terminated","truncated","tick","episode","seed","info"],"adjusts":[],"actions":[{"name":"step","description":"Advance the simulated world by a bounded number of fixed timesteps, optionally applying an action for each step, and return the resulting observation and terminal flags."},{"name":"reset","description":"Reset the simulated world to a scenario start state and return the initial observation. When a seed is supplied the endpoint records it in the receipt; otherwise the endpoint's declared default seed applies."},{"name":"seed","description":"Set the seed used by the simulated world's random number generators for subsequent steps, without resetting the world. The accepted seed is echoed in the receipt."}],"tags":["mikasa-robo","memory-task","manipulation","reinforcement-learning","simulation","gymnasium"],"backends":["fake"],"served_backend":"fake","evidence":"contract_checked","upstream":{"repo_url":"https://github.com/cognitiveaisystems/mikasa-robo","commit":"509b875f3d207c287497c0a897661062de928bb0","license":"MIT"},"stars":140,"install":{"openai4s":"openai4s lab add robots/cognitiveaisystems__mikasa-robo","mhs":"mhs serve robots/cognitiveaisystems__mikasa-robo --port 7400","mcp":"mhs serve robots/cognitiveaisystems__mikasa-robo --mcp"}},
{"id":"robots/confeitohs__arcle","name":"ARCLE RawARCEnv-v0 (ARC grid environment)","device_id":"mhs://localhost/arcle-raw","track":"robots","category":"Simulation","topic":null,"kind":"world.sim","vendor":"confeitohs","model":"ARCLE/RawARCEnv-v0","mode":"simulated","risk":"R0","family":"gymnasium","role":"sim-env","intro":"ARCLE RawARCEnv-v0 (ARC grid environment), adapted from confeitohs/arcle. It reads `observation`, `reward`, `terminated`, `truncated` and 4 more; runs `step`, `reset` and `seed`. `step`: advance the simulated world by a bounded number of fixed timesteps, optionally applying an action for each step, and return the resulting observation and terminal flags. A simulator: the market serves it with a stand-in that needs no simulator install.","measures":["observation","reward","terminated","truncated","tick","episode","seed","info"],"adjusts":[],"actions":[{"name":"step","description":"Advance the simulated world by a bounded number of fixed timesteps, optionally applying an action for each step, and return the resulting observation and terminal flags."},{"name":"reset","description":"Reset the simulated world to a scenario start state and return the initial observation. When a seed is supplied the endpoint records it in the receipt; otherwise the endpoint's declared default seed applies."},{"name":"seed","description":"Set the seed used by the simulated world's random number generators for subsequent steps, without resetting the world. The accepted seed is echoed in the receipt."}],"tags":["arc","arc-agi","reinforcement-learning","simulation","gymnasium"],"backends":["fake"],"served_backend":"fake","evidence":"contract_checked","upstream":{"repo_url":"https://github.com/confeitohs/arcle","commit":"311be9db018ed5f17fff2f7891251f965ea7aa2e","license":"Apache-2.0"},"stars":73,"install":{"openai4s":"openai4s lab add robots/confeitohs__arcle","mhs":"mhs serve robots/confeitohs__arcle --port 7400","mcp":"mhs serve robots/confeitohs__arcle --mcp"}},
{"id":"robots/coppolam__ros_mav_swarm_simulator","name":"Coppolam ROS MAV swarm simulator (uav1)","device_id":"mhs://localhost/mav-swarm","track":"robots","category":"Simulation","topic":"UAVs","kind":"world.sim","vendor":"coppolam","model":"mav_controller behavior node and hector_quadrotor Gazebo stack","mode":"simulated","risk":"R2","family":"ros","role":"sim-env","intro":"Coppolam ROS MAV swarm simulator (uav1), adapted from coppolam/ros_mav_swarm_simulator. It reads `read_odometry`; runs `set_velocity`, `enable_motors` and `land`. `set_velocity`: publish one geometry_msgs/Twist velocity command on /uav1/cmd_vel; the receipt reports the values sent and confirms transmission only, not arrival, motion or a continuous stream. A simulator: the market serves it with a stand-in that needs no simulator install.","measures":["read_odometry"],"adjusts":[],"actions":[{"name":"set_velocity","description":"Publish one geometry_msgs/Twist velocity command on /uav1/cmd_vel; the receipt reports the values sent and confirms transmission only, not arrival, motion or a continuous stream"},{"name":"enable_motors","description":"Send the fixed EnableMotors enable=true request on /uav1/enable_motors; success is the service response flag, not a sensed motor state"},{"name":"land","description":"Land below the current pose and disable motors through hector_uav_msgs/LandingAction; an ordinary command, not a stop: its pose goal re-enables the motors first"}],"tags":["ros","ros1","simulation","gazebo","hector-quadrotor","uav","swarm","cmd-vel","stop"],"backends":["fake"],"served_backend":"fake","evidence":"contract_checked","upstream":{"repo_url":"https://github.com/coppolam/ros_mav_swarm_simulator","commit":"eca05eaaecc05242493b176f2f2656f21b14c250","license":"NOASSERTION"},"stars":0,"install":{"openai4s":"openai4s lab add robots/coppolam__ros_mav_swarm_simulator","mhs":"mhs serve robots/coppolam__ros_mav_swarm_simulator --port 7400","mcp":"mhs serve robots/coppolam__ros_mav_swarm_simulator --mcp"}},
{"id":"robots/cpezzato__panda_simulation","name":"Panda active-inference simulation","device_id":"mhs://localhost/panda_simulation","track":"robots","category":"Robot arms and grippers","topic":null,"kind":"robot.arm","vendor":"cpezzato","model":"Franka Emika Panda 7-DOF","mode":"simulated","risk":"R2","family":"ros","role":"sim-env","intro":"Panda active-inference simulation, adapted from cpezzato/panda_simulation. It reads `read_joint_state` and `read_free_energy`; runs `set_joint1_effort`, `set_joint2_effort`, `set_joint3_effort`, `set_joint4_effort` and 3 more. `set_joint1_effort`: publish one effort command for panda_joint1 on /robot1/panda_joint1_controller/command; the AIC node may overwrite it, and while the world is paused no effort reaches the joint. A simulator: the market serves it with a stand-in that needs no simulator install.","measures":["read_joint_state","read_free_energy"],"adjusts":[],"actions":[{"name":"set_joint1_effort","description":"Publish one effort command for panda_joint1 on /robot1/panda_joint1_controller/command; the AIC node may overwrite it, and while the world is paused no effort reaches the joint"},{"name":"set_joint2_effort","description":"Publish one effort command for panda_joint2 on /robot1/panda_joint2_controller/command; the AIC node may overwrite it, and while the world is paused no effort reaches the joint"},{"name":"set_joint3_effort","description":"Publish one effort command for panda_joint3 on /robot1/panda_joint3_controller/command; the AIC node may overwrite it, and while the world is paused no effort reaches the joint"},{"name":"set_joint4_effort","description":"Publish one effort command for panda_joint4 on /robot1/panda_joint4_controller/command; the AIC node may overwrite it, and while the world is paused no effort reaches the joint"},{"name":"set_joint5_effort","description":"Publish one effort command for panda_joint5 on /robot1/panda_joint5_controller/command; the AIC node may overwrite it, and while the world is paused no effort reaches the joint"},{"name":"set_joint6_effort","description":"Publish one effort command for panda_joint6 on /robot1/panda_joint6_controller/command; the AIC node may overwrite it, and while the world is paused no effort reaches the joint"},{"name":"set_joint7_effort","description":"Publish one effort command for panda_joint7 on /robot1/panda_joint7_controller/command; the AIC node may overwrite it, and while the world is paused no effort reaches the joint"}],"tags":["ros","ros1","gazebo","simulation","panda","franka","active-inference","joint-state","effort","stop"],"backends":["fake"],"served_backend":"fake","evidence":"contract_checked","upstream":{"repo_url":"https://github.com/cpezzato/panda_simulation","commit":"58e1675a372bfef5a30b4dfd6bd5c898f8c012c9","license":"Apache-2.0"},"stars":78,"install":{"openai4s":"openai4s lab add robots/cpezzato__panda_simulation","mhs":"mhs serve robots/cpezzato__panda_simulation --port 7400","mcp":"mhs serve robots/cpezzato__panda_simulation --mcp"}},
{"id":"robots/cram2__semantic_digital_twin","name":"Semantic Digital Twin panda single-cube scene (MuJoCo)","device_id":"mhs://localhost/semantic-digital-twin","track":"robots","category":"Simulation","topic":null,"kind":"world.sim","vendor":"CRAM2","model":"panda scene (mjx_single_cube_no_mesh)","mode":"simulated","risk":"R0","family":"mujoco","role":"twin-candidate","intro":"Semantic Digital Twin panda single-cube scene (MuJoCo), adapted from cram2/semantic_digital_twin. It reads `time_ms`, `qpos`, `qvel`, `ctrl` and 4 more; runs `step` and `reset`. `step`: advance the simulated world by a bounded number of fixed timesteps, optionally applying an action for each step, and return the resulting observation and terminal flags. A simulator: the market serves it with a stand-in that needs no simulator install.","measures":["time_ms","qpos","qvel","ctrl","tick","timestep_ms","seed","native_checkpoint"],"adjusts":[],"actions":[{"name":"step","description":"Advance the simulated world by a bounded number of fixed timesteps, optionally applying an action for each step, and return the resulting observation and terminal flags."},{"name":"reset","description":"Reset the simulated world to a scenario start state and return the initial observation. When a seed is supplied the endpoint records it in the receipt; otherwise the endpoint's declared default seed applies."}],"tags":["mujoco","mjcf","semantic-digital-twin","panda","single-cube","simulation"],"backends":["fake"],"served_backend":"fake","evidence":"contract_checked","upstream":{"repo_url":"https://github.com/cram2/semantic_digital_twin","commit":"40a35e7e481b358cd7f9d939c7ff4e0c23826098","license":"LGPL-3.0"},"stars":16,"install":{"openai4s":"openai4s lab add robots/cram2__semantic_digital_twin","mhs":"mhs serve robots/cram2__semantic_digital_twin --port 7400","mcp":"mhs serve robots/cram2__semantic_digital_twin --mcp"}},
{"id":"robots/ctu-mrs__mrs_uav_flightforge_simulator","name":"MRS FlightForge simulator endpoint","device_id":"mhs://localhost/flightforge-simulator","track":"robots","category":"Simulation","topic":"UAVs","kind":"world.sim","vendor":"ctu-mrs","model":"FlightforgeSimulator","mode":"simulated","risk":"R0","family":"ros","role":"sim-env","intro":"MRS FlightForge simulator endpoint, adapted from ctu-mrs/mrs_uav_flightforge_simulator. It reads `read_sim_clock` and `read_uav_poses`. A simulator: the market serves it with a stand-in that needs no simulator install.","measures":["read_sim_clock","read_uav_poses"],"adjusts":[],"actions":[],"tags":["ros","ros2","simulation","flightforge","uav","clock","pose"],"backends":["fake"],"served_backend":"fake","evidence":"contract_checked","upstream":{"repo_url":"https://github.com/ctu-mrs/mrs_uav_flightforge_simulator","commit":"e4715a8c75aac70a9bcd7f75113746b938139117","license":"GPL-2.0"},"stars":0,"install":{"openai4s":"openai4s lab add robots/ctu-mrs__mrs_uav_flightforge_simulator","mhs":"mhs serve robots/ctu-mrs__mrs_uav_flightforge_simulator --port 7400","mcp":"mhs serve robots/ctu-mrs__mrs_uav_flightforge_simulator --mcp"}},
{"id":"robots/cursedrock17__gazebo_gymnasium","name":"Gazebo Gymnasium CartPole-v0","device_id":"mhs://localhost/gazebo-cartpole","track":"robots","category":"Simulation","topic":null,"kind":"world.sim","vendor":"Lucas Wendland / CursedRock17","model":"GazeboCartPole-v0","mode":"simulated","risk":"R0","family":"gymnasium","role":"sim-env","intro":"Gazebo Gymnasium CartPole-v0, adapted from cursedrock17/gazebo_gymnasium. It reads `observation`, `reward`, `terminated`, `truncated` and 4 more; runs `step`, `reset` and `seed`. `step`: advance the simulated world by a bounded number of fixed timesteps, optionally applying an action for each step, and return the resulting observation and terminal flags. A simulator: the market serves it with a stand-in that needs no simulator install.","measures":["observation","reward","terminated","truncated","tick","episode","seed","info"],"adjusts":[],"actions":[{"name":"step","description":"Advance the simulated world by a bounded number of fixed timesteps, optionally applying an action for each step, and return the resulting observation and terminal flags."},{"name":"reset","description":"Reset the simulated world to a scenario start state and return the initial observation. When a seed is supplied the endpoint records it in the receipt; otherwise the endpoint's declared default seed applies."},{"name":"seed","description":"Set the seed used by the simulated world's random number generators for subsequent steps, without resetting the world. The accepted seed is echoed in the receipt."}],"tags":["gymnasium","gazebo","gz-sim","cartpole","reinforcement-learning","simulation"],"backends":["fake"],"served_backend":"fake","evidence":"contract_checked","upstream":{"repo_url":"https://github.com/cursedrock17/gazebo_gymnasium","commit":"a9d142db85b619a299a7eb29461532cade1c20ac","license":"Apache-2.0"},"stars":1,"install":{"openai4s":"openai4s lab add robots/cursedrock17__gazebo_gymnasium","mhs":"mhs serve robots/cursedrock17__gazebo_gymnasium --port 7400","mcp":"mhs serve robots/cursedrock17__gazebo_gymnasium --mcp"}},
{"id":"robots/cxy1997__robotiq-ur5","name":"UR5 with Robotiq 85 gripper (MuJoCo scene)","device_id":"mhs://localhost/robotiq-ur5","track":"robots","category":"Simulation","topic":null,"kind":"world.sim","vendor":"cxy1997","model":"UR5 + Robotiq 85","mode":"simulated","risk":"R0","family":"mujoco","role":"twin-candidate","intro":"UR5 with Robotiq 85 gripper (MuJoCo scene), adapted from cxy1997/robotiq-ur5. It reads `time_ms`, `qpos`, `qvel`, `ctrl` and 4 more; runs `step` and `reset`. `step`: advance the simulated world by a bounded number of fixed timesteps, optionally applying an action for each step, and return the resulting observation and terminal flags. A simulator: the market serves it with a stand-in that needs no simulator install.","measures":["time_ms","qpos","qvel","ctrl","tick","timestep_ms","seed","native_checkpoint"],"adjusts":[],"actions":[{"name":"step","description":"Advance the simulated world by a bounded number of fixed timesteps, optionally applying an action for each step, and return the resulting observation and terminal flags."},{"name":"reset","description":"Reset the simulated world to a scenario start state and return the initial observation. When a seed is supplied the endpoint records it in the receipt; otherwise the endpoint's declared default seed applies."}],"tags":["gripper","manipulation","mujoco","robot","robotiq","simulation","ur5"],"backends":["fake"],"served_backend":"fake","evidence":"contract_checked","upstream":{"repo_url":"https://github.com/cxy1997/robotiq-ur5","commit":"6c6d53f6a7d525f83e103ce594f166520d9390ee","license":"NOASSERTION"},"stars":85,"install":{"openai4s":"openai4s lab add robots/cxy1997__robotiq-ur5","mhs":"mhs serve robots/cxy1997__robotiq-ur5 --port 7400","mcp":"mhs serve robots/cxy1997__robotiq-ur5 --mcp"}},
{"id":"robots/cyberorigin2077__open_cyber_glove","name":"OpenCyberGlove data glove (OpenCyberGlove SDK)","device_id":"mhs://localhost/open-cyber-glove","track":"robots","category":"Sensors and cameras","topic":null,"kind":"sensor","vendor":"CyberOrigin","model":"OpenCyberGlove data glove (one hand)","mode":"hardware","risk":"R1","family":"python-object","role":"device-driver","intro":"OpenCyberGlove data glove (OpenCyberGlove SDK), adapted from cyberorigin2077/open_cyber_glove. It reads `hand`, `acquisition`, `tensile`, `accelerometer` and 5 more. A hardware driver: the market serves its fake backend, so no instrument is needed.","measures":["hand","acquisition","tensile","accelerometer","gyroscope","magnetometer","temperature","packet_timestamp_us","read_sensors"],"adjusts":[],"actions":[],"tags":["data glove","wearable sensor","tensile sensors","imu","hand motion capture","serial"],"backends":["fake","hardware"],"served_backend":"fake","evidence":"contract_checked","upstream":{"repo_url":"https://github.com/cyberorigin2077/open_cyber_glove","commit":"88910bec8433658ffe8e181f23fb259f5376bb88","license":"BSD-3-Clause"},"stars":39,"install":{"openai4s":"openai4s lab add robots/cyberorigin2077__open_cyber_glove","mhs":"mhs serve robots/cyberorigin2077__open_cyber_glove --port 7400","mcp":"mhs serve robots/cyberorigin2077__open_cyber_glove --mcp"}},
{"id":"robots/damat-le__gym-simplegrid","name":"gym-simplegrid SimpleGrid-4x4-v0 (grid world, simulated)","device_id":"mhs://localhost/simplegrid","track":"robots","category":"Simulation","topic":null,"kind":"world.sim","vendor":"damat-le","model":"SimpleGrid-4x4-v0","mode":"simulated","risk":"R0","family":"gymnasium","role":"sim-env","intro":"gym-simplegrid SimpleGrid-4x4-v0 (grid world, simulated), adapted from damat-le/gym-simplegrid. It reads `observation`, `reward`, `terminated`, `truncated` and 4 more; runs `step`, `reset` and `seed`. `step`: advance the simulated world by a bounded number of fixed timesteps, optionally applying an action for each step, and return the resulting observation and terminal flags. A simulator: the market serves it with a stand-in that needs no simulator install.","measures":["observation","reward","terminated","truncated","tick","episode","seed","info"],"adjusts":[],"actions":[{"name":"step","description":"Advance the simulated world by a bounded number of fixed timesteps, optionally applying an action for each step, and return the resulting observation and terminal flags."},{"name":"reset","description":"Reset the simulated world to a scenario start state and return the initial observation. When a seed is supplied the endpoint records it in the receipt; otherwise the endpoint's declared default seed applies."},{"name":"seed","description":"Set the seed used by the simulated world's random number generators for subsequent steps, without resetting the world. The accepted seed is echoed in the receipt."}],"tags":["simplegrid","grid-world","navigation","reinforcement-learning","simulation","gymnasium"],"backends":["fake"],"served_backend":"fake","evidence":"contract_checked","upstream":{"repo_url":"https://github.com/damat-le/gym-simplegrid","commit":"6ded2fcf684727b27b5569688cad6f92bc3bc52b","license":"Apache-2.0"},"stars":65,"install":{"openai4s":"openai4s lab add robots/damat-le__gym-simplegrid","mhs":"mhs serve robots/damat-le__gym-simplegrid --port 7400","mcp":"mhs serve robots/damat-le__gym-simplegrid --mcp"}},
{"id":"robots/darshmenon__quadruped-robotics-stack","name":"Unitree Go2 MuJoCo parkour scene","device_id":"mhs://localhost/go2_parkour","track":"robots","category":"Simulation","topic":"legged robots","kind":"world.sim","vendor":"Unitree Robotics","model":"Go2","mode":"simulated","risk":"R0","family":"mujoco","role":"sim-env","intro":"Unitree Go2 MuJoCo parkour scene, adapted from darshmenon/quadruped-robotics-stack. It reads `time_ms`, `qpos`, `qvel`, `ctrl` and 4 more; runs `step` and `reset`. `step`: advance the simulated world by a bounded number of fixed timesteps, optionally applying an action for each step, and return the resulting observation and terminal flags. A simulator: the market serves it with a stand-in that needs no simulator install.","measures":["time_ms","qpos","qvel","ctrl","tick","timestep_ms","seed","native_checkpoint"],"adjusts":[],"actions":[{"name":"step","description":"Advance the simulated world by a bounded number of fixed timesteps, optionally applying an action for each step, and return the resulting observation and terminal flags."},{"name":"reset","description":"Reset the simulated world to a scenario start state and return the initial observation. When a seed is supplied the endpoint records it in the receipt; otherwise the endpoint's declared default seed applies."}],"tags":["unitree","go2","quadruped","mujoco","simulation","parkour","robot"],"backends":["fake"],"served_backend":"fake","evidence":"contract_checked","upstream":{"repo_url":"https://github.com/darshmenon/quadruped-robotics-stack","commit":"fe3c2e7457f9caaaa30b5669daba184394173a5f","license":"NOASSERTION"},"stars":26,"install":{"openai4s":"openai4s lab add robots/darshmenon__quadruped-robotics-stack","mhs":"mhs serve robots/darshmenon__quadruped-robotics-stack --port 7400","mcp":"mhs serve robots/darshmenon__quadruped-robotics-stack --mcp"}},
{"id":"robots/darshmenon__ur3_ros2_pick_and_place","name":"UR5e reach Gymnasium environment","device_id":"mhs://localhost/ur-reach","track":"robots","category":"Simulation","topic":null,"kind":"world.sim","vendor":"darshmenon","model":"UR5e","mode":"simulated","risk":"R0","family":"gymnasium","role":"sim-env","intro":"UR5e reach Gymnasium environment, adapted from darshmenon/ur3_ros2_pick_and_place. It reads `observation`, `reward`, `terminated`, `truncated` and 4 more; runs `step`, `reset` and `seed`. `step`: advance the simulated world by a bounded number of fixed timesteps, optionally applying an action for each step, and return the resulting observation and terminal flags. A simulator: the market serves it with a stand-in that needs no simulator install.","measures":["observation","reward","terminated","truncated","tick","episode","seed","info"],"adjusts":[],"actions":[{"name":"step","description":"Advance the simulated world by a bounded number of fixed timesteps, optionally applying an action for each step, and return the resulting observation and terminal flags."},{"name":"reset","description":"Reset the simulated world to a scenario start state and return the initial observation. When a seed is supplied the endpoint records it in the receipt; otherwise the endpoint's declared default seed applies."},{"name":"seed","description":"Set the seed used by the simulated world's random number generators for subsequent steps, without resetting the world. The accepted seed is echoed in the receipt."}],"tags":["gymnasium","mujoco","simulation","ur5e","reach","rl"],"backends":["fake","sim"],"served_backend":"fake","evidence":"contract_checked","upstream":{"repo_url":"https://github.com/darshmenon/ur3_ros2_pick_and_place","commit":"e58ea6178d8d8195beb92387ba365227840a96a9","license":"MIT"},"stars":65,"install":{"openai4s":"openai4s lab add robots/darshmenon__ur3_ros2_pick_and_place","mhs":"mhs serve robots/darshmenon__ur3_ros2_pick_and_place --port 7400","mcp":"mhs serve robots/darshmenon__ur3_ros2_pick_and_place --mcp"}},
{"id":"robots/dartenv__dart-env","name":"dart-env Copy-v0 (algorithmic tape world)","device_id":"mhs://localhost/dart-env","track":"robots","category":"Simulation","topic":null,"kind":"world.sim","vendor":"dartenv","model":"Copy-v0","mode":"simulated","risk":"R0","family":"gymnasium","role":"sim-env","intro":"dart-env Copy-v0 (algorithmic tape world), adapted from dartenv/dart-env. It reads `observation`, `reward`, `terminated`, `truncated` and 4 more; runs `step`, `reset` and `seed`. `step`: advance the simulated world by a bounded number of fixed timesteps, optionally applying an action for each step, and return the resulting observation and terminal flags. A simulator: the market serves it with a stand-in that needs no simulator install.","measures":["observation","reward","terminated","truncated","tick","episode","seed","info"],"adjusts":[],"actions":[{"name":"step","description":"Advance the simulated world by a bounded number of fixed timesteps, optionally applying an action for each step, and return the resulting observation and terminal flags."},{"name":"reset","description":"Reset the simulated world to a scenario start state and return the initial observation. When a seed is supplied the endpoint records it in the receipt; otherwise the endpoint's declared default seed applies."},{"name":"seed","description":"Set the seed used by the simulated world's random number generators for subsequent steps, without resetting the world. The accepted seed is echoed in the receipt."}],"tags":["algorithmic","copy","gym","reinforcement-learning","simulation","world-model"],"backends":["fake"],"served_backend":"fake","evidence":"contract_checked","upstream":{"repo_url":"https://github.com/dartenv/dart-env","commit":"43e5f8c17b534e180e2340ec2ef405950ad7f542","license":"MIT"},"stars":0,"install":{"openai4s":"openai4s lab add robots/dartenv__dart-env","mhs":"mhs serve robots/dartenv__dart-env --port 7400","mcp":"mhs serve robots/dartenv__dart-env --mcp"}},
{"id":"robots/dartsim__gym-dart","name":"gym-dart DartCartPole-v0 (DART cart-pole)","device_id":"mhs://localhost/dart-cartpole","track":"robots","category":"Simulation","topic":null,"kind":"world.sim","vendor":"dartsim","model":"DartCartPole-v0","mode":"simulated","risk":"R0","family":"gymnasium","role":"sim-env","intro":"gym-dart DartCartPole-v0 (DART cart-pole), adapted from dartsim/gym-dart. It reads `observation`, `reward`, `terminated`, `truncated` and 4 more; runs `step`, `reset` and `seed`. `step`: advance the simulated world by a bounded number of fixed timesteps, optionally applying an action for each step, and return the resulting observation and terminal flags. A simulator: the market serves it with a stand-in that needs no simulator install.","measures":["observation","reward","terminated","truncated","tick","episode","seed","info"],"adjusts":[],"actions":[{"name":"step","description":"Advance the simulated world by a bounded number of fixed timesteps, optionally applying an action for each step, and return the resulting observation and terminal flags."},{"name":"reset","description":"Reset the simulated world to a scenario start state and return the initial observation. When a seed is supplied the endpoint records it in the receipt; otherwise the endpoint's declared default seed applies."},{"name":"seed","description":"Set the seed used by the simulated world's random number generators for subsequent steps, without resetting the world. The accepted seed is echoed in the receipt."}],"tags":["cartpole","dart","reinforcement-learning","simulation","gymnasium"],"backends":["fake"],"served_backend":"fake","evidence":"contract_checked","upstream":{"repo_url":"https://github.com/dartsim/gym-dart","commit":"bf915eaa3baa70a3a4d0fd42e024694e7825d5fe","license":"BSD-2-Clause"},"stars":26,"install":{"openai4s":"openai4s lab add robots/dartsim__gym-dart","mhs":"mhs serve robots/dartsim__gym-dart --port 7400","mcp":"mhs serve robots/dartsim__gym-dart --mcp"}},
{"id":"robots/deeproboticslab__deep_robotics_model","name":"Deep Robotics Lite3 (MuJoCo)","device_id":"mhs://localhost/lite3","track":"robots","category":"Simulation","topic":"legged robots","kind":"world.sim","vendor":"Deep Robotics","model":"Lite3","mode":"simulated","risk":"R0","family":"mujoco","role":"twin-candidate","intro":"Deep Robotics Lite3 (MuJoCo), adapted from deeproboticslab/deep_robotics_model. It reads `time_ms`, `qpos`, `qvel`, `ctrl` and 4 more; runs `step` and `reset`. `step`: advance the simulated world by a bounded number of fixed timesteps, optionally applying an action for each step, and return the resulting observation and terminal flags. A simulator: the market serves it with a stand-in that needs no simulator install.","measures":["time_ms","qpos","qvel","ctrl","tick","timestep_ms","seed","native_checkpoint"],"adjusts":[],"actions":[{"name":"step","description":"Advance the simulated world by a bounded number of fixed timesteps, optionally applying an action for each step, and return the resulting observation and terminal flags."},{"name":"reset","description":"Reset the simulated world to a scenario start state and return the initial observation. When a seed is supplied the endpoint records it in the receipt; otherwise the endpoint's declared default seed applies."}],"tags":["mujoco","lite3","deep-robotics","quadruped","robot","simulation"],"backends":["fake"],"served_backend":"fake","evidence":"contract_checked","upstream":{"repo_url":"https://github.com/deeproboticslab/deep_robotics_model","commit":"75824b516ecc8fa3f8f7ce5d6577e1e86d6b614f","license":"BSD-3-Clause"},"stars":80,"install":{"openai4s":"openai4s lab add robots/deeproboticslab__deep_robotics_model","mhs":"mhs serve robots/deeproboticslab__deep_robotics_model --port 7400","mcp":"mhs serve robots/deeproboticslab__deep_robotics_model --mcp"}},
{"id":"robots/denisgriaznov__custommujocoenviromentforrl","name":"BallBalanceEnv MuJoCo model (ball balancing)","device_id":"mhs://localhost/ball-balance","track":"robots","category":"Simulation","topic":null,"kind":"world.sim","vendor":"denisgriaznov","model":"CustomMuJoCoEnviromentForRL","mode":"simulated","risk":"R0","family":"mujoco","role":"sim-env","intro":"BallBalanceEnv MuJoCo model (ball balancing), adapted from denisgriaznov/custommujocoenviromentforrl. It reads `time_ms`, `qpos`, `qvel`, `ctrl` and 4 more; runs `step` and `reset`. `step`: advance the simulated world by a bounded number of fixed timesteps, optionally applying an action for each step, and return the resulting observation and terminal flags. A simulator: the market serves it with a stand-in that needs no simulator install.","measures":["time_ms","qpos","qvel","ctrl","tick","timestep_ms","seed","native_checkpoint"],"adjusts":[],"actions":[{"name":"step","description":"Advance the simulated world by a bounded number of fixed timesteps, optionally applying an action for each step, and return the resulting observation and terminal flags."},{"name":"reset","description":"Reset the simulated world to a scenario start state and return the initial observation. When a seed is supplied the endpoint records it in the receipt; otherwise the endpoint's declared default seed applies."}],"tags":["ball-balance","mujoco","reinforcement-learning","simulation","world-model"],"backends":["fake"],"served_backend":"fake","evidence":"contract_checked","upstream":{"repo_url":"https://github.com/denisgriaznov/custommujocoenviromentforrl","commit":"a6d91aeb4e9770feda5210753706e7a431643242","license":"NOASSERTION"},"stars":64,"install":{"openai4s":"openai4s lab add robots/denisgriaznov__custommujocoenviromentforrl","mhs":"mhs serve robots/denisgriaznov__custommujocoenviromentforrl --port 7400","mcp":"mhs serve robots/denisgriaznov__custommujocoenviromentforrl --mcp"}},
{"id":"robots/dexrobot__dexrobot_isaac","name":"DexRobot DexHand021 (Isaac Gym environment)","device_id":"mhs://localhost/dexhand021","track":"robots","category":"Simulation","topic":"robot arm manipulation","kind":"world.sim","vendor":"DexRobot","model":"DexHand021","mode":"simulated","risk":"R0","family":"gymnasium","role":"sim-env","intro":"DexRobot DexHand021 (Isaac Gym environment), adapted from dexrobot/dexrobot_isaac. It reads `observation`, `reward`, `terminated`, `truncated` and 4 more; runs `step`, `reset` and `seed`. `step`: advance the simulated world by a bounded number of fixed timesteps, optionally applying an action for each step, and return the resulting observation and terminal flags. A simulator: the market serves it with a stand-in that needs no simulator install.","measures":["observation","reward","terminated","truncated","tick","episode","seed","info"],"adjusts":[],"actions":[{"name":"step","description":"Advance the simulated world by a bounded number of fixed timesteps, optionally applying an action for each step, and return the resulting observation and terminal flags."},{"name":"reset","description":"Reset the simulated world to a scenario start state and return the initial observation. When a seed is supplied the endpoint records it in the receipt; otherwise the endpoint's declared default seed applies."},{"name":"seed","description":"Set the seed used by the simulated world's random number generators for subsequent steps, without resetting the world. The accepted seed is echoed in the receipt."}],"tags":["dexhand","dexterous-manipulation","isaac-gym","reinforcement-learning","simulation","gymnasium"],"backends":["fake"],"served_backend":"fake","evidence":"contract_checked","upstream":{"repo_url":"https://github.com/dexrobot/dexrobot_isaac","commit":"dc85a0b54a7051470f0162c7df22a2a1c69cfaf1","license":"Apache-2.0"},"stars":24,"install":{"openai4s":"openai4s lab add robots/dexrobot__dexrobot_isaac","mhs":"mhs serve robots/dexrobot__dexrobot_isaac --port 7400","mcp":"mhs serve robots/dexrobot__dexrobot_isaac --mcp"}},
{"id":"robots/dfki-ni__mobipick_labs","name":"Mobipick tables-demo experiment camera","device_id":"mhs://localhost/mobipick_experiment_camera","track":"robots","category":"Sensors and cameras","topic":null,"kind":"sensor.camera","vendor":"DFKI-NI","model":null,"mode":"simulated","risk":"R1","family":"ros","role":"sim-env","intro":"Mobipick tables-demo experiment camera, adapted from dfki-ni/mobipick_labs. It runs `capture`. `capture`: capture a single image from a named camera with a declared resolution and exposure and return an image artifact reference. A simulator: the market serves it with a stand-in that needs no simulator install.","measures":[],"adjusts":[],"actions":[{"name":"capture","description":"Capture a single image from a named camera with a declared resolution and exposure and return an image artifact reference."}],"tags":["ros","ros1","gazebo","simulation","camera","image","mobipick"],"backends":["fake"],"served_backend":"fake","evidence":"contract_checked","upstream":{"repo_url":"https://github.com/dfki-ni/mobipick_labs","commit":"adbfa53af2f6221501215bfb18d2d108225bc04f","license":"BSD-3-Clause"},"stars":7,"install":{"openai4s":"openai4s lab add robots/dfki-ni__mobipick_labs","mhs":"mhs serve robots/dfki-ni__mobipick_labs --port 7400","mcp":"mhs serve robots/dfki-ni__mobipick_labs --mcp"}},
{"id":"robots/dfki-ric__deformable_gym","name":"deformable_gym FloatingMiaGraspInsole-v0 (PyBullet simulation)","device_id":"mhs://localhost/floating_mia_grasp","track":"robots","category":"Simulation","topic":"robot manipulation","kind":"world.sim","vendor":"DFKI RIC","model":"FloatingMiaGraspInsole-v0","mode":"simulated","risk":"R0","family":"gymnasium","role":"sim-env","intro":"deformable_gym FloatingMiaGraspInsole-v0 (PyBullet simulation), adapted from dfki-ric/deformable_gym. It reads `observation`, `reward`, `terminated`, `truncated` and 4 more; runs `step`, `reset` and `seed`. `step`: advance the simulated world by a bounded number of fixed timesteps, optionally applying an action for each step, and return the resulting observation and terminal flags. A simulator: the market serves it with a stand-in that needs no simulator install.","measures":["observation","reward","terminated","truncated","tick","episode","seed","info"],"adjusts":[],"actions":[{"name":"step","description":"Advance the simulated world by a bounded number of fixed timesteps, optionally applying an action for each step, and return the resulting observation and terminal flags."},{"name":"reset","description":"Reset the simulated world to a scenario start state and return the initial observation. When a seed is supplied the endpoint records it in the receipt; otherwise the endpoint's declared default seed applies."},{"name":"seed","description":"Set the seed used by the simulated world's random number generators for subsequent steps, without resetting the world. The accepted seed is echoed in the receipt."}],"tags":["grasping","deformable-object","reinforcement-learning","simulation","pybullet","gymnasium"],"backends":["fake"],"served_backend":"fake","evidence":"contract_checked","upstream":{"repo_url":"https://github.com/dfki-ric/deformable_gym","commit":"5b67bc9eb28f3c4356c49d0192906fec1752d1a1","license":"BSD-3-Clause"},"stars":54,"install":{"openai4s":"openai4s lab add robots/dfki-ric__deformable_gym","mhs":"mhs serve robots/dfki-ric__deformable_gym --port 7400","mcp":"mhs serve robots/dfki-ric__deformable_gym --mcp"}},
{"id":"robots/dh-ng__tacex","name":"TacEx Ball Rolling (Isaac Lab privileged task)","device_id":"mhs://localhost/tacex-ball-rolling","track":"robots","category":"Simulation","topic":"robot arm manipulation","kind":"world.sim","vendor":"DH-Ng / Tactile Extension","model":"TacEx-Ball-Rolling-Privileged-v0","mode":"simulated","risk":"R0","family":"gymnasium","role":"sim-env","intro":"TacEx Ball Rolling (Isaac Lab privileged task), adapted from dh-ng/tacex. It reads `observation`, `reward`, `terminated`, `truncated` and 4 more; runs `step`, `reset` and `seed`. `step`: advance the simulated world by a bounded number of fixed timesteps, optionally applying an action for each step, and return the resulting observation and terminal flags. A simulator: the market serves it with a stand-in that needs no simulator install.","measures":["observation","reward","terminated","truncated","tick","episode","seed","info"],"adjusts":[],"actions":[{"name":"step","description":"Advance the simulated world by a bounded number of fixed timesteps, optionally applying an action for each step, and return the resulting observation and terminal flags."},{"name":"reset","description":"Reset the simulated world to a scenario start state and return the initial observation. When a seed is supplied the endpoint records it in the receipt; otherwise the endpoint's declared default seed applies."},{"name":"seed","description":"Set the seed used by the simulated world's random number generators for subsequent steps, without resetting the world. The accepted seed is echoed in the receipt."}],"tags":["tacex","tactile","isaac-sim","isaac-lab","ball-rolling","reinforcement-learning","simulation","gymnasium"],"backends":["fake"],"served_backend":"fake","evidence":"contract_checked","upstream":{"repo_url":"https://github.com/dh-ng/tacex","commit":"adceed41afb7cb48f9ec1f66a662fb8e5a06627f","license":"NOASSERTION"},"stars":167,"install":{"openai4s":"openai4s lab add robots/dh-ng__tacex","mhs":"mhs serve robots/dh-ng__tacex --port 7400","mcp":"mhs serve robots/dh-ng__tacex --mcp"}},
{"id":"robots/dimikout3__marsexplorer","name":"Mars Explorer v0.1 (grid-world exploration)","device_id":"mhs://localhost/mars-explorer","track":"robots","category":"Simulation","topic":"mobile robots","kind":"world.sim","vendor":"dimikout3","model":"mars_explorer 0.0.1","mode":"simulated","risk":"R0","family":"gymnasium","role":"sim-env","intro":"Mars Explorer v0.1 (grid-world exploration), adapted from dimikout3/marsexplorer. It reads `observation`, `reward`, `terminated`, `truncated` and 4 more; runs `step`, `reset` and `seed`. `step`: advance the simulated world by a bounded number of fixed timesteps, optionally applying an action for each step, and return the resulting observation and terminal flags. A simulator: the market serves it with a stand-in that needs no simulator install.","measures":["observation","reward","terminated","truncated","tick","episode","seed","info"],"adjusts":[],"actions":[{"name":"step","description":"Advance the simulated world by a bounded number of fixed timesteps, optionally applying an action for each step, and return the resulting observation and terminal flags."},{"name":"reset","description":"Reset the simulated world to a scenario start state and return the initial observation. When a seed is supplied the endpoint records it in the receipt; otherwise the endpoint's declared default seed applies."},{"name":"seed","description":"Set the seed used by the simulated world's random number generators for subsequent steps, without resetting the world. The accepted seed is echoed in the receipt."}],"tags":["mars","exploration","grid-world","lidar","reinforcement-learning","simulation","gym"],"backends":["fake"],"served_backend":"fake","evidence":"contract_checked","upstream":{"repo_url":"https://github.com/dimikout3/marsexplorer","commit":"6533a9a05bde1050bc639ee40096240680ad6f2d","license":"NOASSERTION"},"stars":0,"install":{"openai4s":"openai4s lab add robots/dimikout3__marsexplorer","mhs":"mhs serve robots/dimikout3__marsexplorer --port 7400","mcp":"mhs serve robots/dimikout3__marsexplorer --mcp"}},
{"id":"robots/disaster-robotics-proalertas__usv_sim_lsa","name":"USV_SIM_LSA differential USV simulator","device_id":"mhs://localhost/usv-sim","track":"robots","category":"Simulation","topic":"underwater robotics","kind":"world.sim","vendor":"Disaster Robotics Proalertas","model":null,"mode":"simulated","risk":"R2","family":"ros","role":"sim-env","intro":"USV_SIM_LSA differential USV simulator, adapted from disaster-robotics-proalertas/usv_sim_lsa. It reads `read_simulator_state`, `read_goal_result` and `read_thruster_command`; runs `move_usv_goal`, `pause_physics` and `unpause_physics`. `move_usv_goal`: publish one nav_msgs/Odometry goal to the heading controller's move_usv/goal subscription; the controller publishes the two thruster commands without an acknowledgement. The receipt proves only that rosbridge accepted the publication, not that the boat moved or reached the goal. A simulator: the market serves it with a stand-in that needs no simulator install.","measures":["read_simulator_state","read_goal_result","read_thruster_command"],"adjusts":[],"actions":[{"name":"move_usv_goal","description":"Publish one nav_msgs/Odometry goal to the heading controller's move_usv/goal subscription; the controller publishes the two thruster commands without an acknowledgement. The receipt proves only that rosbridge accepted the publication, not that the boat moved or reached the goal."},{"name":"pause_physics","description":"Call the acknowledged /gazebo/pause_physics std_srvs/Empty service; this is the declared simulated safe state and the native e-stop binding"},{"name":"unpause_physics","description":"Call the acknowledged /gazebo/unpause_physics std_srvs/Empty service; an ordinary command, refused while the e-stop latch is engaged"}],"tags":["ros","ros1","simulation","gazebo","uwsim","usv","marine","heading-control"],"backends":["fake"],"served_backend":"fake","evidence":"contract_checked","upstream":{"repo_url":"https://github.com/disaster-robotics-proalertas/usv_sim_lsa","commit":"61e8f4a5f78f18c01dac0d4eea7f4c3c416e6cb8","license":"Apache-2.0"},"stars":461,"install":{"openai4s":"openai4s lab add robots/disaster-robotics-proalertas__usv_sim_lsa","mhs":"mhs serve robots/disaster-robotics-proalertas__usv_sim_lsa --port 7400","mcp":"mhs serve robots/disaster-robotics-proalertas__usv_sim_lsa --mcp"}},
{"id":"robots/discoverse-dev__mujoco-lidar","name":"MuJoCo-LiDAR Unitree G1 scene (MuJoCo model)","device_id":"mhs://localhost/mujoco-lidar","track":"robots","category":"Simulation","topic":null,"kind":"world.sim","vendor":"DISCOVERSE","model":"MuJoCo-LiDAR G1 scene","mode":"simulated","risk":"R0","family":"mujoco","role":"twin-candidate","intro":"MuJoCo-LiDAR Unitree G1 scene (MuJoCo model), adapted from discoverse-dev/mujoco-lidar. It reads `time_ms`, `qpos`, `qvel`, `ctrl` and 4 more; runs `step` and `reset`. `step`: advance the simulated world by a bounded number of fixed timesteps, optionally applying an action for each step, and return the resulting observation and terminal flags. A simulator: the market serves it with a stand-in that needs no simulator install.","measures":["time_ms","qpos","qvel","ctrl","tick","timestep_ms","seed","native_checkpoint"],"adjusts":[],"actions":[{"name":"step","description":"Advance the simulated world by a bounded number of fixed timesteps, optionally applying an action for each step, and return the resulting observation and terminal flags."},{"name":"reset","description":"Reset the simulated world to a scenario start state and return the initial observation. When a seed is supplied the endpoint records it in the receipt; otherwise the endpoint's declared default seed applies."}],"tags":["mujoco","simulation","lidar","unitree-g1","world","scene"],"backends":["fake"],"served_backend":"fake","evidence":"contract_checked","upstream":{"repo_url":"https://github.com/discoverse-dev/mujoco-lidar","commit":"e6b879df4b96daaed30ef10fe02650d29048fa9b","license":"MIT"},"stars":176,"install":{"openai4s":"openai4s lab add robots/discoverse-dev__mujoco-lidar","mhs":"mhs serve robots/discoverse-dev__mujoco-lidar --port 7400","mcp":"mhs serve robots/discoverse-dev__mujoco-lidar --mcp"}},
{"id":"robots/dobot-arm__tcp-ip-python-v4","name":"Dobot V4 series arm (TCP/IP Python SDK)","device_id":"mhs://localhost/dobot-arm","track":"robots","category":"Robot arms and grippers","topic":null,"kind":"robot.arm","vendor":"Dobot","model":"V4 series arm (CRA, E6, CRAF, NovaLite families)","mode":"hardware","risk":"R2","family":"python-object","role":"device-driver","intro":"Dobot V4 series arm (TCP/IP Python SDK), adapted from dobot-arm/tcp-ip-python-v4. It reads `joint_positions`, `tcp_pose`, `robot_mode` and `error_ids`; runs `move_joints`, `move_pose` and `stop_motion`. `move_joints`: command one or more actuated joints to target positions in joint space, optionally over a declared duration, and report whether the target was reached within tolerance. A hardware driver: the market serves its fake backend, so no instrument is needed.","measures":["joint_positions","tcp_pose","robot_mode","error_ids"],"adjusts":[],"actions":[{"name":"move_joints","description":"Command one or more actuated joints to target positions in joint space, optionally over a declared duration, and report whether the target was reached within tolerance."},{"name":"move_pose","description":"Move the tool centre point to a Cartesian position and orientation in a named frame. The endpoint solves inverse kinematics; an unreachable target is rejected before motion."},{"name":"stop_motion","description":"Stop all motion on the resource with a declared deceleration profile and report the stopping position. This capability is always cancellable=false and is exempt from rate limiting."}],"tags":["robot arm","dobot","tcp ip","joint motion","cartesian motion","stop"],"backends":["fake","hardware"],"served_backend":"fake","evidence":"contract_checked","upstream":{"repo_url":"https://github.com/dobot-arm/tcp-ip-python-v4","commit":"55ec1ec82201aaf2e6d54aa47b6272bbaa14c815","license":"MIT"},"stars":87,"install":{"openai4s":"openai4s lab add robots/dobot-arm__tcp-ip-python-v4","mhs":"mhs serve robots/dobot-arm__tcp-ip-python-v4 --port 7400","mcp":"mhs serve robots/dobot-arm__tcp-ip-python-v4 --mcp"}},
{"id":"robots/drcl-usc__hector_simulation","name":"HECTOR humanoid Gazebo simulation","device_id":"mhs://localhost/hector-simulation","track":"robots","category":"Simulation","topic":"humanoid robots","kind":"world.sim","vendor":"USC Dynamic Robotics and Control Laboratory","model":"HECTOR humanoid (ten-joint Gazebo model)","mode":"simulated","risk":"R2","family":"ros","role":"sim-env","intro":"HECTOR humanoid Gazebo simulation, adapted from drcl-usc/hector_simulation. It reads `read_model_states`; runs `send_left_hip_command`, `send_left_hip2_command`, `send_left_thigh_command`, `send_left_calf_command` and 6 more. `send_left_hip_command`: publish one unitree_legged_msgs/MotorCmd for the simulated left_hip joint. The receipt proves only that rosbridge accepted the publication; it does not prove that the controller applied it, that the joint moved, or that the robot is stable. A simulator: the market serves it with a stand-in that needs no simulator install.","measures":["read_model_states"],"adjusts":[],"actions":[{"name":"send_left_hip_command","description":"Publish one unitree_legged_msgs/MotorCmd for the simulated left_hip joint. The receipt proves only that rosbridge accepted the publication; it does not prove that the controller applied it, that the joint moved, or that the robot is stable."},{"name":"send_left_hip2_command","description":"Publish one unitree_legged_msgs/MotorCmd for the simulated left_hip2 joint. The receipt proves only that rosbridge accepted the publication; it does not prove that the controller applied it, that the joint moved, or that the robot is stable."},{"name":"send_left_thigh_command","description":"Publish one unitree_legged_msgs/MotorCmd for the simulated left_thigh joint. The receipt proves only that rosbridge accepted the publication; it does not prove that the controller applied it, that the joint moved, or that the robot is stable."},{"name":"send_left_calf_command","description":"Publish one unitree_legged_msgs/MotorCmd for the simulated left_calf joint. The receipt proves only that rosbridge accepted the publication; it does not prove that the controller applied it, that the joint moved, or that the robot is stable."},{"name":"send_left_toe_command","description":"Publish one unitree_legged_msgs/MotorCmd for the simulated left_toe joint. The receipt proves only that rosbridge accepted the publication; it does not prove that the controller applied it, that the joint moved, or that the robot is stable."},{"name":"send_right_hip_command","description":"Publish one unitree_legged_msgs/MotorCmd for the simulated right_hip joint. The receipt proves only that rosbridge accepted the publication; it does not prove that the controller applied it, that the joint moved, or that the robot is stable."},{"name":"send_right_hip2_command","description":"Publish one unitree_legged_msgs/MotorCmd for the simulated right_hip2 joint. The receipt proves only that rosbridge accepted the publication; it does not prove that the controller applied it, that the joint moved, or that the robot is stable."},{"name":"send_right_thigh_command","description":"Publish one unitree_legged_msgs/MotorCmd for the simulated right_thigh joint. The receipt proves only that rosbridge accepted the publication; it does not prove that the controller applied it, that the joint moved, or that the robot is stable."},{"name":"send_right_calf_command","description":"Publish one unitree_legged_msgs/MotorCmd for the simulated right_calf joint. The receipt proves only that rosbridge accepted the publication; it does not prove that the controller applied it, that the joint moved, or that the robot is stable."},{"name":"send_right_toe_command","description":"Publish one unitree_legged_msgs/MotorCmd for the simulated right_toe joint. The receipt proves only that rosbridge accepted the publication; it does not prove that the controller applied it, that the joint moved, or that the robot is stable."}],"tags":["ros","ros1","gazebo","simulation","humanoid","biped","hector","joint-command"],"backends":["fake"],"served_backend":"fake","evidence":"contract_checked","upstream":{"repo_url":"https://github.com/drcl-usc/hector_simulation","commit":"edfdc7b1a9855c71887ac2cf2ebe0bb5dee5ea49","license":"BSD-3-Clause"},"stars":534,"install":{"openai4s":"openai4s lab add robots/drcl-usc__hector_simulation","mhs":"mhs serve robots/drcl-usc__hector_simulation --port 7400","mcp":"mhs serve robots/drcl-usc__hector_simulation --mcp"}},
{"id":"robots/duburcqa__jiminy","name":"Jiminy CartPole (gym_jiminy)","device_id":"mhs://localhost/jiminy-cartpole","track":"robots","category":"Simulation","topic":null,"kind":"world.sim","vendor":"duburcqa","model":"CartPoleJiminyEnv","mode":"simulated","risk":"R0","family":"gymnasium","role":"sim-env","intro":"Jiminy CartPole (gym_jiminy), adapted from duburcqa/jiminy. It reads `observation`, `reward`, `terminated`, `truncated` and 4 more; runs `step`, `reset` and `seed`. `step`: advance the simulated world by a bounded number of fixed timesteps, optionally applying an action for each step, and return the resulting observation and terminal flags. A simulator: the market serves it with a stand-in that needs no simulator install.","measures":["observation","reward","terminated","truncated","tick","episode","seed","info"],"adjusts":[],"actions":[{"name":"step","description":"Advance the simulated world by a bounded number of fixed timesteps, optionally applying an action for each step, and return the resulting observation and terminal flags."},{"name":"reset","description":"Reset the simulated world to a scenario start state and return the initial observation. When a seed is supplied the endpoint records it in the receipt; otherwise the endpoint's declared default seed applies."},{"name":"seed","description":"Set the seed used by the simulated world's random number generators for subsequent steps, without resetting the world. The accepted seed is echoed in the receipt."}],"tags":["cartpole","classic-control","reinforcement-learning","simulation","gymnasium","jiminy"],"backends":["fake"],"served_backend":"fake","evidence":"contract_checked","upstream":{"repo_url":"https://github.com/duburcqa/jiminy","commit":"accdf3629d9d8c08bb97f2905f010f1616d2168a","license":"MIT"},"stars":0,"install":{"openai4s":"openai4s lab add robots/duburcqa__jiminy","mhs":"mhs serve robots/duburcqa__jiminy --port 7400","mcp":"mhs serve robots/duburcqa__jiminy --mcp"}},
{"id":"robots/duckietown__gym-duckietown","name":"Gym-Duckietown MultiMap-v0 (two-map camera simulator)","device_id":"mhs://localhost/duckietown-multimap","track":"robots","category":"Simulation","topic":"mobile robots","kind":"world.sim","vendor":"Duckietown","model":"MultiMap-v0","mode":"simulated","risk":"R0","family":"gymnasium","role":"sim-env","intro":"Gym-Duckietown MultiMap-v0 (two-map camera simulator), adapted from duckietown/gym-duckietown. It reads `observation`, `reward`, `terminated`, `truncated` and 4 more; runs `step`, `reset` and `seed`. `step`: advance the simulated world by a bounded number of fixed timesteps, optionally applying an action for each step, and return the resulting observation and terminal flags. A simulator: the market serves it with a stand-in that needs no simulator install.","measures":["observation","reward","terminated","truncated","tick","episode","seed","info"],"adjusts":[],"actions":[{"name":"step","description":"Advance the simulated world by a bounded number of fixed timesteps, optionally applying an action for each step, and return the resulting observation and terminal flags."},{"name":"reset","description":"Reset the simulated world to a scenario start state and return the initial observation. When a seed is supplied the endpoint records it in the receipt; otherwise the endpoint's declared default seed applies."},{"name":"seed","description":"Set the seed used by the simulated world's random number generators for subsequent steps, without resetting the world. The accepted seed is echoed in the receipt."}],"tags":["duckietown","multimap","camera","differential-drive","simulation","gym"],"backends":["fake"],"served_backend":"fake","evidence":"contract_checked","upstream":{"repo_url":"https://github.com/duckietown/gym-duckietown","commit":"c76a7fec7f739db4f624f40ca83ce99383665558","license":"NOASSERTION"},"stars":0,"install":{"openai4s":"openai4s lab add robots/duckietown__gym-duckietown","mhs":"mhs serve robots/duckietown__gym-duckietown --port 7400","mcp":"mhs serve robots/duckietown__gym-duckietown --mcp"}},
{"id":"robots/dyson-ai__grip","name":"Grip PickAndPlaceEnvironment (pybullet)","device_id":"mhs://localhost/grip-pick-and-place","track":"robots","category":"Simulation","topic":"robot arm manipulation","kind":"world.sim","vendor":"Dyson AI","model":"grip PickAndPlaceEnvironment","mode":"simulated","risk":"R0","family":"python-object","role":"sim-env","intro":"Grip PickAndPlaceEnvironment (pybullet), adapted from dyson-ai/grip. It reads `observation`, `reward`, `terminated`, `truncated` and 4 more; runs `step`, `reset_world` and `fence`. `step`: advance the simulated world by a bounded number of fixed timesteps, optionally applying an action for each step, and return the resulting observation and terminal flags. A simulator: the market serves it with a stand-in that needs no simulator install.","measures":["observation","reward","terminated","truncated","tick","episode","seed","info"],"adjusts":[],"actions":[{"name":"step","description":"Advance the simulated world by a bounded number of fixed timesteps, optionally applying an action for each step, and return the resulting observation and terminal flags."},{"name":"reset_world","description":"Reset the simulated world to a scenario start state and return the initial observation. When a seed is supplied the endpoint records it in the receipt; otherwise the endpoint's declared default seed applies."},{"name":"fence","description":"Fence future environment calls and confirm the non-realtime world is idle"}],"tags":["pybullet","manipulation","pick-and-place","franka","simulation","reinforcement-learning"],"backends":["fake","sim"],"served_backend":"fake","evidence":"contract_checked","upstream":{"repo_url":"https://github.com/dyson-ai/grip","commit":"eee9f38f86ac636ba4b4ddd1e6b9cfb783f0e203","license":"MIT"},"stars":20,"install":{"openai4s":"openai4s lab add robots/dyson-ai__grip","mhs":"mhs serve robots/dyson-ai__grip --port 7400","mcp":"mhs serve robots/dyson-ai__grip --mcp"}},
{"id":"robots/eanswer__tactilesimulation","name":"Tactile Simulation TactilePush-v1 (tactile pushing)","device_id":"mhs://localhost/tactile_push","track":"robots","category":"Simulation","topic":"robot arm manipulation","kind":"world.sim","vendor":"eanswer","model":"TactilePush-v1","mode":"simulated","risk":"R0","family":"gymnasium","role":"sim-env","intro":"Tactile Simulation TactilePush-v1 (tactile pushing), adapted from eanswer/tactilesimulation. It reads `observation`, `reward`, `terminated`, `truncated` and 4 more; runs `step`, `reset` and `seed`. `step`: advance the simulated world by a bounded number of fixed timesteps, optionally applying an action for each step, and return the resulting observation and terminal flags. A simulator: the market serves it with a stand-in that needs no simulator install.","measures":["observation","reward","terminated","truncated","tick","episode","seed","info"],"adjusts":[],"actions":[{"name":"step","description":"Advance the simulated world by a bounded number of fixed timesteps, optionally applying an action for each step, and return the resulting observation and terminal flags."},{"name":"reset","description":"Reset the simulated world to a scenario start state and return the initial observation. When a seed is supplied the endpoint records it in the receipt; otherwise the endpoint's declared default seed applies."},{"name":"seed","description":"Set the seed used by the simulated world's random number generators for subsequent steps, without resetting the world. The accepted seed is echoed in the receipt."}],"tags":["tactile","pushing","reinforcement-learning","simulation","gymnasium","differential-simulation"],"backends":["fake"],"served_backend":"fake","evidence":"contract_checked","upstream":{"repo_url":"https://github.com/eanswer/tactilesimulation","commit":"0c42783a8b5cc7abe1a9fa3e6aa65e4aeb8eb670","license":"NOASSERTION"},"stars":0,"install":{"openai4s":"openai4s lab add robots/eanswer__tactilesimulation","mhs":"mhs serve robots/eanswer__tactilesimulation --port 7400","mcp":"mhs serve robots/eanswer__tactilesimulation --mcp"}},
{"id":"robots/ebim-benchmark__benchmark","name":"EBiM Benchmark Task 1 cable routing (MuJoCo)","device_id":"mhs://localhost/ebim-task1-cable-routing","track":"robots","category":"Simulation","topic":"robot manipulation","kind":"world.sim","vendor":"EBiM Benchmark","model":"full_robot_board_cable_routing","mode":"simulated","risk":"R0","family":"mujoco","role":"sim-env","intro":"EBiM Benchmark Task 1 cable routing (MuJoCo), adapted from ebim-benchmark/benchmark. It reads `time_ms`, `qpos`, `qvel`, `ctrl` and 4 more; runs `step` and `reset`. `step`: advance the simulated world by a bounded number of fixed timesteps, optionally applying an action for each step, and return the resulting observation and terminal flags. A simulator: the market serves it with a stand-in that needs no simulator install.","measures":["time_ms","qpos","qvel","ctrl","tick","timestep_ms","seed","native_checkpoint"],"adjusts":[],"actions":[{"name":"step","description":"Advance the simulated world by a bounded number of fixed timesteps, optionally applying an action for each step, and return the resulting observation and terminal flags."},{"name":"reset","description":"Reset the simulated world to a scenario start state and return the initial observation. When a seed is supplied the endpoint records it in the receipt; otherwise the endpoint's declared default seed applies."}],"tags":["benchmark","cable-routing","dual-arm","fr3","manipulation","mobile-base","mujoco","robot","simulation"],"backends":["fake"],"served_backend":"fake","evidence":"contract_checked","upstream":{"repo_url":"https://github.com/ebim-benchmark/benchmark","commit":"161db49e9eafd34be31e5bdada72d8e2f796c16a","license":"Apache-2.0"},"stars":31,"install":{"openai4s":"openai4s lab add robots/ebim-benchmark__benchmark","mhs":"mhs serve robots/ebim-benchmark__benchmark --port 7400","mcp":"mhs serve robots/ebim-benchmark__benchmark --mcp"}},
{"id":"robots/edvardsz__ur5_gym","name":"UR5/RG2 Reach (Ignition Gazebo simulation)","device_id":"mhs://localhost/ur5-gym-reach","track":"robots","category":"Simulation","topic":"robot arm manipulation","kind":"world.sim","vendor":"EdvardsZ","model":"ReachUR5-v0","mode":"simulated","risk":"R0","family":"gymnasium","role":"sim-env","intro":"UR5/RG2 Reach (Ignition Gazebo simulation), adapted from edvardsz/ur5_gym. It reads `observation`, `reward`, `terminated`, `truncated` and 4 more; runs `reset_world`, `seed_world` and `step`. `reset_world`: reset the simulated world to a scenario start state and return the initial observation. When a seed is supplied the endpoint records it in the receipt; otherwise the endpoint's declared default seed applies. A simulator: the market serves it with a stand-in that needs no simulator install.","measures":["observation","reward","terminated","truncated","tick","episode","seed","info"],"adjusts":[],"actions":[{"name":"reset_world","description":"Reset the simulated world to a scenario start state and return the initial observation. When a seed is supplied the endpoint records it in the receipt; otherwise the endpoint's declared default seed applies."},{"name":"seed_world","description":"Set the seed used by the simulated world's random number generators for subsequent steps, without resetting the world. The accepted seed is echoed in the receipt."},{"name":"step","description":"Advance the simulated world by a bounded number of fixed timesteps, optionally applying an action for each step, and return the resulting observation and terminal flags."}],"tags":["gripper","ignition-gazebo","reinforcement-learning","robot","rg2","simulation","ur5"],"backends":["fake"],"served_backend":"fake","evidence":"contract_checked","upstream":{"repo_url":"https://github.com/edvardsz/ur5_gym","commit":"d059332a01d320a48617d5a46edb9856f3a4c86d","license":"MIT"},"stars":3,"install":{"openai4s":"openai4s lab add robots/edvardsz__ur5_gym","mhs":"mhs serve robots/edvardsz__ur5_gym --port 7400","mcp":"mhs serve robots/edvardsz__ur5_gym --mcp"}},
{"id":"robots/ehehee__variational-automation-benchmark","name":"Variational Automation Benchmark single-arm environment","device_id":"mhs://localhost/vab","track":"robots","category":"Simulation","topic":"robot arm manipulation","kind":"world.sim","vendor":"ehehee","model":"Variational Automation Benchmark","mode":"simulated","risk":"R0","family":"mujoco","role":"sim-env","intro":"Variational Automation Benchmark single-arm environment, adapted from ehehee/variational-automation-benchmark. It reads `observation`, `reward`, `success`, `completion_rate` and 5 more; runs `step` and `reset_world`. `step`: advance the simulated world by a bounded number of fixed timesteps, optionally applying an action for each step, and return the resulting observation and terminal flags. A simulator: the market serves it with a stand-in that needs no simulator install.","measures":["observation","reward","success","completion_rate","language","tick","episode","init_index","action_dim"],"adjusts":[],"actions":[{"name":"step","description":"Advance the simulated world by a bounded number of fixed timesteps, optionally applying an action for each step, and return the resulting observation and terminal flags."},{"name":"reset_world","description":"Reset the simulated world to a scenario start state and return the initial observation. When a seed is supplied the endpoint records it in the receipt; otherwise the endpoint's declared default seed applies."}],"tags":["simulation","robosuite","mujoco","manipulation","robot","benchmark","reinforcement-learning"],"backends":["fake"],"served_backend":"fake","evidence":"contract_checked","upstream":{"repo_url":"https://github.com/ehehee/variational-automation-benchmark","commit":"edcc4bf005446839c0c6f43f8a3bf416702af030","license":"MIT"},"stars":1,"install":{"openai4s":"openai4s lab add robots/ehehee__variational-automation-benchmark","mhs":"mhs serve robots/ehehee__variational-automation-benchmark --port 7400","mcp":"mhs serve robots/ehehee__variational-automation-benchmark --mcp"}},
{"id":"robots/electronicelephant__pybullet_ur5_robotiq","name":"UR5 arm with Robotiq-85/140 gripper in a PyBullet push-and-grasp scene","device_id":"mhs://localhost/ur5-robotiq","track":"robots","category":"Simulation","topic":"robot arm manipulation","kind":"world.sim","vendor":"electronicelephant","model":"pybullet_ur5_robotiq","mode":"simulated","risk":"R0","family":"gymnasium","role":"sim-env","intro":"UR5 arm with Robotiq-85/140 gripper in a PyBullet push-and-grasp scene, adapted from electronicelephant/pybullet_ur5_robotiq. It reads `observation`, `tick`, `episode` and `info`; runs `step` and `reset_world`. `step`: advance the simulated world by a bounded number of fixed timesteps, optionally applying an action for each step, and return the resulting observation and terminal flags. A simulator: the market serves it with a stand-in that needs no simulator install.","measures":["observation","tick","episode","info"],"adjusts":[],"actions":[{"name":"step","description":"Advance the simulated world by a bounded number of fixed timesteps, optionally applying an action for each step, and return the resulting observation and terminal flags."},{"name":"reset_world","description":"Reset the simulated world to a scenario start state and return the initial observation. When a seed is supplied the endpoint records it in the receipt; otherwise the endpoint's declared default seed applies."}],"tags":["ur5","robotiq","gripper","pybullet","simulation","reinforcement-learning"],"backends":["fake"],"served_backend":"fake","evidence":"contract_checked","upstream":{"repo_url":"https://github.com/electronicelephant/pybullet_ur5_robotiq","commit":"37f7d66d3196490618bf89ffe2b49dcb7e07aec3","license":"BSD-2-Clause"},"stars":314,"install":{"openai4s":"openai4s lab add robots/electronicelephant__pybullet_ur5_robotiq","mhs":"mhs serve robots/electronicelephant__pybullet_ur5_robotiq --port 7400","mcp":"mhs serve robots/electronicelephant__pybullet_ur5_robotiq --mcp"}},
{"id":"robots/elijah-waichong-chan__go2-convex-mpc","name":"Unitree Go2 convex MPC scene (MuJoCo)","device_id":"mhs://localhost/go2-convex-mpc","track":"robots","category":"Simulation","topic":"legged robots","kind":"world.sim","vendor":"elijah-waichong-chan","model":"Unitree Go2 MJCF scene","mode":"simulated","risk":"R0","family":"mujoco","role":"twin-candidate","intro":"Unitree Go2 convex MPC scene (MuJoCo), adapted from elijah-waichong-chan/go2-convex-mpc. It reads `time_ms`, `qpos`, `qvel`, `ctrl` and 4 more; runs `step` and `reset`. `step`: advance the simulated world by a bounded number of fixed timesteps, optionally applying an action for each step, and return the resulting observation and terminal flags. A simulator: the market serves it with a stand-in that needs no simulator install.","measures":["time_ms","qpos","qvel","ctrl","tick","timestep_ms","seed","native_checkpoint"],"adjusts":[],"actions":[{"name":"step","description":"Advance the simulated world by a bounded number of fixed timesteps, optionally applying an action for each step, and return the resulting observation and terminal flags."},{"name":"reset","description":"Reset the simulated world to a scenario start state and return the initial observation. When a seed is supplied the endpoint records it in the receipt; otherwise the endpoint's declared default seed applies."}],"tags":["mujoco","unitree","go2","quadruped","locomotion","mpc","simulation","robot"],"backends":["fake"],"served_backend":"fake","evidence":"contract_checked","upstream":{"repo_url":"https://github.com/elijah-waichong-chan/go2-convex-mpc","commit":"1c63c6a762779887ab0431fd60db681dede6cb32","license":"MIT"},"stars":132,"install":{"openai4s":"openai4s lab add robots/elijah-waichong-chan__go2-convex-mpc","mhs":"mhs serve robots/elijah-waichong-chan__go2-convex-mpc --port 7400","mcp":"mhs serve robots/elijah-waichong-chan__go2-convex-mpc --mcp"}},
{"id":"robots/emb-ai__robobenchmart","name":"RoboBenchMart MoveFromBoardToBoardVanishContEnv (fake stand-in)","device_id":"mhs://localhost/robobenchmart","track":"robots","category":"Simulation","topic":"robot arm manipulation","kind":"world.sim","vendor":"emb-ai","model":"RoboBenchMart MoveFromBoardToBoardVanishContEnv","mode":"simulated","risk":"R0","family":"gymnasium","role":"sim-env","intro":"RoboBenchMart MoveFromBoardToBoardVanishContEnv (fake stand-in), adapted from emb-ai/robobenchmart. It reads `observation`, `reward`, `terminated`, `truncated` and 4 more; runs `step`, `reset` and `seed`. `step`: advance the simulated world by a bounded number of fixed timesteps, optionally applying an action for each step, and return the resulting observation and terminal flags. A simulator: the market serves it with a stand-in that needs no simulator install.","measures":["observation","reward","terminated","truncated","tick","episode","seed","info"],"adjusts":[],"actions":[{"name":"step","description":"Advance the simulated world by a bounded number of fixed timesteps, optionally applying an action for each step, and return the resulting observation and terminal flags."},{"name":"reset","description":"Reset the simulated world to a scenario start state and return the initial observation. When a seed is supplied the endpoint records it in the receipt; otherwise the endpoint's declared default seed applies."},{"name":"seed","description":"Set the seed used by the simulated world's random number generators for subsequent steps, without resetting the world. The accepted seed is echoed in the receipt."}],"tags":["robobenchmart","retail","manipulation","reinforcement-learning","simulation","gymnasium","mani-skill"],"backends":["fake"],"served_backend":"fake","evidence":"contract_checked","upstream":{"repo_url":"https://github.com/emb-ai/robobenchmart","commit":"33ca547ffeb4e4aac9af53bd685b17c05b971fc8","license":"MIT"},"stars":0,"install":{"openai4s":"openai4s lab add robots/emb-ai__robobenchmart","mhs":"mhs serve robots/emb-ai__robobenchmart --port 7400","mcp":"mhs serve robots/emb-ai__robobenchmart --mcp"}},
{"id":"robots/embomaster__polysim","name":"Unitree G1 29-DoF (PolySim MuJoCo scene)","device_id":"mhs://localhost/g1_mujoco","track":"robots","category":"Simulation","topic":"legged and humanoid robots","kind":"world.sim","vendor":"Embodied Master (PolySim)","model":"Unitree G1 29-DoF","mode":"simulated","risk":"R0","family":"mujoco","role":"sim-env","intro":"Unitree G1 29-DoF (PolySim MuJoCo scene), adapted from embomaster/polysim. It reads `time_ms`, `qpos`, `qvel`, `ctrl` and 4 more; runs `step` and `reset`. `step`: advance the simulated world by a bounded number of fixed timesteps, optionally applying an action for each step, and return the resulting observation and terminal flags. A simulator: the market serves it with a stand-in that needs no simulator install.","measures":["time_ms","qpos","qvel","ctrl","tick","timestep_ms","seed","native_checkpoint"],"adjusts":[],"actions":[{"name":"step","description":"Advance the simulated world by a bounded number of fixed timesteps, optionally applying an action for each step, and return the resulting observation and terminal flags."},{"name":"reset","description":"Reset the simulated world to a scenario start state and return the initial observation. When a seed is supplied the endpoint records it in the receipt; otherwise the endpoint's declared default seed applies."}],"tags":["unitree","g1","humanoid","29dof","mujoco","simulation","polysim"],"backends":["fake"],"served_backend":"fake","evidence":"contract_checked","upstream":{"repo_url":"https://github.com/embomaster/polysim","commit":"0fdb349785479b5c0c30d3c676fae67025b8d34a","license":"MIT"},"stars":51,"install":{"openai4s":"openai4s lab add robots/embomaster__polysim","mhs":"mhs serve robots/embomaster__polysim --port 7400","mcp":"mhs serve robots/embomaster__polysim --mcp"}},
{"id":"robots/enac-drones__dronesim","name":"dronesim CtrlAviary (PyBullet multi-drone simulation)","device_id":"mhs://localhost/ctrl-aviary","track":"robots","category":"Simulation","topic":"UAVs","kind":"world.sim","vendor":"enac-drones","model":"dronesim CtrlAviary","mode":"simulated","risk":"R0","family":"gymnasium","role":"sim-env","intro":"dronesim CtrlAviary (PyBullet multi-drone simulation), adapted from enac-drones/dronesim. It reads `observation`, `reward`, `terminated`, `truncated` and 4 more; runs `step`, `reset` and `seed`. `step`: advance the simulated world by a bounded number of fixed timesteps, optionally applying an action for each step, and return the resulting observation and terminal flags. A simulator: the market serves it with a stand-in that needs no simulator install.","measures":["observation","reward","terminated","truncated","tick","episode","seed","info"],"adjusts":[],"actions":[{"name":"step","description":"Advance the simulated world by a bounded number of fixed timesteps, optionally applying an action for each step, and return the resulting observation and terminal flags."},{"name":"reset","description":"Reset the simulated world to a scenario start state and return the initial observation. When a seed is supplied the endpoint records it in the receipt; otherwise the endpoint's declared default seed applies."},{"name":"seed","description":"Set the seed used by the simulated world's random number generators for subsequent steps, without resetting the world. The accepted seed is echoed in the receipt."}],"tags":["dronesim","pybullet","gym","quadrotor","multi-drone","simulation","world-sim"],"backends":["fake"],"served_backend":"fake","evidence":"contract_checked","upstream":{"repo_url":"https://github.com/enac-drones/dronesim","commit":"158e40f4631e64d731f16f81641f629fa7b2a986","license":"MIT"},"stars":12,"install":{"openai4s":"openai4s lab add robots/enac-drones__dronesim","mhs":"mhs serve robots/enac-drones__dronesim --port 7400","mcp":"mhs serve robots/enac-drones__dronesim --mcp"}},
{"id":"robots/enactic__openarm_isaac_lab","name":"OpenArm unimanual reach (Isaac Lab)","device_id":"mhs://localhost/openarm-isaac-lab-reach","track":"robots","category":"Simulation","topic":"robot arm manipulation","kind":"world.sim","vendor":"Enactic, Inc.","model":"OpenArm unimanual reach","mode":"simulated","risk":"R0","family":"gymnasium","role":"sim-env","intro":"OpenArm unimanual reach (Isaac Lab), adapted from enactic/openarm_isaac_lab. It reads `observation`, `reward`, `terminated`, `truncated` and 4 more; runs `step`, `reset` and `seed`. `step`: advance the simulated world by a bounded number of fixed timesteps, optionally applying an action for each step, and return the resulting observation and terminal flags. A simulator: the market serves it with a stand-in that needs no simulator install.","measures":["observation","reward","terminated","truncated","tick","episode","seed","info"],"adjusts":[],"actions":[{"name":"step","description":"Advance the simulated world by a bounded number of fixed timesteps, optionally applying an action for each step, and return the resulting observation and terminal flags."},{"name":"reset","description":"Reset the simulated world to a scenario start state and return the initial observation. When a seed is supplied the endpoint records it in the receipt; otherwise the endpoint's declared default seed applies."},{"name":"seed","description":"Set the seed used by the simulated world's random number generators for subsequent steps, without resetting the world. The accepted seed is echoed in the receipt."}],"tags":["openarm","isaac-lab","isaac-sim","reinforcement-learning","simulation","gymnasium","reach"],"backends":["fake"],"served_backend":"fake","evidence":"contract_checked","upstream":{"repo_url":"https://github.com/enactic/openarm_isaac_lab","commit":"cb7ff7547bdb81f290591edb9302b4845b1d49a7","license":"Apache-2.0"},"stars":118,"install":{"openai4s":"openai4s lab add robots/enactic__openarm_isaac_lab","mhs":"mhs serve robots/enactic__openarm_isaac_lab --port 7400","mcp":"mhs serve robots/enactic__openarm_isaac_lab --mcp"}},
{"id":"robots/enactic__openarm_maniskill_simulation","name":"OpenArm PickCube-v1 (ManiSkill/SAPIEN)","device_id":"mhs://localhost/openarm-pick-cube","track":"robots","category":"Simulation","topic":"robot arm manipulation","kind":"world.sim","vendor":"Enactic","model":"OpenArm PickCube-v1","mode":"simulated","risk":"R0","family":"gymnasium","role":"sim-env","intro":"OpenArm PickCube-v1 (ManiSkill/SAPIEN), adapted from enactic/openarm_maniskill_simulation. It reads `observation`, `reward`, `terminated`, `truncated` and 3 more; runs `reset`, `step` and `seed`. `reset`: reset the simulated world to a scenario start state and return the initial observation. When a seed is supplied the endpoint records it in the receipt; otherwise the endpoint's declared default seed applies. A simulator: the market serves it with a stand-in that needs no simulator install.","measures":["observation","reward","terminated","truncated","tick","episode","seed"],"adjusts":[],"actions":[{"name":"reset","description":"Reset the simulated world to a scenario start state and return the initial observation. When a seed is supplied the endpoint records it in the receipt; otherwise the endpoint's declared default seed applies."},{"name":"step","description":"Advance the simulated world by a bounded number of fixed timesteps, optionally applying an action for each step, and return the resulting observation and terminal flags."},{"name":"seed","description":"Set the seed used by the simulated world's random number generators for subsequent steps, without resetting the world. The accepted seed is echoed in the receipt."}],"tags":["openarm","mani-skill","sapien","pick-cube","tabletop","simulation","reinforcement-learning","robot-arm"],"backends":["fake"],"served_backend":"fake","evidence":"contract_checked","upstream":{"repo_url":"https://github.com/enactic/openarm_maniskill_simulation","commit":"3d3615aadabff11ce61ddc2e1608c1447cb3a59d","license":"NOASSERTION"},"stars":5,"install":{"openai4s":"openai4s lab add robots/enactic__openarm_maniskill_simulation","mhs":"mhs serve robots/enactic__openarm_maniskill_simulation --port 7400","mcp":"mhs serve robots/enactic__openarm_maniskill_simulation --mcp"}},
{"id":"robots/enactic__openarm_mujoco","name":"OpenArm v1 bimanual scene (MuJoCo)","device_id":"mhs://localhost/openarm-bimanual","track":"robots","category":"Simulation","topic":"robot arm manipulation","kind":"world.sim","vendor":"Enactic, Inc.","model":"OpenArm v1 bimanual MJCF","mode":"simulated","risk":"R0","family":"mujoco","role":"twin-candidate","intro":"OpenArm v1 bimanual scene (MuJoCo), adapted from enactic/openarm_mujoco. It reads `time_ms`, `qpos`, `qvel`, `ctrl` and 4 more; runs `step` and `reset`. `step`: advance the simulated world by a bounded number of fixed timesteps, optionally applying an action for each step, and return the resulting observation and terminal flags. A simulator: the market serves it with a stand-in that needs no simulator install.","measures":["time_ms","qpos","qvel","ctrl","tick","timestep_ms","seed","native_checkpoint"],"adjusts":[],"actions":[{"name":"step","description":"Advance the simulated world by a bounded number of fixed timesteps, optionally applying an action for each step, and return the resulting observation and terminal flags."},{"name":"reset","description":"Reset the simulated world to a scenario start state and return the initial observation. When a seed is supplied the endpoint records it in the receipt; otherwise the endpoint's declared default seed applies."}],"tags":["mujoco","openarm","bimanual","robot arm","manipulation","simulation"],"backends":["fake"],"served_backend":"fake","evidence":"contract_checked","upstream":{"repo_url":"https://github.com/enactic/openarm_mujoco","commit":"0e050bb5d3472b75c6bfa00b310a77c7c2c5be79","license":"Apache-2.0"},"stars":62,"install":{"openai4s":"openai4s lab add robots/enactic__openarm_mujoco","mhs":"mhs serve robots/enactic__openarm_mujoco --port 7400","mcp":"mhs serve robots/enactic__openarm_mujoco --mcp"}},
{"id":"robots/engineai-robotics__engineai_legged_gym","name":"EngineAI ZqSA01 humanoid (MuJoCo model)","device_id":"mhs://localhost/zqsa01","track":"robots","category":"Simulation","topic":"legged robots","kind":"world.sim","vendor":"EngineAI Robotics","model":"ZqSA01 humanoid","mode":"simulated","risk":"R0","family":"mujoco","role":"sim-env","intro":"EngineAI ZqSA01 humanoid (MuJoCo model), adapted from engineai-robotics/engineai_legged_gym. It reads `time_ms`, `qpos`, `qvel`, `ctrl` and 4 more; runs `step` and `reset`. `step`: advance the simulated world by a bounded number of fixed timesteps, optionally applying an action for each step, and return the resulting observation and terminal flags. A simulator: the market serves it with a stand-in that needs no simulator install.","measures":["time_ms","qpos","qvel","ctrl","tick","timestep_ms","seed","native_checkpoint"],"adjusts":[],"actions":[{"name":"step","description":"Advance the simulated world by a bounded number of fixed timesteps, optionally applying an action for each step, and return the resulting observation and terminal flags."},{"name":"reset","description":"Reset the simulated world to a scenario start state and return the initial observation. When a seed is supplied the endpoint records it in the receipt; otherwise the endpoint's declared default seed applies."}],"tags":["engineai","zqsa01","humanoid","legged","mujoco","simulation","robot"],"backends":["fake"],"served_backend":"fake","evidence":"contract_checked","upstream":{"repo_url":"https://github.com/engineai-robotics/engineai_legged_gym","commit":"1a659aa0aa77445766ecea6d95708a5812e9f290","license":"BSD-3-Clause"},"stars":522,"install":{"openai4s":"openai4s lab add robots/engineai-robotics__engineai_legged_gym","mhs":"mhs serve robots/engineai-robotics__engineai_legged_gym --port 7400","mcp":"mhs serve robots/engineai-robotics__engineai_legged_gym --mcp"}},
{"id":"robots/enph353__gym-gazebo-sim","name":"Gym-Gazebo-Sim CartpoleEnv-v0","device_id":"mhs://localhost/gym-gazebo-cartpole","track":"robots","category":"Simulation","topic":null,"kind":"world.sim","vendor":"ENPH353","model":"CartpoleEnv-v0","mode":"simulated","risk":"R0","family":"gymnasium","role":"sim-env","intro":"Gym-Gazebo-Sim CartpoleEnv-v0, adapted from enph353/gym-gazebo-sim. It reads `observation`, `reward`, `terminated`, `truncated` and 4 more; runs `step`, `reset` and `seed`. `step`: advance the simulated world by a bounded number of fixed timesteps, optionally applying an action for each step, and return the resulting observation and terminal flags. A simulator: the market serves it with a stand-in that needs no simulator install.","measures":["observation","reward","terminated","truncated","tick","episode","seed","info"],"adjusts":[],"actions":[{"name":"step","description":"Advance the simulated world by a bounded number of fixed timesteps, optionally applying an action for each step, and return the resulting observation and terminal flags."},{"name":"reset","description":"Reset the simulated world to a scenario start state and return the initial observation. When a seed is supplied the endpoint records it in the receipt; otherwise the endpoint's declared default seed applies."},{"name":"seed","description":"Set the seed used by the simulated world's random number generators for subsequent steps, without resetting the world. The accepted seed is echoed in the receipt."}],"tags":["gymnasium","gazebo","ros2","cartpole","reinforcement-learning","simulation"],"backends":["fake"],"served_backend":"fake","evidence":"contract_checked","upstream":{"repo_url":"https://github.com/enph353/gym-gazebo-sim","commit":"d8df39af7e7c405a6738fe752d51d2e90d5fb814","license":"MIT"},"stars":7,"install":{"openai4s":"openai4s lab add robots/enph353__gym-gazebo-sim","mhs":"mhs serve robots/enph353__gym-gazebo-sim --port 7400","mcp":"mhs serve robots/enph353__gym-gazebo-sim --mcp"}},
{"id":"robots/erdalpekel__panda_simulation","name":"Panda arm in Gazebo simulation","device_id":"mhs://localhost/panda_simulation","track":"robots","category":"Robot arms and grippers","topic":null,"kind":"robot.arm","vendor":"erdalpekel","model":"Franka Emika Panda","mode":"simulated","risk":"R2","family":"ros","role":"sim-env","intro":"Panda arm in Gazebo simulation, adapted from erdalpekel/panda_simulation. It reads `read_joint_states`; runs `command_joint_positions` and `stop_robot`. `command_joint_positions`: publish seven arm joint positions to the custom joint-position controller; the topic has no acknowledgement, so the output reports publication only. A simulator: the market serves it with a stand-in that needs no simulator install.","measures":["read_joint_states"],"adjusts":[],"actions":[{"name":"command_joint_positions","description":"Publish seven arm joint positions to the custom joint-position controller; the topic has no acknowledgement, so the output reports publication only"},{"name":"stop_robot","description":"Call /robot_control_stop: its callback calls move_group_arm->stop() for the panda_arm MoveIt group and returns true unconditionally; not a stop of the joint-position command and not a safe state"}],"tags":["ros","ros1","simulation","gazebo","panda","franka","joint-position","stop"],"backends":["fake"],"served_backend":"fake","evidence":"contract_checked","upstream":{"repo_url":"https://github.com/erdalpekel/panda_simulation","commit":"70b6a9d7a426a9cc4dd3e41b2a61f817f1531f4b","license":"MIT"},"stars":147,"install":{"openai4s":"openai4s lab add robots/erdalpekel__panda_simulation","mhs":"mhs serve robots/erdalpekel__panda_simulation --port 7400","mcp":"mhs serve robots/erdalpekel__panda_simulation --mcp"}},
{"id":"robots/erfanmhi__deep-reinforcement-learning-cs285-pytorch","name":"CS285 obstacles-cs285-v0 (2D navigation)","device_id":"mhs://localhost/obstacles","track":"robots","category":"Simulation","topic":null,"kind":"world.sim","vendor":"erfanmhi","model":"obstacles-cs285-v0","mode":"simulated","risk":"R0","family":"gymnasium","role":"sim-env","intro":"CS285 obstacles-cs285-v0 (2D navigation), adapted from erfanmhi/deep-reinforcement-learning-cs285-pytorch. It reads `observation`, `reward`, `terminated`, `truncated` and 4 more; runs `step`, `reset` and `seed`. `step`: advance the simulated world by a bounded number of fixed timesteps, optionally applying an action for each step, and return the resulting observation and terminal flags. A simulator: the market serves it with a stand-in that needs no simulator install.","measures":["observation","reward","terminated","truncated","tick","episode","seed","info"],"adjusts":[],"actions":[{"name":"step","description":"Advance the simulated world by a bounded number of fixed timesteps, optionally applying an action for each step, and return the resulting observation and terminal flags."},{"name":"reset","description":"Reset the simulated world to a scenario start state and return the initial observation. When a seed is supplied the endpoint records it in the receipt; otherwise the endpoint's declared default seed applies."},{"name":"seed","description":"Set the seed used by the simulated world's random number generators for subsequent steps, without resetting the world. The accepted seed is echoed in the receipt."}],"tags":["obstacles","navigation","reinforcement-learning","simulation","gymnasium"],"backends":["fake"],"served_backend":"fake","evidence":"contract_checked","upstream":{"repo_url":"https://github.com/erfanmhi/deep-reinforcement-learning-cs285-pytorch","commit":"6da04f367e52a451c202ae7e5477994c1d149baf","license":"MIT"},"stars":144,"install":{"openai4s":"openai4s lab add robots/erfanmhi__deep-reinforcement-learning-cs285-pytorch","mhs":"mhs serve robots/erfanmhi__deep-reinforcement-learning-cs285-pytorch --port 7400","mcp":"mhs serve robots/erfanmhi__deep-reinforcement-learning-cs285-pytorch --mcp"}},
{"id":"robots/eric-ai-lab__vlmbench","name":"VLMbench DropPenColor (Gymnasium state mode)","device_id":"mhs://localhost/vlmbench","track":"robots","category":"Simulation","topic":"robot arm manipulation","kind":"world.sim","vendor":"eric-ai-lab","model":"VLMbench drop_pen_color-state-v0","mode":"simulated","risk":"R0","family":"gymnasium","role":"sim-env","intro":"VLMbench DropPenColor (Gymnasium state mode), adapted from eric-ai-lab/vlmbench. It reads `observation`, `reward`, `terminated`, `truncated` and 4 more; runs `step`, `reset` and `seed`. `step`: advance the simulated world by a bounded number of fixed timesteps, optionally applying an action for each step, and return the resulting observation and terminal flags. A simulator: the market serves it with a stand-in that needs no simulator install.","measures":["observation","reward","terminated","truncated","tick","episode","seed","info"],"adjusts":[],"actions":[{"name":"step","description":"Advance the simulated world by a bounded number of fixed timesteps, optionally applying an action for each step, and return the resulting observation and terminal flags."},{"name":"reset","description":"Reset the simulated world to a scenario start state and return the initial observation. When a seed is supplied the endpoint records it in the receipt; otherwise the endpoint's declared default seed applies."},{"name":"seed","description":"Set the seed used by the simulated world's random number generators for subsequent steps, without resetting the world. The accepted seed is echoed in the receipt."}],"tags":["vlmbench","manipulation","benchmark","reinforcement-learning","simulation","gymnasium"],"backends":["fake"],"served_backend":"fake","evidence":"contract_checked","upstream":{"repo_url":"https://github.com/eric-ai-lab/vlmbench","commit":"479bd17b7d80645002af74f142a29dfe8b428876","license":"MIT"},"stars":0,"install":{"openai4s":"openai4s lab add robots/eric-ai-lab__vlmbench","mhs":"mhs serve robots/eric-ai-lab__vlmbench --port 7400","mcp":"mhs serve robots/eric-ai-lab__vlmbench --mcp"}},
{"id":"robots/erlerobot__gym-gazebo","name":"gym-gazebo GazeboCircuitTurtlebotLidar-v0","device_id":"mhs://localhost/gym-gazebo-circuit-turtlebot-lidar","track":"robots","category":"Simulation","topic":"mobile robots","kind":"world.sim","vendor":"Erle Robotics","model":"GazeboCircuitTurtlebotLidar-v0","mode":"simulated","risk":"R2","family":"gymnasium","role":"sim-env","intro":"gym-gazebo GazeboCircuitTurtlebotLidar-v0, adapted from erlerobot/gym-gazebo. It reads `observation`, `reward`, `terminated`, `truncated` and 4 more; runs `step`, `reset` and `seed`. `step`: advance the simulated world by a bounded number of fixed timesteps, optionally applying an action for each step, and return the resulting observation and terminal flags. A simulator: the market serves it with a stand-in that needs no simulator install.","measures":["observation","reward","terminated","truncated","tick","episode","seed","info"],"adjusts":[],"actions":[{"name":"step","description":"Advance the simulated world by a bounded number of fixed timesteps, optionally applying an action for each step, and return the resulting observation and terminal flags."},{"name":"reset","description":"Reset the simulated world to a scenario start state and return the initial observation. When a seed is supplied the endpoint records it in the receipt; otherwise the endpoint's declared default seed applies."},{"name":"seed","description":"Set the seed used by the simulated world's random number generators for subsequent steps, without resetting the world. The accepted seed is echoed in the receipt."}],"tags":["gym","gazebo","ros","ros1","turtlebot","lidar","simulation","reinforcement-learning"],"backends":["fake"],"served_backend":"fake","evidence":"contract_checked","upstream":{"repo_url":"https://github.com/erlerobot/gym-gazebo","commit":"ade82b627839f816c1f4be6cea77b56eb21abc81","license":"GPL-3.0"},"stars":0,"install":{"openai4s":"openai4s lab add robots/erlerobot__gym-gazebo","mhs":"mhs serve robots/erlerobot__gym-gazebo --port 7400","mcp":"mhs serve robots/erlerobot__gym-gazebo --mcp"}},
{"id":"robots/ernestum__quadrotorenvironment","name":"QuadrotorEnvironment quadrotor simulator","device_id":"mhs://localhost/quadrotor","track":"robots","category":"Simulation","topic":"UAVs","kind":"world.sim","vendor":"Maximilian Ernestus","model":"QuadrotorEnvironment","mode":"simulated","risk":"R0","family":"gymnasium","role":"sim-env","intro":"QuadrotorEnvironment quadrotor simulator, adapted from ernestum/quadrotorenvironment. It reads `observation`, `reward`, `terminated`, `truncated` and 4 more; runs `step`, `reset` and `seed`. `step`: advance the simulated world by a bounded number of fixed timesteps, optionally applying an action for each step, and return the resulting observation and terminal flags. A simulator: the market serves it with a stand-in that needs no simulator install.","measures":["observation","reward","terminated","truncated","tick","episode","seed","info"],"adjusts":[],"actions":[{"name":"step","description":"Advance the simulated world by a bounded number of fixed timesteps, optionally applying an action for each step, and return the resulting observation and terminal flags."},{"name":"reset","description":"Reset the simulated world to a scenario start state and return the initial observation. When a seed is supplied the endpoint records it in the receipt; otherwise the endpoint's declared default seed applies."},{"name":"seed","description":"Set the seed used by the simulated world's random number generators for subsequent steps, without resetting the world. The accepted seed is echoed in the receipt."}],"tags":["quadrotor","drone","reinforcement-learning","simulation","gym"],"backends":["fake"],"served_backend":"fake","evidence":"contract_checked","upstream":{"repo_url":"https://github.com/ernestum/quadrotorenvironment","commit":"597f8e3294c6a5d3ffc6907749f94a97dee700f3","license":"GPL-3.0"},"stars":7,"install":{"openai4s":"openai4s lab add robots/ernestum__quadrotorenvironment","mhs":"mhs serve robots/ernestum__quadrotorenvironment --port 7400","mcp":"mhs serve robots/ernestum__quadrotorenvironment --mcp"}},
{"id":"robots/erwincoumans__tiny-differentiable-simulator","name":"Tiny Differentiable Simulator CartPole (CartpolePyTinyDiffSim-v0)","device_id":"mhs://localhost/cartpole-tds","track":"robots","category":"Simulation","topic":"physics engines","kind":"world.sim","vendor":"Erwin Coumans","model":"Tiny Differentiable Simulator","mode":"simulated","risk":"R0","family":"gymnasium","role":"sim-env","intro":"Tiny Differentiable Simulator CartPole (CartpolePyTinyDiffSim-v0), adapted from erwincoumans/tiny-differentiable-simulator. It reads `observation`, `reward`, `terminated`, `truncated` and 4 more; runs `step`, `reset` and `seed`. `step`: advance the simulated world by a bounded number of fixed timesteps, optionally applying an action for each step, and return the resulting observation and terminal flags. A simulator: the market serves it with a stand-in that needs no simulator install.","measures":["observation","reward","terminated","truncated","tick","episode","seed","info"],"adjusts":[],"actions":[{"name":"step","description":"Advance the simulated world by a bounded number of fixed timesteps, optionally applying an action for each step, and return the resulting observation and terminal flags."},{"name":"reset","description":"Reset the simulated world to a scenario start state and return the initial observation. When a seed is supplied the endpoint records it in the receipt; otherwise the endpoint's declared default seed applies."},{"name":"seed","description":"Set the seed used by the simulated world's random number generators for subsequent steps, without resetting the world. The accepted seed is echoed in the receipt."}],"tags":["cartpole","tds","differentiable-simulation","reinforcement-learning","simulation","gym"],"backends":["fake"],"served_backend":"fake","evidence":"contract_checked","upstream":{"repo_url":"https://github.com/erwincoumans/tiny-differentiable-simulator","commit":"8381b8c9ad7f0a959548e4982eb8a63431a842d2","license":"Apache-2.0"},"stars":1375,"install":{"openai4s":"openai4s lab add robots/erwincoumans__tiny-differentiable-simulator","mhs":"mhs serve robots/erwincoumans__tiny-differentiable-simulator --port 7400","mcp":"mhs serve robots/erwincoumans__tiny-differentiable-simulator --mcp"}},
{"id":"robots/etaoxing__kitchen-shift","name":"KitchenShift kitchen-v0 (MuJoCo Franka kitchen)","device_id":"mhs://localhost/kitchen-v0","track":"robots","category":"Simulation","topic":"robot arm manipulation","kind":"world.sim","vendor":"Eliot Xing et al.","model":"Kitchen_v0","mode":"simulated","risk":"R0","family":"gymnasium","role":"sim-env","intro":"KitchenShift kitchen-v0 (MuJoCo Franka kitchen), adapted from etaoxing/kitchen-shift. It reads `observation`, `reward`, `terminated`, `truncated` and 4 more; runs `step`, `reset` and `seed`. `step`: advance the simulated world by a bounded number of fixed timesteps, optionally applying an action for each step, and return the resulting observation and terminal flags. A simulator: the market serves it with a stand-in that needs no simulator install.","measures":["observation","reward","terminated","truncated","tick","episode","seed","info"],"adjusts":[],"actions":[{"name":"step","description":"Advance the simulated world by a bounded number of fixed timesteps, optionally applying an action for each step, and return the resulting observation and terminal flags."},{"name":"reset","description":"Reset the simulated world to a scenario start state and return the initial observation. When a seed is supplied the endpoint records it in the receipt; otherwise the endpoint's declared default seed applies."},{"name":"seed","description":"Set the seed used by the simulated world's random number generators for subsequent steps, without resetting the world. The accepted seed is echoed in the receipt."}],"tags":["kitchen","manipulation","mujoco","franka","reinforcement-learning","simulation","gym"],"backends":["fake"],"served_backend":"fake","evidence":"contract_checked","upstream":{"repo_url":"https://github.com/etaoxing/kitchen-shift","commit":"6d0928000d4843df43791d3efd9e58af72c3acac","license":"Apache-2.0"},"stars":0,"install":{"openai4s":"openai4s lab add robots/etaoxing__kitchen-shift","mhs":"mhs serve robots/etaoxing__kitchen-shift --port 7400","mcp":"mhs serve robots/etaoxing__kitchen-shift --mcp"}},
{"id":"robots/ethz-asl__rotors_simulator","name":"RotorS Gazebo MAV simulator","device_id":"mhs://localhost/rotors_simulator","track":"robots","category":"Simulation","topic":"UAVs","kind":"world.sim","vendor":"ethz-asl","model":"RotorS Gazebo MAV models","mode":"simulated","risk":"R0","family":"ros","role":"sim-env","intro":"RotorS Gazebo MAV simulator, adapted from ethz-asl/rotors_simulator. It reads `read_odometry` and `read_imu`. A simulator: the market serves it with a stand-in that needs no simulator install.","measures":["read_odometry","read_imu"],"adjusts":[],"actions":[],"tags":["ros","ros1","simulation","gazebo","rotors","mav","odometry","imu"],"backends":["fake"],"served_backend":"fake","evidence":"contract_checked","upstream":{"repo_url":"https://github.com/ethz-asl/rotors_simulator","commit":"cd813b7a8c375d677352aa20ad20047feb661126","license":"NOASSERTION"},"stars":1507,"install":{"openai4s":"openai4s lab add robots/ethz-asl__rotors_simulator","mhs":"mhs serve robots/ethz-asl__rotors_simulator --port 7400","mcp":"mhs serve robots/ethz-asl__rotors_simulator --mcp"}},
{"id":"robots/evronix__quadruped_sim2sim","name":"evronix quadruped ROS 2 Gazebo sim2sim","device_id":"mhs://localhost/evronix-quadruped-sim","track":"robots","category":"Simulation","topic":null,"kind":"world.sim","vendor":"evronix","model":"Go1 sim2sim","mode":"simulated","risk":"R2","family":"ros","role":"sim-env","intro":"evronix quadruped ROS 2 Gazebo sim2sim, adapted from evronix/quadruped_sim2sim. It reads `read_joint_states` and `read_imu`; runs `publish_velocity_command`. `publish_velocity_command`: publish one PoseStamped velocity setpoint on /robot_velocity_command; the receipt confirms only that rosbridge accepted the publication, not motion, arrival or stopping. A simulator: the market serves it with a stand-in that needs no simulator install.","measures":["read_joint_states","read_imu"],"adjusts":[],"actions":[{"name":"publish_velocity_command","description":"Publish one PoseStamped velocity setpoint on /robot_velocity_command; the receipt confirms only that rosbridge accepted the publication, not motion, arrival or stopping"}],"tags":["ros","ros2","gazebo","quadruped","simulation","policy","velocity","joint-state","imu"],"backends":["fake"],"served_backend":"fake","evidence":"contract_checked","upstream":{"repo_url":"https://github.com/evronix/quadruped_sim2sim","commit":"99040173a6ec16efb56e236d57fd088fdd61484a","license":"MIT"},"stars":60,"install":{"openai4s":"openai4s lab add robots/evronix__quadruped_sim2sim","mhs":"mhs serve robots/evronix__quadruped_sim2sim --port 7400","mcp":"mhs serve robots/evronix__quadruped_sim2sim --mcp"}},
{"id":"robots/facebookresearch__habitat-lab","name":"Habitat-Lab point-navigation Gym environment","device_id":"mhs://localhost/habitat","track":"robots","category":"Simulation","topic":"mobile navigation","kind":"world.sim","vendor":"Meta AI (facebookresearch)","model":"Habitat-v0 (pointnav_habitat_test.yaml)","mode":"simulated","risk":"R0","family":"gymnasium","role":"sim-env","intro":"Habitat-Lab point-navigation Gym environment, adapted from facebookresearch/habitat-lab. It reads `observation`, `reward`, `terminated`, `truncated` and 4 more; runs `step`, `reset` and `seed`. `step`: advance the simulated world by a bounded number of fixed timesteps, optionally applying an action for each step, and return the resulting observation and terminal flags. A simulator: the market serves it with a stand-in that needs no simulator install.","measures":["observation","reward","terminated","truncated","tick","episode","seed","info"],"adjusts":[],"actions":[{"name":"step","description":"Advance the simulated world by a bounded number of fixed timesteps, optionally applying an action for each step, and return the resulting observation and terminal flags."},{"name":"reset","description":"Reset the simulated world to a scenario start state and return the initial observation. When a seed is supplied the endpoint records it in the receipt; otherwise the endpoint's declared default seed applies."},{"name":"seed","description":"Set the seed used by the simulated world's random number generators for subsequent steps, without resetting the world. The accepted seed is echoed in the receipt."}],"tags":["habitat","embodied-ai","pointnav","reinforcement-learning","simulation","gymnasium"],"backends":["fake"],"served_backend":"fake","evidence":"contract_checked","upstream":{"repo_url":"https://github.com/facebookresearch/habitat-lab","commit":"0fb6f43ffe806a8088a171b036336c093bcf604e","license":"MIT"},"stars":3152,"install":{"openai4s":"openai4s lab add robots/facebookresearch__habitat-lab","mhs":"mhs serve robots/facebookresearch__habitat-lab --port 7400","mcp":"mhs serve robots/facebookresearch__habitat-lab --mcp"}},
{"id":"robots/facebookresearch__house3d","name":"House3D RoomNav (discrete actions)","device_id":"mhs://localhost/house3d-roomnav","track":"robots","category":"Simulation","topic":"mobile robots","kind":"world.sim","vendor":"Facebook Research","model":"House3D RoomNav","mode":"simulated","risk":"R0","family":"gymnasium","role":"sim-env","intro":"House3D RoomNav (discrete actions), adapted from facebookresearch/house3d. It reads `observation`, `reward`, `terminated`, `truncated` and 4 more; runs `step`, `reset` and `seed`. `step`: advance the simulated world by a bounded number of fixed timesteps, optionally applying an action for each step, and return the resulting observation and terminal flags. A simulator: the market serves it with a stand-in that needs no simulator install.","measures":["observation","reward","terminated","truncated","tick","episode","seed","info"],"adjusts":[],"actions":[{"name":"step","description":"Advance the simulated world by a bounded number of fixed timesteps, optionally applying an action for each step, and return the resulting observation and terminal flags."},{"name":"reset","description":"Reset the simulated world to a scenario start state and return the initial observation. When a seed is supplied the endpoint records it in the receipt; otherwise the endpoint's declared default seed applies."},{"name":"seed","description":"Set the seed used by the simulated world's random number generators for subsequent steps, without resetting the world. The accepted seed is echoed in the receipt."}],"tags":["house3d","roomnav","navigation","3d-scenes","suncg","reinforcement-learning","simulation"],"backends":["fake"],"served_backend":"fake","evidence":"contract_checked","upstream":{"repo_url":"https://github.com/facebookresearch/house3d","commit":"e616837a99c2a209212d5556bdbb3dda75298ca9","license":"Apache-2.0"},"stars":0,"install":{"openai4s":"openai4s lab add robots/facebookresearch__house3d","mhs":"mhs serve robots/facebookresearch__house3d --port 7400","mcp":"mhs serve robots/facebookresearch__house3d --mcp"}},
{"id":"robots/farama-foundation__gymnasium","name":"Gymnasium CartPole-v1 (classic control)","device_id":"mhs://localhost/cartpole","track":"robots","category":"Simulation","topic":"shared access and protocol infrastructure","kind":"world.sim","vendor":"Farama Foundation","model":"CartPole-v1","mode":"simulated","risk":"R0","family":"gymnasium","role":"sim-env","intro":"Gymnasium CartPole-v1 (classic control), adapted from farama-foundation/gymnasium. It reads `observation`, `reward`, `terminated`, `truncated` and 4 more; runs `step`, `reset` and `seed`. `step`: advance the simulated world by a bounded number of fixed timesteps, optionally applying an action for each step, and return the resulting observation and terminal flags. A simulator: the market serves it with a stand-in that needs no simulator install.","measures":["observation","reward","terminated","truncated","tick","episode","seed","info"],"adjusts":[],"actions":[{"name":"step","description":"Advance the simulated world by a bounded number of fixed timesteps, optionally applying an action for each step, and return the resulting observation and terminal flags."},{"name":"reset","description":"Reset the simulated world to a scenario start state and return the initial observation. When a seed is supplied the endpoint records it in the receipt; otherwise the endpoint's declared default seed applies."},{"name":"seed","description":"Set the seed used by the simulated world's random number generators for subsequent steps, without resetting the world. The accepted seed is echoed in the receipt."}],"tags":["cartpole","classic-control","reinforcement-learning","simulation","gymnasium"],"backends":["fake"],"served_backend":"fake","evidence":"contract_checked","upstream":{"repo_url":"https://github.com/farama-foundation/gymnasium","commit":"d77197c284406e6094c9d1a74d4988a8749ce849","license":"MIT"},"stars":12639,"install":{"openai4s":"openai4s lab add robots/farama-foundation__gymnasium","mhs":"mhs serve robots/farama-foundation__gymnasium --port 7400","mcp":"mhs serve robots/farama-foundation__gymnasium --mcp"}},
{"id":"robots/farama-foundation__gymnasium-robotics","name":"Gymnasium-Robotics FetchSlide-v4 (Fetch mobile manipulator)","device_id":"mhs://localhost/fetch-slide","track":"robots","category":"Simulation","topic":"robot manipulation","kind":"world.sim","vendor":"Farama Foundation","model":"FetchSlide-v4","mode":"simulated","risk":"R0","family":"gymnasium","role":"sim-env","intro":"Gymnasium-Robotics FetchSlide-v4 (Fetch mobile manipulator), adapted from farama-foundation/gymnasium-robotics. It reads `observation`, `reward`, `terminated`, `truncated` and 4 more; runs `step`, `reset` and `seed`. `step`: advance the simulated world by a bounded number of fixed timesteps, optionally applying an action for each step, and return the resulting observation and terminal flags. A simulator: the market serves it with a stand-in that needs no simulator install.","measures":["observation","reward","terminated","truncated","tick","episode","seed","info"],"adjusts":[],"actions":[{"name":"step","description":"Advance the simulated world by a bounded number of fixed timesteps, optionally applying an action for each step, and return the resulting observation and terminal flags."},{"name":"reset","description":"Reset the simulated world to a scenario start state and return the initial observation. When a seed is supplied the endpoint records it in the receipt; otherwise the endpoint's declared default seed applies."},{"name":"seed","description":"Set the seed used by the simulated world's random number generators for subsequent steps, without resetting the world. The accepted seed is echoed in the receipt."}],"tags":["fetch","fetch-slide","mujoco","robotics","reinforcement-learning","simulation","gymnasium"],"backends":["fake"],"served_backend":"fake","evidence":"contract_checked","upstream":{"repo_url":"https://github.com/farama-foundation/gymnasium-robotics","commit":"b8da02a89191daf8f004e7f7510ff655f7a90100","license":"MIT"},"stars":1958,"install":{"openai4s":"openai4s lab add robots/farama-foundation__gymnasium-robotics","mhs":"mhs serve robots/farama-foundation__gymnasium-robotics --port 7400","mcp":"mhs serve robots/farama-foundation__gymnasium-robotics --mcp"}},
{"id":"robots/farama-foundation__highwayenv","name":"HighwayEnv highway-v0 (farama-foundation/highwayenv)","device_id":"mhs://localhost/highway","track":"robots","category":"Simulation","topic":"mobile robots","kind":"world.sim","vendor":"Farama Foundation","model":"highway-v0","mode":"simulated","risk":"R0","family":"gymnasium","role":"sim-env","intro":"HighwayEnv highway-v0 (farama-foundation/highwayenv), adapted from farama-foundation/highwayenv. It reads `observation`, `reward`, `terminated`, `truncated` and 4 more; runs `step`, `reset` and `seed`. `step`: advance the simulated world by a bounded number of fixed timesteps, optionally applying an action for each step, and return the resulting observation and terminal flags. A simulator: the market serves it with a stand-in that needs no simulator install.","measures":["observation","reward","terminated","truncated","tick","episode","seed","info"],"adjusts":[],"actions":[{"name":"step","description":"Advance the simulated world by a bounded number of fixed timesteps, optionally applying an action for each step, and return the resulting observation and terminal flags."},{"name":"reset","description":"Reset the simulated world to a scenario start state and return the initial observation. When a seed is supplied the endpoint records it in the receipt; otherwise the endpoint's declared default seed applies."},{"name":"seed","description":"Set the seed used by the simulated world's random number generators for subsequent steps, without resetting the world. The accepted seed is echoed in the receipt."}],"tags":["highway","autonomous-driving","traffic-simulation","reinforcement-learning","simulation","gymnasium"],"backends":["fake"],"served_backend":"fake","evidence":"contract_checked","upstream":{"repo_url":"https://github.com/farama-foundation/highwayenv","commit":"2a268f348f10f4d1ac83f96bc8a53d2fa50dd3b0","license":"MIT"},"stars":3323,"install":{"openai4s":"openai4s lab add robots/farama-foundation__highwayenv","mhs":"mhs serve robots/farama-foundation__highwayenv --port 7400","mcp":"mhs serve robots/farama-foundation__highwayenv --mcp"}},
{"id":"robots/farama-foundation__metaworld","name":"Meta-World assembly-v3 (Sawyer nut assembly, simulated)","device_id":"mhs://localhost/metaworld-assembly-v3","track":"robots","category":"Simulation","topic":"robot manipulation","kind":"world.sim","vendor":"Farama Foundation","model":"Meta-World assembly-v3","mode":"simulated","risk":"R0","family":"gymnasium","role":"sim-env","intro":"Meta-World assembly-v3 (Sawyer nut assembly, simulated), adapted from farama-foundation/metaworld. It reads `observation`, `reward`, `terminated`, `truncated` and 4 more; runs `step`, `reset` and `seed`. `step`: advance the simulated world by a bounded number of fixed timesteps, optionally applying an action for each step, and return the resulting observation and terminal flags. A simulator: the market serves it with a stand-in that needs no simulator install.","measures":["observation","reward","terminated","truncated","tick","episode","seed","info"],"adjusts":[],"actions":[{"name":"step","description":"Advance the simulated world by a bounded number of fixed timesteps, optionally applying an action for each step, and return the resulting observation and terminal flags."},{"name":"reset","description":"Reset the simulated world to a scenario start state and return the initial observation. When a seed is supplied the endpoint records it in the receipt; otherwise the endpoint's declared default seed applies."},{"name":"seed","description":"Set the seed used by the simulated world's random number generators for subsequent steps, without resetting the world. The accepted seed is echoed in the receipt."}],"tags":["metaworld","assembly-v3","sawyer","robotics","reinforcement-learning","simulation","gymnasium"],"backends":["fake"],"served_backend":"fake","evidence":"contract_checked","upstream":{"repo_url":"https://github.com/farama-foundation/metaworld","commit":"c0dafaf1557f31cad3b96ba2b62462f45638f5a5","license":"MIT"},"stars":1890,"install":{"openai4s":"openai4s lab add robots/farama-foundation__metaworld","mhs":"mhs serve robots/farama-foundation__metaworld --port 7400","mcp":"mhs serve robots/farama-foundation__metaworld --mcp"}},
{"id":"robots/farama-foundation__minigrid","name":"MiniGrid BlockedUnlockPickup (MiniGrid-BlockedUnlockPickup-v0)","device_id":"mhs://localhost/minigrid-blocked-unlock-pickup","track":"robots","category":"Simulation","topic":null,"kind":"world.sim","vendor":"Farama Foundation","model":"MiniGrid-BlockedUnlockPickup-v0","mode":"simulated","risk":"R0","family":"gymnasium","role":"sim-env","intro":"MiniGrid BlockedUnlockPickup (MiniGrid-BlockedUnlockPickup-v0), adapted from farama-foundation/minigrid. It reads `observation`, `reward`, `terminated`, `truncated` and 4 more; runs `step`, `reset` and `seed`. `step`: advance the simulated world by a bounded number of fixed timesteps, optionally applying an action for each step, and return the resulting observation and terminal flags. A simulator: the market serves it with a stand-in that needs no simulator install.","measures":["observation","reward","terminated","truncated","tick","episode","seed","info"],"adjusts":[],"actions":[{"name":"step","description":"Advance the simulated world by a bounded number of fixed timesteps, optionally applying an action for each step, and return the resulting observation and terminal flags."},{"name":"reset","description":"Reset the simulated world to a scenario start state and return the initial observation. When a seed is supplied the endpoint records it in the receipt; otherwise the endpoint's declared default seed applies."},{"name":"seed","description":"Set the seed used by the simulated world's random number generators for subsequent steps, without resetting the world. The accepted seed is echoed in the receipt."}],"tags":["minigrid","gridworld","reinforcement-learning","simulation","gymnasium"],"backends":["fake"],"served_backend":"fake","evidence":"contract_checked","upstream":{"repo_url":"https://github.com/farama-foundation/minigrid","commit":"b34a5755dbef71e3f1662552259a94b255c1a8bb","license":"Apache-2.0"},"stars":2519,"install":{"openai4s":"openai4s lab add robots/farama-foundation__minigrid","mhs":"mhs serve robots/farama-foundation__minigrid --port 7400","mcp":"mhs serve robots/farama-foundation__minigrid --mcp"}},
{"id":"robots/farama-foundation__mo-gymnasium","name":"MO-Gymnasium FishWood (fishwood-v0)","device_id":"mhs://localhost/fishwood","track":"robots","category":"Simulation","topic":null,"kind":"world.sim","vendor":"Farama Foundation","model":"fishwood-v0","mode":"simulated","risk":"R0","family":"gymnasium","role":"sim-env","intro":"MO-Gymnasium FishWood (fishwood-v0), adapted from farama-foundation/mo-gymnasium. It reads `observation`, `reward`, `terminated`, `truncated` and 4 more; runs `step`, `reset` and `seed`. `step`: advance the simulated world by a bounded number of fixed timesteps, optionally applying an action for each step, and return the resulting observation and terminal flags. A simulator: the market serves it with a stand-in that needs no simulator install.","measures":["observation","reward","terminated","truncated","tick","episode","seed","info"],"adjusts":[],"actions":[{"name":"step","description":"Advance the simulated world by a bounded number of fixed timesteps, optionally applying an action for each step, and return the resulting observation and terminal flags."},{"name":"reset","description":"Reset the simulated world to a scenario start state and return the initial observation. When a seed is supplied the endpoint records it in the receipt; otherwise the endpoint's declared default seed applies."},{"name":"seed","description":"Set the seed used by the simulated world's random number generators for subsequent steps, without resetting the world. The accepted seed is echoed in the receipt."}],"tags":["fishwood","multi-objective","two-state","reinforcement-learning","simulation","gymnasium"],"backends":["fake"],"served_backend":"fake","evidence":"contract_checked","upstream":{"repo_url":"https://github.com/farama-foundation/mo-gymnasium","commit":"8d280fdc3f517b18090619806843c03f51d775af","license":"MIT"},"stars":1238,"install":{"openai4s":"openai4s lab add robots/farama-foundation__mo-gymnasium","mhs":"mhs serve robots/farama-foundation__mo-gymnasium --port 7400","mcp":"mhs serve robots/farama-foundation__mo-gymnasium --mcp"}},
{"id":"robots/farama-foundation__stable-retro","name":"Stable Retro (Gymnasium console emulation)","device_id":"mhs://localhost/stable-retro","track":"robots","category":"Simulation","topic":null,"kind":"world.sim","vendor":"Farama Foundation","model":"RetroEnv","mode":"simulated","risk":"R0","family":"gymnasium","role":"sim-env","intro":"Stable Retro (Gymnasium console emulation), adapted from farama-foundation/stable-retro. It reads `observation`, `reward`, `terminated`, `truncated` and 4 more; runs `step`, `reset` and `seed`. `step`: advance the simulated world by a bounded number of fixed timesteps, optionally applying an action for each step, and return the resulting observation and terminal flags. A simulator: the market serves it with a stand-in that needs no simulator install.","measures":["observation","reward","terminated","truncated","tick","episode","seed","info"],"adjusts":[],"actions":[{"name":"step","description":"Advance the simulated world by a bounded number of fixed timesteps, optionally applying an action for each step, and return the resulting observation and terminal flags."},{"name":"reset","description":"Reset the simulated world to a scenario start state and return the initial observation. When a seed is supplied the endpoint records it in the receipt; otherwise the endpoint's declared default seed applies."},{"name":"seed","description":"Set the seed used by the simulated world's random number generators for subsequent steps, without resetting the world. The accepted seed is echoed in the receipt."}],"tags":["retro","emulator","reinforcement-learning","simulation","gymnasium"],"backends":["fake"],"served_backend":"fake","evidence":"contract_checked","upstream":{"repo_url":"https://github.com/farama-foundation/stable-retro","commit":"e2fdb2a6d39f942d21d5b7f4b3b9929808739eab","license":"MIT"},"stars":1086,"install":{"openai4s":"openai4s lab add robots/farama-foundation__stable-retro","mhs":"mhs serve robots/farama-foundation__stable-retro --port 7400","mcp":"mhs serve robots/farama-foundation__stable-retro --mcp"}},
{"id":"robots/farama-foundation__vizdoom","name":"ViZDoom Basic (Gymnasium)","device_id":"mhs://localhost/vizdoom-basic","track":"robots","category":"Simulation","topic":null,"kind":"world.sim","vendor":"Farama Foundation","model":"ViZDoom Basic","mode":"simulated","risk":"R0","family":"gymnasium","role":"sim-env","intro":"ViZDoom Basic (Gymnasium), adapted from farama-foundation/vizdoom. It reads `observation`, `reward`, `terminated`, `truncated` and 4 more; runs `step`, `reset` and `seed`. `step`: advance the simulated world by a bounded number of fixed timesteps, optionally applying an action for each step, and return the resulting observation and terminal flags. A simulator: the market serves it with a stand-in that needs no simulator install.","measures":["observation","reward","terminated","truncated","tick","episode","seed","info"],"adjusts":[],"actions":[{"name":"step","description":"Advance the simulated world by a bounded number of fixed timesteps, optionally applying an action for each step, and return the resulting observation and terminal flags."},{"name":"reset","description":"Reset the simulated world to a scenario start state and return the initial observation. When a seed is supplied the endpoint records it in the receipt; otherwise the endpoint's declared default seed applies."},{"name":"seed","description":"Set the seed used by the simulated world's random number generators for subsequent steps, without resetting the world. The accepted seed is echoed in the receipt."}],"tags":["vizdoom","doom","gymnasium","reinforcement-learning","visual-rl","simulation"],"backends":["fake"],"served_backend":"fake","evidence":"contract_checked","upstream":{"repo_url":"https://github.com/farama-foundation/vizdoom","commit":"26a9958970a3b1069325cf9e00c4119a69664128","license":"MIT"},"stars":2097,"install":{"openai4s":"openai4s lab add robots/farama-foundation__vizdoom","mhs":"mhs serve robots/farama-foundation__vizdoom --port 7400","mcp":"mhs serve robots/farama-foundation__vizdoom --mcp"}},
{"id":"robots/fazildgr8__ros_autonomous_slam","name":"ros_autonomous_slam TurtleBot3 exploration stack","device_id":"mhs://localhost/ros_autonomous_slam","track":"robots","category":"Simulation","topic":"mobile robots","kind":"world.sim","vendor":"fazildgr8","model":"TurtleBot3 Waffle Pi in Gazebo with GMAPPING and RRT exploration","mode":"simulated","risk":"R0","family":"ros","role":"sim-env","intro":"ros_autonomous_slam TurtleBot3 exploration stack, adapted from fazildgr8/ros_autonomous_slam. It reads `read_occupancy_map`, `read_frontiers`, `read_exploration_region`, `read_odometry` and 1 more. A simulator: the market serves it with a stand-in that needs no simulator install.","measures":["read_occupancy_map","read_frontiers","read_exploration_region","read_odometry","read_scan"],"adjusts":[],"actions":[],"tags":["ros","ros1","simulation","gazebo","turtlebot3","slam","exploration","rrt"],"backends":["fake"],"served_backend":"fake","evidence":"contract_checked","upstream":{"repo_url":"https://github.com/fazildgr8/ros_autonomous_slam","commit":"997c968cb64f544b913e72debcceaad0ed2faea9","license":"MIT"},"stars":272,"install":{"openai4s":"openai4s lab add robots/fazildgr8__ros_autonomous_slam","mhs":"mhs serve robots/fazildgr8__ros_autonomous_slam --port 7400","mcp":"mhs serve robots/fazildgr8__ros_autonomous_slam --mcp"}},
{"id":"robots/fdcl-gwu__gym-rotor","name":"FDCL-GWU gym-rotor Quad-v0 (quadrotor low-level control)","device_id":"mhs://localhost/quad","track":"robots","category":"Simulation","topic":"UAVs","kind":"world.sim","vendor":"FDCL-GWU","model":"Quad-v0","mode":"simulated","risk":"R0","family":"gymnasium","role":"sim-env","intro":"FDCL-GWU gym-rotor Quad-v0 (quadrotor low-level control), adapted from fdcl-gwu/gym-rotor. It reads `observation`, `reward`, `terminated`, `truncated` and 4 more; runs `step`, `reset` and `seed`. `step`: advance the simulated world by a bounded number of fixed timesteps, optionally applying an action for each step, and return the resulting observation and terminal flags. A simulator: the market serves it with a stand-in that needs no simulator install.","measures":["observation","reward","terminated","truncated","tick","episode","seed","info"],"adjusts":[],"actions":[{"name":"step","description":"Advance the simulated world by a bounded number of fixed timesteps, optionally applying an action for each step, and return the resulting observation and terminal flags."},{"name":"reset","description":"Reset the simulated world to a scenario start state and return the initial observation. When a seed is supplied the endpoint records it in the receipt; otherwise the endpoint's declared default seed applies."},{"name":"seed","description":"Set the seed used by the simulated world's random number generators for subsequent steps, without resetting the world. The accepted seed is echoed in the receipt."}],"tags":["quadrotor","uav","reinforcement-learning","simulation","gymnasium","rotor"],"backends":["fake"],"served_backend":"fake","evidence":"contract_checked","upstream":{"repo_url":"https://github.com/fdcl-gwu/gym-rotor","commit":"86a25517f401a5ca3a4f393e4f0c04104a04d3a1","license":"MIT"},"stars":32,"install":{"openai4s":"openai4s lab add robots/fdcl-gwu__gym-rotor","mhs":"mhs serve robots/fdcl-gwu__gym-rotor --port 7400","mcp":"mhs serve robots/fdcl-gwu__gym-rotor --mcp"}},
{"id":"robots/fdcl-gwu__gym-rotor-modularrl","name":"gym-rotor-modularrl Quad-v0 (quadrotor simulation)","device_id":"mhs://localhost/gym-rotor-quad","track":"robots","category":"Simulation","topic":"UAVs","kind":"world.sim","vendor":"FDCL-GWU","model":"Quad-v0","mode":"simulated","risk":"R0","family":"gymnasium","role":"sim-env","intro":"gym-rotor-modularrl Quad-v0 (quadrotor simulation), adapted from fdcl-gwu/gym-rotor-modularrl. It reads `observation`, `reward`, `terminated`, `truncated` and 4 more; runs `step`, `reset` and `seed`. `step`: advance the simulated world by a bounded number of fixed timesteps, optionally applying an action for each step, and return the resulting observation and terminal flags. A simulator: the market serves it with a stand-in that needs no simulator install.","measures":["observation","reward","terminated","truncated","tick","episode","seed","info"],"adjusts":[],"actions":[{"name":"step","description":"Advance the simulated world by a bounded number of fixed timesteps, optionally applying an action for each step, and return the resulting observation and terminal flags."},{"name":"reset","description":"Reset the simulated world to a scenario start state and return the initial observation. When a seed is supplied the endpoint records it in the receipt; otherwise the endpoint's declared default seed applies."},{"name":"seed","description":"Set the seed used by the simulated world's random number generators for subsequent steps, without resetting the world. The accepted seed is echoed in the receipt."}],"tags":["quadrotor","uav","flight-dynamics","reinforcement-learning","simulation","gymnasium"],"backends":["fake"],"served_backend":"fake","evidence":"contract_checked","upstream":{"repo_url":"https://github.com/fdcl-gwu/gym-rotor-modularrl","commit":"3d70dfbe4ccee71bf30953cba3a1a810f2084494","license":"MIT"},"stars":21,"install":{"openai4s":"openai4s lab add robots/fdcl-gwu__gym-rotor-modularrl","mhs":"mhs serve robots/fdcl-gwu__gym-rotor-modularrl --port 7400","mcp":"mhs serve robots/fdcl-gwu__gym-rotor-modularrl --mcp"}},
{"id":"robots/fdcl-gwu__uav_simulator","name":"FDCL-GWU UAV Gazebo simulator","device_id":"mhs://localhost/fdcl-uav-sim","track":"robots","category":"Simulation","topic":null,"kind":"world.sim","vendor":"FDCL-GWU","model":"Geometric-control quadrotor in Gazebo","mode":"simulated","risk":"R2","family":"ros","role":"sim-env","intro":"FDCL-GWU UAV Gazebo simulator, adapted from fdcl-gwu/uav_simulator. It reads `mode`, `motors_on`, `read_state` and `read_imu`; runs `set_flight_mode` and `motors_off`. `set_flight_mode`: publish one ModeData flight-mode request on /uav/mode; the receipt confirms transmission only, not mode execution, and the publication does not turn the motors on. A simulator: the market serves it with a stand-in that needs no simulator install.","measures":["mode","motors_on","read_state","read_imu"],"adjusts":[],"actions":[{"name":"set_flight_mode","description":"Publish one ModeData flight-mode request on /uav/mode; the receipt confirms transmission only, not mode execution, and the publication does not turn the motors on"},{"name":"motors_off","description":"Publish one std_msgs/Bool false on /uav/motors_on, the same publication the e-stop sends; the receipt confirms transmission only, not the sensed confirmation, and repeating it does not turn the motors on"}],"tags":["ros","ros2","simulation","gazebo","uav","quadrotor","trajectory","mode"],"backends":["fake"],"served_backend":"fake","evidence":"contract_checked","upstream":{"repo_url":"https://github.com/fdcl-gwu/uav_simulator","commit":"7270fe4e274f2a5d84432336311da478d87d8d3d","license":"MIT"},"stars":159,"install":{"openai4s":"openai4s lab add robots/fdcl-gwu__uav_simulator","mhs":"mhs serve robots/fdcl-gwu__uav_simulator --port 7400","mcp":"mhs serve robots/fdcl-gwu__uav_simulator --mcp"}},
{"id":"robots/felipemohr__isaaclab-quadruped-tasks","name":"Isaac Lab ANYmal D blind flat (Isaac-Quadruped-AnymalD-Blind-Flat-v0)","device_id":"mhs://localhost/anymal-d-blind-flat","track":"robots","category":"Simulation","topic":null,"kind":"world.sim","vendor":"Felipe Mohr Santos","model":"Isaac-Quadruped-AnymalD-Blind-Flat-v0","mode":"simulated","risk":"R0","family":"gymnasium","role":"sim-env","intro":"Isaac Lab ANYmal D blind flat (Isaac-Quadruped-AnymalD-Blind-Flat-v0), adapted from felipemohr/isaaclab-quadruped-tasks. It reads `observation`, `reward`, `terminated`, `truncated` and 4 more; runs `step`, `reset` and `seed`. `step`: advance the simulated world by a bounded number of fixed timesteps, optionally applying an action for each step, and return the resulting observation and terminal flags. A simulator: the market serves it with a stand-in that needs no simulator install.","measures":["observation","reward","terminated","truncated","tick","episode","seed","info"],"adjusts":[],"actions":[{"name":"step","description":"Advance the simulated world by a bounded number of fixed timesteps, optionally applying an action for each step, and return the resulting observation and terminal flags."},{"name":"reset","description":"Reset the simulated world to a scenario start state and return the initial observation. When a seed is supplied the endpoint records it in the receipt; otherwise the endpoint's declared default seed applies."},{"name":"seed","description":"Set the seed used by the simulated world's random number generators for subsequent steps, without resetting the world. The accepted seed is echoed in the receipt."}],"tags":["quadruped","anymal-d","reinforcement-learning","isaac-lab","simulation","gymnasium"],"backends":["fake"],"served_backend":"fake","evidence":"contract_checked","upstream":{"repo_url":"https://github.com/felipemohr/isaaclab-quadruped-tasks","commit":"6d2f0b39c162330f9697db132238b64855cb6ae3","license":"MIT"},"stars":58,"install":{"openai4s":"openai4s lab add robots/felipemohr__isaaclab-quadruped-tasks","mhs":"mhs serve robots/felipemohr__isaaclab-quadruped-tasks --port 7400","mcp":"mhs serve robots/felipemohr__isaaclab-quadruped-tasks --mcp"}},
{"id":"robots/field-robotics-lab__dave","name":"DAVE underwater simulation ocean current","device_id":"mhs://localhost/dave","track":"robots","category":"Simulation","topic":"underwater robotics","kind":"world.sim","vendor":"Field Robotics Lab","model":"dave_gazebo_ros_plugins ocean current","mode":"simulated","risk":"R0","family":"ros","role":"sim-env","intro":"DAVE underwater simulation ocean current, adapted from field-robotics-lab/dave. It reads `current_velocity_model`, `horizontal_angle_model` and `read_current`; runs `set_current` and `zero_current`. `set_current`: set the ocean-current velocity and direction means. A simulator: the market serves it with a stand-in that needs no simulator install.","measures":["current_velocity_model","horizontal_angle_model","read_current"],"adjusts":[],"actions":[{"name":"set_current","description":"Set the ocean-current velocity and direction means"},{"name":"zero_current","description":"Set the global constant-current model means to zero with the acknowledged service; stratified, tidal and per-vehicle transient currents are unchanged"}],"tags":["ros","ros1","simulation","gazebo","dave","underwater","ocean-current"],"backends":["fake"],"served_backend":"fake","evidence":"contract_checked","upstream":{"repo_url":"https://github.com/field-robotics-lab/dave","commit":"e54ea16bdaf7d6dbb466cf141846a03f284a44dd","license":"Apache-2.0"},"stars":298,"install":{"openai4s":"openai4s lab add robots/field-robotics-lab__dave","mhs":"mhs serve robots/field-robotics-lab__dave --port 7400","mcp":"mhs serve robots/field-robotics-lab__dave --mcp"}},
{"id":"robots/fmdazhar__mujoco_sim","name":"mujoco_sim UR5e peg-in-hole (ur5ePegInHoleGymEnv_easy-v0)","device_id":"mhs://localhost/ur5e-peg-in-hole","track":"robots","category":"Simulation","topic":"robot arm manipulation","kind":"world.sim","vendor":"fmdazhar","model":"mujoco_sim","mode":"simulated","risk":"R0","family":"gymnasium","role":"sim-env","intro":"mujoco_sim UR5e peg-in-hole (ur5ePegInHoleGymEnv_easy-v0), adapted from fmdazhar/mujoco_sim. It reads `observation`, `reward`, `terminated`, `truncated` and 4 more; runs `step`, `reset` and `seed`. `step`: advance the simulated world by a bounded number of fixed timesteps, optionally applying an action for each step, and return the resulting observation and terminal flags. A simulator: the market serves it with a stand-in that needs no simulator install.","measures":["observation","reward","terminated","truncated","tick","episode","seed","info"],"adjusts":[],"actions":[{"name":"step","description":"Advance the simulated world by a bounded number of fixed timesteps, optionally applying an action for each step, and return the resulting observation and terminal flags."},{"name":"reset","description":"Reset the simulated world to a scenario start state and return the initial observation. When a seed is supplied the endpoint records it in the receipt; otherwise the endpoint's declared default seed applies."},{"name":"seed","description":"Set the seed used by the simulated world's random number generators for subsequent steps, without resetting the world. The accepted seed is echoed in the receipt."}],"tags":["ur5e","peg-in-hole","mujoco","manipulation","reinforcement-learning","simulation","gymnasium"],"backends":["fake"],"served_backend":"fake","evidence":"contract_checked","upstream":{"repo_url":"https://github.com/fmdazhar/mujoco_sim","commit":"9c204da4f307c7a711ca4e5cddb1d46a86cab0b1","license":"MIT"},"stars":5,"install":{"openai4s":"openai4s lab add robots/fmdazhar__mujoco_sim","mhs":"mhs serve robots/fmdazhar__mujoco_sim --port 7400","mcp":"mhs serve robots/fmdazhar__mujoco_sim --mcp"}},
{"id":"robots/frankarobotics__franka_ros","name":"Franka Hand ROS 1 gripper","device_id":"mhs://localhost/franka_gripper","track":"robots","category":"Robot arms and grippers","topic":null,"kind":"robot.gripper","vendor":"Franka Robotics","model":null,"mode":"hardware","risk":"R2","family":"ros","role":"device-driver","intro":"Franka Hand ROS 1 gripper, adapted from frankarobotics/franka_ros. It reads `finger_positions`; runs `grasp`, `move_gripper`, `home_gripper` and `stop_gripper`. `grasp`: close the gripper on a target object with a bounded force and report the achieved grasp width. A failed grasp is a completed operation with grasped=false, not a silent success. A hardware driver: the market serves its fake backend, so no instrument is needed.","measures":["finger_positions"],"adjusts":[],"actions":[{"name":"grasp","description":"Close the gripper on a target object with a bounded force and report the achieved grasp width. A failed grasp is a completed operation with grasped=false, not a silent success."},{"name":"move_gripper","description":"Move the gripper fingers to a total opening width with the upstream MoveAction"},{"name":"home_gripper","description":"Home the gripper with the upstream HomingAction"},{"name":"stop_gripper","description":"Request the independent native StopAction and confirm only after all older effects have settled and a fresh stop has succeeded"}],"tags":["ros","ros1","franka","panda","gripper","grasp","homing","stop"],"backends":["fake"],"served_backend":"fake","evidence":"contract_checked","upstream":{"repo_url":"https://github.com/frankarobotics/franka_ros","commit":"ddd2fffd9de44b02ad15b4bbb2bfa2cec4d60d98","license":"Apache-2.0"},"stars":492,"install":{"openai4s":"openai4s lab add robots/frankarobotics__franka_ros","mhs":"mhs serve robots/frankarobotics__franka_ros --port 7400","mcp":"mhs serve robots/frankarobotics__franka_ros --mcp"}},
{"id":"robots/frankarobotics__franka_ros2","name":"Franka TMR spine and battery ROS 2 interfaces","device_id":"mhs://localhost/franka_tmr","track":"robots","category":"Motion control","topic":null,"kind":"motion.axis","vendor":"Franka Robotics","model":"TMR","mode":"hardware","risk":"R2","family":"ros","role":"device-driver","intro":"Franka TMR spine and battery ROS 2 interfaces, adapted from frankarobotics/franka_ros2. It reads `position`, `position_valid`, `state`, `state_valid` and 3 more; runs `move_absolute`, `halt_motion`, `switch_off_spine`, `switch_on_spine` and 2 more. `move_absolute`: move the spine to an absolute position through the ROS 2 MoveAbsolute action; the action returns the spine's reached flag and stop reason, and cancellation requests the upstream quick-stop and re-arm path. A hardware driver: the market serves its fake backend, so no instrument is needed.","measures":["position","position_valid","state","state_valid","state_error_code","state_error_description","read_battery_state"],"adjusts":[],"actions":[{"name":"move_absolute","description":"Move the spine to an absolute position through the ROS 2 MoveAbsolute action; the action returns the spine's reached flag and stop reason, and cancellation requests the upstream quick-stop and re-arm path"},{"name":"halt_motion","description":"Halt an ongoing spine motion through the acknowledged Halt service; the upstream quick-stop then waits for SwitchedOff and re-arms the drive to SwitchedOn, so this is not the safe state"},{"name":"switch_off_spine","description":"Switch the spine drive off through the acknowledged SwitchOff service; the callback returns after the REST transition to SwitchedOff, which disables motion"},{"name":"switch_on_spine","description":"Switch the spine drive on through the acknowledged SwitchOn service (SwitchedOn, enabling motion); the declared re-enable after a safety reset: the reset never calls it and it is refused while the e-stop is latched"},{"name":"stop_wireless_charging","description":"Stop wireless charging through the acknowledged std_srvs/Trigger service; the output is the service's application result, not a measured charging state"},{"name":"try_start_wireless_charging","description":"Attempt to start wireless charging through the acknowledged std_srvs/Trigger service; the output is the service's application result, not a measured charging state"}],"tags":["ros","ros2","franka","tmr","spine","battery","linear-axis"],"backends":["fake"],"served_backend":"fake","evidence":"contract_checked","upstream":{"repo_url":"https://github.com/frankarobotics/franka_ros2","commit":"4acc05c01ebfcdf916ee6b3df966df0ad7b2f9ec","license":"Apache-2.0"},"stars":385,"install":{"openai4s":"openai4s lab add robots/frankarobotics__franka_ros2","mhs":"mhs serve robots/frankarobotics__franka_ros2 --port 7400","mcp":"mhs serve robots/frankarobotics__franka_ros2 --mcp"}},
{"id":"robots/froststar16__bimanual-cooking-sim","name":"Bimanual cooking kitchen (MuJoCo scene)","device_id":"mhs://localhost/bimanual-kitchen","track":"robots","category":"Simulation","topic":"robot arm manipulation","kind":"world.sim","vendor":"Froststar16","model":"Bimanual kitchen MJCF scene","mode":"simulated","risk":"R0","family":"mujoco","role":"sim-env","intro":"Bimanual cooking kitchen (MuJoCo scene), adapted from froststar16/bimanual-cooking-sim. It reads `time_ms`, `qpos`, `qvel`, `ctrl` and 4 more; runs `step` and `reset`. `step`: advance the simulated world by a bounded number of fixed timesteps, optionally applying an action for each step, and return the resulting observation and terminal flags. A simulator: the market serves it with a stand-in that needs no simulator install.","measures":["time_ms","qpos","qvel","ctrl","tick","timestep_ms","seed","native_checkpoint"],"adjusts":[],"actions":[{"name":"step","description":"Advance the simulated world by a bounded number of fixed timesteps, optionally applying an action for each step, and return the resulting observation and terminal flags."},{"name":"reset","description":"Reset the simulated world to a scenario start state and return the initial observation. When a seed is supplied the endpoint records it in the receipt; otherwise the endpoint's declared default seed applies."}],"tags":["mujoco","bimanual","robot arm","cooking","manipulation","simulation"],"backends":["fake"],"served_backend":"fake","evidence":"contract_checked","upstream":{"repo_url":"https://github.com/froststar16/bimanual-cooking-sim","commit":"6ca8f1c83378d1e3fe39a4cc9083eefe6540c5ec","license":"MIT"},"stars":0,"install":{"openai4s":"openai4s lab add robots/froststar16__bimanual-cooking-sim","mhs":"mhs serve robots/froststar16__bimanual-cooking-sim --port 7400","mcp":"mhs serve robots/froststar16__bimanual-cooking-sim --mcp"}},
{"id":"robots/generalroboticslab__dukehumanoidhardwarecontrol","name":"Duke Humanoid V1 (biped_controller.BipedController)","device_id":"mhs://localhost/duke-humanoid","track":"robots","category":"Mobile robots","topic":null,"kind":"robot.mobile_base","vendor":"General Robotics Lab","model":"Duke Humanoid V1 (10 DoF biped)","mode":"hardware","risk":"R2","family":"python-object","role":"device-driver","intro":"Duke Humanoid V1 (biped_controller.BipedController), adapted from generalroboticslab/dukehumanoidhardwarecontrol. It reads `joint_positions`, `joint_velocities`, `joint_currents`, `dof_position_target` and 6 more; sets `command_forward`, `command_lateral` and `command_yaw`; runs `control_step` and `halt`. `control_step`: run one closed-loop control step: update the command, refresh the observation, compute the policy action and write the motor target. A hardware driver: the market serves its fake backend, so no instrument is needed.","measures":["joint_positions","joint_velocities","joint_currents","dof_position_target","foot_force_raw","foot_contact","angular_velocity","gravity_vector","base_quaternion","sample_rate"],"adjusts":["command_forward","command_lateral","command_yaw"],"actions":[{"name":"control_step","description":"Run one closed-loop control step: update the command, refresh the observation, compute the policy action and write the motor target"},{"name":"halt","description":"Stop the motors: set every motor's torque limit to 0 and end the EtherCAT motor loop, the first two steps of the upstream's check_termination"}],"tags":["humanoid","biped","robot","10 dof","ethercat","teensy","telemetry","velocity command"],"backends":["fake","hardware"],"served_backend":"fake","evidence":"contract_checked","upstream":{"repo_url":"https://github.com/generalroboticslab/dukehumanoidhardwarecontrol","commit":"3a9c3cd4c8daf6b3ffe2e41768360d0515f2df55","license":"NOASSERTION"},"stars":0,"install":{"openai4s":"openai4s lab add robots/generalroboticslab__dukehumanoidhardwarecontrol","mhs":"mhs serve robots/generalroboticslab__dukehumanoidhardwarecontrol --port 7400","mcp":"mhs serve robots/generalroboticslab__dukehumanoidhardwarecontrol --mcp"}},
{"id":"robots/genesis-embodied-ai__difftactile","name":"DiffTactile box_open tactile simulator (Gymnasium)","device_id":"mhs://localhost/difftactile-box-open","track":"robots","category":"Simulation","topic":"robot manipulation","kind":"world.sim","vendor":"Genesis Embodied AI","model":"DiffTactile box_open","mode":"simulated","risk":"R0","family":"gymnasium","role":"sim-env","intro":"DiffTactile box_open tactile simulator (Gymnasium), adapted from genesis-embodied-ai/difftactile. It reads `observation`, `reward`, `terminated`, `truncated` and 4 more; runs `step`, `reset` and `seed`. `step`: advance the simulated world by a bounded number of fixed timesteps, optionally applying an action for each step, and return the resulting observation and terminal flags. A simulator: the market serves it with a stand-in that needs no simulator install.","measures":["observation","reward","terminated","truncated","tick","episode","seed","info"],"adjusts":[],"actions":[{"name":"step","description":"Advance the simulated world by a bounded number of fixed timesteps, optionally applying an action for each step, and return the resulting observation and terminal flags."},{"name":"reset","description":"Reset the simulated world to a scenario start state and return the initial observation. When a seed is supplied the endpoint records it in the receipt; otherwise the endpoint's declared default seed applies."},{"name":"seed","description":"Set the seed used by the simulated world's random number generators for subsequent steps, without resetting the world. The accepted seed is echoed in the receipt."}],"tags":["tactile","contact-rich-manipulation","differentiable-physics","reinforcement-learning","simulation","gymnasium"],"backends":["fake"],"served_backend":"fake","evidence":"contract_checked","upstream":{"repo_url":"https://github.com/genesis-embodied-ai/difftactile","commit":"c4bf43d44071758aea68a5c7ae125fc8257bb8e1","license":"MIT"},"stars":316,"install":{"openai4s":"openai4s lab add robots/genesis-embodied-ai__difftactile","mhs":"mhs serve robots/genesis-embodied-ai__difftactile --port 7400","mcp":"mhs serve robots/genesis-embodied-ai__difftactile --mcp"}},
{"id":"robots/geo-jtao__unitree_robot_sim","name":"Unitree B2 MuJoCo scene","device_id":"mhs://localhost/unitree-b2","track":"robots","category":"Simulation","topic":"legged robots","kind":"world.sim","vendor":"Unitree Robotics (geo-jtao mirror)","model":"b2 scene","mode":"simulated","risk":"R0","family":"mujoco","role":"sim-env","intro":"Unitree B2 MuJoCo scene, adapted from geo-jtao/unitree_robot_sim. It reads `time_ms`, `qpos`, `qvel`, `ctrl` and 4 more; runs `step` and `reset`. `step`: advance the simulated world by a bounded number of fixed timesteps, optionally applying an action for each step, and return the resulting observation and terminal flags. A simulator: the market serves it with a stand-in that needs no simulator install.","measures":["time_ms","qpos","qvel","ctrl","tick","timestep_ms","seed","native_checkpoint"],"adjusts":[],"actions":[{"name":"step","description":"Advance the simulated world by a bounded number of fixed timesteps, optionally applying an action for each step, and return the resulting observation and terminal flags."},{"name":"reset","description":"Reset the simulated world to a scenario start state and return the initial observation. When a seed is supplied the endpoint records it in the receipt; otherwise the endpoint's declared default seed applies."}],"tags":["unitree","b2","quadruped","mujoco","mjcf","simulation","ros","gazebo"],"backends":["fake"],"served_backend":"fake","evidence":"contract_checked","upstream":{"repo_url":"https://github.com/geo-jtao/unitree_robot_sim","commit":"49fb7fa50e0c3b65dd2a07ac4df370ba781858b8","license":"NOASSERTION"},"stars":14,"install":{"openai4s":"openai4s lab add robots/geo-jtao__unitree_robot_sim","mhs":"mhs serve robots/geo-jtao__unitree_robot_sim --port 7400","mcp":"mhs serve robots/geo-jtao__unitree_robot_sim --mcp"}},
{"id":"robots/geonhee-lee__ur5_ros_gym","name":"UR5 unscrewing Gym environment over ROS/Gazebo","device_id":"mhs://localhost/ur5-unscrewing","track":"robots","category":"Simulation","topic":"robot arm manipulation","kind":"world.sim","vendor":"geonhee-lee","model":"ur5_ros_gym (gym_unscrewing_env-v0)","mode":"simulated","risk":"R0","family":"gymnasium","role":"sim-env","intro":"UR5 unscrewing Gym environment over ROS/Gazebo, adapted from geonhee-lee/ur5_ros_gym. It reads `observation`, `reward`, `terminated`, `truncated` and 4 more; runs `step`, `reset` and `seed`. `step`: advance the simulated world by a bounded number of fixed timesteps, optionally applying an action for each step, and return the resulting observation and terminal flags. A simulator: the market serves it with a stand-in that needs no simulator install.","measures":["observation","reward","terminated","truncated","tick","episode","seed","info"],"adjusts":[],"actions":[{"name":"step","description":"Advance the simulated world by a bounded number of fixed timesteps, optionally applying an action for each step, and return the resulting observation and terminal flags."},{"name":"reset","description":"Reset the simulated world to a scenario start state and return the initial observation. When a seed is supplied the endpoint records it in the receipt; otherwise the endpoint's declared default seed applies."},{"name":"seed","description":"Set the seed used by the simulated world's random number generators for subsequent steps, without resetting the world. The accepted seed is echoed in the receipt."}],"tags":["ur5","gym","reinforcement-learning","unscrewing","ros","gazebo","moveit","simulation"],"backends":["fake"],"served_backend":"fake","evidence":"contract_checked","upstream":{"repo_url":"https://github.com/geonhee-lee/ur5_ros_gym","commit":"bd291129c8a12be28311538822c900d7d0930930","license":"NOASSERTION"},"stars":4,"install":{"openai4s":"openai4s lab add robots/geonhee-lee__ur5_ros_gym","mhs":"mhs serve robots/geonhee-lee__ur5_ros_gym --port 7400","mcp":"mhs serve robots/geonhee-lee__ur5_ros_gym --mcp"}},
{"id":"robots/gepetto__constraints-as-terminations","name":"CaT Solo12 locomotion environment (Isaac Lab simulation)","device_id":"mhs://localhost/cat-solo12","track":"robots","category":"Simulation","topic":null,"kind":"world.sim","vendor":"Gepetto","model":"constraints-as-terminations","mode":"simulated","risk":"R0","family":"gymnasium","role":"sim-env","intro":"CaT Solo12 locomotion environment (Isaac Lab simulation), adapted from gepetto/constraints-as-terminations. It reads `observation`, `reward`, `constraint_probability`, `timed_out` and 3 more; runs `step` and `reset_world`. `step`: advance the simulated world by a bounded number of fixed timesteps, optionally applying an action for each step, and return the resulting observation and terminal flags. A simulator: the market serves it with a stand-in that needs no simulator install.","measures":["observation","reward","constraint_probability","timed_out","terminated","tick","episode"],"adjusts":[],"actions":[{"name":"step","description":"Advance the simulated world by a bounded number of fixed timesteps, optionally applying an action for each step, and return the resulting observation and terminal flags."},{"name":"reset_world","description":"Reset the simulated world to a scenario start state and return the initial observation. When a seed is supplied the endpoint records it in the receipt; otherwise the endpoint's declared default seed applies."}],"tags":["constraints-as-terminations","cat","solo12","isaac-lab","locomotion","reinforcement-learning","simulation"],"backends":["fake"],"served_backend":"fake","evidence":"contract_checked","upstream":{"repo_url":"https://github.com/gepetto/constraints-as-terminations","commit":"5fc729b789a27d39bf95df1b58fbc32b794106ff","license":"MIT"},"stars":172,"install":{"openai4s":"openai4s lab add robots/gepetto__constraints-as-terminations","mhs":"mhs serve robots/gepetto__constraints-as-terminations --port 7400","mcp":"mhs serve robots/gepetto__constraints-as-terminations --mcp"}},
{"id":"robots/goanywherenus__sim_igibson_ros","name":"iGibson TurtleBot RGB camera","device_id":"mhs://localhost/igibson-turtlebot-camera","track":"robots","category":"Sensors and cameras","topic":null,"kind":"sensor.camera","vendor":"goanywherenus","model":"TurtleBot RGB camera in iGibson","mode":"simulated","risk":"R0","family":"ros","role":"sim-env","intro":"iGibson TurtleBot RGB camera, adapted from goanywherenus/sim_igibson_ros. It runs `capture`. `capture`: capture a single image from a named camera with a declared resolution and exposure and return an image artifact reference. A simulator: the market serves it with a stand-in that needs no simulator install.","measures":[],"adjusts":[],"actions":[{"name":"capture","description":"Capture a single image from a named camera with a declared resolution and exposure and return an image artifact reference."}],"tags":["ros","ros1","igibson","turtlebot","simulation","camera","image","rgb"],"backends":["fake"],"served_backend":"fake","evidence":"contract_checked","upstream":{"repo_url":"https://github.com/goanywherenus/sim_igibson_ros","commit":"cf9a546437e00bce59237571e0a1b5b7e2ba3e05","license":"NOASSERTION"},"stars":0,"install":{"openai4s":"openai4s lab add robots/goanywherenus__sim_igibson_ros","mhs":"mhs serve robots/goanywherenus__sim_igibson_ros --port 7400","mcp":"mhs serve robots/goanywherenus__sim_igibson_ros --mcp"}},
{"id":"robots/gongxudong__fly-craft","name":"FlyCraft-v0 (fixed-wing UAV velocity vector control)","device_id":"mhs://localhost/flycraft","track":"robots","category":"Simulation","topic":"UAVs","kind":"world.sim","vendor":"Xudong Gong","model":"FlyCraft-v0","mode":"simulated","risk":"R0","family":"gymnasium","role":"sim-env","intro":"FlyCraft-v0 (fixed-wing UAV velocity vector control), adapted from gongxudong/fly-craft. It reads `observation`, `reward`, `terminated`, `truncated` and 4 more; runs `step`, `reset` and `seed`. `step`: advance the simulated world by a bounded number of fixed timesteps, optionally applying an action for each step, and return the resulting observation and terminal flags. A simulator: the market serves it with a stand-in that needs no simulator install.","measures":["observation","reward","terminated","truncated","tick","episode","seed","info"],"adjusts":[],"actions":[{"name":"step","description":"Advance the simulated world by a bounded number of fixed timesteps, optionally applying an action for each step, and return the resulting observation and terminal flags."},{"name":"reset","description":"Reset the simulated world to a scenario start state and return the initial observation. When a seed is supplied the endpoint records it in the receipt; otherwise the endpoint's declared default seed applies."},{"name":"seed","description":"Set the seed used by the simulated world's random number generators for subsequent steps, without resetting the world. The accepted seed is echoed in the receipt."}],"tags":["fixed-wing","uav","velocity-vector-control","reinforcement-learning","simulation","gymnasium"],"backends":["fake"],"served_backend":"fake","evidence":"contract_checked","upstream":{"repo_url":"https://github.com/gongxudong/fly-craft","commit":"a54a1c2a1005b6d6ba67d8cea9fbc78c8769f449","license":"MIT"},"stars":115,"install":{"openai4s":"openai4s lab add robots/gongxudong__fly-craft","mhs":"mhs serve robots/gongxudong__fly-craft --port 7400","mcp":"mhs serve robots/gongxudong__fly-craft --mcp"}},
{"id":"robots/google-deepmind__aloha_sim","name":"ALOHA bimanual arm (MuJoCo model)","device_id":"mhs://localhost/aloha","track":"robots","category":"Simulation","topic":"robot manipulation","kind":"world.sim","vendor":"Google DeepMind","model":"ALOHA bimanual arm","mode":"simulated","risk":"R0","family":"mujoco","role":"sim-env","intro":"ALOHA bimanual arm (MuJoCo model), adapted from google-deepmind/aloha_sim. It reads `time_ms`, `qpos`, `qvel`, `ctrl` and 4 more; runs `step` and `reset`. `step`: advance the simulated world by a bounded number of fixed timesteps, optionally applying an action for each step, and return the resulting observation and terminal flags. A simulator: the market serves it with a stand-in that needs no simulator install.","measures":["time_ms","qpos","qvel","ctrl","tick","timestep_ms","seed","native_checkpoint"],"adjusts":[],"actions":[{"name":"step","description":"Advance the simulated world by a bounded number of fixed timesteps, optionally applying an action for each step, and return the resulting observation and terminal flags."},{"name":"reset","description":"Reset the simulated world to a scenario start state and return the initial observation. When a seed is supplied the endpoint records it in the receipt; otherwise the endpoint's declared default seed applies."}],"tags":["aloha","bimanual","manipulation","mujoco","simulation","robot"],"backends":["fake"],"served_backend":"fake","evidence":"contract_checked","upstream":{"repo_url":"https://github.com/google-deepmind/aloha_sim","commit":"d02904607cca1bf6dfb72f30b522506ac7ca0f91","license":"Apache-2.0"},"stars":318,"install":{"openai4s":"openai4s lab add robots/google-deepmind__aloha_sim","mhs":"mhs serve robots/google-deepmind__aloha_sim --port 7400","mcp":"mhs serve robots/google-deepmind__aloha_sim --mcp"}},
{"id":"robots/google-deepmind__mujoco_menagerie","name":"AgileX PiPER (MuJoCo Menagerie)","device_id":"mhs://localhost/menagerie-piper","track":"robots","category":"Simulation","topic":"robot simulation model","kind":"world.sim","vendor":"Google DeepMind (MuJoCo Menagerie)","model":"AgileX PiPER","mode":"simulated","risk":"R0","family":"mujoco","role":"twin-candidate","intro":"AgileX PiPER (MuJoCo Menagerie), adapted from google-deepmind/mujoco_menagerie. It reads `time_ms`, `qpos`, `qvel`, `ctrl` and 4 more; runs `step` and `reset`. `step`: advance the simulated world by a bounded number of fixed timesteps, optionally applying an action for each step, and return the resulting observation and terminal flags. A simulator: the market serves it with a stand-in that needs no simulator install.","measures":["time_ms","qpos","qvel","ctrl","tick","timestep_ms","seed","native_checkpoint"],"adjusts":[],"actions":[{"name":"step","description":"Advance the simulated world by a bounded number of fixed timesteps, optionally applying an action for each step, and return the resulting observation and terminal flags."},{"name":"reset","description":"Reset the simulated world to a scenario start state and return the initial observation. When a seed is supplied the endpoint records it in the receipt; otherwise the endpoint's declared default seed applies."}],"tags":["agilex","arm","manipulator","menagerie","mujoco","piper","robot","simulation"],"backends":["fake"],"served_backend":"fake","evidence":"contract_checked","upstream":{"repo_url":"https://github.com/google-deepmind/mujoco_menagerie","commit":"0059d4335f8156206f63a35662313385f7ad6d74","license":"Apache-2.0"},"stars":4161,"install":{"openai4s":"openai4s lab add robots/google-deepmind__mujoco_menagerie","mhs":"mhs serve robots/google-deepmind__mujoco_menagerie --port 7400","mcp":"mhs serve robots/google-deepmind__mujoco_menagerie --mcp"}},
{"id":"robots/google-deepmind__mujoco_mpc","name":"MuJoCo MPC Free-Floating Fingers (simulation)","device_id":"mhs://localhost/mujoco-mpc-fingers","track":"robots","category":"Simulation","topic":"model predictive control","kind":"world.sim","vendor":"Google DeepMind","model":"Free-Floating Fingers","mode":"simulated","risk":"R0","family":"mujoco","role":"twin-candidate","intro":"MuJoCo MPC Free-Floating Fingers (simulation), adapted from google-deepmind/mujoco_mpc. It reads `time_ms`, `qpos`, `qvel`, `ctrl` and 4 more; runs `step` and `reset`. `step`: advance the simulated world by a bounded number of fixed timesteps, optionally applying an action for each step, and return the resulting observation and terminal flags. A simulator: the market serves it with a stand-in that needs no simulator install.","measures":["time_ms","qpos","qvel","ctrl","tick","timestep_ms","seed","native_checkpoint"],"adjusts":[],"actions":[{"name":"step","description":"Advance the simulated world by a bounded number of fixed timesteps, optionally applying an action for each step, and return the resulting observation and terminal flags."},{"name":"reset","description":"Reset the simulated world to a scenario start state and return the initial observation. When a seed is supplied the endpoint records it in the receipt; otherwise the endpoint's declared default seed applies."}],"tags":["mujoco","mujoco-mpc","simulation","manipulation","fingers","world-sim"],"backends":["fake"],"served_backend":"fake","evidence":"contract_checked","upstream":{"repo_url":"https://github.com/google-deepmind/mujoco_mpc","commit":"ff572a21e7c2bf9fda62e1862a758da7e9a8719b","license":"Apache-2.0"},"stars":1744,"install":{"openai4s":"openai4s lab add robots/google-deepmind__mujoco_mpc","mhs":"mhs serve robots/google-deepmind__mujoco_mpc --port 7400","mcp":"mhs serve robots/google-deepmind__mujoco_mpc --mcp"}},
{"id":"robots/google-deepmind__mujoco_playground","name":"DM Control acrobot (MuJoCo Playground)","device_id":"mhs://localhost/acrobot","track":"robots","category":"Simulation","topic":"legged and humanoid robots","kind":"world.sim","vendor":"Google DeepMind","model":"acrobot","mode":"simulated","risk":"R0","family":"mujoco","role":"sim-env","intro":"DM Control acrobot (MuJoCo Playground), adapted from google-deepmind/mujoco_playground. It reads `time_ms`, `qpos`, `qvel`, `ctrl` and 4 more; runs `step` and `reset`. `step`: advance the simulated world by a bounded number of fixed timesteps, optionally applying an action for each step, and return the resulting observation and terminal flags. A simulator: the market serves it with a stand-in that needs no simulator install.","measures":["time_ms","qpos","qvel","ctrl","tick","timestep_ms","seed","native_checkpoint"],"adjusts":[],"actions":[{"name":"step","description":"Advance the simulated world by a bounded number of fixed timesteps, optionally applying an action for each step, and return the resulting observation and terminal flags."},{"name":"reset","description":"Reset the simulated world to a scenario start state and return the initial observation. When a seed is supplied the endpoint records it in the receipt; otherwise the endpoint's declared default seed applies."}],"tags":["acrobot","dm-control","mujoco","playground","simulation","robot"],"backends":["fake"],"served_backend":"fake","evidence":"contract_checked","upstream":{"repo_url":"https://github.com/google-deepmind/mujoco_playground","commit":"d59156e099a8785dd58fbce2e25a6ee1f7b5800c","license":"Apache-2.0"},"stars":2244,"install":{"openai4s":"openai4s lab add robots/google-deepmind__mujoco_playground","mhs":"mhs serve robots/google-deepmind__mujoco_playground --port 7400","mcp":"mhs serve robots/google-deepmind__mujoco_playground --mcp"}},
{"id":"robots/google-research__football","name":"Google Research Football (GFootball simple115)","device_id":"mhs://localhost/gfootball","track":"robots","category":"Simulation","topic":"multi-robot systems","kind":"world.sim","vendor":"Google Research","model":"Google Research Football (GFootball)","mode":"simulated","risk":"R0","family":"gymnasium","role":"sim-env","intro":"Google Research Football (GFootball simple115), adapted from google-research/football. It reads `observation`, `reward`, `terminated`, `truncated` and 4 more; runs `step`, `reset` and `seed`. `step`: advance the simulated world by a bounded number of fixed timesteps, optionally applying an action for each step, and return the resulting observation and terminal flags. A simulator: the market serves it with a stand-in that needs no simulator install.","measures":["observation","reward","terminated","truncated","tick","episode","seed","info"],"adjusts":[],"actions":[{"name":"step","description":"Advance the simulated world by a bounded number of fixed timesteps, optionally applying an action for each step, and return the resulting observation and terminal flags."},{"name":"reset","description":"Reset the simulated world to a scenario start state and return the initial observation. When a seed is supplied the endpoint records it in the receipt; otherwise the endpoint's declared default seed applies."},{"name":"seed","description":"Set the seed used by the simulated world's random number generators for subsequent steps, without resetting the world. The accepted seed is echoed in the receipt."}],"tags":["football","gfootball","reinforcement-learning","simulation","gymnasium"],"backends":["fake"],"served_backend":"fake","evidence":"contract_checked","upstream":{"repo_url":"https://github.com/google-research/football","commit":"3d9e754720a95621bba6475c4d3b0d56fe919014","license":"Apache-2.0"},"stars":0,"install":{"openai4s":"openai4s lab add robots/google-research__football","mhs":"mhs serve robots/google-research__football --port 7400","mcp":"mhs serve robots/google-research__football --mcp"}},
{"id":"robots/google-research__ravens","name":"Ravens PyBullet manipulation environment","device_id":"mhs://localhost/ravens","track":"robots","category":"Simulation","topic":"robot manipulation","kind":"world.sim","vendor":"Google Research","model":"Ravens","mode":"simulated","risk":"R0","family":"gymnasium","role":"sim-env","intro":"Ravens PyBullet manipulation environment, adapted from google-research/ravens. It reads `observation`, `reward`, `terminated`, `truncated` and 4 more; runs `step`, `reset` and `seed`. `step`: advance the simulated world by a bounded number of fixed timesteps, optionally applying an action for each step, and return the resulting observation and terminal flags. A simulator: the market serves it with a stand-in that needs no simulator install.","measures":["observation","reward","terminated","truncated","tick","episode","seed","info"],"adjusts":[],"actions":[{"name":"step","description":"Advance the simulated world by a bounded number of fixed timesteps, optionally applying an action for each step, and return the resulting observation and terminal flags."},{"name":"reset","description":"Reset the simulated world to a scenario start state and return the initial observation. When a seed is supplied the endpoint records it in the receipt; otherwise the endpoint's declared default seed applies."},{"name":"seed","description":"Set the seed used by the simulated world's random number generators for subsequent steps, without resetting the world. The accepted seed is echoed in the receipt."}],"tags":["ravens","pybullet","robot-manipulation","reinforcement-learning","simulation"],"backends":["fake"],"served_backend":"fake","evidence":"contract_checked","upstream":{"repo_url":"https://github.com/google-research/ravens","commit":"4752ffab487ebd387781ad7890aa540ae2780970","license":"Apache-2.0"},"stars":630,"install":{"openai4s":"openai4s lab add robots/google-research__ravens","mhs":"mhs serve robots/google-research__ravens --port 7400","mcp":"mhs serve robots/google-research__ravens --mcp"}},
{"id":"robots/google-research__robel","name":"ROBEL DClaw pose (DClawPoseFixed-v0)","device_id":"mhs://localhost/dclaw-pose-fixed","track":"robots","category":"Simulation","topic":"robot manipulation","kind":"world.sim","vendor":"Google Research","model":"DClawPoseFixed-v0","mode":"simulated","risk":"R0","family":"gymnasium","role":"sim-env","intro":"ROBEL DClaw pose (DClawPoseFixed-v0), adapted from google-research/robel. It reads `observation`, `reward`, `terminated`, `truncated` and 4 more; runs `step`, `reset` and `seed`. `step`: advance the simulated world by a bounded number of fixed timesteps, optionally applying an action for each step, and return the resulting observation and terminal flags. A simulator: the market serves it with a stand-in that needs no simulator install.","measures":["observation","reward","terminated","truncated","tick","episode","seed","info"],"adjusts":[],"actions":[{"name":"step","description":"Advance the simulated world by a bounded number of fixed timesteps, optionally applying an action for each step, and return the resulting observation and terminal flags."},{"name":"reset","description":"Reset the simulated world to a scenario start state and return the initial observation. When a seed is supplied the endpoint records it in the receipt; otherwise the endpoint's declared default seed applies."},{"name":"seed","description":"Set the seed used by the simulated world's random number generators for subsequent steps, without resetting the world. The accepted seed is echoed in the receipt."}],"tags":["dclaw","pose","manipulation","mujoco","reinforcement-learning","simulation","gymnasium"],"backends":["fake"],"served_backend":"fake","evidence":"contract_checked","upstream":{"repo_url":"https://github.com/google-research/robel","commit":"5b0fd3704629931712c6e0f7268ace1c2154dc83","license":"Apache-2.0"},"stars":150,"install":{"openai4s":"openai4s lab add robots/google-research__robel","mhs":"mhs serve robots/google-research__robel --port 7400","mcp":"mhs serve robots/google-research__robel --mcp"}},
{"id":"robots/google-research__robodesk","name":"RoboDesk multi-task manipulation benchmark","device_id":"mhs://localhost/robodesk","track":"robots","category":"Simulation","topic":"robot arm manipulation","kind":"world.sim","vendor":"Google Research","model":"RoboDesk","mode":"simulated","risk":"R0","family":"gymnasium","role":"sim-env","intro":"RoboDesk multi-task manipulation benchmark, adapted from google-research/robodesk. It reads `observation`, `reward`, `terminated`, `truncated` and 4 more; runs `step`, `reset` and `seed`. `step`: advance the simulated world by a bounded number of fixed timesteps, optionally applying an action for each step, and return the resulting observation and terminal flags. A simulator: the market serves it with a stand-in that needs no simulator install.","measures":["observation","reward","terminated","truncated","tick","episode","seed","info"],"adjusts":[],"actions":[{"name":"step","description":"Advance the simulated world by a bounded number of fixed timesteps, optionally applying an action for each step, and return the resulting observation and terminal flags."},{"name":"reset","description":"Reset the simulated world to a scenario start state and return the initial observation. When a seed is supplied the endpoint records it in the receipt; otherwise the endpoint's declared default seed applies."},{"name":"seed","description":"Set the seed used by the simulated world's random number generators for subsequent steps, without resetting the world. The accepted seed is echoed in the receipt."}],"tags":["robodesk","mujoco","manipulation","robot-arm","reinforcement-learning","simulation","gymnasium"],"backends":["fake"],"served_backend":"fake","evidence":"contract_checked","upstream":{"repo_url":"https://github.com/google-research/robodesk","commit":"a8edde34f879242730c026dfe7c6e3beb4318023","license":"Apache-2.0"},"stars":0,"install":{"openai4s":"openai4s lab add robots/google-research__robodesk","mhs":"mhs serve robots/google-research__robodesk --port 7400","mcp":"mhs serve robots/google-research__robodesk --mcp"}},
{"id":"robots/google-research__robopianist","name":"RoboPianist: two Shadow Hands at a simulated piano","device_id":"mhs://localhost/robopianist-piano-with-shadow-hands","track":"robots","category":"Simulation","topic":"robot arm manipulation","kind":"world.sim","vendor":"Google Research (RoboPianist)","model":"PianoWithShadowHands, built by robopianist.suite.load","mode":"simulated","risk":"R0","family":"gymnasium","role":"sim-env","intro":"RoboPianist: two Shadow Hands at a simulated piano, adapted from google-research/robopianist. It reads `observation`, `reward`, `terminated`, `truncated` and 4 more; runs `step` and `reset`. `step`: advance the simulated world by a bounded number of fixed timesteps, optionally applying an action for each step, and return the resulting observation and terminal flags. A simulator: the market serves it with a stand-in that needs no simulator install.","measures":["observation","reward","terminated","truncated","tick","episode","seed","info"],"adjusts":[],"actions":[{"name":"step","description":"Advance the simulated world by a bounded number of fixed timesteps, optionally applying an action for each step, and return the resulting observation and terminal flags."},{"name":"reset","description":"Reset the simulated world to a scenario start state and return the initial observation. When a seed is supplied the endpoint records it in the receipt; otherwise the endpoint's declared default seed applies."}],"tags":["gymnasium","dm-env","dm-control","mujoco","simulation","piano","shadow-hand","bimanual","robopianist"],"backends":["fake","sim"],"served_backend":"fake","evidence":"contract_checked","upstream":{"repo_url":"https://github.com/google-research/robopianist","commit":"0d9736c64eba5faafdf214ed7d38d648ffbd5c7f","license":"Apache-2.0"},"stars":736,"install":{"openai4s":"openai4s lab add robots/google-research__robopianist","mhs":"mhs serve robots/google-research__robopianist --port 7400","mcp":"mhs serve robots/google-research__robopianist --mcp"}},
{"id":"robots/greg-lund__gym-social-navigation","name":"Social Navigation Gym environment (social-nav-train-env-v0)","device_id":"mhs://localhost/social-nav","track":"robots","category":"Simulation","topic":"mobile robots","kind":"world.sim","vendor":"greg-lund","model":"gym_social_navigation 0.0.1","mode":"simulated","risk":"R0","family":"gymnasium","role":"sim-env","intro":"Social Navigation Gym environment (social-nav-train-env-v0), adapted from greg-lund/gym-social-navigation. It reads `observation`, `reward`, `terminated`, `truncated` and 4 more; runs `step`, `reset` and `seed`. `step`: advance the simulated world by a bounded number of fixed timesteps, optionally applying an action for each step, and return the resulting observation and terminal flags. A simulator: the market serves it with a stand-in that needs no simulator install.","measures":["observation","reward","terminated","truncated","tick","episode","seed","info"],"adjusts":[],"actions":[{"name":"step","description":"Advance the simulated world by a bounded number of fixed timesteps, optionally applying an action for each step, and return the resulting observation and terminal flags."},{"name":"reset","description":"Reset the simulated world to a scenario start state and return the initial observation. When a seed is supplied the endpoint records it in the receipt; otherwise the endpoint's declared default seed applies."},{"name":"seed","description":"Set the seed used by the simulated world's random number generators for subsequent steps, without resetting the world. The accepted seed is echoed in the receipt."}],"tags":["social-navigation","pedestrian","dubins-car","reinforcement-learning","simulation","gym"],"backends":["fake"],"served_backend":"fake","evidence":"contract_checked","upstream":{"repo_url":"https://github.com/greg-lund/gym-social-navigation","commit":"bdc8e72c0f7f738ebe99b6966b1c37af26a342af","license":"NOASSERTION"},"stars":4,"install":{"openai4s":"openai4s lab add robots/greg-lund__gym-social-navigation","mhs":"mhs serve robots/greg-lund__gym-social-navigation --port 7400","mcp":"mhs serve robots/greg-lund__gym-social-navigation --mcp"}},
{"id":"robots/gsilano__crazys","name":"CrazyS Crazyflie 2.0 simulator","device_id":"mhs://localhost/crazys","track":"robots","category":"Simulation","topic":"UAVs","kind":"world.sim","vendor":"Giuseppe Silano","model":"Crazyflie 2.0","mode":"simulated","risk":"R2","family":"ros","role":"sim-env","intro":"CrazyS Crazyflie 2.0 simulator, adapted from gsilano/crazys. It reads `read_odometry`; runs `publish_attitude_thrust`. `publish_attitude_thrust`: publish a roll/pitch/yaw-rate/thrust setpoint on the Crazyflie command topic; publication is fire-and-forget and does not confirm flight or stopping. A simulator: the market serves it with a stand-in that needs no simulator install.","measures":["read_odometry"],"adjusts":[],"actions":[{"name":"publish_attitude_thrust","description":"Publish a roll/pitch/yaw-rate/thrust setpoint on the Crazyflie command topic; publication is fire-and-forget and does not confirm flight or stopping"}],"tags":["ros","ros1","simulation","gazebo","crazyflie","uav","quadrotor","odometry"],"backends":["fake"],"served_backend":"fake","evidence":"contract_checked","upstream":{"repo_url":"https://github.com/gsilano/crazys","commit":"c7ee25a7c6f89d41468e33c857ded99f3e804e70","license":"Apache-2.0"},"stars":0,"install":{"openai4s":"openai4s lab add robots/gsilano__crazys","mhs":"mhs serve robots/gsilano__crazys --port 7400","mcp":"mhs serve robots/gsilano__crazys --mcp"}},
{"id":"robots/gustavo-moura__itomori","name":"Itomori Navigation2D UAV environment","device_id":"mhs://localhost/itomori_navigation2d","track":"robots","category":"Simulation","topic":"UAVs","kind":"world.sim","vendor":"Gustavo de Moura","model":"Navigation2DEnv-v0","mode":"simulated","risk":"R0","family":"gymnasium","role":"sim-env","intro":"Itomori Navigation2D UAV environment, adapted from gustavo-moura/itomori. It reads `observation`, `reward`, `terminated`, `truncated` and 4 more; runs `step`, `reset` and `seed`. `step`: advance the simulated world by a bounded number of fixed timesteps, optionally applying an action for each step, and return the resulting observation and terminal flags. A simulator: the market serves it with a stand-in that needs no simulator install.","measures":["observation","reward","terminated","truncated","tick","episode","seed","info"],"adjusts":[],"actions":[{"name":"step","description":"Advance the simulated world by a bounded number of fixed timesteps, optionally applying an action for each step, and return the resulting observation and terminal flags."},{"name":"reset","description":"Reset the simulated world to a scenario start state and return the initial observation. When a seed is supplied the endpoint records it in the receipt; otherwise the endpoint's declared default seed applies."},{"name":"seed","description":"Set the seed used by the simulated world's random number generators for subsequent steps, without resetting the world. The accepted seed is echoed in the receipt."}],"tags":["uav","navigation","risk-aware","reinforcement-learning","simulation","gymnasium"],"backends":["fake"],"served_backend":"fake","evidence":"contract_checked","upstream":{"repo_url":"https://github.com/gustavo-moura/itomori","commit":"0c2da173bf989736f919772d3c6cbc2fea098b72","license":"MIT"},"stars":0,"install":{"openai4s":"openai4s lab add robots/gustavo-moura__itomori","mhs":"mhs serve robots/gustavo-moura__itomori --port 7400","mcp":"mhs serve robots/gustavo-moura__itomori --mcp"}},
{"id":"robots/hanruihua__rl_rvo_nav","name":"rl_rvo_nav multi-robot navigation (mrnav-v1)","device_id":"mhs://localhost/rl-rvo-nav","track":"robots","category":"Simulation","topic":"multi-robot systems","kind":"world.sim","vendor":"Han Ruihua","model":"rl_rvo_nav","mode":"simulated","risk":"R0","family":"gymnasium","role":"sim-env","intro":"rl_rvo_nav multi-robot navigation (mrnav-v1), adapted from hanruihua/rl_rvo_nav. It reads `observation` and `tick`; runs `step_world` and `reset_world`. `step_world`: advance the simulated world by a bounded number of fixed timesteps, optionally applying an action for each step, and return the resulting observation and terminal flags. A simulator: the market serves it with a stand-in that needs no simulator install.","measures":["observation","tick"],"adjusts":[],"actions":[{"name":"step_world","description":"Advance the simulated world by a bounded number of fixed timesteps, optionally applying an action for each step, and return the resulting observation and terminal flags."},{"name":"reset_world","description":"Reset the simulated world to a scenario start state and return the initial observation. When a seed is supplied the endpoint records it in the receipt; otherwise the endpoint's declared default seed applies."}],"tags":["multi-robot","navigation","reinforcement-learning","rvo","simulation","gym"],"backends":["fake"],"served_backend":"fake","evidence":"contract_checked","upstream":{"repo_url":"https://github.com/hanruihua/rl_rvo_nav","commit":"6cdb70c731293dd92fa6f84cd6878a28bf259191","license":"MIT"},"stars":296,"install":{"openai4s":"openai4s lab add robots/hanruihua__rl_rvo_nav","mhs":"mhs serve robots/hanruihua__rl_rvo_nav --port 7400","mcp":"mhs serve robots/hanruihua__rl_rvo_nav --mcp"}},
{"id":"robots/hanshangzhu__collab_qrc","name":"collab_qrc MuJoCo VLM exploration scene","device_id":"mhs://localhost/collab_qrc","track":"robots","category":"Simulation","topic":"multi-robot systems","kind":"world.sim","vendor":"hanshangzhu","model":"vlm_exploration_scene","mode":"simulated","risk":"R0","family":"mujoco","role":"sim-env","intro":"collab_qrc MuJoCo VLM exploration scene, adapted from hanshangzhu/collab_qrc. It reads `time_ms`, `qpos`, `qvel`, `ctrl` and 4 more; runs `step` and `reset`. `step`: advance the simulated world by a bounded number of fixed timesteps, optionally applying an action for each step, and return the resulting observation and terminal flags. A simulator: the market serves it with a stand-in that needs no simulator install.","measures":["time_ms","qpos","qvel","ctrl","tick","timestep_ms","seed","native_checkpoint"],"adjusts":[],"actions":[{"name":"step","description":"Advance the simulated world by a bounded number of fixed timesteps, optionally applying an action for each step, and return the resulting observation and terminal flags."},{"name":"reset","description":"Reset the simulated world to a scenario start state and return the initial observation. When a seed is supplied the endpoint records it in the receipt; otherwise the endpoint's declared default seed applies."}],"tags":["mujoco","mjcf","simulation","quadruped","go2w","go2","ros2","multi-robot"],"backends":["fake"],"served_backend":"fake","evidence":"contract_checked","upstream":{"repo_url":"https://github.com/hanshangzhu/collab_qrc","commit":"f9e6998d2f7b086f60810b35683791c8c6a41d87","license":"NOASSERTION"},"stars":6,"install":{"openai4s":"openai4s lab add robots/hanshangzhu__collab_qrc","mhs":"mhs serve robots/hanshangzhu__collab_qrc --port 7400","mcp":"mhs serve robots/hanshangzhu__collab_qrc --mcp"}},
{"id":"robots/haosulab__maniskill-legacy","name":"ManiSkill legacy OpenCabinetDoor-v0 (simulated)","device_id":"mhs://localhost/maniskill_open_cabinet_door","track":"robots","category":"Simulation","topic":"robot manipulation","kind":"world.sim","vendor":"Haosulab","model":"ManiSkill legacy OpenCabinetDoor-v0","mode":"simulated","risk":"R0","family":"gymnasium","role":"sim-env","intro":"ManiSkill legacy OpenCabinetDoor-v0 (simulated), adapted from haosulab/maniskill-legacy. It reads `observation`, `reward`, `terminated`, `truncated` and 4 more; runs `step`, `reset` and `seed`. `step`: advance the simulated world by a bounded number of fixed timesteps, optionally applying an action for each step, and return the resulting observation and terminal flags. A simulator: the market serves it with a stand-in that needs no simulator install.","measures":["observation","reward","terminated","truncated","tick","episode","seed","info"],"adjusts":[],"actions":[{"name":"step","description":"Advance the simulated world by a bounded number of fixed timesteps, optionally applying an action for each step, and return the resulting observation and terminal flags."},{"name":"reset","description":"Reset the simulated world to a scenario start state and return the initial observation. When a seed is supplied the endpoint records it in the receipt; otherwise the endpoint's declared default seed applies."},{"name":"seed","description":"Set the seed used by the simulated world's random number generators for subsequent steps, without resetting the world. The accepted seed is echoed in the receipt."}],"tags":["maniskill","manipulation","cabinet-door","simulation","gym","gymnasium"],"backends":["fake"],"served_backend":"fake","evidence":"contract_checked","upstream":{"repo_url":"https://github.com/haosulab/maniskill-legacy","commit":"58964d08b4c7d2e14c5e6e287dbb9430d900f54d","license":"Apache-2.0"},"stars":156,"install":{"openai4s":"openai4s lab add robots/haosulab__maniskill-legacy","mhs":"mhs serve robots/haosulab__maniskill-legacy --port 7400","mcp":"mhs serve robots/haosulab__maniskill-legacy --mcp"}},
{"id":"robots/harunteper__auna","name":"AuNa Gazebo Ackermann race car","device_id":"mhs://localhost/auna","track":"robots","category":"Mobile robots","topic":null,"kind":"robot.mobile_base","vendor":"Harun Teper","model":"race_car","mode":"simulated","risk":"R2","family":"ros","role":"sim-env","intro":"AuNa Gazebo Ackermann race car, adapted from harunteper/auna. It reads `read_velocity_source`; runs `select_velocity_source`, `publish_teleop_velocity` and `stop_velocity_source`. `select_velocity_source`: select one configured multiplexer input source. Selecting OFF stops forwarding and makes the timer publish zero commands; selecting a motion source can immediately re-publish that source's cached last command. A simulator: the market serves it with a stand-in that needs no simulator install.","measures":["read_velocity_source"],"adjusts":[],"actions":[{"name":"select_velocity_source","description":"Select one configured multiplexer input source. Selecting OFF stops forwarding and makes the timer publish zero commands; selecting a motion source can immediately re-publish that source's cached last command."},{"name":"publish_teleop_velocity","description":"Publish one speed and steering-angle command on the teleop multiplexer input. The multiplexer caches it and repeats it at its timer rate only while the teleop source is selected. The receipt confirms transmission to rosbridge, not motion, arrival or stopping."},{"name":"stop_velocity_source","description":"Set the multiplexer velocity source to OFF, making its timer publish zero speed and steering commands. Input-free, acknowledged service call; no input is accepted during the latch."}],"tags":["ros","ros2","gazebo","simulation","mobile-base","cmd-vel","ackermann"],"backends":["fake"],"served_backend":"fake","evidence":"contract_checked","upstream":{"repo_url":"https://github.com/harunteper/auna","commit":"1d8bb13d574deca84c42e0bc9a0ff04d470d371f","license":"MIT"},"stars":23,"install":{"openai4s":"openai4s lab add robots/harunteper__auna","mhs":"mhs serve robots/harunteper__auna --port 7400","mcp":"mhs serve robots/harunteper__auna --mcp"}},
{"id":"robots/harveybc__gym-fx","name":"gym-fx backtrader trading environment","device_id":"mhs://localhost/gym-fx","track":"robots","category":"Simulation","topic":null,"kind":"world.sim","vendor":"harveybc","model":"gym-fx","mode":"simulated","risk":"R0","family":"gymnasium","role":"sim-env","intro":"gym-fx backtrader trading environment, adapted from harveybc/gym-fx. It reads `observation`, `reward`, `terminated`, `truncated` and 4 more; runs `step`, `reset` and `seed`. `step`: advance the simulated world by a bounded number of fixed timesteps, optionally applying an action for each step, and return the resulting observation and terminal flags. A simulator: the market serves it with a stand-in that needs no simulator install.","measures":["observation","reward","terminated","truncated","tick","episode","seed","info"],"adjusts":[],"actions":[{"name":"step","description":"Advance the simulated world by a bounded number of fixed timesteps, optionally applying an action for each step, and return the resulting observation and terminal flags."},{"name":"reset","description":"Reset the simulated world to a scenario start state and return the initial observation. When a seed is supplied the endpoint records it in the receipt; otherwise the endpoint's declared default seed applies."},{"name":"seed","description":"Set the seed used by the simulated world's random number generators for subsequent steps, without resetting the world. The accepted seed is echoed in the receipt."}],"tags":["trading","forex","crypto","backtrader","reinforcement-learning","simulation","gymnasium"],"backends":["fake"],"served_backend":"fake","evidence":"contract_checked","upstream":{"repo_url":"https://github.com/harveybc/gym-fx","commit":"1eeecb789965f3e01e9e51f479c6f89265b03859","license":"NOASSERTION"},"stars":210,"install":{"openai4s":"openai4s lab add robots/harveybc__gym-fx","mhs":"mhs serve robots/harveybc__gym-fx --port 7400","mcp":"mhs serve robots/harveybc__gym-fx --mcp"}},
{"id":"robots/healthcare-robotics__assistive-gym","name":"Assistive Gym HumanTesting-v1 (PyBullet human arm test)","device_id":"mhs://localhost/assistive-human-testing","track":"robots","category":"Simulation","topic":"robot arm manipulation","kind":"world.sim","vendor":"Healthcare Robotics","model":"HumanTesting-v1","mode":"simulated","risk":"R0","family":"gymnasium","role":"sim-env","intro":"Assistive Gym HumanTesting-v1 (PyBullet human arm test), adapted from healthcare-robotics/assistive-gym. It reads `observation`, `reward`, `terminated`, `truncated` and 4 more; runs `step`, `reset` and `seed`. `step`: advance the simulated world by a bounded number of fixed timesteps, optionally applying an action for each step, and return the resulting observation and terminal flags. A simulator: the market serves it with a stand-in that needs no simulator install.","measures":["observation","reward","terminated","truncated","tick","episode","seed","info"],"adjusts":[],"actions":[{"name":"step","description":"Advance the simulated world by a bounded number of fixed timesteps, optionally applying an action for each step, and return the resulting observation and terminal flags."},{"name":"reset","description":"Reset the simulated world to a scenario start state and return the initial observation. When a seed is supplied the endpoint records it in the receipt; otherwise the endpoint's declared default seed applies."},{"name":"seed","description":"Set the seed used by the simulated world's random number generators for subsequent steps, without resetting the world. The accepted seed is echoed in the receipt."}],"tags":["assistive-gym","pybullet","human-robot-interaction","simulation","gym","testing"],"backends":["fake"],"served_backend":"fake","evidence":"contract_checked","upstream":{"repo_url":"https://github.com/healthcare-robotics/assistive-gym","commit":"fb799c377e1f144ff96044fb9096725f7f9cfc61","license":"MIT"},"stars":413,"install":{"openai4s":"openai4s lab add robots/healthcare-robotics__assistive-gym","mhs":"mhs serve robots/healthcare-robotics__assistive-gym --port 7400","mcp":"mhs serve robots/healthcare-robotics__assistive-gym --mcp"}},
{"id":"robots/heleidsn__uav_navigation_drl_airsim","name":"UAV Navigation DRL AirSim (NH_center, SimpleMultirotor 3D)","device_id":"mhs://localhost/uav-navigation-drl-airsim","track":"robots","category":"Simulation","topic":"UAVs","kind":"world.sim","vendor":"heleidsn","model":"UAV_Navigation_DRL_AirSim","mode":"simulated","risk":"R0","family":"gymnasium","role":"sim-env","intro":"UAV Navigation DRL AirSim (NH_center, SimpleMultirotor 3D), adapted from heleidsn/uav_navigation_drl_airsim. It reads `observation`, `reward`, `terminated`, `truncated` and 4 more; runs `step`, `reset` and `seed`. `step`: advance the simulated world by a bounded number of fixed timesteps, optionally applying an action for each step, and return the resulting observation and terminal flags. A simulator: the market serves it with a stand-in that needs no simulator install.","measures":["observation","reward","terminated","truncated","tick","episode","seed","info"],"adjusts":[],"actions":[{"name":"step","description":"Advance the simulated world by a bounded number of fixed timesteps, optionally applying an action for each step, and return the resulting observation and terminal flags."},{"name":"reset","description":"Reset the simulated world to a scenario start state and return the initial observation. When a seed is supplied the endpoint records it in the receipt; otherwise the endpoint's declared default seed applies."},{"name":"seed","description":"Set the seed used by the simulated world's random number generators for subsequent steps, without resetting the world. The accepted seed is echoed in the receipt."}],"tags":["uav","airsim","gym","reinforcement-learning","navigation","simulation","kinematic"],"backends":["fake"],"served_backend":"fake","evidence":"contract_checked","upstream":{"repo_url":"https://github.com/heleidsn/uav_navigation_drl_airsim","commit":"389e5220595361dc26a0b84c75bc4e6cde3a3112","license":"NOASSERTION"},"stars":571,"install":{"openai4s":"openai4s lab add robots/heleidsn__uav_navigation_drl_airsim","mhs":"mhs serve robots/heleidsn__uav_navigation_drl_airsim --port 7400","mcp":"mhs serve robots/heleidsn__uav_navigation_drl_airsim --mcp"}},
{"id":"robots/hello-robot__stretch_mujoco","name":"Hello Robot Stretch (MuJoCo simulation)","device_id":"mhs://localhost/stretch","track":"robots","category":"Simulation","topic":"mobile robots","kind":"world.sim","vendor":"Hello Robot","model":"Stretch SE3","mode":"simulated","risk":"R0","family":"mujoco","role":"twin-candidate","intro":"Hello Robot Stretch (MuJoCo simulation), adapted from hello-robot/stretch_mujoco. It reads `time_ms`, `qpos`, `qvel`, `ctrl` and 4 more; runs `step` and `reset`. `step`: advance the simulated world by a bounded number of fixed timesteps, optionally applying an action for each step, and return the resulting observation and terminal flags. A simulator: the market serves it with a stand-in that needs no simulator install.","measures":["time_ms","qpos","qvel","ctrl","tick","timestep_ms","seed","native_checkpoint"],"adjusts":[],"actions":[{"name":"step","description":"Advance the simulated world by a bounded number of fixed timesteps, optionally applying an action for each step, and return the resulting observation and terminal flags."},{"name":"reset","description":"Reset the simulated world to a scenario start state and return the initial observation. When a seed is supplied the endpoint records it in the receipt; otherwise the endpoint's declared default seed applies."}],"tags":["stretch","hello-robot","mobile-manipulator","mujoco","simulation","robot"],"backends":["fake"],"served_backend":"fake","evidence":"contract_checked","upstream":{"repo_url":"https://github.com/hello-robot/stretch_mujoco","commit":"c78d6a1cd79bb5ead1b679610299563c1a91124a","license":"BSD-3-Clause-Clear"},"stars":70,"install":{"openai4s":"openai4s lab add robots/hello-robot__stretch_mujoco","mhs":"mhs serve robots/hello-robot__stretch_mujoco --port 7400","mcp":"mhs serve robots/hello-robot__stretch_mujoco --mcp"}},
{"id":"robots/henrycharlesworth__dexterous-gym","name":"Dexterous Gym EggHandOver-v0 (two fixed Shadow hands, egg handover)","device_id":"mhs://localhost/dexterous-egg-handover","track":"robots","category":"Simulation","topic":"robot arm manipulation","kind":"world.sim","vendor":"Henry Charlesworth","model":"dexterous-gym 0.1.6","mode":"simulated","risk":"R0","family":"gymnasium","role":"sim-env","intro":"Dexterous Gym EggHandOver-v0 (two fixed Shadow hands, egg handover), adapted from henrycharlesworth/dexterous-gym. It reads `observation`, `reward`, `terminated`, `truncated` and 4 more; runs `step`, `reset` and `seed`. `step`: advance the simulated world by a bounded number of fixed timesteps, optionally applying an action for each step, and return the resulting observation and terminal flags. A simulator: the market serves it with a stand-in that needs no simulator install.","measures":["observation","reward","terminated","truncated","tick","episode","seed","info"],"adjusts":[],"actions":[{"name":"step","description":"Advance the simulated world by a bounded number of fixed timesteps, optionally applying an action for each step, and return the resulting observation and terminal flags."},{"name":"reset","description":"Reset the simulated world to a scenario start state and return the initial observation. When a seed is supplied the endpoint records it in the receipt; otherwise the endpoint's declared default seed applies."},{"name":"seed","description":"Set the seed used by the simulated world's random number generators for subsequent steps, without resetting the world. The accepted seed is echoed in the receipt."}],"tags":["dexterous-gym","hand-manipulation","mujoco","reinforcement-learning","simulation","gym"],"backends":["fake"],"served_backend":"fake","evidence":"contract_checked","upstream":{"repo_url":"https://github.com/henrycharlesworth/dexterous-gym","commit":"dd047ad7f47ba78e2a4e2642e39bc0c0b778e594","license":"NOASSERTION"},"stars":0,"install":{"openai4s":"openai4s lab add robots/henrycharlesworth__dexterous-gym","mhs":"mhs serve robots/henrycharlesworth__dexterous-gym --port 7400","mcp":"mhs serve robots/henrycharlesworth__dexterous-gym --mcp"}},
{"id":"robots/hewlettpackard__dc-rl","name":"SustainDC data-center control benchmark","device_id":"mhs://localhost/sustaindc","track":"robots","category":"Simulation","topic":null,"kind":"world.sim","vendor":"Hewlett Packard Enterprise","model":"SustainDC","mode":"simulated","risk":"R0","family":"gymnasium","role":"sim-env","intro":"SustainDC data-center control benchmark, adapted from hewlettpackard/dc-rl. It reads `observation`, `reward`, `terminated`, `truncated` and 4 more; runs `step`, `reset` and `seed`. `step`: advance the simulated world by a bounded number of fixed timesteps, optionally applying an action for each step, and return the resulting observation and terminal flags. A simulator: the market serves it with a stand-in that needs no simulator install.","measures":["observation","reward","terminated","truncated","tick","episode","seed","info"],"adjusts":[],"actions":[{"name":"step","description":"Advance the simulated world by a bounded number of fixed timesteps, optionally applying an action for each step, and return the resulting observation and terminal flags."},{"name":"reset","description":"Reset the simulated world to a scenario start state and return the initial observation. When a seed is supplied the endpoint records it in the receipt; otherwise the endpoint's declared default seed applies."},{"name":"seed","description":"Set the seed used by the simulated world's random number generators for subsequent steps, without resetting the world. The accepted seed is echoed in the receipt."}],"tags":["sustaindc","datacenter","multi-agent","energy","carbon","battery","reinforcement-learning","simulation","gymnasium"],"backends":["fake"],"served_backend":"fake","evidence":"contract_checked","upstream":{"repo_url":"https://github.com/hewlettpackard/dc-rl","commit":"a92b4755aca560e34a98d14028dda629eb968482","license":"MIT"},"stars":126,"install":{"openai4s":"openai4s lab add robots/hewlettpackard__dc-rl","mhs":"mhs serve robots/hewlettpackard__dc-rl --port 7400","mcp":"mhs serve robots/hewlettpackard__dc-rl --mcp"}},
{"id":"robots/hewlettpackard__sustain-cluster","name":"SustainCluster TaskSchedulingEnv (geo-distributed datacenter scheduling benchmark)","device_id":"mhs://localhost/sustain-cluster","track":"robots","category":"Simulation","topic":null,"kind":"world.sim","vendor":"Hewlett Packard Enterprise","model":"SustainCluster","mode":"simulated","risk":"R0","family":"gymnasium","role":"sim-env","intro":"SustainCluster TaskSchedulingEnv (geo-distributed datacenter scheduling benchmark), adapted from hewlettpackard/sustain-cluster. It reads `observation`, `reward`, `terminated`, `truncated` and 4 more; runs `step`, `reset` and `seed`. `step`: advance the simulated world by a bounded number of fixed timesteps, optionally applying an action for each step, and return the resulting observation and terminal flags. A simulator: the market serves it with a stand-in that needs no simulator install.","measures":["observation","reward","terminated","truncated","tick","episode","seed","info"],"adjusts":[],"actions":[{"name":"step","description":"Advance the simulated world by a bounded number of fixed timesteps, optionally applying an action for each step, and return the resulting observation and terminal flags."},{"name":"reset","description":"Reset the simulated world to a scenario start state and return the initial observation. When a seed is supplied the endpoint records it in the receipt; otherwise the endpoint's declared default seed applies."},{"name":"seed","description":"Set the seed used by the simulated world's random number generators for subsequent steps, without resetting the world. The accepted seed is echoed in the receipt."}],"tags":["sustain-cluster","datacenter","scheduling","energy","carbon","reinforcement-learning","simulation","gymnasium"],"backends":["fake"],"served_backend":"fake","evidence":"contract_checked","upstream":{"repo_url":"https://github.com/hewlettpackard/sustain-cluster","commit":"3f6ea95cb835b89ba50b0ef76d66d14b8037643e","license":"MIT"},"stars":82,"install":{"openai4s":"openai4s lab add robots/hewlettpackard__sustain-cluster","mhs":"mhs serve robots/hewlettpackard__sustain-cluster --port 7400","mcp":"mhs serve robots/hewlettpackard__sustain-cluster --mcp"}},
{"id":"robots/hogunkee__robocasa_g1","name":"RoboCasa-G1 G1 arms-and-waist tabletop environment (simulation)","device_id":"mhs://localhost/robocasa-g1","track":"robots","category":"Simulation","topic":"humanoid robots","kind":"world.sim","vendor":"hogunkee","model":"RoboCasa-G1","mode":"simulated","risk":"R1","family":"gymnasium","role":"sim-env","intro":"RoboCasa-G1 G1 arms-and-waist tabletop environment (simulation), adapted from hogunkee/robocasa_g1. It reads `observation`, `reward`, `terminated`, `truncated` and 4 more; runs `step`, `reset_world` and `set_seed`. `step`: advance the simulated world by a bounded number of fixed timesteps, optionally applying an action for each step, and return the resulting observation and terminal flags. A simulator: the market serves it with a stand-in that needs no simulator install.","measures":["observation","reward","terminated","truncated","tick","episode","seed","info"],"adjusts":[],"actions":[{"name":"step","description":"Advance the simulated world by a bounded number of fixed timesteps, optionally applying an action for each step, and return the resulting observation and terminal flags."},{"name":"reset_world","description":"Reset the simulated world to a scenario start state and return the initial observation. When a seed is supplied the endpoint records it in the receipt; otherwise the endpoint's declared default seed applies."},{"name":"set_seed","description":"Set the seed used by the simulated world's random number generators for subsequent steps, without resetting the world. The accepted seed is echoed in the receipt."}],"tags":["robocasa","robosuite","gymnasium","tabletop","manipulation","humanoid","unitree-g1","simulation","reinforcement-learning"],"backends":["fake"],"served_backend":"fake","evidence":"contract_checked","upstream":{"repo_url":"https://github.com/hogunkee/robocasa_g1","commit":"6796d20bbee3fbe49e8f80a08f04bece07f481fd","license":"MIT"},"stars":2,"install":{"openai4s":"openai4s lab add robots/hogunkee__robocasa_g1","mhs":"mhs serve robots/hogunkee__robocasa_g1 --port 7400","mcp":"mhs serve robots/hogunkee__robocasa_g1 --mcp"}},
{"id":"robots/hrjp__easys_sim","name":"Easys simulated camera and balloon detector","device_id":"mhs://localhost/easys-camera","track":"robots","category":"Sensors and cameras","topic":null,"kind":"sensor.camera","vendor":"hrjp","model":"Easys camera and balloon_detect pipeline","mode":"simulated","risk":"R0","family":"ros","role":"sim-env","intro":"Easys simulated camera and balloon detector, adapted from hrjp/easys_sim. It runs `capture`. `capture`: capture a single image from a named camera with a declared resolution and exposure and return an image artifact reference. A simulator: the market serves it with a stand-in that needs no simulator install.","measures":[],"adjusts":[],"actions":[{"name":"capture","description":"Capture a single image from a named camera with a declared resolution and exposure and return an image artifact reference."}],"tags":["ros","ros2","gazebo","simulation","camera","image","balloon","underwater"],"backends":["fake"],"served_backend":"fake","evidence":"contract_checked","upstream":{"repo_url":"https://github.com/hrjp/easys_sim","commit":"65f5daeb8fb82970ea03b5a0cc7a24509ea8c5c5","license":"Apache-2.0"},"stars":4,"install":{"openai4s":"openai4s lab add robots/hrjp__easys_sim","mhs":"mhs serve robots/hrjp__easys_sim --port 7400","mcp":"mhs serve robots/hrjp__easys_sim --mcp"}},
{"id":"robots/hshi74__toddlerbot","name":"ToddlerBot 2XC scene (MuJoCo)","device_id":"mhs://localhost/toddlerbot_2xc","track":"robots","category":"Simulation","topic":"humanoid robots","kind":"world.sim","vendor":"Haochen Shi","model":"ToddlerBot 2XC","mode":"simulated","risk":"R0","family":"mujoco","role":"sim-env","intro":"ToddlerBot 2XC scene (MuJoCo), adapted from hshi74/toddlerbot. It reads `time_ms`, `qpos`, `qvel`, `ctrl` and 4 more; runs `step` and `reset`. `step`: advance the simulated world by a bounded number of fixed timesteps, optionally applying an action for each step, and return the resulting observation and terminal flags. A simulator: the market serves it with a stand-in that needs no simulator install.","measures":["time_ms","qpos","qvel","ctrl","tick","timestep_ms","seed","native_checkpoint"],"adjusts":[],"actions":[{"name":"step","description":"Advance the simulated world by a bounded number of fixed timesteps, optionally applying an action for each step, and return the resulting observation and terminal flags."},{"name":"reset","description":"Reset the simulated world to a scenario start state and return the initial observation. When a seed is supplied the endpoint records it in the receipt; otherwise the endpoint's declared default seed applies."}],"tags":["humanoid","locomotion","mujoco","simulation","toddlerbot","world","scene"],"backends":["fake"],"served_backend":"fake","evidence":"contract_checked","upstream":{"repo_url":"https://github.com/hshi74/toddlerbot","commit":"e337f3b177b4b53abff70b31d1695a7b66cc6d2e","license":"MIT"},"stars":0,"install":{"openai4s":"openai4s lab add robots/hshi74__toddlerbot","mhs":"mhs serve robots/hshi74__toddlerbot --port 7400","mcp":"mhs serve robots/hshi74__toddlerbot --mcp"}},
{"id":"robots/hsp-iit__pybullet-robot-envs","name":"PyBullet iCubReach-v0 (iCub reach simulation)","device_id":"mhs://localhost/icub-reach","track":"robots","category":"Simulation","topic":"robot manipulation","kind":"world.sim","vendor":"Istituto Italiano di Tecnologia (IIT)","model":"iCubReach-v0","mode":"simulated","risk":"R0","family":"gymnasium","role":"sim-env","intro":"PyBullet iCubReach-v0 (iCub reach simulation), adapted from hsp-iit/pybullet-robot-envs. It reads `observation`, `reward`, `terminated`, `truncated` and 4 more; runs `step`, `reset` and `seed`. `step`: advance the simulated world by a bounded number of fixed timesteps, optionally applying an action for each step, and return the resulting observation and terminal flags. A simulator: the market serves it with a stand-in that needs no simulator install.","measures":["observation","reward","terminated","truncated","tick","episode","seed","info"],"adjusts":[],"actions":[{"name":"step","description":"Advance the simulated world by a bounded number of fixed timesteps, optionally applying an action for each step, and return the resulting observation and terminal flags."},{"name":"reset","description":"Reset the simulated world to a scenario start state and return the initial observation. When a seed is supplied the endpoint records it in the receipt; otherwise the endpoint's declared default seed applies."},{"name":"seed","description":"Set the seed used by the simulated world's random number generators for subsequent steps, without resetting the world. The accepted seed is echoed in the receipt."}],"tags":["icub","reach","manipulation","pybullet","reinforcement-learning","simulation","gym"],"backends":["fake"],"served_backend":"fake","evidence":"contract_checked","upstream":{"repo_url":"https://github.com/hsp-iit/pybullet-robot-envs","commit":"8fb3f9ba1f1a0dec4cd1e96e26556afbd89cbd59","license":"LGPL-2.1"},"stars":201,"install":{"openai4s":"openai4s lab add robots/hsp-iit__pybullet-robot-envs","mhs":"mhs serve robots/hsp-iit__pybullet-robot-envs --port 7400","mcp":"mhs serve robots/hsp-iit__pybullet-robot-envs --mcp"}},
{"id":"robots/huggingface__gym-aloha","name":"gym-aloha ALOHA bimanual simulation (AlohaInsertion-v0)","device_id":"mhs://localhost/aloha","track":"robots","category":"Simulation","topic":"robot arm manipulation","kind":"world.sim","vendor":"Hugging Face","model":"gym-aloha 0.1.4","mode":"simulated","risk":"R0","family":"gymnasium","role":"sim-env","intro":"gym-aloha ALOHA bimanual simulation (AlohaInsertion-v0), adapted from huggingface/gym-aloha. It reads `observation`, `reward`, `terminated`, `truncated` and 4 more; runs `step`, `reset` and `seed`. `step`: advance the simulated world by a bounded number of fixed timesteps, optionally applying an action for each step, and return the resulting observation and terminal flags. A simulator: the market serves it with a stand-in that needs no simulator install.","measures":["observation","reward","terminated","truncated","tick","episode","seed","info"],"adjusts":[],"actions":[{"name":"step","description":"Advance the simulated world by a bounded number of fixed timesteps, optionally applying an action for each step, and return the resulting observation and terminal flags."},{"name":"reset","description":"Reset the simulated world to a scenario start state and return the initial observation. When a seed is supplied the endpoint records it in the receipt; otherwise the endpoint's declared default seed applies."},{"name":"seed","description":"Set the seed used by the simulated world's random number generators for subsequent steps, without resetting the world. The accepted seed is echoed in the receipt."}],"tags":["aloha","bimanual","manipulation","reinforcement-learning","simulation","mujoco","gymnasium"],"backends":["fake"],"served_backend":"fake","evidence":"contract_checked","upstream":{"repo_url":"https://github.com/huggingface/gym-aloha","commit":"bd3325740ea8d1c97411c41ea1e0f4ce0a7de8da","license":"Apache-2.0"},"stars":222,"install":{"openai4s":"openai4s lab add robots/huggingface__gym-aloha","mhs":"mhs serve robots/huggingface__gym-aloha --port 7400","mcp":"mhs serve robots/huggingface__gym-aloha --mcp"}},
{"id":"robots/huggingface__gym-pusht","name":"gym-pusht PushT 2D manipulation simulation (PushT-v0)","device_id":"mhs://localhost/pusht","track":"robots","category":"Simulation","topic":"robot arm manipulation","kind":"world.sim","vendor":"Hugging Face","model":"gym-pusht 0.1.7","mode":"simulated","risk":"R0","family":"gymnasium","role":"sim-env","intro":"gym-pusht PushT 2D manipulation simulation (PushT-v0), adapted from huggingface/gym-pusht. It reads `observation`, `reward`, `terminated`, `truncated` and 4 more; runs `step`, `reset` and `seed`. `step`: advance the simulated world by a bounded number of fixed timesteps, optionally applying an action for each step, and return the resulting observation and terminal flags. A simulator: the market serves it with a stand-in that needs no simulator install.","measures":["observation","reward","terminated","truncated","tick","episode","seed","info"],"adjusts":[],"actions":[{"name":"step","description":"Advance the simulated world by a bounded number of fixed timesteps, optionally applying an action for each step, and return the resulting observation and terminal flags."},{"name":"reset","description":"Reset the simulated world to a scenario start state and return the initial observation. When a seed is supplied the endpoint records it in the receipt; otherwise the endpoint's declared default seed applies."},{"name":"seed","description":"Set the seed used by the simulated world's random number generators for subsequent steps, without resetting the world. The accepted seed is echoed in the receipt."}],"tags":["pusht","2d-manipulation","reinforcement-learning","simulation","pymunk","gymnasium"],"backends":["fake"],"served_backend":"fake","evidence":"contract_checked","upstream":{"repo_url":"https://github.com/huggingface/gym-pusht","commit":"1dce32970bc3d25e7fad5872c3020159bc5eb31f","license":"Apache-2.0"},"stars":0,"install":{"openai4s":"openai4s lab add robots/huggingface__gym-pusht","mhs":"mhs serve robots/huggingface__gym-pusht --port 7400","mcp":"mhs serve robots/huggingface__gym-pusht --mcp"}},
{"id":"robots/huggingface__lerobot-humanoid","name":"LeRobot humanoid bipedal platform (MuJoCo simulation)","device_id":"mhs://localhost/lerobot-humanoid","track":"robots","category":"Simulation","topic":"humanoid robots","kind":"world.sim","vendor":"Hugging Face LeRobot","model":"bipedal_plateform","mode":"simulated","risk":"R0","family":"mujoco","role":"twin-candidate","intro":"LeRobot humanoid bipedal platform (MuJoCo simulation), adapted from huggingface/lerobot-humanoid. It reads `time_ms`, `qpos`, `qvel`, `ctrl` and 4 more; runs `step` and `reset`. `step`: advance the simulated world by a bounded number of fixed timesteps, optionally applying an action for each step, and return the resulting observation and terminal flags. A simulator: the market serves it with a stand-in that needs no simulator install.","measures":["time_ms","qpos","qvel","ctrl","tick","timestep_ms","seed","native_checkpoint"],"adjusts":[],"actions":[{"name":"step","description":"Advance the simulated world by a bounded number of fixed timesteps, optionally applying an action for each step, and return the resulting observation and terminal flags."},{"name":"reset","description":"Reset the simulated world to a scenario start state and return the initial observation. When a seed is supplied the endpoint records it in the receipt; otherwise the endpoint's declared default seed applies."}],"tags":["huggingface","lerobot","humanoid","bipedal","mujoco","simulation","robot"],"backends":["fake"],"served_backend":"fake","evidence":"contract_checked","upstream":{"repo_url":"https://github.com/huggingface/lerobot-humanoid","commit":"d0b0d9c51853a1e821a12186e9796cded1b79b4b","license":"NOASSERTION"},"stars":258,"install":{"openai4s":"openai4s lab add robots/huggingface__lerobot-humanoid","mhs":"mhs serve robots/huggingface__lerobot-humanoid --port 7400","mcp":"mhs serve robots/huggingface__lerobot-humanoid --mcp"}},
{"id":"robots/huggingface__lerobot-libero","name":"LIBERO coffee-table manipulation environment","device_id":"mhs://localhost/libero-coffee-table","track":"robots","category":"Simulation","topic":"robot manipulation","kind":"world.sim","vendor":"Hugging Face","model":"LIBERO Coffee Table Manipulation","mode":"simulated","risk":"R0","family":"mujoco","role":"sim-env","intro":"LIBERO coffee-table manipulation environment, adapted from huggingface/lerobot-libero. It reads `observation`, `tick`, `seed`, `reward` and 1 more; runs `reset_world` and `step`. `reset_world`: reset the simulated world to a scenario start state and return the initial observation. When a seed is supplied the endpoint records it in the receipt; otherwise the endpoint's declared default seed applies. A simulator: the market serves it with a stand-in that needs no simulator install.","measures":["observation","tick","seed","reward","terminated"],"adjusts":[],"actions":[{"name":"reset_world","description":"Reset the simulated world to a scenario start state and return the initial observation. When a seed is supplied the endpoint records it in the receipt; otherwise the endpoint's declared default seed applies."},{"name":"step","description":"Advance the simulated world by a bounded number of fixed timesteps, optionally applying an action for each step, and return the resulting observation and terminal flags."}],"tags":["libero","robosuite","mujoco","manipulation","simulation","benchmark"],"backends":["fake"],"served_backend":"fake","evidence":"contract_checked","upstream":{"repo_url":"https://github.com/huggingface/lerobot-libero","commit":"14fd6f022ff6647defc24e73563b95aa36670f43","license":"MIT"},"stars":23,"install":{"openai4s":"openai4s lab add robots/huggingface__lerobot-libero","mhs":"mhs serve robots/huggingface__lerobot-libero --port 7400","mcp":"mhs serve robots/huggingface__lerobot-libero --mcp"}},
{"id":"robots/hybridrobotics__isaac_berkeley_humanoid","name":"Berkeley Humanoid rough-terrain velocity task (Isaac Lab)","device_id":"mhs://localhost/berkeley-humanoid-rough","track":"robots","category":"Simulation","topic":"humanoid robots","kind":"world.sim","vendor":"Hybrid Robotics","model":"Berkeley Humanoid","mode":"simulated","risk":"R0","family":"gymnasium","role":"sim-env","intro":"Berkeley Humanoid rough-terrain velocity task (Isaac Lab), adapted from hybridrobotics/isaac_berkeley_humanoid. It reads `observation`, `reward`, `terminated`, `truncated` and 4 more; runs `step`, `reset` and `seed`. `step`: advance the simulated world by a bounded number of fixed timesteps, optionally applying an action for each step, and return the resulting observation and terminal flags. A simulator: the market serves it with a stand-in that needs no simulator install.","measures":["observation","reward","terminated","truncated","tick","episode","seed","info"],"adjusts":[],"actions":[{"name":"step","description":"Advance the simulated world by a bounded number of fixed timesteps, optionally applying an action for each step, and return the resulting observation and terminal flags."},{"name":"reset","description":"Reset the simulated world to a scenario start state and return the initial observation. When a seed is supplied the endpoint records it in the receipt; otherwise the endpoint's declared default seed applies."},{"name":"seed","description":"Set the seed used by the simulated world's random number generators for subsequent steps, without resetting the world. The accepted seed is echoed in the receipt."}],"tags":["berkeley-humanoid","humanoid","legged-locomotion","velocity-tracking","isaac-lab","isaac-sim","reinforcement-learning","simulation","gymnasium"],"backends":["fake"],"served_backend":"fake","evidence":"contract_checked","upstream":{"repo_url":"https://github.com/hybridrobotics/isaac_berkeley_humanoid","commit":"ffc7b2692917fdaf7cd87da53ada778e989dae35","license":"BSD-3-Clause"},"stars":294,"install":{"openai4s":"openai4s lab add robots/hybridrobotics__isaac_berkeley_humanoid","mhs":"mhs serve robots/hybridrobotics__isaac_berkeley_humanoid --port 7400","mcp":"mhs serve robots/hybridrobotics__isaac_berkeley_humanoid --mcp"}},
{"id":"robots/hybridrobotics__whole_body_tracking","name":"BeyondMimic Tracking-Flat-G1-v0 (Isaac Lab manager-based environment)","device_id":"mhs://localhost/g1-flat-tracking","track":"robots","category":"Simulation","topic":"humanoid robots","kind":"world.sim","vendor":"HybridRobotics","model":"Tracking-Flat-G1-v0","mode":"simulated","risk":"R0","family":"gymnasium","role":"sim-env","intro":"BeyondMimic Tracking-Flat-G1-v0 (Isaac Lab manager-based environment), adapted from hybridrobotics/whole_body_tracking. It reads `observation`, `reward`, `terminated`, `truncated` and 4 more; runs `step`, `reset` and `seed`. `step`: advance the simulated world by a bounded number of fixed timesteps, optionally applying an action for each step, and return the resulting observation and terminal flags. A simulator: the market serves it with a stand-in that needs no simulator install.","measures":["observation","reward","terminated","truncated","tick","episode","seed","info"],"adjusts":[],"actions":[{"name":"step","description":"Advance the simulated world by a bounded number of fixed timesteps, optionally applying an action for each step, and return the resulting observation and terminal flags."},{"name":"reset","description":"Reset the simulated world to a scenario start state and return the initial observation. When a seed is supplied the endpoint records it in the receipt; otherwise the endpoint's declared default seed applies."},{"name":"seed","description":"Set the seed used by the simulated world's random number generators for subsequent steps, without resetting the world. The accepted seed is echoed in the receipt."}],"tags":["beyondmimic","g1","humanoid","motion-tracking","isaac-lab","isaac-sim","reinforcement-learning","simulation","gymnasium"],"backends":["fake"],"served_backend":"fake","evidence":"contract_checked","upstream":{"repo_url":"https://github.com/hybridrobotics/whole_body_tracking","commit":"cd65172032893724b445448818c34165846d847d","license":"MIT"},"stars":2433,"install":{"openai4s":"openai4s lab add robots/hybridrobotics__whole_body_tracking","mhs":"mhs serve robots/hybridrobotics__whole_body_tracking --port 7400","mcp":"mhs serve robots/hybridrobotics__whole_body_tracking --mcp"}},
{"id":"robots/hyqshr__pybullet-gym-drones","name":"Pybullet-Gym-Drone DroneNavigation-v0","device_id":"mhs://localhost/drone-navigation-v0","track":"robots","category":"Simulation","topic":"UAVs","kind":"world.sim","vendor":"hyqshr","model":"DroneNavigation-v0","mode":"simulated","risk":"R0","family":"gymnasium","role":"sim-env","intro":"Pybullet-Gym-Drone DroneNavigation-v0, adapted from hyqshr/pybullet-gym-drones. It reads `observation`, `reward`, `terminated`, `truncated` and 4 more; runs `step`, `reset` and `seed`. `step`: advance the simulated world by a bounded number of fixed timesteps, optionally applying an action for each step, and return the resulting observation and terminal flags. A simulator: the market serves it with a stand-in that needs no simulator install.","measures":["observation","reward","terminated","truncated","tick","episode","seed","info"],"adjusts":[],"actions":[{"name":"step","description":"Advance the simulated world by a bounded number of fixed timesteps, optionally applying an action for each step, and return the resulting observation and terminal flags."},{"name":"reset","description":"Reset the simulated world to a scenario start state and return the initial observation. When a seed is supplied the endpoint records it in the receipt; otherwise the endpoint's declared default seed applies."},{"name":"seed","description":"Set the seed used by the simulated world's random number generators for subsequent steps, without resetting the world. The accepted seed is echoed in the receipt."}],"tags":["drone","navigation","reinforcement-learning","simulation","pybullet","gym"],"backends":["fake"],"served_backend":"fake","evidence":"contract_checked","upstream":{"repo_url":"https://github.com/hyqshr/pybullet-gym-drones","commit":"19a318c92914402d57a4dc9d1cb28cb72db268b3","license":"NOASSERTION"},"stars":15,"install":{"openai4s":"openai4s lab add robots/hyqshr__pybullet-gym-drones","mhs":"mhs serve robots/hyqshr__pybullet-gym-drones --port 7400","mcp":"mhs serve robots/hyqshr__pybullet-gym-drones --mcp"}},
{"id":"robots/hzaskywalker__plasticinelab","name":"PlasticineLab Move-v1 (soft-body manipulation benchmark)","device_id":"mhs://localhost/plasticinelab","track":"robots","category":"Simulation","topic":"robot manipulation","kind":"world.sim","vendor":"hzaskywalker","model":"PlasticineLab Move-v1","mode":"simulated","risk":"R0","family":"gymnasium","role":"sim-env","intro":"PlasticineLab Move-v1 (soft-body manipulation benchmark), adapted from hzaskywalker/plasticinelab. It reads `observation`, `reward`, `terminated`, `truncated` and 4 more; runs `step`, `reset` and `seed`. `step`: advance the simulated world by a bounded number of fixed timesteps, optionally applying an action for each step, and return the resulting observation and terminal flags. A simulator: the market serves it with a stand-in that needs no simulator install.","measures":["observation","reward","terminated","truncated","tick","episode","seed","info"],"adjusts":[],"actions":[{"name":"step","description":"Advance the simulated world by a bounded number of fixed timesteps, optionally applying an action for each step, and return the resulting observation and terminal flags."},{"name":"reset","description":"Reset the simulated world to a scenario start state and return the initial observation. When a seed is supplied the endpoint records it in the receipt; otherwise the endpoint's declared default seed applies."},{"name":"seed","description":"Set the seed used by the simulated world's random number generators for subsequent steps, without resetting the world. The accepted seed is echoed in the receipt."}],"tags":["plasticinelab","soft-body","mpm","taichi","manipulation","reinforcement-learning","simulation","gymnasium"],"backends":["fake"],"served_backend":"fake","evidence":"contract_checked","upstream":{"repo_url":"https://github.com/hzaskywalker/plasticinelab","commit":"ac1a2f7b0bbbe88706b51bf3aa9d72483e1d05b6","license":"NOASSERTION"},"stars":152,"install":{"openai4s":"openai4s lab add robots/hzaskywalker__plasticinelab","mhs":"mhs serve robots/hzaskywalker__plasticinelab --port 7400","mcp":"mhs serve robots/hzaskywalker__plasticinelab --mcp"}},
{"id":"robots/iamaisim__projectairsim","name":"Project AirSim drone-landing environment","device_id":"mhs://localhost/projectairsim-drone-landing","track":"robots","category":"Simulation","topic":"UAVs","kind":"world.sim","vendor":"IAMAI Consulting Corp","model":null,"mode":"simulated","risk":"R0","family":"gymnasium","role":"sim-env","intro":"Project AirSim drone-landing environment, adapted from iamaisim/projectairsim. It reads `observation`, `reward`, `terminated`, `truncated` and 4 more; runs `step` and `reset`. `step`: advance the simulated world by a bounded number of fixed timesteps, optionally applying an action for each step, and return the resulting observation and terminal flags. A simulator: the market serves it with a stand-in that needs no simulator install.","measures":["observation","reward","terminated","truncated","tick","episode","seed","info"],"adjusts":[],"actions":[{"name":"step","description":"Advance the simulated world by a bounded number of fixed timesteps, optionally applying an action for each step, and return the resulting observation and terminal flags."},{"name":"reset","description":"Reset the simulated world to a scenario start state and return the initial observation. When a seed is supplied the endpoint records it in the receipt; otherwise the endpoint's declared default seed applies."}],"tags":["gymnasium","gym","simulation","drone","landing","projectairsim"],"backends":["fake","sim"],"served_backend":"fake","evidence":"contract_checked","upstream":{"repo_url":"https://github.com/iamaisim/projectairsim","commit":"62229cd7c77ad31da7bc8aba8dd6303c564d8ba2","license":"MIT"},"stars":894,"install":{"openai4s":"openai4s lab add robots/iamaisim__projectairsim","mhs":"mhs serve robots/iamaisim__projectairsim --port 7400","mcp":"mhs serve robots/iamaisim__projectairsim --mcp"}},
{"id":"robots/ian-chuang__homestri-ur5e-rl","name":"homestri-ur5e-rl BaseRobot-v0 (MuJoCo simulation)","device_id":"mhs://localhost/homestri-ur5e","track":"robots","category":"Simulation","topic":null,"kind":"world.sim","vendor":"ian-chuang","model":"homestri-ur5e-rl","mode":"simulated","risk":"R0","family":"gymnasium","role":"sim-env","intro":"homestri-ur5e-rl BaseRobot-v0 (MuJoCo simulation), adapted from ian-chuang/homestri-ur5e-rl. It reads `observation`, `reward`, `terminated`, `truncated` and 4 more; runs `step`, `reset` and `seed`. `step`: advance the simulated world by a bounded number of fixed timesteps, optionally applying an action for each step, and return the resulting observation and terminal flags. A simulator: the market serves it with a stand-in that needs no simulator install.","measures":["observation","reward","terminated","truncated","tick","episode","seed","info"],"adjusts":[],"actions":[{"name":"step","description":"Advance the simulated world by a bounded number of fixed timesteps, optionally applying an action for each step, and return the resulting observation and terminal flags."},{"name":"reset","description":"Reset the simulated world to a scenario start state and return the initial observation. When a seed is supplied the endpoint records it in the receipt; otherwise the endpoint's declared default seed applies."},{"name":"seed","description":"Set the seed used by the simulated world's random number generators for subsequent steps, without resetting the world. The accepted seed is echoed in the receipt."}],"tags":["homestri","ur5e","robotiq-2f85","mujoco","gymnasium","simulation","reinforcement-learning"],"backends":["fake"],"served_backend":"fake","evidence":"contract_checked","upstream":{"repo_url":"https://github.com/ian-chuang/homestri-ur5e-rl","commit":"89b7e23cc5acbd9a164222fa548cb0113684523e","license":"NOASSERTION"},"stars":71,"install":{"openai4s":"openai4s lab add robots/ian-chuang__homestri-ur5e-rl","mhs":"mhs serve robots/ian-chuang__homestri-ur5e-rl --port 7400","mcp":"mhs serve robots/ian-chuang__homestri-ur5e-rl --mcp"}},
{"id":"robots/ian-chuang__manipulator-mujoco","name":"manipulator-mujoco Aubo i5 + AG95 (Gymnasium)","device_id":"mhs://localhost/aubo_i5","track":"robots","category":"Simulation","topic":"robot arm manipulation","kind":"world.sim","vendor":"ian-chuang","model":"Aubo i5 with AG95 gripper in MuJoCo","mode":"simulated","risk":"R1","family":"gymnasium","role":"sim-env","intro":"manipulator-mujoco Aubo i5 + AG95 (Gymnasium), adapted from ian-chuang/manipulator-mujoco. It reads `observation`, `reward`, `terminated`, `truncated` and 4 more; runs `step`, `reset` and `seed`. `step`: advance the simulated world by a bounded number of fixed timesteps, optionally applying an action for each step, and return the resulting observation and terminal flags. A simulator: the market serves it with a stand-in that needs no simulator install.","measures":["observation","reward","terminated","truncated","tick","episode","seed","info"],"adjusts":[],"actions":[{"name":"step","description":"Advance the simulated world by a bounded number of fixed timesteps, optionally applying an action for each step, and return the resulting observation and terminal flags."},{"name":"reset","description":"Reset the simulated world to a scenario start state and return the initial observation. When a seed is supplied the endpoint records it in the receipt; otherwise the endpoint's declared default seed applies."},{"name":"seed","description":"Set the seed used by the simulated world's random number generators for subsequent steps, without resetting the world. The accepted seed is echoed in the receipt."}],"tags":["aubo-i5","ag95","manipulation","mujoco","gymnasium","simulation","reinforcement-learning"],"backends":["fake"],"served_backend":"fake","evidence":"contract_checked","upstream":{"repo_url":"https://github.com/ian-chuang/manipulator-mujoco","commit":"f2d7d776a74034387e825dec6a13a91b1e1f493e","license":"MIT"},"stars":301,"install":{"openai4s":"openai4s lab add robots/ian-chuang__manipulator-mujoco","mhs":"mhs serve robots/ian-chuang__manipulator-mujoco --port 7400","mcp":"mhs serve robots/ian-chuang__manipulator-mujoco --mcp"}},
{"id":"robots/ianyangchina__pybullet_multigoal_gym","name":"pybullet_multigoal_gym KukaBlockStack (parallel jaw, sparse reward)","device_id":"mhs://localhost/kuka-block-stack","track":"robots","category":"Simulation","topic":"robot arm manipulation","kind":"world.sim","vendor":"Xintong Yang","model":"KukaBlockStackParallelGripSparseReward-v0","mode":"simulated","risk":"R1","family":"gymnasium","role":"sim-env","intro":"pybullet_multigoal_gym KukaBlockStack (parallel jaw, sparse reward), adapted from ianyangchina/pybullet_multigoal_gym. It reads `observation`, `reward`, `terminated`, `truncated` and 4 more; runs `step`, `reset` and `seed`. `step`: advance the simulated world by a bounded number of fixed timesteps, optionally applying an action for each step, and return the resulting observation and terminal flags. A simulator: the market serves it with a stand-in that needs no simulator install.","measures":["observation","reward","terminated","truncated","tick","episode","seed","info"],"adjusts":[],"actions":[{"name":"step","description":"Advance the simulated world by a bounded number of fixed timesteps, optionally applying an action for each step, and return the resulting observation and terminal flags."},{"name":"reset","description":"Reset the simulated world to a scenario start state and return the initial observation. When a seed is supplied the endpoint records it in the receipt; otherwise the endpoint's declared default seed applies."},{"name":"seed","description":"Set the seed used by the simulated world's random number generators for subsequent steps, without resetting the world. The accepted seed is echoed in the receipt."}],"tags":["kuka","iiwa14","block-stack","manipulation","pybullet","reinforcement-learning","simulation","gym"],"backends":["fake"],"served_backend":"fake","evidence":"contract_checked","upstream":{"repo_url":"https://github.com/ianyangchina/pybullet_multigoal_gym","commit":"54b50b8de3d2d58f88f8d4036aafc0858ed3d1e5","license":"Apache-2.0"},"stars":95,"install":{"openai4s":"openai4s lab add robots/ianyangchina__pybullet_multigoal_gym","mhs":"mhs serve robots/ianyangchina__pybullet_multigoal_gym --port 7400","mcp":"mhs serve robots/ianyangchina__pybullet_multigoal_gym --mcp"}},
{"id":"robots/iit-dlslab__basic-locomotion-isaaclab","name":"Isaac Lab Locomotion-Go2-Flat quadruped locomotion task","device_id":"mhs://localhost/go2-flat","track":"robots","category":"Simulation","topic":"legged robots","kind":"world.sim","vendor":"IIT-DLSLab","model":"Locomotion-Go2-Flat","mode":"simulated","risk":"R0","family":"gymnasium","role":"sim-env","intro":"Isaac Lab Locomotion-Go2-Flat quadruped locomotion task, adapted from iit-dlslab/basic-locomotion-isaaclab. It reads `observation`, `reward`, `terminated`, `truncated` and 4 more; runs `step`, `reset` and `seed`. `step`: advance the simulated world by a bounded number of fixed timesteps, optionally applying an action for each step, and return the resulting observation and terminal flags. A simulator: the market serves it with a stand-in that needs no simulator install.","measures":["observation","reward","terminated","truncated","tick","episode","seed","info"],"adjusts":[],"actions":[{"name":"step","description":"Advance the simulated world by a bounded number of fixed timesteps, optionally applying an action for each step, and return the resulting observation and terminal flags."},{"name":"reset","description":"Reset the simulated world to a scenario start state and return the initial observation. When a seed is supplied the endpoint records it in the receipt; otherwise the endpoint's declared default seed applies."},{"name":"seed","description":"Set the seed used by the simulated world's random number generators for subsequent steps, without resetting the world. The accepted seed is echoed in the receipt."}],"tags":["go2","quadruped","legged-locomotion","isaac-lab","isaac-sim","reinforcement-learning","simulation","gymnasium"],"backends":["fake"],"served_backend":"fake","evidence":"contract_checked","upstream":{"repo_url":"https://github.com/iit-dlslab/basic-locomotion-isaaclab","commit":"8bda7c7df8b223acf649e0b212635a92c8528900","license":"BSD-3-Clause"},"stars":136,"install":{"openai4s":"openai4s lab add robots/iit-dlslab__basic-locomotion-isaaclab","mhs":"mhs serve robots/iit-dlslab__basic-locomotion-isaaclab --port 7400","mcp":"mhs serve robots/iit-dlslab__basic-locomotion-isaaclab --mcp"}},
{"id":"robots/iit-dlslab__gym-quadruped","name":"gym-quadruped MuJoCo quadruped locomotion environment","device_id":"mhs://localhost/gym-quadruped","track":"robots","category":"Simulation","topic":"legged robots","kind":"world.sim","vendor":"IIT-DLSLab","model":"gym-quadruped","mode":"simulated","risk":"R0","family":"gymnasium","role":"sim-env","intro":"gym-quadruped MuJoCo quadruped locomotion environment, adapted from iit-dlslab/gym-quadruped. It reads `observation`, `reward`, `terminated`, `truncated` and 4 more; runs `step`, `reset` and `seed`. `step`: advance the simulated world by a bounded number of fixed timesteps, optionally applying an action for each step, and return the resulting observation and terminal flags. A simulator: the market serves it with a stand-in that needs no simulator install.","measures":["observation","reward","terminated","truncated","tick","episode","seed","info"],"adjusts":[],"actions":[{"name":"step","description":"Advance the simulated world by a bounded number of fixed timesteps, optionally applying an action for each step, and return the resulting observation and terminal flags."},{"name":"reset","description":"Reset the simulated world to a scenario start state and return the initial observation. When a seed is supplied the endpoint records it in the receipt; otherwise the endpoint's declared default seed applies."},{"name":"seed","description":"Set the seed used by the simulated world's random number generators for subsequent steps, without resetting the world. The accepted seed is echoed in the receipt."}],"tags":["quadruped","legged-locomotion","mujoco","reinforcement-learning","simulation","gymnasium"],"backends":["fake"],"served_backend":"fake","evidence":"contract_checked","upstream":{"repo_url":"https://github.com/iit-dlslab/gym-quadruped","commit":"097a8d649ae2232d3c0ed5eb83dc0e4f77483019","license":"NOASSERTION"},"stars":80,"install":{"openai4s":"openai4s lab add robots/iit-dlslab__gym-quadruped","mhs":"mhs serve robots/iit-dlslab__gym-quadruped --port 7400","mcp":"mhs serve robots/iit-dlslab__gym-quadruped --mcp"}},
{"id":"robots/ikalevatykh__mano_pybullet","name":"mano_pybullet HandLiftEnv-v1 (PyBullet MANO hand lifting an object)","device_id":"mhs://localhost/mano-hand-lift","track":"robots","category":"Simulation","topic":"robot arm manipulation","kind":"world.sim","vendor":"Igor Kalevatykh","model":"mano_pybullet HandLiftEnv-v1","mode":"simulated","risk":"R0","family":"gymnasium","role":"sim-env","intro":"mano_pybullet HandLiftEnv-v1 (PyBullet MANO hand lifting an object), adapted from ikalevatykh/mano_pybullet. It reads `observation`, `reward`, `terminated`, `truncated` and 4 more; runs `step`, `reset` and `seed`. `step`: advance the simulated world by a bounded number of fixed timesteps, optionally applying an action for each step, and return the resulting observation and terminal flags. A simulator: the market serves it with a stand-in that needs no simulator install.","measures":["observation","reward","terminated","truncated","tick","episode","seed","info"],"adjusts":[],"actions":[{"name":"step","description":"Advance the simulated world by a bounded number of fixed timesteps, optionally applying an action for each step, and return the resulting observation and terminal flags."},{"name":"reset","description":"Reset the simulated world to a scenario start state and return the initial observation. When a seed is supplied the endpoint records it in the receipt; otherwise the endpoint's declared default seed applies."},{"name":"seed","description":"Set the seed used by the simulated world's random number generators for subsequent steps, without resetting the world. The accepted seed is echoed in the receipt."}],"tags":["mano","pybullet","hand","manipulation","reinforcement-learning","simulation","gym"],"backends":["fake"],"served_backend":"fake","evidence":"contract_checked","upstream":{"repo_url":"https://github.com/ikalevatykh/mano_pybullet","commit":"960c257cf465f8966e770562b66150beaa359230","license":"GPL-3.0"},"stars":90,"install":{"openai4s":"openai4s lab add robots/ikalevatykh__mano_pybullet","mhs":"mhs serve robots/ikalevatykh__mano_pybullet --port 7400","mcp":"mhs serve robots/ikalevatykh__mano_pybullet --mcp"}},
{"id":"robots/inria-paris-robotics-lab__unitree_simulation","name":"Unitree Go2 ROS 2 pybullet simulation","device_id":"mhs://localhost/unitree-simulation","track":"robots","category":"Simulation","topic":"legged robots","kind":"world.sim","vendor":"INRIA Paris Robotics Lab","model":"Unitree Go2","mode":"simulated","risk":"R2","family":"ros","role":"sim-env","intro":"Unitree Go2 ROS 2 pybullet simulation, adapted from inria-paris-robotics-lab/unitree_simulation. It reads `pose`, `twist`, `motor_state` and `read_lowstate`; runs `publish_lowcmd`, `reset_simulation` and `unlock_base`. `publish_lowcmd`: publish one unitree_go/LowCmd on /lowcmd; the node applies it on its next timer tick. Transmission only: no execution, arrival or stop acknowledgement. A simulator: the market serves it with a stand-in that needs no simulator install.","measures":["pose","twist","motor_state","read_lowstate"],"adjusts":[],"actions":[{"name":"publish_lowcmd","description":"Publish one unitree_go/LowCmd on /lowcmd; the node applies it on its next timer tick. Transmission only: no execution, arrival or stop acknowledgement."},{"name":"reset_simulation","description":"Publish Empty on /reset; the node calls simulator.reset() and may unlock the base. A reset is not a stop: last_cmd_msg is kept and the timer keeps stepping."},{"name":"unlock_base","description":"Publish Empty on /unlock_base; the callback releases the fixed base constraint. Not a stop and has no acknowledgement."}],"tags":["ros","ros2","simulation","unitree","go2","quadruped","lowcmd","lowstate","pybullet"],"backends":["fake"],"served_backend":"fake","evidence":"contract_checked","upstream":{"repo_url":"https://github.com/inria-paris-robotics-lab/unitree_simulation","commit":"b53b31bc0757e3ff48ac1199227e0b144d4008d2","license":"NOASSERTION"},"stars":8,"install":{"openai4s":"openai4s lab add robots/inria-paris-robotics-lab__unitree_simulation","mhs":"mhs serve robots/inria-paris-robotics-lab__unitree_simulation --port 7400","mcp":"mhs serve robots/inria-paris-robotics-lab__unitree_simulation --mcp"}},
{"id":"robots/intel__ros2_intel_realsense","name":"Intel RealSense D400 series camera","device_id":"mhs://localhost/realsense","track":"robots","category":"Sensors and cameras","topic":null,"kind":"sensor.camera","vendor":"Intel","model":null,"mode":"hardware","risk":"R0","family":"ros","role":"device-driver","intro":"Intel RealSense D400 series camera, adapted from intel/ros2_intel_realsense. It reads `frame_id`, `width` and `height`; runs `capture_image`. `capture_image`: capture a single image from a named camera with a declared resolution and exposure and return an image artifact reference. A hardware driver: the market serves its fake backend, so no instrument is needed.","measures":["frame_id","width","height"],"adjusts":[],"actions":[{"name":"capture_image","description":"Capture a single image from a named camera with a declared resolution and exposure and return an image artifact reference."}],"tags":["ros","ros2","camera","image","realsense","rgb","depth"],"backends":["fake"],"served_backend":"fake","evidence":"contract_checked","upstream":{"repo_url":"https://github.com/intel/ros2_intel_realsense","commit":"74efb28ba4c4c41d5aaf588c969372616d6f5928","license":"Apache-2.0"},"stars":0,"install":{"openai4s":"openai4s lab add robots/intel__ros2_intel_realsense","mhs":"mhs serve robots/intel__ros2_intel_realsense --port 7400","mcp":"mhs serve robots/intel__ros2_intel_realsense --mcp"}},
{"id":"robots/intelligent-control-lab__bricksim","name":"BrickSim state-based Lego assemble-brick environment (Isaac Lab)","device_id":"mhs://localhost/lego-assemble-brick","track":"robots","category":"Simulation","topic":"robot arm manipulation","kind":"world.sim","vendor":"Intelligent Control Lab","model":"BrickSim 0.1.0 / Lego-AssembleBrick-v0","mode":"simulated","risk":"R0","family":"gymnasium","role":"sim-env","intro":"BrickSim state-based Lego assemble-brick environment (Isaac Lab), adapted from intelligent-control-lab/bricksim. It reads `observation`, `reward`, `terminated`, `truncated` and 4 more; runs `step`, `reset` and `seed`. `step`: advance the simulated world by a bounded number of fixed timesteps, optionally applying an action for each step, and return the resulting observation and terminal flags. A simulator: the market serves it with a stand-in that needs no simulator install.","measures":["observation","reward","terminated","truncated","tick","episode","seed","info"],"adjusts":[],"actions":[{"name":"step","description":"Advance the simulated world by a bounded number of fixed timesteps, optionally applying an action for each step, and return the resulting observation and terminal flags."},{"name":"reset","description":"Reset the simulated world to a scenario start state and return the initial observation. When a seed is supplied the endpoint records it in the receipt; otherwise the endpoint's declared default seed applies."},{"name":"seed","description":"Set the seed used by the simulated world's random number generators for subsequent steps, without resetting the world. The accepted seed is echoed in the receipt."}],"tags":["brick-assembly","gymnasium","isaac-lab","isaac-sim","lego","manipulation","reinforcement-learning","simulation"],"backends":["fake"],"served_backend":"fake","evidence":"contract_checked","upstream":{"repo_url":"https://github.com/intelligent-control-lab/bricksim","commit":"cbd5de3238e6ac12f44ef699e1507a9f16bdafc3","license":"MIT"},"stars":0,"install":{"openai4s":"openai4s lab add robots/intelligent-control-lab__bricksim","mhs":"mhs serve robots/intelligent-control-lab__bricksim --port 7400","mcp":"mhs serve robots/intelligent-control-lab__bricksim --mcp"}},
{"id":"robots/internrobotics__internutopia","name":"InternUtopia Gymnasium environment (Isaac Sim)","device_id":"mhs://localhost/internutopia","track":"robots","category":"Simulation","topic":"mobile robots","kind":"world.sim","vendor":"InternRobotics","model":"InternUtopia 2.2.1","mode":"simulated","risk":"R0","family":"gymnasium","role":"sim-env","intro":"InternUtopia Gymnasium environment (Isaac Sim), adapted from internrobotics/internutopia. It reads `observation`, `reward`, `terminated`, `truncated` and 4 more; runs `step`, `reset` and `seed`. `step`: advance the simulated world by a bounded number of fixed timesteps, optionally applying an action for each step, and return the resulting observation and terminal flags. A simulator: the market serves it with a stand-in that needs no simulator install.","measures":["observation","reward","terminated","truncated","tick","episode","seed","info"],"adjusts":[],"actions":[{"name":"step","description":"Advance the simulated world by a bounded number of fixed timesteps, optionally applying an action for each step, and return the resulting observation and terminal flags."},{"name":"reset","description":"Reset the simulated world to a scenario start state and return the initial observation. When a seed is supplied the endpoint records it in the receipt; otherwise the endpoint's declared default seed applies."},{"name":"seed","description":"Set the seed used by the simulated world's random number generators for subsequent steps, without resetting the world. The accepted seed is echoed in the receipt."}],"tags":["embodied-ai","gymnasium","internutopia","isaac-sim","simulation"],"backends":["fake"],"served_backend":"fake","evidence":"contract_checked","upstream":{"repo_url":"https://github.com/internrobotics/internutopia","commit":"b0a9520c586317c2743023c153cbf7c4f04f4732","license":"MIT"},"stars":1296,"install":{"openai4s":"openai4s lab add robots/internrobotics__internutopia","mhs":"mhs serve robots/internrobotics__internutopia --port 7400","mcp":"mhs serve robots/internrobotics__internutopia --mcp"}},
{"id":"robots/ipa320__cob_simulation","name":"Care-O-bot Gazebo simulation scene","device_id":"mhs://localhost/cob-simulation","track":"robots","category":"Simulation","topic":null,"kind":"world.sim","vendor":"Fraunhofer IPA","model":null,"mode":"simulated","risk":"R0","family":"ros","role":"sim-env","intro":"Care-O-bot Gazebo simulation scene, adapted from ipa320/cob_simulation. It reads `model_names` and `robot_pose`; runs `delete_model` and `publish_model_state`. `delete_model`: call the acknowledged gazebo_msgs/DeleteModel service to remove one model from the running Gazebo world; the output is the service's own success and status text. A simulator: the market serves it with a stand-in that needs no simulator install.","measures":["model_names","robot_pose"],"adjusts":[],"actions":[{"name":"delete_model","description":"Call the acknowledged gazebo_msgs/DeleteModel service to remove one model from the running Gazebo world; the output is the service's own success and status text"},{"name":"publish_model_state","description":"Publish one gazebo_msgs/ModelState on /gazebo/set_model_state with the same fields the move tool publishes; the receipt confirms rosbridge transmission only, not that Gazebo moved the model or reached the pose"}],"tags":["ros","ros1","gazebo","simulation","care-o-bot","world","models"],"backends":["fake"],"served_backend":"fake","evidence":"contract_checked","upstream":{"repo_url":"https://github.com/ipa320/cob_simulation","commit":"907144342c0351c9427ddd960ef4dfe013847113","license":"Apache-2.0"},"stars":73,"install":{"openai4s":"openai4s lab add robots/ipa320__cob_simulation","mhs":"mhs serve robots/ipa320__cob_simulation --port 7400","mcp":"mhs serve robots/ipa320__cob_simulation --mcp"}},
{"id":"robots/isaac-sim__isaacgymenvs","name":"Isaac Gym Ant (simulated)","device_id":"mhs://localhost/isaac-ant","track":"robots","category":"Simulation","topic":"legged and humanoid robots","kind":"world.sim","vendor":"NVIDIA","model":"Isaac Gym Ant","mode":"simulated","risk":"R0","family":"gymnasium","role":"sim-env","intro":"Isaac Gym Ant (simulated), adapted from isaac-sim/isaacgymenvs. It reads `observation`, `reward`, `terminated`, `truncated` and 4 more; runs `step`, `reset` and `seed`. `step`: advance the simulated world by a bounded number of fixed timesteps, optionally applying an action for each step, and return the resulting observation and terminal flags. A simulator: the market serves it with a stand-in that needs no simulator install.","measures":["observation","reward","terminated","truncated","tick","episode","seed","info"],"adjusts":[],"actions":[{"name":"step","description":"Advance the simulated world by a bounded number of fixed timesteps, optionally applying an action for each step, and return the resulting observation and terminal flags."},{"name":"reset","description":"Reset the simulated world to a scenario start state and return the initial observation. When a seed is supplied the endpoint records it in the receipt; otherwise the endpoint's declared default seed applies."},{"name":"seed","description":"Set the seed used by the simulated world's random number generators for subsequent steps, without resetting the world. The accepted seed is echoed in the receipt."}],"tags":["isaac-gym","ant","quadruped","reinforcement-learning","simulation","gymnasium"],"backends":["fake"],"served_backend":"fake","evidence":"contract_checked","upstream":{"repo_url":"https://github.com/isaac-sim/isaacgymenvs","commit":"aeed298638a1f7b5421b38f5f3cc2d1079b6d9c3","license":"BSD-3-Clause"},"stars":2952,"install":{"openai4s":"openai4s lab add robots/isaac-sim__isaacgymenvs","mhs":"mhs serve robots/isaac-sim__isaacgymenvs --port 7400","mcp":"mhs serve robots/isaac-sim__isaacgymenvs --mcp"}},
{"id":"robots/isaac-sim__isaaclab-arena","name":"Isaac Lab-Arena (Isaac Lab manager-based Gymnasium environment)","device_id":"mhs://localhost/isaaclab-arena","track":"robots","category":"Simulation","topic":"robot arm manipulation","kind":"world.sim","vendor":"NVIDIA / Isaac Sim","model":"Isaac Lab-Arena","mode":"simulated","risk":"R0","family":"gymnasium","role":"sim-env","intro":"Isaac Lab-Arena (Isaac Lab manager-based Gymnasium environment), adapted from isaac-sim/isaaclab-arena. It reads `observation`, `reward`, `terminated`, `truncated` and 4 more; runs `step`, `reset` and `seed`. `step`: advance the simulated world by a bounded number of fixed timesteps, optionally applying an action for each step, and return the resulting observation and terminal flags. A simulator: the market serves it with a stand-in that needs no simulator install.","measures":["observation","reward","terminated","truncated","tick","episode","seed","info"],"adjusts":[],"actions":[{"name":"step","description":"Advance the simulated world by a bounded number of fixed timesteps, optionally applying an action for each step, and return the resulting observation and terminal flags."},{"name":"reset","description":"Reset the simulated world to a scenario start state and return the initial observation. When a seed is supplied the endpoint records it in the receipt; otherwise the endpoint's declared default seed applies."},{"name":"seed","description":"Set the seed used by the simulated world's random number generators for subsequent steps, without resetting the world. The accepted seed is echoed in the receipt."}],"tags":["isaac-lab","isaac-sim","arena","reinforcement-learning","simulation","gymnasium"],"backends":["fake"],"served_backend":"fake","evidence":"contract_checked","upstream":{"repo_url":"https://github.com/isaac-sim/isaaclab-arena","commit":"2cc9e9766f1f62a500b85c92207192d8c60fcce5","license":"Apache-2.0"},"stars":599,"install":{"openai4s":"openai4s lab add robots/isaac-sim__isaaclab-arena","mhs":"mhs serve robots/isaac-sim__isaaclab-arena --port 7400","mcp":"mhs serve robots/isaac-sim__isaaclab-arena --mcp"}},
{"id":"robots/isaac-sim__omniisaacgymenvs","name":"OmniIsaacGymEnvs Cartpole (Isaac Sim 4.0 vectorised RL environment)","device_id":"mhs://localhost/omniisaacgymenvs-cartpole","track":"robots","category":"Simulation","topic":"legged and humanoid robots","kind":"world.sim","vendor":"NVIDIA","model":"OmniIsaacGymEnvs 4.0.0 Cartpole","mode":"simulated","risk":"R0","family":"gymnasium","role":"sim-env","intro":"OmniIsaacGymEnvs Cartpole (Isaac Sim 4.0 vectorised RL environment), adapted from isaac-sim/omniisaacgymenvs. It reads `observation`, `reward`, `terminated`, `truncated` and 4 more; runs `step`, `reset` and `seed`. `step`: advance the simulated world by a bounded number of fixed timesteps, optionally applying an action for each step, and return the resulting observation and terminal flags. A simulator: the market serves it with a stand-in that needs no simulator install.","measures":["observation","reward","terminated","truncated","tick","episode","seed","info"],"adjusts":[],"actions":[{"name":"step","description":"Advance the simulated world by a bounded number of fixed timesteps, optionally applying an action for each step, and return the resulting observation and terminal flags."},{"name":"reset","description":"Reset the simulated world to a scenario start state and return the initial observation. When a seed is supplied the endpoint records it in the receipt; otherwise the endpoint's declared default seed applies."},{"name":"seed","description":"Set the seed used by the simulated world's random number generators for subsequent steps, without resetting the world. The accepted seed is echoed in the receipt."}],"tags":["isaac-sim","omniisaacgymenvs","cartpole","reinforcement-learning","simulation","vectorized"],"backends":["fake"],"served_backend":"fake","evidence":"contract_checked","upstream":{"repo_url":"https://github.com/isaac-sim/omniisaacgymenvs","commit":"f8f91bcf73cfd8ede2eab70e19dd70162abf9775","license":"BSD-3-Clause"},"stars":1049,"install":{"openai4s":"openai4s lab add robots/isaac-sim__omniisaacgymenvs","mhs":"mhs serve robots/isaac-sim__omniisaacgymenvs --port 7400","mcp":"mhs serve robots/isaac-sim__omniisaacgymenvs --mcp"}},
{"id":"robots/isaaczh__himloco_lab","name":"HimLoco Unitree Go2 velocity (Isaac Lab simulation)","device_id":"mhs://localhost/go2-velocity","track":"robots","category":"Simulation","topic":null,"kind":"world.sim","vendor":"IsaacZH","model":"Unitree Go2","mode":"simulated","risk":"R0","family":"gymnasium","role":"sim-env","intro":"HimLoco Unitree Go2 velocity (Isaac Lab simulation), adapted from isaaczh/himloco_lab. It reads `observation`, `reward`, `terminated`, `truncated` and 4 more; runs `step`, `reset` and `seed`. `step`: advance the simulated world by a bounded number of fixed timesteps, optionally applying an action for each step, and return the resulting observation and terminal flags. A simulator: the market serves it with a stand-in that needs no simulator install.","measures":["observation","reward","terminated","truncated","tick","episode","seed","info"],"adjusts":[],"actions":[{"name":"step","description":"Advance the simulated world by a bounded number of fixed timesteps, optionally applying an action for each step, and return the resulting observation and terminal flags."},{"name":"reset","description":"Reset the simulated world to a scenario start state and return the initial observation. When a seed is supplied the endpoint records it in the receipt; otherwise the endpoint's declared default seed applies."},{"name":"seed","description":"Set the seed used by the simulated world's random number generators for subsequent steps, without resetting the world. The accepted seed is echoed in the receipt."}],"tags":["quadruped","unitree-go2","locomotion","velocity-tracking","isaac-lab","reinforcement-learning","simulation","gymnasium"],"backends":["fake"],"served_backend":"fake","evidence":"contract_checked","upstream":{"repo_url":"https://github.com/isaaczh/himloco_lab","commit":"c3fbd0173f2a53a86e472c099f8e2e9744cf7639","license":"NOASSERTION"},"stars":72,"install":{"openai4s":"openai4s lab add robots/isaaczh__himloco_lab","mhs":"mhs serve robots/isaaczh__himloco_lab --port 7400","mcp":"mhs serve robots/isaaczh__himloco_lab --mcp"}},
{"id":"robots/isri-aist__jvrc_mj_description","name":"JVRC1 humanoid (MuJoCo)","device_id":"mhs://localhost/jvrc1","track":"robots","category":"Simulation","topic":"humanoid robots","kind":"world.sim","vendor":"ISRI-AIST","model":"JVRC1","mode":"simulated","risk":"R0","family":"mujoco","role":"twin-candidate","intro":"JVRC1 humanoid (MuJoCo), adapted from isri-aist/jvrc_mj_description. It reads `time_ms`, `qpos`, `qvel`, `ctrl` and 4 more; runs `step` and `reset`. `step`: advance the simulated world by a bounded number of fixed timesteps, optionally applying an action for each step, and return the resulting observation and terminal flags. A simulator: the market serves it with a stand-in that needs no simulator install.","measures":["time_ms","qpos","qvel","ctrl","tick","timestep_ms","seed","native_checkpoint"],"adjusts":[],"actions":[{"name":"step","description":"Advance the simulated world by a bounded number of fixed timesteps, optionally applying an action for each step, and return the resulting observation and terminal flags."},{"name":"reset","description":"Reset the simulated world to a scenario start state and return the initial observation. When a seed is supplied the endpoint records it in the receipt; otherwise the endpoint's declared default seed applies."}],"tags":["humanoid","jvrc1","mujoco","robot","simulation","whole-body"],"backends":["fake"],"served_backend":"fake","evidence":"contract_checked","upstream":{"repo_url":"https://github.com/isri-aist/jvrc_mj_description","commit":"8cfc65f5c5793582b55e0d5eb4726dfb3094a224","license":"BSD-2-Clause"},"stars":0,"install":{"openai4s":"openai4s lab add robots/isri-aist__jvrc_mj_description","mhs":"mhs serve robots/isri-aist__jvrc_mj_description --port 7400","mcp":"mhs serve robots/isri-aist__jvrc_mj_description --mcp"}},
{"id":"robots/isri-aist__robomanipbaselines","name":"RoboManipBaselines MuJoCo UR5e cable passing","device_id":"mhs://localhost/robomanip-ur5e-cable","track":"robots","category":"Simulation","topic":"robot arm manipulation","kind":"world.sim","vendor":"isri-aist","model":"MujocoUR5eCableEnv-v0","mode":"simulated","risk":"R0","family":"gymnasium","role":"sim-env","intro":"RoboManipBaselines MuJoCo UR5e cable passing, adapted from isri-aist/robomanipbaselines. It reads `observation`, `reward`, `terminated`, `truncated` and 4 more; runs `step`, `reset` and `seed`. `step`: advance the simulated world by a bounded number of fixed timesteps, optionally applying an action for each step, and return the resulting observation and terminal flags. A simulator: the market serves it with a stand-in that needs no simulator install.","measures":["observation","reward","terminated","truncated","tick","episode","seed","info"],"adjusts":[],"actions":[{"name":"step","description":"Advance the simulated world by a bounded number of fixed timesteps, optionally applying an action for each step, and return the resulting observation and terminal flags."},{"name":"reset","description":"Reset the simulated world to a scenario start state and return the initial observation. When a seed is supplied the endpoint records it in the receipt; otherwise the endpoint's declared default seed applies."},{"name":"seed","description":"Set the seed used by the simulated world's random number generators for subsequent steps, without resetting the world. The accepted seed is echoed in the receipt."}],"tags":["ur5e","cable","manipulation","mujoco","reinforcement-learning","simulation","gymnasium"],"backends":["fake"],"served_backend":"fake","evidence":"contract_checked","upstream":{"repo_url":"https://github.com/isri-aist/robomanipbaselines","commit":"8535948420f8f9bc979fdb31ed049d1c82b906b2","license":"BSD-2-Clause"},"stars":404,"install":{"openai4s":"openai4s lab add robots/isri-aist__robomanipbaselines","mhs":"mhs serve robots/isri-aist__robomanipbaselines --port 7400","mcp":"mhs serve robots/isri-aist__robomanipbaselines --mcp"}},
{"id":"robots/itheima1__mcp_robot","name":"itheima1 mcp_robot six-servo arm (ServoControllerStandalone)","device_id":"mhs://localhost/mcp-robot","track":"robots","category":"Robot arms and grippers","topic":null,"kind":"robot.arm","vendor":"itheima1","model":"Bambot/SO100 six-servo arm (Feetech SCS bus)","mode":"hardware","risk":"R2","family":"python-object","role":"device-driver","intro":"itheima1 mcp_robot six-servo arm (ServoControllerStandalone), adapted from itheima1/mcp_robot. It reads `joint_positions`; runs `move_joints`, `home`, `disable_all_torque` and `enable_all_torque`. `move_joints`: command one or more actuated joints to target positions in joint space, optionally over a declared duration, and report whether the target was reached within tolerance. A hardware driver: the market serves its fake backend, so no instrument is needed.","measures":["joint_positions"],"adjusts":[],"actions":[{"name":"move_joints","description":"Command one or more actuated joints to target positions in joint space, optionally over a declared duration, and report whether the target was reached within tolerance."},{"name":"home","description":"Drive axes to their declared home position or reference switch, establishing the coordinate reference needed by other motion capabilities."},{"name":"disable_all_torque","description":"Disable the torque of servos 1 to 6 (the safe state); it takes no input"},{"name":"enable_all_torque","description":"Re-enable the torque of servos 1 to 6 after a safety reset (the declared re-enable); it takes no input, is refused while the e-stop is latched and is never run by the reset. The upstream arm_tighten documents that the arm then holds its current position; treat it as an actuation"}],"tags":["robot arm","six joints","feetech","scs","servo bus","joint control","homing"],"backends":["fake","hardware"],"served_backend":"fake","evidence":"contract_checked","upstream":{"repo_url":"https://github.com/itheima1/mcp_robot","commit":"18f9ea5ff42c6bf01bc16d659e422c048be6d312","license":"NOASSERTION"},"stars":22,"install":{"openai4s":"openai4s lab add robots/itheima1__mcp_robot","mhs":"mhs serve robots/itheima1__mcp_robot --port 7400","mcp":"mhs serve robots/itheima1__mcp_robot --mcp"}},
{"id":"robots/jaber628__worldcomposer","name":"WorldComposer Tableware (Isaac Lab DirectRLEnv)","device_id":"mhs://localhost/worldcomposer-tableware","track":"robots","category":"Simulation","topic":"robot arm manipulation","kind":"world.sim","vendor":"jaber628","model":"WorldComposer-Tableware-v0","mode":"simulated","risk":"R0","family":"gymnasium","role":"sim-env","intro":"WorldComposer Tableware (Isaac Lab DirectRLEnv), adapted from jaber628/worldcomposer. It reads `observation`, `reward`, `terminated`, `truncated` and 4 more; runs `step`, `reset` and `seed`. `step`: advance the simulated world by a bounded number of fixed timesteps, optionally applying an action for each step, and return the resulting observation and terminal flags. A simulator: the market serves it with a stand-in that needs no simulator install.","measures":["observation","reward","terminated","truncated","tick","episode","seed","info"],"adjusts":[],"actions":[{"name":"step","description":"Advance the simulated world by a bounded number of fixed timesteps, optionally applying an action for each step, and return the resulting observation and terminal flags."},{"name":"reset","description":"Reset the simulated world to a scenario start state and return the initial observation. When a seed is supplied the endpoint records it in the receipt; otherwise the endpoint's declared default seed applies."},{"name":"seed","description":"Set the seed used by the simulated world's random number generators for subsequent steps, without resetting the world. The accepted seed is echoed in the receipt."}],"tags":["worldcomposer","tableware","robot-manipulation","isaac-lab","isaac-sim","reinforcement-learning","simulation","gymnasium"],"backends":["fake"],"served_backend":"fake","evidence":"contract_checked","upstream":{"repo_url":"https://github.com/jaber628/worldcomposer","commit":"c2de3a2c9b3cc0f91e2bf739e5e6a24742988da2","license":"NOASSERTION"},"stars":0,"install":{"openai4s":"openai4s lab add robots/jaber628__worldcomposer","mhs":"mhs serve robots/jaber628__worldcomposer --port 7400","mcp":"mhs serve robots/jaber628__worldcomposer --mcp"}},
{"id":"robots/jackvice__roboterrain","name":"RoboTerrain RoverEnv (Gazebo Fortress point navigation)","device_id":"mhs://localhost/roboterrain-rover","track":"robots","category":"Simulation","topic":"mobile robots","kind":"world.sim","vendor":"jackvice","model":"RoboTerrain","mode":"simulated","risk":"R2","family":"gymnasium","role":"sim-env","intro":"RoboTerrain RoverEnv (Gazebo Fortress point navigation), adapted from jackvice/roboterrain. It reads `observation`, `reward`, `terminated`, `truncated` and 4 more; runs `step`, `reset` and `seed`. `step`: advance the simulated world by a bounded number of fixed timesteps, optionally applying an action for each step, and return the resulting observation and terminal flags. A simulator: the market serves it with a stand-in that needs no simulator install.","measures":["observation","reward","terminated","truncated","tick","episode","seed","info"],"adjusts":[],"actions":[{"name":"step","description":"Advance the simulated world by a bounded number of fixed timesteps, optionally applying an action for each step, and return the resulting observation and terminal flags."},{"name":"reset","description":"Reset the simulated world to a scenario start state and return the initial observation. When a seed is supplied the endpoint records it in the receipt; otherwise the endpoint's declared default seed applies."},{"name":"seed","description":"Set the seed used by the simulated world's random number generators for subsequent steps, without resetting the world. The accepted seed is echoed in the receipt."}],"tags":["ros2","gazebo","rover","point-navigation","reinforcement-learning","simulation","gymnasium"],"backends":["fake"],"served_backend":"fake","evidence":"contract_checked","upstream":{"repo_url":"https://github.com/jackvice/roboterrain","commit":"e56a6642b21746f1c5897b9515ef7ac7d258a550","license":"Apache-2.0"},"stars":43,"install":{"openai4s":"openai4s lab add robots/jackvice__roboterrain","mhs":"mhs serve robots/jackvice__roboterrain --port 7400","mcp":"mhs serve robots/jackvice__roboterrain --mcp"}},
{"id":"robots/jacopopan__aerial-autonomy-stack","name":"Aerial Autonomy Stack AASEnv-v0 (Gymnasium)","device_id":"mhs://localhost/aas-env","track":"robots","category":"Simulation","topic":"UAVs","kind":"world.sim","vendor":"Jacopo Panerati","model":"AASEnv-v0","mode":"simulated","risk":"R0","family":"gymnasium","role":"sim-env","intro":"Aerial Autonomy Stack AASEnv-v0 (Gymnasium), adapted from jacopopan/aerial-autonomy-stack. It reads `observation`, `reward`, `terminated`, `truncated` and 4 more; runs `step`, `reset` and `seed`. `step`: advance the simulated world by a bounded number of fixed timesteps, optionally applying an action for each step, and return the resulting observation and terminal flags. A simulator: the market serves it with a stand-in that needs no simulator install.","measures":["observation","reward","terminated","truncated","tick","episode","seed","info"],"adjusts":[],"actions":[{"name":"step","description":"Advance the simulated world by a bounded number of fixed timesteps, optionally applying an action for each step, and return the resulting observation and terminal flags."},{"name":"reset","description":"Reset the simulated world to a scenario start state and return the initial observation. When a seed is supplied the endpoint records it in the receipt; otherwise the endpoint's declared default seed applies."},{"name":"seed","description":"Set the seed used by the simulated world's random number generators for subsequent steps, without resetting the world. The accepted seed is echoed in the receipt."}],"tags":["aerial","drone","gazebo","px4","reinforcement-learning","simulation","gymnasium"],"backends":["fake"],"served_backend":"fake","evidence":"contract_checked","upstream":{"repo_url":"https://github.com/jacopopan/aerial-autonomy-stack","commit":"bf1ca32ac8b13339da4b9bce742f46fcb9b5567c","license":"MIT"},"stars":616,"install":{"openai4s":"openai4s lab add robots/jacopopan__aerial-autonomy-stack","mhs":"mhs serve robots/jacopopan__aerial-autonomy-stack --port 7400","mcp":"mhs serve robots/jacopopan__aerial-autonomy-stack --mcp"}},
{"id":"robots/jacopopan__gym-marl-reconnaissance","name":"gym-marl-reconnaissance ReconArena (recon-arena-v0)","device_id":"mhs://localhost/recon-arena","track":"robots","category":"Simulation","topic":null,"kind":"world.sim","vendor":"JacopoPan","model":"recon-arena-v0","mode":"simulated","risk":"R0","family":"gymnasium","role":"sim-env","intro":"gym-marl-reconnaissance ReconArena (recon-arena-v0), adapted from jacopopan/gym-marl-reconnaissance. It reads `observation`, `reward`, `terminated`, `truncated` and 4 more; runs `step`, `reset` and `seed`. `step`: advance the simulated world by a bounded number of fixed timesteps, optionally applying an action for each step, and return the resulting observation and terminal flags. A simulator: the market serves it with a stand-in that needs no simulator install.","measures":["observation","reward","terminated","truncated","tick","episode","seed","info"],"adjusts":[],"actions":[{"name":"step","description":"Advance the simulated world by a bounded number of fixed timesteps, optionally applying an action for each step, and return the resulting observation and terminal flags."},{"name":"reset","description":"Reset the simulated world to a scenario start state and return the initial observation. When a seed is supplied the endpoint records it in the receipt; otherwise the endpoint's declared default seed applies."},{"name":"seed","description":"Set the seed used by the simulated world's random number generators for subsequent steps, without resetting the world. The accepted seed is echoed in the receipt."}],"tags":["multi-agent","reconnaissance","tello","robomaster","pybullet","reinforcement-learning","simulation","gymnasium"],"backends":["fake"],"served_backend":"fake","evidence":"contract_checked","upstream":{"repo_url":"https://github.com/jacopopan/gym-marl-reconnaissance","commit":"85a4373f3ebee66b12c88a0bdd5e4e96f9606e5a","license":"MIT"},"stars":53,"install":{"openai4s":"openai4s lab add robots/jacopopan__gym-marl-reconnaissance","mhs":"mhs serve robots/jacopopan__gym-marl-reconnaissance --port 7400","mcp":"mhs serve robots/jacopopan__gym-marl-reconnaissance --mcp"}},
{"id":"robots/jacopopan__gymnasium-docker-ros2","name":"GDR2 Docker/ROS 2 point-mass environment","device_id":"mhs://localhost/gdr2-point-mass","track":"robots","category":"Simulation","topic":"mobile robots","kind":"world.sim","vendor":"Jacopo Panerati","model":"GDR2Env-v0","mode":"simulated","risk":"R0","family":"gymnasium","role":"sim-env","intro":"GDR2 Docker/ROS 2 point-mass environment, adapted from jacopopan/gymnasium-docker-ros2. It reads `observation`, `reward`, `terminated`, `truncated` and 4 more; runs `step`, `reset` and `seed`. `step`: advance the simulated world by a bounded number of fixed timesteps, optionally applying an action for each step, and return the resulting observation and terminal flags. A simulator: the market serves it with a stand-in that needs no simulator install.","measures":["observation","reward","terminated","truncated","tick","episode","seed","info"],"adjusts":[],"actions":[{"name":"step","description":"Advance the simulated world by a bounded number of fixed timesteps, optionally applying an action for each step, and return the resulting observation and terminal flags."},{"name":"reset","description":"Reset the simulated world to a scenario start state and return the initial observation. When a seed is supplied the endpoint records it in the receipt; otherwise the endpoint's declared default seed applies."},{"name":"seed","description":"Set the seed used by the simulated world's random number generators for subsequent steps, without resetting the world. The accepted seed is echoed in the receipt."}],"tags":["gymnasium","docker","ros2","gazebo","zeromq","point-mass","reinforcement-learning","simulation"],"backends":["fake"],"served_backend":"fake","evidence":"contract_checked","upstream":{"repo_url":"https://github.com/jacopopan/gymnasium-docker-ros2","commit":"b3a00f77da38b7f074bed00d3569c56dbfe114df","license":"MIT"},"stars":11,"install":{"openai4s":"openai4s lab add robots/jacopopan__gymnasium-docker-ros2","mhs":"mhs serve robots/jacopopan__gymnasium-docker-ros2 --port 7400","mcp":"mhs serve robots/jacopopan__gymnasium-docker-ros2 --mcp"}},
{"id":"robots/jaykorea__isaac-rl-two-wheel-legged-bot","name":"Isaac Lab Flamingo velocity flat constraint task","device_id":"mhs://localhost/flamingo-velocity-flat","track":"robots","category":"Simulation","topic":null,"kind":"world.sim","vendor":"jaykorea","model":"Isaac-Velocity-Flat-Flamingo-v1-ppo-constraint","mode":"simulated","risk":"R0","family":"gymnasium","role":"sim-env","intro":"Isaac Lab Flamingo velocity flat constraint task, adapted from jaykorea/isaac-rl-two-wheel-legged-bot. It reads `observation`, `reward`, `terminated`, `truncated` and 4 more; runs `step`, `reset` and `seed`. `step`: advance the simulated world by a bounded number of fixed timesteps, optionally applying an action for each step, and return the resulting observation and terminal flags. A simulator: the market serves it with a stand-in that needs no simulator install.","measures":["observation","reward","terminated","truncated","tick","episode","seed","info"],"adjusts":[],"actions":[{"name":"step","description":"Advance the simulated world by a bounded number of fixed timesteps, optionally applying an action for each step, and return the resulting observation and terminal flags."},{"name":"reset","description":"Reset the simulated world to a scenario start state and return the initial observation. When a seed is supplied the endpoint records it in the receipt; otherwise the endpoint's declared default seed applies."},{"name":"seed","description":"Set the seed used by the simulated world's random number generators for subsequent steps, without resetting the world. The accepted seed is echoed in the receipt."}],"tags":["flamingo","isaac-lab","isaac-sim","reinforcement-learning","simulation","gymnasium","two-wheel-legged-bot"],"backends":["fake"],"served_backend":"fake","evidence":"contract_checked","upstream":{"repo_url":"https://github.com/jaykorea/isaac-rl-two-wheel-legged-bot","commit":"d922cce9e07a8877c37e12b2cb39dfdcf34b9d40","license":"MIT"},"stars":352,"install":{"openai4s":"openai4s lab add robots/jaykorea__isaac-rl-two-wheel-legged-bot","mhs":"mhs serve robots/jaykorea__isaac-rl-two-wheel-legged-bot --port 7400","mcp":"mhs serve robots/jaykorea__isaac-rl-two-wheel-legged-bot --mcp"}},
{"id":"robots/jbakams__slimebot-volleyball","name":"Slimebot Volleyball 1-vs-1 (Gym simulation)","device_id":"mhs://localhost/slimebot-volleyball","track":"robots","category":"Simulation","topic":"multi-robot systems","kind":"world.sim","vendor":"jbakams","model":"Slimebot Volleyball 1-vs-1","mode":"simulated","risk":"R0","family":"gymnasium","role":"sim-env","intro":"Slimebot Volleyball 1-vs-1 (Gym simulation), adapted from jbakams/slimebot-volleyball. It reads `observation`, `reward`, `terminated`, `truncated` and 4 more; runs `step`, `reset` and `seed`. `step`: advance the simulated world by a bounded number of fixed timesteps, optionally applying an action for each step, and return the resulting observation and terminal flags. A simulator: the market serves it with a stand-in that needs no simulator install.","measures":["observation","reward","terminated","truncated","tick","episode","seed","info"],"adjusts":[],"actions":[{"name":"step","description":"Advance the simulated world by a bounded number of fixed timesteps, optionally applying an action for each step, and return the resulting observation and terminal flags."},{"name":"reset","description":"Reset the simulated world to a scenario start state and return the initial observation. When a seed is supplied the endpoint records it in the receipt; otherwise the endpoint's declared default seed applies."},{"name":"seed","description":"Set the seed used by the simulated world's random number generators for subsequent steps, without resetting the world. The accepted seed is echoed in the receipt."}],"tags":["slimebot","volleyball","3d","multiagent","reinforcement-learning","simulation","gymnasium"],"backends":["fake"],"served_backend":"fake","evidence":"contract_checked","upstream":{"repo_url":"https://github.com/jbakams/slimebot-volleyball","commit":"0733b0ad1f9d1f62ba8b5717f69edf6b0cb1544a","license":"Apache-2.0"},"stars":16,"install":{"openai4s":"openai4s lab add robots/jbakams__slimebot-volleyball","mhs":"mhs serve robots/jbakams__slimebot-volleyball --port 7400","mcp":"mhs serve robots/jbakams__slimebot-volleyball --mcp"}},
{"id":"robots/jerome-graves__yertle","name":"Yertle quadruped locomotion environment (PyBullet)","device_id":"mhs://localhost/yertle","track":"robots","category":"Simulation","topic":"legged robots","kind":"world.sim","vendor":"Jerome Graves","model":"Yertle","mode":"simulated","risk":"R0","family":"gymnasium","role":"sim-env","intro":"Yertle quadruped locomotion environment (PyBullet), adapted from jerome-graves/yertle. It reads `observation`, `reward`, `terminated`, `truncated` and 4 more; runs `step`, `reset` and `seed`. `step`: advance the simulated world by a bounded number of fixed timesteps, optionally applying an action for each step, and return the resulting observation and terminal flags. A simulator: the market serves it with a stand-in that needs no simulator install.","measures":["observation","reward","terminated","truncated","tick","episode","seed","info"],"adjusts":[],"actions":[{"name":"step","description":"Advance the simulated world by a bounded number of fixed timesteps, optionally applying an action for each step, and return the resulting observation and terminal flags."},{"name":"reset","description":"Reset the simulated world to a scenario start state and return the initial observation. When a seed is supplied the endpoint records it in the receipt; otherwise the endpoint's declared default seed applies."},{"name":"seed","description":"Set the seed used by the simulated world's random number generators for subsequent steps, without resetting the world. The accepted seed is echoed in the receipt."}],"tags":["quadruped","locomotion","reinforcement-learning","simulation","gymnasium","pybullet"],"backends":["fake"],"served_backend":"fake","evidence":"contract_checked","upstream":{"repo_url":"https://github.com/jerome-graves/yertle","commit":"9d04e2d2c1da07d5845807bd36b242b1d0eff843","license":"MIT"},"stars":163,"install":{"openai4s":"openai4s lab add robots/jerome-graves__yertle","mhs":"mhs serve robots/jerome-graves__yertle --port 7400","mcp":"mhs serve robots/jerome-graves__yertle --mcp"}},
{"id":"robots/jerry-liubb__gazebo_grasp","name":"Gazebo object state (gazebo_grasp)","device_id":"mhs://localhost/gazebo-grasp-object-state","track":"robots","category":"Sensors and cameras","topic":null,"kind":"sensor","vendor":"jerry-liubb","model":"gazebo_state_plugins/GazeboObjectInfo with gazebo_test_tools","mode":"simulated","risk":"R0","family":"ros","role":"sim-env","intro":"Gazebo object state (gazebo_grasp), adapted from jerry-liubb/gazebo_grasp. It reads `read_object`; runs `object_info`. `object_info`: request one object's pose from the Gazebo object-info service. A simulator: the market serves it with a stand-in that needs no simulator install.","measures":["read_object"],"adjusts":[],"actions":[{"name":"object_info","description":"Request one object's pose from the Gazebo object-info service"}],"tags":["ros","ros1","gazebo","simulation","object-state","object-info","grasp"],"backends":["fake"],"served_backend":"fake","evidence":"contract_checked","upstream":{"repo_url":"https://github.com/jerry-liubb/gazebo_grasp","commit":"0bd506d52c7e0a1791a0488afab5c31fc34e2347","license":"NOASSERTION"},"stars":23,"install":{"openai4s":"openai4s lab add robots/jerry-liubb__gazebo_grasp","mhs":"mhs serve robots/jerry-liubb__gazebo_grasp --port 7400","mcp":"mhs serve robots/jerry-liubb__gazebo_grasp --mcp"}},
{"id":"robots/jerrypeng0201__nebula","name":"NEBULA SceneManipulation-v1 (Fetch manipulation scene)","device_id":"mhs://localhost/nebula-scene-manipulation","track":"robots","category":"Simulation","topic":"robot arm manipulation","kind":"world.sim","vendor":"JerryPeng0201","model":"NEBULA SceneManipulation-v1","mode":"simulated","risk":"R0","family":"gymnasium","role":"sim-env","intro":"NEBULA SceneManipulation-v1 (Fetch manipulation scene), adapted from jerrypeng0201/nebula. It reads `observation`, `reward`, `terminated`, `truncated` and 4 more; runs `step`, `reset` and `seed`. `step`: advance the simulated world by a bounded number of fixed timesteps, optionally applying an action for each step, and return the resulting observation and terminal flags. A simulator: the market serves it with a stand-in that needs no simulator install.","measures":["observation","reward","terminated","truncated","tick","episode","seed","info"],"adjusts":[],"actions":[{"name":"step","description":"Advance the simulated world by a bounded number of fixed timesteps, optionally applying an action for each step, and return the resulting observation and terminal flags."},{"name":"reset","description":"Reset the simulated world to a scenario start state and return the initial observation. When a seed is supplied the endpoint records it in the receipt; otherwise the endpoint's declared default seed applies."},{"name":"seed","description":"Set the seed used by the simulated world's random number generators for subsequent steps, without resetting the world. The accepted seed is echoed in the receipt."}],"tags":["gymnasium","manipulation","fetch","sapien","reinforcement-learning","simulation","scene"],"backends":["fake"],"served_backend":"fake","evidence":"contract_checked","upstream":{"repo_url":"https://github.com/jerrypeng0201/nebula","commit":"2d16ad04e9825b4a6212847ba847e5ae910feed4","license":"GPL-3.0"},"stars":34,"install":{"openai4s":"openai4s lab add robots/jerrypeng0201__nebula","mhs":"mhs serve robots/jerrypeng0201__nebula --port 7400","mcp":"mhs serve robots/jerrypeng0201__nebula --mcp"}},
{"id":"robots/jjshoots__crazyflyt","name":"Crazyflie 2.x (CrazyFlyt DroneController)","device_id":"mhs://localhost/crazyflie","track":"robots","category":"Mobile robots","topic":null,"kind":"robot.mobile_base","vendor":"Bitcraze","model":"Crazyflie 2.x","mode":"hardware","risk":"R2","family":"python-object","role":"device-driver","intro":"Crazyflie 2.x (CrazyFlyt DroneController), adapted from jjshoots/crazyflyt. It reads `position_estimate`, `setpoint` and `running`; sets `pos_control`; runs `set_position_setpoint`, `set_velocity_setpoint` and `halt`. `set_position_setpoint`: store an (x, y, z, yaw) setpoint in m and rad, select position control and start the control thread. A hardware driver: the market serves its fake backend, so no instrument is needed.","measures":["position_estimate","setpoint","running"],"adjusts":["pos_control"],"actions":[{"name":"set_position_setpoint","description":"Store an (x, y, z, yaw) setpoint in m and rad, select position control and start the control thread"},{"name":"set_velocity_setpoint","description":"Store a (vx, vy, vz, vyaw) world-frame velocity setpoint, select velocity control and start the control thread; the clone states no velocity unit, so vx, vy and vz are dimensionless upstream values"},{"name":"halt","description":"Stop commanding motion: call the native stop, so the control thread sends the stop setpoint"}],"tags":["drone","uav","crazyflie","position control","velocity control","flight"],"backends":["fake","hardware"],"served_backend":"fake","evidence":"contract_checked","upstream":{"repo_url":"https://github.com/jjshoots/crazyflyt","commit":"85d99afa21cb5b90fd130cd480f0589a2b700b58","license":"MIT"},"stars":22,"install":{"openai4s":"openai4s lab add robots/jjshoots__crazyflyt","mhs":"mhs serve robots/jjshoots__crazyflyt --port 7400","mcp":"mhs serve robots/jjshoots__crazyflyt --mcp"}},
{"id":"robots/jjshoots__pyflyt","name":"PyFlyt QuadX Hover (Gymnasium environment)","device_id":"mhs://localhost/quadx-hover","track":"robots","category":"Simulation","topic":"UAVs","kind":"world.sim","vendor":"jjshoots","model":"PyFlyt/QuadX-Hover-v4","mode":"simulated","risk":"R0","family":"gymnasium","role":"sim-env","intro":"PyFlyt QuadX Hover (Gymnasium environment), adapted from jjshoots/pyflyt. It reads `observation`, `reward`, `terminated`, `truncated` and 4 more; runs `step`, `reset` and `seed`. `step`: advance the simulated world by a bounded number of fixed timesteps, optionally applying an action for each step, and return the resulting observation and terminal flags. A simulator: the market serves it with a stand-in that needs no simulator install.","measures":["observation","reward","terminated","truncated","tick","episode","seed","info"],"adjusts":[],"actions":[{"name":"step","description":"Advance the simulated world by a bounded number of fixed timesteps, optionally applying an action for each step, and return the resulting observation and terminal flags."},{"name":"reset","description":"Reset the simulated world to a scenario start state and return the initial observation. When a seed is supplied the endpoint records it in the receipt; otherwise the endpoint's declared default seed applies."},{"name":"seed","description":"Set the seed used by the simulated world's random number generators for subsequent steps, without resetting the world. The accepted seed is echoed in the receipt."}],"tags":["pyflyt","quadx","uav","quadrotor","hover","gymnasium","simulation"],"backends":["fake"],"served_backend":"fake","evidence":"contract_checked","upstream":{"repo_url":"https://github.com/jjshoots/pyflyt","commit":"9095d41f6fc5f07fe711346b747b4f7fd475b424","license":"MIT"},"stars":264,"install":{"openai4s":"openai4s lab add robots/jjshoots__pyflyt","mhs":"mhs serve robots/jjshoots__pyflyt --port 7400","mcp":"mhs serve robots/jjshoots__pyflyt --mcp"}},
{"id":"robots/jkoba0512__genesis_humanoid_rl","name":"Genesis Humanoid RL (Unitree G1 walking environment)","device_id":"mhs://localhost/genesis-humanoid","track":"robots","category":"Simulation","topic":"humanoid robots","kind":"world.sim","vendor":"jkoba0512","model":"Unitree G1 (Genesis)","mode":"simulated","risk":"R0","family":"gymnasium","role":"sim-env","intro":"Genesis Humanoid RL (Unitree G1 walking environment), adapted from jkoba0512/genesis_humanoid_rl. It reads `observation`, `reward`, `terminated`, `truncated` and 4 more; runs `step`, `reset` and `seed`. `step`: advance the simulated world by a bounded number of fixed timesteps, optionally applying an action for each step, and return the resulting observation and terminal flags. A simulator: the market serves it with a stand-in that needs no simulator install.","measures":["observation","reward","terminated","truncated","tick","episode","seed","info"],"adjusts":[],"actions":[{"name":"step","description":"Advance the simulated world by a bounded number of fixed timesteps, optionally applying an action for each step, and return the resulting observation and terminal flags."},{"name":"reset","description":"Reset the simulated world to a scenario start state and return the initial observation. When a seed is supplied the endpoint records it in the receipt; otherwise the endpoint's declared default seed applies."},{"name":"seed","description":"Set the seed used by the simulated world's random number generators for subsequent steps, without resetting the world. The accepted seed is echoed in the receipt."}],"tags":["humanoid","unitree-g1","genesis","reinforcement-learning","simulation","gymnasium"],"backends":["fake"],"served_backend":"fake","evidence":"contract_checked","upstream":{"repo_url":"https://github.com/jkoba0512/genesis_humanoid_rl","commit":"32e5bd1a1e516bf4caedcb31f1a8ee366f2efebc","license":"MIT"},"stars":5,"install":{"openai4s":"openai4s lab add robots/jkoba0512__genesis_humanoid_rl","mhs":"mhs serve robots/jkoba0512__genesis_humanoid_rl --port 7400","mcp":"mhs serve robots/jkoba0512__genesis_humanoid_rl --mcp"}},
{"id":"robots/joshnegreanu__robo-lab","name":"TRLC DK1 bimanual blocks scene (robo-lab)","device_id":"mhs://localhost/robo-lab","track":"robots","category":"Simulation","topic":"robot arm manipulation","kind":"world.sim","vendor":"joshnegreanu","model":"robo-lab","mode":"simulated","risk":"R0","family":"mujoco","role":"sim-env","intro":"TRLC DK1 bimanual blocks scene (robo-lab), adapted from joshnegreanu/robo-lab. It reads `time_ms`, `qpos`, `qvel`, `ctrl` and 4 more; runs `step` and `reset`. `step`: advance the simulated world by a bounded number of fixed timesteps, optionally applying an action for each step, and return the resulting observation and terminal flags. A simulator: the market serves it with a stand-in that needs no simulator install.","measures":["time_ms","qpos","qvel","ctrl","tick","timestep_ms","seed","native_checkpoint"],"adjusts":[],"actions":[{"name":"step","description":"Advance the simulated world by a bounded number of fixed timesteps, optionally applying an action for each step, and return the resulting observation and terminal flags."},{"name":"reset","description":"Reset the simulated world to a scenario start state and return the initial observation. When a seed is supplied the endpoint records it in the receipt; otherwise the endpoint's declared default seed applies."}],"tags":["trlc-dk1","bimanual","robot-arm","manipulation","mujoco","simulation","robo-lab"],"backends":["fake"],"served_backend":"fake","evidence":"contract_checked","upstream":{"repo_url":"https://github.com/joshnegreanu/robo-lab","commit":"f7d677dd46324e1805ad13057e1cf3359a166443","license":"NOASSERTION"},"stars":0,"install":{"openai4s":"openai4s lab add robots/joshnegreanu__robo-lab","mhs":"mhs serve robots/joshnegreanu__robo-lab --port 7400","mcp":"mhs serve robots/joshnegreanu__robo-lab --mcp"}},
{"id":"robots/jr-robotics__robo-gym","name":"robo-gym ExampleEnvSim-v0 (Gymnasium simulation wrapper)","device_id":"mhs://localhost/robogym-example","track":"robots","category":"Simulation","topic":"robot arm manipulation","kind":"world.sim","vendor":"JR Robotics","model":"ExampleEnvSim-v0","mode":"simulated","risk":"R0","family":"gymnasium","role":"sim-env","intro":"robo-gym ExampleEnvSim-v0 (Gymnasium simulation wrapper), adapted from jr-robotics/robo-gym. It reads `observation`, `reward`, `terminated`, `truncated` and 4 more; runs `step`, `reset` and `seed`. `step`: advance the simulated world by a bounded number of fixed timesteps, optionally applying an action for each step, and return the resulting observation and terminal flags. A simulator: the market serves it with a stand-in that needs no simulator install.","measures":["observation","reward","terminated","truncated","tick","episode","seed","info"],"adjusts":[],"actions":[{"name":"step","description":"Advance the simulated world by a bounded number of fixed timesteps, optionally applying an action for each step, and return the resulting observation and terminal flags."},{"name":"reset","description":"Reset the simulated world to a scenario start state and return the initial observation. When a seed is supplied the endpoint records it in the receipt; otherwise the endpoint's declared default seed applies."},{"name":"seed","description":"Set the seed used by the simulated world's random number generators for subsequent steps, without resetting the world. The accepted seed is echoed in the receipt."}],"tags":["robo-gym","gymnasium","simulation","example environment","reinforcement learning","robot server"],"backends":["fake"],"served_backend":"fake","evidence":"contract_checked","upstream":{"repo_url":"https://github.com/jr-robotics/robo-gym","commit":"f086bc90068c41ffd1889d290f3766d69291bf26","license":"MIT"},"stars":0,"install":{"openai4s":"openai4s lab add robots/jr-robotics__robo-gym","mhs":"mhs serve robots/jr-robotics__robo-gym --port 7400","mcp":"mhs serve robots/jr-robotics__robo-gym --mcp"}},
{"id":"robots/jumpei-arima__navigation_simulator_for_mobile_robot","name":"NSMR Nsmr-v1 (2D mobile robot navigation simulator)","device_id":"mhs://localhost/nsmr-gym","track":"robots","category":"Simulation","topic":"mobile robots","kind":"world.sim","vendor":"Jumpei Arima","model":"Nsmr-v1","mode":"simulated","risk":"R0","family":"gymnasium","role":"sim-env","intro":"NSMR Nsmr-v1 (2D mobile robot navigation simulator), adapted from jumpei-arima/navigation_simulator_for_mobile_robot. It reads `observation`, `reward`, `terminated`, `truncated` and 4 more; runs `step`, `reset` and `seed`. `step`: advance the simulated world by a bounded number of fixed timesteps, optionally applying an action for each step, and return the resulting observation and terminal flags. A simulator: the market serves it with a stand-in that needs no simulator install.","measures":["observation","reward","terminated","truncated","tick","episode","seed","info"],"adjusts":[],"actions":[{"name":"step","description":"Advance the simulated world by a bounded number of fixed timesteps, optionally applying an action for each step, and return the resulting observation and terminal flags."},{"name":"reset","description":"Reset the simulated world to a scenario start state and return the initial observation. When a seed is supplied the endpoint records it in the receipt; otherwise the endpoint's declared default seed applies."},{"name":"seed","description":"Set the seed used by the simulated world's random number generators for subsequent steps, without resetting the world. The accepted seed is echoed in the receipt."}],"tags":["navigation","mobile-robot","lidar","reinforcement-learning","simulation","gym"],"backends":["fake"],"served_backend":"fake","evidence":"contract_checked","upstream":{"repo_url":"https://github.com/jumpei-arima/navigation_simulator_for_mobile_robot","commit":"4727fa696f363e88d757c0896f1c3f0dacc83af3","license":"MIT"},"stars":8,"install":{"openai4s":"openai4s lab add robots/jumpei-arima__navigation_simulator_for_mobile_robot","mhs":"mhs serve robots/jumpei-arima__navigation_simulator_for_mobile_robot --port 7400","mcp":"mhs serve robots/jumpei-arima__navigation_simulator_for_mobile_robot --mcp"}},
{"id":"robots/justagist__mujoco_panda","name":"Franka Emika Panda MJCF scene (mujoco_panda)","device_id":"mhs://localhost/mujoco-panda","track":"robots","category":"Simulation","topic":null,"kind":"world.sim","vendor":"justagist","model":"mujoco_panda_model","mode":"simulated","risk":"R0","family":"mujoco","role":"twin-candidate","intro":"Franka Emika Panda MJCF scene (mujoco_panda), adapted from justagist/mujoco_panda. It reads `time_ms`, `qpos`, `qvel`, `ctrl` and 4 more; runs `step` and `reset`. `step`: advance the simulated world by a bounded number of fixed timesteps, optionally applying an action for each step, and return the resulting observation and terminal flags. A simulator: the market serves it with a stand-in that needs no simulator install.","measures":["time_ms","qpos","qvel","ctrl","tick","timestep_ms","seed","native_checkpoint"],"adjusts":[],"actions":[{"name":"step","description":"Advance the simulated world by a bounded number of fixed timesteps, optionally applying an action for each step, and return the resulting observation and terminal flags."},{"name":"reset","description":"Reset the simulated world to a scenario start state and return the initial observation. When a seed is supplied the endpoint records it in the receipt; otherwise the endpoint's declared default seed applies."}],"tags":["franka","panda","mujoco","simulation","robot-arm","justagist"],"backends":["fake"],"served_backend":"fake","evidence":"contract_checked","upstream":{"repo_url":"https://github.com/justagist/mujoco_panda","commit":"207938fbc99bd3f8a4b05d35c18dd999b7a8dd7f","license":"NOASSERTION"},"stars":71,"install":{"openai4s":"openai4s lab add robots/justagist__mujoco_panda","mhs":"mhs serve robots/justagist__mujoco_panda --port 7400","mcp":"mhs serve robots/justagist__mujoco_panda --mcp"}},
{"id":"robots/justagist__panda_simulator","name":"Franka Emika Panda simulated hand","device_id":"mhs://localhost/panda-gripper","track":"robots","category":"Robot arms and grippers","topic":null,"kind":"robot.gripper","vendor":"justagist","model":"panda_simulator","mode":"simulated","risk":"R2","family":"ros","role":"sim-env","intro":"Franka Emika Panda simulated hand, adapted from justagist/panda_simulator. It reads `finger_positions`; runs `move_gripper`, `grasp_gripper` and `stop_gripper`. `move_gripper`: send one franka_gripper/MoveAction goal with a finger opening and speed; the receipt reports the upstream action's terminal success, not a separately measured contact force. A simulator: the market serves it with a stand-in that needs no simulator install.","measures":["finger_positions"],"adjusts":[],"actions":[{"name":"move_gripper","description":"Send one franka_gripper/MoveAction goal with a finger opening and speed; the receipt reports the upstream action's terminal success, not a separately measured contact force"},{"name":"grasp_gripper","description":"Send one franka_gripper/GraspAction goal; the pinned handler performs the same position move as MoveAction and ignores force and epsilon"},{"name":"stop_gripper","description":"Fixed, input-free franka_gripper/StopAction request; the upstream handler buffers a hold of the measured opening at zero speed and acknowledges success before the controller applies it"}],"tags":["ros","ros1","gazebo","franka","panda","gripper","simulation"],"backends":["fake"],"served_backend":"fake","evidence":"contract_checked","upstream":{"repo_url":"https://github.com/justagist/panda_simulator","commit":"6cec91dcc739df105a845e2f29e361b6c608bb48","license":"Apache-2.0"},"stars":225,"install":{"openai4s":"openai4s lab add robots/justagist__panda_simulator","mhs":"mhs serve robots/justagist__panda_simulator --port 7400","mcp":"mhs serve robots/justagist__panda_simulator --mcp"}},
{"id":"robots/justyx404__spot_gazebo_ros2","name":"Spot quadruped in an Ignition/Gazebo ROS 2 simulation","device_id":"mhs://localhost/spot-gazebo","track":"robots","category":"Mobile robots","topic":null,"kind":"robot.mobile_base","vendor":"justyx404","model":"Boston Dynamics Spot (CHAMP simulation)","mode":"simulated","risk":"R2","family":"ros","role":"sim-env","intro":"Spot quadruped in an Ignition/Gazebo ROS 2 simulation, adapted from justyx404/spot_gazebo_ros2. It reads `read_odometry`, `read_joint_states` and `read_sim_clock`; runs `publish_velocity`. `publish_velocity`: publish one geometry_msgs/Twist on /cmd_vel; the receipt reports transmission and the three components handed to rosbridge, not motion, arrival or a stop. A simulator: the market serves it with a stand-in that needs no simulator install.","measures":["read_odometry","read_joint_states","read_sim_clock"],"adjusts":[],"actions":[{"name":"publish_velocity","description":"Publish one geometry_msgs/Twist on /cmd_vel; the receipt reports transmission and the three components handed to rosbridge, not motion, arrival or a stop"}],"tags":["ros","ros2","gazebo","ignition","simulation","spot","quadruped","mobile-base","cmd-vel"],"backends":["fake"],"served_backend":"fake","evidence":"contract_checked","upstream":{"repo_url":"https://github.com/justyx404/spot_gazebo_ros2","commit":"23166d6efd67724edc1ce41e9ee4bb909cf9a2f9","license":"Apache-2.0"},"stars":44,"install":{"openai4s":"openai4s lab add robots/justyx404__spot_gazebo_ros2","mhs":"mhs serve robots/justyx404__spot_gazebo_ros2 --port 7400","mcp":"mhs serve robots/justyx404__spot_gazebo_ros2 --mcp"}},
{"id":"robots/jyf588__simgan","name":"SimGAN HopperURDFEnv-v3 (PyBullet hopper)","device_id":"mhs://localhost/simgan-hopper","track":"robots","category":"Simulation","topic":null,"kind":"world.sim","vendor":"jyf588","model":"HopperURDFEnv-v3","mode":"simulated","risk":"R0","family":"gymnasium","role":"sim-env","intro":"SimGAN HopperURDFEnv-v3 (PyBullet hopper), adapted from jyf588/simgan. It reads `observation`, `reward`, `terminated`, `truncated` and 4 more; runs `step`, `reset` and `seed`. `step`: advance the simulated world by a bounded number of fixed timesteps, optionally applying an action for each step, and return the resulting observation and terminal flags. A simulator: the market serves it with a stand-in that needs no simulator install.","measures":["observation","reward","terminated","truncated","tick","episode","seed","info"],"adjusts":[],"actions":[{"name":"step","description":"Advance the simulated world by a bounded number of fixed timesteps, optionally applying an action for each step, and return the resulting observation and terminal flags."},{"name":"reset","description":"Reset the simulated world to a scenario start state and return the initial observation. When a seed is supplied the endpoint records it in the receipt; otherwise the endpoint's declared default seed applies."},{"name":"seed","description":"Set the seed used by the simulated world's random number generators for subsequent steps, without resetting the world. The accepted seed is echoed in the receipt."}],"tags":["simgan","hopper","pybullet","reinforcement-learning","simulation","gym"],"backends":["fake"],"served_backend":"fake","evidence":"contract_checked","upstream":{"repo_url":"https://github.com/jyf588/simgan","commit":"23283d7b5629f1653567b2437bb28aac1cc17169","license":"Apache-2.0"},"stars":50,"install":{"openai4s":"openai4s lab add robots/jyf588__simgan","mhs":"mhs serve robots/jyf588__simgan --port 7400","mcp":"mhs serve robots/jyf588__simgan --mcp"}},
{"id":"robots/kadhyo__wheeledrobotsimulations","name":"gym_fastsim kitchen-v1 (wheeled robot navigation)","device_id":"mhs://localhost/fastsim-nav","track":"robots","category":"Simulation","topic":"mobile robots","kind":"world.sim","vendor":"kadhyo","model":"gym_fastsim kitchen-v1","mode":"simulated","risk":"R0","family":"gymnasium","role":"sim-env","intro":"gym_fastsim kitchen-v1 (wheeled robot navigation), adapted from kadhyo/wheeledrobotsimulations. It reads `observation`, `reward`, `terminated`, `truncated` and 4 more; runs `step`, `reset` and `seed`. `step`: advance the simulated world by a bounded number of fixed timesteps, optionally applying an action for each step, and return the resulting observation and terminal flags. A simulator: the market serves it with a stand-in that needs no simulator install.","measures":["observation","reward","terminated","truncated","tick","episode","seed","info"],"adjusts":[],"actions":[{"name":"step","description":"Advance the simulated world by a bounded number of fixed timesteps, optionally applying an action for each step, and return the resulting observation and terminal flags."},{"name":"reset","description":"Reset the simulated world to a scenario start state and return the initial observation. When a seed is supplied the endpoint records it in the receipt; otherwise the endpoint's declared default seed applies."},{"name":"seed","description":"Set the seed used by the simulated world's random number generators for subsequent steps, without resetting the world. The accepted seed is echoed in the receipt."}],"tags":["wheeled-robot","navigation","laser","reinforcement-learning","simulation","gym","libfastsim"],"backends":["fake"],"served_backend":"fake","evidence":"contract_checked","upstream":{"repo_url":"https://github.com/kadhyo/wheeledrobotsimulations","commit":"821f75691403aa92d683c4fe7c080933dea72bf6","license":"NOASSERTION"},"stars":12,"install":{"openai4s":"openai4s lab add robots/kadhyo__wheeledrobotsimulations","mhs":"mhs serve robots/kadhyo__wheeledrobotsimulations --port 7400","mcp":"mhs serve robots/kadhyo__wheeledrobotsimulations --mcp"}},
{"id":"robots/kami-code__dexart-release","name":"DexArt laptop task (allegro hand + xArm6, Sapien)","device_id":"mhs://localhost/dexart-laptop","track":"robots","category":"Simulation","topic":"robot manipulation","kind":"world.sim","vendor":"Kami-code","model":"DexArt laptop task","mode":"simulated","risk":"R0","family":"gymnasium","role":"sim-env","intro":"DexArt laptop task (allegro hand + xArm6, Sapien), adapted from kami-code/dexart-release. It reads `observation`, `reward`, `terminated`, `truncated` and 4 more; runs `step`, `reset` and `seed`. `step`: advance the simulated world by a bounded number of fixed timesteps, optionally applying an action for each step, and return the resulting observation and terminal flags. A simulator: the market serves it with a stand-in that needs no simulator install.","measures":["observation","reward","terminated","truncated","tick","episode","seed","info"],"adjusts":[],"actions":[{"name":"step","description":"Advance the simulated world by a bounded number of fixed timesteps, optionally applying an action for each step, and return the resulting observation and terminal flags."},{"name":"reset","description":"Reset the simulated world to a scenario start state and return the initial observation. When a seed is supplied the endpoint records it in the receipt; otherwise the endpoint's declared default seed applies."},{"name":"seed","description":"Set the seed used by the simulated world's random number generators for subsequent steps, without resetting the world. The accepted seed is echoed in the receipt."}],"tags":["dexart","sapien","dexterous-manipulation","articulated-objects","reinforcement-learning","simulation","gym"],"backends":["fake"],"served_backend":"fake","evidence":"contract_checked","upstream":{"repo_url":"https://github.com/kami-code/dexart-release","commit":"d6ab75e1a0b81384d1ac918cbfd4d97b1f230149","license":"Apache-2.0"},"stars":153,"install":{"openai4s":"openai4s lab add robots/kami-code__dexart-release","mhs":"mhs serve robots/kami-code__dexart-release --port 7400","mcp":"mhs serve robots/kami-code__dexart-release --mcp"}},
{"id":"robots/karthik0497__ros2-amr-simulation","name":"ros2-amr-simulation differential-drive base","device_id":"mhs://localhost/ros2-amr-simulation","track":"robots","category":"Mobile robots","topic":null,"kind":"robot.mobile_base","vendor":"karthik0497","model":"amr_robot in the warehouse.sdf world","mode":"simulated","risk":"R2","family":"ros","role":"sim-env","intro":"ros2-amr-simulation differential-drive base, adapted from karthik0497/ros2-amr-simulation. It reads `pose`, `twist`, `read_sim_clock` and `read_joint_states`; runs `publish_cmd_vel`. `publish_cmd_vel`: publish one geometry_msgs/Twist velocity setpoint to /cmd_vel for the gz-sim DiffDrive plugin. The receipt confirms only that rosbridge accepted the publication, not motion, arrival or stopping. A simulator: the market serves it with a stand-in that needs no simulator install.","measures":["pose","twist","read_sim_clock","read_joint_states"],"adjusts":[],"actions":[{"name":"publish_cmd_vel","description":"Publish one geometry_msgs/Twist velocity setpoint to /cmd_vel for the gz-sim DiffDrive plugin. The receipt confirms only that rosbridge accepted the publication, not motion, arrival or stopping."}],"tags":["ros","ros2","gazebo","simulation","mobile-base","cmd-vel","odometry","differential-drive"],"backends":["fake"],"served_backend":"fake","evidence":"contract_checked","upstream":{"repo_url":"https://github.com/karthik0497/ros2-amr-simulation","commit":"202aad5cac8842dcf94385be4ed186fdd8b29718","license":"MIT"},"stars":1,"install":{"openai4s":"openai4s lab add robots/karthik0497__ros2-amr-simulation","mhs":"mhs serve robots/karthik0497__ros2-amr-simulation --port 7400","mcp":"mhs serve robots/karthik0497__ros2-amr-simulation --mcp"}},
{"id":"robots/kautenja__gym-super-mario-bros","name":"Gymnasium Super Mario Bros. (NES emulator)","device_id":"mhs://localhost/super-mario-bros","track":"robots","category":"Simulation","topic":null,"kind":"world.sim","vendor":"Christian Kauten","model":"SuperMarioBros-v0","mode":"simulated","risk":"R0","family":"gymnasium","role":"sim-env","intro":"Gymnasium Super Mario Bros. (NES emulator), adapted from kautenja/gym-super-mario-bros. It reads `observation`, `reward`, `terminated`, `truncated` and 4 more; runs `step`, `reset` and `seed`. `step`: advance the simulated world by a bounded number of fixed timesteps, optionally applying an action for each step, and return the resulting observation and terminal flags. A simulator: the market serves it with a stand-in that needs no simulator install.","measures":["observation","reward","terminated","truncated","tick","episode","seed","info"],"adjusts":[],"actions":[{"name":"step","description":"Advance the simulated world by a bounded number of fixed timesteps, optionally applying an action for each step, and return the resulting observation and terminal flags."},{"name":"reset","description":"Reset the simulated world to a scenario start state and return the initial observation. When a seed is supplied the endpoint records it in the receipt; otherwise the endpoint's declared default seed applies."},{"name":"seed","description":"Set the seed used by the simulated world's random number generators for subsequent steps, without resetting the world. The accepted seed is echoed in the receipt."}],"tags":["super-mario-bros","nes","reinforcement-learning","simulation","gymnasium"],"backends":["fake"],"served_backend":"fake","evidence":"contract_checked","upstream":{"repo_url":"https://github.com/kautenja/gym-super-mario-bros","commit":"7ba17c778e1df8240fd1cf99dbe5238d0e9b93aa","license":"MIT"},"stars":900,"install":{"openai4s":"openai4s lab add robots/kautenja__gym-super-mario-bros","mhs":"mhs serve robots/kautenja__gym-super-mario-bros --port 7400","mcp":"mhs serve robots/kautenja__gym-super-mario-bros --mcp"}},
{"id":"robots/kautenja__nes-py","name":"nes-py NES environment","device_id":"mhs://localhost/nes-py","track":"robots","category":"Simulation","topic":null,"kind":"world.sim","vendor":"Kautenja","model":"nes-py","mode":"simulated","risk":"R0","family":"gymnasium","role":"sim-env","intro":"nes-py NES environment, adapted from kautenja/nes-py. It reads `observation`, `reward`, `terminated`, `truncated` and 4 more; runs `step`, `reset` and `seed`. `step`: advance the simulated world by a bounded number of fixed timesteps, optionally applying an action for each step, and return the resulting observation and terminal flags. A simulator: the market serves it with a stand-in that needs no simulator install.","measures":["observation","reward","terminated","truncated","tick","episode","seed","info"],"adjusts":[],"actions":[{"name":"step","description":"Advance the simulated world by a bounded number of fixed timesteps, optionally applying an action for each step, and return the resulting observation and terminal flags."},{"name":"reset","description":"Reset the simulated world to a scenario start state and return the initial observation. When a seed is supplied the endpoint records it in the receipt; otherwise the endpoint's declared default seed applies."},{"name":"seed","description":"Set the seed used by the simulated world's random number generators for subsequent steps, without resetting the world. The accepted seed is echoed in the receipt."}],"tags":["nes","emulator","reinforcement-learning","simulation","gymnasium"],"backends":["fake"],"served_backend":"fake","evidence":"contract_checked","upstream":{"repo_url":"https://github.com/kautenja/nes-py","commit":"8d27b099f24a57afaac7339fab7ec0f1f96a59c8","license":"MIT"},"stars":284,"install":{"openai4s":"openai4s lab add robots/kautenja__nes-py","mhs":"mhs serve robots/kautenja__nes-py --port 7400","mcp":"mhs serve robots/kautenja__nes-py --mcp"}},
{"id":"robots/kinovarobotics__ros_kortex","name":"Kinova Kortex ROS 1 base stop services","device_id":"mhs://localhost/kortex_arm","track":"robots","category":"Robot arms and grippers","topic":null,"kind":"robot.arm","vendor":"Kinovarobotics","model":null,"mode":"hardware","risk":"R2","family":"ros","role":"device-driver","intro":"Kinova Kortex ROS 1 base stop services, adapted from kinovarobotics/ros_kortex. It runs `stop` and `apply_emergency_stop`. `stop`: invoke the acknowledged Kortex base/stop service; this reports the ROS callback result only, not a measured stopping position or zero velocity. A hardware driver: the market serves its fake backend, so no instrument is needed.","measures":[],"adjusts":[],"actions":[{"name":"stop","description":"Invoke the acknowledged Kortex base/stop service; this reports the ROS callback result only, not a measured stopping position or zero velocity"},{"name":"apply_emergency_stop","description":"Invoke the acknowledged Kortex base/apply_emergency_stop service; this reports the ROS callback result only and does not claim a physical emergency stop"}],"tags":["ros","ros1","kinova","kortex","stop","emergency-stop"],"backends":["fake"],"served_backend":"fake","evidence":"contract_checked","upstream":{"repo_url":"https://github.com/kinovarobotics/ros_kortex","commit":"c3280d8a6a6b5d96590d51538e3f265710a6c77d","license":"BSD-3-Clause"},"stars":219,"install":{"openai4s":"openai4s lab add robots/kinovarobotics__ros_kortex","mhs":"mhs serve robots/kinovarobotics__ros_kortex --port 7400","mcp":"mhs serve robots/kinovarobotics__ros_kortex --mcp"}},
{"id":"robots/kjell-k__airgym","name":"AirGym AirSim quadrotor environment (simulated)","device_id":"mhs://localhost/airgym","track":"robots","category":"Simulation","topic":null,"kind":"world.sim","vendor":"Kjell Kersandt","model":"AirSimEnv","mode":"simulated","risk":"R0","family":"gymnasium","role":"sim-env","intro":"AirGym AirSim quadrotor environment (simulated), adapted from kjell-k/airgym. It reads `observation`, `reward`, `terminated`, `truncated` and 4 more; runs `step`, `reset` and `seed`. `step`: advance the simulated world by a bounded number of fixed timesteps, optionally applying an action for each step, and return the resulting observation and terminal flags. A simulator: the market serves it with a stand-in that needs no simulator install.","measures":["observation","reward","terminated","truncated","tick","episode","seed","info"],"adjusts":[],"actions":[{"name":"step","description":"Advance the simulated world by a bounded number of fixed timesteps, optionally applying an action for each step, and return the resulting observation and terminal flags."},{"name":"reset","description":"Reset the simulated world to a scenario start state and return the initial observation. When a seed is supplied the endpoint records it in the receipt; otherwise the endpoint's declared default seed applies."},{"name":"seed","description":"Set the seed used by the simulated world's random number generators for subsequent steps, without resetting the world. The accepted seed is echoed in the receipt."}],"tags":["airsim","quadrotor","depth-camera","reinforcement-learning","simulation","gymnasium"],"backends":["fake"],"served_backend":"fake","evidence":"contract_checked","upstream":{"repo_url":"https://github.com/kjell-k/airgym","commit":"818749ab1e93f41e1f1cf62a98f15ee9e4461568","license":"MIT"},"stars":115,"install":{"openai4s":"openai4s lab add robots/kjell-k__airgym","mhs":"mhs serve robots/kjell-k__airgym --port 7400","mcp":"mhs serve robots/kjell-k__airgym --mcp"}},
{"id":"robots/klintan__ros2_track_imu","name":"TrackIMU ROS 2 IMU","device_id":"mhs://localhost/track_imu","track":"robots","category":"Sensors and cameras","topic":null,"kind":"sensor.imu","vendor":"klintan","model":"TrackIMU","mode":"hardware","risk":"R0","family":"ros","role":"device-driver","intro":"TrackIMU ROS 2 IMU, adapted from klintan/ros2_track_imu. It runs `read_imu`. `read_imu`: read linear acceleration, angular velocity and orientation from an inertial measurement unit, with the declared reference frame and timestamp. A hardware driver: the market serves its fake backend, so no instrument is needed.","measures":[],"adjusts":[],"actions":[{"name":"read_imu","description":"Read linear acceleration, angular velocity and orientation from an inertial measurement unit, with the declared reference frame and timestamp."}],"tags":["ros","ros2","imu","sensor","trackimu","serial"],"backends":["fake"],"served_backend":"fake","evidence":"contract_checked","upstream":{"repo_url":"https://github.com/klintan/ros2_track_imu","commit":"21741c413ceec1104c62276a6d00deddb95fec4c","license":"MIT"},"stars":0,"install":{"openai4s":"openai4s lab add robots/klintan__ros2_track_imu","mhs":"mhs serve robots/klintan__ros2_track_imu --port 7400","mcp":"mhs serve robots/klintan__ros2_track_imu --mcp"}},
{"id":"robots/klintan__ros2_usb_camera","name":"ROS 2 USB camera images and calibration","device_id":"mhs://localhost/usb_camera","track":"robots","category":"Sensors and cameras","topic":null,"kind":"sensor.camera","vendor":"klintan","model":null,"mode":"hardware","risk":"R0","family":"ros","role":"device-driver","intro":"ROS 2 USB camera images and calibration, adapted from klintan/ros2_usb_camera. It reads `frame_id`, `read_camera_calibration` and `read_camera_info`; runs `capture`. `capture`: capture a single image from a named camera with a declared resolution and exposure and return an image artifact reference. A hardware driver: the market serves its fake backend, so no instrument is needed.","measures":["frame_id","read_camera_calibration","read_camera_info"],"adjusts":[],"actions":[{"name":"capture","description":"Capture a single image from a named camera with a declared resolution and exposure and return an image artifact reference."}],"tags":["ros","ros2","camera","camera-info","image","calibration","frame"],"backends":["fake"],"served_backend":"fake","evidence":"contract_checked","upstream":{"repo_url":"https://github.com/klintan/ros2_usb_camera","commit":"146c5911ebcc5539eb8550e02763abe1fdfa8d05","license":"Apache-2.0"},"stars":0,"install":{"openai4s":"openai4s lab add robots/klintan__ros2_usb_camera","mhs":"mhs serve robots/klintan__ros2_usb_camera --port 7400","mcp":"mhs serve robots/klintan__ros2_usb_camera --mcp"}},
{"id":"robots/klintan__ros2_video_streamer","name":"ROS 2 video streamer camera simulator","device_id":"mhs://localhost/video_streamer","track":"robots","category":"Sensors and cameras","topic":null,"kind":"sensor.camera","vendor":"klintan","model":"camera_simulator","mode":"simulated","risk":"R0","family":"ros","role":"sim-env","intro":"ROS 2 video streamer camera simulator, adapted from klintan/ros2_video_streamer. It runs `capture_image`. `capture_image`: capture a single image from a named camera with a declared resolution and exposure and return an image artifact reference. A simulator: the market serves it with a stand-in that needs no simulator install.","measures":[],"adjusts":[],"actions":[{"name":"capture_image","description":"Capture a single image from a named camera with a declared resolution and exposure and return an image artifact reference."}],"tags":["ros","ros2","camera","simulator","image","video","replay"],"backends":["fake"],"served_backend":"fake","evidence":"contract_checked","upstream":{"repo_url":"https://github.com/klintan/ros2_video_streamer","commit":"4fc6d858d748322250cb0dc5a7864ac2576d148f","license":"MIT"},"stars":29,"install":{"openai4s":"openai4s lab add robots/klintan__ros2_video_streamer","mhs":"mhs serve robots/klintan__ros2_video_streamer --port 7400","mcp":"mhs serve robots/klintan__ros2_video_streamer --mcp"}},
{"id":"robots/kousheekc__isaac_drone_racer","name":"Isaac Drone Racer (Isaac Lab Gymnasium environment)","device_id":"mhs://localhost/isaac-drone-racer","track":"robots","category":"Simulation","topic":"UAVs","kind":"world.sim","vendor":"Kousheek Chakraborty","model":"Isaac-Drone-Racer-v0","mode":"simulated","risk":"R0","family":"gymnasium","role":"sim-env","intro":"Isaac Drone Racer (Isaac Lab Gymnasium environment), adapted from kousheekc/isaac_drone_racer. It reads `observation`, `reward`, `terminated`, `truncated` and 4 more; runs `step`, `reset` and `seed`. `step`: advance the simulated world by a bounded number of fixed timesteps, optionally applying an action for each step, and return the resulting observation and terminal flags. A simulator: the market serves it with a stand-in that needs no simulator install.","measures":["observation","reward","terminated","truncated","tick","episode","seed","info"],"adjusts":[],"actions":[{"name":"step","description":"Advance the simulated world by a bounded number of fixed timesteps, optionally applying an action for each step, and return the resulting observation and terminal flags."},{"name":"reset","description":"Reset the simulated world to a scenario start state and return the initial observation. When a seed is supplied the endpoint records it in the receipt; otherwise the endpoint's declared default seed applies."},{"name":"seed","description":"Set the seed used by the simulated world's random number generators for subsequent steps, without resetting the world. The accepted seed is echoed in the receipt."}],"tags":["drone","racing","quadrotor","reinforcement-learning","simulation","isaaclab","gymnasium"],"backends":["fake"],"served_backend":"fake","evidence":"contract_checked","upstream":{"repo_url":"https://github.com/kousheekc/isaac_drone_racer","commit":"d530f67768d53701454f406e4da967e0e9c30842","license":"BSD-3-Clause"},"stars":200,"install":{"openai4s":"openai4s lab add robots/kousheekc__isaac_drone_racer","mhs":"mhs serve robots/kousheekc__isaac_drone_racer --port 7400","mcp":"mhs serve robots/kousheekc__isaac_drone_racer --mcp"}},
{"id":"robots/kscalelabs__kbot","name":"K-Bot V2 feet (MuJoCo simulation)","device_id":"mhs://localhost/kbot-v2","track":"robots","category":"Simulation","topic":"humanoid robots","kind":"world.sim","vendor":"K-Scale Labs","model":"K-Bot V2 (kbot-v2-feet)","mode":"simulated","risk":"R0","family":"mujoco","role":"twin-candidate","intro":"K-Bot V2 feet (MuJoCo simulation), adapted from kscalelabs/kbot. It reads `time_ms`, `qpos`, `qvel`, `ctrl` and 4 more; runs `step` and `reset`. `step`: advance the simulated world by a bounded number of fixed timesteps, optionally applying an action for each step, and return the resulting observation and terminal flags. A simulator: the market serves it with a stand-in that needs no simulator install.","measures":["time_ms","qpos","qvel","ctrl","tick","timestep_ms","seed","native_checkpoint"],"adjusts":[],"actions":[{"name":"step","description":"Advance the simulated world by a bounded number of fixed timesteps, optionally applying an action for each step, and return the resulting observation and terminal flags."},{"name":"reset","description":"Reset the simulated world to a scenario start state and return the initial observation. When a seed is supplied the endpoint records it in the receipt; otherwise the endpoint's declared default seed applies."}],"tags":["humanoid","k-scale","kbot","mujoco","robot","simulation"],"backends":["fake"],"served_backend":"fake","evidence":"contract_checked","upstream":{"repo_url":"https://github.com/kscalelabs/kbot","commit":"76aba70e3372fecf3583ed6dbe5f379d44c8511c","license":"MIT"},"stars":0,"install":{"openai4s":"openai4s lab add robots/kscalelabs__kbot","mhs":"mhs serve robots/kscalelabs__kbot --port 7400","mcp":"mhs serve robots/kscalelabs__kbot --mcp"}},
{"id":"robots/kscalelabs__mujoco_playground","name":"K-Bot feet-only flat terrain scene (MuJoCo)","device_id":"mhs://localhost/kbot-flat","track":"robots","category":"Simulation","topic":"humanoid robots","kind":"world.sim","vendor":"K-Scale Labs","model":"kbot feetonly flat terrain scene","mode":"simulated","risk":"R0","family":"mujoco","role":"sim-env","intro":"K-Bot feet-only flat terrain scene (MuJoCo), adapted from kscalelabs/mujoco_playground. It reads `time_ms`, `qpos`, `qvel`, `ctrl` and 4 more; runs `step` and `reset`. `step`: advance the simulated world by a bounded number of fixed timesteps, optionally applying an action for each step, and return the resulting observation and terminal flags. A simulator: the market serves it with a stand-in that needs no simulator install.","measures":["time_ms","qpos","qvel","ctrl","tick","timestep_ms","seed","native_checkpoint"],"adjusts":[],"actions":[{"name":"step","description":"Advance the simulated world by a bounded number of fixed timesteps, optionally applying an action for each step, and return the resulting observation and terminal flags."},{"name":"reset","description":"Reset the simulated world to a scenario start state and return the initial observation. When a seed is supplied the endpoint records it in the receipt; otherwise the endpoint's declared default seed applies."}],"tags":["mujoco","kbot","humanoid","feet-only","flat-terrain","simulation"],"backends":["fake"],"served_backend":"fake","evidence":"contract_checked","upstream":{"repo_url":"https://github.com/kscalelabs/mujoco_playground","commit":"9762ac537cf8d03197ce8bfeaf116f56687f3c19","license":"MIT"},"stars":9,"install":{"openai4s":"openai4s lab add robots/kscalelabs__mujoco_playground","mhs":"mhs serve robots/kscalelabs__mujoco_playground --port 7400","mcp":"mhs serve robots/kscalelabs__mujoco_playground --mcp"}},
{"id":"robots/lachlanhurst__so100-mujoco-rl","name":"SO-100 MuJoCo Env01-v1 (reach the block)","device_id":"mhs://localhost/so100-env01","track":"robots","category":"Simulation","topic":"robot arm manipulation","kind":"world.sim","vendor":"Lachlan Hurst","model":"so100-mujoco-rl Env01-v1","mode":"simulated","risk":"R0","family":"gymnasium","role":"sim-env","intro":"SO-100 MuJoCo Env01-v1 (reach the block), adapted from lachlanhurst/so100-mujoco-rl. It reads `observation`, `reward`, `terminated`, `truncated` and 4 more; runs `step`, `reset` and `seed`. `step`: advance the simulated world by a bounded number of fixed timesteps, optionally applying an action for each step, and return the resulting observation and terminal flags. A simulator: the market serves it with a stand-in that needs no simulator install.","measures":["observation","reward","terminated","truncated","tick","episode","seed","info"],"adjusts":[],"actions":[{"name":"step","description":"Advance the simulated world by a bounded number of fixed timesteps, optionally applying an action for each step, and return the resulting observation and terminal flags."},{"name":"reset","description":"Reset the simulated world to a scenario start state and return the initial observation. When a seed is supplied the endpoint records it in the receipt; otherwise the endpoint's declared default seed applies."},{"name":"seed","description":"Set the seed used by the simulated world's random number generators for subsequent steps, without resetting the world. The accepted seed is echoed in the receipt."}],"tags":["so100","so-arm100","mujoco","gymnasium","reinforcement-learning","robot-arm","simulation"],"backends":["fake"],"served_backend":"fake","evidence":"contract_checked","upstream":{"repo_url":"https://github.com/lachlanhurst/so100-mujoco-rl","commit":"057ccecbb5c2bb06aa526714f300e801c19d3cf7","license":"MIT"},"stars":26,"install":{"openai4s":"openai4s lab add robots/lachlanhurst__so100-mujoco-rl","mhs":"mhs serve robots/lachlanhurst__so100-mujoco-rl --port 7400","mcp":"mhs serve robots/lachlanhurst__so100-mujoco-rl --mcp"}},
{"id":"robots/larics__mrs_crazyflies","name":"MRS Crazyflies cf_1 velocity interface","device_id":"mhs://localhost/mrs-crazyflies-cf1","track":"robots","category":"Mobile robots","topic":null,"kind":"robot.mobile_base","vendor":"LARICS","model":"CrazySwarm2 crazyflie_server with the mrs_crazyflies cf_1 configuration","mode":"simulated","risk":"R2","family":"ros","role":"sim-env","intro":"MRS Crazyflies cf_1 velocity interface, adapted from larics/mrs_crazyflies. It reads `pose`; runs `publish_cmd_vel` and `request_emergency_stop`. `publish_cmd_vel`: publish one geometry_msgs/Twist velocity command on /cf_1/cmd_vel; transmission only. A simulator: the market serves it with a stand-in that needs no simulator install.","measures":["pose"],"adjusts":[],"actions":[{"name":"publish_cmd_vel","description":"Publish one geometry_msgs/Twist velocity command on /cf_1/cmd_vel; transmission only"},{"name":"request_emergency_stop","description":"Call the swarm-wide /all/emergency Empty service, a motor-cut request whose response means only that the server callback returned; not a confirmed stop"}],"tags":["ros","ros2","crazyflie","uav","simulation","gazebo","crazyswarm2","larics"],"backends":["fake"],"served_backend":"fake","evidence":"contract_checked","upstream":{"repo_url":"https://github.com/larics/mrs_crazyflies","commit":"234ac04745a558601e539ce9aa33b72b4e760243","license":"NOASSERTION"},"stars":4,"install":{"openai4s":"openai4s lab add robots/larics__mrs_crazyflies","mhs":"mhs serve robots/larics__mrs_crazyflies --port 7400","mcp":"mhs serve robots/larics__mrs_crazyflies --mcp"}},
{"id":"robots/learnsyslab__crazyflow","name":"Crazyflow DroneReachPos-v0 (JAX drone simulation)","device_id":"mhs://localhost/crazyflow-drone-reach-pos","track":"robots","category":"Simulation","topic":"UAVs","kind":"world.sim","vendor":"LearnSysLab","model":"Crazyflow DroneReachPos-v0","mode":"simulated","risk":"R0","family":"gymnasium","role":"sim-env","intro":"Crazyflow DroneReachPos-v0 (JAX drone simulation), adapted from learnsyslab/crazyflow. It reads `observation`, `reward`, `terminated`, `truncated` and 4 more; runs `step`, `reset` and `seed`. `step`: advance the simulated world by a bounded number of fixed timesteps, optionally applying an action for each step, and return the resulting observation and terminal flags. A simulator: the market serves it with a stand-in that needs no simulator install.","measures":["observation","reward","terminated","truncated","tick","episode","seed","info"],"adjusts":[],"actions":[{"name":"step","description":"Advance the simulated world by a bounded number of fixed timesteps, optionally applying an action for each step, and return the resulting observation and terminal flags."},{"name":"reset","description":"Reset the simulated world to a scenario start state and return the initial observation. When a seed is supplied the endpoint records it in the receipt; otherwise the endpoint's declared default seed applies."},{"name":"seed","description":"Set the seed used by the simulated world's random number generators for subsequent steps, without resetting the world. The accepted seed is echoed in the receipt."}],"tags":["crazyflow","drone","quadrotor","reach-position","reinforcement-learning","simulation","gymnasium","jax","mujoco"],"backends":["fake"],"served_backend":"fake","evidence":"contract_checked","upstream":{"repo_url":"https://github.com/learnsyslab/crazyflow","commit":"70d09e455859580c45b0e4a06ee4a92efbbc2d6f","license":"MIT"},"stars":187,"install":{"openai4s":"openai4s lab add robots/learnsyslab__crazyflow","mhs":"mhs serve robots/learnsyslab__crazyflow --port 7400","mcp":"mhs serve robots/learnsyslab__crazyflow --mcp"}},
{"id":"robots/learnsyslab__gym-pybullet-drones","name":"gym-pybullet-drones CtrlAviary (ctrl-aviary-v0)","device_id":"mhs://localhost/ctrl-aviary","track":"robots","category":"Simulation","topic":"UAVs","kind":"world.sim","vendor":"LearnSysLab","model":"gym-pybullet-drones (PyBullet drone simulation)","mode":"simulated","risk":"R0","family":"gymnasium","role":"sim-env","intro":"gym-pybullet-drones CtrlAviary (ctrl-aviary-v0), adapted from learnsyslab/gym-pybullet-drones. It reads `observation`, `reward`, `terminated`, `truncated` and 4 more; runs `step`, `reset` and `seed`. `step`: advance the simulated world by a bounded number of fixed timesteps, optionally applying an action for each step, and return the resulting observation and terminal flags. A simulator: the market serves it with a stand-in that needs no simulator install.","measures":["observation","reward","terminated","truncated","tick","episode","seed","info"],"adjusts":[],"actions":[{"name":"step","description":"Advance the simulated world by a bounded number of fixed timesteps, optionally applying an action for each step, and return the resulting observation and terminal flags."},{"name":"reset","description":"Reset the simulated world to a scenario start state and return the initial observation. When a seed is supplied the endpoint records it in the receipt; otherwise the endpoint's declared default seed applies."},{"name":"seed","description":"Set the seed used by the simulated world's random number generators for subsequent steps, without resetting the world. The accepted seed is echoed in the receipt."}],"tags":["quadrotor","drone","ctrl-aviary","pybullet","reinforcement-learning","simulation","gymnasium"],"backends":["fake"],"served_backend":"fake","evidence":"contract_checked","upstream":{"repo_url":"https://github.com/learnsyslab/gym-pybullet-drones","commit":"7ebad1ecabd28a7000add2d05f888aa2e837c2cc","license":"MIT"},"stars":2155,"install":{"openai4s":"openai4s lab add robots/learnsyslab__gym-pybullet-drones","mhs":"mhs serve robots/learnsyslab__gym-pybullet-drones --port 7400","mcp":"mhs serve robots/learnsyslab__gym-pybullet-drones --mcp"}},
{"id":"robots/learnsyslab__safe-control-gym","name":"Safe-Control-Gym CartPole (PyBullet)","device_id":"mhs://localhost/cartpole","track":"robots","category":"Simulation","topic":"UAVs","kind":"world.sim","vendor":"LearnSysLab","model":"safe-control-gym cartpole","mode":"simulated","risk":"R0","family":"gymnasium","role":"sim-env","intro":"Safe-Control-Gym CartPole (PyBullet), adapted from learnsyslab/safe-control-gym. It reads `observation`, `reward`, `terminated`, `truncated` and 4 more; runs `step`, `reset` and `seed`. `step`: advance the simulated world by a bounded number of fixed timesteps, optionally applying an action for each step, and return the resulting observation and terminal flags. A simulator: the market serves it with a stand-in that needs no simulator install.","measures":["observation","reward","terminated","truncated","tick","episode","seed","info"],"adjusts":[],"actions":[{"name":"step","description":"Advance the simulated world by a bounded number of fixed timesteps, optionally applying an action for each step, and return the resulting observation and terminal flags."},{"name":"reset","description":"Reset the simulated world to a scenario start state and return the initial observation. When a seed is supplied the endpoint records it in the receipt; otherwise the endpoint's declared default seed applies."},{"name":"seed","description":"Set the seed used by the simulated world's random number generators for subsequent steps, without resetting the world. The accepted seed is echoed in the receipt."}],"tags":["cartpole","safe-control-gym","pybullet","reinforcement-learning","simulation","gymnasium"],"backends":["fake"],"served_backend":"fake","evidence":"contract_checked","upstream":{"repo_url":"https://github.com/learnsyslab/safe-control-gym","commit":"6b5391d014f36fdfa0f9d22d92c77387e5274308","license":"MIT"},"stars":921,"install":{"openai4s":"openai4s lab add robots/learnsyslab__safe-control-gym","mhs":"mhs serve robots/learnsyslab__safe-control-gym --port 7400","mcp":"mhs serve robots/learnsyslab__safe-control-gym --mcp"}},
{"id":"robots/leekwoon__nav-gym","name":"nav-gym NavGym-v0 navigation simulator","device_id":"mhs://localhost/nav-gym","track":"robots","category":"Simulation","topic":"mobile navigation","kind":"world.sim","vendor":"leekwoon","model":"NavGym-v0","mode":"simulated","risk":"R0","family":"gymnasium","role":"sim-env","intro":"nav-gym NavGym-v0 navigation simulator, adapted from leekwoon/nav-gym. It reads `observation`, `reward`, `terminated`, `truncated` and 4 more; runs `step`, `reset` and `seed`. `step`: advance the simulated world by a bounded number of fixed timesteps, optionally applying an action for each step, and return the resulting observation and terminal flags. A simulator: the market serves it with a stand-in that needs no simulator install.","measures":["observation","reward","terminated","truncated","tick","episode","seed","info"],"adjusts":[],"actions":[{"name":"step","description":"Advance the simulated world by a bounded number of fixed timesteps, optionally applying an action for each step, and return the resulting observation and terminal flags."},{"name":"reset","description":"Reset the simulated world to a scenario start state and return the initial observation. When a seed is supplied the endpoint records it in the receipt; otherwise the endpoint's declared default seed applies."},{"name":"seed","description":"Set the seed used by the simulated world's random number generators for subsequent steps, without resetting the world. The accepted seed is echoed in the receipt."}],"tags":["navigation","reinforcement-learning","simulation","gym","crowd"],"backends":["fake"],"served_backend":"fake","evidence":"contract_checked","upstream":{"repo_url":"https://github.com/leekwoon/nav-gym","commit":"92aa9ce66074cc51d5aa598205b52443976d8af7","license":"MIT"},"stars":29,"install":{"openai4s":"openai4s lab add robots/leekwoon__nav-gym","mhs":"mhs serve robots/leekwoon__nav-gym --port 7400","mcp":"mhs serve robots/leekwoon__nav-gym --mcp"}},
{"id":"robots/leesweqq__drl_peg-in-hole_ur5","name":"PyBullet UR5 peg-in-hole Gymnasium environment","device_id":"mhs://localhost/peg-in-hole","track":"robots","category":"Simulation","topic":null,"kind":"world.sim","vendor":"leesweqq","model":"drl_peg-in-hole_ur5","mode":"simulated","risk":"R0","family":"gymnasium","role":"sim-env","intro":"PyBullet UR5 peg-in-hole Gymnasium environment, adapted from leesweqq/drl_peg-in-hole_ur5. It reads `observation`, `reward`, `terminated`, `truncated` and 4 more; runs `step`, `reset` and `seed`. `step`: advance the simulated world by a bounded number of fixed timesteps, optionally applying an action for each step, and return the resulting observation and terminal flags. A simulator: the market serves it with a stand-in that needs no simulator install.","measures":["observation","reward","terminated","truncated","tick","episode","seed","info"],"adjusts":[],"actions":[{"name":"step","description":"Advance the simulated world by a bounded number of fixed timesteps, optionally applying an action for each step, and return the resulting observation and terminal flags."},{"name":"reset","description":"Reset the simulated world to a scenario start state and return the initial observation. When a seed is supplied the endpoint records it in the receipt; otherwise the endpoint's declared default seed applies."},{"name":"seed","description":"Set the seed used by the simulated world's random number generators for subsequent steps, without resetting the world. The accepted seed is echoed in the receipt."}],"tags":["peg-in-hole","ur5","pybullet","reinforcement-learning","simulation","gymnasium"],"backends":["fake"],"served_backend":"fake","evidence":"contract_checked","upstream":{"repo_url":"https://github.com/leesweqq/drl_peg-in-hole_ur5","commit":"36f75b016315375918336db141ccd983a95acdef","license":"MIT"},"stars":73,"install":{"openai4s":"openai4s lab add robots/leesweqq__drl_peg-in-hole_ur5","mhs":"mhs serve robots/leesweqq__drl_peg-in-hole_ur5 --port 7400","mcp":"mhs serve robots/leesweqq__drl_peg-in-hole_ur5 --mcp"}},
{"id":"robots/leggedrobotics__nav-suite","name":"nav-suite depth navigation (Anymal D, Isaac Lab)","device_id":"mhs://localhost/nav-suite-depth-nav","track":"robots","category":"Simulation","topic":null,"kind":"world.sim","vendor":"leggedrobotics","model":"nav-suite","mode":"simulated","risk":"R0","family":"gymnasium","role":"sim-env","intro":"nav-suite depth navigation (Anymal D, Isaac Lab), adapted from leggedrobotics/nav-suite. It reads `observation`, `reward`, `terminated`, `truncated` and 4 more; runs `step`, `reset` and `seed`. `step`: advance the simulated world by a bounded number of fixed timesteps, optionally applying an action for each step, and return the resulting observation and terminal flags. A simulator: the market serves it with a stand-in that needs no simulator install.","measures":["observation","reward","terminated","truncated","tick","episode","seed","info"],"adjusts":[],"actions":[{"name":"step","description":"Advance the simulated world by a bounded number of fixed timesteps, optionally applying an action for each step, and return the resulting observation and terminal flags."},{"name":"reset","description":"Reset the simulated world to a scenario start state and return the initial observation. When a seed is supplied the endpoint records it in the receipt; otherwise the endpoint's declared default seed applies."},{"name":"seed","description":"Set the seed used by the simulated world's random number generators for subsequent steps, without resetting the world. The accepted seed is echoed in the receipt."}],"tags":["navigation","depth","anymal","isaac-lab","reinforcement-learning","simulation","gymnasium"],"backends":["fake"],"served_backend":"fake","evidence":"contract_checked","upstream":{"repo_url":"https://github.com/leggedrobotics/nav-suite","commit":"648ba3b28dac61aec48e150a507c2a8507646ea2","license":"Apache-2.0"},"stars":111,"install":{"openai4s":"openai4s lab add robots/leggedrobotics__nav-suite","mhs":"mhs serve robots/leggedrobotics__nav-suite --port 7400","mcp":"mhs serve robots/leggedrobotics__nav-suite --mcp"}},
{"id":"robots/lifelong-robot-learning__libero","name":"LIBERO OffScreenRenderEnv tabletop manipulation","device_id":"mhs://localhost/libero","track":"robots","category":"Simulation","topic":"robot manipulation","kind":"world.sim","vendor":"Lifelong Robot Learning","model":"LIBERO","mode":"simulated","risk":"R0","family":"mujoco","role":"sim-env","intro":"LIBERO OffScreenRenderEnv tabletop manipulation, adapted from lifelong-robot-learning/libero. It reads `observation`, `reward`, `terminated`, `truncated` and 3 more; runs `reset` and `step`. `reset`: reset the simulated world to a scenario start state and return the initial observation. When a seed is supplied the endpoint records it in the receipt; otherwise the endpoint's declared default seed applies. A simulator: the market serves it with a stand-in that needs no simulator install.","measures":["observation","reward","terminated","truncated","tick","episode","seed"],"adjusts":[],"actions":[{"name":"reset","description":"Reset the simulated world to a scenario start state and return the initial observation. When a seed is supplied the endpoint records it in the receipt; otherwise the endpoint's declared default seed applies."},{"name":"step","description":"Advance the simulated world by a bounded number of fixed timesteps, optionally applying an action for each step, and return the resulting observation and terminal flags."}],"tags":["libero","robosuite","mujoco","simulation","manipulation","reinforcement-learning"],"backends":["fake"],"served_backend":"fake","evidence":"contract_checked","upstream":{"repo_url":"https://github.com/lifelong-robot-learning/libero","commit":"8f1084e3132a39270c3a13ebe37270a43ece2a01","license":"MIT"},"stars":2397,"install":{"openai4s":"openai4s lab add robots/lifelong-robot-learning__libero","mhs":"mhs serve robots/lifelong-robot-learning__libero --port 7400","mcp":"mhs serve robots/lifelong-robot-learning__libero --mcp"}},
{"id":"robots/lightwheelai__lw-benchhub","name":"LW-BenchHub Robocasa-Rl-G1LiftObjStateRL (Unitree G1 cube lift)","device_id":"mhs://localhost/lw-benchhub-g1-liftobj","track":"robots","category":"Simulation","topic":"robot arm manipulation","kind":"world.sim","vendor":"Lightwheel AI","model":"LW-BenchHub","mode":"simulated","risk":"R0","family":"gymnasium","role":"sim-env","intro":"LW-BenchHub Robocasa-Rl-G1LiftObjStateRL (Unitree G1 cube lift), adapted from lightwheelai/lw-benchhub. It reads `observation`, `reward`, `terminated`, `truncated` and 4 more; runs `step`, `reset` and `seed`. `step`: advance the simulated world by a bounded number of fixed timesteps, optionally applying an action for each step, and return the resulting observation and terminal flags. A simulator: the market serves it with a stand-in that needs no simulator install.","measures":["observation","reward","terminated","truncated","tick","episode","seed","info"],"adjusts":[],"actions":[{"name":"step","description":"Advance the simulated world by a bounded number of fixed timesteps, optionally applying an action for each step, and return the resulting observation and terminal flags."},{"name":"reset","description":"Reset the simulated world to a scenario start state and return the initial observation. When a seed is supplied the endpoint records it in the receipt; otherwise the endpoint's declared default seed applies."},{"name":"seed","description":"Set the seed used by the simulated world's random number generators for subsequent steps, without resetting the world. The accepted seed is echoed in the receipt."}],"tags":["lw-benchhub","robocasa","unitree-g1","manipulation","isaac-lab-arena","reinforcement-learning","simulation","gymnasium"],"backends":["fake"],"served_backend":"fake","evidence":"contract_checked","upstream":{"repo_url":"https://github.com/lightwheelai/lw-benchhub","commit":"b2bcb2d00edef691f9fcc49039cbf0bcc7464605","license":"NOASSERTION"},"stars":202,"install":{"openai4s":"openai4s lab add robots/lightwheelai__lw-benchhub","mhs":"mhs serve robots/lightwheelai__lw-benchhub --port 7400","mcp":"mhs serve robots/lightwheelai__lw-benchhub --mcp"}},
{"id":"robots/lihuang3__ur5_ros-gazebo","name":"UR5 vacuum gripper array (Gazebo)","device_id":"mhs://localhost/ur5-vacuum-gripper","track":"robots","category":"Robot arms and grippers","topic":null,"kind":"robot.gripper","vendor":"lihuang3","model":null,"mode":"simulated","risk":"R2","family":"ros","role":"sim-env","intro":"UR5 vacuum gripper array (Gazebo), adapted from lihuang3/ur5_ros-gazebo. It reads `read_grasping`, `read_tracker` and `read_block_poses`; runs `vacuum_gripper_0_on`, `vacuum_gripper_1_on`, `vacuum_gripper_2_on`, `vacuum_gripper_3_on` and 14 more. `vacuum_gripper_0_on`: call the acknowledged /ur5/vacuum_gripper/on std_srvs/Empty service; the empty reply confirms only that the plugin handler returned. A simulator: the market serves it with a stand-in that needs no simulator install.","measures":["read_grasping","read_tracker","read_block_poses"],"adjusts":[],"actions":[{"name":"vacuum_gripper_0_on","description":"Call the acknowledged /ur5/vacuum_gripper/on std_srvs/Empty service; the empty reply confirms only that the plugin handler returned"},{"name":"vacuum_gripper_1_on","description":"Call the acknowledged /ur5/vacuum_gripper1/on std_srvs/Empty service; the empty reply confirms only that the plugin handler returned"},{"name":"vacuum_gripper_2_on","description":"Call the acknowledged /ur5/vacuum_gripper2/on std_srvs/Empty service; the empty reply confirms only that the plugin handler returned"},{"name":"vacuum_gripper_3_on","description":"Call the acknowledged /ur5/vacuum_gripper3/on std_srvs/Empty service; the empty reply confirms only that the plugin handler returned"},{"name":"vacuum_gripper_4_on","description":"Call the acknowledged /ur5/vacuum_gripper4/on std_srvs/Empty service; the empty reply confirms only that the plugin handler returned"},{"name":"vacuum_gripper_5_on","description":"Call the acknowledged /ur5/vacuum_gripper5/on std_srvs/Empty service; the empty reply confirms only that the plugin handler returned"},{"name":"vacuum_gripper_6_on","description":"Call the acknowledged /ur5/vacuum_gripper6/on std_srvs/Empty service; the empty reply confirms only that the plugin handler returned"},{"name":"vacuum_gripper_7_on","description":"Call the acknowledged /ur5/vacuum_gripper7/on std_srvs/Empty service; the empty reply confirms only that the plugin handler returned"},{"name":"vacuum_gripper_8_on","description":"Call the acknowledged /ur5/vacuum_gripper8/on std_srvs/Empty service; the empty reply confirms only that the plugin handler returned"},{"name":"vacuum_gripper_0_off","description":"Release vacuum channel 0 through the /ur5/vacuum_gripper/off std_srvs/Empty service; a held object may drop, the arm is not stopped, and this is not a safe state"},{"name":"vacuum_gripper_1_off","description":"Release vacuum channel 1 through the /ur5/vacuum_gripper1/off std_srvs/Empty service; a held object may drop, the arm is not stopped, and this is not a safe state"},{"name":"vacuum_gripper_2_off","description":"Release vacuum channel 2 through the /ur5/vacuum_gripper2/off std_srvs/Empty service; a held object may drop, the arm is not stopped, and this is not a safe state"},{"name":"vacuum_gripper_3_off","description":"Release vacuum channel 3 through the /ur5/vacuum_gripper3/off std_srvs/Empty service; a held object may drop, the arm is not stopped, and this is not a safe state"},{"name":"vacuum_gripper_4_off","description":"Release vacuum channel 4 through the /ur5/vacuum_gripper4/off std_srvs/Empty service; a held object may drop, the arm is not stopped, and this is not a safe state"},{"name":"vacuum_gripper_5_off","description":"Release vacuum channel 5 through the /ur5/vacuum_gripper5/off std_srvs/Empty service; a held object may drop, the arm is not stopped, and this is not a safe state"},{"name":"vacuum_gripper_6_off","description":"Release vacuum channel 6 through the /ur5/vacuum_gripper6/off std_srvs/Empty service; a held object may drop, the arm is not stopped, and this is not a safe state"},{"name":"vacuum_gripper_7_off","description":"Release vacuum channel 7 through the /ur5/vacuum_gripper7/off std_srvs/Empty service; a held object may drop, the arm is not stopped, and this is not a safe state"},{"name":"vacuum_gripper_8_off","description":"Release vacuum channel 8 through the /ur5/vacuum_gripper8/off std_srvs/Empty service; a held object may drop, the arm is not stopped, and this is not a safe state"}],"tags":["ros","ros1","gazebo","ur5","vacuum-gripper","pick-and-place"],"backends":["fake"],"served_backend":"fake","evidence":"contract_checked","upstream":{"repo_url":"https://github.com/lihuang3/ur5_ros-gazebo","commit":"2f7b9b056bb41b9412f86589a60e25ba2816b78b","license":"NOASSERTION"},"stars":513,"install":{"openai4s":"openai4s lab add robots/lihuang3__ur5_ros-gazebo","mhs":"mhs serve robots/lihuang3__ur5_ros-gazebo --port 7400","mcp":"mhs serve robots/lihuang3__ur5_ros-gazebo --mcp"}},
{"id":"robots/limxdynamics__humanoid-description","name":"LimX HU_D03 humanoid description (MuJoCo)","device_id":"mhs://localhost/limx-hu-d03","track":"robots","category":"Simulation","topic":"humanoid robots","kind":"world.sim","vendor":"LimX Dynamics","model":"HU_D03_03","mode":"simulated","risk":"R0","family":"mujoco","role":"twin-candidate","intro":"LimX HU_D03 humanoid description (MuJoCo), adapted from limxdynamics/humanoid-description. It reads `time_ms`, `qpos`, `qvel`, `ctrl` and 4 more; runs `step` and `reset`. `step`: advance the simulated world by a bounded number of fixed timesteps, optionally applying an action for each step, and return the resulting observation and terminal flags. A simulator: the market serves it with a stand-in that needs no simulator install.","measures":["time_ms","qpos","qvel","ctrl","tick","timestep_ms","seed","native_checkpoint"],"adjusts":[],"actions":[{"name":"step","description":"Advance the simulated world by a bounded number of fixed timesteps, optionally applying an action for each step, and return the resulting observation and terminal flags."},{"name":"reset","description":"Reset the simulated world to a scenario start state and return the initial observation. When a seed is supplied the endpoint records it in the receipt; otherwise the endpoint's declared default seed applies."}],"tags":["limx","hu-d03","humanoid","mujoco","description","simulation","robot"],"backends":["fake"],"served_backend":"fake","evidence":"contract_checked","upstream":{"repo_url":"https://github.com/limxdynamics/humanoid-description","commit":"80fbd2d650c43c38916979c2a6eab7a4c79e38de","license":"Apache-2.0"},"stars":13,"install":{"openai4s":"openai4s lab add robots/limxdynamics__humanoid-description","mhs":"mhs serve robots/limxdynamics__humanoid-description --port 7400","mcp":"mhs serve robots/limxdynamics__humanoid-description --mcp"}},
{"id":"robots/limxdynamics__humanoid-mujoco-sim","name":"LimX HU_D03 humanoid (MuJoCo simulation)","device_id":"mhs://localhost/limx-hu-d03","track":"robots","category":"Simulation","topic":"humanoid robots","kind":"world.sim","vendor":"LimX Dynamics","model":"HU_D03_03","mode":"simulated","risk":"R0","family":"mujoco","role":"sim-env","intro":"LimX HU_D03 humanoid (MuJoCo simulation), adapted from limxdynamics/humanoid-mujoco-sim. It reads `time_ms`, `qpos`, `qvel`, `ctrl` and 4 more; runs `step` and `reset`. `step`: advance the simulated world by a bounded number of fixed timesteps, optionally applying an action for each step, and return the resulting observation and terminal flags. A simulator: the market serves it with a stand-in that needs no simulator install.","measures":["time_ms","qpos","qvel","ctrl","tick","timestep_ms","seed","native_checkpoint"],"adjusts":[],"actions":[{"name":"step","description":"Advance the simulated world by a bounded number of fixed timesteps, optionally applying an action for each step, and return the resulting observation and terminal flags."},{"name":"reset","description":"Reset the simulated world to a scenario start state and return the initial observation. When a seed is supplied the endpoint records it in the receipt; otherwise the endpoint's declared default seed applies."}],"tags":["limx","hu-d03","humanoid","mujoco","simulation","robot"],"backends":["fake"],"served_backend":"fake","evidence":"contract_checked","upstream":{"repo_url":"https://github.com/limxdynamics/humanoid-mujoco-sim","commit":"4a1f297725660172e590a239020cc08fb3798aa3","license":"Apache-2.0"},"stars":13,"install":{"openai4s":"openai4s lab add robots/limxdynamics__humanoid-mujoco-sim","mhs":"mhs serve robots/limxdynamics__humanoid-mujoco-sim --port 7400","mcp":"mhs serve robots/limxdynamics__humanoid-mujoco-sim --mcp"}},
{"id":"robots/linden713__humanoid_amp","name":"Humanoid AMP (Isaac Lab DirectRLEnv, dance task)","device_id":"mhs://localhost/humanoid-amp","track":"robots","category":"Simulation","topic":"humanoid robots","kind":"world.sim","vendor":"linden713","model":"Humanoid AMP","mode":"simulated","risk":"R0","family":"gymnasium","role":"sim-env","intro":"Humanoid AMP (Isaac Lab DirectRLEnv, dance task), adapted from linden713/humanoid_amp. It reads `observation`, `reward`, `terminated`, `truncated` and 4 more; runs `step`, `reset` and `seed`. `step`: advance the simulated world by a bounded number of fixed timesteps, optionally applying an action for each step, and return the resulting observation and terminal flags. A simulator: the market serves it with a stand-in that needs no simulator install.","measures":["observation","reward","terminated","truncated","tick","episode","seed","info"],"adjusts":[],"actions":[{"name":"step","description":"Advance the simulated world by a bounded number of fixed timesteps, optionally applying an action for each step, and return the resulting observation and terminal flags."},{"name":"reset","description":"Reset the simulated world to a scenario start state and return the initial observation. When a seed is supplied the endpoint records it in the receipt; otherwise the endpoint's declared default seed applies."},{"name":"seed","description":"Set the seed used by the simulated world's random number generators for subsequent steps, without resetting the world. The accepted seed is echoed in the receipt."}],"tags":["humanoid","amp","unitree","isaac-lab","isaac-sim","physx","reinforcement-learning","simulation","gymnasium"],"backends":["fake"],"served_backend":"fake","evidence":"contract_checked","upstream":{"repo_url":"https://github.com/linden713/humanoid_amp","commit":"99efa6d60e351ec3def0dc6e983baf143fd31328","license":"BSD-3-Clause"},"stars":470,"install":{"openai4s":"openai4s lab add robots/linden713__humanoid_amp","mhs":"mhs serve robots/linden713__humanoid_amp --port 7400","mcp":"mhs serve robots/linden713__humanoid_amp --mcp"}},
{"id":"robots/linorobot__linorobot2","name":"linorobot2 Gazebo mobile-base environment","device_id":"mhs://localhost/linorobot2","track":"robots","category":"Mobile robots","topic":null,"kind":"robot.mobile_base","vendor":"linorobot","model":null,"mode":"simulated","risk":"R2","family":"ros","role":"sim-env","intro":"linorobot2 Gazebo mobile-base environment, adapted from linorobot/linorobot2. It reads `read_odometry`, `read_sim_clock`, `read_imu` and `read_laser_scan`; runs `publish_cmd_vel` and `resume_simulation`. `publish_cmd_vel`: publish one geometry_msgs/Twist velocity setpoint to /cmd_vel for the gz-sim DiffDrive plugin. The receipt confirms only that rosbridge accepted the publication, not motion, arrival or stopping. A simulator: the market serves it with a stand-in that needs no simulator install.","measures":["read_odometry","read_sim_clock","read_imu","read_laser_scan"],"adjusts":[],"actions":[{"name":"publish_cmd_vel","description":"Publish one geometry_msgs/Twist velocity setpoint to /cmd_vel for the gz-sim DiffDrive plugin. The receipt confirms only that rosbridge accepted the publication, not motion, arrival or stopping."},{"name":"resume_simulation","description":"The declared re-enable after a safety reset: publish a zero Twist on /cmd_vel, then unpause the world with a WorldControl request (pause false) on /world/turtlebot3_world/control. DiffDrive keeps the last Twist it received and applies it as soon as the world runs; the zero replaces it, but it is an unacknowledged publication, so a stored command can still act for a few world steps."}],"tags":["ros","ros2","gazebo","simulation","mobile-base","cmd-vel","odometry"],"backends":["fake"],"served_backend":"fake","evidence":"contract_checked","upstream":{"repo_url":"https://github.com/linorobot/linorobot2","commit":"f6b0bd0350c4a9d6b815ef4bb5c701a1e5129711","license":"Apache-2.0"},"stars":1034,"install":{"openai4s":"openai4s lab add robots/linorobot__linorobot2","mhs":"mhs serve robots/linorobot__linorobot2 --port 7400","mcp":"mhs serve robots/linorobot__linorobot2 --mcp"}},
{"id":"robots/linqi-ye__robot-universe","name":"bdx scene (robot-universe)","device_id":"mhs://localhost/go-bdx","track":"robots","category":"Simulation","topic":null,"kind":"world.sim","vendor":"linqi-ye","model":"bdx","mode":"simulated","risk":"R0","family":"mujoco","role":"twin-candidate","intro":"bdx scene (robot-universe), adapted from linqi-ye/robot-universe. It reads `time_ms`, `qpos`, `qvel`, `ctrl` and 4 more; runs `step` and `reset`. `step`: advance the simulated world by a bounded number of fixed timesteps, optionally applying an action for each step, and return the resulting observation and terminal flags. A simulator: the market serves it with a stand-in that needs no simulator install.","measures":["time_ms","qpos","qvel","ctrl","tick","timestep_ms","seed","native_checkpoint"],"adjusts":[],"actions":[{"name":"step","description":"Advance the simulated world by a bounded number of fixed timesteps, optionally applying an action for each step, and return the resulting observation and terminal flags."},{"name":"reset","description":"Reset the simulated world to a scenario start state and return the initial observation. When a seed is supplied the endpoint records it in the receipt; otherwise the endpoint's declared default seed applies."}],"tags":["bdx","go-bdx","mujoco","robot-universe","simulation","model"],"backends":["fake"],"served_backend":"fake","evidence":"contract_checked","upstream":{"repo_url":"https://github.com/linqi-ye/robot-universe","commit":"3f2de2ab27f18cd677cf159afe1992a42daa24d8","license":"NOASSERTION"},"stars":55,"install":{"openai4s":"openai4s lab add robots/linqi-ye__robot-universe","mhs":"mhs serve robots/linqi-ye__robot-universe --port 7400","mcp":"mhs serve robots/linqi-ye__robot-universe --mcp"}},
{"id":"robots/lionlai1989__stalkerdronerl","name":"StalkerDroneRL QuadcopterTrackingEnv (ROS 2 + Gazebo simulation)","device_id":"mhs://localhost/stalker-drone-rl","track":"robots","category":"Simulation","topic":"UAVs","kind":"world.sim","vendor":"lionlai1989","model":"QuadcopterTrackingEnv","mode":"simulated","risk":"R0","family":"gymnasium","role":"sim-env","intro":"StalkerDroneRL QuadcopterTrackingEnv (ROS 2 + Gazebo simulation), adapted from lionlai1989/stalkerdronerl. It reads `observation`, `reward`, `terminated`, `truncated` and 4 more; runs `step`, `reset` and `seed`. `step`: advance the simulated world by a bounded number of fixed timesteps, optionally applying an action for each step, and return the resulting observation and terminal flags. A simulator: the market serves it with a stand-in that needs no simulator install.","measures":["observation","reward","terminated","truncated","tick","episode","seed","info"],"adjusts":[],"actions":[{"name":"step","description":"Advance the simulated world by a bounded number of fixed timesteps, optionally applying an action for each step, and return the resulting observation and terminal flags."},{"name":"reset","description":"Reset the simulated world to a scenario start state and return the initial observation. When a seed is supplied the endpoint records it in the receipt; otherwise the endpoint's declared default seed applies."},{"name":"seed","description":"Set the seed used by the simulated world's random number generators for subsequent steps, without resetting the world. The accepted seed is echoed in the receipt."}],"tags":["ros2","gazebo","quadcopter","reinforcement-learning","simulation","gymnasium"],"backends":["fake"],"served_backend":"fake","evidence":"contract_checked","upstream":{"repo_url":"https://github.com/lionlai1989/stalkerdronerl","commit":"e34db1c6a4926d22b447aa1ef93e9bb0bad4793c","license":"Apache-2.0"},"stars":29,"install":{"openai4s":"openai4s lab add robots/lionlai1989__stalkerdronerl","mhs":"mhs serve robots/lionlai1989__stalkerdronerl --port 7400","mcp":"mhs serve robots/lionlai1989__stalkerdronerl --mcp"}},
{"id":"robots/liorbenhorin__lerobot_so101_teleop","name":"LeRobot SO-101 teleoperation in Isaac Lab: Rock-A-Stack Simple","device_id":"mhs://localhost/so101-rock-a-stack","track":"robots","category":"Simulation","topic":"robot arm manipulation","kind":"world.sim","vendor":"liorbenhorin","model":"lerobot_so101_teleop","mode":"simulated","risk":"R0","family":"gymnasium","role":"sim-env","intro":"LeRobot SO-101 teleoperation in Isaac Lab: Rock-A-Stack Simple, adapted from liorbenhorin/lerobot_so101_teleop. It reads `observation`, `reward`, `terminated`, `truncated` and 4 more; runs `step`, `reset` and `seed`. `step`: advance the simulated world by a bounded number of fixed timesteps, optionally applying an action for each step, and return the resulting observation and terminal flags. A simulator: the market serves it with a stand-in that needs no simulator install.","measures":["observation","reward","terminated","truncated","tick","episode","seed","info"],"adjusts":[],"actions":[{"name":"step","description":"Advance the simulated world by a bounded number of fixed timesteps, optionally applying an action for each step, and return the resulting observation and terminal flags."},{"name":"reset","description":"Reset the simulated world to a scenario start state and return the initial observation. When a seed is supplied the endpoint records it in the receipt; otherwise the endpoint's declared default seed applies."},{"name":"seed","description":"Set the seed used by the simulated world's random number generators for subsequent steps, without resetting the world. The accepted seed is echoed in the receipt."}],"tags":["lerobot","so-101","robot-arm","teleoperation","rock-a-stack","isaac-sim","isaac-lab","reinforcement-learning","simulation","gymnasium"],"backends":["fake"],"served_backend":"fake","evidence":"contract_checked","upstream":{"repo_url":"https://github.com/liorbenhorin/lerobot_so101_teleop","commit":"9ea18b2c77df29e05c1c45bb1915dfd95514c470","license":"MIT"},"stars":67,"install":{"openai4s":"openai4s lab add robots/liorbenhorin__lerobot_so101_teleop","mhs":"mhs serve robots/liorbenhorin__lerobot_so101_teleop --port 7400","mcp":"mhs serve robots/liorbenhorin__lerobot_so101_teleop --mcp"}},
{"id":"robots/liruiw__fleet-tools","name":"Fleet-Tools Franka Drake simulation","device_id":"mhs://localhost/fleet-tools-franka","track":"robots","category":"Simulation","topic":"robot arm manipulation","kind":"world.sim","vendor":"Lirui Wang","model":"Fleet-Tools FrankaDrakeEnv","mode":"simulated","risk":"R0","family":"gymnasium","role":"sim-env","intro":"Fleet-Tools Franka Drake simulation, adapted from liruiw/fleet-tools. It reads `observation`, `reward`, `terminated`, `truncated` and 4 more; runs `step`, `reset` and `seed`. `step`: advance the simulated world by a bounded number of fixed timesteps, optionally applying an action for each step, and return the resulting observation and terminal flags. A simulator: the market serves it with a stand-in that needs no simulator install.","measures":["observation","reward","terminated","truncated","tick","episode","seed","info"],"adjusts":[],"actions":[{"name":"step","description":"Advance the simulated world by a bounded number of fixed timesteps, optionally applying an action for each step, and return the resulting observation and terminal flags."},{"name":"reset","description":"Reset the simulated world to a scenario start state and return the initial observation. When a seed is supplied the endpoint records it in the receipt; otherwise the endpoint's declared default seed applies."},{"name":"seed","description":"Set the seed used by the simulated world's random number generators for subsequent steps, without resetting the world. The accepted seed is echoed in the receipt."}],"tags":["fleet-tools","franka","panda","drake","manipulation","simulation","gym"],"backends":["fake"],"served_backend":"fake","evidence":"contract_checked","upstream":{"repo_url":"https://github.com/liruiw/fleet-tools","commit":"ca358b149f798301beb04542ee873c45daebceb9","license":"MIT"},"stars":29,"install":{"openai4s":"openai4s lab add robots/liruiw__fleet-tools","mhs":"mhs serve robots/liruiw__fleet-tools --port 7400","mcp":"mhs serve robots/liruiw__fleet-tools --mcp"}},
{"id":"robots/liuskywalkerjskd__mujoco_iiwa7_r800","name":"KUKA LBR iiwa 7 R800 (MuJoCo MJCF)","device_id":"mhs://localhost/iiwa7","track":"robots","category":"Simulation","topic":"robot arm manipulation","kind":"world.sim","vendor":"KUKA / liuskywalkerjskd iiwa7-mujoco","model":"LBR iiwa 7 R800","mode":"simulated","risk":"R0","family":"mujoco","role":"twin-candidate","intro":"KUKA LBR iiwa 7 R800 (MuJoCo MJCF), adapted from liuskywalkerjskd/mujoco_iiwa7_r800. It reads `time_ms`, `qpos`, `qvel`, `ctrl` and 4 more; runs `step` and `reset`. `step`: advance the simulated world by a bounded number of fixed timesteps, optionally applying an action for each step, and return the resulting observation and terminal flags. A simulator: the market serves it with a stand-in that needs no simulator install.","measures":["time_ms","qpos","qvel","ctrl","tick","timestep_ms","seed","native_checkpoint"],"adjusts":[],"actions":[{"name":"step","description":"Advance the simulated world by a bounded number of fixed timesteps, optionally applying an action for each step, and return the resulting observation and terminal flags."},{"name":"reset","description":"Reset the simulated world to a scenario start state and return the initial observation. When a seed is supplied the endpoint records it in the receipt; otherwise the endpoint's declared default seed applies."}],"tags":["arm","iiwa7","kuka","manipulator","mujoco","robot","simulation"],"backends":["fake"],"served_backend":"fake","evidence":"contract_checked","upstream":{"repo_url":"https://github.com/liuskywalkerjskd/mujoco_iiwa7_r800","commit":"bf300255e9b511b6ad43ab40727347033a2619dd","license":"BSD-3-Clause"},"stars":5,"install":{"openai4s":"openai4s lab add robots/liuskywalkerjskd__mujoco_iiwa7_r800","mhs":"mhs serve robots/liuskywalkerjskd__mujoco_iiwa7_r800 --port 7400","mcp":"mhs serve robots/liuskywalkerjskd__mujoco_iiwa7_r800 --mcp"}},
{"id":"robots/ll7__robot_sf_ll7","name":"Robot SF social navigation simulation (RobotEnv)","device_id":"mhs://localhost/robot_sf","track":"robots","category":"Simulation","topic":"mobile robots","kind":"world.sim","vendor":"ll7","model":"Robot SF","mode":"simulated","risk":"R0","family":"gymnasium","role":"sim-env","intro":"Robot SF social navigation simulation (RobotEnv), adapted from ll7/robot_sf_ll7. It reads `observation`, `reward`, `terminated`, `truncated` and 4 more; runs `step`, `reset` and `seed`. `step`: advance the simulated world by a bounded number of fixed timesteps, optionally applying an action for each step, and return the resulting observation and terminal flags. A simulator: the market serves it with a stand-in that needs no simulator install.","measures":["observation","reward","terminated","truncated","tick","episode","seed","info"],"adjusts":[],"actions":[{"name":"step","description":"Advance the simulated world by a bounded number of fixed timesteps, optionally applying an action for each step, and return the resulting observation and terminal flags."},{"name":"reset","description":"Reset the simulated world to a scenario start state and return the initial observation. When a seed is supplied the endpoint records it in the receipt; otherwise the endpoint's declared default seed applies."},{"name":"seed","description":"Set the seed used by the simulated world's random number generators for subsequent steps, without resetting the world. The accepted seed is echoed in the receipt."}],"tags":["social-navigation","robot","pedestrian","gymnasium","simulation"],"backends":["fake"],"served_backend":"fake","evidence":"contract_checked","upstream":{"repo_url":"https://github.com/ll7/robot_sf_ll7","commit":"53721be3248600e08641a9816d094b605e3c93e4","license":"GPL-3.0"},"stars":8,"install":{"openai4s":"openai4s lab add robots/ll7__robot_sf_ll7","mhs":"mhs serve robots/ll7__robot_sf_ll7 --port 7400","mcp":"mhs serve robots/ll7__robot_sf_ll7 --mcp"}},
{"id":"robots/louislelay__kinova_isaaclab_sim2real","name":"Kinova Gen3 Reach in Isaac Lab (Gen3-Reach-v0)","device_id":"mhs://localhost/gen3-reach","track":"robots","category":"Simulation","topic":"robot arm manipulation","kind":"world.sim","vendor":"louislelay","model":"kinova_isaaclab_sim2real","mode":"simulated","risk":"R0","family":"gymnasium","role":"sim-env","intro":"Kinova Gen3 Reach in Isaac Lab (Gen3-Reach-v0), adapted from louislelay/kinova_isaaclab_sim2real. It reads `observation`, `reward`, `terminated`, `truncated` and 4 more; runs `step`, `reset` and `seed`. `step`: advance the simulated world by a bounded number of fixed timesteps, optionally applying an action for each step, and return the resulting observation and terminal flags. A simulator: the market serves it with a stand-in that needs no simulator install.","measures":["observation","reward","terminated","truncated","tick","episode","seed","info"],"adjusts":[],"actions":[{"name":"step","description":"Advance the simulated world by a bounded number of fixed timesteps, optionally applying an action for each step, and return the resulting observation and terminal flags."},{"name":"reset","description":"Reset the simulated world to a scenario start state and return the initial observation. When a seed is supplied the endpoint records it in the receipt; otherwise the endpoint's declared default seed applies."},{"name":"seed","description":"Set the seed used by the simulated world's random number generators for subsequent steps, without resetting the world. The accepted seed is echoed in the receipt."}],"tags":["kinova","gen3","reach","isaac-sim","isaac-lab","reinforcement-learning","simulation","gymnasium"],"backends":["fake"],"served_backend":"fake","evidence":"contract_checked","upstream":{"repo_url":"https://github.com/louislelay/kinova_isaaclab_sim2real","commit":"d97c80ed8f532de5ab2609366f12e9d4c62e1ea3","license":"MIT"},"stars":229,"install":{"openai4s":"openai4s lab add robots/louislelay__kinova_isaaclab_sim2real","mhs":"mhs serve robots/louislelay__kinova_isaaclab_sim2real --port 7400","mcp":"mhs serve robots/louislelay__kinova_isaaclab_sim2real --mcp"}},
{"id":"robots/lucasalegre__sumo-rl","name":"SUMO-RL traffic signal control (single intersection, simulated)","device_id":"mhs://localhost/sumo-rl","track":"robots","category":"Simulation","topic":null,"kind":"world.sim","vendor":"Lucas Alegre","model":"sumo-rl-v0","mode":"simulated","risk":"R0","family":"gymnasium","role":"sim-env","intro":"SUMO-RL traffic signal control (single intersection, simulated), adapted from lucasalegre/sumo-rl. It reads `observation`, `reward`, `terminated`, `truncated` and 4 more; runs `step`, `reset` and `seed`. `step`: advance the simulated world by a bounded number of fixed timesteps, optionally applying an action for each step, and return the resulting observation and terminal flags. A simulator: the market serves it with a stand-in that needs no simulator install.","measures":["observation","reward","terminated","truncated","tick","episode","seed","info"],"adjusts":[],"actions":[{"name":"step","description":"Advance the simulated world by a bounded number of fixed timesteps, optionally applying an action for each step, and return the resulting observation and terminal flags."},{"name":"reset","description":"Reset the simulated world to a scenario start state and return the initial observation. When a seed is supplied the endpoint records it in the receipt; otherwise the endpoint's declared default seed applies."},{"name":"seed","description":"Set the seed used by the simulated world's random number generators for subsequent steps, without resetting the world. The accepted seed is echoed in the receipt."}],"tags":["sumo-rl","sumo","traffic-signal-control","reinforcement-learning","simulation","gymnasium"],"backends":["fake"],"served_backend":"fake","evidence":"contract_checked","upstream":{"repo_url":"https://github.com/lucasalegre/sumo-rl","commit":"86f0fc41401eeca724b2e8878f5020dc6d70c9b4","license":"MIT"},"stars":1090,"install":{"openai4s":"openai4s lab add robots/lucasalegre__sumo-rl","mhs":"mhs serve robots/lucasalegre__sumo-rl --port 7400","mcp":"mhs serve robots/lucasalegre__sumo-rl --mcp"}},
{"id":"robots/luccachiang__gsworld","name":"GSWorld RealFr3-v1 (empty scene, FR3 UMI)","device_id":"mhs://localhost/gsworld-real-fr3","track":"robots","category":"Simulation","topic":"robot arm manipulation","kind":"world.sim","vendor":"luccachiang","model":"GSWorld RealFr3-v1","mode":"simulated","risk":"R0","family":"gymnasium","role":"sim-env","intro":"GSWorld RealFr3-v1 (empty scene, FR3 UMI), adapted from luccachiang/gsworld. It reads `observation`, `reward`, `terminated`, `truncated` and 4 more; runs `step`, `reset` and `seed`. `step`: advance the simulated world by a bounded number of fixed timesteps, optionally applying an action for each step, and return the resulting observation and terminal flags. A simulator: the market serves it with a stand-in that needs no simulator install.","measures":["observation","reward","terminated","truncated","tick","episode","seed","info"],"adjusts":[],"actions":[{"name":"step","description":"Advance the simulated world by a bounded number of fixed timesteps, optionally applying an action for each step, and return the resulting observation and terminal flags."},{"name":"reset","description":"Reset the simulated world to a scenario start state and return the initial observation. When a seed is supplied the endpoint records it in the receipt; otherwise the endpoint's declared default seed applies."},{"name":"seed","description":"Set the seed used by the simulated world's random number generators for subsequent steps, without resetting the world. The accepted seed is echoed in the receipt."}],"tags":["gsworld","mani-skill","sapien","fr3","fr3-umi","robot-arm","reinforcement-learning","simulation","gymnasium"],"backends":["fake"],"served_backend":"fake","evidence":"contract_checked","upstream":{"repo_url":"https://github.com/luccachiang/gsworld","commit":"532950475cc80a97c7050fd94858a1a8841dbf2c","license":"NOASSERTION"},"stars":0,"install":{"openai4s":"openai4s lab add robots/luccachiang__gsworld","mhs":"mhs serve robots/luccachiang__gsworld --port 7400","mcp":"mhs serve robots/luccachiang__gsworld --mcp"}},
{"id":"robots/luckyrobots__g1-manipulation-challenge","name":"Lucky Robots G1 pick-and-place scene (MuJoCo model)","device_id":"mhs://localhost/luckyrobots-g1","track":"robots","category":"Simulation","topic":"humanoid robots","kind":"world.sim","vendor":"Lucky Robots","model":"G1 pick-and-place (g1_table_red_block)","mode":"simulated","risk":"R0","family":"mujoco","role":"sim-env","intro":"Lucky Robots G1 pick-and-place scene (MuJoCo model), adapted from luckyrobots/g1-manipulation-challenge. It reads `time_ms`, `qpos`, `qvel`, `ctrl` and 4 more; runs `step` and `reset`. `step`: advance the simulated world by a bounded number of fixed timesteps, optionally applying an action for each step, and return the resulting observation and terminal flags. A simulator: the market serves it with a stand-in that needs no simulator install.","measures":["time_ms","qpos","qvel","ctrl","tick","timestep_ms","seed","native_checkpoint"],"adjusts":[],"actions":[{"name":"step","description":"Advance the simulated world by a bounded number of fixed timesteps, optionally applying an action for each step, and return the resulting observation and terminal flags."},{"name":"reset","description":"Reset the simulated world to a scenario start state and return the initial observation. When a seed is supplied the endpoint records it in the receipt; otherwise the endpoint's declared default seed applies."}],"tags":["g1","humanoid","luckyrobots","manipulation","mujoco","pick-and-place","simulation","world"],"backends":["fake"],"served_backend":"fake","evidence":"contract_checked","upstream":{"repo_url":"https://github.com/luckyrobots/g1-manipulation-challenge","commit":"0e9d1f9b61772905c9f7997b527f221dc7800fc9","license":"NOASSERTION"},"stars":26,"install":{"openai4s":"openai4s lab add robots/luckyrobots__g1-manipulation-challenge","mhs":"mhs serve robots/luckyrobots__g1-manipulation-challenge --port 7400","mcp":"mhs serve robots/luckyrobots__g1-manipulation-challenge --mcp"}},
{"id":"robots/lukicdarkoo__webots-gym-example","name":"Webots Pioneer3at pole balancer (legacy gym)","device_id":"mhs://localhost/webots-stick","track":"robots","category":"Simulation","topic":"mobile robots","kind":"world.sim","vendor":"lukicdarkoo","model":"webots-gym-example","mode":"simulated","risk":"R0","family":"gymnasium","role":"sim-env","intro":"Webots Pioneer3at pole balancer (legacy gym), adapted from lukicdarkoo/webots-gym-example. It reads `observation`, `reward`, `terminated`, `truncated` and 4 more; runs `step`, `reset` and `seed`. `step`: advance the simulated world by a bounded number of fixed timesteps, optionally applying an action for each step, and return the resulting observation and terminal flags. A simulator: the market serves it with a stand-in that needs no simulator install.","measures":["observation","reward","terminated","truncated","tick","episode","seed","info"],"adjusts":[],"actions":[{"name":"step","description":"Advance the simulated world by a bounded number of fixed timesteps, optionally applying an action for each step, and return the resulting observation and terminal flags."},{"name":"reset","description":"Reset the simulated world to a scenario start state and return the initial observation. When a seed is supplied the endpoint records it in the receipt; otherwise the endpoint's declared default seed applies."},{"name":"seed","description":"Set the seed used by the simulated world's random number generators for subsequent steps, without resetting the world. The accepted seed is echoed in the receipt."}],"tags":["webots","pioneer3at","inverted-pendulum","reinforcement-learning","simulation","gymnasium","legacy-gym"],"backends":["fake"],"served_backend":"fake","evidence":"contract_checked","upstream":{"repo_url":"https://github.com/lukicdarkoo/webots-gym-example","commit":"dd825e00f89f187f53130bcbde1ddd2a3ca44ab2","license":"NOASSERTION"},"stars":1,"install":{"openai4s":"openai4s lab add robots/lukicdarkoo__webots-gym-example","mhs":"mhs serve robots/lukicdarkoo__webots-gym-example --port 7400","mcp":"mhs serve robots/lukicdarkoo__webots-gym-example --mcp"}},
{"id":"robots/machines-in-motion__go2py","name":"Unitree Go2 (Go2Py GO2Real)","device_id":"mhs://localhost/go2","track":"robots","category":"Mobile robots","topic":null,"kind":"robot.mobile_base","vendor":"Unitree Robotics","model":"Go2","mode":"hardware","risk":"R2","family":"python-object","role":"device-driver","intro":"Unitree Go2 (Go2Py GO2Real), adapted from machines-in-motion/go2py. It reads `joint_positions`, `joint_velocities`, `joint_torques`, `motor_temperatures` and 6 more; runs `stop_motion`, `drive` and `command_joints`. `stop_motion`: stop all motion on the resource with a declared deceleration profile and report the stopping position. This capability is always cancellable=false and is exempt from rate limiting. A hardware driver: the market serves its fake backend, so no instrument is needed.","measures":["joint_positions","joint_velocities","joint_torques","motor_temperatures","imu_acceleration","imu_angular_velocity","imu_orientation","imu_temperature","foot_contact_forces","battery_soc"],"adjusts":[],"actions":[{"name":"stop_motion","description":"Stop all motion on the resource with a declared deceleration profile and report the stopping position. This capability is always cancellable=false and is exempt from rate limiting."},{"name":"drive","description":"Command forward, lateral and yaw velocity through setCommandsHigh; the command stays in effect until another command or the stop action, because the clone documents no expiry"},{"name":"command_joints","description":"Command 12 joint angles and 12 feedforward torques through setCommandsLow, with zero desired velocity and the upstream FSM's tracking gains kp 150 and kd 3; the target is sent at once, with no ramp from the current pose"}],"tags":["quadruped","mobile robot","unitree","go2","dds","joint control","velocity control"],"backends":["fake","hardware"],"served_backend":"fake","evidence":"contract_checked","upstream":{"repo_url":"https://github.com/machines-in-motion/go2py","commit":"eff240b82b0ff6dae6ba5ee934a381f38fe64c0d","license":"MIT"},"stars":71,"install":{"openai4s":"openai4s lab add robots/machines-in-motion__go2py","mhs":"mhs serve robots/machines-in-motion__go2py --port 7400","mcp":"mhs serve robots/machines-in-motion__go2py --mcp"}},
{"id":"robots/mahyaret__gym-panda","name":"gym-panda PandaEnv (PyBullet grasping)","device_id":"mhs://localhost/gym-panda","track":"robots","category":"Simulation","topic":"robot arm manipulation","kind":"world.sim","vendor":"mahyaret","model":"gym-panda 0.0.6","mode":"simulated","risk":"R0","family":"gymnasium","role":"sim-env","intro":"gym-panda PandaEnv (PyBullet grasping), adapted from mahyaret/gym-panda. It reads `observation`, `reward`, `terminated`, `truncated` and 4 more; runs `step`, `reset` and `seed`. `step`: advance the simulated world by a bounded number of fixed timesteps, optionally applying an action for each step, and return the resulting observation and terminal flags. A simulator: the market serves it with a stand-in that needs no simulator install.","measures":["observation","reward","terminated","truncated","tick","episode","seed","info"],"adjusts":[],"actions":[{"name":"step","description":"Advance the simulated world by a bounded number of fixed timesteps, optionally applying an action for each step, and return the resulting observation and terminal flags."},{"name":"reset","description":"Reset the simulated world to a scenario start state and return the initial observation. When a seed is supplied the endpoint records it in the receipt; otherwise the endpoint's declared default seed applies."},{"name":"seed","description":"Set the seed used by the simulated world's random number generators for subsequent steps, without resetting the world. The accepted seed is echoed in the receipt."}],"tags":["franka-panda","pybullet","grasping","reinforcement-learning","simulation","gym"],"backends":["fake"],"served_backend":"fake","evidence":"contract_checked","upstream":{"repo_url":"https://github.com/mahyaret/gym-panda","commit":"92c769fcd4d910b5913f99f96aa7cb1231a9d069","license":"MIT"},"stars":79,"install":{"openai4s":"openai4s lab add robots/mahyaret__gym-panda","mhs":"mhs serve robots/mahyaret__gym-panda --port 7400","mcp":"mhs serve robots/mahyaret__gym-panda --mcp"}},
{"id":"robots/manas-arumalla__openarm-control","name":"OpenArm v2 unscrew scene (MuJoCo)","device_id":"mhs://localhost/openarm-unscrew","track":"robots","category":"Simulation","topic":"robot arm manipulation","kind":"world.sim","vendor":"Manas Reddy Arumalla","model":"openarm_v20_unscrew MJCF","mode":"simulated","risk":"R0","family":"mujoco","role":"sim-env","intro":"OpenArm v2 unscrew scene (MuJoCo), adapted from manas-arumalla/openarm-control. It reads `time_ms`, `qpos`, `qvel`, `ctrl` and 4 more; runs `step` and `reset`. `step`: advance the simulated world by a bounded number of fixed timesteps, optionally applying an action for each step, and return the resulting observation and terminal flags. A simulator: the market serves it with a stand-in that needs no simulator install.","measures":["time_ms","qpos","qvel","ctrl","tick","timestep_ms","seed","native_checkpoint"],"adjusts":[],"actions":[{"name":"step","description":"Advance the simulated world by a bounded number of fixed timesteps, optionally applying an action for each step, and return the resulting observation and terminal flags."},{"name":"reset","description":"Reset the simulated world to a scenario start state and return the initial observation. When a seed is supplied the endpoint records it in the receipt; otherwise the endpoint's declared default seed applies."}],"tags":["mujoco","openarm","unscrew","bottle-opening","robot-arm","simulation"],"backends":["fake"],"served_backend":"fake","evidence":"contract_checked","upstream":{"repo_url":"https://github.com/manas-arumalla/openarm-control","commit":"14ea59faad6706b9add5d7f8d386e43239a6360f","license":"Apache-2.0"},"stars":9,"install":{"openai4s":"openai4s lab add robots/manas-arumalla__openarm-control","mhs":"mhs serve robots/manas-arumalla__openarm-control --port 7400","mcp":"mhs serve robots/manas-arumalla__openarm-control --mcp"}},
{"id":"robots/mani-skill__maniskill","name":"ManiSkill TriFingerRotateCubeLevel0-v1 (simulated)","device_id":"mhs://localhost/trifinger-rotate-cube","track":"robots","category":"Simulation","topic":"robot manipulation","kind":"world.sim","vendor":"ManiSkill","model":"TriFingerRotateCubeLevel0-v1","mode":"simulated","risk":"R0","family":"gymnasium","role":"sim-env","intro":"ManiSkill TriFingerRotateCubeLevel0-v1 (simulated), adapted from mani-skill/maniskill. It reads `observation`, `reward`, `terminated`, `truncated` and 4 more; runs `step`, `reset` and `seed`. `step`: advance the simulated world by a bounded number of fixed timesteps, optionally applying an action for each step, and return the resulting observation and terminal flags. A simulator: the market serves it with a stand-in that needs no simulator install.","measures":["observation","reward","terminated","truncated","tick","episode","seed","info"],"adjusts":[],"actions":[{"name":"step","description":"Advance the simulated world by a bounded number of fixed timesteps, optionally applying an action for each step, and return the resulting observation and terminal flags."},{"name":"reset","description":"Reset the simulated world to a scenario start state and return the initial observation. When a seed is supplied the endpoint records it in the receipt; otherwise the endpoint's declared default seed applies."},{"name":"seed","description":"Set the seed used by the simulated world's random number generators for subsequent steps, without resetting the world. The accepted seed is echoed in the receipt."}],"tags":["mani-skill","trifinger","rotate-cube","reinforcement-learning","simulation","gymnasium"],"backends":["fake"],"served_backend":"fake","evidence":"contract_checked","upstream":{"repo_url":"https://github.com/mani-skill/maniskill","commit":"62ff3a5896b4d5b4cf0ac4c8d79afe600c9404a3","license":"Apache-2.0"},"stars":3386,"install":{"openai4s":"openai4s lab add robots/mani-skill__maniskill","mhs":"mhs serve robots/mani-skill__maniskill --port 7400","mcp":"mhs serve robots/mani-skill__maniskill --mcp"}},
{"id":"robots/maniparena__maniparena-sim","name":"ManipArena-Sim (Isaac Lab / IsaacLab-Arena bimanual simulation)","device_id":"mhs://localhost/maniparena-sim","track":"robots","category":"Simulation","topic":"robot manipulation","kind":"world.sim","vendor":"ManipArena","model":"maniparena-sim","mode":"simulated","risk":"R0","family":"gymnasium","role":"sim-env","intro":"ManipArena-Sim (Isaac Lab / IsaacLab-Arena bimanual simulation), adapted from maniparena/maniparena-sim. It reads `observation`, `reward`, `terminated`, `truncated` and 4 more; runs `step`, `reset_world` and `set_seed`. `step`: advance the simulated world by a bounded number of fixed timesteps, optionally applying an action for each step, and return the resulting observation and terminal flags. A simulator: the market serves it with a stand-in that needs no simulator install.","measures":["observation","reward","terminated","truncated","tick","episode","seed","info"],"adjusts":[],"actions":[{"name":"step","description":"Advance the simulated world by a bounded number of fixed timesteps, optionally applying an action for each step, and return the resulting observation and terminal flags."},{"name":"reset_world","description":"Reset the simulated world to a scenario start state and return the initial observation. When a seed is supplied the endpoint records it in the receipt; otherwise the endpoint's declared default seed applies."},{"name":"set_seed","description":"Set the seed used by the simulated world's random number generators for subsequent steps, without resetting the world. The accepted seed is echoed in the receipt."}],"tags":["bimanual","manipulation","isaac-sim","isaac-lab","isaaclab-arena","simulation","gymnasium"],"backends":["fake"],"served_backend":"fake","evidence":"contract_checked","upstream":{"repo_url":"https://github.com/maniparena/maniparena-sim","commit":"bc40c5f7c0f58ca86a53a2ab1a45a8e5a4a0916b","license":"NOASSERTION"},"stars":23,"install":{"openai4s":"openai4s lab add robots/maniparena__maniparena-sim","mhs":"mhs serve robots/maniparena__maniparena-sim --port 7400","mcp":"mhs serve robots/maniparena__maniparena-sim --mcp"}},
{"id":"robots/masato-ka__gym-soarm","name":"SO-ARM100 single-arm manipulation environment (Gymnasium SoArm-v0)","device_id":"mhs://localhost/so-arm100","track":"robots","category":"Simulation","topic":"robot arm manipulation","kind":"world.sim","vendor":"Masato Kawamura","model":"SO-ARM100","mode":"simulated","risk":"R0","family":"gymnasium","role":"sim-env","intro":"SO-ARM100 single-arm manipulation environment (Gymnasium SoArm-v0), adapted from masato-ka/gym-soarm. It reads `observation`, `reward`, `terminated`, `truncated` and 4 more; runs `step`, `reset` and `seed`. `step`: advance the simulated world by a bounded number of fixed timesteps, optionally applying an action for each step, and return the resulting observation and terminal flags. A simulator: the market serves it with a stand-in that needs no simulator install.","measures":["observation","reward","terminated","truncated","tick","episode","seed","info"],"adjusts":[],"actions":[{"name":"step","description":"Advance the simulated world by a bounded number of fixed timesteps, optionally applying an action for each step, and return the resulting observation and terminal flags."},{"name":"reset","description":"Reset the simulated world to a scenario start state and return the initial observation. When a seed is supplied the endpoint records it in the receipt; otherwise the endpoint's declared default seed applies."},{"name":"seed","description":"Set the seed used by the simulated world's random number generators for subsequent steps, without resetting the world. The accepted seed is echoed in the receipt."}],"tags":["robot-arm","so-arm100","manipulation","reinforcement-learning","simulation","gymnasium"],"backends":["fake"],"served_backend":"fake","evidence":"contract_checked","upstream":{"repo_url":"https://github.com/masato-ka/gym-soarm","commit":"d1e47309120a372cf95169a555bda64704c9cf40","license":"Apache-2.0"},"stars":15,"install":{"openai4s":"openai4s lab add robots/masato-ka__gym-soarm","mhs":"mhs serve robots/masato-ka__gym-soarm --port 7400","mcp":"mhs serve robots/masato-ka__gym-soarm --mcp"}},
{"id":"robots/maskor__webots_ros2_spot","name":"Webots ROS 2 Spot simulation","device_id":"mhs://localhost/webots-spot","track":"robots","category":"Mobile robots","topic":null,"kind":"robot.mobile_base","vendor":"MASKOR","model":"Spot in Webots","mode":"simulated","risk":"R2","family":"ros","role":"sim-env","intro":"Webots ROS 2 Spot simulation, adapted from maskor/webots_ros2_spot. It reads `joint_positions`, `odom_position`, `odom_orientation` and `odom_twist`; runs `publish_velocity`, `stand_up`, `sit_down`, `lie_down` and 1 more. `publish_velocity`: publish one geometry_msgs/Twist to the upstream /cmd_vel subscription; the receipt confirms only that rosbridge accepted the publication, not motion, arrival or stopping. A simulator: the market serves it with a stand-in that needs no simulator install.","measures":["joint_positions","odom_position","odom_orientation","odom_twist"],"adjusts":[],"actions":[{"name":"publish_velocity","description":"Publish one geometry_msgs/Twist to the upstream /cmd_vel subscription; the receipt confirms only that rosbridge accepted the publication, not motion, arrival or stopping"},{"name":"stand_up","description":"Call /Spot/stand_up and require the 'standing up' answer; the callback returns after starting a one-second joint-target transition, so the answer is not completion"},{"name":"sit_down","description":"Call /Spot/sit_down and require the 'sitting down' answer; the callback returns after starting a one-second joint-target transition, so the answer is not completion"},{"name":"lie_down","description":"Fixed /Spot/lie_down call with override=true; it sets fixed_motion and starts the fixed lie targets. It acknowledges the start only. The sensed stop sends this request and confirms on odometry; this command alone is not that stop"},{"name":"set_height","description":"Call /Spot/set_height with a body height offset in the source range; the callback stores zd = -height and returns an empty answer on success"}],"tags":["ros","ros2","webots","simulation","spot","quadruped","mobile-base","cmd-vel"],"backends":["fake"],"served_backend":"fake","evidence":"contract_checked","upstream":{"repo_url":"https://github.com/maskor/webots_ros2_spot","commit":"1245900385c5f0a8f7d153a047886b06010c0524","license":"AGPL-3.0"},"stars":79,"install":{"openai4s":"openai4s lab add robots/maskor__webots_ros2_spot","mhs":"mhs serve robots/maskor__webots_ros2_spot --port 7400","mcp":"mhs serve robots/maskor__webots_ros2_spot --mcp"}},
{"id":"robots/mattchantk__gym-maze","name":"gym-maze maze-v0 (5x5 sample maze)","device_id":"mhs://localhost/gym-maze-5x5","track":"robots","category":"Simulation","topic":null,"kind":"world.sim","vendor":"Matthew T.K. Chan","model":"gym-maze 0.4","mode":"simulated","risk":"R0","family":"gymnasium","role":"sim-env","intro":"gym-maze maze-v0 (5x5 sample maze), adapted from mattchantk/gym-maze. It reads `observation`, `reward`, `terminated`, `truncated` and 4 more; runs `step`, `reset` and `seed`. `step`: advance the simulated world by a bounded number of fixed timesteps, optionally applying an action for each step, and return the resulting observation and terminal flags. A simulator: the market serves it with a stand-in that needs no simulator install.","measures":["observation","reward","terminated","truncated","tick","episode","seed","info"],"adjusts":[],"actions":[{"name":"step","description":"Advance the simulated world by a bounded number of fixed timesteps, optionally applying an action for each step, and return the resulting observation and terminal flags."},{"name":"reset","description":"Reset the simulated world to a scenario start state and return the initial observation. When a seed is supplied the endpoint records it in the receipt; otherwise the endpoint's declared default seed applies."},{"name":"seed","description":"Set the seed used by the simulated world's random number generators for subsequent steps, without resetting the world. The accepted seed is echoed in the receipt."}],"tags":["maze","grid-world","reinforcement-learning","simulation","gym"],"backends":["fake"],"served_backend":"fake","evidence":"contract_checked","upstream":{"repo_url":"https://github.com/mattchantk/gym-maze","commit":"83176811b49b5538a6213520612f44fb1bc49114","license":"MIT"},"stars":376,"install":{"openai4s":"openai4s lab add robots/mattchantk__gym-maze","mhs":"mhs serve robots/mattchantk__gym-maze --port 7400","mcp":"mhs serve robots/mattchantk__gym-maze --mcp"}},
{"id":"robots/maximecb__gym-miniworld","name":"MiniWorld Maze (gymnasium simulation)","device_id":"mhs://localhost/miniworld-maze","track":"robots","category":"Simulation","topic":"mobile robots","kind":"world.sim","vendor":"Farama Foundation","model":"MiniWorld-Maze-v0","mode":"simulated","risk":"R0","family":"gymnasium","role":"sim-env","intro":"MiniWorld Maze (gymnasium simulation), adapted from maximecb/gym-miniworld. It reads `observation`, `reward`, `terminated`, `truncated` and 4 more; runs `step`, `reset` and `seed`. `step`: advance the simulated world by a bounded number of fixed timesteps, optionally applying an action for each step, and return the resulting observation and terminal flags. A simulator: the market serves it with a stand-in that needs no simulator install.","measures":["observation","reward","terminated","truncated","tick","episode","seed","info"],"adjusts":[],"actions":[{"name":"step","description":"Advance the simulated world by a bounded number of fixed timesteps, optionally applying an action for each step, and return the resulting observation and terminal flags."},{"name":"reset","description":"Reset the simulated world to a scenario start state and return the initial observation. When a seed is supplied the endpoint records it in the receipt; otherwise the endpoint's declared default seed applies."},{"name":"seed","description":"Set the seed used by the simulated world's random number generators for subsequent steps, without resetting the world. The accepted seed is echoed in the receipt."}],"tags":["miniworld","maze","navigation","reinforcement-learning","simulation","gymnasium"],"backends":["fake"],"served_backend":"fake","evidence":"contract_checked","upstream":{"repo_url":"https://github.com/maximecb/gym-miniworld","commit":"c660156dd73994e55ad81a4e2925582399446aba","license":"Apache-2.0"},"stars":0,"install":{"openai4s":"openai4s lab add robots/maximecb__gym-miniworld","mhs":"mhs serve robots/maximecb__gym-miniworld --port 7400","mcp":"mhs serve robots/maximecb__gym-miniworld --mcp"}},
{"id":"robots/mcarfagno__gym-panda-reach","name":"gym-panda-reach panda-reach-v0 (PyBullet)","device_id":"mhs://localhost/panda-reach","track":"robots","category":"Simulation","topic":"robot arm manipulation","kind":"world.sim","vendor":"Marcello Carfagno","model":"gym-panda-reach","mode":"simulated","risk":"R0","family":"gymnasium","role":"sim-env","intro":"gym-panda-reach panda-reach-v0 (PyBullet), adapted from mcarfagno/gym-panda-reach. It reads `observation`, `reward`, `terminated`, `truncated` and 4 more; runs `step`, `reset` and `seed`. `step`: advance the simulated world by a bounded number of fixed timesteps, optionally applying an action for each step, and return the resulting observation and terminal flags. A simulator: the market serves it with a stand-in that needs no simulator install.","measures":["observation","reward","terminated","truncated","tick","episode","seed","info"],"adjusts":[],"actions":[{"name":"step","description":"Advance the simulated world by a bounded number of fixed timesteps, optionally applying an action for each step, and return the resulting observation and terminal flags."},{"name":"reset","description":"Reset the simulated world to a scenario start state and return the initial observation. When a seed is supplied the endpoint records it in the receipt; otherwise the endpoint's declared default seed applies."},{"name":"seed","description":"Set the seed used by the simulated world's random number generators for subsequent steps, without resetting the world. The accepted seed is echoed in the receipt."}],"tags":["panda","robot-arm","reach","reinforcement-learning","simulation","gymnasium","pybullet"],"backends":["fake"],"served_backend":"fake","evidence":"contract_checked","upstream":{"repo_url":"https://github.com/mcarfagno/gym-panda-reach","commit":"928d1e6b779b52d25bbef2a9f717bcf64991f6fb","license":"MIT"},"stars":12,"install":{"openai4s":"openai4s lab add robots/mcarfagno__gym-panda-reach","mhs":"mhs serve robots/mcarfagno__gym-panda-reach --port 7400","mcp":"mhs serve robots/mcarfagno__gym-panda-reach --mcp"}},
{"id":"robots/medevilunknown__water-pouring-robot-simulation","name":"SO-101 pouring simulation (So101PourEnv)","device_id":"mhs://localhost/so101-pour","track":"robots","category":"Simulation","topic":"robot arm manipulation","kind":"world.sim","vendor":"medevilunknown","model":"So101PourEnv","mode":"simulated","risk":"R0","family":"gymnasium","role":"sim-env","intro":"SO-101 pouring simulation (So101PourEnv), adapted from medevilunknown/water-pouring-robot-simulation. It reads `observation`, `reward`, `terminated`, `truncated` and 4 more; runs `step`, `reset` and `seed`. `step`: advance the simulated world by a bounded number of fixed timesteps, optionally applying an action for each step, and return the resulting observation and terminal flags. A simulator: the market serves it with a stand-in that needs no simulator install.","measures":["observation","reward","terminated","truncated","tick","episode","seed","info"],"adjusts":[],"actions":[{"name":"step","description":"Advance the simulated world by a bounded number of fixed timesteps, optionally applying an action for each step, and return the resulting observation and terminal flags."},{"name":"reset","description":"Reset the simulated world to a scenario start state and return the initial observation. When a seed is supplied the endpoint records it in the receipt; otherwise the endpoint's declared default seed applies."},{"name":"seed","description":"Set the seed used by the simulated world's random number generators for subsequent steps, without resetting the world. The accepted seed is echoed in the receipt."}],"tags":["so101","robot-arm","pouring","manipulation","mujoco","gymnasium","reinforcement-learning","simulation"],"backends":["fake"],"served_backend":"fake","evidence":"contract_checked","upstream":{"repo_url":"https://github.com/medevilunknown/water-pouring-robot-simulation","commit":"ff33ae12ae58ef9569ff40d75c88635a14c61d27","license":"NOASSERTION"},"stars":1,"install":{"openai4s":"openai4s lab add robots/medevilunknown__water-pouring-robot-simulation","mhs":"mhs serve robots/medevilunknown__water-pouring-robot-simulation --port 7400","mcp":"mhs serve robots/medevilunknown__water-pouring-robot-simulation --mcp"}},
{"id":"robots/mees__calvin_env","name":"CALVIN PlayTableSimEnv (PyBullet table-top environment)","device_id":"mhs://localhost/calvin_env","track":"robots","category":"Simulation","topic":"robot manipulation","kind":"world.sim","vendor":"Mees","model":"CALVIN PlayTableSimEnv","mode":"simulated","risk":"R0","family":"gymnasium","role":"sim-env","intro":"CALVIN PlayTableSimEnv (PyBullet table-top environment), adapted from mees/calvin_env. It reads `observation`, `reward`, `terminated`, `truncated` and 4 more; runs `step`, `reset` and `seed`. `step`: advance the simulated world by a bounded number of fixed timesteps, optionally applying an action for each step, and return the resulting observation and terminal flags. A simulator: the market serves it with a stand-in that needs no simulator install.","measures":["observation","reward","terminated","truncated","tick","episode","seed","info"],"adjusts":[],"actions":[{"name":"step","description":"Advance the simulated world by a bounded number of fixed timesteps, optionally applying an action for each step, and return the resulting observation and terminal flags."},{"name":"reset","description":"Reset the simulated world to a scenario start state and return the initial observation. When a seed is supplied the endpoint records it in the receipt; otherwise the endpoint's declared default seed applies."},{"name":"seed","description":"Set the seed used by the simulated world's random number generators for subsequent steps, without resetting the world. The accepted seed is echoed in the receipt."}],"tags":["calvin","simulation","pybullet","gym","manipulation","reinforcement-learning","world"],"backends":["fake"],"served_backend":"fake","evidence":"contract_checked","upstream":{"repo_url":"https://github.com/mees/calvin_env","commit":"797142c588c21e76717268b7b430958dbd13bf48","license":"MIT"},"stars":18,"install":{"openai4s":"openai4s lab add robots/mees__calvin_env","mhs":"mhs serve robots/mees__calvin_env --port 7400","mcp":"mhs serve robots/mees__calvin_env --mcp"}},
{"id":"robots/metadriverse__metadrive","name":"MetaDrive driving simulator (Gymnasium environment)","device_id":"mhs://localhost/metadrive","track":"robots","category":"Simulation","topic":"mobile robots","kind":"world.sim","vendor":"MetaDrive Team","model":"MetaDrive","mode":"simulated","risk":"R0","family":"gymnasium","role":"sim-env","intro":"MetaDrive driving simulator (Gymnasium environment), adapted from metadriverse/metadrive. It reads `observation`, `reward`, `terminated`, `truncated` and 4 more; runs `step`, `reset` and `seed`. `step`: advance the simulated world by a bounded number of fixed timesteps, optionally applying an action for each step, and return the resulting observation and terminal flags. A simulator: the market serves it with a stand-in that needs no simulator install.","measures":["observation","reward","terminated","truncated","tick","episode","seed","info"],"adjusts":[],"actions":[{"name":"step","description":"Advance the simulated world by a bounded number of fixed timesteps, optionally applying an action for each step, and return the resulting observation and terminal flags."},{"name":"reset","description":"Reset the simulated world to a scenario start state and return the initial observation. When a seed is supplied the endpoint records it in the receipt; otherwise the endpoint's declared default seed applies."},{"name":"seed","description":"Set the seed used by the simulated world's random number generators for subsequent steps, without resetting the world. The accepted seed is echoed in the receipt."}],"tags":["driving-simulator","reinforcement-learning","simulation","gymnasium","world-model"],"backends":["fake"],"served_backend":"fake","evidence":"contract_checked","upstream":{"repo_url":"https://github.com/metadriverse/metadrive","commit":"325d9e2f9c20e495bde66f30e0ef2b40efbce39c","license":"Apache-2.0"},"stars":0,"install":{"openai4s":"openai4s lab add robots/metadriverse__metadrive","mhs":"mhs serve robots/metadriverse__metadrive --port 7400","mcp":"mhs serve robots/metadriverse__metadrive --mcp"}},
{"id":"robots/michaal94__muble","name":"Robotiq 2F-85 gripper (MuBlE)","device_id":"mhs://localhost/muble-gripper","track":"robots","category":"Simulation","topic":"robot arm manipulation","kind":"world.sim","vendor":"michaal94 (MuBlE)","model":"Robotiq 2F-85","mode":"simulated","risk":"R0","family":"mujoco","role":"sim-env","intro":"Robotiq 2F-85 gripper (MuBlE), adapted from michaal94/muble. It reads `time_ms`, `qpos`, `qvel`, `ctrl` and 4 more; runs `step` and `reset`. `step`: advance the simulated world by a bounded number of fixed timesteps, optionally applying an action for each step, and return the resulting observation and terminal flags. A simulator: the market serves it with a stand-in that needs no simulator install.","measures":["time_ms","qpos","qvel","ctrl","tick","timestep_ms","seed","native_checkpoint"],"adjusts":[],"actions":[{"name":"step","description":"Advance the simulated world by a bounded number of fixed timesteps, optionally applying an action for each step, and return the resulting observation and terminal flags."},{"name":"reset","description":"Reset the simulated world to a scenario start state and return the initial observation. When a seed is supplied the endpoint records it in the receipt; otherwise the endpoint's declared default seed applies."}],"tags":["gripper","manipulation","muble","mujoco","robotiq","simulation","two-finger"],"backends":["fake"],"served_backend":"fake","evidence":"contract_checked","upstream":{"repo_url":"https://github.com/michaal94/muble","commit":"84f1109110aeca0063b0d062d87096cc53cc0f71","license":"MIT"},"stars":0,"install":{"openai4s":"openai4s lab add robots/michaal94__muble","mhs":"mhs serve robots/michaal94__muble --port 7400","mcp":"mhs serve robots/michaal94__muble --mcp"}},
{"id":"robots/mindspaceinc__spot-mujoco-ros2","name":"MindSpaceInc Spot Mini MuJoCo ROS 2 simulator","device_id":"mhs://localhost/spot-mujoco-ros2","track":"robots","category":"Mobile robots","topic":null,"kind":"robot.mobile_base","vendor":"MindSpaceInc","model":"Spot Mini quadruped in MuJoCo","mode":"simulated","risk":"R2","family":"ros","role":"sim-env","intro":"MindSpaceInc Spot Mini MuJoCo ROS 2 simulator, adapted from mindspaceinc/spot-mujoco-ros2. It reads `joint_positions` and `read_joint_states`; runs `publish_actuator_cmds`, `reset_simulation` and `reset_safe_state`. `publish_actuator_cmds`: publish one communication/msg/ActuatorCmds message on /simulation/actuators_cmds with the 12 actuator names fixed in MJCF order. The node applies the PD expression and clamps each resulting ctrl to [-100, 100]; a publication receipt is transmission only, not motion. A simulator: the market serves it with a stand-in that needs no simulator install.","measures":["joint_positions","read_joint_states"],"adjusts":[],"actions":[{"name":"publish_actuator_cmds","description":"Publish one communication/msg/ActuatorCmds message on /simulation/actuators_cmds with the 12 actuator names fixed in MJCF order. The node applies the PD expression and clamps each resulting ctrl to [-100, 100]; a publication receipt is transmission only, not motion."},{"name":"reset_simulation","description":"Call the acknowledged /simulation/sim_reset service with the fixed frame_id spot, an optional base pose and optional 12 hinge positions. The callback calls mj_resetData, zeroes cached commands and returns is_success; it does not pause the physics loop."},{"name":"reset_safe_state","description":"Reset simulated data to the model defaults plus the fixed base pose with the acknowledged /simulation/sim_reset service. The callback calls mj_resetData and zeroes every cached actuator command; the MuJoCo physics loop keeps running."}],"tags":["ros","ros2","mujoco","spot","quadruped","simulation","joint","actuator","reset"],"backends":["fake"],"served_backend":"fake","evidence":"contract_checked","upstream":{"repo_url":"https://github.com/mindspaceinc/spot-mujoco-ros2","commit":"1e07b87745ab623dab7ab79c4fbc61e62e4e829e","license":"NOASSERTION"},"stars":52,"install":{"openai4s":"openai4s lab add robots/mindspaceinc__spot-mujoco-ros2","mhs":"mhs serve robots/mindspaceinc__spot-mujoco-ros2 --port 7400","mcp":"mhs serve robots/mindspaceinc__spot-mujoco-ros2 --mcp"}},
{"id":"robots/mingfeisun__deepmimic_mujoco","name":"DeepMimic humanoid MuJoCo environment (reduced fake)","device_id":"mhs://localhost/humanoid_deepmimic","track":"robots","category":"Simulation","topic":"humanoid robots","kind":"world.sim","vendor":"Mingfei Sun","model":"HumanoidDeepMimic-v0","mode":"simulated","risk":"R0","family":"gymnasium","role":"sim-env","intro":"DeepMimic humanoid MuJoCo environment (reduced fake), adapted from mingfeisun/deepmimic_mujoco. It reads `observation`, `reward`, `terminated`, `truncated` and 4 more; runs `step`, `reset` and `seed`. `step`: advance the simulated world by a bounded number of fixed timesteps, optionally applying an action for each step, and return the resulting observation and terminal flags. A simulator: the market serves it with a stand-in that needs no simulator install.","measures":["observation","reward","terminated","truncated","tick","episode","seed","info"],"adjusts":[],"actions":[{"name":"step","description":"Advance the simulated world by a bounded number of fixed timesteps, optionally applying an action for each step, and return the resulting observation and terminal flags."},{"name":"reset","description":"Reset the simulated world to a scenario start state and return the initial observation. When a seed is supplied the endpoint records it in the receipt; otherwise the endpoint's declared default seed applies."},{"name":"seed","description":"Set the seed used by the simulated world's random number generators for subsequent steps, without resetting the world. The accepted seed is echoed in the receipt."}],"tags":["deepmimic","humanoid","mujoco","reinforcement-learning","simulation","gym"],"backends":["fake"],"served_backend":"fake","evidence":"contract_checked","upstream":{"repo_url":"https://github.com/mingfeisun/deepmimic_mujoco","commit":"36b9e211f025c216fddf599ce21af9d8f10a1b34","license":"NOASSERTION"},"stars":151,"install":{"openai4s":"openai4s lab add robots/mingfeisun__deepmimic_mujoco","mhs":"mhs serve robots/mingfeisun__deepmimic_mujoco --port 7400","mcp":"mhs serve robots/mingfeisun__deepmimic_mujoco --mcp"}},
{"id":"robots/misterblue__ros2_raspicam_node","name":"Raspberry Pi camera JPEG stream (ros2_raspicam_node)","device_id":"mhs://localhost/ros2_raspicam","track":"robots","category":"Sensors and cameras","topic":null,"kind":"sensor.camera","vendor":"Robert Adams","model":null,"mode":"hardware","risk":"R0","family":"ros","role":"device-driver","intro":"Raspberry Pi camera JPEG stream (ros2_raspicam_node), adapted from misterblue/ros2_raspicam_node. It runs `capture_image`. `capture_image`: capture a single image from a named camera with a declared resolution and exposure and return an image artifact reference. A hardware driver: the market serves its fake backend, so no instrument is needed.","measures":[],"adjusts":[],"actions":[{"name":"capture_image","description":"Capture a single image from a named camera with a declared resolution and exposure and return an image artifact reference."}],"tags":["ros","ros2","camera","image","jpeg","raspberry-pi"],"backends":["fake"],"served_backend":"fake","evidence":"contract_checked","upstream":{"repo_url":"https://github.com/misterblue/ros2_raspicam_node","commit":"cebf5fdacd18b50943bd234600e8fc3622ae4a46","license":"Apache-2.0"},"stars":10,"install":{"openai4s":"openai4s lab add robots/misterblue__ros2_raspicam_node","mhs":"mhs serve robots/misterblue__ros2_raspicam_node --port 7400","mcp":"mhs serve robots/misterblue__ros2_raspicam_node --mcp"}},
{"id":"robots/ml-lab__home-platform","name":"HoME Home-v0 household simulator","device_id":"mhs://localhost/home-platform","track":"robots","category":"Simulation","topic":"mobile robots","kind":"world.sim","vendor":"ml-lab / HoME Platform","model":"Home-v0","mode":"simulated","risk":"R0","family":"gymnasium","role":"sim-env","intro":"HoME Home-v0 household simulator, adapted from ml-lab/home-platform. It reads `observation`, `reward`, `terminated`, `truncated` and 4 more; runs `step`, `reset` and `seed`. `step`: advance the simulated world by a bounded number of fixed timesteps, optionally applying an action for each step, and return the resulting observation and terminal flags. A simulator: the market serves it with a stand-in that needs no simulator install.","measures":["observation","reward","terminated","truncated","tick","episode","seed","info"],"adjusts":[],"actions":[{"name":"step","description":"Advance the simulated world by a bounded number of fixed timesteps, optionally applying an action for each step, and return the resulting observation and terminal flags."},{"name":"reset","description":"Reset the simulated world to a scenario start state and return the initial observation. When a seed is supplied the endpoint records it in the receipt; otherwise the endpoint's declared default seed applies."},{"name":"seed","description":"Set the seed used by the simulated world's random number generators for subsequent steps, without resetting the world. The accepted seed is echoed in the receipt."}],"tags":["household","multimodal","reinforcement-learning","simulation","gymnasium"],"backends":["fake"],"served_backend":"fake","evidence":"contract_checked","upstream":{"repo_url":"https://github.com/ml-lab/home-platform","commit":"cbd373f270faaf19f21ed88f0e3bd272a1cbdaa6","license":"BSD-3-Clause"},"stars":0,"install":{"openai4s":"openai4s lab add robots/ml-lab__home-platform","mhs":"mhs serve robots/ml-lab__home-platform --port 7400","mcp":"mhs serve robots/ml-lab__home-platform --mcp"}},
{"id":"robots/mobile-robots-group-uc3m__adamsim","name":"ADAMSim ADAM mobile base","device_id":"mhs://localhost/adamsim","track":"robots","category":"Mobile robots","topic":null,"kind":"robot.mobile_base","vendor":"Mobile Robots Group UC3M","model":"ADAM (ADAMSim)","mode":"simulated","risk":"R2","family":"python-object","role":"sim-env","intro":"ADAMSim ADAM mobile base, adapted from mobile-robots-group-uc3m/adamsim. It reads `camera_angle`, `left_arm_joint_positions` and `right_arm_joint_positions`; runs `drive` and `stop_motion`. `drive`: drive a mobile base with a commanded linear and angular velocity for a bounded duration, or to a target pose. Obstacle and zone limits are enforced by the binding safety envelope. A simulator: the market serves it with a stand-in that needs no simulator install.","measures":["camera_angle","left_arm_joint_positions","right_arm_joint_positions"],"adjusts":[],"actions":[{"name":"drive","description":"Drive a mobile base with a commanded linear and angular velocity for a bounded duration, or to a target pose. Obstacle and zone limits are enforced by the binding safety envelope."},{"name":"stop_motion","description":"Command both wheel targets to zero through Navigation.move_wheels. The upstream exposes no wheel-velocity readback and no deceleration profile, so the receipt reports that the zero command was applied, not that the simulated base was measured at rest."}],"tags":["pybullet","simulation","mobile-base","differential-drive","adamsim"],"backends":["fake"],"served_backend":"fake","evidence":"contract_checked","upstream":{"repo_url":"https://github.com/mobile-robots-group-uc3m/adamsim","commit":"85a9b1fce83a36c45bb29412546f67bc8a03c29b","license":"NOASSERTION"},"stars":9,"install":{"openai4s":"openai4s lab add robots/mobile-robots-group-uc3m__adamsim","mhs":"mhs serve robots/mobile-robots-group-uc3m__adamsim --port 7400","mcp":"mhs serve robots/mobile-robots-group-uc3m__adamsim --mcp"}},
{"id":"robots/mortezaaliyari__multi-robot-gazebo-navistack","name":"Multi-robot TurtleBot3 Gazebo/Nav stack","device_id":"mhs://localhost/turtlebot3-multi","track":"robots","category":"Simulation","topic":"multi-robot systems","kind":"world.sim","vendor":"mortezaaliyari","model":"TurtleBot3 Burger tb3_0 and tb3_1 in Gazebo 11","mode":"simulated","risk":"R2","family":"ros","role":"sim-env","intro":"Multi-robot TurtleBot3 Gazebo/Nav stack, adapted from mortezaaliyari/multi-robot-gazebo-navistack. It reads `read_tb3_0_odom`, `read_tb3_0_scan`, `read_tb3_1_odom` and `read_tb3_1_scan`; runs `publish_tb30_cmd_vel`, `publish_tb31_cmd_vel` and `resume_simulation`. `publish_tb30_cmd_vel`: publish one geometry_msgs/Twist velocity setpoint to the tb3_0 Gazebo cmd_vel topic; the receipt confirms only that rosbridge accepted the publication, not motion, arrival or stopping. A simulator: the market serves it with a stand-in that needs no simulator install.","measures":["read_tb3_0_odom","read_tb3_0_scan","read_tb3_1_odom","read_tb3_1_scan"],"adjusts":[],"actions":[{"name":"publish_tb30_cmd_vel","description":"Publish one geometry_msgs/Twist velocity setpoint to the tb3_0 Gazebo cmd_vel topic; the receipt confirms only that rosbridge accepted the publication, not motion, arrival or stopping"},{"name":"publish_tb31_cmd_vel","description":"Publish one geometry_msgs/Twist velocity setpoint to the tb3_1 Gazebo cmd_vel topic; the receipt confirms only that rosbridge accepted the publication, not motion, arrival or stopping"},{"name":"resume_simulation","description":"The declared re-enable after a safety reset: publish a zero Twist on /tb3_0/cmd_vel and /tb3_1/cmd_vel, then unpause the Gazebo world with /gazebo/unpause_physics. Each differential-drive plugin keeps the last cmd_vel it stored and applies it as soon as the world runs; the zeros replace them, but they are unacknowledged publications, so a stored command can still act for a few world steps, and a running move_base publishes new ones."}],"tags":["ros","ros1","simulation","gazebo","turtlebot3","multi-robot","navigation","cmd-vel"],"backends":["fake"],"served_backend":"fake","evidence":"contract_checked","upstream":{"repo_url":"https://github.com/mortezaaliyari/multi-robot-gazebo-navistack","commit":"afcc20c73158370f32cf123a0d73a698f9d02579","license":"MIT"},"stars":29,"install":{"openai4s":"openai4s lab add robots/mortezaaliyari__multi-robot-gazebo-navistack","mhs":"mhs serve robots/mortezaaliyari__multi-robot-gazebo-navistack --port 7400","mcp":"mhs serve robots/mortezaaliyari__multi-robot-gazebo-navistack --mcp"}},
{"id":"robots/mrpt__mvsim","name":"MVSim vehicle through MVSim's services","device_id":"mhs://localhost/mvsim-vehicle","track":"robots","category":"Mobile robots","topic":null,"kind":"robot.mobile_base","vendor":"MRPT","model":"MVSim simulated vehicle","mode":"simulated","risk":"R2","family":"ros","role":"sim-env","intro":"MVSim vehicle through MVSim's services, adapted from mrpt/mvsim. It reads `read_pose`; runs `set_twist`. `set_twist`: hand one twist setpoint (vx, wz) to the vehicle's controller through MVSim's set_controller_twist service; the setpoint persists until another command. A simulator: the market serves it with a stand-in that needs no simulator install.","measures":["read_pose"],"adjusts":[],"actions":[{"name":"set_twist","description":"Hand one twist setpoint (vx, wz) to the vehicle's controller through MVSim's set_controller_twist service; the setpoint persists until another command"}],"tags":["mvsim","simulation","mobile-base","zmq","protobuf","twist"],"backends":["fake","sim"],"served_backend":"fake","evidence":"contract_checked","upstream":{"repo_url":"https://github.com/mrpt/mvsim","commit":"cfaf9f28f57fe5798a6b1defa65a435402bd38d0","license":"BSD-3-Clause"},"stars":416,"install":{"openai4s":"openai4s lab add robots/mrpt__mvsim","mhs":"mhs serve robots/mrpt__mvsim --port 7400","mcp":"mhs serve robots/mrpt__mvsim --mcp"}},
{"id":"robots/muhammad-mahad__dlo-routing-workcell","name":"Dual-arm DLO cable-routing workcell (MuJoCo scene)","device_id":"mhs://localhost/dlo-routing-workcell","track":"robots","category":"Simulation","topic":"robot arm manipulation","kind":"world.sim","vendor":"muhammad-mahad","model":"Dual-arm cable-routing workcell","mode":"simulated","risk":"R0","family":"mujoco","role":"sim-env","intro":"Dual-arm DLO cable-routing workcell (MuJoCo scene), adapted from muhammad-mahad/dlo-routing-workcell. It reads `time_ms`, `qpos`, `qvel`, `ctrl` and 4 more; runs `step` and `reset`. `step`: advance the simulated world by a bounded number of fixed timesteps, optionally applying an action for each step, and return the resulting observation and terminal flags. A simulator: the market serves it with a stand-in that needs no simulator install.","measures":["time_ms","qpos","qvel","ctrl","tick","timestep_ms","seed","native_checkpoint"],"adjusts":[],"actions":[{"name":"step","description":"Advance the simulated world by a bounded number of fixed timesteps, optionally applying an action for each step, and return the resulting observation and terminal flags."},{"name":"reset","description":"Reset the simulated world to a scenario start state and return the initial observation. When a seed is supplied the endpoint records it in the receipt; otherwise the endpoint's declared default seed applies."}],"tags":["mujoco","simulation","deformable-linear-object","cable-routing","dual-arm","franka-panda"],"backends":["fake"],"served_backend":"fake","evidence":"contract_checked","upstream":{"repo_url":"https://github.com/muhammad-mahad/dlo-routing-workcell","commit":"2c4c322ad14edf521deceba3048e3844e0bf61d5","license":"MIT"},"stars":0,"install":{"openai4s":"openai4s lab add robots/muhammad-mahad__dlo-routing-workcell","mhs":"mhs serve robots/muhammad-mahad__dlo-routing-workcell --port 7400","mcp":"mhs serve robots/muhammad-mahad__dlo-routing-workcell --mcp"}},
{"id":"robots/myohub__myosuite","name":"MyoSuite Baoding balls (myoChallengeBaodingP1-v1)","device_id":"mhs://localhost/myosuite-baoding","track":"robots","category":"Simulation","topic":"humanoid robots","kind":"world.sim","vendor":"MyoHub","model":"myoChallengeBaodingP1-v1","mode":"simulated","risk":"R0","family":"gymnasium","role":"sim-env","intro":"MyoSuite Baoding balls (myoChallengeBaodingP1-v1), adapted from myohub/myosuite. It reads `observation`, `reward`, `terminated`, `truncated` and 4 more; runs `step`, `reset` and `seed`. `step`: advance the simulated world by a bounded number of fixed timesteps, optionally applying an action for each step, and return the resulting observation and terminal flags. A simulator: the market serves it with a stand-in that needs no simulator install.","measures":["observation","reward","terminated","truncated","tick","episode","seed","info"],"adjusts":[],"actions":[{"name":"step","description":"Advance the simulated world by a bounded number of fixed timesteps, optionally applying an action for each step, and return the resulting observation and terminal flags."},{"name":"reset","description":"Reset the simulated world to a scenario start state and return the initial observation. When a seed is supplied the endpoint records it in the receipt; otherwise the endpoint's declared default seed applies."},{"name":"seed","description":"Set the seed used by the simulated world's random number generators for subsequent steps, without resetting the world. The accepted seed is echoed in the receipt."}],"tags":["baoding","musculoskeletal","reinforcement-learning","simulation","gymnasium","myosuite"],"backends":["fake"],"served_backend":"fake","evidence":"contract_checked","upstream":{"repo_url":"https://github.com/myohub/myosuite","commit":"2d08f42dfec85278566c95b1d09f5bd67662b3d6","license":"Apache-2.0"},"stars":1240,"install":{"openai4s":"openai4s lab add robots/myohub__myosuite","mhs":"mhs serve robots/myohub__myosuite --port 7400","mcp":"mhs serve robots/myohub__myosuite --mcp"}},
{"id":"robots/nasa__astrobee","name":"Astrobee free-flyer (ROS 1)","device_id":"mhs://localhost/astrobee","track":"robots","category":"Mobile robots","topic":null,"kind":"robot.mobile_base","vendor":"NASA","model":null,"mode":"simulated","risk":"R2","family":"ros","role":"sim-env","intro":"Astrobee free-flyer (ROS 1), adapted from nasa/astrobee. It reads `commanded_segment_stamp_nsecs`; runs `move` and `stop`. `move`: move through world-frame poses; return the Motion action's application result. A simulator: the market serves it with a stand-in that needs no simulator install.","measures":["commanded_segment_stamp_nsecs"],"adjusts":[],"actions":[{"name":"move","description":"Move through world-frame poses; return the Motion action's application result"},{"name":"stop","description":"Command the GNC controller's STOP and confirm only after the native Control action reports SUCCESS"}],"tags":["ros","ros1","simulation","astrobee","free-flyer","motion","action","stop"],"backends":["fake"],"served_backend":"fake","evidence":"contract_checked","upstream":{"repo_url":"https://github.com/nasa/astrobee","commit":"bf43a42d5f89bf0679e51ab25e7a9b7800313e9c","license":"Apache-2.0"},"stars":1421,"install":{"openai4s":"openai4s lab add robots/nasa__astrobee","mhs":"mhs serve robots/nasa__astrobee --port 7400","mcp":"mhs serve robots/nasa__astrobee --mcp"}},
{"id":"robots/navneet-nmk__hierarchical-meta-reinforcement-learning","name":"MAML-RL TabularMDP-v0 (tabular MDP)","device_id":"mhs://localhost/tabularmdp","track":"robots","category":"Simulation","topic":null,"kind":"world.sim","vendor":"navneet-nmk","model":"TabularMDP-v0","mode":"simulated","risk":"R0","family":"gymnasium","role":"sim-env","intro":"MAML-RL TabularMDP-v0 (tabular MDP), adapted from navneet-nmk/hierarchical-meta-reinforcement-learning. It reads `observation`, `reward`, `terminated`, `truncated` and 4 more; runs `step`, `reset` and `seed`. `step`: advance the simulated world by a bounded number of fixed timesteps, optionally applying an action for each step, and return the resulting observation and terminal flags. A simulator: the market serves it with a stand-in that needs no simulator install.","measures":["observation","reward","terminated","truncated","tick","episode","seed","info"],"adjusts":[],"actions":[{"name":"step","description":"Advance the simulated world by a bounded number of fixed timesteps, optionally applying an action for each step, and return the resulting observation and terminal flags."},{"name":"reset","description":"Reset the simulated world to a scenario start state and return the initial observation. When a seed is supplied the endpoint records it in the receipt; otherwise the endpoint's declared default seed applies."},{"name":"seed","description":"Set the seed used by the simulated world's random number generators for subsequent steps, without resetting the world. The accepted seed is echoed in the receipt."}],"tags":["tabular-mdp","meta-reinforcement-learning","reinforcement-learning","simulation","gymnasium","gym"],"backends":["fake"],"served_backend":"fake","evidence":"contract_checked","upstream":{"repo_url":"https://github.com/navneet-nmk/hierarchical-meta-reinforcement-learning","commit":"4ef92cebfa11760d9de55d54fc8e827271982a63","license":"MIT"},"stars":63,"install":{"openai4s":"openai4s lab add robots/navneet-nmk__hierarchical-meta-reinforcement-learning","mhs":"mhs serve robots/navneet-nmk__hierarchical-meta-reinforcement-learning --port 7400","mcp":"mhs serve robots/navneet-nmk__hierarchical-meta-reinforcement-learning --mcp"}},
{"id":"robots/nely-epfl__flygym","name":"FlyGym fruitfly (MuJoCo model)","device_id":"mhs://localhost/fruitfly","track":"robots","category":"Simulation","topic":"biology","kind":"world.sim","vendor":"NeLy-EPFL","model":"Drosophila melanogaster (NeuroMechFly v2)","mode":"simulated","risk":"R0","family":"mujoco","role":"sim-env","intro":"FlyGym fruitfly (MuJoCo model), adapted from nely-epfl/flygym. It reads `time_ms`, `qpos`, `qvel`, `ctrl` and 4 more; runs `step` and `reset`. `step`: advance the simulated world by a bounded number of fixed timesteps, optionally applying an action for each step, and return the resulting observation and terminal flags. A simulator: the market serves it with a stand-in that needs no simulator install.","measures":["time_ms","qpos","qvel","ctrl","tick","timestep_ms","seed","native_checkpoint"],"adjusts":[],"actions":[{"name":"step","description":"Advance the simulated world by a bounded number of fixed timesteps, optionally applying an action for each step, and return the resulting observation and terminal flags."},{"name":"reset","description":"Reset the simulated world to a scenario start state and return the initial observation. When a seed is supplied the endpoint records it in the receipt; otherwise the endpoint's declared default seed applies."}],"tags":["fruitfly","neuromechfly","drosophila","mujoco","simulation","fly","biomechanics"],"backends":["fake"],"served_backend":"fake","evidence":"contract_checked","upstream":{"repo_url":"https://github.com/nely-epfl/flygym","commit":"38c8ec61034cd59bc5ba0de20688d4a3c0000d60","license":"Apache-2.0"},"stars":400,"install":{"openai4s":"openai4s lab add robots/nely-epfl__flygym","mhs":"mhs serve robots/nely-epfl__flygym --port 7400","mcp":"mhs serve robots/nely-epfl__flygym --mcp"}},
{"id":"robots/neuracoreai__bigym","name":"BiGym DrawerTopOpen (H1 analytic fake)","device_id":"mhs://localhost/bigym-drawer-top-open","track":"robots","category":"Simulation","topic":"robot arm manipulation","kind":"world.sim","vendor":"NeuracoreAI","model":"BiGym v4.1.0 DrawerTopOpen","mode":"simulated","risk":"R0","family":"gymnasium","role":"sim-env","intro":"BiGym DrawerTopOpen (H1 analytic fake), adapted from neuracoreai/bigym. It reads `observation`, `reward`, `terminated`, `truncated` and 4 more; runs `step`, `reset` and `seed`. `step`: advance the simulated world by a bounded number of fixed timesteps, optionally applying an action for each step, and return the resulting observation and terminal flags. A simulator: the market serves it with a stand-in that needs no simulator install.","measures":["observation","reward","terminated","truncated","tick","episode","seed","info"],"adjusts":[],"actions":[{"name":"step","description":"Advance the simulated world by a bounded number of fixed timesteps, optionally applying an action for each step, and return the resulting observation and terminal flags."},{"name":"reset","description":"Reset the simulated world to a scenario start state and return the initial observation. When a seed is supplied the endpoint records it in the receipt; otherwise the endpoint's declared default seed applies."},{"name":"seed","description":"Set the seed used by the simulated world's random number generators for subsequent steps, without resetting the world. The accepted seed is echoed in the receipt."}],"tags":["bigym","cupboards","drawer","manipulation","mobile-manipulation","h1","mujoco","gymnasium","simulation"],"backends":["fake"],"served_backend":"fake","evidence":"contract_checked","upstream":{"repo_url":"https://github.com/neuracoreai/bigym","commit":"14beb30318ad14c5d6723175c2ee2281129792af","license":"Apache-2.0"},"stars":229,"install":{"openai4s":"openai4s lab add robots/neuracoreai__bigym","mhs":"mhs serve robots/neuracoreai__bigym --port 7400","mcp":"mhs serve robots/neuracoreai__bigym --mcp"}},
{"id":"robots/ngc92__quadgym","name":"Quadgym QuadrotorStabilizeAttitude-MotorCommands-v0","device_id":"mhs://localhost/quadrotor-attitude","track":"robots","category":"Simulation","topic":"UAVs","kind":"world.sim","vendor":"ngc92","model":"QuadrotorStabilizeAttitude-MotorCommands-v0","mode":"simulated","risk":"R0","family":"gymnasium","role":"sim-env","intro":"Quadgym QuadrotorStabilizeAttitude-MotorCommands-v0, adapted from ngc92/quadgym. It reads `observation`, `reward`, `terminated`, `truncated` and 4 more; runs `step`, `reset` and `seed`. `step`: advance the simulated world by a bounded number of fixed timesteps, optionally applying an action for each step, and return the resulting observation and terminal flags. A simulator: the market serves it with a stand-in that needs no simulator install.","measures":["observation","reward","terminated","truncated","tick","episode","seed","info"],"adjusts":[],"actions":[{"name":"step","description":"Advance the simulated world by a bounded number of fixed timesteps, optionally applying an action for each step, and return the resulting observation and terminal flags."},{"name":"reset","description":"Reset the simulated world to a scenario start state and return the initial observation. When a seed is supplied the endpoint records it in the receipt; otherwise the endpoint's declared default seed applies."},{"name":"seed","description":"Set the seed used by the simulated world's random number generators for subsequent steps, without resetting the world. The accepted seed is echoed in the receipt."}],"tags":["quadrotor","attitude-control","flight-dynamics","reinforcement-learning","simulation","gymnasium"],"backends":["fake"],"served_backend":"fake","evidence":"contract_checked","upstream":{"repo_url":"https://github.com/ngc92/quadgym","commit":"f7eb2fecaad5fcfbf2b8a5b9ef3062b809b64b99","license":"MIT"},"stars":17,"install":{"openai4s":"openai4s lab add robots/ngc92__quadgym","mhs":"mhs serve robots/ngc92__quadgym --port 7400","mcp":"mhs serve robots/ngc92__quadgym --mcp"}},
{"id":"robots/nickgeramanis__gym-navigation","name":"gym-navigation NavigationTrack-v0 (2-D navigation simulation)","device_id":"mhs://localhost/navigation-track","track":"robots","category":"Simulation","topic":"mobile robots","kind":"world.sim","vendor":"Nick Geramanis","model":"gym-navigation","mode":"simulated","risk":"R0","family":"gymnasium","role":"sim-env","intro":"gym-navigation NavigationTrack-v0 (2-D navigation simulation), adapted from nickgeramanis/gym-navigation. It reads `observation`, `reward`, `terminated`, `truncated` and 4 more; runs `step`, `reset` and `seed`. `step`: advance the simulated world by a bounded number of fixed timesteps, optionally applying an action for each step, and return the resulting observation and terminal flags. A simulator: the market serves it with a stand-in that needs no simulator install.","measures":["observation","reward","terminated","truncated","tick","episode","seed","info"],"adjusts":[],"actions":[{"name":"step","description":"Advance the simulated world by a bounded number of fixed timesteps, optionally applying an action for each step, and return the resulting observation and terminal flags."},{"name":"reset","description":"Reset the simulated world to a scenario start state and return the initial observation. When a seed is supplied the endpoint records it in the receipt; otherwise the endpoint's declared default seed applies."},{"name":"seed","description":"Set the seed used by the simulated world's random number generators for subsequent steps, without resetting the world. The accepted seed is echoed in the receipt."}],"tags":["navigation","2d","ray-casting","reinforcement-learning","simulation","gymnasium"],"backends":["fake"],"served_backend":"fake","evidence":"contract_checked","upstream":{"repo_url":"https://github.com/nickgeramanis/gym-navigation","commit":"98be757c6aa2b2834cecbb7dde3c2c05e5f1b57b","license":"GPL-3.0"},"stars":20,"install":{"openai4s":"openai4s lab add robots/nickgeramanis__gym-navigation","mhs":"mhs serve robots/nickgeramanis__gym-navigation --port 7400","mcp":"mhs serve robots/nickgeramanis__gym-navigation --mcp"}},
{"id":"robots/nicrusso7__rex-gym","name":"Rex-gym RexWalk-v0 (quadruped walk simulation)","device_id":"mhs://localhost/rex-walk","track":"robots","category":"Simulation","topic":"legged robots","kind":"world.sim","vendor":"Nicola Russo","model":"rex-gym 0.2.7 RexWalk-v0","mode":"simulated","risk":"R0","family":"gymnasium","role":"sim-env","intro":"Rex-gym RexWalk-v0 (quadruped walk simulation), adapted from nicrusso7/rex-gym. It reads `observation`, `reward`, `terminated`, `truncated` and 4 more; runs `step`, `reset` and `seed`. `step`: advance the simulated world by a bounded number of fixed timesteps, optionally applying an action for each step, and return the resulting observation and terminal flags. A simulator: the market serves it with a stand-in that needs no simulator install.","measures":["observation","reward","terminated","truncated","tick","episode","seed","info"],"adjusts":[],"actions":[{"name":"step","description":"Advance the simulated world by a bounded number of fixed timesteps, optionally applying an action for each step, and return the resulting observation and terminal flags."},{"name":"reset","description":"Reset the simulated world to a scenario start state and return the initial observation. When a seed is supplied the endpoint records it in the receipt; otherwise the endpoint's declared default seed applies."},{"name":"seed","description":"Set the seed used by the simulated world's random number generators for subsequent steps, without resetting the world. The accepted seed is echoed in the receipt."}],"tags":["rex-gym","quadruped","locomotion","pybullet","reinforcement-learning","simulation","gym"],"backends":["fake"],"served_backend":"fake","evidence":"contract_checked","upstream":{"repo_url":"https://github.com/nicrusso7/rex-gym","commit":"26663048bd3c3da307714da4458b1a2a9dc81824","license":"Apache-2.0"},"stars":1103,"install":{"openai4s":"openai4s lab add robots/nicrusso7__rex-gym","mhs":"mhs serve robots/nicrusso7__rex-gym --port 7400","mcp":"mhs serve robots/nicrusso7__rex-gym --mcp"}},
{"id":"robots/nimazareian__quadruped-rl-locomotion","name":"Unitree Go1 quadruped (MuJoCo torque scene)","device_id":"mhs://localhost/quadruped-rl-locomotion","track":"robots","category":"Simulation","topic":"legged robots","kind":"world.sim","vendor":"nimazareian/quadruped-rl-locomotion","model":"Unitree Go1","mode":"simulated","risk":"R0","family":"mujoco","role":"sim-env","intro":"Unitree Go1 quadruped (MuJoCo torque scene), adapted from nimazareian/quadruped-rl-locomotion. It reads `time_ms`, `qpos`, `qvel`, `ctrl` and 4 more; runs `step` and `reset`. `step`: advance the simulated world by a bounded number of fixed timesteps, optionally applying an action for each step, and return the resulting observation and terminal flags. A simulator: the market serves it with a stand-in that needs no simulator install.","measures":["time_ms","qpos","qvel","ctrl","tick","timestep_ms","seed","native_checkpoint"],"adjusts":[],"actions":[{"name":"step","description":"Advance the simulated world by a bounded number of fixed timesteps, optionally applying an action for each step, and return the resulting observation and terminal flags."},{"name":"reset","description":"Reset the simulated world to a scenario start state and return the initial observation. When a seed is supplied the endpoint records it in the receipt; otherwise the endpoint's declared default seed applies."}],"tags":["go1","mujoco","quadruped","reinforcement-learning","robot","simulation","unitree"],"backends":["fake"],"served_backend":"fake","evidence":"contract_checked","upstream":{"repo_url":"https://github.com/nimazareian/quadruped-rl-locomotion","commit":"99763acae393e7d686d006d53310b7b5eaca53e4","license":"NOASSERTION"},"stars":138,"install":{"openai4s":"openai4s lab add robots/nimazareian__quadruped-rl-locomotion","mhs":"mhs serve robots/nimazareian__quadruped-rl-locomotion --port 7400","mcp":"mhs serve robots/nimazareian__quadruped-rl-locomotion --mcp"}},
{"id":"robots/nobleo__sick_scan2","name":"SICK scan2 ROS 2 laser scanner","device_id":"mhs://localhost/sick-scan2","track":"robots","category":"Sensors and cameras","topic":null,"kind":"sensor","vendor":"SICK","model":null,"mode":"hardware","risk":"R0","family":"ros","role":"device-driver","intro":"SICK scan2 ROS 2 laser scanner, adapted from nobleo/sick_scan2. It reads `read_laser_scan`. A hardware driver: the market serves its fake backend, so no instrument is needed.","measures":["read_laser_scan"],"adjusts":[],"actions":[],"tags":["ros","ros2","sick","laser-scanner","laserscan","scan","ranges"],"backends":["fake"],"served_backend":"fake","evidence":"contract_checked","upstream":{"repo_url":"https://github.com/nobleo/sick_scan2","commit":"8e851e7f728e5cfb1a68a721bff833c1b50e4410","license":"Apache-2.0"},"stars":0,"install":{"openai4s":"openai4s lab add robots/nobleo__sick_scan2","mhs":"mhs serve robots/nobleo__sick_scan2 --port 7400","mcp":"mhs serve robots/nobleo__sick_scan2 --mcp"}},
{"id":"robots/noetix-robotics__noetix_n2_gym","name":"Noetix N2 humanoid, 18-DoF MuJoCo model","device_id":"mhs://localhost/n2-18dof","track":"robots","category":"Simulation","topic":"humanoid robots","kind":"world.sim","vendor":"Noetix Robotics","model":"N2","mode":"simulated","risk":"R0","family":"mujoco","role":"sim-env","intro":"Noetix N2 humanoid, 18-DoF MuJoCo model, adapted from noetix-robotics/noetix_n2_gym. It reads `time_ms`, `qpos`, `qvel`, `ctrl` and 4 more; runs `step` and `reset`. `step`: advance the simulated world by a bounded number of fixed timesteps, optionally applying an action for each step, and return the resulting observation and terminal flags. A simulator: the market serves it with a stand-in that needs no simulator install.","measures":["time_ms","qpos","qvel","ctrl","tick","timestep_ms","seed","native_checkpoint"],"adjusts":[],"actions":[{"name":"step","description":"Advance the simulated world by a bounded number of fixed timesteps, optionally applying an action for each step, and return the resulting observation and terminal flags."},{"name":"reset","description":"Reset the simulated world to a scenario start state and return the initial observation. When a seed is supplied the endpoint records it in the receipt; otherwise the endpoint's declared default seed applies."}],"tags":["noetix","n2","humanoid","legged","mujoco","simulation","robot"],"backends":["fake"],"served_backend":"fake","evidence":"contract_checked","upstream":{"repo_url":"https://github.com/noetix-robotics/noetix_n2_gym","commit":"153aad12dcc44aeafe378efe2f652873b02e0d89","license":"BSD-3-Clause"},"stars":25,"install":{"openai4s":"openai4s lab add robots/noetix-robotics__noetix_n2_gym","mhs":"mhs serve robots/noetix-robotics__noetix_n2_gym --port 7400","mcp":"mhs serve robots/noetix-robotics__noetix_n2_gym --mcp"}},
{"id":"robots/nonejou072__robopal","name":"robopal DianaMed arm world","device_id":"mhs://localhost/diana-med","track":"robots","category":"Simulation","topic":"robot manipulation","kind":"world.sim","vendor":"NoneJou072","model":"robopal DianaMed manipulator (MJCF)","mode":"simulated","risk":"R0","family":"mujoco","role":"sim-env","intro":"robopal DianaMed arm world, adapted from nonejou072/robopal. It reads `time_ms`, `qpos`, `qvel`, `ctrl` and 4 more; runs `step` and `reset`. `step`: advance the simulated world by a bounded number of fixed timesteps, optionally applying an action for each step, and return the resulting observation and terminal flags. A simulator: the market serves it with a stand-in that needs no simulator install.","measures":["time_ms","qpos","qvel","ctrl","tick","timestep_ms","seed","native_checkpoint"],"adjusts":[],"actions":[{"name":"step","description":"Advance the simulated world by a bounded number of fixed timesteps, optionally applying an action for each step, and return the resulting observation and terminal flags."},{"name":"reset","description":"Reset the simulated world to a scenario start state and return the initial observation. When a seed is supplied the endpoint records it in the receipt; otherwise the endpoint's declared default seed applies."}],"tags":["mujoco","simulation","robot arm","robopal","reinforcement learning","world"],"backends":["fake"],"served_backend":"fake","evidence":"contract_checked","upstream":{"repo_url":"https://github.com/nonejou072/robopal","commit":"df5a503657cb4772f5ec7e09d694c584b0d8e172","license":"Apache-2.0"},"stars":307,"install":{"openai4s":"openai4s lab add robots/nonejou072__robopal","mhs":"mhs serve robots/nonejou072__robopal --port 7400","mcp":"mhs serve robots/nonejou072__robopal --mcp"}},
{"id":"robots/notfoundthisperson__robocas-v0","name":"RoboCAS-v0 (ManiSkill2/SAPIEN mobile Franka arrangement benchmark)","device_id":"mhs://localhost/robocas","track":"robots","category":"Simulation","topic":"robot arm manipulation","kind":"world.sim","vendor":"notfoundthisperson","model":"RoboCAS-v0","mode":"simulated","risk":"R0","family":"gymnasium","role":"sim-env","intro":"RoboCAS-v0 (ManiSkill2/SAPIEN mobile Franka arrangement benchmark), adapted from notfoundthisperson/robocas-v0. It reads `observation`, `reward`, `terminated`, `truncated` and 4 more; runs `step`, `reset` and `seed`. `step`: advance the simulated world by a bounded number of fixed timesteps, optionally applying an action for each step, and return the resulting observation and terminal flags. A simulator: the market serves it with a stand-in that needs no simulator install.","measures":["observation","reward","terminated","truncated","tick","episode","seed","info"],"adjusts":[],"actions":[{"name":"step","description":"Advance the simulated world by a bounded number of fixed timesteps, optionally applying an action for each step, and return the resulting observation and terminal flags."},{"name":"reset","description":"Reset the simulated world to a scenario start state and return the initial observation. When a seed is supplied the endpoint records it in the receipt; otherwise the endpoint's declared default seed applies."},{"name":"seed","description":"Set the seed used by the simulated world's random number generators for subsequent steps, without resetting the world. The accepted seed is echoed in the receipt."}],"tags":["robocas","manipulation","benchmark","sapien","maniskill","mobile-franka","simulation","gymnasium"],"backends":["fake"],"served_backend":"fake","evidence":"contract_checked","upstream":{"repo_url":"https://github.com/notfoundthisperson/robocas-v0","commit":"b7844e975df7b54963b299d2f59ab3283523d708","license":"MIT"},"stars":0,"install":{"openai4s":"openai4s lab add robots/notfoundthisperson__robocas-v0","mhs":"mhs serve robots/notfoundthisperson__robocas-v0 --port 7400","mcp":"mhs serve robots/notfoundthisperson__robocas-v0 --mcp"}},
{"id":"robots/novog93__sjtu_drone","name":"sjtu_drone Gazebo quadrotor simulation","device_id":"mhs://localhost/sjtu-drone","track":"robots","category":"Simulation","topic":"UAVs","kind":"world.sim","vendor":"novog93","model":"sjtu_drone quadrotor in Gazebo 11","mode":"simulated","risk":"R2","family":"ros","role":"sim-env","intro":"sjtu_drone Gazebo quadrotor simulation, adapted from novog93/sjtu_drone. It reads `read_last_cmd_vel`, `read_state`, `read_pose` and `read_mode`; runs `takeoff`, `land`, `reset`, `publish_cmd_vel` and 3 more. `takeoff`: publish one std_msgs/Empty on /simple_drone/takeoff. The callback only moves the state machine from LANDED_MODEL to TAKINGOFF_MODEL; the receipt proves the publication, not that the simulated drone left the ground. A simulator: the market serves it with a stand-in that needs no simulator install.","measures":["read_last_cmd_vel","read_state","read_pose","read_mode"],"adjusts":[],"actions":[{"name":"takeoff","description":"Publish one std_msgs/Empty on /simple_drone/takeoff. The callback only moves the state machine from LANDED_MODEL to TAKINGOFF_MODEL; the receipt proves the publication, not that the simulated drone left the ground."},{"name":"land","description":"Publish one std_msgs/Empty on /simple_drone/land. The callback only moves the state machine to LANDING_MODEL; the receipt proves the publication, not that the simulated drone landed."},{"name":"reset","description":"Publish one std_msgs/Empty on /simple_drone/reset. The plugin's callback resets the attitude and velocity PID controllers and the current force and torque but keeps the flight state and stored cmd_vel; it is not an acknowledged stop or an operator safety reset."},{"name":"publish_cmd_vel","description":"Publish one geometry_msgs/Twist on /simple_drone/cmd_vel. The fields are position targets in position-control mode and velocity/tilt/rate otherwise; the receipt is a publication acknowledgement only."},{"name":"set_position_control","description":"Publish one std_msgs/Bool on /simple_drone/posctrl. The callback only stores the flag; the receipt proves the publication, not the resulting control mode."},{"name":"set_velocity_mode","description":"Publish one std_msgs/Bool on /simple_drone/dronevel_mode. The callback stores the flag and publishes the resulting cmd_mode String; the receipt proves the publication only."},{"name":"reset_world","description":"Call the /reset_world std_srvs/Empty service (gazebo_ros) that the clone's reset_sim.sh uses. It resets the simulated world, but the plugin keeps its flight state and stored cmd_vel, so a flying drone keeps flying; it is not a stop."}],"tags":["ros","ros2","gazebo","simulation","quadrotor","drone","topic-control"],"backends":["fake"],"served_backend":"fake","evidence":"contract_checked","upstream":{"repo_url":"https://github.com/novog93/sjtu_drone","commit":"3f8627ebddf390fd35ffb84b8654b62e0b66fca2","license":"GPL-3.0"},"stars":211,"install":{"openai4s":"openai4s lab add robots/novog93__sjtu_drone","mhs":"mhs serve robots/novog93__sjtu_drone --port 7400","mcp":"mhs serve robots/novog93__sjtu_drone --mcp"}},
{"id":"robots/nplan__gym-line-follower","name":"Gym line follower (PyBullet line-following simulator)","device_id":"mhs://localhost/gym-line-follower","track":"robots","category":"Simulation","topic":"mobile robots","kind":"world.sim","vendor":"Nejc Planinsek","model":"LineFollower-v0","mode":"simulated","risk":"R0","family":"gymnasium","role":"sim-env","intro":"Gym line follower (PyBullet line-following simulator), adapted from nplan/gym-line-follower. It reads `observation`, `reward`, `terminated`, `truncated` and 4 more; runs `step`, `reset` and `seed`. `step`: advance the simulated world by a bounded number of fixed timesteps, optionally applying an action for each step, and return the resulting observation and terminal flags. A simulator: the market serves it with a stand-in that needs no simulator install.","measures":["observation","reward","terminated","truncated","tick","episode","seed","info"],"adjusts":[],"actions":[{"name":"step","description":"Advance the simulated world by a bounded number of fixed timesteps, optionally applying an action for each step, and return the resulting observation and terminal flags."},{"name":"reset","description":"Reset the simulated world to a scenario start state and return the initial observation. When a seed is supplied the endpoint records it in the receipt; otherwise the endpoint's declared default seed applies."},{"name":"seed","description":"Set the seed used by the simulated world's random number generators for subsequent steps, without resetting the world. The accepted seed is echoed in the receipt."}],"tags":["line-follower","differential-drive","reinforcement-learning","simulation","gym"],"backends":["fake"],"served_backend":"fake","evidence":"contract_checked","upstream":{"repo_url":"https://github.com/nplan/gym-line-follower","commit":"11b3dd8fe791c02bc36cbbf91c686825776b3025","license":"MIT"},"stars":125,"install":{"openai4s":"openai4s lab add robots/nplan__gym-line-follower","mhs":"mhs serve robots/nplan__gym-line-follower --port 7400","mcp":"mhs serve robots/nplan__gym-line-follower --mcp"}},
{"id":"robots/nus-advanced-robotics-centre__me5413_final_project","name":"ME5413 Gazebo course world","device_id":"mhs://localhost/me5413_world","track":"robots","category":"Simulation","topic":null,"kind":"world.sim","vendor":"NUS Advanced Robotics Centre","model":"me5413_world (ROS Noetic / Gazebo 11)","mode":"simulated","risk":"R0","family":"ros","role":"sim-env","intro":"ME5413 Gazebo course world, adapted from nus-advanced-robotics-centre/me5413_final_project. It runs `remove_moving_obstacle`, `clear_objects`, `regenerate_objects`, `open_exit` and 3 more. `remove_moving_obstacle`: delete the moving planar_box obstacle once with the acknowledged DeleteModel service; this is not a stop. A simulator: the market serves it with a stand-in that needs no simulator install.","measures":[],"adjusts":[],"actions":[{"name":"remove_moving_obstacle","description":"Delete the moving planar_box obstacle once with the acknowledged DeleteModel service; this is not a stop"},{"name":"clear_objects","description":"Publish Int16 0 on the RViz panel's respawn topic to delete the random objects"},{"name":"regenerate_objects","description":"Publish Int16 1 on the RViz panel's respawn topic to regenerate the random objects"},{"name":"open_exit","description":"Publish Bool true on /cmd_unblock to request the one-time exit removal"},{"name":"delete_model","description":"Delete one named Gazebo model through the acknowledged DeleteModel service"},{"name":"read_box_odom","description":"Read one fresh /box_odom sample published by the object spawner plugin"},{"name":"read_box_markers","description":"Read one fresh /gazebo/ground_truth/box_markers sample"}],"tags":["ros","ros1","gazebo","simulation","course-world","object-spawner"],"backends":["fake"],"served_backend":"fake","evidence":"contract_checked","upstream":{"repo_url":"https://github.com/nus-advanced-robotics-centre/me5413_final_project","commit":"9fd6ce2643f7dc9ed6e074ea559d3af29ef4968b","license":"MIT"},"stars":92,"install":{"openai4s":"openai4s lab add robots/nus-advanced-robotics-centre__me5413_final_project","mhs":"mhs serve robots/nus-advanced-robotics-centre__me5413_final_project --port 7400","mcp":"mhs serve robots/nus-advanced-robotics-centre__me5413_final_project --mcp"}},
{"id":"robots/nvlabs__humanoidmimicgen","name":"Unitree G1 29-DOF loco-manipulation model (MuJoCo)","device_id":"mhs://localhost/g1-locomanip","track":"robots","category":"Simulation","topic":"humanoid robots","kind":"world.sim","vendor":"NVIDIA / Unitree Robotics","model":"G1 29-DOF MJCF","mode":"simulated","risk":"R0","family":"mujoco","role":"sim-env","intro":"Unitree G1 29-DOF loco-manipulation model (MuJoCo), adapted from nvlabs/humanoidmimicgen. It reads `time_ms`, `qpos`, `qvel`, `ctrl` and 4 more; runs `step` and `reset`. `step`: advance the simulated world by a bounded number of fixed timesteps, optionally applying an action for each step, and return the resulting observation and terminal flags. A simulator: the market serves it with a stand-in that needs no simulator install.","measures":["time_ms","qpos","qvel","ctrl","tick","timestep_ms","seed","native_checkpoint"],"adjusts":[],"actions":[{"name":"step","description":"Advance the simulated world by a bounded number of fixed timesteps, optionally applying an action for each step, and return the resulting observation and terminal flags."},{"name":"reset","description":"Reset the simulated world to a scenario start state and return the initial observation. When a seed is supplied the endpoint records it in the receipt; otherwise the endpoint's declared default seed applies."}],"tags":["mujoco","unitree","g1","humanoid","loco-manipulation","simulation","robot"],"backends":["fake"],"served_backend":"fake","evidence":"contract_checked","upstream":{"repo_url":"https://github.com/nvlabs/humanoidmimicgen","commit":"d82844dcec242c82d6b82628ccc45933c3ad5cbd","license":"Apache-2.0"},"stars":15,"install":{"openai4s":"openai4s lab add robots/nvlabs__humanoidmimicgen","mhs":"mhs serve robots/nvlabs__humanoidmimicgen --port 7400","mcp":"mhs serve robots/nvlabs__humanoidmimicgen --mcp"}},
{"id":"robots/nvlabs__robolab","name":"RoboLab BananaInBowlTask (Isaac Lab)","device_id":"mhs://localhost/robolab","track":"robots","category":"Simulation","topic":"general desktop manipulation ( household   kitchen object )","kind":"world.sim","vendor":"NVIDIA","model":"RoboLab BananaInBowlTask","mode":"simulated","risk":"R0","family":"gymnasium","role":"sim-env","intro":"RoboLab BananaInBowlTask (Isaac Lab), adapted from nvlabs/robolab. It reads `observation`, `reward`, `terminated`, `truncated` and 4 more; runs `step`, `reset` and `seed`. `step`: advance the simulated world by a bounded number of fixed timesteps, optionally applying an action for each step, and return the resulting observation and terminal flags. A simulator: the market serves it with a stand-in that needs no simulator install.","measures":["observation","reward","terminated","truncated","tick","episode","seed","info"],"adjusts":[],"actions":[{"name":"step","description":"Advance the simulated world by a bounded number of fixed timesteps, optionally applying an action for each step, and return the resulting observation and terminal flags."},{"name":"reset","description":"Reset the simulated world to a scenario start state and return the initial observation. When a seed is supplied the endpoint records it in the receipt; otherwise the endpoint's declared default seed applies."},{"name":"seed","description":"Set the seed used by the simulated world's random number generators for subsequent steps, without resetting the world. The accepted seed is echoed in the receipt."}],"tags":["robolab","robot-manipulation","isaac-lab","isaac-sim","reinforcement-learning","simulation","gymnasium"],"backends":["fake"],"served_backend":"fake","evidence":"contract_checked","upstream":{"repo_url":"https://github.com/nvlabs/robolab","commit":"ad45d4f974725d020f82c2b0d77d78533aeba2b3","license":"Apache-2.0"},"stars":550,"install":{"openai4s":"openai4s lab add robots/nvlabs__robolab","mhs":"mhs serve robots/nvlabs__robolab --port 7400","mcp":"mhs serve robots/nvlabs__robolab --mcp"}},
{"id":"robots/oceanworldlabs__oceanscale","name":"OceanScale ROVEnv (GPU-batched station keeping)","device_id":"mhs://localhost/oceanscale-rov","track":"robots","category":"Simulation","topic":"underwater robotics","kind":"world.sim","vendor":"OceanWorld Labs","model":"OceanScale ROVEnv","mode":"simulated","risk":"R0","family":"gymnasium","role":"sim-env","intro":"OceanScale ROVEnv (GPU-batched station keeping), adapted from oceanworldlabs/oceanscale. It reads `observation`, `reward`, `terminated`, `truncated` and 4 more; runs `step`, `reset` and `seed`. `step`: advance the simulated world by a bounded number of fixed timesteps, optionally applying an action for each step, and return the resulting observation and terminal flags. A simulator: the market serves it with a stand-in that needs no simulator install.","measures":["observation","reward","terminated","truncated","tick","episode","seed","info"],"adjusts":[],"actions":[{"name":"step","description":"Advance the simulated world by a bounded number of fixed timesteps, optionally applying an action for each step, and return the resulting observation and terminal flags."},{"name":"reset","description":"Reset the simulated world to a scenario start state and return the initial observation. When a seed is supplied the endpoint records it in the receipt; otherwise the endpoint's declared default seed applies."},{"name":"seed","description":"Set the seed used by the simulated world's random number generators for subsequent steps, without resetting the world. The accepted seed is echoed in the receipt."}],"tags":["oceanworldlabs","oceanscale","underwater-robotics","rov","station-keeping","reinforcement-learning","simulation","gymnasium"],"backends":["fake"],"served_backend":"fake","evidence":"contract_checked","upstream":{"repo_url":"https://github.com/oceanworldlabs/oceanscale","commit":"84f6cc4ce3dcf7cb4a53e2e9d2e81f541b0c63f2","license":"Apache-2.0"},"stars":102,"install":{"openai4s":"openai4s lab add robots/oceanworldlabs__oceanscale","mhs":"mhs serve robots/oceanworldlabs__oceanscale --port 7400","mcp":"mhs serve robots/oceanworldlabs__oceanscale --mcp"}},
{"id":"robots/okermorgant__map_simulator","name":"map_simulator ROS 2 2-D simulator","device_id":"mhs://localhost/map_simulator","track":"robots","category":"Simulation","topic":"mobile robots","kind":"world.sim","vendor":"okermorgant","model":"map_simulator 2.0.0","mode":"simulated","risk":"R2","family":"ros","role":"sim-env","intro":"map_simulator ROS 2 2-D simulator, adapted from okermorgant/map_simulator. It reads `odom_pose`, `odom_twist`, `read_odometry` and `read_scan`; runs `spawn_robot` and `publish_twist`. `spawn_robot`: call the upstream /simulator/spawn service to create a robot or reset an existing robot's pose. The Spawn response is empty, so the receipt confirms only that the service callback returned; it does not prove creation, URDF arrival, motion or a stopped robot. A simulator: the market serves it with a stand-in that needs no simulator install.","measures":["odom_pose","odom_twist","read_odometry","read_scan"],"adjusts":[],"actions":[{"name":"spawn_robot","description":"Call the upstream /simulator/spawn service to create a robot or reset an existing robot's pose. The Spawn response is empty, so the receipt confirms only that the service callback returned; it does not prove creation, URDF arrival, motion or a stopped robot."},{"name":"publish_twist","description":"Publish one geometry_msgs/Twist to the upstream /robot1/cmd_vel subscription. The callback copies linear.x, linear.y and angular.z into the robot odometry twist. The receipt proves only that rosbridge accepted the publication; it does not prove motion or a stopped robot. cmd_vel is a topic a physical mobile robot also consumes, so this action is R2 (REVIEW.md item 12)."}],"tags":["ros","ros2","simulation","map","mobile-base","laser-scan","cmd-vel"],"backends":["fake"],"served_backend":"fake","evidence":"contract_checked","upstream":{"repo_url":"https://github.com/okermorgant/map_simulator","commit":"537a06464d7fcaa2cba4f4fea9532f0556854440","license":"MIT"},"stars":16,"install":{"openai4s":"openai4s lab add robots/okermorgant__map_simulator","mhs":"mhs serve robots/okermorgant__map_simulator --port 7400","mcp":"mhs serve robots/okermorgant__map_simulator --mcp"}},
{"id":"robots/omarrayyann__mjlab_manipulation","name":"mjlab manipulation Droid (MuJoCo simulation)","device_id":"mhs://localhost/mjlab-droid","track":"robots","category":"Simulation","topic":null,"kind":"world.sim","vendor":"omarrayyann","model":"mjlab_manipulation Droid / franka_droid","mode":"simulated","risk":"R0","family":"mujoco","role":"twin-candidate","intro":"mjlab manipulation Droid (MuJoCo simulation), adapted from omarrayyann/mjlab_manipulation. It reads `time_ms`, `qpos`, `qvel`, `ctrl` and 4 more; runs `step` and `reset`. `step`: advance the simulated world by a bounded number of fixed timesteps, optionally applying an action for each step, and return the resulting observation and terminal flags. A simulator: the market serves it with a stand-in that needs no simulator install.","measures":["time_ms","qpos","qvel","ctrl","tick","timestep_ms","seed","native_checkpoint"],"adjusts":[],"actions":[{"name":"step","description":"Advance the simulated world by a bounded number of fixed timesteps, optionally applying an action for each step, and return the resulting observation and terminal flags."},{"name":"reset","description":"Reset the simulated world to a scenario start state and return the initial observation. When a seed is supplied the endpoint records it in the receipt; otherwise the endpoint's declared default seed applies."}],"tags":["mujoco","simulation","manipulation","robot-arm","droid","franka","mjlab","world-sim"],"backends":["fake"],"served_backend":"fake","evidence":"contract_checked","upstream":{"repo_url":"https://github.com/omarrayyann/mjlab_manipulation","commit":"7564cd633f4e13bb20a11b0c9f2ff187231cef8a","license":"NOASSERTION"},"stars":74,"install":{"openai4s":"openai4s lab add robots/omarrayyann__mjlab_manipulation","mhs":"mhs serve robots/omarrayyann__mjlab_manipulation --port 7400","mcp":"mhs serve robots/omarrayyann__mjlab_manipulation --mcp"}},
{"id":"robots/openai__mujoco-worldgen","name":"MuJoCo Worldgen particle (MuJoCo simulation)","device_id":"mhs://localhost/worldgen-particle","track":"robots","category":"Simulation","topic":null,"kind":"world.sim","vendor":"OpenAI","model":"worldgen particle","mode":"simulated","risk":"R0","family":"mujoco","role":"twin-candidate","intro":"MuJoCo Worldgen particle (MuJoCo simulation), adapted from openai/mujoco-worldgen. It reads `time_ms`, `qpos`, `qvel`, `ctrl` and 4 more; runs `step` and `reset`. `step`: advance the simulated world by a bounded number of fixed timesteps, optionally applying an action for each step, and return the resulting observation and terminal flags. A simulator: the market serves it with a stand-in that needs no simulator install.","measures":["time_ms","qpos","qvel","ctrl","tick","timestep_ms","seed","native_checkpoint"],"adjusts":[],"actions":[{"name":"step","description":"Advance the simulated world by a bounded number of fixed timesteps, optionally applying an action for each step, and return the resulting observation and terminal flags."},{"name":"reset","description":"Reset the simulated world to a scenario start state and return the initial observation. When a seed is supplied the endpoint records it in the receipt; otherwise the endpoint's declared default seed applies."}],"tags":["mujoco","particle","reinforcement-learning","robot","simulation","worldgen"],"backends":["fake"],"served_backend":"fake","evidence":"contract_checked","upstream":{"repo_url":"https://github.com/openai/mujoco-worldgen","commit":"39f52b1b47aed499925a6a214b58bdbdb4e2f75e","license":"MIT"},"stars":590,"install":{"openai4s":"openai4s lab add robots/openai__mujoco-worldgen","mhs":"mhs serve robots/openai__mujoco-worldgen --port 7400","mcp":"mhs serve robots/openai__mujoco-worldgen --mcp"}},
{"id":"robots/openai__multi-agent-emergence-environments","name":"OpenAI Multi-Agent Emergence Environments Base (MuJoCo)","device_id":"mhs://localhost/mae-envs-base","track":"robots","category":"Simulation","topic":"multi-robot systems","kind":"world.sim","vendor":"OpenAI","model":"mae_envs Base","mode":"simulated","risk":"R0","family":"gymnasium","role":"sim-env","intro":"OpenAI Multi-Agent Emergence Environments Base (MuJoCo), adapted from openai/multi-agent-emergence-environments. It reads `observation`, `reward`, `terminated`, `truncated` and 4 more; runs `step`, `reset` and `seed`. `step`: advance the simulated world by a bounded number of fixed timesteps, optionally applying an action for each step, and return the resulting observation and terminal flags. A simulator: the market serves it with a stand-in that needs no simulator install.","measures":["observation","reward","terminated","truncated","tick","episode","seed","info"],"adjusts":[],"actions":[{"name":"step","description":"Advance the simulated world by a bounded number of fixed timesteps, optionally applying an action for each step, and return the resulting observation and terminal flags."},{"name":"reset","description":"Reset the simulated world to a scenario start state and return the initial observation. When a seed is supplied the endpoint records it in the receipt; otherwise the endpoint's declared default seed applies."},{"name":"seed","description":"Set the seed used by the simulated world's random number generators for subsequent steps, without resetting the world. The accepted seed is echoed in the receipt."}],"tags":["multi-agent","mujoco","hide-and-seek","reinforcement-learning","simulation","gymnasium"],"backends":["fake"],"served_backend":"fake","evidence":"contract_checked","upstream":{"repo_url":"https://github.com/openai/multi-agent-emergence-environments","commit":"bafaf1e11e6398624116761f91ae7c93b136f395","license":"MIT"},"stars":0,"install":{"openai4s":"openai4s lab add robots/openai__multi-agent-emergence-environments","mhs":"mhs serve robots/openai__multi-agent-emergence-environments --port 7400","mcp":"mhs serve robots/openai__multi-agent-emergence-environments --mcp"}},
{"id":"robots/openai__multiagent-competition","name":"OpenAI gym-compete run-to-goal-ants-v0 (two ants)","device_id":"mhs://localhost/gym-compete-ants","track":"robots","category":"Simulation","topic":"multi-robot systems","kind":"world.sim","vendor":"OpenAI","model":"gym-compete run-to-goal-ants-v0","mode":"simulated","risk":"R0","family":"gymnasium","role":"sim-env","intro":"OpenAI gym-compete run-to-goal-ants-v0 (two ants), adapted from openai/multiagent-competition. It reads `observation`, `reward`, `terminated`, `truncated` and 4 more; runs `step`, `reset` and `seed`. `step`: advance the simulated world by a bounded number of fixed timesteps, optionally applying an action for each step, and return the resulting observation and terminal flags. A simulator: the market serves it with a stand-in that needs no simulator install.","measures":["observation","reward","terminated","truncated","tick","episode","seed","info"],"adjusts":[],"actions":[{"name":"step","description":"Advance the simulated world by a bounded number of fixed timesteps, optionally applying an action for each step, and return the resulting observation and terminal flags."},{"name":"reset","description":"Reset the simulated world to a scenario start state and return the initial observation. When a seed is supplied the endpoint records it in the receipt; otherwise the endpoint's declared default seed applies."},{"name":"seed","description":"Set the seed used by the simulated world's random number generators for subsequent steps, without resetting the world. The accepted seed is echoed in the receipt."}],"tags":["multi-agent","ants","mujoco","gym","reinforcement-learning","simulation"],"backends":["fake"],"served_backend":"fake","evidence":"contract_checked","upstream":{"repo_url":"https://github.com/openai/multiagent-competition","commit":"b2e081a192429913b7d21a89525901d59c85e7f3","license":"NOASSERTION"},"stars":0,"install":{"openai4s":"openai4s lab add robots/openai__multiagent-competition","mhs":"mhs serve robots/openai__multiagent-competition --port 7400","mcp":"mhs serve robots/openai__multiagent-competition --mcp"}},
{"id":"robots/openai__multiagent-particle-envs","name":"OpenAI Multi-Agent Particle Environment (simple world)","device_id":"mhs://localhost/multiagent-simple","track":"robots","category":"Simulation","topic":"multi-robot systems","kind":"world.sim","vendor":"OpenAI","model":"MultiagentSimple-v0 (simple.py scenario)","mode":"simulated","risk":"R0","family":"gymnasium","role":"sim-env","intro":"OpenAI Multi-Agent Particle Environment (simple world), adapted from openai/multiagent-particle-envs. It reads `observation`, `reward`, `terminated`, `truncated` and 4 more; runs `step`, `reset` and `seed`. `step`: advance the simulated world by a bounded number of fixed timesteps, optionally applying an action for each step, and return the resulting observation and terminal flags. A simulator: the market serves it with a stand-in that needs no simulator install.","measures":["observation","reward","terminated","truncated","tick","episode","seed","info"],"adjusts":[],"actions":[{"name":"step","description":"Advance the simulated world by a bounded number of fixed timesteps, optionally applying an action for each step, and return the resulting observation and terminal flags."},{"name":"reset","description":"Reset the simulated world to a scenario start state and return the initial observation. When a seed is supplied the endpoint records it in the receipt; otherwise the endpoint's declared default seed applies."},{"name":"seed","description":"Set the seed used by the simulated world's random number generators for subsequent steps, without resetting the world. The accepted seed is echoed in the receipt."}],"tags":["multiagent","particle-environment","reinforcement-learning","simulation","gym"],"backends":["fake"],"served_backend":"fake","evidence":"contract_checked","upstream":{"repo_url":"https://github.com/openai/multiagent-particle-envs","commit":"83ba4d1aeb00282f7c4acd6912435b3ca642c227","license":"MIT"},"stars":0,"install":{"openai4s":"openai4s lab add robots/openai__multiagent-particle-envs","mhs":"mhs serve robots/openai__multiagent-particle-envs --port 7400","mcp":"mhs serve robots/openai__multiagent-particle-envs --mcp"}},
{"id":"robots/openai__robogym","name":"OpenAI Robogym ShadowHand (MuJoCo model)","device_id":"mhs://localhost/robogym-shadowhand","track":"robots","category":"Simulation","topic":"robot manipulation","kind":"world.sim","vendor":"OpenAI","model":"ShadowHand","mode":"simulated","risk":"R0","family":"mujoco","role":"sim-env","intro":"OpenAI Robogym ShadowHand (MuJoCo model), adapted from openai/robogym. It reads `time_ms`, `qpos`, `qvel`, `ctrl` and 4 more; runs `step` and `reset`. `step`: advance the simulated world by a bounded number of fixed timesteps, optionally applying an action for each step, and return the resulting observation and terminal flags. A simulator: the market serves it with a stand-in that needs no simulator install.","measures":["time_ms","qpos","qvel","ctrl","tick","timestep_ms","seed","native_checkpoint"],"adjusts":[],"actions":[{"name":"step","description":"Advance the simulated world by a bounded number of fixed timesteps, optionally applying an action for each step, and return the resulting observation and terminal flags."},{"name":"reset","description":"Reset the simulated world to a scenario start state and return the initial observation. When a seed is supplied the endpoint records it in the receipt; otherwise the endpoint's declared default seed applies."}],"tags":["shadowhand","dexterous-hand","manipulation","mujoco","simulation","robot"],"backends":["fake"],"served_backend":"fake","evidence":"contract_checked","upstream":{"repo_url":"https://github.com/openai/robogym","commit":"9ff1111fd557b1a01911d7d8c9d59a453071c96e","license":"MIT"},"stars":431,"install":{"openai4s":"openai4s lab add robots/openai__robogym","mhs":"mhs serve robots/openai__robogym --port 7400","mcp":"mhs serve robots/openai__robogym --mcp"}},
{"id":"robots/openai__roboschool","name":"Roboschool InvertedPendulum-v1 (OpenAI Roboschool)","device_id":"mhs://localhost/roboschool-inverted-pendulum","track":"robots","category":"Simulation","topic":"legged robots","kind":"world.sim","vendor":"OpenAI","model":"RoboschoolInvertedPendulum-v1","mode":"simulated","risk":"R0","family":"gymnasium","role":"sim-env","intro":"Roboschool InvertedPendulum-v1 (OpenAI Roboschool), adapted from openai/roboschool. It reads `observation`, `reward`, `terminated`, `truncated` and 4 more; runs `step`, `reset` and `seed`. `step`: advance the simulated world by a bounded number of fixed timesteps, optionally applying an action for each step, and return the resulting observation and terminal flags. A simulator: the market serves it with a stand-in that needs no simulator install.","measures":["observation","reward","terminated","truncated","tick","episode","seed","info"],"adjusts":[],"actions":[{"name":"step","description":"Advance the simulated world by a bounded number of fixed timesteps, optionally applying an action for each step, and return the resulting observation and terminal flags."},{"name":"reset","description":"Reset the simulated world to a scenario start state and return the initial observation. When a seed is supplied the endpoint records it in the receipt; otherwise the endpoint's declared default seed applies."},{"name":"seed","description":"Set the seed used by the simulated world's random number generators for subsequent steps, without resetting the world. The accepted seed is echoed in the receipt."}],"tags":["inverted-pendulum","cartpole","continuous-control","reinforcement-learning","roboschool","simulation"],"backends":["fake"],"served_backend":"fake","evidence":"contract_checked","upstream":{"repo_url":"https://github.com/openai/roboschool","commit":"d32bcb2b35b94168b5ce27233ca62f3c8678886f","license":"MIT"},"stars":0,"install":{"openai4s":"openai4s lab add robots/openai__roboschool","mhs":"mhs serve robots/openai__roboschool --port 7400","mcp":"mhs serve robots/openai__roboschool --mcp"}},
{"id":"robots/openai__robosumo","name":"OpenAI RoboSumo Ant-vs-Ant (two-agent MuJoCo sumo)","device_id":"mhs://localhost/robosumo","track":"robots","category":"Simulation","topic":"multi-robot systems","kind":"world.sim","vendor":"OpenAI","model":"RoboSumo-Ant-vs-Ant-v0","mode":"simulated","risk":"R0","family":"gymnasium","role":"sim-env","intro":"OpenAI RoboSumo Ant-vs-Ant (two-agent MuJoCo sumo), adapted from openai/robosumo. It reads `observation`, `reward`, `terminated`, `truncated` and 4 more; runs `step`, `reset` and `seed`. `step`: advance the simulated world by a bounded number of fixed timesteps, optionally applying an action for each step, and return the resulting observation and terminal flags. A simulator: the market serves it with a stand-in that needs no simulator install.","measures":["observation","reward","terminated","truncated","tick","episode","seed","info"],"adjusts":[],"actions":[{"name":"step","description":"Advance the simulated world by a bounded number of fixed timesteps, optionally applying an action for each step, and return the resulting observation and terminal flags."},{"name":"reset","description":"Reset the simulated world to a scenario start state and return the initial observation. When a seed is supplied the endpoint records it in the receipt; otherwise the endpoint's declared default seed applies."},{"name":"seed","description":"Set the seed used by the simulated world's random number generators for subsequent steps, without resetting the world. The accepted seed is echoed in the receipt."}],"tags":["robosumo","sumo","multi-agent","mujoco","reinforcement-learning","simulation","gym"],"backends":["fake"],"served_backend":"fake","evidence":"contract_checked","upstream":{"repo_url":"https://github.com/openai/robosumo","commit":"3a317e27d2342dd47a869950e93315b23a74921a","license":"NOASSERTION"},"stars":0,"install":{"openai4s":"openai4s lab add robots/openai__robosumo","mhs":"mhs serve robots/openai__robosumo --port 7400","mcp":"mhs serve robots/openai__robosumo --mcp"}},
{"id":"robots/openai__safety-gym","name":"Safety Gym car robot (MuJoCo)","device_id":"mhs://localhost/safety-gym-car","track":"robots","category":"Simulation","topic":"mobile robots","kind":"world.sim","vendor":"OpenAI","model":"Safety Gym car","mode":"simulated","risk":"R0","family":"mujoco","role":"sim-env","intro":"Safety Gym car robot (MuJoCo), adapted from openai/safety-gym. It reads `time_ms`, `qpos`, `qvel`, `ctrl` and 4 more; runs `step` and `reset`. `step`: advance the simulated world by a bounded number of fixed timesteps, optionally applying an action for each step, and return the resulting observation and terminal flags. A simulator: the market serves it with a stand-in that needs no simulator install.","measures":["time_ms","qpos","qvel","ctrl","tick","timestep_ms","seed","native_checkpoint"],"adjusts":[],"actions":[{"name":"step","description":"Advance the simulated world by a bounded number of fixed timesteps, optionally applying an action for each step, and return the resulting observation and terminal flags."},{"name":"reset","description":"Reset the simulated world to a scenario start state and return the initial observation. When a seed is supplied the endpoint records it in the receipt; otherwise the endpoint's declared default seed applies."}],"tags":["car","mujoco","openai","reinforcement-learning","robot","safety-gym","simulation"],"backends":["fake"],"served_backend":"fake","evidence":"contract_checked","upstream":{"repo_url":"https://github.com/openai/safety-gym","commit":"f31042f2f9ee61b9034dd6a416955972911544f5","license":"MIT"},"stars":0,"install":{"openai4s":"openai4s lab add robots/openai__safety-gym","mhs":"mhs serve robots/openai__safety-gym --port 7400","mcp":"mhs serve robots/openai__safety-gym --mcp"}},
{"id":"robots/opengalaxea__galaxeamanipsim","name":"Galaxea R1Base-v0 bimanual manipulation (Sapien)","device_id":"mhs://localhost/galaxea_r1_base","track":"robots","category":"Simulation","topic":"robot manipulation","kind":"world.sim","vendor":"OpenGalaxea","model":"R1Base-v0","mode":"simulated","risk":"R0","family":"gymnasium","role":"sim-env","intro":"Galaxea R1Base-v0 bimanual manipulation (Sapien), adapted from opengalaxea/galaxeamanipsim. It reads `observation`, `reward`, `terminated`, `truncated` and 4 more; runs `step`, `reset` and `seed`. `step`: advance the simulated world by a bounded number of fixed timesteps, optionally applying an action for each step, and return the resulting observation and terminal flags. A simulator: the market serves it with a stand-in that needs no simulator install.","measures":["observation","reward","terminated","truncated","tick","episode","seed","info"],"adjusts":[],"actions":[{"name":"step","description":"Advance the simulated world by a bounded number of fixed timesteps, optionally applying an action for each step, and return the resulting observation and terminal flags."},{"name":"reset","description":"Reset the simulated world to a scenario start state and return the initial observation. When a seed is supplied the endpoint records it in the receipt; otherwise the endpoint's declared default seed applies."},{"name":"seed","description":"Set the seed used by the simulated world's random number generators for subsequent steps, without resetting the world. The accepted seed is echoed in the receipt."}],"tags":["bimanual-manipulation","galaxea","r1","reinforcement-learning","simulation","gymnasium"],"backends":["fake"],"served_backend":"fake","evidence":"contract_checked","upstream":{"repo_url":"https://github.com/opengalaxea/galaxeamanipsim","commit":"abe7f5161eeaa150e6eaffdf443af5df7f23f356","license":"Apache-2.0"},"stars":46,"install":{"openai4s":"openai4s lab add robots/opengalaxea__galaxeamanipsim","mhs":"mhs serve robots/opengalaxea__galaxeamanipsim --port 7400","mcp":"mhs serve robots/opengalaxea__galaxeamanipsim --mcp"}},
{"id":"robots/openmoss__vlabench","name":"VLABench xArm7 (MuJoCo scene)","device_id":"mhs://localhost/vlabench-xarm7","track":"robots","category":"Simulation","topic":"robot manipulation","kind":"world.sim","vendor":"OpenMoss","model":"VLABench xArm7","mode":"simulated","risk":"R0","family":"mujoco","role":"sim-env","intro":"VLABench xArm7 (MuJoCo scene), adapted from openmoss/vlabench. It reads `time_ms`, `qpos`, `qvel`, `ctrl` and 4 more; runs `step` and `reset`. `step`: advance the simulated world by a bounded number of fixed timesteps, optionally applying an action for each step, and return the resulting observation and terminal flags. A simulator: the market serves it with a stand-in that needs no simulator install.","measures":["time_ms","qpos","qvel","ctrl","tick","timestep_ms","seed","native_checkpoint"],"adjusts":[],"actions":[{"name":"step","description":"Advance the simulated world by a bounded number of fixed timesteps, optionally applying an action for each step, and return the resulting observation and terminal flags."},{"name":"reset","description":"Reset the simulated world to a scenario start state and return the initial observation. When a seed is supplied the endpoint records it in the receipt; otherwise the endpoint's declared default seed applies."}],"tags":["vlabench","xarm7","manipulation","mujoco","simulation","robot"],"backends":["fake"],"served_backend":"fake","evidence":"contract_checked","upstream":{"repo_url":"https://github.com/openmoss/vlabench","commit":"cf588fe60c0c7282174fe979f5913170cfe69017","license":"MIT"},"stars":478,"install":{"openai4s":"openai4s lab add robots/openmoss__vlabench","mhs":"mhs serve robots/openmoss__vlabench --port 7400","mcp":"mhs serve robots/openmoss__vlabench --mcp"}},
{"id":"robots/openquadruped__spot_mini_mini","name":"openquadruped spot_mini_mini SpotMicroEnv-v0 (PyBullet quadruped)","device_id":"mhs://localhost/spot-micro","track":"robots","category":"Simulation","topic":"legged robots","kind":"world.sim","vendor":"openquadruped","model":"SpotMicroEnv-v0","mode":"simulated","risk":"R0","family":"gymnasium","role":"sim-env","intro":"openquadruped spot_mini_mini SpotMicroEnv-v0 (PyBullet quadruped), adapted from openquadruped/spot_mini_mini. It reads `observation`, `reward`, `terminated`, `truncated` and 4 more; runs `step`, `reset` and `seed`. `step`: advance the simulated world by a bounded number of fixed timesteps, optionally applying an action for each step, and return the resulting observation and terminal flags. A simulator: the market serves it with a stand-in that needs no simulator install.","measures":["observation","reward","terminated","truncated","tick","episode","seed","info"],"adjusts":[],"actions":[{"name":"step","description":"Advance the simulated world by a bounded number of fixed timesteps, optionally applying an action for each step, and return the resulting observation and terminal flags."},{"name":"reset","description":"Reset the simulated world to a scenario start state and return the initial observation. When a seed is supplied the endpoint records it in the receipt; otherwise the endpoint's declared default seed applies."},{"name":"seed","description":"Set the seed used by the simulated world's random number generators for subsequent steps, without resetting the world. The accepted seed is echoed in the receipt."}],"tags":["spot","quadruped","robot","locomotion","pybullet","reinforcement-learning","simulation","gym"],"backends":["fake"],"served_backend":"fake","evidence":"contract_checked","upstream":{"repo_url":"https://github.com/openquadruped/spot_mini_mini","commit":"c7e4905be176c63fa0e68a09c177b937e916fa60","license":"MIT"},"stars":947,"install":{"openai4s":"openai4s lab add robots/openquadruped__spot_mini_mini","mhs":"mhs serve robots/openquadruped__spot_mini_mini --port 7400","mcp":"mhs serve robots/openquadruped__spot_mini_mini --mcp"}},
{"id":"robots/openretriever__stanford-robotics-kitchen","name":"Stanford Robotics Kitchen Panda (MuJoCo model)","device_id":"mhs://localhost/stanford-robotics-kitchen","track":"robots","category":"Simulation","topic":"robot arm manipulation","kind":"world.sim","vendor":"OpenRetriever","model":"Franka Panda","mode":"simulated","risk":"R0","family":"mujoco","role":"twin-candidate","intro":"Stanford Robotics Kitchen Panda (MuJoCo model), adapted from openretriever/stanford-robotics-kitchen. It reads `time_ms`, `qpos`, `qvel`, `ctrl` and 4 more; runs `step` and `reset`. `step`: advance the simulated world by a bounded number of fixed timesteps, optionally applying an action for each step, and return the resulting observation and terminal flags. A simulator: the market serves it with a stand-in that needs no simulator install.","measures":["time_ms","qpos","qvel","ctrl","tick","timestep_ms","seed","native_checkpoint"],"adjusts":[],"actions":[{"name":"step","description":"Advance the simulated world by a bounded number of fixed timesteps, optionally applying an action for each step, and return the resulting observation and terminal flags."},{"name":"reset","description":"Reset the simulated world to a scenario start state and return the initial observation. When a seed is supplied the endpoint records it in the receipt; otherwise the endpoint's declared default seed applies."}],"tags":["stanford","kitchen","panda","franka","mujoco","simulation","robot"],"backends":["fake"],"served_backend":"fake","evidence":"contract_checked","upstream":{"repo_url":"https://github.com/openretriever/stanford-robotics-kitchen","commit":"546fd4b108f093f776a1a7c5919547233945dc88","license":"LicenseRef-proprietary"},"stars":1,"install":{"openai4s":"openai4s lab add robots/openretriever__stanford-robotics-kitchen","mhs":"mhs serve robots/openretriever__stanford-robotics-kitchen --port 7400","mcp":"mhs serve robots/openretriever__stanford-robotics-kitchen --mcp"}},
{"id":"robots/orig74__dronesimlab","name":"DroneSimLab UE4 camera bridge","device_id":"mhs://localhost/dronesimlab","track":"robots","category":"Sensors and cameras","topic":null,"kind":"sensor.camera","vendor":"orig74","model":null,"mode":"simulated","risk":"R0","family":"ros","role":"sim-env","intro":"DroneSimLab UE4 camera bridge, adapted from orig74/dronesimlab. It runs `capture_image`. `capture_image`: capture a single image from a named camera with a declared resolution and exposure and return an image artifact reference. A simulator: the market serves it with a stand-in that needs no simulator install.","measures":[],"adjusts":[],"actions":[{"name":"capture_image","description":"Capture a single image from a named camera with a declared resolution and exposure and return an image artifact reference."}],"tags":["ros","ros1","simulation","camera","image","depth","unreal-engine"],"backends":["fake"],"served_backend":"fake","evidence":"contract_checked","upstream":{"repo_url":"https://github.com/orig74/dronesimlab","commit":"211c94319c52b3090ec4e2c0c96fe0147a2a4ac7","license":"MIT"},"stars":159,"install":{"openai4s":"openai4s lab add robots/orig74__dronesimlab","mhs":"mhs serve robots/orig74__dronesimlab --port 7400","mcp":"mhs serve robots/orig74__dronesimlab --mcp"}},
{"id":"robots/osrf__vrx","name":"Virtual RobotX (VRX) simulation environment","device_id":"mhs://localhost/vrx","track":"robots","category":"Simulation","topic":"marine robotics","kind":"world.sim","vendor":"Open Source Robotics Foundation","model":"Gazebo Harmonic + ROS 2 Jazzy","mode":"simulated","risk":"R2","family":"ros","role":"sim-env","intro":"Virtual RobotX (VRX) simulation environment, adapted from osrf/vrx. It reads `read_sim_clock` and `read_task_info`; runs `publish_left_thrust`, `publish_right_thrust`, `publish_left_thrust_position` and `publish_right_thrust_position`. `publish_left_thrust`: publish one Float64 command on /wamv/thrusters/left/thrust; the receipt is transmission evidence only, not motion, thrust attainment or stopping. A simulator: the market serves it with a stand-in that needs no simulator install.","measures":["read_sim_clock","read_task_info"],"adjusts":[],"actions":[{"name":"publish_left_thrust","description":"Publish one Float64 command on /wamv/thrusters/left/thrust; the receipt is transmission evidence only, not motion, thrust attainment or stopping."},{"name":"publish_right_thrust","description":"Publish one Float64 command on /wamv/thrusters/right/thrust; the receipt is transmission evidence only, not motion, thrust attainment or stopping."},{"name":"publish_left_thrust_position","description":"Publish one Float64 command on /wamv/thrusters/left/pos; the receipt is transmission evidence only, not joint motion or stopping."},{"name":"publish_right_thrust_position","description":"Publish one Float64 command on /wamv/thrusters/right/pos; the receipt is transmission evidence only, not joint motion or stopping."}],"tags":["ros","ros2","simulation","gazebo","vrx","usv","clock","task-info","thrusters"],"backends":["fake"],"served_backend":"fake","evidence":"contract_checked","upstream":{"repo_url":"https://github.com/osrf/vrx","commit":"7609d1bd90ce7edb29d040a082f949e8b089c864","license":"Apache-2.0"},"stars":751,"install":{"openai4s":"openai4s lab add robots/osrf__vrx","mhs":"mhs serve robots/osrf__vrx --port 7400","mcp":"mhs serve robots/osrf__vrx --mcp"}},
{"id":"robots/osudrl__cassie-mujoco-sim","name":"Cassie MuJoCo simulation","device_id":"mhs://localhost/cassie-sim","track":"robots","category":"Simulation","topic":"legged robots","kind":"world.sim","vendor":"Agility Robotics (Dynamic Robotics Laboratory)","model":"Cassie","mode":"simulated","risk":"R0","family":"mujoco","role":"sim-env","intro":"Cassie MuJoCo simulation, adapted from osudrl/cassie-mujoco-sim. It reads `time_ms`, `qpos`, `qvel`, `ctrl` and 3 more; runs `step` and `reset_simulation`. `step`: advance the simulated world by a bounded number of fixed timesteps, optionally applying an action for each step, and return the resulting observation and terminal flags. A simulator: the market serves it with a stand-in that needs no simulator install.","measures":["time_ms","qpos","qvel","ctrl","tick","timestep_ms","seed"],"adjusts":[],"actions":[{"name":"step","description":"Advance the simulated world by a bounded number of fixed timesteps, optionally applying an action for each step, and return the resulting observation and terminal flags."},{"name":"reset_simulation","description":"Reset the simulated world to a scenario start state and return the initial observation. When a seed is supplied the endpoint records it in the receipt; otherwise the endpoint's declared default seed applies."}],"tags":["cassie","mujoco","robot","simulation","biped","world"],"backends":["fake"],"served_backend":"fake","evidence":"contract_checked","upstream":{"repo_url":"https://github.com/osudrl/cassie-mujoco-sim","commit":"188d3d7f04f0c4ed12db66bdec67884e1c0eb743","license":"NOASSERTION"},"stars":310,"install":{"openai4s":"openai4s lab add robots/osudrl__cassie-mujoco-sim","mhs":"mhs serve robots/osudrl__cassie-mujoco-sim --port 7400","mcp":"mhs serve robots/osudrl__cassie-mujoco-sim --mcp"}},
{"id":"robots/osudrl__humanoid_hanoi","name":"Digit v3 box tower of Hanoi (MuJoCo model)","device_id":"mhs://localhost/digit-hanoi","track":"robots","category":"Simulation","topic":"humanoid robots","kind":"world.sim","vendor":"OSU Dynamic Robotics Laboratory","model":"Digit v3 (box tower of Hanoi)","mode":"simulated","risk":"R0","family":"mujoco","role":"sim-env","intro":"Digit v3 box tower of Hanoi (MuJoCo model), adapted from osudrl/humanoid_hanoi. It reads `time_ms`, `qpos`, `qvel`, `ctrl` and 4 more; runs `step` and `reset`. `step`: advance the simulated world by a bounded number of fixed timesteps, optionally applying an action for each step, and return the resulting observation and terminal flags. A simulator: the market serves it with a stand-in that needs no simulator install.","measures":["time_ms","qpos","qvel","ctrl","tick","timestep_ms","seed","native_checkpoint"],"adjusts":[],"actions":[{"name":"step","description":"Advance the simulated world by a bounded number of fixed timesteps, optionally applying an action for each step, and return the resulting observation and terminal flags."},{"name":"reset","description":"Reset the simulated world to a scenario start state and return the initial observation. When a seed is supplied the endpoint records it in the receipt; otherwise the endpoint's declared default seed applies."}],"tags":["digit","humanoid","hanoi","manipulation","mujoco","simulation","robot"],"backends":["fake"],"served_backend":"fake","evidence":"contract_checked","upstream":{"repo_url":"https://github.com/osudrl/humanoid_hanoi","commit":"64bc880efe38c7a357f57ac2d2bb888334ec0284","license":"NOASSERTION"},"stars":14,"install":{"openai4s":"openai4s lab add robots/osudrl__humanoid_hanoi","mhs":"mhs serve robots/osudrl__humanoid_hanoi --port 7400","mcp":"mhs serve robots/osudrl__humanoid_hanoi --mcp"}},
{"id":"robots/osurobotics__kinovagrasping","name":"Kinova j2s7s300 grasping environment (kinovagripper-v0)","device_id":"mhs://localhost/kinovagripper","track":"robots","category":"Simulation","topic":"robot arm manipulation","kind":"world.sim","vendor":"OSU Robotics","model":"Kinova j2s7s300 + three-finger gripper (MuJoCo model)","mode":"simulated","risk":"R0","family":"gymnasium","role":"sim-env","intro":"Kinova j2s7s300 grasping environment (kinovagripper-v0), adapted from osurobotics/kinovagrasping. It reads `observation`, `reward`, `terminated`, `truncated` and 4 more; runs `step`, `reset` and `seed`. `step`: advance the simulated world by a bounded number of fixed timesteps, optionally applying an action for each step, and return the resulting observation and terminal flags. A simulator: the market serves it with a stand-in that needs no simulator install.","measures":["observation","reward","terminated","truncated","tick","episode","seed","info"],"adjusts":[],"actions":[{"name":"step","description":"Advance the simulated world by a bounded number of fixed timesteps, optionally applying an action for each step, and return the resulting observation and terminal flags."},{"name":"reset","description":"Reset the simulated world to a scenario start state and return the initial observation. When a seed is supplied the endpoint records it in the receipt; otherwise the endpoint's declared default seed applies."},{"name":"seed","description":"Set the seed used by the simulated world's random number generators for subsequent steps, without resetting the world. The accepted seed is echoed in the receipt."}],"tags":["grasping","kinova","j2s7s300","gym","mujoco","reinforcement-learning","simulation"],"backends":["fake"],"served_backend":"fake","evidence":"contract_checked","upstream":{"repo_url":"https://github.com/osurobotics/kinovagrasping","commit":"f22af60d3683fdc4ffecf49ccff179fbc6750748","license":"NOASSERTION"},"stars":30,"install":{"openai4s":"openai4s lab add robots/osurobotics__kinovagrasping","mhs":"mhs serve robots/osurobotics__kinovagrasping --port 7400","mcp":"mhs serve robots/osurobotics__kinovagrasping --mcp"}},
{"id":"robots/paddlepaddle__metagym","name":"MetaGym Bandits (bandits-v0)","device_id":"mhs://localhost/metagym-bandits","track":"robots","category":"Simulation","topic":null,"kind":"world.sim","vendor":"PaddlePaddle","model":"bandits-v0","mode":"simulated","risk":"R0","family":"gymnasium","role":"sim-env","intro":"MetaGym Bandits (bandits-v0), adapted from paddlepaddle/metagym. It reads `observation`, `reward`, `terminated`, `truncated` and 4 more; runs `step`, `reset` and `seed`. `step`: advance the simulated world by a bounded number of fixed timesteps, optionally applying an action for each step, and return the resulting observation and terminal flags. A simulator: the market serves it with a stand-in that needs no simulator install.","measures":["observation","reward","terminated","truncated","tick","episode","seed","info"],"adjusts":[],"actions":[{"name":"step","description":"Advance the simulated world by a bounded number of fixed timesteps, optionally applying an action for each step, and return the resulting observation and terminal flags."},{"name":"reset","description":"Reset the simulated world to a scenario start state and return the initial observation. When a seed is supplied the endpoint records it in the receipt; otherwise the endpoint's declared default seed applies."},{"name":"seed","description":"Set the seed used by the simulated world's random number generators for subsequent steps, without resetting the world. The accepted seed is echoed in the receipt."}],"tags":["bandits","meta-reinforcement-learning","reinforcement-learning","simulation","gymnasium"],"backends":["fake"],"served_backend":"fake","evidence":"contract_checked","upstream":{"repo_url":"https://github.com/paddlepaddle/metagym","commit":"ca724c22fd0c2ade8ec905edc688a1befdf98a3c","license":"Apache-2.0"},"stars":303,"install":{"openai4s":"openai4s lab add robots/paddlepaddle__metagym","mhs":"mhs serve robots/paddlepaddle__metagym --port 7400","mcp":"mhs serve robots/paddlepaddle__metagym --mcp"}},
{"id":"robots/pairlab__leibnizgym","name":"LeibnizGym TriFinger IsaacGym environment","device_id":"mhs://localhost/trifinger","track":"robots","category":"Simulation","topic":"robot arm manipulation","kind":"world.sim","vendor":"PAIR Lab","model":"leibnizgym TriFinger","mode":"simulated","risk":"R0","family":"gymnasium","role":"sim-env","intro":"LeibnizGym TriFinger IsaacGym environment, adapted from pairlab/leibnizgym. It reads `observation`, `reward`, `terminated`, `truncated` and 4 more; runs `step`, `reset_world` and `set_seed`. `step`: advance the simulated world by a bounded number of fixed timesteps, optionally applying an action for each step, and return the resulting observation and terminal flags. A simulator: the market serves it with a stand-in that needs no simulator install.","measures":["observation","reward","terminated","truncated","tick","episode","seed","info"],"adjusts":[],"actions":[{"name":"step","description":"Advance the simulated world by a bounded number of fixed timesteps, optionally applying an action for each step, and return the resulting observation and terminal flags."},{"name":"reset_world","description":"Reset the simulated world to a scenario start state and return the initial observation. When a seed is supplied the endpoint records it in the receipt; otherwise the endpoint's declared default seed applies."},{"name":"set_seed","description":"Set the seed used by the simulated world's random number generators for subsequent steps, without resetting the world. The accepted seed is echoed in the receipt."}],"tags":["trifinger","isaacgym","robot","simulation","reinforcement-learning"],"backends":["fake"],"served_backend":"fake","evidence":"contract_checked","upstream":{"repo_url":"https://github.com/pairlab/leibnizgym","commit":"2c1cb14fbfece09644445d58fe7ac28c41611e5f","license":"BSD-3-Clause"},"stars":0,"install":{"openai4s":"openai4s lab add robots/pairlab__leibnizgym","mhs":"mhs serve robots/pairlab__leibnizgym --port 7400","mcp":"mhs serve robots/pairlab__leibnizgym --mcp"}},
{"id":"robots/patmce__uav-drl-oa-gymnasium-ros-gazebo","name":"UAV DRL obstacle-avoidance DroneGymGazeboEnv-v0","device_id":"mhs://localhost/uav-drl-oa-drone-gym-gazebo","track":"robots","category":"Simulation","topic":"UAVs","kind":"world.sim","vendor":"patmce","model":"DroneGymGazeboEnv-v0","mode":"simulated","risk":"R2","family":"gymnasium","role":"sim-env","intro":"UAV DRL obstacle-avoidance DroneGymGazeboEnv-v0, adapted from patmce/uav-drl-oa-gymnasium-ros-gazebo. It reads `observation`, `reward`, `terminated`, `truncated` and 4 more; runs `step`, `reset` and `seed`. `step`: advance the simulated world by a bounded number of fixed timesteps, optionally applying an action for each step, and return the resulting observation and terminal flags. A simulator: the market serves it with a stand-in that needs no simulator install.","measures":["observation","reward","terminated","truncated","tick","episode","seed","info"],"adjusts":[],"actions":[{"name":"step","description":"Advance the simulated world by a bounded number of fixed timesteps, optionally applying an action for each step, and return the resulting observation and terminal flags."},{"name":"reset","description":"Reset the simulated world to a scenario start state and return the initial observation. When a seed is supplied the endpoint records it in the receipt; otherwise the endpoint's declared default seed applies."},{"name":"seed","description":"Set the seed used by the simulated world's random number generators for subsequent steps, without resetting the world. The accepted seed is echoed in the receipt."}],"tags":["uav","drone","gazebo","px4","mavros","reinforcement-learning","simulation","gymnasium"],"backends":["fake"],"served_backend":"fake","evidence":"contract_checked","upstream":{"repo_url":"https://github.com/patmce/uav-drl-oa-gymnasium-ros-gazebo","commit":"7e72584e02545c782bc15f3a73480a228a9498af","license":"NOASSERTION"},"stars":7,"install":{"openai4s":"openai4s lab add robots/patmce__uav-drl-oa-gymnasium-ros-gazebo","mhs":"mhs serve robots/patmce__uav-drl-oa-gymnasium-ros-gazebo --port 7400","mcp":"mhs serve robots/patmce__uav-drl-oa-gymnasium-ros-gazebo --mcp"}},
{"id":"robots/pauldanielml__mujoco_rl_ur5","name":"MuJoCo UR5 + gripper Grasper-v0 (simulation)","device_id":"mhs://localhost/ur5_grasper","track":"robots","category":"Simulation","topic":"robot arm manipulation","kind":"world.sim","vendor":"Paul Daniel","model":"Grasper-v0","mode":"simulated","risk":"R0","family":"gymnasium","role":"sim-env","intro":"MuJoCo UR5 + gripper Grasper-v0 (simulation), adapted from pauldanielml/mujoco_rl_ur5. It reads `observation`, `reward`, `terminated`, `truncated` and 4 more; runs `step`, `reset` and `seed`. `step`: advance the simulated world by a bounded number of fixed timesteps, optionally applying an action for each step, and return the resulting observation and terminal flags. A simulator: the market serves it with a stand-in that needs no simulator install.","measures":["observation","reward","terminated","truncated","tick","episode","seed","info"],"adjusts":[],"actions":[{"name":"step","description":"Advance the simulated world by a bounded number of fixed timesteps, optionally applying an action for each step, and return the resulting observation and terminal flags."},{"name":"reset","description":"Reset the simulated world to a scenario start state and return the initial observation. When a seed is supplied the endpoint records it in the receipt; otherwise the endpoint's declared default seed applies."},{"name":"seed","description":"Set the seed used by the simulated world's random number generators for subsequent steps, without resetting the world. The accepted seed is echoed in the receipt."}],"tags":["ur5","gripper","pick-and-place","mujoco","reinforcement-learning","simulation","gymnasium"],"backends":["fake"],"served_backend":"fake","evidence":"contract_checked","upstream":{"repo_url":"https://github.com/pauldanielml/mujoco_rl_ur5","commit":"206d33edf0bc29aca6cd14778de6488e1d1ed0b3","license":"MIT"},"stars":690,"install":{"openai4s":"openai4s lab add robots/pauldanielml__mujoco_rl_ur5","mhs":"mhs serve robots/pauldanielml__mujoco_rl_ur5 --port 7400","mcp":"mhs serve robots/pauldanielml__mujoco_rl_ur5 --mcp"}},
{"id":"robots/peterxjerk__livelybot_rl_control","name":"Pai 12-DoF humanoid (MuJoCo simulation)","device_id":"mhs://localhost/pai-12dof","track":"robots","category":"Simulation","topic":"legged robots","kind":"world.sim","vendor":"HighTorque","model":"Pai 12-DoF (pai_12dof_v2_0312)","mode":"simulated","risk":"R1","family":"mujoco","role":"sim-env","intro":"Pai 12-DoF humanoid (MuJoCo simulation), adapted from peterxjerk/livelybot_rl_control. It reads `time_ms`, `qpos`, `qvel`, `ctrl` and 4 more; runs `step` and `reset`. `step`: advance the simulated world by a bounded number of fixed timesteps, optionally applying an action for each step, and return the resulting observation and terminal flags. A simulator: the market serves it with a stand-in that needs no simulator install.","measures":["time_ms","qpos","qvel","ctrl","tick","timestep_ms","seed","native_checkpoint"],"adjusts":[],"actions":[{"name":"step","description":"Advance the simulated world by a bounded number of fixed timesteps, optionally applying an action for each step, and return the resulting observation and terminal flags."},{"name":"reset","description":"Reset the simulated world to a scenario start state and return the initial observation. When a seed is supplied the endpoint records it in the receipt; otherwise the endpoint's declared default seed applies."}],"tags":["pai","12-dof","humanoid","mujoco","simulation","reinforcement-learning","livelybot"],"backends":["fake"],"served_backend":"fake","evidence":"contract_checked","upstream":{"repo_url":"https://github.com/peterxjerk/livelybot_rl_control","commit":"86b2e85a2e6093e478dea8c8a48bbe4adbfc7445","license":"BSD-3-Clause"},"stars":6,"install":{"openai4s":"openai4s lab add robots/peterxjerk__livelybot_rl_control","mhs":"mhs serve robots/peterxjerk__livelybot_rl_control --port 7400","mcp":"mhs serve robots/peterxjerk__livelybot_rl_control --mcp"}},
{"id":"robots/petoicamp__opencat-quadruped-robot","name":"Petoi OpenCat quadruped","device_id":"mhs://localhost/opencat-quadruped","track":"robots","category":"Mobile robots","topic":null,"kind":"robot.mobile_base","vendor":"Petoi","model":"OpenCat (Bittle / Nybble on NyBoard)","mode":"hardware","risk":"R2","family":"serial","role":"device-driver","intro":"Petoi OpenCat quadruped, adapted from petoicamp/opencat-quadruped-robot. It reads `identity`, `orientation` and `joint_angles_deg`; runs `rest`. `rest`: put the robot down and shut its servos down (the 'd' serial command). A hardware driver: the market serves its fake backend, so no instrument is needed.","measures":["identity","orientation","joint_angles_deg"],"adjusts":[],"actions":[{"name":"rest","description":"Put the robot down and shut its servos down (the 'd' serial command)"}],"tags":["quadruped","robot","opencat","bittle","nybble","serial","telemetry"],"backends":["fake","hardware"],"served_backend":"fake","evidence":"contract_checked","upstream":{"repo_url":"https://github.com/petoicamp/opencat-quadruped-robot","commit":"24563ca2e0218150f6299d013cd3a20c45433467","license":"MIT"},"stars":5433,"install":{"openai4s":"openai4s lab add robots/petoicamp__opencat-quadruped-robot","mhs":"mhs serve robots/petoicamp__opencat-quadruped-robot --port 7400","mcp":"mhs serve robots/petoicamp__opencat-quadruped-robot --mcp"}},
{"id":"robots/physical-superintelligence-lab__simple","name":"SIMPLE Franka tabletop grasp (MuJoCo)","device_id":"mhs://localhost/simple-franka-tabletop-grasp","track":"robots","category":"Simulation","topic":"humanoid robots","kind":"world.sim","vendor":"physical-superintelligence-lab","model":"simple/FrankaTabletopGraspMP-v0","mode":"simulated","risk":"R0","family":"gymnasium","role":"sim-env","intro":"SIMPLE Franka tabletop grasp (MuJoCo), adapted from physical-superintelligence-lab/simple. It reads `observation`, `reward`, `terminated`, `truncated` and 4 more; runs `step`, `reset` and `seed`. `step`: advance the simulated world by a bounded number of fixed timesteps, optionally applying an action for each step, and return the resulting observation and terminal flags. A simulator: the market serves it with a stand-in that needs no simulator install.","measures":["observation","reward","terminated","truncated","tick","episode","seed","info"],"adjusts":[],"actions":[{"name":"step","description":"Advance the simulated world by a bounded number of fixed timesteps, optionally applying an action for each step, and return the resulting observation and terminal flags."},{"name":"reset","description":"Reset the simulated world to a scenario start state and return the initial observation. When a seed is supplied the endpoint records it in the receipt; otherwise the endpoint's declared default seed applies."},{"name":"seed","description":"Set the seed used by the simulated world's random number generators for subsequent steps, without resetting the world. The accepted seed is echoed in the receipt."}],"tags":["simple","franka","tabletop-grasp","mujoco","reinforcement-learning","simulation","gymnasium"],"backends":["fake"],"served_backend":"fake","evidence":"contract_checked","upstream":{"repo_url":"https://github.com/physical-superintelligence-lab/simple","commit":"6d10628794d9c7de4596b4f2afb2c054a637c2bc","license":"MIT"},"stars":332,"install":{"openai4s":"openai4s lab add robots/physical-superintelligence-lab__simple","mhs":"mhs serve robots/physical-superintelligence-lab__simple --port 7400","mcp":"mhs serve robots/physical-superintelligence-lab__simple --mcp"}},
{"id":"robots/pku-alignment__safety-gymnasium","name":"Safety-Gymnasium Point Goal1 (Gymnasium view)","device_id":"mhs://localhost/safety-point-goal1-gymnasium","track":"robots","category":"Simulation","topic":null,"kind":"world.sim","vendor":"PKU-Alignment","model":"SafetyPointGoal1Gymnasium-v0","mode":"simulated","risk":"R0","family":"gymnasium","role":"sim-env","intro":"Safety-Gymnasium Point Goal1 (Gymnasium view), adapted from pku-alignment/safety-gymnasium. It reads `observation`, `reward`, `terminated`, `truncated` and 4 more; runs `step`, `reset` and `seed`. `step`: advance the simulated world by a bounded number of fixed timesteps, optionally applying an action for each step, and return the resulting observation and terminal flags. A simulator: the market serves it with a stand-in that needs no simulator install.","measures":["observation","reward","terminated","truncated","tick","episode","seed","info"],"adjusts":[],"actions":[{"name":"step","description":"Advance the simulated world by a bounded number of fixed timesteps, optionally applying an action for each step, and return the resulting observation and terminal flags."},{"name":"reset","description":"Reset the simulated world to a scenario start state and return the initial observation. When a seed is supplied the endpoint records it in the receipt; otherwise the endpoint's declared default seed applies."},{"name":"seed","description":"Set the seed used by the simulated world's random number generators for subsequent steps, without resetting the world. The accepted seed is echoed in the receipt."}],"tags":["goal","gymnasium","mujoco","point","reinforcement-learning","safety-gymnasium","simulation"],"backends":["fake"],"served_backend":"fake","evidence":"contract_checked","upstream":{"repo_url":"https://github.com/pku-alignment/safety-gymnasium","commit":"ae966e511b9927f06b39c727ca5c650136a4e696","license":"Apache-2.0"},"stars":587,"install":{"openai4s":"openai4s lab add robots/pku-alignment__safety-gymnasium","mhs":"mhs serve robots/pku-alignment__safety-gymnasium --port 7400","mcp":"mhs serve robots/pku-alignment__safety-gymnasium --mcp"}},
{"id":"robots/pndbotics__pnd_mujoco","name":"PNDbotics Adam-Lite humanoid (MuJoCo scene)","device_id":"mhs://localhost/adam_lite","track":"robots","category":"Simulation","topic":"humanoid robots","kind":"world.sim","vendor":"PNDbotics","model":"Adam-Lite","mode":"simulated","risk":"R0","family":"mujoco","role":"sim-env","intro":"PNDbotics Adam-Lite humanoid (MuJoCo scene), adapted from pndbotics/pnd_mujoco. It reads `time_ms`, `qpos`, `qvel`, `ctrl` and 4 more; runs `step` and `reset`. `step`: advance the simulated world by a bounded number of fixed timesteps, optionally applying an action for each step, and return the resulting observation and terminal flags. A simulator: the market serves it with a stand-in that needs no simulator install.","measures":["time_ms","qpos","qvel","ctrl","tick","timestep_ms","seed","native_checkpoint"],"adjusts":[],"actions":[{"name":"step","description":"Advance the simulated world by a bounded number of fixed timesteps, optionally applying an action for each step, and return the resulting observation and terminal flags."},{"name":"reset","description":"Reset the simulated world to a scenario start state and return the initial observation. When a seed is supplied the endpoint records it in the receipt; otherwise the endpoint's declared default seed applies."}],"tags":["adam","adam-lite","humanoid","mujoco","pndbotics","robot","simulation"],"backends":["fake"],"served_backend":"fake","evidence":"contract_checked","upstream":{"repo_url":"https://github.com/pndbotics/pnd_mujoco","commit":"84873eb3c4afd584d468864ba41527a1c14fb688","license":"BSD-3-Clause"},"stars":5,"install":{"openai4s":"openai4s lab add robots/pndbotics__pnd_mujoco","mhs":"mhs serve robots/pndbotics__pnd_mujoco --port 7400","mcp":"mhs serve robots/pndbotics__pnd_mujoco --mcp"}},
{"id":"robots/pnnayyeri__gym-ur5","name":"gym-ur5: UR5 robot with Jaco hand in CoppeliaSim","device_id":"mhs://localhost/gym-ur5","track":"robots","category":"Simulation","topic":"robot arm manipulation","kind":"world.sim","vendor":"pnnayyeri","model":"gym-ur5","mode":"simulated","risk":"R0","family":"gymnasium","role":"sim-env","intro":"gym-ur5: UR5 robot with Jaco hand in CoppeliaSim, adapted from pnnayyeri/gym-ur5. It reads `observation`, `reward`, `terminated`, `truncated` and 4 more; runs `step`, `reset` and `seed`. `step`: advance the simulated world by a bounded number of fixed timesteps, optionally applying an action for each step, and return the resulting observation and terminal flags. A simulator: the market serves it with a stand-in that needs no simulator install.","measures":["observation","reward","terminated","truncated","tick","episode","seed","info"],"adjusts":[],"actions":[{"name":"step","description":"Advance the simulated world by a bounded number of fixed timesteps, optionally applying an action for each step, and return the resulting observation and terminal flags."},{"name":"reset","description":"Reset the simulated world to a scenario start state and return the initial observation. When a seed is supplied the endpoint records it in the receipt; otherwise the endpoint's declared default seed applies."},{"name":"seed","description":"Set the seed used by the simulated world's random number generators for subsequent steps, without resetting the world. The accepted seed is echoed in the receipt."}],"tags":["ur5","coppeliasim","robotics","reinforcement-learning","simulation","gym"],"backends":["fake"],"served_backend":"fake","evidence":"contract_checked","upstream":{"repo_url":"https://github.com/pnnayyeri/gym-ur5","commit":"e515a405d6619456a8cd77f8e5108e7f0bc08246","license":"MIT"},"stars":1,"install":{"openai4s":"openai4s lab add robots/pnnayyeri__gym-ur5","mhs":"mhs serve robots/pnnayyeri__gym-ur5 --port 7400","mcp":"mhs serve robots/pnnayyeri__gym-ur5 --mcp"}},
{"id":"robots/pocketxjl__humanoid-control","name":"pocketxjl humanoid legged MuJoCo model","device_id":"mhs://localhost/pocketxjl-humanoid","track":"robots","category":"Simulation","topic":"humanoid robots","kind":"world.sim","vendor":"pocketxjl","model":"humanoid_legged_description","mode":"simulated","risk":"R0","family":"mujoco","role":"sim-env","intro":"pocketxjl humanoid legged MuJoCo model, adapted from pocketxjl/humanoid-control. It reads `time_ms`, `qpos`, `qvel`, `ctrl` and 4 more; runs `step` and `reset`. `step`: advance the simulated world by a bounded number of fixed timesteps, optionally applying an action for each step, and return the resulting observation and terminal flags. A simulator: the market serves it with a stand-in that needs no simulator install.","measures":["time_ms","qpos","qvel","ctrl","tick","timestep_ms","seed","native_checkpoint"],"adjusts":[],"actions":[{"name":"step","description":"Advance the simulated world by a bounded number of fixed timesteps, optionally applying an action for each step, and return the resulting observation and terminal flags."},{"name":"reset","description":"Reset the simulated world to a scenario start state and return the initial observation. When a seed is supplied the endpoint records it in the receipt; otherwise the endpoint's declared default seed applies."}],"tags":["ros","ros1","mujoco","simulation","humanoid","biped","world"],"backends":["fake"],"served_backend":"fake","evidence":"contract_checked","upstream":{"repo_url":"https://github.com/pocketxjl/humanoid-control","commit":"3b5ffec98d29827730194b0dbf2f119fb7b265ca","license":"MIT"},"stars":419,"install":{"openai4s":"openai4s lab add robots/pocketxjl__humanoid-control","mhs":"mhs serve robots/pocketxjl__humanoid-control --port 7400","mcp":"mhs serve robots/pocketxjl__humanoid-control --mcp"}},
{"id":"robots/princeton-robot-planning-and-learning__kindergarden","name":"KinDER RBY1A mobile manipulator (MuJoCo model)","device_id":"mhs://localhost/rby1a","track":"robots","category":"Simulation","topic":"robot arm manipulation","kind":"world.sim","vendor":"Princeton Robot Planning and Learning","model":"RBY1A mobile manipulator","mode":"simulated","risk":"R0","family":"mujoco","role":"sim-env","intro":"KinDER RBY1A mobile manipulator (MuJoCo model), adapted from princeton-robot-planning-and-learning/kindergarden. It reads `time_ms`, `qpos`, `qvel`, `ctrl` and 4 more; runs `step` and `reset`. `step`: advance the simulated world by a bounded number of fixed timesteps, optionally applying an action for each step, and return the resulting observation and terminal flags. A simulator: the market serves it with a stand-in that needs no simulator install.","measures":["time_ms","qpos","qvel","ctrl","tick","timestep_ms","seed","native_checkpoint"],"adjusts":[],"actions":[{"name":"step","description":"Advance the simulated world by a bounded number of fixed timesteps, optionally applying an action for each step, and return the resulting observation and terminal flags."},{"name":"reset","description":"Reset the simulated world to a scenario start state and return the initial observation. When a seed is supplied the endpoint records it in the receipt; otherwise the endpoint's declared default seed applies."}],"tags":["kinder","mujoco","mobile-manipulator","rby1a","simulation","world"],"backends":["fake"],"served_backend":"fake","evidence":"contract_checked","upstream":{"repo_url":"https://github.com/princeton-robot-planning-and-learning/kindergarden","commit":"5b2dbac482142b879b48449b3fa2af63f641aed3","license":"MIT"},"stars":53,"install":{"openai4s":"openai4s lab add robots/princeton-robot-planning-and-learning__kindergarden","mhs":"mhs serve robots/princeton-robot-planning-and-learning__kindergarden --port 7400","mcp":"mhs serve robots/princeton-robot-planning-and-learning__kindergarden --mcp"}},
{"id":"robots/proroklab__vectorizedmultiagentsimulator","name":"VMAS balance scenario behind the Gymnasium wrapper","device_id":"mhs://localhost/vmas-balance","track":"robots","category":"Simulation","topic":"multi-robot systems","kind":"world.sim","vendor":"ProrokLab","model":"VMAS balance","mode":"simulated","risk":"R0","family":"gymnasium","role":"sim-env","intro":"VMAS balance scenario behind the Gymnasium wrapper, adapted from proroklab/vectorizedmultiagentsimulator. It reads `observation`, `reward`, `terminated`, `truncated` and 4 more; runs `step`, `reset` and `seed`. `step`: advance the simulated world by a bounded number of fixed timesteps, optionally applying an action for each step, and return the resulting observation and terminal flags. A simulator: the market serves it with a stand-in that needs no simulator install.","measures":["observation","reward","terminated","truncated","tick","episode","seed","info"],"adjusts":[],"actions":[{"name":"step","description":"Advance the simulated world by a bounded number of fixed timesteps, optionally applying an action for each step, and return the resulting observation and terminal flags."},{"name":"reset","description":"Reset the simulated world to a scenario start state and return the initial observation. When a seed is supplied the endpoint records it in the receipt; otherwise the endpoint's declared default seed applies."},{"name":"seed","description":"Set the seed used by the simulated world's random number generators for subsequent steps, without resetting the world. The accepted seed is echoed in the receipt."}],"tags":["vmas","multi-agent","reinforcement-learning","simulation","gymnasium","balance"],"backends":["fake"],"served_backend":"fake","evidence":"contract_checked","upstream":{"repo_url":"https://github.com/proroklab/vectorizedmultiagentsimulator","commit":"9658bc56e886f96e4b62033e5df009eccb92122b","license":"GPL-3.0"},"stars":620,"install":{"openai4s":"openai4s lab add robots/proroklab__vectorizedmultiagentsimulator","mhs":"mhs serve robots/proroklab__vectorizedmultiagentsimulator --port 7400","mcp":"mhs serve robots/proroklab__vectorizedmultiagentsimulator --mcp"}},
{"id":"robots/psvl__doorgym","name":"DoorGym BLUE door opening (blue-doorenv-v1)","device_id":"mhs://localhost/doorgym-blue-v1","track":"robots","category":"Simulation","topic":"robot arm manipulation","kind":"world.sim","vendor":"PSVL","model":"DoorGym DoorEnvBlueV1","mode":"simulated","risk":"R0","family":"gymnasium","role":"sim-env","intro":"DoorGym BLUE door opening (blue-doorenv-v1), adapted from psvl/doorgym. It reads `observation`, `reward`, `terminated`, `truncated` and 4 more; runs `step`, `reset` and `seed`. `step`: advance the simulated world by a bounded number of fixed timesteps, optionally applying an action for each step, and return the resulting observation and terminal flags. A simulator: the market serves it with a stand-in that needs no simulator install.","measures":["observation","reward","terminated","truncated","tick","episode","seed","info"],"adjusts":[],"actions":[{"name":"step","description":"Advance the simulated world by a bounded number of fixed timesteps, optionally applying an action for each step, and return the resulting observation and terminal flags."},{"name":"reset","description":"Reset the simulated world to a scenario start state and return the initial observation. When a seed is supplied the endpoint records it in the receipt; otherwise the endpoint's declared default seed applies."},{"name":"seed","description":"Set the seed used by the simulated world's random number generators for subsequent steps, without resetting the world. The accepted seed is echoed in the receipt."}],"tags":["doorgym","door-opening","mujoco","gym","reinforcement-learning","simulation","robot-arm","blue"],"backends":["fake"],"served_backend":"fake","evidence":"contract_checked","upstream":{"repo_url":"https://github.com/psvl/doorgym","commit":"903493a6bd518bed5452c683c3857f1bfc5a209d","license":"BSD-3-Clause"},"stars":123,"install":{"openai4s":"openai4s lab add robots/psvl__doorgym","mhs":"mhs serve robots/psvl__doorgym --port 7400","mcp":"mhs serve robots/psvl__doorgym --mcp"}},
{"id":"robots/pufferai__pokegym","name":"PokeGym Pokemon Red (Gymnasium environment)","device_id":"mhs://localhost/pokegym","track":"robots","category":"Simulation","topic":null,"kind":"world.sim","vendor":"PufferAI","model":"PokeGym Pokemon Red","mode":"simulated","risk":"R0","family":"gymnasium","role":"sim-env","intro":"PokeGym Pokemon Red (Gymnasium environment), adapted from pufferai/pokegym. It reads `observation`, `reward`, `terminated`, `truncated` and 4 more; runs `step`, `reset` and `seed`. `step`: advance the simulated world by a bounded number of fixed timesteps, optionally applying an action for each step, and return the resulting observation and terminal flags. A simulator: the market serves it with a stand-in that needs no simulator install.","measures":["observation","reward","terminated","truncated","tick","episode","seed","info"],"adjusts":[],"actions":[{"name":"step","description":"Advance the simulated world by a bounded number of fixed timesteps, optionally applying an action for each step, and return the resulting observation and terminal flags."},{"name":"reset","description":"Reset the simulated world to a scenario start state and return the initial observation. When a seed is supplied the endpoint records it in the receipt; otherwise the endpoint's declared default seed applies."},{"name":"seed","description":"Set the seed used by the simulated world's random number generators for subsequent steps, without resetting the world. The accepted seed is echoed in the receipt."}],"tags":["pokemon-red","game-boy","pyboy","reinforcement-learning","simulation","gymnasium"],"backends":["fake"],"served_backend":"fake","evidence":"contract_checked","upstream":{"repo_url":"https://github.com/pufferai/pokegym","commit":"9050f7ae43e21b9337ac5ae407d37e6eb34ca03f","license":"MIT"},"stars":53,"install":{"openai4s":"openai4s lab add robots/pufferai__pokegym","mhs":"mhs serve robots/pufferai__pokegym --port 7400","mcp":"mhs serve robots/pufferai__pokegym --mcp"}},
{"id":"robots/qdeyna__ur10e_2f140_topic_based_ros2_control","name":"UR10e arm (fake hardware)","device_id":"mhs://localhost/ur10e_arm","track":"robots","category":"Robot arms and grippers","topic":null,"kind":"robot.arm","vendor":"qdeyna","model":"UR10e","mode":"simulated","risk":"R2","family":"ros","role":"sim-env","intro":"UR10e arm (fake hardware), adapted from qdeyna/ur10e_2f140_topic_based_ros2_control. It reads `joint_positions`, `joint_velocities` and `read_joint_state`; runs `follow_arm_trajectory` and `activate_trajectory_controller`. `follow_arm_trajectory`: send FollowJointTrajectory points on the fake-hardware scaled controller; return the controller error_code and error_string. A simulator: the market serves it with a stand-in that needs no simulator install.","measures":["joint_positions","joint_velocities","read_joint_state"],"adjusts":[],"actions":[{"name":"follow_arm_trajectory","description":"Send FollowJointTrajectory points on the fake-hardware scaled controller; return the controller error_code and error_string"},{"name":"activate_trajectory_controller","description":"The declared re-enable after a safety reset: switch scaled_joint_trajectory_controller on again through /controller_manager/switch_controller (STRICT), so the trajectory the e-stop dropped is not resumed. On activation the controller holds the state it starts from. With this deployment's position-only command interface and position and velocity state interfaces, that is the measured position. Reset itself does not activate the controller"}],"tags":["ros","ros2","fake-hardware","robot-arm","trajectory","joint-state","ur10e"],"backends":["fake"],"served_backend":"fake","evidence":"contract_checked","upstream":{"repo_url":"https://github.com/qdeyna/ur10e_2f140_topic_based_ros2_control","commit":"7db5397edae2795c8366d1ac1581f277124bde98","license":"NOASSERTION"},"stars":0,"install":{"openai4s":"openai4s lab add robots/qdeyna__ur10e_2f140_topic_based_ros2_control","mhs":"mhs serve robots/qdeyna__ur10e_2f140_topic_based_ros2_control --port 7400","mcp":"mhs serve robots/qdeyna__ur10e_2f140_topic_based_ros2_control --mcp"}},
{"id":"robots/qgallouedec__panda-gym","name":"panda-gym PandaReach-v3 (PyBullet)","device_id":"mhs://localhost/panda-reach","track":"robots","category":"Simulation","topic":null,"kind":"world.sim","vendor":"Quentin Gallouedec","model":"PandaReach-v3","mode":"simulated","risk":"R0","family":"gymnasium","role":"sim-env","intro":"panda-gym PandaReach-v3 (PyBullet), adapted from qgallouedec/panda-gym. It reads `observation`, `reward`, `terminated`, `truncated` and 4 more; runs `step`, `reset` and `seed`. `step`: advance the simulated world by a bounded number of fixed timesteps, optionally applying an action for each step, and return the resulting observation and terminal flags. A simulator: the market serves it with a stand-in that needs no simulator install.","measures":["observation","reward","terminated","truncated","tick","episode","seed","info"],"adjusts":[],"actions":[{"name":"step","description":"Advance the simulated world by a bounded number of fixed timesteps, optionally applying an action for each step, and return the resulting observation and terminal flags."},{"name":"reset","description":"Reset the simulated world to a scenario start state and return the initial observation. When a seed is supplied the endpoint records it in the receipt; otherwise the endpoint's declared default seed applies."},{"name":"seed","description":"Set the seed used by the simulated world's random number generators for subsequent steps, without resetting the world. The accepted seed is echoed in the receipt."}],"tags":["panda","franka","reach","pybullet","reinforcement-learning","simulation","gymnasium"],"backends":["fake"],"served_backend":"fake","evidence":"contract_checked","upstream":{"repo_url":"https://github.com/qgallouedec/panda-gym","commit":"10c4d8adaab07d8a29b2f8dc0aa85f8edd8532ae","license":"MIT"},"stars":770,"install":{"openai4s":"openai4s lab add robots/qgallouedec__panda-gym","mhs":"mhs serve robots/qgallouedec__panda-gym --port 7400","mcp":"mhs serve robots/qgallouedec__panda-gym --mcp"}},
{"id":"robots/qiangwang-academic__ur5e_robot_gym_env_real_and_sim","name":"CoppeliaSim UR5 reaching environment v3 (legacy Gym)","device_id":"mhs://localhost/ur5e-reaching-v3","track":"robots","category":"Simulation","topic":"robot arm manipulation","kind":"world.sim","vendor":"Qiang Wang","model":"CoppeliaSim_UR5_gym_v3","mode":"simulated","risk":"R0","family":"gymnasium","role":"sim-env","intro":"CoppeliaSim UR5 reaching environment v3 (legacy Gym), adapted from qiangwang-academic/ur5e_robot_gym_env_real_and_sim. It reads `observation`, `reward`, `terminated`, `truncated` and 4 more; runs `step`, `reset` and `seed`. `step`: advance the simulated world by a bounded number of fixed timesteps, optionally applying an action for each step, and return the resulting observation and terminal flags. A simulator: the market serves it with a stand-in that needs no simulator install.","measures":["observation","reward","terminated","truncated","tick","episode","seed","info"],"adjusts":[],"actions":[{"name":"step","description":"Advance the simulated world by a bounded number of fixed timesteps, optionally applying an action for each step, and return the resulting observation and terminal flags."},{"name":"reset","description":"Reset the simulated world to a scenario start state and return the initial observation. When a seed is supplied the endpoint records it in the receipt; otherwise the endpoint's declared default seed applies."},{"name":"seed","description":"Set the seed used by the simulated world's random number generators for subsequent steps, without resetting the world. The accepted seed is echoed in the receipt."}],"tags":["ur5","coppeliasim","gym","reaching","robot-arm","simulation"],"backends":["fake"],"served_backend":"fake","evidence":"contract_checked","upstream":{"repo_url":"https://github.com/qiangwang-academic/ur5e_robot_gym_env_real_and_sim","commit":"513acb7e235ab940fd03c3038208678e285690f3","license":"MIT"},"stars":15,"install":{"openai4s":"openai4s lab add robots/qiangwang-academic__ur5e_robot_gym_env_real_and_sim","mhs":"mhs serve robots/qiangwang-academic__ur5e_robot_gym_env_real_and_sim --port 7400","mcp":"mhs serve robots/qiangwang-academic__ur5e_robot_gym_env_real_and_sim --mcp"}},
{"id":"robots/qlan3__gym-games","name":"gym-games NChain-v1 (exploration chain)","device_id":"mhs://localhost/nchain","track":"robots","category":"Simulation","topic":null,"kind":"world.sim","vendor":"qlan3","model":"NChain-v1","mode":"simulated","risk":"R0","family":"gymnasium","role":"sim-env","intro":"gym-games NChain-v1 (exploration chain), adapted from qlan3/gym-games. It reads `observation`, `reward`, `terminated`, `truncated` and 4 more; runs `step`, `reset` and `seed`. `step`: advance the simulated world by a bounded number of fixed timesteps, optionally applying an action for each step, and return the resulting observation and terminal flags. A simulator: the market serves it with a stand-in that needs no simulator install.","measures":["observation","reward","terminated","truncated","tick","episode","seed","info"],"adjusts":[],"actions":[{"name":"step","description":"Advance the simulated world by a bounded number of fixed timesteps, optionally applying an action for each step, and return the resulting observation and terminal flags."},{"name":"reset","description":"Reset the simulated world to a scenario start state and return the initial observation. When a seed is supplied the endpoint records it in the receipt; otherwise the endpoint's declared default seed applies."},{"name":"seed","description":"Set the seed used by the simulated world's random number generators for subsequent steps, without resetting the world. The accepted seed is echoed in the receipt."}],"tags":["nchain","exploration","reinforcement-learning","simulation","gymnasium"],"backends":["fake"],"served_backend":"fake","evidence":"contract_checked","upstream":{"repo_url":"https://github.com/qlan3/gym-games","commit":"0220815982456a20f02887b20a7d9a5fbeeedd55","license":"MIT"},"stars":92,"install":{"openai4s":"openai4s lab add robots/qlan3__gym-games","mhs":"mhs serve robots/qlan3__gym-games --port 7400","mcp":"mhs serve robots/qlan3__gym-games --mcp"}},
{"id":"robots/quincy-u__ego_humanoid_manipulation_benchmark","name":"EgoVLA Humanoid-Base-v0 (Isaac Lab benchmark)","device_id":"mhs://localhost/humanoid-base","track":"robots","category":"Simulation","topic":"humanoid robots","kind":"world.sim","vendor":"quincy-u","model":"Humanoid-Base-v0","mode":"simulated","risk":"R0","family":"gymnasium","role":"sim-env","intro":"EgoVLA Humanoid-Base-v0 (Isaac Lab benchmark), adapted from quincy-u/ego_humanoid_manipulation_benchmark. It reads `observation`, `reward`, `terminated`, `truncated` and 4 more; runs `step`, `reset` and `seed`. `step`: advance the simulated world by a bounded number of fixed timesteps, optionally applying an action for each step, and return the resulting observation and terminal flags. A simulator: the market serves it with a stand-in that needs no simulator install.","measures":["observation","reward","terminated","truncated","tick","episode","seed","info"],"adjusts":[],"actions":[{"name":"step","description":"Advance the simulated world by a bounded number of fixed timesteps, optionally applying an action for each step, and return the resulting observation and terminal flags."},{"name":"reset","description":"Reset the simulated world to a scenario start state and return the initial observation. When a seed is supplied the endpoint records it in the receipt; otherwise the endpoint's declared default seed applies."},{"name":"seed","description":"Set the seed used by the simulated world's random number generators for subsequent steps, without resetting the world. The accepted seed is echoed in the receipt."}],"tags":["humanoid","manipulation","isaac-lab","isaac-sim","reinforcement-learning","simulation","gymnasium"],"backends":["fake"],"served_backend":"fake","evidence":"contract_checked","upstream":{"repo_url":"https://github.com/quincy-u/ego_humanoid_manipulation_benchmark","commit":"4489a673153d40f0dcba84c9210c426edfc62812","license":"MIT"},"stars":91,"install":{"openai4s":"openai4s lab add robots/quincy-u__ego_humanoid_manipulation_benchmark","mhs":"mhs serve robots/quincy-u__ego_humanoid_manipulation_benchmark --port 7400","mcp":"mhs serve robots/quincy-u__ego_humanoid_manipulation_benchmark --mcp"}},
{"id":"robots/realsenseai__realsense-ros","name":"RealSense ROS 2 camera","device_id":"mhs://localhost/realsense","track":"robots","category":"Sensors and cameras","topic":null,"kind":"sensor.camera","vendor":"RealSense","model":null,"mode":"hardware","risk":"R0","family":"ros","role":"device-driver","intro":"RealSense ROS 2 camera, adapted from realsenseai/realsense-ros. It reads `frame_id`, `width`, `height`, `device_name` and 9 more; runs `capture_image` and `capture_point_cloud`. `capture_image`: capture a single image from a named camera with a declared resolution and exposure and return an image artifact reference. A hardware driver: the market serves its fake backend, so no instrument is needed.","measures":["frame_id","width","height","device_name","serial_number","firmware_version","read_camera_info","read_device_info","read_frame_metadata","read_color_camera_info","read_depth_camera_info","read_color_metadata","read_depth_metadata"],"adjusts":[],"actions":[{"name":"capture_image","description":"Capture a single image from a named camera with a declared resolution and exposure and return an image artifact reference."},{"name":"capture_point_cloud","description":"Capture a depth point cloud over a declared range and return a point-cloud artifact reference with the point count and coordinate frame."}],"tags":["ros","ros2","camera","realsense","camera-info","metadata","device-info","image","depth","point-cloud"],"backends":["fake"],"served_backend":"fake","evidence":"contract_checked","upstream":{"repo_url":"https://github.com/realsenseai/realsense-ros","commit":"7a87097c499e3b0b69518d54a8e7a9ac1924e87c","license":"Apache-2.0"},"stars":3464,"install":{"openai4s":"openai4s lab add robots/realsenseai__realsense-ros","mhs":"mhs serve robots/realsenseai__realsense-ros --port 7400","mcp":"mhs serve robots/realsenseai__realsense-ros --mcp"}},
{"id":"robots/renforce-dynamics__genesislab","name":"GenesisLab Unitree G1 human velocity (flat)","device_id":"mhs://localhost/genesislab-g1-velocity","track":"robots","category":"Simulation","topic":null,"kind":"world.sim","vendor":"Renforce Dynamics","model":"Genesis-HVelocity-G1-v0","mode":"simulated","risk":"R0","family":"gymnasium","role":"sim-env","intro":"GenesisLab Unitree G1 human velocity (flat), adapted from renforce-dynamics/genesislab. It reads `observation`, `reward`, `terminated`, `truncated` and 4 more; runs `step`, `reset` and `seed`. `step`: advance the simulated world by a bounded number of fixed timesteps, optionally applying an action for each step, and return the resulting observation and terminal flags. A simulator: the market serves it with a stand-in that needs no simulator install.","measures":["observation","reward","terminated","truncated","tick","episode","seed","info"],"adjusts":[],"actions":[{"name":"step","description":"Advance the simulated world by a bounded number of fixed timesteps, optionally applying an action for each step, and return the resulting observation and terminal flags."},{"name":"reset","description":"Reset the simulated world to a scenario start state and return the initial observation. When a seed is supplied the endpoint records it in the receipt; otherwise the endpoint's declared default seed applies."},{"name":"seed","description":"Set the seed used by the simulated world's random number generators for subsequent steps, without resetting the world. The accepted seed is echoed in the receipt."}],"tags":["genesis","genesislab","gymnasium","humanoid","g1","reinforcement-learning","simulation"],"backends":["fake"],"served_backend":"fake","evidence":"contract_checked","upstream":{"repo_url":"https://github.com/renforce-dynamics/genesislab","commit":"0f2e4d96df9b24bcce66f8bdf7a1884a1363a5bb","license":"BSD-3-Clause"},"stars":122,"install":{"openai4s":"openai4s lab add robots/renforce-dynamics__genesislab","mhs":"mhs serve robots/renforce-dynamics__genesislab --port 7400","mcp":"mhs serve robots/renforce-dynamics__genesislab --mcp"}},
{"id":"robots/rgnc__enps_dwa","name":"ENPS-DWA social navigation simulator","device_id":"mhs://localhost/enps_dwa","track":"robots","category":"Simulation","topic":"mobile robots","kind":"world.sim","vendor":"RGNC","model":"ENPS_DWA","mode":"simulated","risk":"R0","family":"ros","role":"sim-env","intro":"ENPS-DWA social navigation simulator, adapted from rgnc/enps_dwa. It reads `read_odometry` and `read_laser_scan`. A simulator: the market serves it with a stand-in that needs no simulator install.","measures":["read_odometry","read_laser_scan"],"adjusts":[],"actions":[],"tags":["ros","ros1","simulation","enps-dwa","social-navigation","odometry","laser-scan"],"backends":["fake"],"served_backend":"fake","evidence":"contract_checked","upstream":{"repo_url":"https://github.com/rgnc/enps_dwa","commit":"ce876244db34e9684b0517253d5adf83bc04cc7c","license":"GPL-3.0"},"stars":12,"install":{"openai4s":"openai4s lab add robots/rgnc__enps_dwa","mhs":"mhs serve robots/rgnc__enps_dwa --port 7400","mcp":"mhs serve robots/rgnc__enps_dwa --mcp"}},
{"id":"robots/rickstaa__panda-gazebo","name":"Panda Gazebo arm","device_id":"mhs://localhost/panda_gazebo","track":"robots","category":"Robot arms and grippers","topic":null,"kind":"robot.arm","vendor":"Rick Staa","model":"Panda Emika Franka","mode":"simulated","risk":"R2","family":"ros","role":"sim-env","intro":"Panda Gazebo arm, adapted from rickstaa/panda-gazebo. It reads `joint_state`; runs `follow_joint_trajectory`, `set_gripper_width` and `lock_joints`. `follow_joint_trajectory`: forward arm waypoints through /panda_control_server/panda_arm/follow_joint_trajectory and return the controller terminal error_code. A simulator: the market serves it with a stand-in that needs no simulator install.","measures":["joint_state"],"adjusts":[],"actions":[{"name":"follow_joint_trajectory","description":"Forward arm waypoints through /panda_control_server/panda_arm/follow_joint_trajectory and return the controller terminal error_code"},{"name":"set_gripper_width","description":"Send a per-finger width and max effort through the wrapper gripper service; wait is false, so accepted means the goal was sent, not that the fingers reached it"},{"name":"lock_joints","description":"Freeze all Panda arm and finger joints at their present position through the world plugin's joint-limit update; the acknowledgement is not a velocity measurement, and no unlock is declared"}],"tags":["ros","ros1","gazebo","simulation","panda","franka","arm","trajectory","gripper"],"backends":["fake"],"served_backend":"fake","evidence":"contract_checked","upstream":{"repo_url":"https://github.com/rickstaa/panda-gazebo","commit":"113df8afa8de6c4342a99d3eb33b05084da644b9","license":"MIT"},"stars":20,"install":{"openai4s":"openai4s lab add robots/rickstaa__panda-gazebo","mhs":"mhs serve robots/rickstaa__panda-gazebo --port 7400","mcp":"mhs serve robots/rickstaa__panda-gazebo --mcp"}},
{"id":"robots/rickstaa__ros-gazebo-gym","name":"ROS Gazebo Gym PandaReach-v1 (Franka Panda reach, simulated)","device_id":"mhs://localhost/panda-reach","track":"robots","category":"Simulation","topic":"robot arm manipulation","kind":"world.sim","vendor":"Rick Staa","model":"PandaReach-v1","mode":"simulated","risk":"R2","family":"gymnasium","role":"sim-env","intro":"ROS Gazebo Gym PandaReach-v1 (Franka Panda reach, simulated), adapted from rickstaa/ros-gazebo-gym. It reads `observation`, `reward`, `terminated`, `truncated` and 4 more; runs `step`, `reset` and `seed`. `step`: advance the simulated world by a bounded number of fixed timesteps, optionally applying an action for each step, and return the resulting observation and terminal flags. A simulator: the market serves it with a stand-in that needs no simulator install.","measures":["observation","reward","terminated","truncated","tick","episode","seed","info"],"adjusts":[],"actions":[{"name":"step","description":"Advance the simulated world by a bounded number of fixed timesteps, optionally applying an action for each step, and return the resulting observation and terminal flags."},{"name":"reset","description":"Reset the simulated world to a scenario start state and return the initial observation. When a seed is supplied the endpoint records it in the receipt; otherwise the endpoint's declared default seed applies."},{"name":"seed","description":"Set the seed used by the simulated world's random number generators for subsequent steps, without resetting the world. The accepted seed is echoed in the receipt."}],"tags":["panda","franka","robot-arm","reach","gazebo","ros","reinforcement-learning","simulation","gymnasium"],"backends":["fake","sim"],"served_backend":"fake","evidence":"contract_checked","upstream":{"repo_url":"https://github.com/rickstaa/ros-gazebo-gym","commit":"157981585c26e7d252bc10e4deb527ca450775a0","license":"MIT"},"stars":52,"install":{"openai4s":"openai4s lab add robots/rickstaa__ros-gazebo-gym","mhs":"mhs serve robots/rickstaa__ros-gazebo-gym --port 7400","mcp":"mhs serve robots/rickstaa__ros-gazebo-gym --mcp"}},
{"id":"robots/rigbetellabs__tortoisebot","name":"TortoiseBot Ignition simulation environment","device_id":"mhs://localhost/tortoisebot","track":"robots","category":"Simulation","topic":"mobile robots","kind":"world.sim","vendor":"Rigbetella Labs","model":"TortoiseBot differential-drive robot in Ignition Fortress","mode":"simulated","risk":"R2","family":"ros","role":"sim-env","intro":"TortoiseBot Ignition simulation environment, adapted from rigbetellabs/tortoisebot. It reads `read_odometry`, `read_clock` and `read_scan`; runs `publish_velocity` and `resume_simulation`. `publish_velocity`: publish one geometry_msgs/Twist velocity command on /cmd_vel; the publication is transmission only and returns no motion or stop confirmation. A simulator: the market serves it with a stand-in that needs no simulator install.","measures":["read_odometry","read_clock","read_scan"],"adjusts":[],"actions":[{"name":"publish_velocity","description":"Publish one geometry_msgs/Twist velocity command on /cmd_vel; the publication is transmission only and returns no motion or stop confirmation"},{"name":"resume_simulation","description":"The declared re-enable after a safety reset: publish a zero Twist on /cmd_vel, then unpause the world with a WorldControl request (pause false) on /world/default/control. DiffDrive keeps the last Twist it received and applies it as soon as the world runs; the zero replaces it, but it is an unacknowledged publication, so a stored command can still act for a few world steps."}],"tags":["ros","ros2","ignition","gazebo","simulation","tortoisebot","cmd-vel","odometry","clock","scan"],"backends":["fake"],"served_backend":"fake","evidence":"contract_checked","upstream":{"repo_url":"https://github.com/rigbetellabs/tortoisebot","commit":"eae9f74a17213adb4dcc8552d65236d5549ebf62","license":"NOASSERTION"},"stars":191,"install":{"openai4s":"openai4s lab add robots/rigbetellabs__tortoisebot","mhs":"mhs serve robots/rigbetellabs__tortoisebot --port 7400","mcp":"mhs serve robots/rigbetellabs__tortoisebot --mcp"}},
{"id":"robots/riiswa__planning-multi-robot-gym","name":"Planning Multi-Robot Gym","device_id":"mhs://localhost/planning-multi-robot","track":"robots","category":"Simulation","topic":"multi-robot systems","kind":"world.sim","vendor":"riiswa","model":"PlanningMultiRobot-v0","mode":"simulated","risk":"R0","family":"gymnasium","role":"sim-env","intro":"Planning Multi-Robot Gym, adapted from riiswa/planning-multi-robot-gym. It reads `observation`, `reward`, `terminated`, `truncated` and 4 more; runs `step`, `reset` and `seed`. `step`: advance the simulated world by a bounded number of fixed timesteps, optionally applying an action for each step, and return the resulting observation and terminal flags. A simulator: the market serves it with a stand-in that needs no simulator install.","measures":["observation","reward","terminated","truncated","tick","episode","seed","info"],"adjusts":[],"actions":[{"name":"step","description":"Advance the simulated world by a bounded number of fixed timesteps, optionally applying an action for each step, and return the resulting observation and terminal flags."},{"name":"reset","description":"Reset the simulated world to a scenario start state and return the initial observation. When a seed is supplied the endpoint records it in the receipt; otherwise the endpoint's declared default seed applies."},{"name":"seed","description":"Set the seed used by the simulated world's random number generators for subsequent steps, without resetting the world. The accepted seed is echoed in the receipt."}],"tags":["multi-robot","planning","obstacle-avoidance","reinforcement-learning","simulation","gymnasium"],"backends":["fake"],"served_backend":"fake","evidence":"contract_checked","upstream":{"repo_url":"https://github.com/riiswa/planning-multi-robot-gym","commit":"dbb4eb5ab82e4143d1d567095eacae7bdb390b0b","license":"MIT"},"stars":30,"install":{"openai4s":"openai4s lab add robots/riiswa__planning-multi-robot-gym","mhs":"mhs serve robots/riiswa__planning-multi-robot-gym --port 7400","mcp":"mhs serve robots/riiswa__planning-multi-robot-gym --mcp"}},
{"id":"robots/ritalaezza__gym-agx","name":"Gym AGX BendWire-v0 (deformable linear object)","device_id":"mhs://localhost/bendwire","track":"robots","category":"Simulation","topic":"robot manipulation","kind":"world.sim","vendor":"Rita Laezza","model":"BendWire-v0","mode":"simulated","risk":"R0","family":"gymnasium","role":"sim-env","intro":"Gym AGX BendWire-v0 (deformable linear object), adapted from ritalaezza/gym-agx. It reads `observation`, `reward`, `terminated`, `truncated` and 4 more; runs `step`, `reset` and `seed`. `step`: advance the simulated world by a bounded number of fixed timesteps, optionally applying an action for each step, and return the resulting observation and terminal flags. A simulator: the market serves it with a stand-in that needs no simulator install.","measures":["observation","reward","terminated","truncated","tick","episode","seed","info"],"adjusts":[],"actions":[{"name":"step","description":"Advance the simulated world by a bounded number of fixed timesteps, optionally applying an action for each step, and return the resulting observation and terminal flags."},{"name":"reset","description":"Reset the simulated world to a scenario start state and return the initial observation. When a seed is supplied the endpoint records it in the receipt; otherwise the endpoint's declared default seed applies."},{"name":"seed","description":"Set the seed used by the simulated world's random number generators for subsequent steps, without resetting the world. The accepted seed is echoed in the receipt."}],"tags":["gym-agx","bend-wire","deformable-linear-object","reinforcement-learning","simulation","agx-dynamics"],"backends":["fake"],"served_backend":"fake","evidence":"contract_checked","upstream":{"repo_url":"https://github.com/ritalaezza/gym-agx","commit":"1773c4aa3ecc2e509623ff3d14163f9d5721f227","license":"MIT"},"stars":20,"install":{"openai4s":"openai4s lab add robots/ritalaezza__gym-agx","mhs":"mhs serve robots/ritalaezza__gym-agx --port 7400","mcp":"mhs serve robots/ritalaezza__gym-agx --mcp"}},
{"id":"robots/rlagent__factor-world","name":"Factor-World Sawyer nut assembly (Meta-World assembly-v2, simulated)","device_id":"mhs://localhost/factor-world-assembly","track":"robots","category":"Simulation","topic":"robot manipulation","kind":"world.sim","vendor":"rlagent","model":"factor-world assembly-v2","mode":"simulated","risk":"R0","family":"gymnasium","role":"sim-env","intro":"Factor-World Sawyer nut assembly (Meta-World assembly-v2, simulated), adapted from rlagent/factor-world. It reads `observation`, `reward`, `terminated`, `truncated` and 4 more; runs `step`, `reset` and `seed`. `step`: advance the simulated world by a bounded number of fixed timesteps, optionally applying an action for each step, and return the resulting observation and terminal flags. A simulator: the market serves it with a stand-in that needs no simulator install.","measures":["observation","reward","terminated","truncated","tick","episode","seed","info"],"adjusts":[],"actions":[{"name":"step","description":"Advance the simulated world by a bounded number of fixed timesteps, optionally applying an action for each step, and return the resulting observation and terminal flags."},{"name":"reset","description":"Reset the simulated world to a scenario start state and return the initial observation. When a seed is supplied the endpoint records it in the receipt; otherwise the endpoint's declared default seed applies."},{"name":"seed","description":"Set the seed used by the simulated world's random number generators for subsequent steps, without resetting the world. The accepted seed is echoed in the receipt."}],"tags":["factor-world","metaworld","assembly","sawyer","mujoco","manipulation","simulation","gym"],"backends":["fake"],"served_backend":"fake","evidence":"contract_checked","upstream":{"repo_url":"https://github.com/rlagent/factor-world","commit":"01df1f18f7e532afda0a38169356fa637d24e432","license":"Apache-2.0"},"stars":47,"install":{"openai4s":"openai4s lab add robots/rlagent__factor-world","mhs":"mhs serve robots/rlagent__factor-world --port 7400","mcp":"mhs serve robots/rlagent__factor-world --mcp"}},
{"id":"robots/rlxai__rbot","name":"rbot simulated 2-D LiDAR","device_id":"mhs://localhost/rbot_scan","track":"robots","category":"Sensors and cameras","topic":null,"kind":"sensor","vendor":"rlxai","model":"RPLIDAR A3 / Hokuyo UST-20LX 2-D LiDAR (Gazebo gpu_lidar)","mode":"simulated","risk":"R0","family":"ros","role":"sim-env","intro":"rbot simulated 2-D LiDAR, adapted from rlxai/rbot. It reads `read_scan`. A simulator: the market serves it with a stand-in that needs no simulator install.","measures":["read_scan"],"adjusts":[],"actions":[],"tags":["ros","ros2","gazebo","simulation","lidar","laser","scan","sensor"],"backends":["fake"],"served_backend":"fake","evidence":"contract_checked","upstream":{"repo_url":"https://github.com/rlxai/rbot","commit":"47af3fc3780bd582837f48ce3785d3d68834a1b7","license":"Apache-2.0"},"stars":0,"install":{"openai4s":"openai4s lab add robots/rlxai__rbot","mhs":"mhs serve robots/rlxai__rbot --port 7400","mcp":"mhs serve robots/rlxai__rbot --mcp"}},
{"id":"robots/robfiras__loco-mujoco","name":"LocoMuJoCo LocoMujoco (Atlas humanoid)","device_id":"mhs://localhost/loco-mujoco","track":"robots","category":"Simulation","topic":"legged robots","kind":"world.sim","vendor":"robfiras","model":"LocoMujoco/Atlas","mode":"simulated","risk":"R0","family":"gymnasium","role":"sim-env","intro":"LocoMuJoCo LocoMujoco (Atlas humanoid), adapted from robfiras/loco-mujoco. It reads `observation`, `reward`, `terminated`, `truncated` and 4 more; runs `step`, `reset` and `seed`. `step`: advance the simulated world by a bounded number of fixed timesteps, optionally applying an action for each step, and return the resulting observation and terminal flags. A simulator: the market serves it with a stand-in that needs no simulator install.","measures":["observation","reward","terminated","truncated","tick","episode","seed","info"],"adjusts":[],"actions":[{"name":"step","description":"Advance the simulated world by a bounded number of fixed timesteps, optionally applying an action for each step, and return the resulting observation and terminal flags."},{"name":"reset","description":"Reset the simulated world to a scenario start state and return the initial observation. When a seed is supplied the endpoint records it in the receipt; otherwise the endpoint's declared default seed applies."},{"name":"seed","description":"Set the seed used by the simulated world's random number generators for subsequent steps, without resetting the world. The accepted seed is echoed in the receipt."}],"tags":["loco-mujoco","humanoid","mujoco","reinforcement-learning","simulation","gymnasium"],"backends":["fake"],"served_backend":"fake","evidence":"contract_checked","upstream":{"repo_url":"https://github.com/robfiras/loco-mujoco","commit":"3921fedbca93876c0595c90c535b24ec08ff623d","license":"MIT"},"stars":1474,"install":{"openai4s":"openai4s lab add robots/robfiras__loco-mujoco","mhs":"mhs serve robots/robfiras__loco-mujoco --port 7400","mcp":"mhs serve robots/robfiras__loco-mujoco --mcp"}},
{"id":"robots/robin-shaun__xtdrone","name":"XTDrone typhoon_h480_0 position bridge","device_id":"mhs://localhost/xtdrone_typhoon_h480_0","track":"robots","category":"Mobile robots","topic":null,"kind":"robot.mobile_base","vendor":"XTDrone","model":"typhoon_h480 SITL","mode":"simulated","risk":"R2","family":"ros","role":"sim-env","intro":"XTDrone typhoon_h480_0 position bridge, adapted from robin-shaun/xtdrone. It reads `read_target` and `read_position`; runs `publish_position_setpoint`. `publish_position_setpoint`: publish one map-frame local position setpoint to MAVROS; the receipt reports the values handed to rosbridge and is transmission only, not arrival or a stop. A simulator: the market serves it with a stand-in that needs no simulator install.","measures":["read_target","read_position"],"adjusts":[],"actions":[{"name":"publish_position_setpoint","description":"Publish one map-frame local position setpoint to MAVROS; the receipt reports the values handed to rosbridge and is transmission only, not arrival or a stop"}],"tags":["ros","ros1","simulation","xtdrone","px4","mavros","typhoon","position","gazebo"],"backends":["fake"],"served_backend":"fake","evidence":"contract_checked","upstream":{"repo_url":"https://github.com/robin-shaun/xtdrone","commit":"671f3d45b22bfe4b7f2b23ae8d4251f3172781b3","license":"MIT"},"stars":1731,"install":{"openai4s":"openai4s lab add robots/robin-shaun__xtdrone","mhs":"mhs serve robots/robin-shaun__xtdrone --port 7400","mcp":"mhs serve robots/robin-shaun__xtdrone --mcp"}},
{"id":"robots/robo-eval__roboeval","name":"RoboEval LiftPotPosition (MuJoCo bimanual manipulation)","device_id":"mhs://localhost/roboeval-lift-pot-position","track":"robots","category":"Simulation","topic":"robot arm manipulation","kind":"world.sim","vendor":"RoboEval","model":"LiftPotPosition","mode":"simulated","risk":"R0","family":"python-object","role":"sim-env","intro":"RoboEval LiftPotPosition (MuJoCo bimanual manipulation), adapted from robo-eval/roboeval. It reads `observation` and `tick`; runs `reset_world` and `step`. `reset_world`: reset the simulated world to a scenario start state and return the initial observation. When a seed is supplied the endpoint records it in the receipt; otherwise the endpoint's declared default seed applies. A simulator: the market serves it with a stand-in that needs no simulator install.","measures":["observation","tick"],"adjusts":[],"actions":[{"name":"reset_world","description":"Reset the simulated world to a scenario start state and return the initial observation. When a seed is supplied the endpoint records it in the receipt; otherwise the endpoint's declared default seed applies."},{"name":"step","description":"Advance the simulated world by a bounded number of fixed timesteps, optionally applying an action for each step, and return the resulting observation and terminal flags."}],"tags":["roboeval","mujoco","manipulation","lift-pot","simulation","bimanual"],"backends":["fake"],"served_backend":"fake","evidence":"contract_checked","upstream":{"repo_url":"https://github.com/robo-eval/roboeval","commit":"7199e5c4851bbf8eaf185d486735cbcb233f608a","license":"Apache-2.0"},"stars":61,"install":{"openai4s":"openai4s lab add robots/robo-eval__roboeval","mhs":"mhs serve robots/robo-eval__roboeval --port 7400","mcp":"mhs serve robots/robo-eval__roboeval --mcp"}},
{"id":"robots/robocasa__robocasa","name":"RoboCasa PickPlaceCounterToCabinet (kitchen simulation)","device_id":"mhs://localhost/robocasa_pick_place","track":"robots","category":"Simulation","topic":"robot manipulation","kind":"world.sim","vendor":"RoboCasa","model":"RoboCasa365 1.0.1","mode":"simulated","risk":"R1","family":"gymnasium","role":"sim-env","intro":"RoboCasa PickPlaceCounterToCabinet (kitchen simulation), adapted from robocasa/robocasa. It reads `observation`, `reward`, `terminated`, `truncated` and 4 more; runs `step`, `reset_world` and `set_seed`. `step`: advance the simulated world by a bounded number of fixed timesteps, optionally applying an action for each step, and return the resulting observation and terminal flags. A simulator: the market serves it with a stand-in that needs no simulator install.","measures":["observation","reward","terminated","truncated","tick","episode","seed","info"],"adjusts":[],"actions":[{"name":"step","description":"Advance the simulated world by a bounded number of fixed timesteps, optionally applying an action for each step, and return the resulting observation and terminal flags."},{"name":"reset_world","description":"Reset the simulated world to a scenario start state and return the initial observation. When a seed is supplied the endpoint records it in the receipt; otherwise the endpoint's declared default seed applies."},{"name":"set_seed","description":"Set the seed used by the simulated world's random number generators for subsequent steps, without resetting the world. The accepted seed is echoed in the receipt."}],"tags":["robocasa","kitchen","manipulation","mobile-base","mujoco","robosuite","gymnasium","simulation","reinforcement-learning"],"backends":["fake"],"served_backend":"fake","evidence":"contract_checked","upstream":{"repo_url":"https://github.com/robocasa/robocasa","commit":"456174f62b89b8fca99eaaf33949c29fec9cfc2a","license":"MIT"},"stars":1788,"install":{"openai4s":"openai4s lab add robots/robocasa__robocasa","mhs":"mhs serve robots/robocasa__robocasa --port 7400","mcp":"mhs serve robots/robocasa__robocasa --mcp"}},
{"id":"robots/robocasa__robocasa-gr1-tabletop-tasks","name":"RoboCasa GR-1 Tabletop task (Gymnasium GrootRoboCasaEnv)","device_id":"mhs://localhost/robocasa-gr1-tabletop","track":"robots","category":"Simulation","topic":"humanoid robots","kind":"world.sim","vendor":"RoboCasa","model":"GR-1 Tabletop Tasks","mode":"simulated","risk":"R0","family":"gymnasium","role":"sim-env","intro":"RoboCasa GR-1 Tabletop task (Gymnasium GrootRoboCasaEnv), adapted from robocasa/robocasa-gr1-tabletop-tasks. It reads `observation`, `reward`, `terminated`, `truncated` and 4 more; runs `step`, `reset` and `seed`. `step`: advance the simulated world by a bounded number of fixed timesteps, optionally applying an action for each step, and return the resulting observation and terminal flags. A simulator: the market serves it with a stand-in that needs no simulator install.","measures":["observation","reward","terminated","truncated","tick","episode","seed","info"],"adjusts":[],"actions":[{"name":"step","description":"Advance the simulated world by a bounded number of fixed timesteps, optionally applying an action for each step, and return the resulting observation and terminal flags."},{"name":"reset","description":"Reset the simulated world to a scenario start state and return the initial observation. When a seed is supplied the endpoint records it in the receipt; otherwise the endpoint's declared default seed applies."},{"name":"seed","description":"Set the seed used by the simulated world's random number generators for subsequent steps, without resetting the world. The accepted seed is echoed in the receipt."}],"tags":["robocasa","gr1","humanoid","tabletop","manipulation","reinforcement-learning","simulation","gymnasium"],"backends":["fake"],"served_backend":"fake","evidence":"contract_checked","upstream":{"repo_url":"https://github.com/robocasa/robocasa-gr1-tabletop-tasks","commit":"4840e671596f93ca03651524b9f72ffb1aadfeff","license":"MIT"},"stars":165,"install":{"openai4s":"openai4s lab add robots/robocasa__robocasa-gr1-tabletop-tasks","mhs":"mhs serve robots/robocasa__robocasa-gr1-tabletop-tasks --port 7400","mcp":"mhs serve robots/robocasa__robocasa-gr1-tabletop-tasks --mcp"}},
{"id":"robots/robodojo-benchmark__robodojo","name":"RoboDojo task environment (dual X5)","device_id":"mhs://localhost/robodojo-dual-x5","track":"robots","category":"Simulation","topic":"robot arm manipulation","kind":"world.sim","vendor":"RoboDojo Contributors","model":"RoboDojo TaskEnv","mode":"simulated","risk":"R0","family":"gymnasium","role":"sim-env","intro":"RoboDojo task environment (dual X5), adapted from robodojo-benchmark/robodojo. It reads `observation`, `reward`, `terminated`, `truncated` and 4 more; runs `step`, `reset` and `seed`. `step`: advance the simulated world by a bounded number of fixed timesteps, optionally applying an action for each step, and return the resulting observation and terminal flags. A simulator: the market serves it with a stand-in that needs no simulator install.","measures":["observation","reward","terminated","truncated","tick","episode","seed","info"],"adjusts":[],"actions":[{"name":"step","description":"Advance the simulated world by a bounded number of fixed timesteps, optionally applying an action for each step, and return the resulting observation and terminal flags."},{"name":"reset","description":"Reset the simulated world to a scenario start state and return the initial observation. When a seed is supplied the endpoint records it in the receipt; otherwise the endpoint's declared default seed applies."},{"name":"seed","description":"Set the seed used by the simulated world's random number generators for subsequent steps, without resetting the world. The accepted seed is echoed in the receipt."}],"tags":["robodojo","manipulation","dual-arm","isaac-sim","reinforcement-learning","simulation","gymnasium"],"backends":["fake"],"served_backend":"fake","evidence":"contract_checked","upstream":{"repo_url":"https://github.com/robodojo-benchmark/robodojo","commit":"09bd5f5e762b949f5858ece31347ce62057b3a5e","license":"MIT"},"stars":697,"install":{"openai4s":"openai4s lab add robots/robodojo-benchmark__robodojo","mhs":"mhs serve robots/robodojo-benchmark__robodojo --port 7400","mcp":"mhs serve robots/robodojo-benchmark__robodojo --mcp"}},
{"id":"robots/robotcasters__b1env","name":"Unitree B1 Simulation Environment (B1Sim)","device_id":"mhs://localhost/unitree-b1","track":"robots","category":"Simulation","topic":"legged robots","kind":"world.sim","vendor":"RobotCasters","model":"Unitree B1","mode":"simulated","risk":"R0","family":"gymnasium","role":"sim-env","intro":"Unitree B1 Simulation Environment (B1Sim), adapted from robotcasters/b1env. It reads `observation`, `reward`, `terminated`, `truncated` and 4 more; runs `step`, `reset` and `seed`. `step`: advance the simulated world by a bounded number of fixed timesteps, optionally applying an action for each step, and return the resulting observation and terminal flags. A simulator: the market serves it with a stand-in that needs no simulator install.","measures":["observation","reward","terminated","truncated","tick","episode","seed","info"],"adjusts":[],"actions":[{"name":"step","description":"Advance the simulated world by a bounded number of fixed timesteps, optionally applying an action for each step, and return the resulting observation and terminal flags."},{"name":"reset","description":"Reset the simulated world to a scenario start state and return the initial observation. When a seed is supplied the endpoint records it in the receipt; otherwise the endpoint's declared default seed applies."},{"name":"seed","description":"Set the seed used by the simulated world's random number generators for subsequent steps, without resetting the world. The accepted seed is echoed in the receipt."}],"tags":["unitree","b1","quadruped","pybullet","reinforcement-learning","simulation","gymnasium"],"backends":["fake"],"served_backend":"fake","evidence":"contract_checked","upstream":{"repo_url":"https://github.com/robotcasters/b1env","commit":"cdf57676193c1bbe15960157aac059a291c0e89c","license":"MIT"},"stars":3,"install":{"openai4s":"openai4s lab add robots/robotcasters__b1env","mhs":"mhs serve robots/robotcasters__b1env --port 7400","mcp":"mhs serve robots/robotcasters__b1env --mcp"}},
{"id":"robots/robotcontrolstack__duobench","name":"DuoBench ball_maze (FR3 Duo bimanual manipulation)","device_id":"mhs://localhost/duobench-ball-maze","track":"robots","category":"Simulation","topic":"robot arm manipulation","kind":"world.sim","vendor":"RobotControlStack","model":"DuoBench ball_maze","mode":"simulated","risk":"R0","family":"gymnasium","role":"sim-env","intro":"DuoBench ball_maze (FR3 Duo bimanual manipulation), adapted from robotcontrolstack/duobench. It reads `observation`, `reward`, `terminated`, `truncated` and 4 more; runs `step`, `reset` and `seed`. `step`: advance the simulated world by a bounded number of fixed timesteps, optionally applying an action for each step, and return the resulting observation and terminal flags. A simulator: the market serves it with a stand-in that needs no simulator install.","measures":["observation","reward","terminated","truncated","tick","episode","seed","info"],"adjusts":[],"actions":[{"name":"step","description":"Advance the simulated world by a bounded number of fixed timesteps, optionally applying an action for each step, and return the resulting observation and terminal flags."},{"name":"reset","description":"Reset the simulated world to a scenario start state and return the initial observation. When a seed is supplied the endpoint records it in the receipt; otherwise the endpoint's declared default seed applies."},{"name":"seed","description":"Set the seed used by the simulated world's random number generators for subsequent steps, without resetting the world. The accepted seed is echoed in the receipt."}],"tags":["duobench","ball-maze","bimanual","franka-research-3","mujoco","reinforcement-learning","simulation","gymnasium"],"backends":["fake"],"served_backend":"fake","evidence":"contract_checked","upstream":{"repo_url":"https://github.com/robotcontrolstack/duobench","commit":"29e09f916d68539d454c93266c195d2abb8a8253","license":"Apache-2.0"},"stars":21,"install":{"openai4s":"openai4s lab add robots/robotcontrolstack__duobench","mhs":"mhs serve robots/robotcontrolstack__duobench --port 7400","mcp":"mhs serve robots/robotcontrolstack__duobench --mcp"}},
{"id":"robots/robotcontrolstack__robot-control-stack","name":"Robot Control Stack EmptyWorldFR3 (rcs/fr3)","device_id":"mhs://localhost/rcs-fr3","track":"robots","category":"Simulation","topic":"robot arm manipulation","kind":"world.sim","vendor":"Robot Control Stack","model":"EmptyWorldFR3 (rcs/fr3)","mode":"simulated","risk":"R0","family":"gymnasium","role":"sim-env","intro":"Robot Control Stack EmptyWorldFR3 (rcs/fr3), adapted from robotcontrolstack/robot-control-stack. It reads `observation`, `reward`, `terminated`, `truncated` and 4 more; runs `step`, `reset` and `seed`. `step`: advance the simulated world by a bounded number of fixed timesteps, optionally applying an action for each step, and return the resulting observation and terminal flags. A simulator: the market serves it with a stand-in that needs no simulator install.","measures":["observation","reward","terminated","truncated","tick","episode","seed","info"],"adjusts":[],"actions":[{"name":"step","description":"Advance the simulated world by a bounded number of fixed timesteps, optionally applying an action for each step, and return the resulting observation and terminal flags."},{"name":"reset","description":"Reset the simulated world to a scenario start state and return the initial observation. When a seed is supplied the endpoint records it in the receipt; otherwise the endpoint's declared default seed applies."},{"name":"seed","description":"Set the seed used by the simulated world's random number generators for subsequent steps, without resetting the world. The accepted seed is echoed in the receipt."}],"tags":["robot-arm","fr3","franka","mujoco","reinforcement-learning","simulation","gymnasium"],"backends":["fake"],"served_backend":"fake","evidence":"contract_checked","upstream":{"repo_url":"https://github.com/robotcontrolstack/robot-control-stack","commit":"afb3795ae9f49f9992bb61518eef6e7277b9011f","license":"AGPL-3.0"},"stars":164,"install":{"openai4s":"openai4s lab add robots/robotcontrolstack__robot-control-stack","mhs":"mhs serve robots/robotcontrolstack__robot-control-stack --port 7400","mcp":"mhs serve robots/robotcontrolstack__robot-control-stack --mcp"}},
{"id":"robots/roboterax__humanoid-gym","name":"RobotEra XBot-L humanoid (MuJoCo model)","device_id":"mhs://localhost/xbot-l","track":"robots","category":"Simulation","topic":"humanoid robots","kind":"world.sim","vendor":"Beijing RobotEra Technology","model":"XBot-L","mode":"simulated","risk":"R0","family":"mujoco","role":"sim-env","intro":"RobotEra XBot-L humanoid (MuJoCo model), adapted from roboterax/humanoid-gym. It reads `time_ms`, `qpos`, `qvel`, `ctrl` and 4 more; runs `step` and `reset`. `step`: advance the simulated world by a bounded number of fixed timesteps, optionally applying an action for each step, and return the resulting observation and terminal flags. A simulator: the market serves it with a stand-in that needs no simulator install.","measures":["time_ms","qpos","qvel","ctrl","tick","timestep_ms","seed","native_checkpoint"],"adjusts":[],"actions":[{"name":"step","description":"Advance the simulated world by a bounded number of fixed timesteps, optionally applying an action for each step, and return the resulting observation and terminal flags."},{"name":"reset","description":"Reset the simulated world to a scenario start state and return the initial observation. When a seed is supplied the endpoint records it in the receipt; otherwise the endpoint's declared default seed applies."}],"tags":["humanoid","xbot-l","legged","mujoco","sim2sim","simulation","robot"],"backends":["fake"],"served_backend":"fake","evidence":"contract_checked","upstream":{"repo_url":"https://github.com/roboterax/humanoid-gym","commit":"ae46e201c85a2b17e7f2cea59a441dae7ea88a8f","license":"BSD-3-Clause"},"stars":0,"install":{"openai4s":"openai4s lab add robots/roboterax__humanoid-gym","mhs":"mhs serve robots/roboterax__humanoid-gym --port 7400","mcp":"mhs serve robots/roboterax__humanoid-gym --mcp"}},
{"id":"robots/robotis-git__robotis_mujoco_menagerie","name":"ROBOTIS AI Worker FFW-BG2 (MuJoCo model)","device_id":"mhs://localhost/robotis-ffw-bg2","track":"robots","category":"Simulation","topic":null,"kind":"world.sim","vendor":"ROBOTIS","model":"FFW-BG2","mode":"simulated","risk":"R0","family":"mujoco","role":"twin-candidate","intro":"ROBOTIS AI Worker FFW-BG2 (MuJoCo model), adapted from robotis-git/robotis_mujoco_menagerie. It reads `time_ms`, `qpos`, `qvel`, `ctrl` and 4 more; runs `step` and `reset`. `step`: advance the simulated world by a bounded number of fixed timesteps, optionally applying an action for each step, and return the resulting observation and terminal flags. A simulator: the market serves it with a stand-in that needs no simulator install.","measures":["time_ms","qpos","qvel","ctrl","tick","timestep_ms","seed","native_checkpoint"],"adjusts":[],"actions":[{"name":"step","description":"Advance the simulated world by a bounded number of fixed timesteps, optionally applying an action for each step, and return the resulting observation and terminal flags."},{"name":"reset","description":"Reset the simulated world to a scenario start state and return the initial observation. When a seed is supplied the endpoint records it in the receipt; otherwise the endpoint's declared default seed applies."}],"tags":["robotis","ffw-bg2","ai-worker","dual-arm","mobile-manipulator","mujoco","simulation","robot"],"backends":["fake"],"served_backend":"fake","evidence":"contract_checked","upstream":{"repo_url":"https://github.com/robotis-git/robotis_mujoco_menagerie","commit":"d8344c0dbe7a00208d0301111523dde65efc174a","license":"Apache-2.0"},"stars":75,"install":{"openai4s":"openai4s lab add robots/robotis-git__robotis_mujoco_menagerie","mhs":"mhs serve robots/robotis-git__robotis_mujoco_menagerie --port 7400","mcp":"mhs serve robots/robotis-git__robotis_mujoco_menagerie --mcp"}},
{"id":"robots/robotis-git__turtlebot3","name":"ROBOTIS TurtleBot3 mobile base","device_id":"mhs://localhost/turtlebot3","track":"robots","category":"Mobile robots","topic":null,"kind":"robot.mobile_base","vendor":"ROBOTIS","model":"TurtleBot3 Burger / Waffle / Waffle Pi","mode":"hardware","risk":"R2","family":"ros","role":"device-driver","intro":"ROBOTIS TurtleBot3 mobile base, adapted from robotis-git/turtlebot3. It reads `battery_voltage`, `battery_percentage`, `battery_present`, `odom_pose` and 3 more; runs `publish_velocity`, `set_motor_power` and `disable_torque`. `publish_velocity`: publish one geometry_msgs/TwistStamped velocity setpoint to the upstream cmd_vel topic; the receipt confirms only that rosbridge accepted the publication, not motion, arrival or stopping. A hardware driver: the market serves its fake backend, so no instrument is needed.","measures":["battery_voltage","battery_percentage","battery_present","odom_pose","odom_twist","wheel_velocity","torque_enabled"],"adjusts":[],"actions":[{"name":"publish_velocity","description":"Publish one geometry_msgs/TwistStamped velocity setpoint to the upstream cmd_vel topic; the receipt confirms only that rosbridge accepted the publication, not motion, arrival or stopping"},{"name":"set_motor_power","description":"Call the upstream std_srvs/SetBool motor_power service to enable or disable motor torque; enabling does not clear a stale cmd_vel setpoint published by another ROS client"},{"name":"disable_torque","description":"Fixed, input-free std_srvs/SetBool(false) request to the upstream motor_power service; it disables motor torque and reports only the upstream write acknowledgement"}],"tags":["ros","ros2","robotis","turtlebot3","mobile-base","cmd-vel","motor-power"],"backends":["fake"],"served_backend":"fake","evidence":"contract_checked","upstream":{"repo_url":"https://github.com/robotis-git/turtlebot3","commit":"fc817ce3073af1d6032397c64504134882af5e9a","license":"Apache-2.0"},"stars":2068,"install":{"openai4s":"openai4s lab add robots/robotis-git__turtlebot3","mhs":"mhs serve robots/robotis-git__turtlebot3 --port 7400","mcp":"mhs serve robots/robotis-git__turtlebot3 --mcp"}},
{"id":"robots/robotis-git__turtlebot3_simulations","name":"ROBOTIS TurtleBot3 fake simulation node","device_id":"mhs://localhost/turtlebot3-sim","track":"robots","category":"Simulation","topic":null,"kind":"world.sim","vendor":"ROBOTIS","model":"turtlebot3_fake_node (ROS 2)","mode":"simulated","risk":"R2","family":"ros","role":"twin-candidate","intro":"ROBOTIS TurtleBot3 fake simulation node, adapted from robotis-git/turtlebot3_simulations. It reads `odom_pose`, `odom_twist`, `wheel_velocity`, `read_odometry` and 1 more; runs `publish_velocity`. `publish_velocity`: publish one geometry_msgs/Twist to the upstream /cmd_vel subscription; the fake node consumes only linear.x and angular.z. The receipt confirms only that rosbridge accepted the publication, not motion, arrival or stopping. /cmd_vel is also a physical TurtleBot3 command topic, so this action is R2. A simulator: the market serves it with a stand-in that needs no simulator install.","measures":["odom_pose","odom_twist","wheel_velocity","read_odometry","read_joint_states"],"adjusts":[],"actions":[{"name":"publish_velocity","description":"Publish one geometry_msgs/Twist to the upstream /cmd_vel subscription; the fake node consumes only linear.x and angular.z. The receipt confirms only that rosbridge accepted the publication, not motion, arrival or stopping. /cmd_vel is also a physical TurtleBot3 command topic, so this action is R2."}],"tags":["ros","ros2","simulation","turtlebot3","fake-node","cmd-vel","odometry","joint-states"],"backends":["fake"],"served_backend":"fake","evidence":"contract_checked","upstream":{"repo_url":"https://github.com/robotis-git/turtlebot3_simulations","commit":"9be186fb03d84ed4f293e5c0db71d8c05bbc91f3","license":"Apache-2.0"},"stars":533,"install":{"openai4s":"openai4s lab add robots/robotis-git__turtlebot3_simulations","mhs":"mhs serve robots/robotis-git__turtlebot3_simulations --port 7400","mcp":"mhs serve robots/robotis-git__turtlebot3_simulations --mcp"}},
{"id":"robots/robotology-legacy__gym-ignition","name":"gym-ignition CartPoleDiscreteBalancing-Gazebo-v0","device_id":"mhs://localhost/cartpole-discrete-gazebo","track":"robots","category":"Simulation","topic":null,"kind":"world.sim","vendor":"robotology-legacy","model":"CartPoleDiscreteBalancing-Gazebo-v0","mode":"simulated","risk":"R0","family":"gymnasium","role":"sim-env","intro":"gym-ignition CartPoleDiscreteBalancing-Gazebo-v0, adapted from robotology-legacy/gym-ignition. It reads `observation`, `reward`, `terminated`, `truncated` and 4 more; runs `step`, `reset` and `seed`. `step`: advance the simulated world by a bounded number of fixed timesteps, optionally applying an action for each step, and return the resulting observation and terminal flags. A simulator: the market serves it with a stand-in that needs no simulator install.","measures":["observation","reward","terminated","truncated","tick","episode","seed","info"],"adjusts":[],"actions":[{"name":"step","description":"Advance the simulated world by a bounded number of fixed timesteps, optionally applying an action for each step, and return the resulting observation and terminal flags."},{"name":"reset","description":"Reset the simulated world to a scenario start state and return the initial observation. When a seed is supplied the endpoint records it in the receipt; otherwise the endpoint's declared default seed applies."},{"name":"seed","description":"Set the seed used by the simulated world's random number generators for subsequent steps, without resetting the world. The accepted seed is echoed in the receipt."}],"tags":["cartpole","gazebo","ignition-gazebo","reinforcement-learning","simulation","gym"],"backends":["fake"],"served_backend":"fake","evidence":"contract_checked","upstream":{"repo_url":"https://github.com/robotology-legacy/gym-ignition","commit":"4bc8e0465eed68911434485ba0b9c0a6740d516e","license":"LGPL-3.0"},"stars":252,"install":{"openai4s":"openai4s lab add robots/robotology-legacy__gym-ignition","mhs":"mhs serve robots/robotology-legacy__gym-ignition --port 7400","mcp":"mhs serve robots/robotology-legacy__gym-ignition --mcp"}},
{"id":"robots/rodriguesrenato__warehouse_robot_simulation","name":"Warehouse robot simulation (ROS 1 / Gazebo)","device_id":"mhs://localhost/warehouse-robot-simulation","track":"robots","category":"Simulation","topic":"mobile robots","kind":"world.sim","vendor":"rodriguesrenato","model":"WarehouseSimulation with one amr robot","mode":"simulated","risk":"R2","family":"ros","role":"sim-env","intro":"Warehouse robot simulation (ROS 1 / Gazebo), adapted from rodriguesrenato/warehouse_robot_simulation. It runs `submit_order`. `submit_order`: publish one std_msgs/String order on /warehouse/order/add. The receipt reports the string handed to rosbridge and is transmission evidence only: the upstream callback has no acknowledgement, and this action does not report queueing, robot motion, arrival or stopping. A simulator: the market serves it with a stand-in that needs no simulator install.","measures":[],"adjusts":[],"actions":[{"name":"submit_order","description":"Publish one std_msgs/String order on /warehouse/order/add. The receipt reports the string handed to rosbridge and is transmission evidence only: the upstream callback has no acknowledgement, and this action does not report queueing, robot motion, arrival or stopping."}],"tags":["ros","ros1","simulation","gazebo","warehouse","order","mobile-base"],"backends":["fake"],"served_backend":"fake","evidence":"contract_checked","upstream":{"repo_url":"https://github.com/rodriguesrenato/warehouse_robot_simulation","commit":"c8fe89a8501bfbcd97ffb0a0a4bef26e1abffc75","license":"MIT"},"stars":38,"install":{"openai4s":"openai4s lab add robots/rodriguesrenato__warehouse_robot_simulation","mhs":"mhs serve robots/rodriguesrenato__warehouse_robot_simulation --port 7400","mcp":"mhs serve robots/rodriguesrenato__warehouse_robot_simulation --mcp"}},
{"id":"robots/ros2__ros_astra_camera","name":"Orbbec Astra ROS 2 color camera","device_id":"mhs://localhost/astra_camera","track":"robots","category":"Sensors and cameras","topic":null,"kind":"sensor.camera","vendor":"Orbbec","model":null,"mode":"hardware","risk":"R0","family":"ros","role":"device-driver","intro":"Orbbec Astra ROS 2 color camera, adapted from ros2/ros_astra_camera. It runs `capture_image`. `capture_image`: capture a single image from a named camera with a declared resolution and exposure and return an image artifact reference. A hardware driver: the market serves its fake backend, so no instrument is needed.","measures":[],"adjusts":[],"actions":[{"name":"capture_image","description":"Capture a single image from a named camera with a declared resolution and exposure and return an image artifact reference."}],"tags":["ros","ros2","camera","image","rgb","astra","orbbec"],"backends":["fake"],"served_backend":"fake","evidence":"contract_checked","upstream":{"repo_url":"https://github.com/ros2/ros_astra_camera","commit":"ac20ab9eea9ff14d4b2dd841d580cf9b3c875110","license":"NOASSERTION"},"stars":0,"install":{"openai4s":"openai4s lab add robots/ros2__ros_astra_camera","mhs":"mhs serve robots/ros2__ros_astra_camera --port 7400","mcp":"mhs serve robots/ros2__ros_astra_camera --mcp"}},
{"id":"robots/rr-learning__causalworld","name":"rr-learning CausalWorld TriFinger benchmark (PyBullet)","device_id":"mhs://localhost/causalworld","track":"robots","category":"Simulation","topic":"robot arm manipulation","kind":"world.sim","vendor":"rr-learning","model":"CausalWorld","mode":"simulated","risk":"R0","family":"gymnasium","role":"sim-env","intro":"rr-learning CausalWorld TriFinger benchmark (PyBullet), adapted from rr-learning/causalworld. It reads `observation`, `reward`, `terminated`, `truncated` and 4 more; runs `step`, `reset` and `seed`. `step`: advance the simulated world by a bounded number of fixed timesteps, optionally applying an action for each step, and return the resulting observation and terminal flags. A simulator: the market serves it with a stand-in that needs no simulator install.","measures":["observation","reward","terminated","truncated","tick","episode","seed","info"],"adjusts":[],"actions":[{"name":"step","description":"Advance the simulated world by a bounded number of fixed timesteps, optionally applying an action for each step, and return the resulting observation and terminal flags."},{"name":"reset","description":"Reset the simulated world to a scenario start state and return the initial observation. When a seed is supplied the endpoint records it in the receipt; otherwise the endpoint's declared default seed applies."},{"name":"seed","description":"Set the seed used by the simulated world's random number generators for subsequent steps, without resetting the world. The accepted seed is echoed in the receipt."}],"tags":["causalworld","trifinger","robotic-manipulation","pybullet","reinforcement-learning","simulation","gym"],"backends":["fake"],"served_backend":"fake","evidence":"contract_checked","upstream":{"repo_url":"https://github.com/rr-learning/causalworld","commit":"1045277101a92c506db42704da28f6e7227d401b","license":"MIT"},"stars":248,"install":{"openai4s":"openai4s lab add robots/rr-learning__causalworld","mhs":"mhs serve robots/rr-learning__causalworld --port 7400","mcp":"mhs serve robots/rr-learning__causalworld --mcp"}},
{"id":"robots/rumaisaabdulhai__quad_sim","name":"quad_sim indoor quadcopter simulation","device_id":"mhs://localhost/quad_sim","track":"robots","category":"Simulation","topic":"UAVs","kind":"world.sim","vendor":"rumaisaabdulhai","model":"ROS 1 Gazebo quadcopter application with a results recorder","mode":"simulated","risk":"R1","family":"ros","role":"sim-env","intro":"quad_sim indoor quadcopter simulation, adapted from rumaisaabdulhai/quad_sim. It reads `read_ground_truth_pose` and `read_goal_status`. A simulator: the market serves it with a stand-in that needs no simulator install.","measures":["read_ground_truth_pose","read_goal_status"],"adjusts":[],"actions":[],"tags":["ros","ros1","simulation","gazebo","quadcopter","results","pose","move-base"],"backends":["fake"],"served_backend":"fake","evidence":"contract_checked","upstream":{"repo_url":"https://github.com/rumaisaabdulhai/quad_sim","commit":"01d02f6e2fad8060d6522b7bca01cb82aa038c2a","license":"MIT"},"stars":28,"install":{"openai4s":"openai4s lab add robots/rumaisaabdulhai__quad_sim","mhs":"mhs serve robots/rumaisaabdulhai__quad_sim --port 7400","mcp":"mhs serve robots/rumaisaabdulhai__quad_sim --mcp"}},
{"id":"robots/sail-research-lab__robust-gymnasium","name":"robust-gymnasium CartPole-v1 (classic control)","device_id":"mhs://localhost/robust-cartpole","track":"robots","category":"Simulation","topic":"robot arm manipulation","kind":"world.sim","vendor":"Safe RL Lab","model":"CartPole-v1","mode":"simulated","risk":"R0","family":"gymnasium","role":"sim-env","intro":"robust-gymnasium CartPole-v1 (classic control), adapted from sail-research-lab/robust-gymnasium. It reads `observation`, `reward`, `terminated`, `truncated` and 4 more; runs `step`, `reset` and `seed`. `step`: advance the simulated world by a bounded number of fixed timesteps, optionally applying an action for each step, and return the resulting observation and terminal flags. A simulator: the market serves it with a stand-in that needs no simulator install.","measures":["observation","reward","terminated","truncated","tick","episode","seed","info"],"adjusts":[],"actions":[{"name":"step","description":"Advance the simulated world by a bounded number of fixed timesteps, optionally applying an action for each step, and return the resulting observation and terminal flags."},{"name":"reset","description":"Reset the simulated world to a scenario start state and return the initial observation. When a seed is supplied the endpoint records it in the receipt; otherwise the endpoint's declared default seed applies."},{"name":"seed","description":"Set the seed used by the simulated world's random number generators for subsequent steps, without resetting the world. The accepted seed is echoed in the receipt."}],"tags":["cartpole","classic-control","robust-reinforcement-learning","simulation","gymnasium"],"backends":["fake"],"served_backend":"fake","evidence":"contract_checked","upstream":{"repo_url":"https://github.com/sail-research-lab/robust-gymnasium","commit":"af6de64d92793ef4c01b80e51e3f2bcd35f8066b","license":"MIT"},"stars":103,"install":{"openai4s":"openai4s lab add robots/sail-research-lab__robust-gymnasium","mhs":"mhs serve robots/sail-research-lab__robust-gymnasium --port 7400","mcp":"mhs serve robots/sail-research-lab__robust-gymnasium --mcp"}},
{"id":"robots/sallu-786__go2_isaac_ros2","name":"Unitree Go2 Isaac Lab flat-ground task","device_id":"mhs://localhost/go2-isaac","track":"robots","category":"Simulation","topic":"legged robots","kind":"world.sim","vendor":"sallu-786","model":"Unitree Go2 / Isaac-Velocity-Flat-Unitree-Go2-v0","mode":"simulated","risk":"R0","family":"gymnasium","role":"sim-env","intro":"Unitree Go2 Isaac Lab flat-ground task, adapted from sallu-786/go2_isaac_ros2. It reads `observation`, `reward`, `terminated`, `truncated` and 4 more; runs `step`, `reset` and `seed`. `step`: advance the simulated world by a bounded number of fixed timesteps, optionally applying an action for each step, and return the resulting observation and terminal flags. A simulator: the market serves it with a stand-in that needs no simulator install.","measures":["observation","reward","terminated","truncated","tick","episode","seed","info"],"adjusts":[],"actions":[{"name":"step","description":"Advance the simulated world by a bounded number of fixed timesteps, optionally applying an action for each step, and return the resulting observation and terminal flags."},{"name":"reset","description":"Reset the simulated world to a scenario start state and return the initial observation. When a seed is supplied the endpoint records it in the receipt; otherwise the endpoint's declared default seed applies."},{"name":"seed","description":"Set the seed used by the simulated world's random number generators for subsequent steps, without resetting the world. The accepted seed is echoed in the receipt."}],"tags":["isaac-sim","isaac-lab","unitree-go2","quadruped","reinforcement-learning","simulation","gymnasium"],"backends":["fake"],"served_backend":"fake","evidence":"contract_checked","upstream":{"repo_url":"https://github.com/sallu-786/go2_isaac_ros2","commit":"839097f1be8931086671c8cafb670aee97144221","license":"NOASSERTION"},"stars":37,"install":{"openai4s":"openai4s lab add robots/sallu-786__go2_isaac_ros2","mhs":"mhs serve robots/sallu-786__go2_isaac_ros2 --port 7400","mcp":"mhs serve robots/sallu-786__go2_isaac_ros2 --mcp"}},
{"id":"robots/sanan222__lecasa","name":"LeCasa SO101 arm (MuJoCo)","device_id":"mhs://localhost/lecasa-so101","track":"robots","category":"Simulation","topic":"robot arm manipulation","kind":"world.sim","vendor":"sanan222 (LeCasa)","model":"SO101 simplified","mode":"simulated","risk":"R0","family":"mujoco","role":"sim-env","intro":"LeCasa SO101 arm (MuJoCo), adapted from sanan222/lecasa. It reads `time_ms`, `qpos`, `qvel`, `ctrl` and 4 more; runs `step` and `reset`. `step`: advance the simulated world by a bounded number of fixed timesteps, optionally applying an action for each step, and return the resulting observation and terminal flags. A simulator: the market serves it with a stand-in that needs no simulator install.","measures":["time_ms","qpos","qvel","ctrl","tick","timestep_ms","seed","native_checkpoint"],"adjusts":[],"actions":[{"name":"step","description":"Advance the simulated world by a bounded number of fixed timesteps, optionally applying an action for each step, and return the resulting observation and terminal flags."},{"name":"reset","description":"Reset the simulated world to a scenario start state and return the initial observation. When a seed is supplied the endpoint records it in the receipt; otherwise the endpoint's declared default seed applies."}],"tags":["arm","lecasa","manipulator","mujoco","robot","robocasa","simulation","so101"],"backends":["fake"],"served_backend":"fake","evidence":"contract_checked","upstream":{"repo_url":"https://github.com/sanan222/lecasa","commit":"7dc0f63c0fc1519226262f0cc8cf48c6343043c0","license":"Apache-2.0"},"stars":3,"install":{"openai4s":"openai4s lab add robots/sanan222__lecasa","mhs":"mhs serve robots/sanan222__lecasa --port 7400","mcp":"mhs serve robots/sanan222__lecasa --mcp"}},
{"id":"robots/saqib736__ros2-reinforcement-learning","name":"RacingBotEnv-v0 (ROS 2 Gazebo racing simulation)","device_id":"mhs://localhost/racingbot-env","track":"robots","category":"Simulation","topic":"mobile robots","kind":"world.sim","vendor":"saqib736","model":"RacingBotEnv-v0","mode":"simulated","risk":"R2","family":"gymnasium","role":"sim-env","intro":"RacingBotEnv-v0 (ROS 2 Gazebo racing simulation), adapted from saqib736/ros2-reinforcement-learning. It reads `observation`, `reward`, `terminated`, `truncated` and 4 more; runs `step`, `reset` and `seed`. `step`: advance the simulated world by a bounded number of fixed timesteps, optionally applying an action for each step, and return the resulting observation and terminal flags. A simulator: the market serves it with a stand-in that needs no simulator install.","measures":["observation","reward","terminated","truncated","tick","episode","seed","info"],"adjusts":[],"actions":[{"name":"step","description":"Advance the simulated world by a bounded number of fixed timesteps, optionally applying an action for each step, and return the resulting observation and terminal flags."},{"name":"reset","description":"Reset the simulated world to a scenario start state and return the initial observation. When a seed is supplied the endpoint records it in the receipt; otherwise the endpoint's declared default seed applies."},{"name":"seed","description":"Set the seed used by the simulated world's random number generators for subsequent steps, without resetting the world. The accepted seed is echoed in the receipt."}],"tags":["ros2","gazebo","reinforcement-learning","gymnasium","racing","simulation","laser","pioneer3dx"],"backends":["fake"],"served_backend":"fake","evidence":"contract_checked","upstream":{"repo_url":"https://github.com/saqib736/ros2-reinforcement-learning","commit":"c17f9055076f72d91be6a628a2a5db084dacd7d1","license":"MIT"},"stars":13,"install":{"openai4s":"openai4s lab add robots/saqib736__ros2-reinforcement-learning","mhs":"mhs serve robots/saqib736__ros2-reinforcement-learning --port 7400","mcp":"mhs serve robots/saqib736__ros2-reinforcement-learning --mcp"}},
{"id":"robots/schroederdewitt__multiagent_mujoco","name":"MAMuJoCo coupled half-cheetah world (MuJoCo)","device_id":"mhs://localhost/mamujoco-cheetah","track":"robots","category":"Simulation","topic":"multi-robot systems","kind":"world.sim","vendor":"Christian Schroeder de Witt et al.","model":"MAMuJoCo coupled_half_cheetah","mode":"simulated","risk":"R0","family":"mujoco","role":"sim-env","intro":"MAMuJoCo coupled half-cheetah world (MuJoCo), adapted from schroederdewitt/multiagent_mujoco. It reads `time_ms`, `qpos`, `qvel`, `ctrl` and 4 more; runs `step` and `reset`. `step`: advance the simulated world by a bounded number of fixed timesteps, optionally applying an action for each step, and return the resulting observation and terminal flags. A simulator: the market serves it with a stand-in that needs no simulator install.","measures":["time_ms","qpos","qvel","ctrl","tick","timestep_ms","seed","native_checkpoint"],"adjusts":[],"actions":[{"name":"step","description":"Advance the simulated world by a bounded number of fixed timesteps, optionally applying an action for each step, and return the resulting observation and terminal flags."},{"name":"reset","description":"Reset the simulated world to a scenario start state and return the initial observation. When a seed is supplied the endpoint records it in the receipt; otherwise the endpoint's declared default seed applies."}],"tags":["cheetah","coupled","mujoco","multi-agent","reinforcement-learning","simulation","world"],"backends":["fake"],"served_backend":"fake","evidence":"contract_checked","upstream":{"repo_url":"https://github.com/schroederdewitt/multiagent_mujoco","commit":"b212ddd74b258e7cea006ff1d642b5ffada4b99d","license":"Apache-2.0"},"stars":375,"install":{"openai4s":"openai4s lab add robots/schroederdewitt__multiagent_mujoco","mhs":"mhs serve robots/schroederdewitt__multiagent_mujoco --port 7400","mcp":"mhs serve robots/schroederdewitt__multiagent_mujoco --mcp"}},
{"id":"robots/sea-bass__pyrobosim","name":"PyRoboSim world simulator","device_id":"mhs://localhost/pyrobosim","track":"robots","category":"Simulation","topic":"mobile robots","kind":"world.sim","vendor":"sea-bass","model":"PyRoboSim World","mode":"simulated","risk":"R1","family":"python-object","role":"sim-env","intro":"PyRoboSim world simulator, adapted from sea-bass/pyrobosim. It reads `world_state`; sets `inflation_radius`; runs `reset_world`, `open_location` and `close_location`. `reset_world`: reset the simulated world to a scenario start state and return the initial observation. When a seed is supplied the endpoint records it in the receipt; otherwise the endpoint's declared default seed applies. A simulator: the market serves it with a stand-in that needs no simulator install.","measures":["world_state"],"adjusts":["inflation_radius"],"actions":[{"name":"reset_world","description":"Reset the simulated world to a scenario start state and return the initial observation. When a seed is supplied the endpoint records it in the receipt; otherwise the endpoint's declared default seed applies."},{"name":"open_location","description":"Open a storage location or hallway in the simulated world"},{"name":"close_location","description":"Close a storage location or hallway in the simulated world"}],"tags":["simulation","mobile-robot","world","navigation","ros2-optional"],"backends":["fake"],"served_backend":"fake","evidence":"contract_checked","upstream":{"repo_url":"https://github.com/sea-bass/pyrobosim","commit":"d33280a4de8fc423662fdbe12f43b3bb1a3bf66d","license":"MIT"},"stars":388,"install":{"openai4s":"openai4s lab add robots/sea-bass__pyrobosim","mhs":"mhs serve robots/sea-bass__pyrobosim --port 7400","mcp":"mhs serve robots/sea-bass__pyrobosim --mcp"}},
{"id":"robots/semitable__robotic-warehouse","name":"RWARE tiny warehouse with one agent","device_id":"mhs://localhost/rware-tiny-1ag","track":"robots","category":"Simulation","topic":"multi-robot systems","kind":"world.sim","vendor":"Semitable","model":"rware-tiny-1ag-v2","mode":"simulated","risk":"R0","family":"gymnasium","role":"sim-env","intro":"RWARE tiny warehouse with one agent, adapted from semitable/robotic-warehouse. It reads `observation`, `reward`, `terminated`, `truncated` and 4 more; runs `step`, `reset` and `seed`. `step`: advance the simulated world by a bounded number of fixed timesteps, optionally applying an action for each step, and return the resulting observation and terminal flags. A simulator: the market serves it with a stand-in that needs no simulator install.","measures":["observation","reward","terminated","truncated","tick","episode","seed","info"],"adjusts":[],"actions":[{"name":"step","description":"Advance the simulated world by a bounded number of fixed timesteps, optionally applying an action for each step, and return the resulting observation and terminal flags."},{"name":"reset","description":"Reset the simulated world to a scenario start state and return the initial observation. When a seed is supplied the endpoint records it in the receipt; otherwise the endpoint's declared default seed applies."},{"name":"seed","description":"Set the seed used by the simulated world's random number generators for subsequent steps, without resetting the world. The accepted seed is echoed in the receipt."}],"tags":["rware","warehouse","multi-robot","reinforcement-learning","simulation","gymnasium"],"backends":["fake"],"served_backend":"fake","evidence":"contract_checked","upstream":{"repo_url":"https://github.com/semitable/robotic-warehouse","commit":"96fbc64e3eae5fee915e0d390f864fa06ddccd47","license":"MIT"},"stars":439,"install":{"openai4s":"openai4s lab add robots/semitable__robotic-warehouse","mhs":"mhs serve robots/semitable__robotic-warehouse --port 7400","mcp":"mhs serve robots/semitable__robotic-warehouse --mcp"}},
{"id":"robots/seohongpark__ocbench","name":"OCBench block-cpu-single-task1-v0 (MuJoCo UR5e cube manipulation)","device_id":"mhs://localhost/ocbench-block-single-task1","track":"robots","category":"Simulation","topic":"robot arm manipulation","kind":"world.sim","vendor":"Seohong Park","model":"block-cpu-single-task1-v0","mode":"simulated","risk":"R0","family":"gymnasium","role":"sim-env","intro":"OCBench block-cpu-single-task1-v0 (MuJoCo UR5e cube manipulation), adapted from seohongpark/ocbench. It reads `observation`, `reward`, `terminated`, `truncated` and 4 more; runs `step`, `reset` and `seed`. `step`: advance the simulated world by a bounded number of fixed timesteps, optionally applying an action for each step, and return the resulting observation and terminal flags. A simulator: the market serves it with a stand-in that needs no simulator install.","measures":["observation","reward","terminated","truncated","tick","episode","seed","info"],"adjusts":[],"actions":[{"name":"step","description":"Advance the simulated world by a bounded number of fixed timesteps, optionally applying an action for each step, and return the resulting observation and terminal flags."},{"name":"reset","description":"Reset the simulated world to a scenario start state and return the initial observation. When a seed is supplied the endpoint records it in the receipt; otherwise the endpoint's declared default seed applies."},{"name":"seed","description":"Set the seed used by the simulated world's random number generators for subsequent steps, without resetting the world. The accepted seed is echoed in the receipt."}],"tags":["ocbench","mujoco","manipulation","block","reinforcement-learning","simulation","gymnasium"],"backends":["fake"],"served_backend":"fake","evidence":"contract_checked","upstream":{"repo_url":"https://github.com/seohongpark/ocbench","commit":"6939a1e84f7ce9dbdd20c9f80d4cf335e8f83b49","license":"MIT"},"stars":85,"install":{"openai4s":"openai4s lab add robots/seohongpark__ocbench","mhs":"mhs serve robots/seohongpark__ocbench --port 7400","mcp":"mhs serve robots/seohongpark__ocbench --mcp"}},
{"id":"robots/shadow-robot__smart_grasping_sandbox","name":"Shadow Smart Grasping Sandbox","device_id":"mhs://localhost/smart_grasping_sandbox","track":"robots","category":"Robot arms and grippers","topic":null,"kind":"robot.arm","vendor":"Shadow Robot Company","model":null,"mode":"simulated","risk":"R2","family":"ros","role":"sim-env","intro":"Shadow Smart Grasping Sandbox, adapted from shadow-robot/smart_grasping_sandbox. It reads `read_joint_states` and `read_object_pose`; runs `pause_physics`, `unpause_physics`, `reset_world`, `home_configuration` and 2 more. `pause_physics`: pause the Gazebo simulation through /gazebo/pause_physics. A simulator: the market serves it with a stand-in that needs no simulator install.","measures":["read_joint_states","read_object_pose"],"adjusts":[],"actions":[{"name":"pause_physics","description":"Pause the Gazebo simulation through /gazebo/pause_physics"},{"name":"unpause_physics","description":"Resume the Gazebo simulation through /gazebo/unpause_physics"},{"name":"reset_world","description":"Reset the Gazebo world through /gazebo/reset_world"},{"name":"home_configuration","description":"Teleport the 15 UR10 and H1 joints to SmartGrasper.reset_world's fixed configuration through /gazebo/set_model_configuration, without stopping the controllers or pausing physics as reset_world does, so the running controllers can drive the joints back"},{"name":"open_hand","description":"Teleport the nine H1 hand joints to the SRDF open group state through /gazebo/set_model_configuration; the running hand controller can drive them back"},{"name":"close_hand","description":"Teleport the nine H1 hand joints to the SRDF close group state through /gazebo/set_model_configuration; the running hand controller can drive them back"}],"tags":["ros","ros1","simulation","gazebo","moveit","ur10","shadow-hand","grasping"],"backends":["fake"],"served_backend":"fake","evidence":"contract_checked","upstream":{"repo_url":"https://github.com/shadow-robot/smart_grasping_sandbox","commit":"6f8de0600126bcbd38c38c1fcc8b97c6a868ad8d","license":"GPL-3.0"},"stars":85,"install":{"openai4s":"openai4s lab add robots/shadow-robot__smart_grasping_sandbox","mhs":"mhs serve robots/shadow-robot__smart_grasping_sandbox --port 7400","mcp":"mhs serve robots/shadow-robot__smart_grasping_sandbox --mcp"}},
{"id":"robots/shanpenghui__robomimicdeploy_g1","name":"Unitree G1 29-DOF (MuJoCo simulation)","device_id":"mhs://localhost/g1-29dof","track":"robots","category":"Simulation","topic":"humanoid robots","kind":"world.sim","vendor":"Unitree Robotics","model":"G1 29-DOF (g1_29dof_rev_1_0)","mode":"simulated","risk":"R0","family":"mujoco","role":"twin-candidate","intro":"Unitree G1 29-DOF (MuJoCo simulation), adapted from shanpenghui/robomimicdeploy_g1. It reads `time_ms`, `qpos`, `qvel`, `ctrl` and 4 more; runs `step` and `reset`. `step`: advance the simulated world by a bounded number of fixed timesteps, optionally applying an action for each step, and return the resulting observation and terminal flags. A simulator: the market serves it with a stand-in that needs no simulator install.","measures":["time_ms","qpos","qvel","ctrl","tick","timestep_ms","seed","native_checkpoint"],"adjusts":[],"actions":[{"name":"step","description":"Advance the simulated world by a bounded number of fixed timesteps, optionally applying an action for each step, and return the resulting observation and terminal flags."},{"name":"reset","description":"Reset the simulated world to a scenario start state and return the initial observation. When a seed is supplied the endpoint records it in the receipt; otherwise the endpoint's declared default seed applies."}],"tags":["g1","humanoid","mujoco","robot","simulation","unitree"],"backends":["fake"],"served_backend":"fake","evidence":"contract_checked","upstream":{"repo_url":"https://github.com/shanpenghui/robomimicdeploy_g1","commit":"8e5ab747a4c847e28d41d3084ff9822f877b147c","license":"NOASSERTION"},"stars":68,"install":{"openai4s":"openai4s lab add robots/shanpenghui__robomimicdeploy_g1","mhs":"mhs serve robots/shanpenghui__robomimicdeploy_g1 --port 7400","mcp":"mhs serve robots/shanpenghui__robomimicdeploy_g1 --mcp"}},
{"id":"robots/shupx__fastswarmsim","name":"FastSwarmSim lock-step time coordinator","device_id":"mhs://localhost/fastswarmsim","track":"robots","category":"Simulation","topic":"UAVs","kind":"world.sim","vendor":"shupx","model":"fss_time time coordinator","mode":"simulated","risk":"R0","family":"ros","role":"sim-env","intro":"FastSwarmSim lock-step time coordinator, adapted from shupx/fastswarmsim. It reads `clock_running`, `clock_factor`, `read_sim_clock` and `read_clock_status`; runs `pause` and `resume`. `pause`: pause clock advancement with the acknowledged fss/clock_control service. A simulator: the market serves it with a stand-in that needs no simulator install.","measures":["clock_running","clock_factor","read_sim_clock","read_clock_status"],"adjusts":[],"actions":[{"name":"pause","description":"Pause clock advancement with the acknowledged fss/clock_control service"},{"name":"resume","description":"Resume clock advancement at an operator-selected real-time factor"}],"tags":["ros","ros2","simulation","fastswarmsim","px4","clock","pause"],"backends":["fake"],"served_backend":"fake","evidence":"contract_checked","upstream":{"repo_url":"https://github.com/shupx/fastswarmsim","commit":"56a6380fcd409a0700baedc39a632a823622d633","license":"BSD-3-Clause"},"stars":43,"install":{"openai4s":"openai4s lab add robots/shupx__fastswarmsim","mhs":"mhs serve robots/shupx__fastswarmsim --port 7400","mcp":"mhs serve robots/shupx__fastswarmsim --mcp"}},
{"id":"robots/shupx__swarm_sync_sim","name":"swarm_sync_sim lock-step simulation clock","device_id":"mhs://localhost/swarm_sync_sim","track":"robots","category":"Simulation","topic":"multi-robot systems","kind":"world.sim","vendor":"shupx","model":"sss_sim_env sim clock nodelet","mode":"simulated","risk":"R0","family":"ros","role":"sim-env","intro":"swarm_sync_sim lock-step simulation clock, adapted from shupx/swarm_sync_sim. It reads `read_sim_clock` and `read_clock_online`; runs `pause` and `resume`. `pause`: pause the simulation clock with /sss_clock_control; /clock holds after at most the regulator's pending 0.01 s step until a client resumes it. A simulator: the market serves it with a stand-in that needs no simulator install.","measures":["read_sim_clock","read_clock_online"],"adjusts":[],"actions":[{"name":"pause","description":"Pause the simulation clock with /sss_clock_control; /clock holds after at most the regulator's pending 0.01 s step until a client resumes it"},{"name":"resume","description":"Resume clock advancement at an operator-selected speed ratio"}],"tags":["ros","ros1","simulation","swarm-sync-sim","clock","pause","lock-step"],"backends":["fake"],"served_backend":"fake","evidence":"contract_checked","upstream":{"repo_url":"https://github.com/shupx/swarm_sync_sim","commit":"4837b511c3d2bcaa36448e5e5af51335004bafd8","license":"BSD-3-Clause"},"stars":25,"install":{"openai4s":"openai4s lab add robots/shupx__swarm_sync_sim","mhs":"mhs serve robots/shupx__swarm_sync_sim --port 7400","mcp":"mhs serve robots/shupx__swarm_sync_sim --mcp"}},
{"id":"robots/sickag__sick_scan_xd","name":"SICK sick_scan_xd LaserScan sensor","device_id":"mhs://localhost/sick-scan-xd","track":"robots","category":"Sensors and cameras","topic":null,"kind":"sensor","vendor":"SICK AG","model":null,"mode":"hardware","risk":"R0","family":"ros","role":"device-driver","intro":"SICK sick_scan_xd LaserScan sensor, adapted from SICKAG/sick_scan_xd. It runs `capture_scan`. `capture_scan`: read one LaserScan sample from the running sick_scan_xd node. A hardware driver: the market serves its fake backend, so no instrument is needed.","measures":[],"adjusts":[],"actions":[{"name":"capture_scan","description":"Read one LaserScan sample from the running sick_scan_xd node"}],"tags":["ros","ros2","lidar","laser-scan","sick","sick-scan-xd"],"backends":["fake"],"served_backend":"fake","evidence":"contract_checked","upstream":{"repo_url":"https://github.com/SICKAG/sick_scan_xd","commit":"ed157563f1fdc3a2ea4ba6a6cac7e45ba3ab6e36","license":"Apache-2.0"},"stars":0,"install":{"openai4s":"openai4s lab add robots/sickag__sick_scan_xd","mhs":"mhs serve robots/sickag__sick_scan_xd --port 7400","mcp":"mhs serve robots/sickag__sick_scan_xd --mcp"}},
{"id":"robots/simple-robotics__simple","name":"Simple Humanoid (MuJoCo MJCF model)","device_id":"mhs://localhost/simple-humanoid","track":"robots","category":"Simulation","topic":null,"kind":"world.sim","vendor":"simple-robotics","model":"Humanoid","mode":"simulated","risk":"R0","family":"mujoco","role":"sim-env","intro":"Simple Humanoid (MuJoCo MJCF model), adapted from simple-robotics/simple. It reads `time_ms`, `qpos`, `qvel`, `ctrl` and 4 more; runs `step` and `reset`. `step`: advance the simulated world by a bounded number of fixed timesteps, optionally applying an action for each step, and return the resulting observation and terminal flags. A simulator: the market serves it with a stand-in that needs no simulator install.","measures":["time_ms","qpos","qvel","ctrl","tick","timestep_ms","seed","native_checkpoint"],"adjusts":[],"actions":[{"name":"step","description":"Advance the simulated world by a bounded number of fixed timesteps, optionally applying an action for each step, and return the resulting observation and terminal flags."},{"name":"reset","description":"Reset the simulated world to a scenario start state and return the initial observation. When a seed is supplied the endpoint records it in the receipt; otherwise the endpoint's declared default seed applies."}],"tags":["simple","simulation","mujoco","humanoid","physics","reinforcement-learning"],"backends":["fake"],"served_backend":"fake","evidence":"contract_checked","upstream":{"repo_url":"https://github.com/simple-robotics/simple","commit":"03d4784ed87b2b4986c74564d20ef5544b30936d","license":"BSD-3-Clause"},"stars":244,"install":{"openai4s":"openai4s lab add robots/simple-robotics__simple","mhs":"mhs serve robots/simple-robotics__simple --port 7400","mcp":"mhs serve robots/simple-robotics__simple --mcp"}},
{"id":"robots/simpler-env__maniskill2_real2sim","name":"SimplerEnv ManiSkill2 real2sim (GraspSingleCokeCanInScene-v0)","device_id":"mhs://localhost/maniskill2-real2sim-grasp-coke-can","track":"robots","category":"Simulation","topic":"robot manipulation","kind":"world.sim","vendor":"simpler-env","model":"ManiSkill2 real2sim GraspSingleCokeCanInScene-v0","mode":"simulated","risk":"R0","family":"gymnasium","role":"sim-env","intro":"SimplerEnv ManiSkill2 real2sim (GraspSingleCokeCanInScene-v0), adapted from simpler-env/maniskill2_real2sim. It reads `observation`, `reward`, `terminated`, `truncated` and 5 more; runs `step`, `reset` and `seed`. `step`: advance the simulated world by a bounded number of fixed timesteps, optionally applying an action for each step, and return the resulting observation and terminal flags. A simulator: the market serves it with a stand-in that needs no simulator install.","measures":["observation","reward","terminated","truncated","tick","episode","seed","info","native_checkpoint"],"adjusts":[],"actions":[{"name":"step","description":"Advance the simulated world by a bounded number of fixed timesteps, optionally applying an action for each step, and return the resulting observation and terminal flags."},{"name":"reset","description":"Reset the simulated world to a scenario start state and return the initial observation. When a seed is supplied the endpoint records it in the receipt; otherwise the endpoint's declared default seed applies."},{"name":"seed","description":"Set the seed used by the simulated world's random number generators for subsequent steps, without resetting the world. The accepted seed is echoed in the receipt."}],"tags":["maniskill2","real2sim","simplerenv","grasping","simulation","gymnasium"],"backends":["fake","sim"],"served_backend":"fake","evidence":"contract_checked","upstream":{"repo_url":"https://github.com/simpler-env/maniskill2_real2sim","commit":"ef7a4d4fdf4b69f2c2154db5b15b9ac8dfe10682","license":"Apache-2.0"},"stars":21,"install":{"openai4s":"openai4s lab add robots/simpler-env__maniskill2_real2sim","mhs":"mhs serve robots/simpler-env__maniskill2_real2sim --port 7400","mcp":"mhs serve robots/simpler-env__maniskill2_real2sim --mcp"}},
{"id":"robots/sjtu-visys-team__visfly","name":"VisFly NavigationEnv (Habitat-Sim quadrotor navigation)","device_id":"mhs://localhost/visfly-navigation","track":"robots","category":"Simulation","topic":"UAVs","kind":"world.sim","vendor":"SJTU-ViSYS Team","model":"VisFly NavigationEnv","mode":"simulated","risk":"R0","family":"gymnasium","role":"sim-env","intro":"VisFly NavigationEnv (Habitat-Sim quadrotor navigation), adapted from sjtu-visys-team/visfly. It reads `observation`, `reward`, `terminated`, `truncated` and 4 more; runs `step`, `reset` and `seed`. `step`: advance the simulated world by a bounded number of fixed timesteps, optionally applying an action for each step, and return the resulting observation and terminal flags. A simulator: the market serves it with a stand-in that needs no simulator install.","measures":["observation","reward","terminated","truncated","tick","episode","seed","info"],"adjusts":[],"actions":[{"name":"step","description":"Advance the simulated world by a bounded number of fixed timesteps, optionally applying an action for each step, and return the resulting observation and terminal flags."},{"name":"reset","description":"Reset the simulated world to a scenario start state and return the initial observation. When a seed is supplied the endpoint records it in the receipt; otherwise the endpoint's declared default seed applies."},{"name":"seed","description":"Set the seed used by the simulated world's random number generators for subsequent steps, without resetting the world. The accepted seed is echoed in the receipt."}],"tags":["drone","quadrotor","navigation","vision-based-flight","reinforcement-learning","simulation","habitat-sim","gymnasium"],"backends":["fake"],"served_backend":"fake","evidence":"contract_checked","upstream":{"repo_url":"https://github.com/sjtu-visys-team/visfly","commit":"6ff29bfcbc752da4f9474f6f0ece29d836111a22","license":"MIT"},"stars":144,"install":{"openai4s":"openai4s lab add robots/sjtu-visys-team__visfly","mhs":"mhs serve robots/sjtu-visys-team__visfly --port 7400","mcp":"mhs serve robots/sjtu-visys-team__visfly --mcp"}},
{"id":"robots/skim0119__gym-softrobot","name":"gym-softrobot OctoMuscleCrawl-v0 (eight-arm soft crawler)","device_id":"mhs://localhost/octo-muscle-crawl","track":"robots","category":"Simulation","topic":"robot arm manipulation","kind":"world.sim","vendor":"skim0119","model":"gym-softrobot","mode":"simulated","risk":"R0","family":"gymnasium","role":"sim-env","intro":"gym-softrobot OctoMuscleCrawl-v0 (eight-arm soft crawler), adapted from skim0119/gym-softrobot. It reads `observation`, `reward`, `terminated`, `truncated` and 4 more; runs `step`, `reset` and `seed`. `step`: advance the simulated world by a bounded number of fixed timesteps, optionally applying an action for each step, and return the resulting observation and terminal flags. A simulator: the market serves it with a stand-in that needs no simulator install.","measures":["observation","reward","terminated","truncated","tick","episode","seed","info"],"adjusts":[],"actions":[{"name":"step","description":"Advance the simulated world by a bounded number of fixed timesteps, optionally applying an action for each step, and return the resulting observation and terminal flags."},{"name":"reset","description":"Reset the simulated world to a scenario start state and return the initial observation. When a seed is supplied the endpoint records it in the receipt; otherwise the endpoint's declared default seed applies."},{"name":"seed","description":"Set the seed used by the simulated world's random number generators for subsequent steps, without resetting the world. The accepted seed is echoed in the receipt."}],"tags":["octopus","soft-robot","cosserat","crawling","reinforcement-learning","simulation","gymnasium"],"backends":["fake"],"served_backend":"fake","evidence":"contract_checked","upstream":{"repo_url":"https://github.com/skim0119/gym-softrobot","commit":"e4a73ed86191747f4d0af56e612a6e339e952448","license":"MIT"},"stars":0,"install":{"openai4s":"openai4s lab add robots/skim0119__gym-softrobot","mhs":"mhs serve robots/skim0119__gym-softrobot --port 7400","mcp":"mhs serve robots/skim0119__gym-softrobot --mcp"}},
{"id":"robots/snu-pi__humanoidtoolbench","name":"HumanoidToolBench G1BallMove-L0-S (MuJoCo G1 tool-use simulation)","device_id":"mhs://localhost/humanoidtoolbench","track":"robots","category":"Simulation","topic":"humanoid robots","kind":"world.sim","vendor":"SNU-PI","model":"HumanoidToolBench G1BallMove-L0-S","mode":"simulated","risk":"R0","family":"gymnasium","role":"sim-env","intro":"HumanoidToolBench G1BallMove-L0-S (MuJoCo G1 tool-use simulation), adapted from snu-pi/humanoidtoolbench. It reads `observation`, `reward`, `terminated`, `truncated` and 4 more; runs `step`, `reset` and `seed`. `step`: advance the simulated world by a bounded number of fixed timesteps, optionally applying an action for each step, and return the resulting observation and terminal flags. A simulator: the market serves it with a stand-in that needs no simulator install.","measures":["observation","reward","terminated","truncated","tick","episode","seed","info"],"adjusts":[],"actions":[{"name":"step","description":"Advance the simulated world by a bounded number of fixed timesteps, optionally applying an action for each step, and return the resulting observation and terminal flags."},{"name":"reset","description":"Reset the simulated world to a scenario start state and return the initial observation. When a seed is supplied the endpoint records it in the receipt; otherwise the endpoint's declared default seed applies."},{"name":"seed","description":"Set the seed used by the simulated world's random number generators for subsequent steps, without resetting the world. The accepted seed is echoed in the receipt."}],"tags":["humanoid","humanoidtoolbench","mujoco","tool-use","reinforcement-learning","simulation","gymnasium"],"backends":["fake"],"served_backend":"fake","evidence":"contract_checked","upstream":{"repo_url":"https://github.com/snu-pi/humanoidtoolbench","commit":"2cd4f006f6f2ebc536a3fb45aff8ce2eaf1382d7","license":"MIT"},"stars":6,"install":{"openai4s":"openai4s lab add robots/snu-pi__humanoidtoolbench","mhs":"mhs serve robots/snu-pi__humanoidtoolbench --port 7400","mcp":"mhs serve robots/snu-pi__humanoidtoolbench --mcp"}},
{"id":"robots/sofadefrost__sofagym","name":"SofaGym soft trunk (trunk-v0)","device_id":"mhs://localhost/sofagym-trunk","track":"robots","category":"Simulation","topic":"robot arm manipulation","kind":"world.sim","vendor":"SofaDefrost","model":"trunk-v0","mode":"simulated","risk":"R0","family":"gymnasium","role":"sim-env","intro":"SofaGym soft trunk (trunk-v0), adapted from sofadefrost/sofagym. It reads `observation`, `reward`, `terminated`, `truncated` and 4 more; runs `step`, `reset` and `seed`. `step`: advance the simulated world by a bounded number of fixed timesteps, optionally applying an action for each step, and return the resulting observation and terminal flags. A simulator: the market serves it with a stand-in that needs no simulator install.","measures":["observation","reward","terminated","truncated","tick","episode","seed","info"],"adjusts":[],"actions":[{"name":"step","description":"Advance the simulated world by a bounded number of fixed timesteps, optionally applying an action for each step, and return the resulting observation and terminal flags."},{"name":"reset","description":"Reset the simulated world to a scenario start state and return the initial observation. When a seed is supplied the endpoint records it in the receipt; otherwise the endpoint's declared default seed applies."},{"name":"seed","description":"Set the seed used by the simulated world's random number generators for subsequent steps, without resetting the world. The accepted seed is echoed in the receipt."}],"tags":["soft-robotics","trunk","cable-actuated","reinforcement-learning","simulation","sofagym"],"backends":["fake"],"served_backend":"fake","evidence":"contract_checked","upstream":{"repo_url":"https://github.com/sofadefrost/sofagym","commit":"f5ad4e44a0dc522d8018c184245b7aa630292118","license":"NOASSERTION"},"stars":95,"install":{"openai4s":"openai4s lab add robots/sofadefrost__sofagym","mhs":"mhs serve robots/sofadefrost__sofagym --port 7400","mcp":"mhs serve robots/sofadefrost__sofagym --mcp"}},
{"id":"robots/soltanilara__gym_av_aloha","name":"gym_av_aloha cube-transfer-v1 (MuJoCo ALOHA simulation)","device_id":"mhs://localhost/av-aloha-cube-transfer","track":"robots","category":"Simulation","topic":"robot arm manipulation","kind":"world.sim","vendor":"Soltanilara","model":"gym_av_aloha/cube-transfer-v1","mode":"simulated","risk":"R0","family":"gymnasium","role":"sim-env","intro":"gym_av_aloha cube-transfer-v1 (MuJoCo ALOHA simulation), adapted from soltanilara/gym_av_aloha. It reads `observation`, `reward`, `terminated`, `truncated` and 4 more; runs `step`, `reset` and `seed`. `step`: advance the simulated world by a bounded number of fixed timesteps, optionally applying an action for each step, and return the resulting observation and terminal flags. A simulator: the market serves it with a stand-in that needs no simulator install.","measures":["observation","reward","terminated","truncated","tick","episode","seed","info"],"adjusts":[],"actions":[{"name":"step","description":"Advance the simulated world by a bounded number of fixed timesteps, optionally applying an action for each step, and return the resulting observation and terminal flags."},{"name":"reset","description":"Reset the simulated world to a scenario start state and return the initial observation. When a seed is supplied the endpoint records it in the receipt; otherwise the endpoint's declared default seed applies."},{"name":"seed","description":"Set the seed used by the simulated world's random number generators for subsequent steps, without resetting the world. The accepted seed is echoed in the receipt."}],"tags":["aloha","bimanual","mujoco","simulation","reinforcement-learning","gymnasium"],"backends":["fake"],"served_backend":"fake","evidence":"contract_checked","upstream":{"repo_url":"https://github.com/soltanilara/gym_av_aloha","commit":"3e8edfdf5e2ff9cfc6e330ab9f970417e0e2a77d","license":"MIT"},"stars":6,"install":{"openai4s":"openai4s lab add robots/soltanilara__gym_av_aloha","mhs":"mhs serve robots/soltanilara__gym_av_aloha --port 7400","mcp":"mhs serve robots/soltanilara__gym_av_aloha --mcp"}},
{"id":"robots/spencerfolk__rotorpy","name":"RotorPy Quadrotor-v0 (multirotor reinforcement-learning environment)","device_id":"mhs://localhost/rotorpy-quadrotor","track":"robots","category":"Simulation","topic":"UAVs","kind":"world.sim","vendor":"spencerfolk","model":"RotorPy 3.0.0","mode":"simulated","risk":"R0","family":"gymnasium","role":"sim-env","intro":"RotorPy Quadrotor-v0 (multirotor reinforcement-learning environment), adapted from spencerfolk/rotorpy. It reads `observation`, `reward`, `terminated`, `truncated` and 4 more; runs `step`, `reset` and `seed`. `step`: advance the simulated world by a bounded number of fixed timesteps, optionally applying an action for each step, and return the resulting observation and terminal flags. A simulator: the market serves it with a stand-in that needs no simulator install.","measures":["observation","reward","terminated","truncated","tick","episode","seed","info"],"adjusts":[],"actions":[{"name":"step","description":"Advance the simulated world by a bounded number of fixed timesteps, optionally applying an action for each step, and return the resulting observation and terminal flags."},{"name":"reset","description":"Reset the simulated world to a scenario start state and return the initial observation. When a seed is supplied the endpoint records it in the receipt; otherwise the endpoint's declared default seed applies."},{"name":"seed","description":"Set the seed used by the simulated world's random number generators for subsequent steps, without resetting the world. The accepted seed is echoed in the receipt."}],"tags":["quadrotor","uav","multirotor","reinforcement-learning","simulation","gymnasium","rotorpy"],"backends":["fake"],"served_backend":"fake","evidence":"contract_checked","upstream":{"repo_url":"https://github.com/spencerfolk/rotorpy","commit":"40b09697a6a1596d404a67f459941d46a39eedd3","license":"MIT"},"stars":0,"install":{"openai4s":"openai4s lab add robots/spencerfolk__rotorpy","mhs":"mhs serve robots/spencerfolk__rotorpy --port 7400","mcp":"mhs serve robots/spencerfolk__rotorpy --mcp"}},
{"id":"robots/spiglerg__tavis","name":"TAVIS humanoid-torso active-vision benchmark (Isaac Lab-Arena)","device_id":"mhs://localhost/tavis","track":"robots","category":"Simulation","topic":"humanoid robots","kind":"world.sim","vendor":"TAVIS benchmark","model":"TAVIS (Fourier GR1T2 / Pollen Reachy 2)","mode":"simulated","risk":"R0","family":"gymnasium","role":"sim-env","intro":"TAVIS humanoid-torso active-vision benchmark (Isaac Lab-Arena), adapted from spiglerg/tavis. It reads `observation`, `reward`, `terminated`, `truncated` and 4 more; runs `step`, `reset` and `seed`. `step`: advance the simulated world by a bounded number of fixed timesteps, optionally applying an action for each step, and return the resulting observation and terminal flags. A simulator: the market serves it with a stand-in that needs no simulator install.","measures":["observation","reward","terminated","truncated","tick","episode","seed","info"],"adjusts":[],"actions":[{"name":"step","description":"Advance the simulated world by a bounded number of fixed timesteps, optionally applying an action for each step, and return the resulting observation and terminal flags."},{"name":"reset","description":"Reset the simulated world to a scenario start state and return the initial observation. When a seed is supplied the endpoint records it in the receipt; otherwise the endpoint's declared default seed applies."},{"name":"seed","description":"Set the seed used by the simulated world's random number generators for subsequent steps, without resetting the world. The accepted seed is echoed in the receipt."}],"tags":["tavis","isaac-lab","isaac-sim","isaaclab-arena","humanoid","active-vision","imitation-learning","simulation","gymnasium"],"backends":["fake"],"served_backend":"fake","evidence":"contract_checked","upstream":{"repo_url":"https://github.com/spiglerg/tavis","commit":"a114648a0db232a1a8d4b142c65251b29afa795a","license":"MIT"},"stars":9,"install":{"openai4s":"openai4s lab add robots/spiglerg__tavis","mhs":"mhs serve robots/spiglerg__tavis --port 7400","mcp":"mhs serve robots/spiglerg__tavis --mcp"}},
{"id":"robots/srmauvsoftware__ursim","name":"URSim underwater-vehicle simulator","device_id":"mhs://localhost/ursim","track":"robots","category":"Simulation","topic":"underwater robotics","kind":"world.sim","vendor":"srmauvsoftware","model":"URSim AUV simulator (Unity 3D and ROS 1)","mode":"simulated","risk":"R0","family":"ros","role":"sim-env","intro":"URSim underwater-vehicle simulator, adapted from srmauvsoftware/ursim. It reads `read_depth`, `read_heading` and `read_imu`. A simulator: the market serves it with a stand-in that needs no simulator install.","measures":["read_depth","read_heading","read_imu"],"adjusts":[],"actions":[],"tags":["ros","ros1","simulation","underwater","auv","ursim","depth","heading","imu"],"backends":["fake"],"served_backend":"fake","evidence":"contract_checked","upstream":{"repo_url":"https://github.com/srmauvsoftware/ursim","commit":"feb7d257e61f192067209de5456965d7d0a3a612","license":"Apache-2.0"},"stars":0,"install":{"openai4s":"openai4s lab add robots/srmauvsoftware__ursim","mhs":"mhs serve robots/srmauvsoftware__ursim --port 7400","mcp":"mhs serve robots/srmauvsoftware__ursim --mcp"}},
{"id":"robots/sryu1__jsbgym","name":"JSBGym Cessna 172 heading-control environment (FlightGear disabled)","device_id":"mhs://localhost/jsbgym","track":"robots","category":"Simulation","topic":null,"kind":"world.sim","vendor":"sryu1","model":"C172-HeadingControlTask-Shaping.STANDARD-NoFG-v0","mode":"simulated","risk":"R0","family":"gymnasium","role":"sim-env","intro":"JSBGym Cessna 172 heading-control environment (FlightGear disabled), adapted from sryu1/jsbgym. It reads `observation`, `reward`, `terminated`, `truncated` and 4 more; runs `step`, `reset` and `seed`. `step`: advance the simulated world by a bounded number of fixed timesteps, optionally applying an action for each step, and return the resulting observation and terminal flags. A simulator: the market serves it with a stand-in that needs no simulator install.","measures":["observation","reward","terminated","truncated","tick","episode","seed","info"],"adjusts":[],"actions":[{"name":"step","description":"Advance the simulated world by a bounded number of fixed timesteps, optionally applying an action for each step, and return the resulting observation and terminal flags."},{"name":"reset","description":"Reset the simulated world to a scenario start state and return the initial observation. When a seed is supplied the endpoint records it in the receipt; otherwise the endpoint's declared default seed applies."},{"name":"seed","description":"Set the seed used by the simulated world's random number generators for subsequent steps, without resetting the world. The accepted seed is echoed in the receipt."}],"tags":["fixed-wing","flight-control","jsbsim","reinforcement-learning","simulation","gymnasium"],"backends":["fake"],"served_backend":"fake","evidence":"contract_checked","upstream":{"repo_url":"https://github.com/sryu1/jsbgym","commit":"80adc75514ac2cf2d7120cc436a1cbfa49ba0bc8","license":"MIT"},"stars":52,"install":{"openai4s":"openai4s lab add robots/sryu1__jsbgym","mhs":"mhs serve robots/sryu1__jsbgym --port 7400","mcp":"mhs serve robots/sryu1__jsbgym --mcp"}},
{"id":"robots/stanfordvl__behavior-1k","name":"BEHAVIOR-1K OmniGibson environment (simulated)","device_id":"mhs://localhost/behavior-1k","track":"robots","category":"Simulation","topic":"robot manipulation","kind":"world.sim","vendor":"Stanford Vision and Learning Lab","model":"BEHAVIOR-1K (OmniGibson)","mode":"simulated","risk":"R0","family":"gymnasium","role":"sim-env","intro":"BEHAVIOR-1K OmniGibson environment (simulated), adapted from stanfordvl/behavior-1k. It reads `observation`, `reward`, `terminated`, `truncated` and 4 more; runs `step`, `reset` and `seed`. `step`: advance the simulated world by a bounded number of fixed timesteps, optionally applying an action for each step, and return the resulting observation and terminal flags. A simulator: the market serves it with a stand-in that needs no simulator install.","measures":["observation","reward","terminated","truncated","tick","episode","seed","info"],"adjusts":[],"actions":[{"name":"step","description":"Advance the simulated world by a bounded number of fixed timesteps, optionally applying an action for each step, and return the resulting observation and terminal flags."},{"name":"reset","description":"Reset the simulated world to a scenario start state and return the initial observation. When a seed is supplied the endpoint records it in the receipt; otherwise the endpoint's declared default seed applies."},{"name":"seed","description":"Set the seed used by the simulated world's random number generators for subsequent steps, without resetting the world. The accepted seed is echoed in the receipt."}],"tags":["behavior-1k","omnigibson","household","embodied-ai","reinforcement-learning","simulation","gymnasium"],"backends":["fake"],"served_backend":"fake","evidence":"contract_checked","upstream":{"repo_url":"https://github.com/stanfordvl/behavior-1k","commit":"cd484e0477e79bf1f17d373af232c53431ccc660","license":"MIT"},"stars":1739,"install":{"openai4s":"openai4s lab add robots/stanfordvl__behavior-1k","mhs":"mhs serve robots/stanfordvl__behavior-1k --port 7400","mcp":"mhs serve robots/stanfordvl__behavior-1k --mcp"}},
{"id":"robots/stanfordvl__gibsonenv","name":"Gibson AntNavigateEnv (PyBullet ant navigation)","device_id":"mhs://localhost/gibson-ant","track":"robots","category":"Simulation","topic":"mobile robots","kind":"world.sim","vendor":"Stanford University","model":"AntNavigateEnv","mode":"simulated","risk":"R0","family":"gymnasium","role":"sim-env","intro":"Gibson AntNavigateEnv (PyBullet ant navigation), adapted from stanfordvl/gibsonenv. It reads `observation`, `reward`, `terminated`, `truncated` and 4 more; runs `step`, `reset` and `seed`. `step`: advance the simulated world by a bounded number of fixed timesteps, optionally applying an action for each step, and return the resulting observation and terminal flags. A simulator: the market serves it with a stand-in that needs no simulator install.","measures":["observation","reward","terminated","truncated","tick","episode","seed","info"],"adjusts":[],"actions":[{"name":"step","description":"Advance the simulated world by a bounded number of fixed timesteps, optionally applying an action for each step, and return the resulting observation and terminal flags."},{"name":"reset","description":"Reset the simulated world to a scenario start state and return the initial observation. When a seed is supplied the endpoint records it in the receipt; otherwise the endpoint's declared default seed applies."},{"name":"seed","description":"Set the seed used by the simulated world's random number generators for subsequent steps, without resetting the world. The accepted seed is echoed in the receipt."}],"tags":["gibson","ant","navigation","pybullet","reinforcement-learning","simulation","gymnasium"],"backends":["fake"],"served_backend":"fake","evidence":"contract_checked","upstream":{"repo_url":"https://github.com/stanfordvl/gibsonenv","commit":"f474d9efd5b5ef703e3bf630a6f7448b54875d0c","license":"MIT"},"stars":948,"install":{"openai4s":"openai4s lab add robots/stanfordvl__gibsonenv","mhs":"mhs serve robots/stanfordvl__gibsonenv --port 7400","mcp":"mhs serve robots/stanfordvl__gibsonenv --mcp"}},
{"id":"robots/stanfordvl__lasersuite","name":"Surreal Robotics Suite DoorOpen environment","device_id":"mhs://localhost/robosuite-door-open","track":"robots","category":"Simulation","topic":"robot arm manipulation","kind":"world.sim","vendor":"Stanford Vision and Learning Lab","model":"Surreal Robotics Suite DoorOpen","mode":"simulated","risk":"R0","family":"mujoco","role":"sim-env","intro":"Surreal Robotics Suite DoorOpen environment, adapted from stanfordvl/lasersuite. It reads `observation`, `tick`, `seed`, `reward` and 1 more; runs `reset_world` and `step`. `reset_world`: reset the simulated world to a scenario start state and return the initial observation. When a seed is supplied the endpoint records it in the receipt; otherwise the endpoint's declared default seed applies. A simulator: the market serves it with a stand-in that needs no simulator install.","measures":["observation","tick","seed","reward","terminated"],"adjusts":[],"actions":[{"name":"reset_world","description":"Reset the simulated world to a scenario start state and return the initial observation. When a seed is supplied the endpoint records it in the receipt; otherwise the endpoint's declared default seed applies."},{"name":"step","description":"Advance the simulated world by a bounded number of fixed timesteps, optionally applying an action for each step, and return the resulting observation and terminal flags."}],"tags":["door-open","manipulation","mujoco","robosuite","simulation","robot"],"backends":["fake"],"served_backend":"fake","evidence":"contract_checked","upstream":{"repo_url":"https://github.com/stanfordvl/lasersuite","commit":"8b78c3d202f2a4b8712c5f228feaf5fae61f16e9","license":"MIT"},"stars":13,"install":{"openai4s":"openai4s lab add robots/stanfordvl__lasersuite","mhs":"mhs serve robots/stanfordvl__lasersuite --port 7400","mcp":"mhs serve robots/stanfordvl__lasersuite --mcp"}},
{"id":"robots/stepjam__rlbench","name":"RLBench reach_target (state observations)","device_id":"mhs://localhost/rlbench-reach-target","track":"robots","category":"Simulation","topic":"robot manipulation","kind":"world.sim","vendor":"Stephen James","model":"RLBench 1.2.0 reach_target-state-v0","mode":"simulated","risk":"R0","family":"gymnasium","role":"sim-env","intro":"RLBench reach_target (state observations), adapted from stepjam/rlbench. It reads `observation`, `reward`, `terminated`, `truncated` and 4 more; runs `step`, `reset` and `seed`. `step`: advance the simulated world by a bounded number of fixed timesteps, optionally applying an action for each step, and return the resulting observation and terminal flags. A simulator: the market serves it with a stand-in that needs no simulator install.","measures":["observation","reward","terminated","truncated","tick","episode","seed","info"],"adjusts":[],"actions":[{"name":"step","description":"Advance the simulated world by a bounded number of fixed timesteps, optionally applying an action for each step, and return the resulting observation and terminal flags."},{"name":"reset","description":"Reset the simulated world to a scenario start state and return the initial observation. When a seed is supplied the endpoint records it in the receipt; otherwise the endpoint's declared default seed applies."},{"name":"seed","description":"Set the seed used by the simulated world's random number generators for subsequent steps, without resetting the world. The accepted seed is echoed in the receipt."}],"tags":["rlbench","robot-manipulation","reach-target","reinforcement-learning","simulation","gymnasium"],"backends":["fake"],"served_backend":"fake","evidence":"contract_checked","upstream":{"repo_url":"https://github.com/stepjam/rlbench","commit":"02720bba4c73fe02eb75df946b8791b806028a9d","license":"LicenseRef-noncommercial"},"stars":1827,"install":{"openai4s":"openai4s lab add robots/stepjam__rlbench","mhs":"mhs serve robots/stepjam__rlbench --port 7400","mcp":"mhs serve robots/stepjam__rlbench --mcp"}},
{"id":"robots/stereolabs__zed-ros2-wrapper","name":"Stereolabs ZED ROS 2 wrapper","device_id":"mhs://localhost/zed","track":"robots","category":"Sensors and cameras","topic":null,"kind":"sensor.camera","vendor":"Stereolabs","model":null,"mode":"hardware","risk":"R0","family":"ros","role":"device-driver","intro":"Stereolabs ZED ROS 2 wrapper, adapted from stereolabs/zed-ros2-wrapper. It runs `cap_sensing_image_v1`. `cap_sensing_image_v1`: capture a single image from a named camera with a declared resolution and exposure and return an image artifact reference. A hardware driver: the market serves its fake backend, so no instrument is needed.","measures":[],"adjusts":[],"actions":[{"name":"cap_sensing_image_v1","description":"Capture a single image from a named camera with a declared resolution and exposure and return an image artifact reference."}],"tags":["ros","ros2","camera","stereolabs","zed","image","rgb"],"backends":["fake"],"served_backend":"fake","evidence":"contract_checked","upstream":{"repo_url":"https://github.com/stereolabs/zed-ros2-wrapper","commit":"b19902daf0136b6e841b5e415c2d01f425411c45","license":"Apache-2.0"},"stars":340,"install":{"openai4s":"openai4s lab add robots/stereolabs__zed-ros2-wrapper","mhs":"mhs serve robots/stereolabs__zed-ros2-wrapper --port 7400","mcp":"mhs serve robots/stereolabs__zed-ros2-wrapper --mcp"}},
{"id":"robots/stevemacenski__ros2_ouster_drivers","name":"Ouster OS-x lidar ROS 2 driver","device_id":"mhs://localhost/ouster-lidar","track":"robots","category":"Sensors and cameras","topic":null,"kind":"sensor.depth","vendor":"Ouster","model":null,"mode":"hardware","risk":"R0","family":"ros","role":"device-driver","intro":"Ouster OS-x lidar ROS 2 driver, adapted from stevemacenski/ros2_ouster_drivers. It runs `capture_point_cloud`. `capture_point_cloud`: capture a depth point cloud over a declared range and return a point-cloud artifact reference with the point count and coordinate frame. A hardware driver: the market serves its fake backend, so no instrument is needed.","measures":[],"adjusts":[],"actions":[{"name":"capture_point_cloud","description":"Capture a depth point cloud over a declared range and return a point-cloud artifact reference with the point count and coordinate frame."}],"tags":["ros","ros2","ouster","lidar","pointcloud","sensing","depth"],"backends":["fake"],"served_backend":"fake","evidence":"contract_checked","upstream":{"repo_url":"https://github.com/stevemacenski/ros2_ouster_drivers","commit":"19c2523025e3e55a2fa803581e4e830e467a9d47","license":"Apache-2.0"},"stars":0,"install":{"openai4s":"openai4s lab add robots/stevemacenski__ros2_ouster_drivers","mhs":"mhs serve robots/stevemacenski__ros2_ouster_drivers --port 7400","mcp":"mhs serve robots/stevemacenski__ros2_ouster_drivers --mcp"}},
{"id":"robots/strands-labs__robots","name":"Yahboom ROSMASTER M3 Pro","device_id":"mhs://localhost/yahboom-m3pro","track":"robots","category":"Robot arms and grippers","topic":null,"kind":"robot.arm","vendor":"Yahboom","model":"ROSMASTER M3 Pro with the DOFBOT-Pro arm","mode":"hardware","risk":"R2","family":"python-object","role":"device-driver","intro":"Yahboom ROSMASTER M3 Pro, adapted from strands-labs/robots. It reads `connected`, `observation`, `commanded_arm_pose` and `sensors`; runs `move_joints`, `home`, `set_gripper`, `drive_base` and 1 more. `move_joints`: command one or more actuated joints to target positions in joint space, optionally over a declared duration, and report whether the target was reached within tolerance. A hardware driver: the market serves its fake backend, so no instrument is needed.","measures":["connected","observation","commanded_arm_pose","sensors"],"adjusts":[],"actions":[{"name":"move_joints","description":"Command one or more actuated joints to target positions in joint space, optionally over a declared duration, and report whether the target was reached within tolerance."},{"name":"home","description":"Move the arm to the vendor grasp-init pose with the gripper open"},{"name":"set_gripper","description":"Open or close the gripper and leave the other five servos where they are"},{"name":"drive_base","description":"Drive the mecanum base with a Twist in SI units for a bounded duration, then stop"},{"name":"stop_motion","description":"Stop all motion on the resource with a declared deceleration profile and report the stopping position. This capability is always cancellable=false and is exempt from rate limiting."}],"tags":["robot arm","mobile base","mecanum","gripper","ros2","yahboom","m3pro"],"backends":["fake","hardware"],"served_backend":"fake","evidence":"contract_checked","upstream":{"repo_url":"https://github.com/strands-labs/robots","commit":"f19439bf8c80e7ae6f0fdc0f003d850d638dd97d","license":"Apache-2.0"},"stars":0,"install":{"openai4s":"openai4s lab add robots/strands-labs__robots","mhs":"mhs serve robots/strands-labs__robots --port 7400","mcp":"mhs serve robots/strands-labs__robots --mcp"}},
{"id":"robots/suhrudhsarathy__drone_sim","name":"drone_sim SimpleDroneEnv (legacy Gym quadcopter)","device_id":"mhs://localhost/drone-sim","track":"robots","category":"Simulation","topic":"UAVs","kind":"world.sim","vendor":"Suhrudh Sarathy","model":"SimpleDroneEnv","mode":"simulated","risk":"R0","family":"gymnasium","role":"sim-env","intro":"drone_sim SimpleDroneEnv (legacy Gym quadcopter), adapted from suhrudhsarathy/drone_sim. It reads `observation`, `reward`, `terminated`, `truncated` and 4 more; runs `step`, `reset` and `seed`. `step`: advance the simulated world by a bounded number of fixed timesteps, optionally applying an action for each step, and return the resulting observation and terminal flags. A simulator: the market serves it with a stand-in that needs no simulator install.","measures":["observation","reward","terminated","truncated","tick","episode","seed","info"],"adjusts":[],"actions":[{"name":"step","description":"Advance the simulated world by a bounded number of fixed timesteps, optionally applying an action for each step, and return the resulting observation and terminal flags."},{"name":"reset","description":"Reset the simulated world to a scenario start state and return the initial observation. When a seed is supplied the endpoint records it in the receipt; otherwise the endpoint's declared default seed applies."},{"name":"seed","description":"Set the seed used by the simulated world's random number generators for subsequent steps, without resetting the world. The accepted seed is echoed in the receipt."}],"tags":["drone","quadcopter","rigid-body","reinforcement-learning","simulation","gym"],"backends":["fake"],"served_backend":"fake","evidence":"contract_checked","upstream":{"repo_url":"https://github.com/suhrudhsarathy/drone_sim","commit":"1a324f178a5719676bdb0caaa2a2d545a7158fdd","license":"MIT"},"stars":21,"install":{"openai4s":"openai4s lab add robots/suhrudhsarathy__drone_sim","mhs":"mhs serve robots/suhrudhsarathy__drone_sim --port 7400","mcp":"mhs serve robots/suhrudhsarathy__drone_sim --mcp"}},
{"id":"robots/sunblaze-ucb__rl-generalization","name":"Sunblaze CartPole-v0 (deterministic classic control)","device_id":"mhs://localhost/sunblaze-cartpole","track":"robots","category":"Simulation","topic":null,"kind":"world.sim","vendor":"UC Berkeley, Intel Labs and contributors","model":"SunblazeCartPole-v0","mode":"simulated","risk":"R0","family":"gymnasium","role":"sim-env","intro":"Sunblaze CartPole-v0 (deterministic classic control), adapted from sunblaze-ucb/rl-generalization. It reads `observation`, `reward`, `terminated`, `truncated` and 4 more; runs `step`, `reset` and `seed`. `step`: advance the simulated world by a bounded number of fixed timesteps, optionally applying an action for each step, and return the resulting observation and terminal flags. A simulator: the market serves it with a stand-in that needs no simulator install.","measures":["observation","reward","terminated","truncated","tick","episode","seed","info"],"adjusts":[],"actions":[{"name":"step","description":"Advance the simulated world by a bounded number of fixed timesteps, optionally applying an action for each step, and return the resulting observation and terminal flags."},{"name":"reset","description":"Reset the simulated world to a scenario start state and return the initial observation. When a seed is supplied the endpoint records it in the receipt; otherwise the endpoint's declared default seed applies."},{"name":"seed","description":"Set the seed used by the simulated world's random number generators for subsequent steps, without resetting the world. The accepted seed is echoed in the receipt."}],"tags":["cartpole","classic-control","reinforcement-learning","simulation","gym"],"backends":["fake"],"served_backend":"fake","evidence":"contract_checked","upstream":{"repo_url":"https://github.com/sunblaze-ucb/rl-generalization","commit":"5e05aa108aeadd4cf21f45d56128e9da3bddc14c","license":"MIT"},"stars":0,"install":{"openai4s":"openai4s lab add robots/sunblaze-ucb__rl-generalization","mhs":"mhs serve robots/sunblaze-ucb__rl-generalization --port 7400","mcp":"mhs serve robots/sunblaze-ucb__rl-generalization --mcp"}},
{"id":"robots/svengronauer__phoenix-drone-simulation","name":"Phoenix Drone Simulation DroneHoverSimpleEnv-v0","device_id":"mhs://localhost/phoenix-hover","track":"robots","category":"Simulation","topic":"UAVs","kind":"world.sim","vendor":"Sven Gronauer","model":"CrazyFlie 2.1 / DroneHoverSimpleEnv-v0","mode":"simulated","risk":"R0","family":"gymnasium","role":"sim-env","intro":"Phoenix Drone Simulation DroneHoverSimpleEnv-v0, adapted from svengronauer/phoenix-drone-simulation. It reads `observation`, `reward`, `terminated`, `truncated` and 4 more; runs `step`, `reset` and `seed`. `step`: advance the simulated world by a bounded number of fixed timesteps, optionally applying an action for each step, and return the resulting observation and terminal flags. A simulator: the market serves it with a stand-in that needs no simulator install.","measures":["observation","reward","terminated","truncated","tick","episode","seed","info"],"adjusts":[],"actions":[{"name":"step","description":"Advance the simulated world by a bounded number of fixed timesteps, optionally applying an action for each step, and return the resulting observation and terminal flags."},{"name":"reset","description":"Reset the simulated world to a scenario start state and return the initial observation. When a seed is supplied the endpoint records it in the receipt; otherwise the endpoint's declared default seed applies."},{"name":"seed","description":"Set the seed used by the simulated world's random number generators for subsequent steps, without resetting the world. The accepted seed is echoed in the receipt."}],"tags":["drone","quadrotor","crazyflie","reinforcement-learning","simulation","gymnasium"],"backends":["fake"],"served_backend":"fake","evidence":"contract_checked","upstream":{"repo_url":"https://github.com/svengronauer/phoenix-drone-simulation","commit":"c5d690732976351f5bbea4161913d98c376a4f04","license":"MIT"},"stars":39,"install":{"openai4s":"openai4s lab add robots/svengronauer__phoenix-drone-simulation","mhs":"mhs serve robots/svengronauer__phoenix-drone-simulation --port 7400","mcp":"mhs serve robots/svengronauer__phoenix-drone-simulation --mcp"}},
{"id":"robots/swirl-uk__bigym2","name":"BiGym 2.0 DrawerTopOpenG1 (G1 humanoid manipulation)","device_id":"mhs://localhost/bigym2-drawer-top-open","track":"robots","category":"Simulation","topic":"humanoid robots","kind":"world.sim","vendor":"swirl-uk","model":"BiGym 2.0 / drawer_top_open","mode":"simulated","risk":"R0","family":"gymnasium","role":"sim-env","intro":"BiGym 2.0 DrawerTopOpenG1 (G1 humanoid manipulation), adapted from swirl-uk/bigym2. It reads `observation`, `reward`, `terminated`, `truncated` and 4 more; runs `step`, `reset` and `seed`. `step`: advance the simulated world by a bounded number of fixed timesteps, optionally applying an action for each step, and return the resulting observation and terminal flags. A simulator: the market serves it with a stand-in that needs no simulator install.","measures":["observation","reward","terminated","truncated","tick","episode","seed","info"],"adjusts":[],"actions":[{"name":"step","description":"Advance the simulated world by a bounded number of fixed timesteps, optionally applying an action for each step, and return the resulting observation and terminal flags."},{"name":"reset","description":"Reset the simulated world to a scenario start state and return the initial observation. When a seed is supplied the endpoint records it in the receipt; otherwise the endpoint's declared default seed applies."},{"name":"seed","description":"Set the seed used by the simulated world's random number generators for subsequent steps, without resetting the world. The accepted seed is echoed in the receipt."}],"tags":["bigym2","humanoid","manipulation","mujoco","simulation","reinforcement-learning","gymnasium"],"backends":["fake"],"served_backend":"fake","evidence":"contract_checked","upstream":{"repo_url":"https://github.com/swirl-uk/bigym2","commit":"f1b846216b3f985d8640e5703112980de05c0d22","license":"Apache-2.0"},"stars":11,"install":{"openai4s":"openai4s lab add robots/swirl-uk__bigym2","mhs":"mhs serve robots/swirl-uk__bigym2 --port 7400","mcp":"mhs serve robots/swirl-uk__bigym2 --mcp"}},
{"id":"robots/szenergy__duro_gps_driver","name":"Duro Inertial GPS ROS 1 driver","device_id":"mhs://localhost/duro-gps","track":"robots","category":"Sensors and cameras","topic":null,"kind":"sensor","vendor":"szenergy","model":"Duro Inertial / Piksi Multi Inertial","mode":"hardware","risk":"R0","family":"ros","role":"device-driver","intro":"Duro Inertial GPS ROS 1 driver, adapted from szenergy/duro_gps_driver. It reads `read_fix`, `read_imu`, `read_mag`, `read_time_reference` and 5 more. A hardware driver: the market serves its fake backend, so no instrument is needed.","measures":["read_fix","read_imu","read_mag","read_time_reference","read_fix_status","read_fix_status_text","read_pose","read_odometry","read_attitude"],"adjusts":[],"actions":[],"tags":["ros","ros1","gps","gnss","ins","imu","magnetometer","navigation","sensor"],"backends":["fake"],"served_backend":"fake","evidence":"contract_checked","upstream":{"repo_url":"https://github.com/szenergy/duro_gps_driver","commit":"d09c1f33aa07ba89d082c3e213282e2bbdbbe725","license":"BSD-3-Clause"},"stars":0,"install":{"openai4s":"openai4s lab add robots/szenergy__duro_gps_driver","mhs":"mhs serve robots/szenergy__duro_gps_driver --port 7400","mcp":"mhs serve robots/szenergy__duro_gps_driver --mcp"}},
{"id":"robots/tatp-233__discoverse","name":"MMK2 mobile manipulator floor scene (MuJoCo)","device_id":"mhs://localhost/mmk2-floor","track":"robots","category":"Simulation","topic":"robot arm manipulation","kind":"world.sim","vendor":"TATP-233 / DISCOVERSE","model":"MMK2 floor scene","mode":"simulated","risk":"R0","family":"mujoco","role":"sim-env","intro":"MMK2 mobile manipulator floor scene (MuJoCo), adapted from tatp-233/discoverse. It reads `time_ms`, `qpos`, `qvel`, `ctrl` and 4 more; runs `step` and `reset`. `step`: advance the simulated world by a bounded number of fixed timesteps, optionally applying an action for each step, and return the resulting observation and terminal flags. A simulator: the market serves it with a stand-in that needs no simulator install.","measures":["time_ms","qpos","qvel","ctrl","tick","timestep_ms","seed","native_checkpoint"],"adjusts":[],"actions":[{"name":"step","description":"Advance the simulated world by a bounded number of fixed timesteps, optionally applying an action for each step, and return the resulting observation and terminal flags."},{"name":"reset","description":"Reset the simulated world to a scenario start state and return the initial observation. When a seed is supplied the endpoint records it in the receipt; otherwise the endpoint's declared default seed applies."}],"tags":["mujoco","discoverse","mmk2","mobile manipulator","dual arm","simulation"],"backends":["fake"],"served_backend":"fake","evidence":"contract_checked","upstream":{"repo_url":"https://github.com/tatp-233/discoverse","commit":"d67f47c084aba0e0cf422a8725235f8b9238655a","license":"MIT"},"stars":0,"install":{"openai4s":"openai4s lab add robots/tatp-233__discoverse","mhs":"mhs serve robots/tatp-233__discoverse --port 7400","mcp":"mhs serve robots/tatp-233__discoverse --mcp"}},
{"id":"robots/tau-intelligence__mujoco-drones-gym","name":"MuJoCo multi-drone gym HoverAviary (single-drone hover)","device_id":"mhs://localhost/hover-aviary","track":"robots","category":"Simulation","topic":null,"kind":"world.sim","vendor":"tau-intelligence","model":"HoverAviary","mode":"simulated","risk":"R0","family":"gymnasium","role":"sim-env","intro":"MuJoCo multi-drone gym HoverAviary (single-drone hover), adapted from tau-intelligence/mujoco-drones-gym. It reads `observation`, `reward`, `terminated`, `truncated` and 4 more; runs `step`, `reset` and `seed`. `step`: advance the simulated world by a bounded number of fixed timesteps, optionally applying an action for each step, and return the resulting observation and terminal flags. A simulator: the market serves it with a stand-in that needs no simulator install.","measures":["observation","reward","terminated","truncated","tick","episode","seed","info"],"adjusts":[],"actions":[{"name":"step","description":"Advance the simulated world by a bounded number of fixed timesteps, optionally applying an action for each step, and return the resulting observation and terminal flags."},{"name":"reset","description":"Reset the simulated world to a scenario start state and return the initial observation. When a seed is supplied the endpoint records it in the receipt; otherwise the endpoint's declared default seed applies."},{"name":"seed","description":"Set the seed used by the simulated world's random number generators for subsequent steps, without resetting the world. The accepted seed is echoed in the receipt."}],"tags":["mujoco","quadcopter","hover","reinforcement-learning","simulation","gymnasium"],"backends":["fake"],"served_backend":"fake","evidence":"contract_checked","upstream":{"repo_url":"https://github.com/tau-intelligence/mujoco-drones-gym","commit":"ca170dc6760d422e47ef46fb3af46f8cd20410eb","license":"MIT"},"stars":55,"install":{"openai4s":"openai4s lab add robots/tau-intelligence__mujoco-drones-gym","mhs":"mhs serve robots/tau-intelligence__mujoco-drones-gym --port 7400","mcp":"mhs serve robots/tau-intelligence__mujoco-drones-gym --mcp"}},
{"id":"robots/telehuman__humanoidgen","name":"HumanoidGen blocks_stack_easy (ManiSkill table task)","device_id":"mhs://localhost/humanoidgen_blocks_stack_easy","track":"robots","category":"Simulation","topic":"humanoid robots","kind":"world.sim","vendor":"TeleHuman","model":"HumanoidGen blocks_stack_easy","mode":"simulated","risk":"R0","family":"gymnasium","role":"sim-env","intro":"HumanoidGen blocks_stack_easy (ManiSkill table task), adapted from telehuman/humanoidgen. It reads `observation`, `reward`, `terminated`, `truncated` and 4 more; runs `step`, `reset` and `seed`. `step`: advance the simulated world by a bounded number of fixed timesteps, optionally applying an action for each step, and return the resulting observation and terminal flags. A simulator: the market serves it with a stand-in that needs no simulator install.","measures":["observation","reward","terminated","truncated","tick","episode","seed","info"],"adjusts":[],"actions":[{"name":"step","description":"Advance the simulated world by a bounded number of fixed timesteps, optionally applying an action for each step, and return the resulting observation and terminal flags."},{"name":"reset","description":"Reset the simulated world to a scenario start state and return the initial observation. When a seed is supplied the endpoint records it in the receipt; otherwise the endpoint's declared default seed applies."},{"name":"seed","description":"Set the seed used by the simulated world's random number generators for subsequent steps, without resetting the world. The accepted seed is echoed in the receipt."}],"tags":["humanoidgen","blocks-stack","manipulation","table","maniskill","sapien","simulation","gymnasium"],"backends":["fake"],"served_backend":"fake","evidence":"contract_checked","upstream":{"repo_url":"https://github.com/telehuman/humanoidgen","commit":"015b808fd316629f499a903b5968f5b37fcd7573","license":"NOASSERTION"},"stars":0,"install":{"openai4s":"openai4s lab add robots/telehuman__humanoidgen","mhs":"mhs serve robots/telehuman__humanoidgen --port 7400","mcp":"mhs serve robots/telehuman__humanoidgen --mcp"}},
{"id":"robots/tenfoldpaper__multipanda_ros2","name":"multipanda_ros2 dual Panda MuJoCo scene","device_id":"mhs://localhost/multipanda-ros2","track":"robots","category":"Simulation","topic":"robot arm manipulation","kind":"world.sim","vendor":"tenfoldpaper","model":"dual_scene","mode":"simulated","risk":"R0","family":"mujoco","role":"sim-env","intro":"multipanda_ros2 dual Panda MuJoCo scene, adapted from tenfoldpaper/multipanda_ros2. It reads `time_ms`, `qpos`, `qvel`, `ctrl` and 4 more; runs `step` and `reset`. `step`: advance the simulated world by a bounded number of fixed timesteps, optionally applying an action for each step, and return the resulting observation and terminal flags. A simulator: the market serves it with a stand-in that needs no simulator install.","measures":["time_ms","qpos","qvel","ctrl","tick","timestep_ms","seed","native_checkpoint"],"adjusts":[],"actions":[{"name":"step","description":"Advance the simulated world by a bounded number of fixed timesteps, optionally applying an action for each step, and return the resulting observation and terminal flags."},{"name":"reset","description":"Reset the simulated world to a scenario start state and return the initial observation. When a seed is supplied the endpoint records it in the receipt; otherwise the endpoint's declared default seed applies."}],"tags":["ros2","multipanda","franka","panda","mujoco","simulation","robot-arm","dual-arm"],"backends":["fake"],"served_backend":"fake","evidence":"contract_checked","upstream":{"repo_url":"https://github.com/tenfoldpaper/multipanda_ros2","commit":"9a30ca04b4d72e832934f19b35f540931874ec7e","license":"Apache-2.0"},"stars":0,"install":{"openai4s":"openai4s lab add robots/tenfoldpaper__multipanda_ros2","mhs":"mhs serve robots/tenfoldpaper__multipanda_ros2 --port 7400","mcp":"mhs serve robots/tenfoldpaper__multipanda_ros2 --mcp"}},
{"id":"robots/tobirohrer__building-energy-storage-simulation","name":"Building Energy Storage Simulation (battery, solar and price-varying grid)","device_id":"mhs://localhost/building-energy-storage-simulation","track":"robots","category":"Simulation","topic":null,"kind":"world.sim","vendor":"Tobias Rohrer","model":"building-energy-storage-simulation","mode":"simulated","risk":"R0","family":"gymnasium","role":"sim-env","intro":"Building Energy Storage Simulation (battery, solar and price-varying grid), adapted from tobirohrer/building-energy-storage-simulation. It reads `observation`, `reward`, `terminated`, `truncated` and 4 more; runs `step`, `reset` and `seed`. `step`: advance the simulated world by a bounded number of fixed timesteps, optionally applying an action for each step, and return the resulting observation and terminal flags. A simulator: the market serves it with a stand-in that needs no simulator install.","measures":["observation","reward","terminated","truncated","tick","episode","seed","info"],"adjusts":[],"actions":[{"name":"step","description":"Advance the simulated world by a bounded number of fixed timesteps, optionally applying an action for each step, and return the resulting observation and terminal flags."},{"name":"reset","description":"Reset the simulated world to a scenario start state and return the initial observation. When a seed is supplied the endpoint records it in the receipt; otherwise the endpoint's declared default seed applies."},{"name":"seed","description":"Set the seed used by the simulated world's random number generators for subsequent steps, without resetting the world. The accepted seed is echoed in the receipt."}],"tags":["building-energy","battery","solar","energy-management","reinforcement-learning","simulation","gymnasium"],"backends":["fake"],"served_backend":"fake","evidence":"contract_checked","upstream":{"repo_url":"https://github.com/tobirohrer/building-energy-storage-simulation","commit":"05b9197c8d6f600bed2a5b092db6de6f07bf3c65","license":"MIT"},"stars":64,"install":{"openai4s":"openai4s lab add robots/tobirohrer__building-energy-storage-simulation","mhs":"mhs serve robots/tobirohrer__building-energy-storage-simulation --port 7400","mcp":"mhs serve robots/tobirohrer__building-energy-storage-simulation --mcp"}},
{"id":"robots/tommasovandermeer__social-navigation-pyenvs","name":"Social Navigation Gym SocialGym-v0","device_id":"mhs://localhost/social-nav","track":"robots","category":"Simulation","topic":"mobile navigation","kind":"world.sim","vendor":"Tommaso Van Der Meer","model":"SocialGym-v0","mode":"simulated","risk":"R0","family":"gymnasium","role":"sim-env","intro":"Social Navigation Gym SocialGym-v0, adapted from tommasovandermeer/social-navigation-pyenvs. It reads `observation`, `reward`, `terminated`, `truncated` and 4 more; runs `step`, `reset` and `seed`. `step`: advance the simulated world by a bounded number of fixed timesteps, optionally applying an action for each step, and return the resulting observation and terminal flags. A simulator: the market serves it with a stand-in that needs no simulator install.","measures":["observation","reward","terminated","truncated","tick","episode","seed","info"],"adjusts":[],"actions":[{"name":"step","description":"Advance the simulated world by a bounded number of fixed timesteps, optionally applying an action for each step, and return the resulting observation and terminal flags."},{"name":"reset","description":"Reset the simulated world to a scenario start state and return the initial observation. When a seed is supplied the endpoint records it in the receipt; otherwise the endpoint's declared default seed applies."},{"name":"seed","description":"Set the seed used by the simulated world's random number generators for subsequent steps, without resetting the world. The accepted seed is echoed in the receipt."}],"tags":["social-navigation","crowd-simulation","reinforcement-learning","simulation","gymnasium"],"backends":["fake"],"served_backend":"fake","evidence":"contract_checked","upstream":{"repo_url":"https://github.com/tommasovandermeer/social-navigation-pyenvs","commit":"f9cd244d3e529247ca1031364de22954717b9493","license":"Apache-2.0"},"stars":17,"install":{"openai4s":"openai4s lab add robots/tommasovandermeer__social-navigation-pyenvs","mhs":"mhs serve robots/tommasovandermeer__social-navigation-pyenvs --port 7400","mcp":"mhs serve robots/tommasovandermeer__social-navigation-pyenvs --mcp"}},
{"id":"robots/tongji-cdi__temi","name":"Temi robot (temi.api:Temi)","device_id":"mhs://localhost/temi","track":"robots","category":"Mobile robots","topic":null,"kind":"robot.mobile_base","vendor":"Temi","model":"Temi telepresence robot","mode":"hardware","risk":"R2","family":"python-object","role":"device-driver","intro":"Temi robot (temi.api:Temi), adapted from tongji-cdi/temi. It runs `goto`, `speak`, `ask`, `interface` and 1 more. `goto`: go to a saved location and report whether Temi says it reached it. A hardware driver: the market serves its fake backend, so no instrument is needed.","measures":[],"adjusts":[],"actions":[{"name":"goto","description":"Go to a saved location and report whether Temi says it reached it"},{"name":"speak","description":"Say a sentence out loud"},{"name":"ask","description":"Ask a question, wait for the recognized answer and return it"},{"name":"interface","description":"Show a URL on Temi's screen"},{"name":"stop_motion","description":"Stop all motion with the Temi stop command; it takes no input"}],"tags":["mobile base","telepresence","navigation","speech","websocket","asyncio"],"backends":["fake","hardware"],"served_backend":"fake","evidence":"contract_checked","upstream":{"repo_url":"https://github.com/tongji-cdi/temi","commit":"ec0a395405df1583d3357fd944b0c43396b30a7c","license":"MIT"},"stars":0,"install":{"openai4s":"openai4s lab add robots/tongji-cdi__temi","mhs":"mhs serve robots/tongji-cdi__temi --port 7400","mcp":"mhs serve robots/tongji-cdi__temi --mcp"}},
{"id":"robots/tonyzhaozh__act","name":"ACT bimanual ViperX insertion scene (MuJoCo model)","device_id":"mhs://localhost/act","track":"robots","category":"Simulation","topic":"robot manipulation","kind":"world.sim","vendor":"Tony Z. Zhao","model":"ACT bimanual ViperX insertion","mode":"simulated","risk":"R0","family":"mujoco","role":"sim-env","intro":"ACT bimanual ViperX insertion scene (MuJoCo model), adapted from tonyzhaozh/act. It reads `time_ms`, `qpos`, `qvel`, `ctrl` and 4 more; runs `step` and `reset`. `step`: advance the simulated world by a bounded number of fixed timesteps, optionally applying an action for each step, and return the resulting observation and terminal flags. A simulator: the market serves it with a stand-in that needs no simulator install.","measures":["time_ms","qpos","qvel","ctrl","tick","timestep_ms","seed","native_checkpoint"],"adjusts":[],"actions":[{"name":"step","description":"Advance the simulated world by a bounded number of fixed timesteps, optionally applying an action for each step, and return the resulting observation and terminal flags."},{"name":"reset","description":"Reset the simulated world to a scenario start state and return the initial observation. When a seed is supplied the endpoint records it in the receipt; otherwise the endpoint's declared default seed applies."}],"tags":["act","aloha","bimanual","insertion","manipulation","mujoco","simulation","viperx"],"backends":["fake"],"served_backend":"fake","evidence":"contract_checked","upstream":{"repo_url":"https://github.com/tonyzhaozh/act","commit":"742c753c0d4a5d87076c8f69e5628c79a8cc5488","license":"MIT"},"stars":2263,"install":{"openai4s":"openai4s lab add robots/tonyzhaozh__act","mhs":"mhs serve robots/tonyzhaozh__act --port 7400","mcp":"mhs serve robots/tonyzhaozh__act --mcp"}},
{"id":"robots/toppers__hakoniwa-digital-twin","name":"Hakoniwa infra-sensor position publisher","device_id":"mhs://localhost/hakoniwa_infra_sensor","track":"robots","category":"Sensors and cameras","topic":null,"kind":"sensor","vendor":"toppers","model":"infra_sensor_urg","mode":"simulated","risk":"R1","family":"ros","role":"sim-env","intro":"Hakoniwa infra-sensor position publisher, adapted from toppers/hakoniwa-digital-twin. It reads `read_position`. A simulator: the market serves it with a stand-in that needs no simulator install.","measures":["read_position"],"adjusts":[],"actions":[],"tags":["ros","ros2","lidar","position","sensor","hakoniwa","simulation"],"backends":["fake"],"served_backend":"fake","evidence":"contract_checked","upstream":{"repo_url":"https://github.com/toppers/hakoniwa-digital-twin","commit":"1a2c15b8aade01696a81207c8f28a77013497384","license":"NOASSERTION"},"stars":9,"install":{"openai4s":"openai4s lab add robots/toppers__hakoniwa-digital-twin","mhs":"mhs serve robots/toppers__hakoniwa-digital-twin --port 7400","mcp":"mhs serve robots/toppers__hakoniwa-digital-twin --mcp"}},
{"id":"robots/tudelft-cns-atm__bluesky-gym","name":"BlueSky-Gym DescentEnv-v0 (vertical control)","device_id":"mhs://localhost/bluesky-descent","track":"robots","category":"Simulation","topic":null,"kind":"world.sim","vendor":"TU Delft CNS/ATM","model":"DescentEnv-v0","mode":"simulated","risk":"R0","family":"gymnasium","role":"sim-env","intro":"BlueSky-Gym DescentEnv-v0 (vertical control), adapted from tudelft-cns-atm/bluesky-gym. It reads `observation`, `reward`, `terminated`, `truncated` and 4 more; runs `step`, `reset` and `seed`. `step`: advance the simulated world by a bounded number of fixed timesteps, optionally applying an action for each step, and return the resulting observation and terminal flags. A simulator: the market serves it with a stand-in that needs no simulator install.","measures":["observation","reward","terminated","truncated","tick","episode","seed","info"],"adjusts":[],"actions":[{"name":"step","description":"Advance the simulated world by a bounded number of fixed timesteps, optionally applying an action for each step, and return the resulting observation and terminal flags."},{"name":"reset","description":"Reset the simulated world to a scenario start state and return the initial observation. When a seed is supplied the endpoint records it in the receipt; otherwise the endpoint's declared default seed applies."},{"name":"seed","description":"Set the seed used by the simulated world's random number generators for subsequent steps, without resetting the world. The accepted seed is echoed in the receipt."}],"tags":["air-traffic-management","bluesky","descent","vertical-control","reinforcement-learning","simulation","gymnasium"],"backends":["fake"],"served_backend":"fake","evidence":"contract_checked","upstream":{"repo_url":"https://github.com/tudelft-cns-atm/bluesky-gym","commit":"8d7d79c63a3dab5de0e7bd8c2afb74737377f2e5","license":"MIT"},"stars":83,"install":{"openai4s":"openai4s lab add robots/tudelft-cns-atm__bluesky-gym","mhs":"mhs serve robots/tudelft-cns-atm__bluesky-gym --port 7400","mcp":"mhs serve robots/tudelft-cns-atm__bluesky-gym --mcp"}},
{"id":"robots/tuojingai__softvtbench","name":"SoftVTBench Isaac-Libero-Franka-IK-v0 (Libero, Franka IK)","device_id":"mhs://localhost/softvtbench-libero-franka-ik","track":"robots","category":"Simulation","topic":"robot arm manipulation","kind":"world.sim","vendor":"TuojingAI","model":"SoftVTBench (Isaac-Libero-Franka-IK-v0)","mode":"simulated","risk":"R0","family":"gymnasium","role":"sim-env","intro":"SoftVTBench Isaac-Libero-Franka-IK-v0 (Libero, Franka IK), adapted from tuojingai/softvtbench. It reads `observation`, `reward`, `terminated`, `truncated` and 4 more; runs `step`, `reset` and `seed`. `step`: advance the simulated world by a bounded number of fixed timesteps, optionally applying an action for each step, and return the resulting observation and terminal flags. A simulator: the market serves it with a stand-in that needs no simulator install.","measures":["observation","reward","terminated","truncated","tick","episode","seed","info"],"adjusts":[],"actions":[{"name":"step","description":"Advance the simulated world by a bounded number of fixed timesteps, optionally applying an action for each step, and return the resulting observation and terminal flags."},{"name":"reset","description":"Reset the simulated world to a scenario start state and return the initial observation. When a seed is supplied the endpoint records it in the receipt; otherwise the endpoint's declared default seed applies."},{"name":"seed","description":"Set the seed used by the simulated world's random number generators for subsequent steps, without resetting the world. The accepted seed is echoed in the receipt."}],"tags":["softvtbench","isaac-lab","libero","franka","deformable","reinforcement-learning","simulation","gymnasium"],"backends":["fake"],"served_backend":"fake","evidence":"contract_checked","upstream":{"repo_url":"https://github.com/tuojingai/softvtbench","commit":"58056111f01e05bf1a4ae1dee75db4e3d9e7c5be","license":"Apache-2.0"},"stars":0,"install":{"openai4s":"openai4s lab add robots/tuojingai__softvtbench","mhs":"mhs serve robots/tuojingai__softvtbench --port 7400","mcp":"mhs serve robots/tuojingai__softvtbench --mcp"}},
{"id":"robots/turagalab__flybody","name":"FlyBody fruit fly MuJoCo model","device_id":"mhs://localhost/flybody","track":"robots","category":"Simulation","topic":"biology","kind":"world.sim","vendor":"Turaga Lab","model":"Drosophila melanogaster body model (fruitfly.xml)","mode":"simulated","risk":"R0","family":"mujoco","role":"sim-env","intro":"FlyBody fruit fly MuJoCo model, adapted from turagalab/flybody. It reads `time_ms`, `qpos`, `qvel`, `ctrl` and 4 more; runs `step` and `reset`. `step`: advance the simulated world by a bounded number of fixed timesteps, optionally applying an action for each step, and return the resulting observation and terminal flags. A simulator: the market serves it with a stand-in that needs no simulator install.","measures":["time_ms","qpos","qvel","ctrl","tick","timestep_ms","seed","native_checkpoint"],"adjusts":[],"actions":[{"name":"step","description":"Advance the simulated world by a bounded number of fixed timesteps, optionally applying an action for each step, and return the resulting observation and terminal flags."},{"name":"reset","description":"Reset the simulated world to a scenario start state and return the initial observation. When a seed is supplied the endpoint records it in the receipt; otherwise the endpoint's declared default seed applies."}],"tags":["mujoco","fruit-fly","drosophila","biomechanics","simulation"],"backends":["fake"],"served_backend":"fake","evidence":"contract_checked","upstream":{"repo_url":"https://github.com/turagalab/flybody","commit":"d015e9bfe441bd90ae431bac24c55cb74bdbce26","license":"Apache-2.0"},"stars":960,"install":{"openai4s":"openai4s lab add robots/turagalab__flybody","mhs":"mhs serve robots/turagalab__flybody --port 7400","mcp":"mhs serve robots/turagalab__flybody --mcp"}},
{"id":"robots/ubi-agni__mujoco_ros_pkgs","name":"MuJoCo ROS simulator","device_id":"mhs://localhost/mujoco_ros","track":"robots","category":"Simulation","topic":null,"kind":"world.sim","vendor":"ubi-agni","model":null,"mode":"simulated","risk":"R0","family":"ros","role":"sim-env","intro":"MuJoCo ROS simulator, adapted from ubi-agni/mujoco_ros_pkgs. It reads `get_sim_info`; runs `pause`. `pause`: pause the MuJoCo ROS simulator with the acknowledged set_pause service. A simulator: the market serves it with a stand-in that needs no simulator install.","measures":["get_sim_info"],"adjusts":[],"actions":[{"name":"pause","description":"Pause the MuJoCo ROS simulator with the acknowledged set_pause service"}],"tags":["ros","ros1","simulation","mujoco","pause","sim-info"],"backends":["fake"],"served_backend":"fake","evidence":"contract_checked","upstream":{"repo_url":"https://github.com/ubi-agni/mujoco_ros_pkgs","commit":"9304ca7ec254ac1aaa0c2f556513a9a51d28530e","license":"BSD-3-Clause"},"stars":142,"install":{"openai4s":"openai4s lab add robots/ubi-agni__mujoco_ros_pkgs","mhs":"mhs serve robots/ubi-agni__mujoco_ros_pkgs --port 7400","mcp":"mhs serve robots/ubi-agni__mujoco_ros_pkgs --mcp"}},
{"id":"robots/ubi-coro__magbotsim","name":"MagBotSim state-based push-box environment","device_id":"mhs://localhost/magbotsim-push-box","track":"robots","category":"Simulation","topic":"robot arm manipulation","kind":"world.sim","vendor":"ubi-coro","model":"magbotsim StateBasedPushBoxEnv-v0","mode":"simulated","risk":"R0","family":"gymnasium","role":"sim-env","intro":"MagBotSim state-based push-box environment, adapted from ubi-coro/magbotsim. It reads `observation`, `reward`, `terminated`, `truncated` and 4 more; runs `step`, `reset` and `seed`. `step`: advance the simulated world by a bounded number of fixed timesteps, optionally applying an action for each step, and return the resulting observation and terminal flags. A simulator: the market serves it with a stand-in that needs no simulator install.","measures":["observation","reward","terminated","truncated","tick","episode","seed","info"],"adjusts":[],"actions":[{"name":"step","description":"Advance the simulated world by a bounded number of fixed timesteps, optionally applying an action for each step, and return the resulting observation and terminal flags."},{"name":"reset","description":"Reset the simulated world to a scenario start state and return the initial observation. When a seed is supplied the endpoint records it in the receipt; otherwise the endpoint's declared default seed applies."},{"name":"seed","description":"Set the seed used by the simulated world's random number generators for subsequent steps, without resetting the world. The accepted seed is echoed in the receipt."}],"tags":["magbotsim","magnetic-robotics","reinforcement-learning","simulation","gymnasium","push-box"],"backends":["fake"],"served_backend":"fake","evidence":"contract_checked","upstream":{"repo_url":"https://github.com/ubi-coro/magbotsim","commit":"694e8582164de71fe58c7ef36c68fd4f2b57e054","license":"GPL-3.0"},"stars":10,"install":{"openai4s":"openai4s lab add robots/ubi-coro__magbotsim","mhs":"mhs serve robots/ubi-coro__magbotsim --port 7400","mcp":"mhs serve robots/ubi-coro__magbotsim --mcp"}},
{"id":"robots/umass-foundation-model__co-llm-agents","name":"TDW-MAT transport_challenge_MA (ThreeDWorld multi-agent transport)","device_id":"mhs://localhost/tdw-mat","track":"robots","category":"Simulation","topic":"mobile robots","kind":"world.sim","vendor":"UMass Foundation Model / CoELA","model":"ThreeDWorld Multi-Agent Transport","mode":"simulated","risk":"R0","family":"gymnasium","role":"sim-env","intro":"TDW-MAT transport_challenge_MA (ThreeDWorld multi-agent transport), adapted from umass-foundation-model/co-llm-agents. It reads `observation`, `reward`, `terminated`, `truncated` and 4 more; runs `step`, `reset` and `seed`. `step`: advance the simulated world by a bounded number of fixed timesteps, optionally applying an action for each step, and return the resulting observation and terminal flags. A simulator: the market serves it with a stand-in that needs no simulator install.","measures":["observation","reward","terminated","truncated","tick","episode","seed","info"],"adjusts":[],"actions":[{"name":"step","description":"Advance the simulated world by a bounded number of fixed timesteps, optionally applying an action for each step, and return the resulting observation and terminal flags."},{"name":"reset","description":"Reset the simulated world to a scenario start state and return the initial observation. When a seed is supplied the endpoint records it in the receipt; otherwise the endpoint's declared default seed applies."},{"name":"seed","description":"Set the seed used by the simulated world's random number generators for subsequent steps, without resetting the world. The accepted seed is echoed in the receipt."}],"tags":["gymnasium","simulation","multi-agent","transport","threedworld","reinforcement-learning"],"backends":["fake"],"served_backend":"fake","evidence":"contract_checked","upstream":{"repo_url":"https://github.com/umass-foundation-model/co-llm-agents","commit":"3e12dea925d735eefce33da71806ae9da6fcaf3f","license":"NOASSERTION"},"stars":0,"install":{"openai4s":"openai4s lab add robots/umass-foundation-model__co-llm-agents","mhs":"mhs serve robots/umass-foundation-model__co-llm-agents --port 7400","mcp":"mhs serve robots/umass-foundation-model__co-llm-agents --mcp"}},
{"id":"robots/unitreerobotics__unitree_mujoco","name":"Unitree H2 (MuJoCo)","device_id":"mhs://localhost/unitree-h2","track":"robots","category":"Simulation","topic":null,"kind":"world.sim","vendor":"Unitree Robotics","model":"H2","mode":"simulated","risk":"R0","family":"mujoco","role":"twin-candidate","intro":"Unitree H2 (MuJoCo), adapted from unitreerobotics/unitree_mujoco. It reads `time_ms`, `qpos`, `qvel`, `ctrl` and 4 more; runs `step` and `reset`. `step`: advance the simulated world by a bounded number of fixed timesteps, optionally applying an action for each step, and return the resulting observation and terminal flags. A simulator: the market serves it with a stand-in that needs no simulator install.","measures":["time_ms","qpos","qvel","ctrl","tick","timestep_ms","seed","native_checkpoint"],"adjusts":[],"actions":[{"name":"step","description":"Advance the simulated world by a bounded number of fixed timesteps, optionally applying an action for each step, and return the resulting observation and terminal flags."},{"name":"reset","description":"Reset the simulated world to a scenario start state and return the initial observation. When a seed is supplied the endpoint records it in the receipt; otherwise the endpoint's declared default seed applies."}],"tags":["h2","humanoid","mujoco","robot","simulation","unitree"],"backends":["fake"],"served_backend":"fake","evidence":"contract_checked","upstream":{"repo_url":"https://github.com/unitreerobotics/unitree_mujoco","commit":"1eb6642e3f3fdfb7fb13a9794fd6a2dd93ea0e7d","license":"BSD-3-Clause"},"stars":1232,"install":{"openai4s":"openai4s lab add robots/unitreerobotics__unitree_mujoco","mhs":"mhs serve robots/unitreerobotics__unitree_mujoco --port 7400","mcp":"mhs serve robots/unitreerobotics__unitree_mujoco --mcp"}},
{"id":"robots/unitreerobotics__unitree_sim_isaaclab","name":"Unitree G1 29-DOF Dex1 whole-body cylinder task (Isaac Lab)","device_id":"mhs://localhost/unitree-g1-isaaclab","track":"robots","category":"Simulation","topic":"humanoid robots","kind":"world.sim","vendor":"Unitree Robotics","model":"G1 29-DOF Dex1 whole-body (Isaac Lab task)","mode":"simulated","risk":"R0","family":"gymnasium","role":"sim-env","intro":"Unitree G1 29-DOF Dex1 whole-body cylinder task (Isaac Lab), adapted from unitreerobotics/unitree_sim_isaaclab. It reads `observation`, `reward`, `terminated`, `truncated` and 4 more; runs `step`, `reset` and `seed`. `step`: advance the simulated world by a bounded number of fixed timesteps, optionally applying an action for each step, and return the resulting observation and terminal flags. A simulator: the market serves it with a stand-in that needs no simulator install.","measures":["observation","reward","terminated","truncated","tick","episode","seed","info"],"adjusts":[],"actions":[{"name":"step","description":"Advance the simulated world by a bounded number of fixed timesteps, optionally applying an action for each step, and return the resulting observation and terminal flags."},{"name":"reset","description":"Reset the simulated world to a scenario start state and return the initial observation. When a seed is supplied the endpoint records it in the receipt; otherwise the endpoint's declared default seed applies."},{"name":"seed","description":"Set the seed used by the simulated world's random number generators for subsequent steps, without resetting the world. The accepted seed is echoed in the receipt."}],"tags":["unitree","g1","humanoid","mobile-manipulation","isaac-lab","simulation","gymnasium"],"backends":["fake"],"served_backend":"fake","evidence":"contract_checked","upstream":{"repo_url":"https://github.com/unitreerobotics/unitree_sim_isaaclab","commit":"e30c25b1dffdf92ada1d6c8c1fe9a47bdde0fecc","license":"Apache-2.0"},"stars":558,"install":{"openai4s":"openai4s lab add robots/unitreerobotics__unitree_sim_isaaclab","mhs":"mhs serve robots/unitreerobotics__unitree_sim_isaaclab --port 7400","mcp":"mhs serve robots/unitreerobotics__unitree_sim_isaaclab --mcp"}},
{"id":"robots/unity-technologies__robotics-object-pose-estimation","name":"UR3 pick-and-place planner (Unity object pose estimation demo)","device_id":"mhs://localhost/unity-ur3-pick-place-planner","track":"robots","category":"Other devices","topic":null,"kind":"device","vendor":"unity-technologies","model":"ur3_moveit MoverService (MoveIt, OMPL) of the Unity robotics object-pose-estimation demo","mode":"simulated","risk":"R1","family":"ros","role":"sim-env","intro":"UR3 pick-and-place planner (Unity object pose estimation demo), adapted from unity-technologies/robotics-object-pose-estimation. It runs `plan_pick_and_place`. `plan_pick_and_place`: plan (never execute) the five UR3 pick-and-place trajectories; executed is false. A command: it changes the node's shared planner, so never call while Unity plans; a zero quaternion is refused. A simulator: the market serves it with a stand-in that needs no simulator install.","measures":[],"adjusts":[],"actions":[{"name":"plan_pick_and_place","description":"Plan (never execute) the five UR3 pick-and-place trajectories; executed is false. A command: it changes the node's shared planner, so never call while Unity plans; a zero quaternion is refused."}],"tags":["ros","ros1","noetic","moveit","unity","ur3","pick-and-place","planning","plan-only"],"backends":["fake"],"served_backend":"fake","evidence":"contract_checked","upstream":{"repo_url":"https://github.com/unity-technologies/robotics-object-pose-estimation","commit":"45156479bee5d308085022aa8f20edc0c6a3bccc","license":"Apache-2.0"},"stars":352,"install":{"openai4s":"openai4s lab add robots/unity-technologies__robotics-object-pose-estimation","mhs":"mhs serve robots/unity-technologies__robotics-object-pose-estimation --port 7400","mcp":"mhs serve robots/unity-technologies__robotics-object-pose-estimation --mcp"}},
{"id":"robots/unity-technologies__unity-robotics-hub","name":"Niryo pick-and-place planner (Unity Robotics Hub)","device_id":"mhs://localhost/unity-niryo-pick-place-planner","track":"robots","category":"Other devices","topic":null,"kind":"device","vendor":"unity-technologies","model":"niryo_moveit MoverService (MoveIt) of the Unity Robotics Hub pick-and-place tutorial","mode":"simulated","risk":"R0","family":"ros","role":"sim-env","intro":"Niryo pick-and-place planner (Unity Robotics Hub), adapted from unity-technologies/unity-robotics-hub. It runs `plan_pick_and_place`. `plan_pick_and_place`: plan four trajectories. executed is always false. Exclusive. A simulator: the market serves it with a stand-in that needs no simulator install.","measures":[],"adjusts":[],"actions":[{"name":"plan_pick_and_place","description":"Plan four trajectories. executed is always false. Exclusive."}],"tags":["ros","ros1","melodic","moveit","unity","niryo","pick-and-place","planning","plan-only"],"backends":["fake"],"served_backend":"fake","evidence":"contract_checked","upstream":{"repo_url":"https://github.com/unity-technologies/unity-robotics-hub","commit":"b8d1e1d4c76c9ce75fc145cdbf55a9072cc77364","license":"Apache-2.0"},"stars":2590,"install":{"openai4s":"openai4s lab add robots/unity-technologies__unity-robotics-hub","mhs":"mhs serve robots/unity-technologies__unity-robotics-hub --port 7400","mcp":"mhs serve robots/unity-technologies__unity-robotics-hub --mcp"}},
{"id":"robots/universalrobots__universal_robots_ros2_driver","name":"Universal Robots ROS 2 dashboard client","device_id":"mhs://localhost/ur_dashboard","track":"robots","category":"Robot arms and grippers","topic":null,"kind":"robot.arm","vendor":"Universal Robots","model":null,"mode":"hardware","risk":"R2","family":"ros","role":"device-driver","intro":"Universal Robots ROS 2 dashboard client, adapted from universalrobots/universal_robots_ros2_driver. It reads `read_program_running`; runs `stop_dashboard_program`. `stop_dashboard_program`: stop the active dashboard program through the acknowledged UR dashboard stop service; this does not command joint motion or claim a physical emergency stop. A hardware driver: the market serves its fake backend, so no instrument is needed.","measures":["read_program_running"],"adjusts":[],"actions":[{"name":"stop_dashboard_program","description":"Stop the active dashboard program through the acknowledged UR dashboard stop service; this does not command joint motion or claim a physical emergency stop"}],"tags":["ros","ros2","universal-robots","ur","dashboard","program-stop"],"backends":["fake"],"served_backend":"fake","evidence":"contract_checked","upstream":{"repo_url":"https://github.com/universalrobots/universal_robots_ros2_driver","commit":"7e031424bc7a3e590d65fe297214ac21e1f9ffdd","license":"BSD-3-Clause"},"stars":833,"install":{"openai4s":"openai4s lab add robots/universalrobots__universal_robots_ros2_driver","mhs":"mhs serve robots/universalrobots__universal_robots_ros2_driver --port 7400","mcp":"mhs serve robots/universalrobots__universal_robots_ros2_driver --mcp"}},
{"id":"robots/unrealzoo__unrealzoo-gym","name":"UnrealZoo UnrealMujoco Go1 (UnrealCV MuJoCo simulation)","device_id":"mhs://localhost/unrealzoo-go1","track":"robots","category":"Simulation","topic":null,"kind":"world.sim","vendor":"UnrealZoo","model":"UnrealMujoco-Go1-v0","mode":"simulated","risk":"R0","family":"gymnasium","role":"sim-env","intro":"UnrealZoo UnrealMujoco Go1 (UnrealCV MuJoCo simulation), adapted from unrealzoo/unrealzoo-gym. It reads `observation`, `reward`, `terminated`, `truncated` and 4 more; runs `step`, `reset` and `seed`. `step`: advance the simulated world by a bounded number of fixed timesteps, optionally applying an action for each step, and return the resulting observation and terminal flags. A simulator: the market serves it with a stand-in that needs no simulator install.","measures":["observation","reward","terminated","truncated","tick","episode","seed","info"],"adjusts":[],"actions":[{"name":"step","description":"Advance the simulated world by a bounded number of fixed timesteps, optionally applying an action for each step, and return the resulting observation and terminal flags."},{"name":"reset","description":"Reset the simulated world to a scenario start state and return the initial observation. When a seed is supplied the endpoint records it in the receipt; otherwise the endpoint's declared default seed applies."},{"name":"seed","description":"Set the seed used by the simulated world's random number generators for subsequent steps, without resetting the world. The accepted seed is echoed in the receipt."}],"tags":["unrealzoo","unrealcv","mujoco","go1","robot","reinforcement-learning","simulation","gymnasium"],"backends":["fake"],"served_backend":"fake","evidence":"contract_checked","upstream":{"repo_url":"https://github.com/unrealzoo/unrealzoo-gym","commit":"85f4b72e0ecd3c77f17fab161c3c8bdfdd86cf7c","license":"Apache-2.0"},"stars":0,"install":{"openai4s":"openai4s lab add robots/unrealzoo__unrealzoo-gym","mhs":"mhs serve robots/unrealzoo__unrealzoo-gym --port 7400","mcp":"mhs serve robots/unrealzoo__unrealzoo-gym --mcp"}},
{"id":"robots/uoe-agents__skill-aware-panda-gym","name":"Skill-aware Panda-gym PandaSkillAware-v3 (PyBullet)","device_id":"mhs://localhost/panda-skill-aware","track":"robots","category":"Simulation","topic":"robot arm manipulation","kind":"world.sim","vendor":"uoe-agents","model":"PandaSkillAware-v3","mode":"simulated","risk":"R0","family":"gymnasium","role":"sim-env","intro":"Skill-aware Panda-gym PandaSkillAware-v3 (PyBullet), adapted from uoe-agents/skill-aware-panda-gym. It reads `observation`, `reward`, `terminated`, `truncated` and 4 more; runs `step`, `reset` and `seed`. `step`: advance the simulated world by a bounded number of fixed timesteps, optionally applying an action for each step, and return the resulting observation and terminal flags. A simulator: the market serves it with a stand-in that needs no simulator install.","measures":["observation","reward","terminated","truncated","tick","episode","seed","info"],"adjusts":[],"actions":[{"name":"step","description":"Advance the simulated world by a bounded number of fixed timesteps, optionally applying an action for each step, and return the resulting observation and terminal flags."},{"name":"reset","description":"Reset the simulated world to a scenario start state and return the initial observation. When a seed is supplied the endpoint records it in the receipt; otherwise the endpoint's declared default seed applies."},{"name":"seed","description":"Set the seed used by the simulated world's random number generators for subsequent steps, without resetting the world. The accepted seed is echoed in the receipt."}],"tags":["panda","franka","push","pybullet","reinforcement-learning","simulation","gymnasium","skill-aware"],"backends":["fake"],"served_backend":"fake","evidence":"contract_checked","upstream":{"repo_url":"https://github.com/uoe-agents/skill-aware-panda-gym","commit":"4910d3733da4df60991d5cd82e839e5eb16e6b74","license":"MIT"},"stars":6,"install":{"openai4s":"openai4s lab add robots/uoe-agents__skill-aware-panda-gym","mhs":"mhs serve robots/uoe-agents__skill-aware-panda-gym --port 7400","mcp":"mhs serve robots/uoe-agents__skill-aware-panda-gym --mcp"}},
{"id":"robots/ussoftware1__mujoco-planar-reach-rl-demo","name":"MuJoCo planar reach (two-link arm)","device_id":"mhs://localhost/planar-reach","track":"robots","category":"Simulation","topic":"robot arm manipulation","kind":"world.sim","vendor":"ussoftware1","model":"MuJoCo Planar Reach RL Demo","mode":"simulated","risk":"R0","family":"mujoco","role":"sim-env","intro":"MuJoCo planar reach (two-link arm), adapted from ussoftware1/mujoco-planar-reach-rl-demo. It reads `time_ms`, `qpos`, `qvel`, `ctrl` and 4 more; runs `step` and `reset`. `step`: advance the simulated world by a bounded number of fixed timesteps, optionally applying an action for each step, and return the resulting observation and terminal flags. A simulator: the market serves it with a stand-in that needs no simulator install.","measures":["time_ms","qpos","qvel","ctrl","tick","timestep_ms","seed","native_checkpoint"],"adjusts":[],"actions":[{"name":"step","description":"Advance the simulated world by a bounded number of fixed timesteps, optionally applying an action for each step, and return the resulting observation and terminal flags."},{"name":"reset","description":"Reset the simulated world to a scenario start state and return the initial observation. When a seed is supplied the endpoint records it in the receipt; otherwise the endpoint's declared default seed applies."}],"tags":["mujoco","planar-arm","two-link","robot-arm","reinforcement-learning","simulation"],"backends":["fake"],"served_backend":"fake","evidence":"contract_checked","upstream":{"repo_url":"https://github.com/ussoftware1/mujoco-planar-reach-rl-demo","commit":"863bd473bc478e93cb05bbef22fcbf5905fb977d","license":"MIT"},"stars":1,"install":{"openai4s":"openai4s lab add robots/ussoftware1__mujoco-planar-reach-rl-demo","mhs":"mhs serve robots/ussoftware1__mujoco-planar-reach-rl-demo --port 7400","mcp":"mhs serve robots/ussoftware1__mujoco-planar-reach-rl-demo --mcp"}},
{"id":"robots/ut-austin-robin__oopsieverse","name":"OopsieVerse DamageableCloseDrawer (RoboCasa / MuJoCo)","device_id":"mhs://localhost/oopsieverse-close-drawer","track":"robots","category":"Simulation","topic":"robot arm manipulation","kind":"world.sim","vendor":"UT Austin RobIn","model":"close_drawer","mode":"simulated","risk":"R0","family":"gymnasium","role":"sim-env","intro":"OopsieVerse DamageableCloseDrawer (RoboCasa / MuJoCo), adapted from ut-austin-robin/oopsieverse. It reads `observation`, `reward`, `terminated`, `truncated` and 4 more; runs `step`, `reset` and `seed`. `step`: advance the simulated world by a bounded number of fixed timesteps, optionally applying an action for each step, and return the resulting observation and terminal flags. A simulator: the market serves it with a stand-in that needs no simulator install.","measures":["observation","reward","terminated","truncated","tick","episode","seed","info"],"adjusts":[],"actions":[{"name":"step","description":"Advance the simulated world by a bounded number of fixed timesteps, optionally applying an action for each step, and return the resulting observation and terminal flags."},{"name":"reset","description":"Reset the simulated world to a scenario start state and return the initial observation. When a seed is supplied the endpoint records it in the receipt; otherwise the endpoint's declared default seed applies."},{"name":"seed","description":"Set the seed used by the simulated world's random number generators for subsequent steps, without resetting the world. The accepted seed is echoed in the receipt."}],"tags":["oopsieverse","robocasa","robosuite","mujoco","damage","manipulation","simulation","gymnasium"],"backends":["fake"],"served_backend":"fake","evidence":"contract_checked","upstream":{"repo_url":"https://github.com/ut-austin-robin/oopsieverse","commit":"a739f99e94f32c3229ae6932299e2e0e8c065480","license":"MIT"},"stars":0,"install":{"openai4s":"openai4s lab add robots/ut-austin-robin__oopsieverse","mhs":"mhs serve robots/ut-austin-robin__oopsieverse --port 7400","mcp":"mhs serve robots/ut-austin-robin__oopsieverse --mcp"}},
{"id":"robots/uthiras__scara_robot_ros2","name":"Uthira SCARA/RRP robot simulation","device_id":"mhs://localhost/scara-robot","track":"robots","category":"Robot arms and grippers","topic":null,"kind":"robot.arm","vendor":"uthiras","model":"RRBot-style 2-DOF revolute plus prismatic arm in a Gazebo world (URDF name 2dof_robot)","mode":"simulated","risk":"R2","family":"ros","role":"sim-env","intro":"Uthira SCARA/RRP robot simulation, adapted from uthiras/scara_robot_ros2. It reads `read_joint_states` and `read_forward_kinematics_matrix`; runs `command_joint_efforts` and `forward_velocity_kinematics`. `command_joint_efforts`: publish one three-element joint effort command on the controller's command topic; the receipt confirms only that rosbridge accepted the publication and reports the efforts sent, not that a controller applied them, that the arm moved, or that it can stop. After an e-stop and reset the world stays paused, and a command sent then acts only when the operator unpauses it. A simulator: the market serves it with a stand-in that needs no simulator install.","measures":["read_joint_states","read_forward_kinematics_matrix"],"adjusts":[],"actions":[{"name":"command_joint_efforts","description":"Publish one three-element joint effort command on the controller's command topic; the receipt confirms only that rosbridge accepted the publication and reports the efforts sent, not that a controller applied them, that the arm moved, or that it can stop. After an e-stop and reset the world stays paused, and a command sent then acts only when the operator unpauses it"},{"name":"forward_velocity_kinematics","description":"Call the observational Forward_Velocity_Kinematics service and return its end-effector velocity values; the service computes from the last joint state and does not command motion"}],"tags":["ros","ros2","scara","rrp","gazebo","kinematics","trajectory","simulation"],"backends":["fake"],"served_backend":"fake","evidence":"contract_checked","upstream":{"repo_url":"https://github.com/uthiras/scara_robot_ros2","commit":"ece3e91727b0922b336dadf803afaefbcc405e28","license":"NOASSERTION"},"stars":11,"install":{"openai4s":"openai4s lab add robots/uthiras__scara_robot_ros2","mhs":"mhs serve robots/uthiras__scara_robot_ros2 --port 7400","mcp":"mhs serve robots/uthiras__scara_robot_ros2 --mcp"}},
{"id":"robots/utiasstars__manipulator-learning","name":"manipulator-learning Panda Play insert tray (PyBullet simulation)","device_id":"mhs://localhost/panda-play-insert-tray","track":"robots","category":"Simulation","topic":"robot manipulation","kind":"world.sim","vendor":"utiasSTARS","model":"PandaPlayInsertTrayXYZState","mode":"simulated","risk":"R1","family":"gymnasium","role":"sim-env","intro":"manipulator-learning Panda Play insert tray (PyBullet simulation), adapted from utiasstars/manipulator-learning. It reads `observation`, `reward`, `terminated`, `truncated` and 4 more; runs `step`, `reset` and `seed`. `step`: advance the simulated world by a bounded number of fixed timesteps, optionally applying an action for each step, and return the resulting observation and terminal flags. A simulator: the market serves it with a stand-in that needs no simulator install.","measures":["observation","reward","terminated","truncated","tick","episode","seed","info"],"adjusts":[],"actions":[{"name":"step","description":"Advance the simulated world by a bounded number of fixed timesteps, optionally applying an action for each step, and return the resulting observation and terminal flags."},{"name":"reset","description":"Reset the simulated world to a scenario start state and return the initial observation. When a seed is supplied the endpoint records it in the receipt; otherwise the endpoint's declared default seed applies."},{"name":"seed","description":"Set the seed used by the simulated world's random number generators for subsequent steps, without resetting the world. The accepted seed is echoed in the receipt."}],"tags":["pybullet","panda","insert","manipulation","reinforcement-learning","simulation","gymnasium"],"backends":["fake"],"served_backend":"fake","evidence":"contract_checked","upstream":{"repo_url":"https://github.com/utiasstars/manipulator-learning","commit":"d887bdcfc92d2238532e6b5a27491f1aeaca47b4","license":"MIT"},"stars":20,"install":{"openai4s":"openai4s lab add robots/utiasstars__manipulator-learning","mhs":"mhs serve robots/utiasstars__manipulator-learning --port 7400","mcp":"mhs serve robots/utiasstars__manipulator-learning --mcp"}},
{"id":"robots/uuvsimulator__uuv_simulator","name":"UUV Simulator underwater current environment","device_id":"mhs://localhost/uuv-current","track":"robots","category":"Simulation","topic":"marine robotics","kind":"world.sim","vendor":"UUV Simulator","model":null,"mode":"simulated","risk":"R1","family":"ros","role":"sim-env","intro":"UUV Simulator underwater current environment, adapted from uuvsimulator/uuv_simulator. It reads `flow_velocity` and `read_current_velocity`; runs `set_current_velocity`, `set_horizontal_angle`, `set_vertical_angle` and `zero_current`. `set_current_velocity`: set the simulated current velocity and direction model means. A simulator: the market serves it with a stand-in that needs no simulator install.","measures":["flow_velocity","read_current_velocity"],"adjusts":[],"actions":[{"name":"set_current_velocity","description":"Set the simulated current velocity and direction model means"},{"name":"set_horizontal_angle","description":"Set the horizontal current-angle model mean"},{"name":"set_vertical_angle","description":"Set the vertical current-angle model mean"},{"name":"zero_current","description":"Zero the three current model means through the fixed acknowledged service"}],"tags":["ros","ros1","uuv","underwater","simulation","current","flow","environment"],"backends":["fake"],"served_backend":"fake","evidence":"contract_checked","upstream":{"repo_url":"https://github.com/uuvsimulator/uuv_simulator","commit":"bfb40cb153684a0703173117b6bbf4258e8e71c5","license":"Apache-2.0"},"stars":887,"install":{"openai4s":"openai4s lab add robots/uuvsimulator__uuv_simulator","mhs":"mhs serve robots/uuvsimulator__uuv_simulator --port 7400","mcp":"mhs serve robots/uuvsimulator__uuv_simulator --mcp"}},
{"id":"robots/uwrobotlearning__wheeledlab","name":"WheeledLab MuSHR drift (Isaac Lab task)","device_id":"mhs://localhost/wheeledlab-mushr-drift","track":"robots","category":"Simulation","topic":null,"kind":"world.sim","vendor":"UWRobotLearning","model":"Isaac-MushrDriftRL-v0","mode":"simulated","risk":"R0","family":"gymnasium","role":"sim-env","intro":"WheeledLab MuSHR drift (Isaac Lab task), adapted from uwrobotlearning/wheeledlab. It reads `observation`, `reward`, `terminated`, `truncated` and 4 more; runs `step`, `reset` and `seed`. `step`: advance the simulated world by a bounded number of fixed timesteps, optionally applying an action for each step, and return the resulting observation and terminal flags. A simulator: the market serves it with a stand-in that needs no simulator install.","measures":["observation","reward","terminated","truncated","tick","episode","seed","info"],"adjusts":[],"actions":[{"name":"step","description":"Advance the simulated world by a bounded number of fixed timesteps, optionally applying an action for each step, and return the resulting observation and terminal flags."},{"name":"reset","description":"Reset the simulated world to a scenario start state and return the initial observation. When a seed is supplied the endpoint records it in the receipt; otherwise the endpoint's declared default seed applies."},{"name":"seed","description":"Set the seed used by the simulated world's random number generators for subsequent steps, without resetting the world. The accepted seed is echoed in the receipt."}],"tags":["wheeledlab","isaac-lab","isaac-sim","mushr","drifting","reinforcement-learning","simulation","gymnasium"],"backends":["fake"],"served_backend":"fake","evidence":"contract_checked","upstream":{"repo_url":"https://github.com/uwrobotlearning/wheeledlab","commit":"a5017ce0696032805190448b2addb8077e458387","license":"BSD-3-Clause"},"stars":290,"install":{"openai4s":"openai4s lab add robots/uwrobotlearning__wheeledlab","mhs":"mhs serve robots/uwrobotlearning__wheeledlab --port 7400","mcp":"mhs serve robots/uwrobotlearning__wheeledlab --mcp"}},
{"id":"robots/uzh-rpg__flightmare","name":"Flightmare vectorized quadrotor environment","device_id":"mhs://localhost/flightmare-vecenv","track":"robots","category":"Simulation","topic":"UAVs","kind":"world.sim","vendor":"Robotics and Perception Group, University of Zurich","model":null,"mode":"simulated","risk":"R0","family":"gymnasium","role":"sim-env","intro":"Flightmare vectorized quadrotor environment, adapted from uzh-rpg/flightmare. It reads `observation`, `reward`, `terminated`, `truncated` and 4 more; runs `step`, `reset` and `seed`. `step`: advance the simulated world by a bounded number of fixed timesteps, optionally applying an action for each step, and return the resulting observation and terminal flags. A simulator: the market serves it with a stand-in that needs no simulator install.","measures":["observation","reward","terminated","truncated","tick","episode","seed","info"],"adjusts":[],"actions":[{"name":"step","description":"Advance the simulated world by a bounded number of fixed timesteps, optionally applying an action for each step, and return the resulting observation and terminal flags."},{"name":"reset","description":"Reset the simulated world to a scenario start state and return the initial observation. When a seed is supplied the endpoint records it in the receipt; otherwise the endpoint's declared default seed applies."},{"name":"seed","description":"Set the seed used by the simulated world's random number generators for subsequent steps, without resetting the world. The accepted seed is echoed in the receipt."}],"tags":["flightmare","flightlib","flightgym","quadrotor","reinforcement learning","simulation","vector environment"],"backends":["fake"],"served_backend":"fake","evidence":"contract_checked","upstream":{"repo_url":"https://github.com/uzh-rpg/flightmare","commit":"d4218aedac18cbe9364a0a0df10ab992c4b65e4f","license":"MIT"},"stars":1432,"install":{"openai4s":"openai4s lab add robots/uzh-rpg__flightmare","mhs":"mhs serve robots/uzh-rpg__flightmare --port 7400","mcp":"mhs serve robots/uzh-rpg__flightmare --mcp"}},
{"id":"robots/vcl-hnu__surgvla","name":"SurRoL ECMReach-v0 (laparoscopic ECM reach)","device_id":"mhs://localhost/surgvla-ecm-reach","track":"robots","category":"Simulation","topic":"robot arm manipulation","kind":"world.sim","vendor":"vcl-hnu","model":"SurgVLA-Bench / ECMReach-v0","mode":"simulated","risk":"R0","family":"gymnasium","role":"sim-env","intro":"SurRoL ECMReach-v0 (laparoscopic ECM reach), adapted from vcl-hnu/surgvla. It reads `observation`, `reward`, `terminated`, `truncated` and 4 more; runs `step`, `reset` and `seed`. `step`: advance the simulated world by a bounded number of fixed timesteps, optionally applying an action for each step, and return the resulting observation and terminal flags. A simulator: the market serves it with a stand-in that needs no simulator install.","measures":["observation","reward","terminated","truncated","tick","episode","seed","info"],"adjusts":[],"actions":[{"name":"step","description":"Advance the simulated world by a bounded number of fixed timesteps, optionally applying an action for each step, and return the resulting observation and terminal flags."},{"name":"reset","description":"Reset the simulated world to a scenario start state and return the initial observation. When a seed is supplied the endpoint records it in the receipt; otherwise the endpoint's declared default seed applies."},{"name":"seed","description":"Set the seed used by the simulated world's random number generators for subsequent steps, without resetting the world. The accepted seed is echoed in the receipt."}],"tags":["surgical-robotics","laparoscopy","ecm","reach","reinforcement-learning","simulation","gymnasium","pybullet","surrol","surgvla"],"backends":["fake"],"served_backend":"fake","evidence":"contract_checked","upstream":{"repo_url":"https://github.com/vcl-hnu/surgvla","commit":"9446d6544757830c8ad184a5faadcde5cd2e4905","license":"NOASSERTION"},"stars":0,"install":{"openai4s":"openai4s lab add robots/vcl-hnu__surgvla","mhs":"mhs serve robots/vcl-hnu__surgvla --port 7400","mcp":"mhs serve robots/vcl-hnu__surgvla --mcp"}},
{"id":"robots/vikashplus__adroit","name":"Adroit 24-DOF hand (MuJoCo model)","device_id":"mhs://localhost/adroit","track":"robots","category":"Simulation","topic":"robot arm manipulation","kind":"world.sim","vendor":"Vikash Kumar (Adroit)","model":"Adroit_hand","mode":"simulated","risk":"R0","family":"mujoco","role":"twin-candidate","intro":"Adroit 24-DOF hand (MuJoCo model), adapted from vikashplus/adroit. It reads `time_ms`, `qpos`, `qvel`, `ctrl` and 4 more; runs `step` and `reset`. `step`: advance the simulated world by a bounded number of fixed timesteps, optionally applying an action for each step, and return the resulting observation and terminal flags. A simulator: the market serves it with a stand-in that needs no simulator install.","measures":["time_ms","qpos","qvel","ctrl","tick","timestep_ms","seed","native_checkpoint"],"adjusts":[],"actions":[{"name":"step","description":"Advance the simulated world by a bounded number of fixed timesteps, optionally applying an action for each step, and return the resulting observation and terminal flags."},{"name":"reset","description":"Reset the simulated world to a scenario start state and return the initial observation. When a seed is supplied the endpoint records it in the receipt; otherwise the endpoint's declared default seed applies."}],"tags":["adroit","dexterous-hand","mujoco","robot","shadow-hand","simulation","tendon-driven"],"backends":["fake"],"served_backend":"fake","evidence":"contract_checked","upstream":{"repo_url":"https://github.com/vikashplus/adroit","commit":"c98c9c92fc9729e92a10c8db79588348897d8fe3","license":"Apache-2.0"},"stars":80,"install":{"openai4s":"openai4s lab add robots/vikashplus__adroit","mhs":"mhs serve robots/vikashplus__adroit --port 7400","mcp":"mhs serve robots/vikashplus__adroit --mcp"}},
{"id":"robots/vikashplus__franka_sim","name":"Franka Panda bimanual MuJoCo scene","device_id":"mhs://localhost/franka-sim","track":"robots","category":"Simulation","topic":"robot arm manipulation","kind":"world.sim","vendor":"Vikash Kumar","model":"Franka Panda (bi-franka_panda v200)","mode":"simulated","risk":"R0","family":"mujoco","role":"twin-candidate","intro":"Franka Panda bimanual MuJoCo scene, adapted from vikashplus/franka_sim. It reads `time_ms`, `qpos`, `qvel`, `ctrl` and 4 more; runs `step` and `reset`. `step`: advance the simulated world by a bounded number of fixed timesteps, optionally applying an action for each step, and return the resulting observation and terminal flags. A simulator: the market serves it with a stand-in that needs no simulator install.","measures":["time_ms","qpos","qvel","ctrl","tick","timestep_ms","seed","native_checkpoint"],"adjusts":[],"actions":[{"name":"step","description":"Advance the simulated world by a bounded number of fixed timesteps, optionally applying an action for each step, and return the resulting observation and terminal flags."},{"name":"reset","description":"Reset the simulated world to a scenario start state and return the initial observation. When a seed is supplied the endpoint records it in the receipt; otherwise the endpoint's declared default seed applies."}],"tags":["arm","bimanual","franka","manipulator","mujoco","panda","robot","simulation"],"backends":["fake"],"served_backend":"fake","evidence":"contract_checked","upstream":{"repo_url":"https://github.com/vikashplus/franka_sim","commit":"b54d271388cf9b179d3fb6cff7a430040afca33f","license":"Apache-2.0"},"stars":76,"install":{"openai4s":"openai4s lab add robots/vikashplus__franka_sim","mhs":"mhs serve robots/vikashplus__franka_sim --port 7400","mcp":"mhs serve robots/vikashplus__franka_sim --mcp"}},
{"id":"robots/vikashplus__robohive","name":"RoboHive FrankaReachFixed-v0 (MuJoCo manipulation environment)","device_id":"mhs://localhost/robohive-franka-reach","track":"robots","category":"Simulation","topic":"robot manipulation","kind":"world.sim","vendor":"Vikash Kumar (vikashplus)","model":"FrankaReachFixed-v0","mode":"simulated","risk":"R0","family":"gymnasium","role":"sim-env","intro":"RoboHive FrankaReachFixed-v0 (MuJoCo manipulation environment), adapted from vikashplus/robohive. It reads `observation`, `reward`, `terminated`, `truncated` and 4 more; runs `step`, `reset` and `seed`. `step`: advance the simulated world by a bounded number of fixed timesteps, optionally applying an action for each step, and return the resulting observation and terminal flags. A simulator: the market serves it with a stand-in that needs no simulator install.","measures":["observation","reward","terminated","truncated","tick","episode","seed","info"],"adjusts":[],"actions":[{"name":"step","description":"Advance the simulated world by a bounded number of fixed timesteps, optionally applying an action for each step, and return the resulting observation and terminal flags."},{"name":"reset","description":"Reset the simulated world to a scenario start state and return the initial observation. When a seed is supplied the endpoint records it in the receipt; otherwise the endpoint's declared default seed applies."},{"name":"seed","description":"Set the seed used by the simulated world's random number generators for subsequent steps, without resetting the world. The accepted seed is echoed in the receipt."}],"tags":["robohive","franka","reach","manipulation","reinforcement-learning","mujoco","simulation","gymnasium"],"backends":["fake"],"served_backend":"fake","evidence":"contract_checked","upstream":{"repo_url":"https://github.com/vikashplus/robohive","commit":"6c14798e48b9904dd8c9151837a1d2468b87bcf3","license":"Apache-2.0"},"stars":632,"install":{"openai4s":"openai4s lab add robots/vikashplus__robohive","mhs":"mhs serve robots/vikashplus__robohive --port 7400","mcp":"mhs serve robots/vikashplus__robohive --mcp"}},
{"id":"robots/vikashplus__unitree_sim","name":"Unitree A1 quadruped (MuJoCo model)","device_id":"mhs://localhost/unitree_a1","track":"robots","category":"Simulation","topic":"legged robots","kind":"world.sim","vendor":"Vikash Kumar","model":"Unitree A1","mode":"simulated","risk":"R0","family":"mujoco","role":"twin-candidate","intro":"Unitree A1 quadruped (MuJoCo model), adapted from vikashplus/unitree_sim. It reads `time_ms`, `qpos`, `qvel`, `ctrl` and 4 more; runs `step` and `reset`. `step`: advance the simulated world by a bounded number of fixed timesteps, optionally applying an action for each step, and return the resulting observation and terminal flags. A simulator: the market serves it with a stand-in that needs no simulator install.","measures":["time_ms","qpos","qvel","ctrl","tick","timestep_ms","seed","native_checkpoint"],"adjusts":[],"actions":[{"name":"step","description":"Advance the simulated world by a bounded number of fixed timesteps, optionally applying an action for each step, and return the resulting observation and terminal flags."},{"name":"reset","description":"Reset the simulated world to a scenario start state and return the initial observation. When a seed is supplied the endpoint records it in the receipt; otherwise the endpoint's declared default seed applies."}],"tags":["unitree","a1","quadruped","mujoco","simulation","robot"],"backends":["fake"],"served_backend":"fake","evidence":"contract_checked","upstream":{"repo_url":"https://github.com/vikashplus/unitree_sim","commit":"21b5524e7c5586565de5e789e94bb69efd36db69","license":"NOASSERTION"},"stars":12,"install":{"openai4s":"openai4s lab add robots/vikashplus__unitree_sim","mhs":"mhs serve robots/vikashplus__unitree_sim --port 7400","mcp":"mhs serve robots/vikashplus__unitree_sim --mcp"}},
{"id":"robots/vimalabs__vimabench","name":"VIMA-Bench multimodal robot manipulation benchmark (PyBullet)","device_id":"mhs://localhost/vima-bench","track":"robots","category":"Simulation","topic":"robot manipulation","kind":"world.sim","vendor":"vimalabs","model":"VIMA-Bench","mode":"simulated","risk":"R0","family":"gymnasium","role":"sim-env","intro":"VIMA-Bench multimodal robot manipulation benchmark (PyBullet), adapted from vimalabs/vimabench. It reads `observation`, `reward`, `terminated`, `truncated` and 3 more; runs `step`, `reset_world` and `seed_world`. `step`: advance the simulated world by a bounded number of fixed timesteps, optionally applying an action for each step, and return the resulting observation and terminal flags. A simulator: the market serves it with a stand-in that needs no simulator install.","measures":["observation","reward","terminated","truncated","tick","episode","info"],"adjusts":[],"actions":[{"name":"step","description":"Advance the simulated world by a bounded number of fixed timesteps, optionally applying an action for each step, and return the resulting observation and terminal flags."},{"name":"reset_world","description":"Reset the simulated world to a scenario start state and return the initial observation. When a seed is supplied the endpoint records it in the receipt; otherwise the endpoint's declared default seed applies."},{"name":"seed_world","description":"Set the seed used by the simulated world's random number generators for subsequent steps, without resetting the world. The accepted seed is echoed in the receipt."}],"tags":["vima","robot-manipulation","pybullet","tabletop","multimodal-prompt","reinforcement-learning","simulation","gym"],"backends":["fake","sim"],"served_backend":"fake","evidence":"contract_checked","upstream":{"repo_url":"https://github.com/vimalabs/vimabench","commit":"97e0af11e126fd477c9d81eeabfb6c739021c680","license":"MIT"},"stars":328,"install":{"openai4s":"openai4s lab add robots/vimalabs__vimabench","mhs":"mhs serve robots/vimalabs__vimabench --port 7400","mcp":"mhs serve robots/vimalabs__vimabench --mcp"}},
{"id":"robots/vitchyr__multiworld","name":"Multiworld GoalGridworld-v0 (10 x 10 goal grid)","device_id":"mhs://localhost/goal_gridworld","track":"robots","category":"Simulation","topic":"robot arm manipulation","kind":"world.sim","vendor":"Vitchyr Pong","model":"GoalGridworld-v0","mode":"simulated","risk":"R0","family":"gymnasium","role":"sim-env","intro":"Multiworld GoalGridworld-v0 (10 x 10 goal grid), adapted from vitchyr/multiworld. It reads `observation`, `reward`, `terminated`, `truncated` and 4 more; runs `step`, `reset` and `seed`. `step`: advance the simulated world by a bounded number of fixed timesteps, optionally applying an action for each step, and return the resulting observation and terminal flags. A simulator: the market serves it with a stand-in that needs no simulator install.","measures":["observation","reward","terminated","truncated","tick","episode","seed","info"],"adjusts":[],"actions":[{"name":"step","description":"Advance the simulated world by a bounded number of fixed timesteps, optionally applying an action for each step, and return the resulting observation and terminal flags."},{"name":"reset","description":"Reset the simulated world to a scenario start state and return the initial observation. When a seed is supplied the endpoint records it in the receipt; otherwise the endpoint's declared default seed applies."},{"name":"seed","description":"Set the seed used by the simulated world's random number generators for subsequent steps, without resetting the world. The accepted seed is echoed in the receipt."}],"tags":["multiworld","goal-gridworld","gridworld","goal-conditioned","reinforcement-learning","simulation","gym"],"backends":["fake"],"served_backend":"fake","evidence":"contract_checked","upstream":{"repo_url":"https://github.com/vitchyr/multiworld","commit":"12a05bfa4139f90741608ba409edebb95d7ef9ab","license":"MIT"},"stars":0,"install":{"openai4s":"openai4s lab add robots/vitchyr__multiworld","mhs":"mhs serve robots/vitchyr__multiworld --port 7400","mcp":"mhs serve robots/vitchyr__multiworld --mcp"}},
{"id":"robots/warplab__isaac-auv-env","name":"WarpAUV IsaacLab direct environment","device_id":"mhs://localhost/warpauv","track":"robots","category":"Simulation","topic":"underwater robotics","kind":"world.sim","vendor":"WarpLab","model":"Isaac-WarpAUV-Direct-v1","mode":"simulated","risk":"R0","family":"gymnasium","role":"sim-env","intro":"WarpAUV IsaacLab direct environment, adapted from warplab/isaac-auv-env. It reads `observation`, `reward`, `terminated`, `truncated` and 4 more; runs `step`, `reset` and `seed`. `step`: advance the simulated world by a bounded number of fixed timesteps, optionally applying an action for each step, and return the resulting observation and terminal flags. A simulator: the market serves it with a stand-in that needs no simulator install.","measures":["observation","reward","terminated","truncated","tick","episode","seed","info"],"adjusts":[],"actions":[{"name":"step","description":"Advance the simulated world by a bounded number of fixed timesteps, optionally applying an action for each step, and return the resulting observation and terminal flags."},{"name":"reset","description":"Reset the simulated world to a scenario start state and return the initial observation. When a seed is supplied the endpoint records it in the receipt; otherwise the endpoint's declared default seed applies."},{"name":"seed","description":"Set the seed used by the simulated world's random number generators for subsequent steps, without resetting the world. The accepted seed is echoed in the receipt."}],"tags":["auv","underwater","isaac-lab","isaac-sim","reinforcement-learning","simulation","gymnasium"],"backends":["fake"],"served_backend":"fake","evidence":"contract_checked","upstream":{"repo_url":"https://github.com/warplab/isaac-auv-env","commit":"7c5ebe7f7a08acd2570b5fba328e92b7f59f6794","license":"BSD-3-Clause"},"stars":70,"install":{"openai4s":"openai4s lab add robots/warplab__isaac-auv-env","mhs":"mhs serve robots/warplab__isaac-auv-env --port 7400","mcp":"mhs serve robots/warplab__isaac-auv-env --mcp"}},
{"id":"robots/wh200720041__warehouse_simulation_toolkit","name":"Warehouse Simulation Toolkit (Gazebo, Pioneer 3DX)","device_id":"mhs://localhost/warehouse-simulation","track":"robots","category":"Simulation","topic":null,"kind":"world.sim","vendor":"wh200720041","model":"Pioneer 3DX in warehouse.world","mode":"simulated","risk":"R2","family":"ros","role":"sim-env","intro":"Warehouse Simulation Toolkit (Gazebo, Pioneer 3DX), adapted from wh200720041/warehouse_simulation_toolkit. It runs `publish_cmd_vel`. `publish_cmd_vel`: publish one geometry_msgs/Twist velocity setpoint on /cmd_vel for the Gazebo differential-drive subscription. The receipt is transmission evidence only, not motion, arrival or stopping. A simulator: the market serves it with a stand-in that needs no simulator install.","measures":[],"adjusts":[],"actions":[{"name":"publish_cmd_vel","description":"Publish one geometry_msgs/Twist velocity setpoint on /cmd_vel for the Gazebo differential-drive subscription. The receipt is transmission evidence only, not motion, arrival or stopping."}],"tags":["ros","ros1","simulation","gazebo","warehouse","pioneer3dx","cmd-vel","teleop","stop"],"backends":["fake"],"served_backend":"fake","evidence":"contract_checked","upstream":{"repo_url":"https://github.com/wh200720041/warehouse_simulation_toolkit","commit":"18df8ce6dde61711e0705f3bd872465a01bd01a2","license":"BSD-3-Clause"},"stars":313,"install":{"openai4s":"openai4s lab add robots/wh200720041__warehouse_simulation_toolkit","mhs":"mhs serve robots/wh200720041__warehouse_simulation_toolkit --port 7400","mcp":"mhs serve robots/wh200720041__warehouse_simulation_toolkit --mcp"}},
{"id":"robots/wil3__gymfc","name":"GymFC gymfc_nf-step-v1 flight-control environment","device_id":"mhs://localhost/gymfc-step","track":"robots","category":"Simulation","topic":"UAVs","kind":"world.sim","vendor":"Wil Koch","model":"GymFC gymfc_nf-step-v1","mode":"simulated","risk":"R0","family":"gymnasium","role":"sim-env","intro":"GymFC gymfc_nf-step-v1 flight-control environment, adapted from wil3/gymfc. It reads `observation`, `reward`, `terminated`, `truncated` and 4 more; runs `step`, `reset` and `seed`. `step`: advance the simulated world by a bounded number of fixed timesteps, optionally applying an action for each step, and return the resulting observation and terminal flags. A simulator: the market serves it with a stand-in that needs no simulator install.","measures":["observation","reward","terminated","truncated","tick","episode","seed","info"],"adjusts":[],"actions":[{"name":"step","description":"Advance the simulated world by a bounded number of fixed timesteps, optionally applying an action for each step, and return the resulting observation and terminal flags."},{"name":"reset","description":"Reset the simulated world to a scenario start state and return the initial observation. When a seed is supplied the endpoint records it in the receipt; otherwise the endpoint's declared default seed applies."},{"name":"seed","description":"Set the seed used by the simulated world's random number generators for subsequent steps, without resetting the world. The accepted seed is echoed in the receipt."}],"tags":["gymfc","flight-control","attitude-control","reinforcement-learning","gazebo","simulation"],"backends":["fake"],"served_backend":"fake","evidence":"contract_checked","upstream":{"repo_url":"https://github.com/wil3/gymfc","commit":"08df94b06a5d7f8fb6d2cb2c155751f5336720e7","license":"MIT"},"stars":0,"install":{"openai4s":"openai4s lab add robots/wil3__gymfc","mhs":"mhs serve robots/wil3__gymfc --port 7400","mcp":"mhs serve robots/wil3__gymfc --mcp"}},
{"id":"robots/will0103__ros2-mobile-manipulator","name":"will0103 ROS 2 mobile manipulator simulation","device_id":"mhs://localhost/mobile_manipulator","track":"robots","category":"Mobile robots","topic":null,"kind":"robot.mobile_base","vendor":"will0103","model":"my_robot","mode":"simulated","risk":"R2","family":"ros","role":"sim-env","intro":"will0103 ROS 2 mobile manipulator simulation, adapted from will0103/ros2-mobile-manipulator. It runs `move_robot`. `move_robot`: send one MoveRobot velocity/duration goal to the ROS 2 /move_robot action server. A simulator: the market serves it with a stand-in that needs no simulator install.","measures":[],"adjusts":[],"actions":[{"name":"move_robot","description":"Send one MoveRobot velocity/duration goal to the ROS 2 /move_robot action server."}],"tags":["ros","ros2","simulation","gazebo","mobile-base","mobile-manipulator","action"],"backends":["fake"],"served_backend":"fake","evidence":"contract_checked","upstream":{"repo_url":"https://github.com/will0103/ros2-mobile-manipulator","commit":"6f49e8f3b306a864d8d139d2dc270afebecea819","license":"NOASSERTION"},"stars":0,"install":{"openai4s":"openai4s lab add robots/will0103__ros2-mobile-manipulator","mhs":"mhs serve robots/will0103__ros2-mobile-manipulator --port 7400","mcp":"mhs serve robots/will0103__ros2-mobile-manipulator --mcp"}},
{"id":"robots/wuji-technology__wuji-description","name":"Wuji Hand left with soft pad (MuJoCo)","device_id":"mhs://localhost/wujihand-left","track":"robots","category":"Simulation","topic":"robot arm manipulation","kind":"world.sim","vendor":"Wuji Technology","model":"Wuji Hand","mode":"simulated","risk":"R0","family":"mujoco","role":"twin-candidate","intro":"Wuji Hand left with soft pad (MuJoCo), adapted from wuji-technology/wuji-description. It reads `time_ms`, `qpos`, `qvel`, `ctrl` and 4 more; runs `step` and `reset`. `step`: advance the simulated world by a bounded number of fixed timesteps, optionally applying an action for each step, and return the resulting observation and terminal flags. A simulator: the market serves it with a stand-in that needs no simulator install.","measures":["time_ms","qpos","qvel","ctrl","tick","timestep_ms","seed","native_checkpoint"],"adjusts":[],"actions":[{"name":"step","description":"Advance the simulated world by a bounded number of fixed timesteps, optionally applying an action for each step, and return the resulting observation and terminal flags."},{"name":"reset","description":"Reset the simulated world to a scenario start state and return the initial observation. When a seed is supplied the endpoint records it in the receipt; otherwise the endpoint's declared default seed applies."}],"tags":["hand","mujoco","robot","simulation","wuji","dexterous"],"backends":["fake"],"served_backend":"fake","evidence":"contract_checked","upstream":{"repo_url":"https://github.com/wuji-technology/wuji-description","commit":"829c9aa27cb12c3a49d5b8d63c9869dd8f656702","license":"MIT"},"stars":43,"install":{"openai4s":"openai4s lab add robots/wuji-technology__wuji-description","mhs":"mhs serve robots/wuji-technology__wuji-description --port 7400","mcp":"mhs serve robots/wuji-technology__wuji-description --mcp"}},
{"id":"robots/xarm-developer__uf-gym","name":"UFACTORY xArm6 Reach (panda-gym / PyBullet)","device_id":"mhs://localhost/xarm6-reach","track":"robots","category":"Simulation","topic":"robot arm manipulation","kind":"world.sim","vendor":"UFACTORY","model":"XArm6Reach-v3","mode":"simulated","risk":"R0","family":"gymnasium","role":"sim-env","intro":"UFACTORY xArm6 Reach (panda-gym / PyBullet), adapted from xarm-developer/uf-gym. It reads `observation`, `reward`, `terminated`, `truncated` and 4 more; runs `step`, `reset` and `seed`. `step`: advance the simulated world by a bounded number of fixed timesteps, optionally applying an action for each step, and return the resulting observation and terminal flags. A simulator: the market serves it with a stand-in that needs no simulator install.","measures":["observation","reward","terminated","truncated","tick","episode","seed","info"],"adjusts":[],"actions":[{"name":"step","description":"Advance the simulated world by a bounded number of fixed timesteps, optionally applying an action for each step, and return the resulting observation and terminal flags."},{"name":"reset","description":"Reset the simulated world to a scenario start state and return the initial observation. When a seed is supplied the endpoint records it in the receipt; otherwise the endpoint's declared default seed applies."},{"name":"seed","description":"Set the seed used by the simulated world's random number generators for subsequent steps, without resetting the world. The accepted seed is echoed in the receipt."}],"tags":["ufactory","xarm6","reach","panda-gym","pybullet","reinforcement-learning","simulation","gymnasium"],"backends":["fake"],"served_backend":"fake","evidence":"contract_checked","upstream":{"repo_url":"https://github.com/xarm-developer/uf-gym","commit":"5d93e0419193bfed8a7cefc7bbe9b045a650f049","license":"MIT"},"stars":37,"install":{"openai4s":"openai4s lab add robots/xarm-developer__uf-gym","mhs":"mhs serve robots/xarm-developer__uf-gym --port 7400","mcp":"mhs serve robots/xarm-developer__uf-gym --mcp"}},
{"id":"robots/xarm-developer__xarm-python-sdk","name":"UFACTORY xArm 7 (xarm.XArmAPI)","device_id":"mhs://localhost/xarm7","track":"robots","category":"Robot arms and grippers","topic":null,"kind":"robot.arm","vendor":"UFACTORY","model":"xArm, 7 axes (robot type XARM7_X4)","mode":"hardware","risk":"R2","family":"python-object","role":"device-driver","intro":"UFACTORY xArm 7 (xarm.XArmAPI), adapted from xarm-developer/xarm-python-sdk. It reads `joint_positions`, `tcp_pose`, `state`, `mode` and 2 more; runs `move_joints`, `move_pose`, `jog_joints` and `enable_motion`. `move_joints`: command one or more actuated joints to target positions in joint space, optionally over a declared duration, and report whether the target was reached within tolerance. A hardware driver: the market serves its fake backend, so no instrument is needed.","measures":["joint_positions","tcp_pose","state","mode","error_code","warn_code"],"adjusts":[],"actions":[{"name":"move_joints","description":"Command one or more actuated joints to target positions in joint space, optionally over a declared duration, and report whether the target was reached within tolerance."},{"name":"move_pose","description":"Move the tool centre point to a Cartesian position and orientation in a named frame. The endpoint solves inverse kinematics; an unreachable target is rejected before motion."},{"name":"jog_joints","description":"Command continuous joint velocities for a bounded duration. The operation stops at the end of the duration or when cancelled."},{"name":"enable_motion","description":"Re-enable the arm after a safety reset (the declared re-enable): clean_error, clean_warn, motion_enable(True), set_mode(0) and set_state(0), the recovery the SDK documents after an error; it takes no input, is refused while the e-stop is latched and is never run by the reset"}],"tags":["robot arm","7-axis","ufactory","xarm","joint control","cartesian control","velocity control"],"backends":["fake","hardware"],"served_backend":"fake","evidence":"contract_checked","upstream":{"repo_url":"https://github.com/xarm-developer/xarm-python-sdk","commit":"d911319cebc45142613e18086aabb8067b18ab7f","license":"BSD-3-Clause"},"stars":0,"install":{"openai4s":"openai4s lab add robots/xarm-developer__xarm-python-sdk","mhs":"mhs serve robots/xarm-developer__xarm-python-sdk --port 7400","mcp":"mhs serve robots/xarm-developer__xarm-python-sdk --mcp"}},
{"id":"robots/xingyu-lin__softgym","name":"SoftGym PourWaterPosControlEnv (key_point, rotation_bottom)","device_id":"mhs://localhost/softgym-pour-water","track":"robots","category":"Simulation","topic":"robot manipulation","kind":"world.sim","vendor":"Xingyu Lin","model":"PourWaterPosControl-v0","mode":"simulated","risk":"R0","family":"gymnasium","role":"sim-env","intro":"SoftGym PourWaterPosControlEnv (key_point, rotation_bottom), adapted from xingyu-lin/softgym. It reads `observation`, `reward`, `terminated`, `truncated` and 4 more; runs `step`, `reset` and `seed`. `step`: advance the simulated world by a bounded number of fixed timesteps, optionally applying an action for each step, and return the resulting observation and terminal flags. A simulator: the market serves it with a stand-in that needs no simulator install.","measures":["observation","reward","terminated","truncated","tick","episode","seed","info"],"adjusts":[],"actions":[{"name":"step","description":"Advance the simulated world by a bounded number of fixed timesteps, optionally applying an action for each step, and return the resulting observation and terminal flags."},{"name":"reset","description":"Reset the simulated world to a scenario start state and return the initial observation. When a seed is supplied the endpoint records it in the receipt; otherwise the endpoint's declared default seed applies."},{"name":"seed","description":"Set the seed used by the simulated world's random number generators for subsequent steps, without resetting the world. The accepted seed is echoed in the receipt."}],"tags":["softgym","pour-water","fluid","deformable-object","reinforcement-learning","simulation","gymnasium"],"backends":["fake"],"served_backend":"fake","evidence":"contract_checked","upstream":{"repo_url":"https://github.com/xingyu-lin/softgym","commit":"bb383f64cd488062587714abbae38f27ed9f2457","license":"BSD-3-Clause"},"stars":356,"install":{"openai4s":"openai4s lab add robots/xingyu-lin__softgym","mhs":"mhs serve robots/xingyu-lin__softgym --port 7400","mcp":"mhs serve robots/xingyu-lin__softgym --mcp"}},
{"id":"robots/yang-zj1026__navila-bench","name":"NaVILA-Bench go2_matterport_vision (Isaac Lab / Isaac Sim 4.1 target)","device_id":"mhs://localhost/navila-go2-matterport-vision","track":"robots","category":"Simulation","topic":null,"kind":"world.sim","vendor":"yang-zj1026","model":"NaVILA-Bench go2_matterport_vision","mode":"simulated","risk":"R0","family":"gymnasium","role":"sim-env","intro":"NaVILA-Bench go2_matterport_vision (Isaac Lab / Isaac Sim 4.1 target), adapted from yang-zj1026/navila-bench. It reads `observation`, `reward`, `terminated`, `truncated` and 4 more; runs `step`, `reset` and `seed`. `step`: advance the simulated world by a bounded number of fixed timesteps, optionally applying an action for each step, and return the resulting observation and terminal flags. A simulator: the market serves it with a stand-in that needs no simulator install.","measures":["observation","reward","terminated","truncated","tick","episode","seed","info"],"adjusts":[],"actions":[{"name":"step","description":"Advance the simulated world by a bounded number of fixed timesteps, optionally applying an action for each step, and return the resulting observation and terminal flags."},{"name":"reset","description":"Reset the simulated world to a scenario start state and return the initial observation. When a seed is supplied the endpoint records it in the receipt; otherwise the endpoint's declared default seed applies."},{"name":"seed","description":"Set the seed used by the simulated world's random number generators for subsequent steps, without resetting the world. The accepted seed is echoed in the receipt."}],"tags":["navila-bench","visual-language-navigation","go2","isaac-lab","isaac-sim","reinforcement-learning","simulation","gymnasium"],"backends":["fake"],"served_backend":"fake","evidence":"contract_checked","upstream":{"repo_url":"https://github.com/yang-zj1026/navila-bench","commit":"e9d2db12ce5788c0f987d734c0094100b6bc0d3a","license":"MIT"},"stars":340,"install":{"openai4s":"openai4s lab add robots/yang-zj1026__navila-bench","mhs":"mhs serve robots/yang-zj1026__navila-bench --port 7400","mcp":"mhs serve robots/yang-zj1026__navila-bench --mcp"}},
{"id":"robots/ycyao216__dexverse","name":"DexVerse GraspKettle (floating right Shadow hand, Isaac Lab)","device_id":"mhs://localhost/dexverse-grasp-kettle","track":"robots","category":"Simulation","topic":"robot arm manipulation","kind":"world.sim","vendor":"The DexVerse Project Developers","model":"Dexverse-GraspKettle-v0","mode":"simulated","risk":"R0","family":"gymnasium","role":"sim-env","intro":"DexVerse GraspKettle (floating right Shadow hand, Isaac Lab), adapted from ycyao216/dexverse. It reads `observation`, `reward`, `terminated`, `truncated` and 4 more; runs `step`, `reset` and `seed`. `step`: advance the simulated world by a bounded number of fixed timesteps, optionally applying an action for each step, and return the resulting observation and terminal flags. A simulator: the market serves it with a stand-in that needs no simulator install.","measures":["observation","reward","terminated","truncated","tick","episode","seed","info"],"adjusts":[],"actions":[{"name":"step","description":"Advance the simulated world by a bounded number of fixed timesteps, optionally applying an action for each step, and return the resulting observation and terminal flags."},{"name":"reset","description":"Reset the simulated world to a scenario start state and return the initial observation. When a seed is supplied the endpoint records it in the receipt; otherwise the endpoint's declared default seed applies."},{"name":"seed","description":"Set the seed used by the simulated world's random number generators for subsequent steps, without resetting the world. The accepted seed is echoed in the receipt."}],"tags":["dexverse","isaac-lab","dexterous-manipulation","functional-grasping","pouring","simulation","gymnasium"],"backends":["fake"],"served_backend":"fake","evidence":"contract_checked","upstream":{"repo_url":"https://github.com/ycyao216/dexverse","commit":"30cc673e27684b9f10186fa6bea731aed246bc9f","license":"BSD-3-Clause"},"stars":0,"install":{"openai4s":"openai4s lab add robots/ycyao216__dexverse","mhs":"mhs serve robots/ycyao216__dexverse --port 7400","mcp":"mhs serve robots/ycyao216__dexverse --mcp"}},
{"id":"robots/yitianshi__metaisaacgrasp","name":"MetaIsaacGrasp AIR-v0-Data (Isaac Lab manager-based environment)","device_id":"mhs://localhost/metaisaacgrasp-data","track":"robots","category":"Simulation","topic":null,"kind":"world.sim","vendor":"Yitian Shi","model":"MetaIsaacGrasp AIR-v0-Data","mode":"simulated","risk":"R0","family":"gymnasium","role":"sim-env","intro":"MetaIsaacGrasp AIR-v0-Data (Isaac Lab manager-based environment), adapted from yitianshi/metaisaacgrasp. It reads `observation`, `reward`, `terminated`, `truncated` and 4 more; runs `step`, `reset` and `seed`. `step`: advance the simulated world by a bounded number of fixed timesteps, optionally applying an action for each step, and return the resulting observation and terminal flags. A simulator: the market serves it with a stand-in that needs no simulator install.","measures":["observation","reward","terminated","truncated","tick","episode","seed","info"],"adjusts":[],"actions":[{"name":"step","description":"Advance the simulated world by a bounded number of fixed timesteps, optionally applying an action for each step, and return the resulting observation and terminal flags."},{"name":"reset","description":"Reset the simulated world to a scenario start state and return the initial observation. When a seed is supplied the endpoint records it in the receipt; otherwise the endpoint's declared default seed applies."},{"name":"seed","description":"Set the seed used by the simulated world's random number generators for subsequent steps, without resetting the world. The accepted seed is echoed in the receipt."}],"tags":["isaac-lab","isaac-sim","grasp","robot-arm","reinforcement-learning","simulation","gymnasium"],"backends":["fake"],"served_backend":"fake","evidence":"contract_checked","upstream":{"repo_url":"https://github.com/yitianshi/metaisaacgrasp","commit":"2acd0808ba799f14bcd8450e8443a581586ab543","license":"MIT"},"stars":182,"install":{"openai4s":"openai4s lab add robots/yitianshi__metaisaacgrasp","mhs":"mhs serve robots/yitianshi__metaisaacgrasp --port 7400","mcp":"mhs serve robots/yitianshi__metaisaacgrasp --mcp"}},
{"id":"robots/yizhengzhang1__robomaster-simulator","name":"ICRA RoboMaster AI Challenge simulator","device_id":"mhs://localhost/robomaster-simulator","track":"robots","category":"Simulation","topic":"multi-robot systems","kind":"world.sim","vendor":"Living Machine Lab, ShanghaiTech University","model":null,"mode":"simulated","risk":"R2","family":"ros","role":"sim-env","intro":"ICRA RoboMaster AI Challenge simulator, adapted from yizhengzhang1/robomaster-simulator. It reads `read_referee_state`; runs `pause_physics`, `unpause_physics`, `start_game`, `command_turret` and 1 more. `pause_physics`: pause Gazebo physics with the acknowledged /gazebo/pause_physics service. A simulator: the market serves it with a stand-in that needs no simulator install.","measures":["read_referee_state"],"adjusts":[],"actions":[{"name":"pause_physics","description":"Pause Gazebo physics with the acknowledged /gazebo/pause_physics service"},{"name":"unpause_physics","description":"Resume Gazebo physics with the acknowledged /gazebo/unpause_physics service"},{"name":"start_game","description":"Ask the referee node to start or stop its game loop; the response only acknowledges receipt of the request"},{"name":"command_turret","description":"Publish one turret angle in radians on /jackal0/turret_position; the publication carries no execution acknowledgement"},{"name":"command_base_velocity","description":"Publish one body twist on /jackal0/cmd_vel; the mecanum controller applies its own velocity and acceleration limits and has no execution acknowledgement"}],"tags":["ros","ros1","simulation","gazebo","robomaster","referee","turret","mobile-base"],"backends":["fake"],"served_backend":"fake","evidence":"contract_checked","upstream":{"repo_url":"https://github.com/yizhengzhang1/robomaster-simulator","commit":"ff085e4109a980e482a388f135e9fefcee92becc","license":"LGPL-3.0"},"stars":150,"install":{"openai4s":"openai4s lab add robots/yizhengzhang1__robomaster-simulator","mhs":"mhs serve robots/yizhengzhang1__robomaster-simulator --port 7400","mcp":"mhs serve robots/yizhengzhang1__robomaster-simulator --mcp"}},
{"id":"robots/yueruyin__robot-unitree-g1","name":"Unitree G1 humanoid (MuJoCo scene g1_53dof)","device_id":"mhs://localhost/g1","track":"robots","category":"Simulation","topic":"humanoid robots","kind":"world.sim","vendor":"Yueruyin","model":"Unitree G1 (53 DOF, MuJoCo scene)","mode":"simulated","risk":"R0","family":"mujoco","role":"sim-env","intro":"Unitree G1 humanoid (MuJoCo scene g1_53dof), adapted from yueruyin/robot-unitree-g1. It reads `time_ms`, `qpos`, `qvel`, `ctrl` and 4 more; runs `step` and `reset`. `step`: advance the simulated world by a bounded number of fixed timesteps, optionally applying an action for each step, and return the resulting observation and terminal flags. A simulator: the market serves it with a stand-in that needs no simulator install.","measures":["time_ms","qpos","qvel","ctrl","tick","timestep_ms","seed","native_checkpoint"],"adjusts":[],"actions":[{"name":"step","description":"Advance the simulated world by a bounded number of fixed timesteps, optionally applying an action for each step, and return the resulting observation and terminal flags."},{"name":"reset","description":"Reset the simulated world to a scenario start state and return the initial observation. When a seed is supplied the endpoint records it in the receipt; otherwise the endpoint's declared default seed applies."}],"tags":["unitree","g1","humanoid","mujoco","simulation","whole-body","legged"],"backends":["fake"],"served_backend":"fake","evidence":"contract_checked","upstream":{"repo_url":"https://github.com/yueruyin/robot-unitree-g1","commit":"5de811e5ef85407d99f59ca605f90df6f51df601","license":"Apache-2.0"},"stars":131,"install":{"openai4s":"openai4s lab add robots/yueruyin__robot-unitree-g1","mhs":"mhs serve robots/yueruyin__robot-unitree-g1 --port 7400","mcp":"mhs serve robots/yueruyin__robot-unitree-g1 --mcp"}},
{"id":"robots/yzqin__dexpoint-release","name":"DexPoint Allegro relocation (SAPIEN manipulation simulation)","device_id":"mhs://localhost/dexpoint_allegro_relocate","track":"robots","category":"Simulation","topic":"robot manipulation","kind":"world.sim","vendor":"Yuzhe Qin et al.","model":"DexPoint 0.4.0","mode":"simulated","risk":"R0","family":"gymnasium","role":"sim-env","intro":"DexPoint Allegro relocation (SAPIEN manipulation simulation), adapted from yzqin/dexpoint-release. It reads `observation`, `reward`, `terminated`, `truncated` and 4 more; runs `step`, `reset` and `seed`. `step`: advance the simulated world by a bounded number of fixed timesteps, optionally applying an action for each step, and return the resulting observation and terminal flags. A simulator: the market serves it with a stand-in that needs no simulator install.","measures":["observation","reward","terminated","truncated","tick","episode","seed","info"],"adjusts":[],"actions":[{"name":"step","description":"Advance the simulated world by a bounded number of fixed timesteps, optionally applying an action for each step, and return the resulting observation and terminal flags."},{"name":"reset","description":"Reset the simulated world to a scenario start state and return the initial observation. When a seed is supplied the endpoint records it in the receipt; otherwise the endpoint's declared default seed applies."},{"name":"seed","description":"Set the seed used by the simulated world's random number generators for subsequent steps, without resetting the world. The accepted seed is echoed in the receipt."}],"tags":["dexpoint","dexterous-manipulation","allegro","sapien","simulation","reinforcement-learning","point-cloud"],"backends":["fake"],"served_backend":"fake","evidence":"contract_checked","upstream":{"repo_url":"https://github.com/yzqin/dexpoint-release","commit":"17f1e238bb120d92baabe8207494d48476fea289","license":"MIT"},"stars":107,"install":{"openai4s":"openai4s lab add robots/yzqin__dexpoint-release","mhs":"mhs serve robots/yzqin__dexpoint-release --port 7400","mcp":"mhs serve robots/yzqin__dexpoint-release --mcp"}},
{"id":"robots/zayfod__pycozmo","name":"Digital Dream Labs Cozmo (pycozmo.Client)","device_id":"mhs://localhost/cozmo","track":"robots","category":"Robot arms and grippers","topic":null,"kind":"robot.arm","vendor":"Digital Dream Labs","model":"Cozmo robot","mode":"hardware","risk":"R1","family":"python-object","role":"device-driver","intro":"Digital Dream Labs Cozmo (pycozmo.Client), adapted from zayfod/pycozmo. It reads `head_angle`, `lift_height`, `lift_angle`, `battery_voltage` and 2 more; runs `move_joints`. `move_joints`: command one or more actuated joints to target positions in joint space, optionally over a declared duration, and report whether the target was reached within tolerance. A hardware driver: the market serves its fake backend, so no instrument is needed.","measures":["head_angle","lift_height","lift_angle","battery_voltage","is_picked_up","is_moving"],"adjusts":[],"actions":[{"name":"move_joints","description":"Command one or more actuated joints to target positions in joint space, optionally over a declared duration, and report whether the target was reached within tolerance."}],"tags":["robot","cozmo","head","lift","joint control","pycozmo"],"backends":["fake","hardware"],"served_backend":"fake","evidence":"contract_checked","upstream":{"repo_url":"https://github.com/zayfod/pycozmo","commit":"1b6dcd9b869a3784f1d8b02e820bb033f95fd13a","license":"MIT"},"stars":0,"install":{"openai4s":"openai4s lab add robots/zayfod__pycozmo","mhs":"mhs serve robots/zayfod__pycozmo --port 7400","mcp":"mhs serve robots/zayfod__pycozmo --mcp"}},
{"id":"robots/zhefan-xu__isaac-go2-ros2","name":"Unitree Go2 in Isaac Sim / Isaac Lab (rough terrain)","device_id":"mhs://localhost/isaac-go2-ros2","track":"robots","category":"Simulation","topic":"legged robots","kind":"world.sim","vendor":"Zhefan Xu","model":"Unitree Go2","mode":"simulated","risk":"R0","family":"gymnasium","role":"sim-env","intro":"Unitree Go2 in Isaac Sim / Isaac Lab (rough terrain), adapted from zhefan-xu/isaac-go2-ros2. It reads `observation`, `reward`, `terminated`, `truncated` and 4 more; runs `step`, `reset` and `seed`. `step`: advance the simulated world by a bounded number of fixed timesteps, optionally applying an action for each step, and return the resulting observation and terminal flags. A simulator: the market serves it with a stand-in that needs no simulator install.","measures":["observation","reward","terminated","truncated","tick","episode","seed","info"],"adjusts":[],"actions":[{"name":"step","description":"Advance the simulated world by a bounded number of fixed timesteps, optionally applying an action for each step, and return the resulting observation and terminal flags."},{"name":"reset","description":"Reset the simulated world to a scenario start state and return the initial observation. When a seed is supplied the endpoint records it in the receipt; otherwise the endpoint's declared default seed applies."},{"name":"seed","description":"Set the seed used by the simulated world's random number generators for subsequent steps, without resetting the world. The accepted seed is echoed in the receipt."}],"tags":["unitree-go2","quadruped","isaac-sim","isaac-lab","reinforcement-learning","ros2","simulation","gymnasium"],"backends":["fake"],"served_backend":"fake","evidence":"contract_checked","upstream":{"repo_url":"https://github.com/zhefan-xu/isaac-go2-ros2","commit":"f201692a5519e6e6ed058637ce93a2f603f016f2","license":"NOASSERTION"},"stars":593,"install":{"openai4s":"openai4s lab add robots/zhefan-xu__isaac-go2-ros2","mhs":"mhs serve robots/zhefan-xu__isaac-go2-ros2 --port 7400","mcp":"mhs serve robots/zhefan-xu__isaac-go2-ros2 --mcp"}},
{"id":"robots/zhouxian__fluidlab","name":"FluidLab Circulation-v0 (indoor air circulation)","device_id":"mhs://localhost/fluidlab-circulation","track":"robots","category":"Simulation","topic":"robot manipulation","kind":"world.sim","vendor":"Zhou Xian et al.","model":"FluidLab Circulation-v0","mode":"simulated","risk":"R0","family":"gymnasium","role":"sim-env","intro":"FluidLab Circulation-v0 (indoor air circulation), adapted from zhouxian/fluidlab. It reads `observation`, `reward`, `terminated`, `truncated` and 4 more; runs `step`, `reset` and `seed`. `step`: advance the simulated world by a bounded number of fixed timesteps, optionally applying an action for each step, and return the resulting observation and terminal flags. A simulator: the market serves it with a stand-in that needs no simulator install.","measures":["observation","reward","terminated","truncated","tick","episode","seed","info"],"adjusts":[],"actions":[{"name":"step","description":"Advance the simulated world by a bounded number of fixed timesteps, optionally applying an action for each step, and return the resulting observation and terminal flags."},{"name":"reset","description":"Reset the simulated world to a scenario start state and return the initial observation. When a seed is supplied the endpoint records it in the receipt; otherwise the endpoint's declared default seed applies."},{"name":"seed","description":"Set the seed used by the simulated world's random number generators for subsequent steps, without resetting the world. The accepted seed is echoed in the receipt."}],"tags":["fluidlab","fluid-simulation","differentiable-physics","reinforcement-learning","simulation","gym"],"backends":["fake"],"served_backend":"fake","evidence":"contract_checked","upstream":{"repo_url":"https://github.com/zhouxian/fluidlab","commit":"7295eb6ed7ee92b2be471fd30b432238577f28ce","license":"NOASSERTION"},"stars":256,"install":{"openai4s":"openai4s lab add robots/zhouxian__fluidlab","mhs":"mhs serve robots/zhouxian__fluidlab --port 7400","mcp":"mhs serve robots/zhouxian__fluidlab --mcp"}},
{"id":"robots/zibindong__metaworld2gym","name":"Meta-World assembly through the metaworld2gym wrapper (simulated)","device_id":"mhs://localhost/metaworld2gym-assembly","track":"robots","category":"Simulation","topic":"robot arm manipulation","kind":"world.sim","vendor":"Zibin Dong","model":"metaworld2gym MetaWorldEnv / assembly-v2-goal-observable","mode":"simulated","risk":"R0","family":"gymnasium","role":"sim-env","intro":"Meta-World assembly through the metaworld2gym wrapper (simulated), adapted from zibindong/metaworld2gym. It reads `observation`, `reward`, `terminated`, `truncated` and 4 more; runs `step`, `reset` and `seed`. `step`: advance the simulated world by a bounded number of fixed timesteps, optionally applying an action for each step, and return the resulting observation and terminal flags. A simulator: the market serves it with a stand-in that needs no simulator install.","measures":["observation","reward","terminated","truncated","tick","episode","seed","info"],"adjusts":[],"actions":[{"name":"step","description":"Advance the simulated world by a bounded number of fixed timesteps, optionally applying an action for each step, and return the resulting observation and terminal flags."},{"name":"reset","description":"Reset the simulated world to a scenario start state and return the initial observation. When a seed is supplied the endpoint records it in the receipt; otherwise the endpoint's declared default seed applies."},{"name":"seed","description":"Set the seed used by the simulated world's random number generators for subsequent steps, without resetting the world. The accepted seed is echoed in the receipt."}],"tags":["metaworld","metaworld2gym","assembly","mujoco","manipulation","simulation","gym"],"backends":["fake"],"served_backend":"fake","evidence":"contract_checked","upstream":{"repo_url":"https://github.com/zibindong/metaworld2gym","commit":"9e7d3da16a86b6bed1353e1c2042115ed75edb1a","license":"MIT"},"stars":3,"install":{"openai4s":"openai4s lab add robots/zibindong__metaworld2gym","mhs":"mhs serve robots/zibindong__metaworld2gym --port 7400","mcp":"mhs serve robots/zibindong__metaworld2gym --mcp"}},
{"id":"robots/zichunxx__panda_mujoco_gym","name":"Franka Panda pick-and-place scene (panda_mujoco_gym)","device_id":"mhs://localhost/franka-panda","track":"robots","category":"Simulation","topic":"robot arm manipulation","kind":"world.sim","vendor":"zichunxx","model":"Franka Panda pick-and-place MuJoCo scene (pick_and_place.xml)","mode":"simulated","risk":"R0","family":"mujoco","role":"sim-env","intro":"Franka Panda pick-and-place scene (panda_mujoco_gym), adapted from zichunxx/panda_mujoco_gym. It reads `time_ms`, `qpos`, `qvel`, `ctrl` and 4 more; runs `step` and `reset`. `step`: advance the simulated world by a bounded number of fixed timesteps, optionally applying an action for each step, and return the resulting observation and terminal flags. A simulator: the market serves it with a stand-in that needs no simulator install.","measures":["time_ms","qpos","qvel","ctrl","tick","timestep_ms","seed","native_checkpoint"],"adjusts":[],"actions":[{"name":"step","description":"Advance the simulated world by a bounded number of fixed timesteps, optionally applying an action for each step, and return the resulting observation and terminal flags."},{"name":"reset","description":"Reset the simulated world to a scenario start state and return the initial observation. When a seed is supplied the endpoint records it in the receipt; otherwise the endpoint's declared default seed applies."}],"tags":["mujoco","franka","panda","manipulation","pick-and-place","simulation"],"backends":["fake"],"served_backend":"fake","evidence":"contract_checked","upstream":{"repo_url":"https://github.com/zichunxx/panda_mujoco_gym","commit":"e9881d993234875ee1d55d717176bf7999bdb583","license":"MIT"},"stars":170,"install":{"openai4s":"openai4s lab add robots/zichunxx__panda_mujoco_gym","mhs":"mhs serve robots/zichunxx__panda_mujoco_gym --port 7400","mcp":"mhs serve robots/zichunxx__panda_mujoco_gym --mcp"}},
{"id":"robots/zihanwang0422__muarm","name":"muarm Franka Panda pick-and-place (MuJoCo)","device_id":"mhs://localhost/muarm-panda-pick-place","track":"robots","category":"Simulation","topic":"robot arm manipulation","kind":"world.sim","vendor":"zihanwang0422","model":"muarm panda_pick_place","mode":"simulated","risk":"R0","family":"mujoco","role":"sim-env","intro":"muarm Franka Panda pick-and-place (MuJoCo), adapted from zihanwang0422/muarm. It reads `time_ms`, `qpos`, `qvel`, `ctrl` and 4 more; runs `step` and `reset`. `step`: advance the simulated world by a bounded number of fixed timesteps, optionally applying an action for each step, and return the resulting observation and terminal flags. A simulator: the market serves it with a stand-in that needs no simulator install.","measures":["time_ms","qpos","qvel","ctrl","tick","timestep_ms","seed","native_checkpoint"],"adjusts":[],"actions":[{"name":"step","description":"Advance the simulated world by a bounded number of fixed timesteps, optionally applying an action for each step, and return the resulting observation and terminal flags."},{"name":"reset","description":"Reset the simulated world to a scenario start state and return the initial observation. When a seed is supplied the endpoint records it in the receipt; otherwise the endpoint's declared default seed applies."}],"tags":["arm","franka","manipulation","mujoco","panda","robot","simulation"],"backends":["fake"],"served_backend":"fake","evidence":"contract_checked","upstream":{"repo_url":"https://github.com/zihanwang0422/muarm","commit":"9d328f16df05b5a6199ebd0c59048d58c6cd6326","license":"NOASSERTION"},"stars":5,"install":{"openai4s":"openai4s lab add robots/zihanwang0422__muarm","mhs":"mhs serve robots/zihanwang0422__muarm --port 7400","mcp":"mhs serve robots/zihanwang0422__muarm --mcp"}},
{"id":"robots/zitongbai__legged_lab","name":"Unitree G1 AMP locomotion in Isaac Lab (legged_lab)","device_id":"mhs://localhost/legged-lab-amp-g1","track":"robots","category":"Simulation","topic":"humanoid robots","kind":"world.sim","vendor":"zitongbai","model":"legged_lab","mode":"simulated","risk":"R0","family":"gymnasium","role":"sim-env","intro":"Unitree G1 AMP locomotion in Isaac Lab (legged_lab), adapted from zitongbai/legged_lab. It reads `observation`, `reward`, `terminated`, `truncated` and 4 more; runs `step`, `reset` and `seed`. `step`: advance the simulated world by a bounded number of fixed timesteps, optionally applying an action for each step, and return the resulting observation and terminal flags. A simulator: the market serves it with a stand-in that needs no simulator install.","measures":["observation","reward","terminated","truncated","tick","episode","seed","info"],"adjusts":[],"actions":[{"name":"step","description":"Advance the simulated world by a bounded number of fixed timesteps, optionally applying an action for each step, and return the resulting observation and terminal flags."},{"name":"reset","description":"Reset the simulated world to a scenario start state and return the initial observation. When a seed is supplied the endpoint records it in the receipt; otherwise the endpoint's declared default seed applies."},{"name":"seed","description":"Set the seed used by the simulated world's random number generators for subsequent steps, without resetting the world. The accepted seed is echoed in the receipt."}],"tags":["unitree","g1","humanoid","locomotion","amp","motion-imitation","isaac-sim","isaac-lab","reinforcement-learning","simulation","gymnasium"],"backends":["fake"],"served_backend":"fake","evidence":"contract_checked","upstream":{"repo_url":"https://github.com/zitongbai/legged_lab","commit":"69b7f73d912a9d5695a60b5bed41d0785c8b302e","license":"Apache-2.0"},"stars":430,"install":{"openai4s":"openai4s lab add robots/zitongbai__legged_lab","mhs":"mhs serve robots/zitongbai__legged_lab --port 7400","mcp":"mhs serve robots/zitongbai__legged_lab --mcp"}},
{"id":"robots/zzy5510__ur5-grasp-and-kinect-demo-on-gazebo","name":"UR5 grasp and Kinect Gazebo simulation","device_id":"mhs://localhost/ur5-grasp-kinect","track":"robots","category":"Simulation","topic":"robot arm manipulation","kind":"world.sim","vendor":"zzy5510","model":null,"mode":"simulated","risk":"R2","family":"ros","role":"sim-env","intro":"UR5 grasp and Kinect Gazebo simulation, adapted from zzy5510/ur5-grasp-and-kinect-demo-on-gazebo. It reads `read_sim_clock` and `read_joint_state`; runs `pause` and `resume`. `pause`: pause the Gazebo world with the acknowledged /gazebo/pause_physics service; the receipt is the service acknowledgement, not a stopped-state measurement. A simulator: the market serves it with a stand-in that needs no simulator install.","measures":["read_sim_clock","read_joint_state"],"adjusts":[],"actions":[{"name":"pause","description":"Pause the Gazebo world with the acknowledged /gazebo/pause_physics service; the receipt is the service acknowledgement, not a stopped-state measurement"},{"name":"resume","description":"Resume the Gazebo world with the acknowledged /gazebo/unpause_physics service; an interrupted controller goal may continue after the unpause"}],"tags":["ros","ros1","gazebo","simulation","ur5","robot-arm","kinect","pause"],"backends":["fake"],"served_backend":"fake","evidence":"contract_checked","upstream":{"repo_url":"https://github.com/zzy5510/ur5-grasp-and-kinect-demo-on-gazebo","commit":"a5b25d72fe7637ebfad26a60c4bc57c1a8b418c4","license":"NOASSERTION"},"stars":57,"install":{"openai4s":"openai4s lab add robots/zzy5510__ur5-grasp-and-kinect-demo-on-gazebo","mhs":"mhs serve robots/zzy5510__ur5-grasp-and-kinect-demo-on-gazebo --port 7400","mcp":"mhs serve robots/zzy5510__ur5-grasp-and-kinect-demo-on-gazebo --mcp"}}
 ]
}
