mcpField
A
Atlas Scientific EZO Sensors

Atlas Scientific EZO Sensors

Local
github.comScience & Education23Updated 5w ago

About Atlas Scientific EZO Sensors

An MCP server for Atlas Scientific EZO sensor circuits, providing UART readings, calibration, and logging for pH, dissolved oxygen, conductivity, and other measurements. It is intended for bioreactors, fermentation, and environmental monitoring; tested with a simulator but not yet verified on hardware.

Key features

  1. 01Read measurements from sensor types
  2. 02Calibrate sensors and check status
  3. 03Log reading series and statistics
  4. 04Set temperature and DO compensation
  5. 05Configure conductivity probe constant

Use cases

  1. 01Track pH or dissolved oxygen in a bioreactor
  2. 02Monitor conductivity changes in nutrient solution
  3. 03Calibrate a probe after checking stability
  4. 04Read humidity, CO2, or pressure

MCP support

Provides MCP clients with tools to read and log EZO sensor data, inspect calibration status, and adjust sensor settings. Read-only mode can restrict calibration and setting changes.

Configuration

Local server config is the same for every client. Copy it into your client’s MCP config file.

mcp.json · Universal config
{
"mcpServers": {
"k-dense-ai-labmcp-atlas-ezo": {
"command": "uvx",
"args": [
"labmcp-atlas-ezo"
],
"env": {
"LABMCP_ADDRESS": "<LABMCP_ADDRESS>",
"LABMCP_SIMULATE": "<LABMCP_SIMULATE>",
"LABMCP_READ_ONLY": "<LABMCP_READ_ONLY>",
"LABMCP_LIMITS": "<LABMCP_LIMITS>"
}
}
}
}
Run commanduvx labmcp-atlas-ezo
Environment variables to set
LABMCP_ADDRESSInstrument address, e.g. serial:///dev/ttyUSB0 or tcp://192.168.1.50:5025
LABMCP_SIMULATESet to 1 to use the built-in simulator (no hardware)
LABMCP_READ_ONLYSet to 1 to disable all state-changing tools
LABMCP_LIMITSSafety limit overrides, e.g. max_temperature_c=80

Local servers need a runtime on your machine (e.g. Node.js 18+). Config file locations differ by client; see your client’s docs.

Packages
pypilabmcp-atlas-ezo0.1.2

Tools

13

Saved tool list · updated 2w ago

This tool takes no parameters.

Details

From the project README

Atlas Scientific EZO Sensors — MCP Server

Let an AI agent read, calibrate and log Atlas Scientific EZO™ sensor circuits (pH, ORP, dissolved oxygen, conductivity, RTD temperature, humidity, CO2 and pressure) over their documented UART command set. Useful for bioreactors, cell-culture media, fermentation, hydroponics, aquaculture and environmental monitoring.

Packagelabmcp-atlas-ezo
InstrumentsEZO-pH, EZO-ORP, EZO-DO, EZO-EC, EZO-RTD, EZO-HUM, EZO-CO2, EZO-PRS (type detected automatically with i)
InterfacesUART via a USB-serial adapter or Atlas isolated carrier board, or a serial-to-Ethernet bridge (one circuit per port)
ProtocolEZO UART command set (pH datasheet V 6.1, ORP V 5.2, DO V 5.8, EC V 6.7, RTD V 3.7, HUM V 1.5, CO2 V 2.3, PRS V 2.3)
Status🧪 simulated: tested against a wire-level EZO simulator, not yet verified on hardware. Report a hardware test

Try it without hardware

uvx labmcp-atlas-ezo --simulate --check
uvx labmcp-atlas-ezo --simulate --option sim_sensor=DO --check     # also ORP, EC, RTD, HUM, CO2, PRS

Connect your instrument

  1. Circuit setup: the circuit must be in UART mode (LED green/cyan; blue means I2C mode, see "Change to UART mode" in the datasheet). Factory settings are 9600 baud, 8 data bits, no parity, 1 stop bit, no flow control, CR line endings. Cross TX/RX between the circuit and the adapter, and use an electrically isolated carrier board when the probe sits in the same liquid as other probes or pumps.
  2. Find the port: uvx labmcp ports
  3. Test the connection:
    uvx labmcp-atlas-ezo --address /dev/ttyUSB0 --check                # Linux
    uvx labmcp-atlas-ezo --address /dev/tty.usbserial-XXXX --check     # macOS
    uvx labmcp-atlas-ezo --address COM5 --check                        # Windows
    uvx labmcp-atlas-ezo --address "serial://COM5?baudrate=38400" --check   # non-default baud rate
    
    On connect the server sends C,0 (continuous readings off, so replies are not interleaved with readings) and *OK,1 (response codes on, the factory default). The circuit keeps both settings across power cycles.

Add to your MCP client

Claude Code

claude mcp add ph-probe -- uvx labmcp-atlas-ezo --address /dev/ttyUSB0

Claude Desktop / Cursor / Windsurf (claude_desktop_config.json, .cursor/mcp.json, …)

{
  "mcpServers": {
    "ph-probe": {
      "command": "uvx",
      "args": ["labmcp-atlas-ezo", "--address", "/dev/ttyUSB0"]
    },
    "do-probe": {
      "command": "uvx",
      "args": ["labmcp-atlas-ezo", "--address", "/dev/ttyUSB1"]
    }
  }
}

Run one server per circuit. Add --read-only to allow readings but block calibration and settings changes. For other clients, generate the snippet with uvx labmcp config atlas-ezo --address /dev/ttyUSB0 --client vscode.

Tools

