# Lake Shore Temperature Controller

Connects Lake Shore 335, 336, and 350 temperature controllers to AI assistants. It monitors cryostat sensors, adjusts loop settings, and shuts off heaters.

- 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/physics/lakeshore-temperature
- Updated: 2026-09-26
- HTML: https://affpapa.org/en/nevibecode/mcp/lake-shore-temperature-controller

## What it does

The server links AI agents to Lake Shore cryogenic hardware using ASCII commands. It queries sensor readings in kelvin, inspects heater status, and updates PID parameters. Supported hardware includes Models 335, 336, and 350. Connecting unsupported devices like Model 331 or 372 causes the server to reject the session after checking `*IDN?`.

Communication travels over serial USB at 57600 baud, TCP port 7777 for Ethernet on Models 336 and 350, or GPIB using VISA. Built-in guardrails include a default setpoint ceiling of 325 K and a heater range cap of 3. Running with `--read-only` prevents changing loop parameters while preserving the `all_heaters_off` emergency cut-off.

A physical controller is not mandatory during testing because the package includes a 4.2 K cryostat thermal simulator. Keep in mind that the repository code relies on simulator validation and still awaits hardware confirmation reports.

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

### Codex

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

### Cursor

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

### GitHub Copilot

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

## When to use it
- read cryostat sensor channels in kelvin and raw units
- adjust control loop setpoints with ramping rates
- configure PID parameters on selected outputs
- kill all heater outputs during an emergency
- wait for loop temperatures to settle within designated tolerances

## Example prompts
- Read all sensor inputs and report any errors.
- Set output 1 setpoint to 50 K with a ramp rate enabled.
- Turn off every heater output immediately.

## 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
