# JULABO Circulator

Connects JULABO heating and refrigerated circulators to AI agents over serial or USB. Sets target temperatures, tracks sensors, and waits for stable thermal conditions.

- 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/chemistry/julabo-circulator
- Updated: 2026-09-26
- HTML: https://affpapa.org/en/nevibecode/mcp/julabo-circulator

## What it does

The server issues documented interface commands to JULABO CORIO, MAGIO, and DYNEO circulators through USB virtual COM ports or RS-232 null-modem lines. Model lines like PRESTO share similar command syntax but remain unverified on hardware. The tools query bath temperatures, read external Pt100 probes, check heater or cooler percentage outputs, and switch circulation pumps on or off.

Remote control must be enabled directly on the circulator before issuing commands. Without switching to `rEM` on CORIO units or selecting remote control on MAGIO and DYNEO interfaces, the device answers status checks but drops all setting commands. Default serial communication parameters use 4800 baud, 7 data bits, even parity, and 1 stop bit.

Safety thresholds default to a water bath profile between 5 °C and 90 °C. Setups utilizing silicone oil or glycol need explicit `--limit min_temperature_c` and `max_temperature_c` values during startup. The `wait_for_temperature` tool polls thermal stability within target margins and stops immediately if an instrument alarm occurs.

## 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 julabo-circulator -- uvx labmcp-julabo
```
Replace <…> with your own values. uvx runs the command named after the package; if the README names another one, use uvx --from labmcp-julabo <command>

### Codex

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

### Cursor

**Config file**
File `.cursor/mcp.json`:
```json
{
    "mcpServers": {
        "julabo-circulator": {
            "command": "uvx",
            "args": [
                "labmcp-julabo"
            ],
            "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-julabo <command>

### GitHub Copilot

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

## When to use it
- set target temperatures and start the circulation pump
- read live bath and external Pt100 sensor measurements
- poll the device until fluid temperatures reach steady-state tolerance
- inspect internal safety limits, alarms, and operating states
- shut down temperature control during emergency situations

## Example prompts
- Check connection status and current bath temperatures on COM3.
- Set the bath setpoint to 37 °C, begin circulation, and alert me once temperature stays within 0.2 °C.
- Trigger an immediate pump stop and return the recent command log.

## 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) — 28 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
