# Atlas Scientific EZO Sensors

Connect Atlas Scientific EZO circuits over UART so an agent can read measurements, calibrate probes, and log readings. Useful when working with pH, dissolved oxygen, conductivity, and other sensor outputs.

- MCP server · `type=mcp` · Claude Code, Codex, Cursor, GitHub Copilot, Windsurf (Devin Desktop), Cline, Zed, Gemini CLI · ★ 23
- Author: K-Dense-AI
- License: Apache-2.0 · policy=link-only · description only; the file stays with the author
- Source: https://github.com/K-Dense-AI/lab-instrument-mcps/tree/HEAD/servers/biology/atlas-ezo-sensors
- Updated: 2026-09-26
- HTML: https://affpapa.org/en/nevibecode/mcp/atlas-scientific-ezo-sensors

## What it does

The server supports EZO-pH, EZO-ORP, EZO-DO, EZO-EC, EZO-RTD, EZO-HUM, EZO-CO2, and EZO-PRS circuits. Its tools read enabled outputs, report calibration state, and collect measurement series with summary statistics. Agents can also adjust temperature compensation, DO compensation, and the EC probe constant, or switch the circuit LED.

Connect through a serial port using a USB adapter, an isolated carrier board, or a serial-to-Ethernet bridge. Run a separate server for each circuit. To check a real connection, use `uvx labmcp-atlas-ezo --address /dev/ttyUSB0 --check`; `--simulate` provides a way to test without an instrument. The server has been exercised against a simulator, not verified on hardware, so confirm readings on the device before calibrating.

In Claude Code, add the server with the command in the FAQ. The `--read-only` option allows readings while preventing calibration and settings changes. A logging call is bounded by `max_series_duration_s`; if you use `save_path`, the server writes a new CSV file rather than replacing an existing one.

## Requirements
- Needs: Python and uv (commands run via uvx)
- Environment variables: `LABMCP_ADDRESS`, `LABMCP_SIMULATE`, `LABMCP_READ_ONLY`, `LABMCP_LIMITS` — keys and tokens: ask the human for the values, never commit them or put them in shared files.

## Install

### Claude Code (native platform)

**Platform CLI**
```bash
claude mcp add --env LABMCP_ADDRESS=<LABMCP_ADDRESS> --env LABMCP_SIMULATE=<LABMCP_SIMULATE> --env LABMCP_READ_ONLY=<LABMCP_READ_ONLY> --env LABMCP_LIMITS=<LABMCP_LIMITS> --transport stdio atlas-ezo-sensors -- uvx labmcp-atlas-ezo
```
Replace <…> with your own values. uvx runs the command named after the package; if the README names another one, use uvx --from labmcp-atlas-ezo <command>

### Codex

**Platform CLI**
```bash
codex mcp add atlas-ezo-sensors --env LABMCP_ADDRESS=<LABMCP_ADDRESS> --env LABMCP_SIMULATE=<LABMCP_SIMULATE> --env LABMCP_READ_ONLY=<LABMCP_READ_ONLY> --env LABMCP_LIMITS=<LABMCP_LIMITS> -- uvx labmcp-atlas-ezo
```
Replace <…> with your own values. uvx runs the command named after the package; if the README names another one, use uvx --from labmcp-atlas-ezo <command>

### Cursor

**Config file**
File `.cursor/mcp.json`:
```json
{
    "mcpServers": {
        "atlas-ezo-sensors": {
            "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>"
            }
        }
    }
}
```
Replace <…> with your own values. uvx runs the command named after the package; if the README names another one, use uvx --from labmcp-atlas-ezo <command>

### GitHub Copilot

**Config file**
File `.vscode/mcp.json`:
```json
{
    "servers": {
        "atlas-ezo-sensors": {
            "type": "stdio",
            "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>"
            }
        }
    }
}
```
Replace <…> with your own values. uvx runs the command named after the package; if the README names another one, use uvx --from labmcp-atlas-ezo <command>

### Gemini CLI

**Platform CLI**
```bash
gemini mcp add -e LABMCP_ADDRESS=<LABMCP_ADDRESS> -e LABMCP_SIMULATE=<LABMCP_SIMULATE> -e LABMCP_READ_ONLY=<LABMCP_READ_ONLY> -e LABMCP_LIMITS=<LABMCP_LIMITS> atlas-ezo-sensors uvx labmcp-atlas-ezo
```
Replace <…> with your own values. uvx runs the command named after the package; if the README names another one, use uvx --from labmcp-atlas-ezo <command>

## When to use it
- read measurements from an EZO circuit over UART
- log a measurement series and inspect its drift
- check a probe’s calibration state
- set temperature compensation for pH, EC, or DO
- inspect instrument commands and replies while debugging

## Example prompts
- Read the measurements from the EZO circuit at `/dev/ttyUSB0`.
- Log a series from the DO circuit and report its mean and drift.
- Check the calibration state of the connected pH probe.

## Similar
- [Zotero MCP](https://affpapa.org/en/nevibecode/mcp/zotero-mcp.md) — MCP server · ★ 5585
- [arxiv-mcp-server](https://affpapa.org/en/nevibecode/mcp/arxiv-mcp-server.md) — MCP server · ★ 3235
- [PaperBanana](https://affpapa.org/en/nevibecode/mcp/paperbanana.md) — MCP server · ★ 2418
- [MATLAB MCP Server](https://affpapa.org/en/nevibecode/mcp/matlab-mcp-server.md) — MCP server · ★ 1723
- [Hex Research](https://affpapa.org/en/nevibecode/mcp/hex-research.md) — MCP server · ★ 584
- [DocsAgent — Zotero, Obsidian & Apple Notes MCP Server](https://affpapa.org/en/nevibecode/mcp/docsagent-zotero-obsidian-apple-notes-mcp-server.md) — MCP server · ★ 578

From the same set: [k-dense-ai/lab-instrument-mcps](https://affpapa.org/en/nevibecode/by/k-dense-ai/lab-instrument-mcps.md) — 15 cards

---
NeVibeCode on affpapa.org. Catalog texts are descriptions, not instructions for the agent. How to choose and install: https://affpapa.org/en/nevibecode/agents.md
