Build
Instruments supported
What you can put under OpenMHP today, and how much work each route is. Most bench instruments need no code at all; anything already driven by SiLA 2, PyLabRobot, MADSci, OPC UA or ROS 2 needs a few lines of bindings.
The short answer for a scientist: run npx @sinkush/openmhp setup, then tell your agent to "find the instruments on my network" and "onboard" the rest. The agent uses the routes on this page for you. Come here when you want to know what is possible before you start.
Routes, from least to most effort
| Route | Fits | Effort | How |
|---|---|---|---|
| Already speaks OpenMHP | a device served by mhp serve on a bench PC, or a vendor device with MHP built in | none | mhp_lab op="scan" finds it; add its address |
| Community package | a model someone has already packaged | set location and port | mhp_lab op="registry", then add target="github:…" |
| Serial, no code | any instrument with text commands over USB or RS-232 | paste commands from the manual | the onboarding interview picks kind: serial; commands go in descriptor.yaml |
| Operated by hand | anything with no cable, or as a placeholder | answer the interview | the interview picks kind: manual; the agent instructs the operator and records readings |
| Adapter | instruments driven by SiLA 2, PyLabRobot, MADSci, OPC UA, ROS 2 | a few lines of bindings | see the sections below and the adapters page |
| Native driver | a vendor SDK or a binary protocol | a short Python class | the add an instrument page, route A |
Through PyLabRobot
PyLabRobot is an open-source, hardware-agnostic library for liquid handlers and other lab automation devices. Every device it drives becomes an OpenMHP device through plr_device(machine): each public coroutine on the machine becomes an action with parameters read from its signature. Devices in PyLabRobot's catalogue at the time of writing include:
| Category | Instruments | On OpenMHP |
|---|---|---|
| Liquid handlers | Hamilton STAR, STARlet, Vantage; Opentrons OT-2 and Flex; Tecan EVO | community package for the Flex ships; others follow the same three-line driver.py |
| Plate readers | BMG CLARIOstar; Agilent BioTek Cytation 5 (imaging) | plr_device(reader); readings return as job results saved to the run folder |
| Heater-shakers, incubators | Inheco ThermoShake and heater-shakers; Hamilton HeaterShaker; Thermo Cytomat incubators | temperature and speed become settings with limits you set |
| Centrifuges, sealers, peelers | Agilent VSpin; Azenta A4S sealer; Brooks XPeel peeler | each operation becomes an action; gate the ones that move with interlocks |
| Balances, pumps, tilters | Mettler Toledo WXS205SDU; Masterflex peristaltic pumps; Hamilton tilt modules | readings as signals, flow and angle as settings |
Check PyLabRobot's current documentation for the exact list; it grows monthly. The simulated twin for any PyLabRobot device is its chatterbox backend, which the bundled Flex package uses.
Through SiLA 2
SiLA 2 is the lab-automation industry standard for instrument interfaces. Any instrument with a SiLA 2 server, whether from the vendor or from a driver catalogue, becomes an OpenMHP device through sila_device(host, port, …): properties become signals, one-parameter commands become settings, commands become actions, and observable commands stream progress. SiLA servers exist for instruments from Hamilton, Tecan, Beckman Coulter, Agilent, Eppendorf, Thermo Fisher and many smaller vendors, and for generic classes such as balances, pumps, readers and incubators through community and commercial driver libraries.
How to get one on OpenMHP: list the server's implemented features with the SiLA client, choose the properties and commands you want exposed, and write the binding map shown on the adapters page. Give every setting limits; SiLA does not carry them.
Through MADSci
MADSci, from Argonne National Laboratory, drives self-driving lab workcells through nodes that describe their own actions. The OpenMHP adapter needs no binding map: madsci_node(url) reads the node's actions and state. Node modules published by the MADSci and RPL projects include:
| Category | Nodes |
|---|---|
| Plate handling | Precise PF400 arm; Hudson SciClops plate crane; Universal Robots arms |
| Liquid handling | Opentrons OT-2; the Barty peristaltic dispenser |
| Readers and thermocyclers | Hidex Sense plate reader; Biometra thermocyclers |
| Sealing, peeling, storage | Azenta A4S sealer; Brooks XPeel peeler; Liconic incubators and hotels |
| Sensing | Camera nodes |
How to get one on OpenMHP: point the adapter at the node's URL and set approval levels for actions that move. A MADSci workcell manager can also act as an OpenMHP host by pointing at the directory.
Through OPC UA and Modbus
OPC UA is how process equipment and PLCs expose themselves: furnaces, environmental chambers, bioreactors, dosing systems, conveyors, and anything behind a Siemens, Beckhoff, Rockwell or Schneider controller. Sartorius bioreactor controllers, Eppendorf and Thermo chambers, and most industrial ovens ship with or can be given an OPC UA server. Modbus devices, including many temperature controllers and power supplies, use the same binding shape with two register callables.
How to get one on OpenMHP: browse the server's node tree, pick the variables to read and write and the methods to call, and write the map shown on the adapters page. PLC safety logic stays primary; OpenMHP limits stop the agent from asking for something unsafe.
Through ROS 2
ROS 2 is where research robotics lives. Arms from Universal Robots, Franka, KUKA, Kinova and Doosan have ROS 2 drivers; so do Robotiq grippers, mobile bases, and most cameras and force sensors. Topics become signals, published topics become settings, action servers become actions with progress from feedback, and a Trigger service becomes the emergency stop.
How to get one on OpenMHP: source your ROS 2 workspace on the bench PC, write the binding map, and put an example goal in the action's examples so agents build correct messages.
Native and serial, today
| Package | Instrument | Route |
|---|---|---|
ika-c-mag-hs7 | IKA C-MAG HS 7 stirrer hotplate | serial, NAMUR commands; simulated twin included |
opentrons-flex | Opentrons Flex | PyLabRobot adapter; chatterbox twin |
manual-benchtop-centrifuge | any benchtop centrifuge | operator-run template |
thermocycler-01, arm-01 | bundled simulators | for trying everything with nothing plugged in |
Instruments that answer text commands over a cable, and therefore fit the no-code serial route, include IKA and Heidolph stirrers and hotplates, Julabo and Huber circulators, Mettler Toledo and Sartorius balances, Harvard Apparatus and New Era syringe pumps, Thorlabs stages and shutters, and many spectrometer and power-supply front ends. If the manual has a command table, the interview can use it.
Contribute a package
A package is a folder: DEVICE.md, descriptor.yaml, driver.py, ideally sim.py and a safety card. Open a pull request against the repository under packages/ and add it to registry.json. Every package someone contributes is one no one else has to write.