Skip to main content

Mettler Toledo Balance — MCP Server

Let an AI agent weigh samples, tare containers, log drift and evaporation, run internal adjustments and drive the draft shield on Mettler Toledo balances through the open MT-SICS interface command set.

Package labmcp-mettler-toledo
Instruments Excellence XPR/XSR, XP/XS, XA/XE, MS/ML, NewClassic ME/MS, and other MT-SICS balances and weighing terminals
Interfaces RS-232, USB (virtual COM port), Ethernet (XPR/XSR, or any serial-to-Ethernet adapter)
Protocol MT-SICS levels 0–2 (reference manual)
Status 🧪 simulated: tested against a wire-level MT-SICS simulator, not yet verified on hardware. Report a hardware test

Try it without hardware

uvx labmcp-mettler-toledo --simulate --check

Connect your balance

  1. Balance setup: in the balance menu, set the interface (RS232/USB/Ethernet) to MT-SICS (sometimes called "Host" or "Dialog"). Factory settings are 9600 baud, 8 data bits, no parity, 1 stop bit, Xon/Xoff.
  2. Find the port: uvx labmcp ports
  3. Test the connection:
    uvx labmcp-mettler-toledo --address /dev/ttyUSB0 --check          # Linux
    uvx labmcp-mettler-toledo --address /dev/tty.usbserial-XXXX --check  # macOS
    uvx labmcp-mettler-toledo --address COM4 --check                  # Windows
    uvx labmcp-mettler-toledo --address tcp://192.168.1.60:8001 --check  # Ethernet
    
    Non-default settings go in the address: serial://COM4?baudrate=19200&xonxoff=false.

Add to your MCP client

Claude Code

claude mcp add balance -- uvx labmcp-mettler-toledo --address /dev/ttyUSB0

Claude Desktop / Cursor / Windsurf (claude_desktop_config.json, .cursor/mcp.json, …)

{
  "mcpServers": {
    "balance": {
      "command": "uvx",
      "args": ["labmcp-mettler-toledo", "--address", "/dev/ttyUSB0"]
    }
  }
}

Add --read-only to allow weighing but block taring, zeroing and door movement. For other clients, generate the snippet with uvx labmcp config mettler-toledo --address /dev/ttyUSB0 --client vscode (also cursor, codex, claude-code).

Tools

Tool Kind Description
clear_tare 🎛 control Clear the tare memory (tare = 0).
get_command_log 👁 read Return the most recent raw commands sent to / replies received from the instrument (newest last). Useful for debugging and for recording what was done.
get_connection_info 👁 read 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_draft_shield 👁 read Report the position of the motorised draft-shield doors (Excellence/XPR balances only).
get_tare 👁 read Return the weight currently stored in the tare memory.
log_weight_series 👁 read Record a series of immediate (unfiltered) readings to monitor drift, evaporation, moisture uptake or stabilisation. Returns every reading plus summary statistics.
read_temperature 👁 read Read the balance's internal temperature probe(s) in °C (MT-SICS M28, if supported).
read_weight 👁 read Read the current net weight from the balance.
reconnect 🛑 safety Close and re-open the connection to the instrument (e.g. after it was power cycled or a cable was re-plugged).
reset_balance 🛑 safety Abort whatever the balance is doing (an adjustment, a repeating weight stream, a pending command) and reset it to its power-on state without zeroing (MT-SICS @). Clears the tare. Motorised draft-shield doors have their own obstruction detection and reverse if blocked.
run_internal_adjustment 🎛 control Adjust (calibrate) the balance with its built-in reference weight (MT-SICS C3). The pan must be empty and the balance undisturbed. Takes roughly 1-3 minutes.
set_draft_shield ⚠️ hazard Open or close the motorised draft-shield doors. Make sure nothing (and no one's fingers) is in the way of the doors.
set_tare_preset 🎛 control Preset a known tare weight (e.g. a container weighed earlier).
show_message 🎛 control Show a short message on the balance display (e.g. 'Add sample 3'). Use show_weight_display to return to the normal weight display.
show_weight_display 🎛 control Switch the balance display back to showing the weight.
tare 🎛 control Tare the balance: store the current load (e.g. an empty container) as the tare weight. Returns the stored tare weight.
zero 🎛 control Zero the balance with the current load. Also clears the tare memory.

get_connection_info, get_command_log and reconnect are built into every LabMCP server.

Safety limits

Limit Default Meaning
max_series_duration_s 600 s Longest weight-logging series an agent may start

Override at launch: --limit max_series_duration_s=3600. Whatever the limit says, a single series is capped at one hour (the tool's time limit).

Example prompts

  • "Tare the balance, then tell me when the reading is stable after I add the sample."
  • "Log the weight every 10 s for 5 minutes and tell me the evaporation rate in mg/min."
  • "Weigh out ~250 mg: tell me how much more to add, reading every few seconds, until I'm within ±2 mg."
  • "Run an internal adjustment and confirm it succeeded before we start the calibration curve."

Notes

  • read_weight(stable=True) sends S, which waits for stability. If the balance cannot settle (draughts, vibration), it returns S I. The server reports this as an error, so retry or use stable=false.
  • Weights are in the balance's unit 1 (normally grams). Units shown on the display (unit 2) don't affect the interface.
  • Draft-shield (WS) and temperature (M28) commands exist only on balances with that hardware; other balances answer ES/L, which the server reports clearly.
  • run_internal_adjustment waits for the final C3 A without blocking the connection: reset_balance aborts a running adjustment, and other commands are refused until it ends (their replies would be mixed up with the result).
  • Before each command the server discards anything the balance sent unasked (e.g. a print-key transmission) and checks that the reply belongs to the command, so one late reply cannot shift every later reply by one.
  • show_message accepts printable ASCII only, and set_tare_preset only a unit symbol: a line break would otherwise reach the balance as a second MT-SICS command.

Hardware verification

Model Firmware Interface Verified by Date
none yet: be the first

Release files for labmcp-mettler-toledo 0.1.3

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for labmcp-mettler-toledo 0.1.3
File Size Uploaded
labmcp_mettler_toledo-0.1.3.tar.gz 13.8 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for labmcp-mettler-toledo 0.1.3
File Interpreter ABI Platform
labmcp_mettler_toledo-0.1.3-py3-none-any.whl Python 3 none any Details

Total release size: 27.4 kB

Release files / labmcp_mettler_toledo-0.1.3.tar.gz

Download URL labmcp_mettler_toledo-0.1.3.tar.gz
Size 13.8 kB
Tags Source
SHA-256 checksum
How to use checksums
3b68fc833636d145dc6c9695ac1864e69341c7c8dd6cb891e79834978bfdc088
BLAKE2b-256 checksum
How to use checksums
5ff5b936737da81faa3cbff19d92817482638880e27ca6b918a3a161b489447f
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Sep 26, 2026.

Transparency log

Release files / labmcp_mettler_toledo-0.1.3-py3-none-any.whl

Download URL labmcp_mettler_toledo-0.1.3-py3-none-any.whl
Size 13.6 kB
Tags Python 3
SHA-256 checksum
How to use checksums
fdea7aee83d6a44b8c000925a8a003fbf25b587ddde379e36f470a8d9efd8302
BLAKE2b-256 checksum
How to use checksums
37fe6bd86a79084ef8f437c71126b4cf8a1b9f6d6d7468834c95dc7bf419a4e5
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Sep 26, 2026.

Transparency log

Release history Release notifications | RSS feed

This release

0.1.3 This release

2 release files

0.1.2

2 release files

0.1.1

2 release files

0.1.0

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page