# Thermo Orbitrap (Instrument API)

Connects AI coding assistants to Thermo Fisher Orbitrap mass spectrometers via the official Instrument API. Enables live scan monitoring and acquisition control.

- 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/thermo-iapi
- Updated: 2026-09-26
- HTML: https://affpapa.org/en/nevibecode/mcp/thermo-orbitrap-instrument-api

## What it does

This adapter lets an LLM agent interact directly with Orbitrap spectrometers across Tribrid, Exploris, and Q Exactive series. The agent can inspect instrument modes, monitor vacuum sensor metrics, stream MS scans, queue custom scan tasks, and control raw file acquisitions.

The server relies on Thermo's .NET Instrument API on a Windows workstation with Python 3.10+ and `pythonnet`. Proprietary assemblies are not distributed with this package due to licensing rules. You must provide your own licensed vendor DLL files from an instrument running Tune.

A critical point to remember: this package has only been verified against a software simulator, not physical hardware. You can evaluate workflows offline using the built-in Exploris 480 simulator. Note that Orbitrap Astral and Exploris 120 models do not support this API.

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

### Codex

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

### Cursor

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

### GitHub Copilot

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

## When to use it
- monitor spectrometer status and vacuum readings in real time
- stream mass spectrometry scans and centroid data directly into an agent
- queue validated custom scan parameters and repeating acquisitions
- manage raw data recording on the instrument PC
- test lab automation pipelines via an offline Orbitrap simulator

## Example prompts
- Check the current Orbitrap vacuum levels and operating status
- Start the instrument simulator for Exploris 480 and read recent survey scans
- Cancel all pending custom scan requests on the spectrometer

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