ToolKindDescription
calibrate🎛 controlStore one calibration point. The probe must already be in the named standard (buffer, air, dry, ...) with a stable reading. Point names are validated per circuit type. pH: a mid calibration erases existing low/high points, so always do mid first. EC: do dry first.
clear_calibration🎛 controlDelete all stored calibration data (Cal,clear). pH/ORP/DO/EC/RTD return to uncalibrated; CO2/PRS return to their factory calibration. The probe must be recalibrated afterwards.
get_calibration_status👁 readReport how many calibration points are stored and what that means for this circuit type; for pH also the probe slope (acid/base % of ideal and zero offset in mV).
get_command_log👁 readReturn the most recent raw commands sent to / replies received from the instrument (newest last). Useful for debugging and for recording what was done.
get_connection_info👁 readReport which instrument is connected (identity, address, simulated or real), whether the server is read-only, and the active safety limits. Call this first.
get_info👁 readReport the circuit type, firmware, device name, supply voltage and last restart reason, LED state, calibration state, temperature compensation and type-specific settings (enabled outputs, EC probe constant K, DO salinity/pressure compensation).
log_series👁 readRecord a series of readings (e.g. to watch a probe stabilise before calibrating, follow pH or DO in a bioreactor, or log temperature). Returns every point plus mean, stdev, min, max and drift per minute for each output.
read_value👁 readTake one reading (about 1 s) and return every enabled output with its unit: pH; ORP in mV; DO in mg/L (and % saturation if enabled); EC in µS/cm plus TDS (ppm), salinity (PSU) and specific gravity if enabled; RTD temperature; humidity %RH (+ air temperature, dew point); CO2 ppm; or pressure.
reconnect🛑 safetyClose and re-open the connection to the instrument (e.g. after it was power cycled or a cable was re-plugged).
set_do_compensation🎛 controlDO circuits only: set salinity compensation (irrelevant below ~2500 µS/cm) and/or atmospheric pressure compensation (default 101.3 kPa; lower at altitude). Neither is retained through a power cycle.
set_led🎛 controlTurn the circuit's status LED on or off. Returns the new LED state.
set_probe_constant🎛 controlEC circuits only: set the conductivity probe's cell constant K to match the probe (printed on it). Recalibrate after changing it. Returns the K now in use.
set_temperature_compensation🎛 controlSet the sample temperature used to compensate pH, EC or DO readings (T,n; always °C). Not retained through a power cycle. Returns the value the circuit now uses.

get_connection_info, get_command_log and reconnect are built into every LabMCP server.

Safety limits

LimitDefaultMeaning
max_series_duration_s600 sLongest logging series an agent may start

Override at launch: --limit max_series_duration_s=3600 (3600 s is the most one log_series call can run; split longer logs into several calls). log_series writes its optional save_path only to a new .csv file (existing files are never overwritten). These circuits only measure, so there are no hazardous tools; the risk is a bad calibration, which is why calibrate validates point names and standard values per circuit type and clear_calibration is hidden in --read-only mode.

Example prompts

  • "What sensor is connected, is it calibrated, and what's the pH slope?"
  • "The pH probe is in pH 7.00 buffer. Log it every 2 s until it's stable to ±0.01, then calibrate the midpoint. Then walk me through pH 4 and pH 10."
  • "The bioreactor is at 37 °C: set the temperature compensation and read the dissolved oxygen in mg/L and % saturation."
  • "Log conductivity, TDS and salinity every 30 s for 10 minutes and tell me whether the nutrient solution is drifting."
  • "Turn off the LED on the DO circuit, we're running a light-sensitive culture."

Notes

  • Units per circuit: pH; ORP in mV; DO in mg/L and (if enabled with O,%,1) % saturation; EC in µS/cm plus TDS (ppm), salinity (PSU) and specific gravity when enabled; RTD in its configured scale (°C/K/°F); HUM in %RH plus air temperature and dew point (°C) when enabled; CO2 in ppm (+ internal temperature); PRS in its configured unit (psi, atm, bar, kPa, inH2O, cmH2O). Which outputs are enabled is read from the circuit (O,?, S,?, U,?) rather than assumed.
  • Output order of multi-value readings follows the datasheets (EC: EC,TDS,S,SG). The DO order (mg/L then % saturation) is not spelled out in the DO datasheet; it was cross-checked against the open-source EnviroDIY ModularSensors and feastorg ezo-driver libraries. Please report if your circuit differs.
  • Temperature compensation (T,n, pH/EC/DO only) and DO salinity/pressure compensation are not retained when the circuit loses power; set them again after a power cycle. Readings report the compensation temperature in use.
  • Calibration rules enforced: pH midpoint must be calibrated before low/high (a new mid erases low/high, as the datasheet warns), with mid 6-8, low 0-6.5 and high 7.5-14; ORP ±1020 mV; EC 0.07-500,000 µS/cm (do dry first); CO2 high point 3000-5000 ppm; RTD -126 to 1254 °C. The server cannot see which standard the probe is actually in: the agent must confirm that with you.
  • An RTD reading of -1023 means no probe is connected; the reading includes a warning.
  • DO queries such as P,? answer ?,P,90.25 (note the extra comma) per the datasheet; the driver accepts both forms. The DO salinity reply contains a micro sign, so the port is read as Latin-1.
  • Not exposed as tools (verified but not useful or too risky for an agent): Factory (erases calibration), Sleep, Find, Baud, I2C, Plock, calibration Export/Import, the RTD data logger, and the HUM/CO2/PRS alarm pins. EZO pumps (EZO-PMP) and other actuator circuits are refused on connect.

Hardware verification

ModelFirmwareInterfaceVerified byDate
none yet: be the first

Comments

Markdown supported

New to MCP?

From what the protocol is to installing your first server, these answers cover most first questions.

An open protocol that defines how AI applications connect to external tools and data in a uniform way. Clients talk to the model; MCP servers provide tools, resources and prompt templates. They exchange standard messages, so one server can be reused by many clients.