# Alicat Mass Flow & Pressure Controller (pypi · labmcp-alicat)

MCP server for Alicat mass flow and pressure meters/controllers.

- Trust score: 69/100 (medium)
- Registry status: active
- Liveness: live
- Owner verified: no
- Last scored: 2026-09-30

## Components

- pypi · `labmcp-alicat`: 69/100 (this document), [markdown](https://verifymcp.io/servers/k-dense-ai-labmcp-alicat/labmcp-alicat.md), [page](https://verifymcp.io/servers/k-dense-ai-labmcp-alicat/labmcp-alicat)

## Channel facts

- Registry: `pypi`
- Package: `labmcp-alicat`
- Version: `0.1.2`
- Transport: `stdio`

## Trust breakdown

How this component scores in each security and reliability category. Every signal is checked automatically from public evidence about the published package, including repeated runs of it in an isolated sandbox, and we only credit what we can confirm. Scores are 0–100 per category. Scoring method: https://verifymcp.io/docs/scoring (what has changed: https://verifymcp.io/docs/scoring/changelog)

Scored 2026-09-30.

- **Supply Chain Security**: 49/100
  - Malware scan not yet available for this package.
  - No known CVEs affecting this package version or its production dependencies.
  - Runs hatchling.build at install time, a recognised build step with no custom scripting around it.
  - 2 of 17 dependencies flagged as unhealthy.
- **Provenance & Transparency**: 100/100
  - Source repository is publicly reachable at the declared URL.
  - Cryptographically verified build provenance (signed, bound to K-Dense-AI/lab-instrument-mcps).
  - Clear OSI-approved license (Apache-2.0).
  - Actively maintained (last published 3 days ago).
  - Publishes a security disclosure policy (SECURITY.md).
- **Schema Quality & AI Usability**: 80/100
  - AI-judged instruction clarity (excellent).
  - Tool/resource definitions use about 1427 tokens (~101/item across 14 items; 14 tools + 0 resources), lean.
  - Usage-examples check failed: none of the tools include examples.
- **Stability & Change Management**: 13/100
  - Stability observed for 4 of 30 days with no destabilising changes; credit accrues until the full window elapses.
- **Tool Coverage**: 96/100
  - 100% of tools have a non-trivial description (not blank, and not just the tool's name).
  - 88% of tool parameters carry a description.
  - Structured output schemas are declared (100% of tools); any adoption earns full credit.
- **Tool Safety**: 100/100
  - No prompt-injection markers were found in the server instructions, tool names or descriptions we captured.
  - We read all 14 captured tool definition(s), and no name or description among them implies an irreversible operation.
  - An AI judge read all 15 captured unit(s) of tool text and found none that tries to manipulate the model reading it.
- **Capabilities**: 100/100
  - Implements a current MCP spec version (2026-07-28).

## Install

### How do I install the Alicat Mass Flow & Pressure Controller MCP server?

Alicat Mass Flow & Pressure Controller runs locally as a PyPI package, launched with uvx labmcp-alicat. Ready-made configuration for Claude, Cursor, VS Code, Codex and 5 more is on this page, copied from each client's own documentation.

### Claude

```bash
claude mcp add k-dense-ai-labmcp-alicat -- uvx labmcp-alicat
```

### Cursor

```json
{
  "mcpServers": {
    "k-dense-ai-labmcp-alicat": {
      "command": "uvx",
      "args": [
        "labmcp-alicat"
      ]
    }
  }
}
```

### VS Code

```json
{
  "servers": {
    "k-dense-ai-labmcp-alicat": {
      "command": "uvx",
      "args": [
        "labmcp-alicat"
      ]
    }
  }
}
```

### Codex

```bash
codex mcp add k-dense-ai-labmcp-alicat -- uvx labmcp-alicat
```

### opencode

```json
{
  "$schema": "https://opencode.ai/config.json",
  "mcp": {
    "k-dense-ai-labmcp-alicat": {
      "type": "local",
      "command": [
        "uvx",
        "labmcp-alicat"
      ],
      "enabled": true
    }
  }
}
```

### OpenClaw

```bash
openclaw mcp add k-dense-ai-labmcp-alicat --command uvx --arg labmcp-alicat
```

### Hermes

```yaml
mcp_servers:
  k-dense-ai-labmcp-alicat:
    command: "uvx"
    args: ["labmcp-alicat"]
```

### Netclaw

```json
{
  "McpServers": {
    "k-dense-ai-labmcp-alicat": {
      "Transport": "stdio",
      "Command": "uvx",
      "Arguments": [
        "labmcp-alicat"
      ]
    }
  }
}
```

### Vellum

```bash
assistant mcp add k-dense-ai-labmcp-alicat -t stdio -c uvx -a labmcp-alicat
```

### Other

```json
{
  "mcpServers": {
    "k-dense-ai-labmcp-alicat": {
      "command": "uvx",
      "args": [
        "labmcp-alicat"
      ]
    }
  }
}
```

## Changelog

Every change recorded for this component, newest first. Days that predate change tracking, or that we cannot explain, say so: "we were watching and nothing happened" and "we were not watching" are different claims.

### 2026-09-30 (score 69, +1)

No change was recorded against any check on this day. Stability & Change Management went from 10 to 13. That category is still filling its 30-day observation window: 3 days of observed history at the previous scan, 4 at this one. The score rises as the window fills, whether or not the server changes.

### 2026-09-28 (score 68, −4)

- [functional] We updated how we score, so this day's move reflects our rubric, not a change to the server

### 2026-09-27 (score 72, +1)

- [functional improvement] Stability: unverified → 0.03
- [functional] Package version: 0.1.1 → 0.1.2

### 2026-09-26 (score 71)

First indexed and scored.

## MCP tools (14)

### `get_connection_info` (~40 tokens)

Get Connection Info

Report which instrument is connected (identity, address, simulated or real),
whether the server is read-only, and the active safety limits. Call this first.

### `get_command_log` (~46 tokens)

Get Command Log

Return the most recent raw commands sent to / replies received from the
instrument (newest last). Useful for debugging and for recording what was done.

Input parameters:

- `limit` (integer)

Output parameters:

- `result` (array)

### `reconnect` (~35 tokens)

Reconnect

Close and re-open the connection to the instrument (e.g. after it was power
cycled or a cable was re-plugged).

### `read_flow` (~46 tokens)

Read Flow

Read the live data frame: mass flow, volumetric flow, pressure, temperature, setpoint
(controllers), active gas and any status codes, each with the device's engineering units.

Output parameters:

- `fields` (array): Every field of the data frame, in device order
- `gas`
- `layout_source` (string): How fields were identified: '??D*' (device table) or 'fallback'
- `mass_flow`
- `mass_flow_unit` (string)
- `pressure`
- `pressure_kind` (string): 'absolute', 'gauge' or 'differential'
- `pressure_unit` (string)
- `raw` (string): The raw data frame
- `setpoint`: Controller setpoint (None on meters)
- `setpoint_unit` (string)
- `status` (array): Status / error codes reported with this frame
- `temperature`
- `temperature_unit` (string)
- `timestamp` (string): UTC time the frame was read (ISO 8601)
- `unit_id` (string)
- `valve_hold` (boolean): True if HLD is active (closed-loop control bypassed)
- `volumetric_flow`
- `volumetric_flow_unit` (string)

### `get_device_info` (~46 tokens)

Get Device Info

Report model, serial number, firmware, calibration date, whether the device is a
controller, the units of every data-frame field, the setpoint full scale and setpoint source.

Output parameters:

- `calibrated`
- `data_frame_layout` (string)
- `fields` (array)
- `firmware`
- `has_gas_select` (boolean)
- `is_controller` (boolean)
- `manufactured`
- `model`
- `notes` (array)
- `serial`
- `setpoint`: Current setpoint (controllers, 9v00+ firmware)
- `setpoint_full_scale`: Largest setpoint the device accepts
- `setpoint_source`: 'serial/front panel' or 'analog' (10v05+). With 'analog', serial setpoints are ignored.
- `setpoint_unit` (string)
- `unit_id` (string)

### `list_gases` (~43 tokens)

List Gases

List the gases installed on this mass flow device (number and short name), as used by
\`set_gas`. Liquid and pressure-only devices have no gas list.

Output parameters:

- `result` (array)

### `log_flow_series` (~105 tokens)

Log Flow Series

Record a time series of data frames (e.g. to check flow stability, settling after a
setpoint change, or pressure drift). Returns every point plus mean/stdev/min/max of the
mass flow (or the main measured quantity for non-flow devices).

Input parameters:

- `count` (integer): Number of readings
- `interval_s` (number): Seconds between readings
- `save_path`: Optional new .csv file for the full series (an existing file is not overwritten)

Output parameters:

- `count` (integer)
- `maximum`
- `mean`
- `minimum`
- `points` (array)
- `quantity` (string): Which field the statistics describe (mass_flow if present)
- `saved_to`
- `stdev`
- `unit` (string)

### `set_flow_setpoint` (~103 tokens)

Set Flow Setpoint

Change the controller setpoint: starts, changes or stops gas flow (or sets the target
pressure on a pressure controller). 0 stops flow and closes the valve on a flow controller.
Negative values only work on bidirectional controllers. Refused on meters, above the
\`max_setpoint` limit, and above the device's full scale.

Input parameters:

- `setpoint` (number, required): New setpoint in the controller's setpoint units (see get_device_info)

Output parameters:

- `accepted_setpoint` (number): Setpoint the controller reports it is now using
- `message` (string)
- `requested` (number)
- `unit` (string)

### `set_gas` (~171 tokens)

Set Gas

Select the gas calibration the mass flow device uses (Gas Select). This changes how flow is
computed, so do it with the setpoint at 0. Only gases installed on the device work (see
\`list_gases`); corrosive gases need anti-corrosive (S-series) hardware.

Input parameters:

- `gas` (string, required): Gas short name or number, e.g. 'N2' (8), 'Air' (0), 'O2' (11), 'CO2' (4), 'Ar' (1), 'He' (7), 'H2' (6), 'CH4' (2); COMPOSER mixes are 236-255
- `save_as_power_up` (boolean): Also make it the power-up gas (10v05+)

Output parameters:

- `gas` (string)
- `gas_number` (integer)
- `saved_as_power_up` (boolean)

### `tare_flow` (~66 tokens)

Tare Flow

Tare (zero) the flow reading. ONLY run with no flow through the device: upstream shut off
or controller setpoint 0, with the line at its normal operating pressure. Refused if the
setpoint is not 0 or a significant flow is still being measured.

Output parameters:

- `fields` (array): Every field of the data frame, in device order
- `gas`
- `layout_source` (string): How fields were identified: '??D*' (device table) or 'fallback'
- `mass_flow`
- `mass_flow_unit` (string)
- `pressure`
- `pressure_kind` (string): 'absolute', 'gauge' or 'differential'
- `pressure_unit` (string)
- `raw` (string): The raw data frame
- `setpoint`: Controller setpoint (None on meters)
- `setpoint_unit` (string)
- `status` (array): Status / error codes reported with this frame
- `temperature`
- `temperature_unit` (string)
- `timestamp` (string): UTC time the frame was read (ISO 8601)
- `unit_id` (string)
- `valve_hold` (boolean): True if HLD is active (closed-loop control bypassed)
- `volumetric_flow`
- `volumetric_flow_unit` (string)

### `tare_pressure` (~89 tokens)

Tare Pressure

Tare a pressure reading. Requires no flow and the device OPEN TO ATMOSPHERE (gauge), or no
flow and an unpressurised process line (absolute, barometer-equipped devices only).

Input parameters:

- `kind` (string): 'gauge' zeroes a gauge/differential sensor; 'absolute' aligns the absolute sensor to the built-in barometer (barometer option required)

Output parameters:

- `fields` (array): Every field of the data frame, in device order
- `gas`
- `layout_source` (string): How fields were identified: '??D*' (device table) or 'fallback'
- `mass_flow`
- `mass_flow_unit` (string)
- `pressure`
- `pressure_kind` (string): 'absolute', 'gauge' or 'differential'
- `pressure_unit` (string)
- `raw` (string): The raw data frame
- `setpoint`: Controller setpoint (None on meters)
- `setpoint_unit` (string)
- `status` (array): Status / error codes reported with this frame
- `temperature`
- `temperature_unit` (string)
- `timestamp` (string): UTC time the frame was read (ISO 8601)
- `unit_id` (string)
- `valve_hold` (boolean): True if HLD is active (closed-loop control bypassed)
- `volumetric_flow`
- `volumetric_flow_unit` (string)

### `hold_valve` (~58 tokens)

Hold Valve

Freeze the controller's valve(s) at their current position (HLD): closed-loop control stops,
so flow will drift if upstream pressure changes. Use `resume_control` to release, or
\`close_valve` to shut off completely.

Output parameters:

- `fields` (array): Every field of the data frame, in device order
- `gas`
- `layout_source` (string): How fields were identified: '??D*' (device table) or 'fallback'
- `mass_flow`
- `mass_flow_unit` (string)
- `pressure`
- `pressure_kind` (string): 'absolute', 'gauge' or 'differential'
- `pressure_unit` (string)
- `raw` (string): The raw data frame
- `setpoint`: Controller setpoint (None on meters)
- `setpoint_unit` (string)
- `status` (array): Status / error codes reported with this frame
- `temperature`
- `temperature_unit` (string)
- `timestamp` (string): UTC time the frame was read (ISO 8601)
- `unit_id` (string)
- `valve_hold` (boolean): True if HLD is active (closed-loop control bypassed)
- `volumetric_flow`
- `volumetric_flow_unit` (string)

### `resume_control` (~47 tokens)

Resume Control

Cancel any valve hold and resume closed-loop control to the current setpoint. Flow restarts
immediately if the setpoint is not 0 (check it with `read_flow` first).

Output parameters:

- `fields` (array): Every field of the data frame, in device order
- `gas`
- `layout_source` (string): How fields were identified: '??D*' (device table) or 'fallback'
- `mass_flow`
- `mass_flow_unit` (string)
- `pressure`
- `pressure_kind` (string): 'absolute', 'gauge' or 'differential'
- `pressure_unit` (string)
- `raw` (string): The raw data frame
- `setpoint`: Controller setpoint (None on meters)
- `setpoint_unit` (string)
- `status` (array): Status / error codes reported with this frame
- `temperature`
- `temperature_unit` (string)
- `timestamp` (string): UTC time the frame was read (ISO 8601)
- `unit_id` (string)
- `valve_hold` (boolean): True if HLD is active (closed-loop control bypassed)
- `volumetric_flow`
- `volumetric_flow_unit` (string)

### `close_valve` (~64 tokens)

Close Valve

Stop the flow: set the flow setpoint to 0 and hold all valves closed (Alicat HC). Safe to
call at any time. On pressure controllers the pressure setpoint is left unchanged and the
valves are held closed, trapping the current pressure.

Output parameters:

- `notes` (array)
- `reading`
- `setpoint_zeroed`: Flow setpoint set to 0 (None if not applicable)
- `valves_held_closed` (boolean)

## Diagnostics

Captured diagnostic sections: Provenance, Install scripts, Dependencies. The full working is on the page: https://verifymcp.io/servers/k-dense-ai-labmcp-alicat/labmcp-alicat#diagnostics

## Score history

- 2026-09-30: 69
- 2026-09-29: 68
- 2026-09-28: 68
- 2026-09-27: 72
- 2026-09-26: 71

## Common questions

### What is the Alicat Mass Flow & Pressure Controller MCP server?

Alicat Mass Flow & Pressure Controller is an MCP server listed in the public MCP registry as io.github.K-Dense-AI/labmcp-alicat. MCP server for Alicat mass flow and pressure meters/controllers. This page covers its PyPI package (labmcp-alicat).

### Is the Alicat Mass Flow & Pressure Controller MCP server safe to use?

Alicat Mass Flow & Pressure Controller scores 69 out of 100 on VerifyMCP. We found no known CVEs affecting it as of 30 September 2026. Its build provenance is signed and verified. That is a record of what we were able to check automatically, not an endorsement. The category breakdown on this page shows every signal behind the number, including the ones we could not confirm.

### What tools does the Alicat Mass Flow & Pressure Controller MCP server expose?

Alicat Mass Flow & Pressure Controller exposes 14 tools: get_connection_info, get_command_log, reconnect, read_flow, get_device_info, and 9 more. Their descriptions and schemas cost roughly 959 tokens of context every time the server is loaded.

### Is the Alicat Mass Flow & Pressure Controller MCP server still maintained?

Alicat Mass Flow & Pressure Controller is still listed as active in the MCP registry. We last reached this channel on 30 September 2026. Those dates come from our own scans of the registry and the channel itself, not from anything the publisher announced.

### What licence is the Alicat Mass Flow & Pressure Controller MCP server under?

Alicat Mass Flow & Pressure Controller declares the Apache-2.0 licence, which is OSI-approved. That covers the source only, and says nothing about the cost of any service it calls.

## Links

- PyPI project: https://pypi.org/project/labmcp-alicat/
- Socket report: https://socket.dev/pypi/package/labmcp-alicat
- Repository: https://github.com/K-Dense-AI/lab-instrument-mcps
- Website: https://github.com/K-Dense-AI/lab-instrument-mcps/tree/main/servers/engineering/alicat-flow-controller
- Changelog RSS feed: https://verifymcp.io/servers/k-dense-ai-labmcp-alicat/labmcp-alicat.xml
- Changelog JSON feed: https://verifymcp.io/servers/k-dense-ai-labmcp-alicat/labmcp-alicat.json
- HTML version of this page: https://verifymcp.io/servers/k-dense-ai-labmcp-alicat/labmcp-alicat
