
Sartorius Balance
io.github.K-Dense-AIPublished by GitHub account K-Dense-AIv0.1.2Updated Oct 24, 2026
MCP server for Sartorius laboratory balances (SBI protocol).
Overview
Controls Sartorius laboratory balances over the SBI protocol to read weights, tare, zero, log drift, and run internal adjustment.
- What you can do
- Exposes tools that read the current net weight, tare or zero the balance, and log a series of immediate readings with summary statistics for drift, evaporation, or stabilisation checks. It can also lock the keypad, set ambient-condition filters, run internal adjustment on isoCAL models, reconnect after a power cycle, and return the raw command log and connection details. Communication uses the documented SBI ASCII protocol over serial or Ethernet.
- When to use it
- Useful when an assistant should operate a Sartorius balance directly: weighing out a target mass, taring a container, monitoring evaporation or drift over time, or running an internal adjustment before a measurement series. It is aimed at lab benches with a supported balance and a serial or Ethernet connection.
- Requirements
- Runs locally as a Python package (uvx labmcp-sartorius) over stdio; desktop only. Needs a supported Sartorius balance reachable by RS-232, USB virtual COM port, or Ethernet, configured for the SBI protocol with manual output. Set LABMCP_ADDRESS to the instrument address; LABMCP_SIMULATE=1 runs a built-in simulator with no hardware. No accounts or API keys.
Installation
In SourceWeft
- Open Sartorius Balance in the dashboard and add it to a workspace.
- Enable the server for the chats that should use its tools.
Desktop only via STDIO. STDIO servers start a local process, so they need the SourceWeft desktop host.
Other MCP clients
Follow the launch instructions in the repository.
README
Sartorius Balance — MCP Server
Let an AI agent weigh samples, tare containers, log drift and evaporation, and run internal adjustments on Sartorius laboratory balances through the documented SBI (Sartorius Balance Interface) ASCII protocol.
Try it without hardware
Connect your balance
- Balance setup: set the interface you use (RS232, USB-B / "PC-SBI", or Ethernet) to the SBI protocol, and set SBI data output to manual, without stability with automatic output off (factory settings on Cubis II and Entris II). With auto print on,
ESC Ptoggles the automatic output instead of sending one reading. Either line format works (16 characters, or 22 with ID code). - Serial settings: factory settings are 9600 baud, 8 data bits, odd parity, 1 stop bit, hardware handshake (Cubis II/MSE, Secura/Quintix/Practum, Entris II). The server uses these but does not enforce RTS/CTS (it keeps RTS asserted, which lets the balance transmit; USB virtual COM ports often never assert CTS). Add
?rtscts=trueto enforce it, or e.g.?bytesize=7&parity=Eif your balance is set differently. - Find the port:
uvx labmcp ports - Test the connection:
--checkprints the model, serial number and software version (ESC x1_,x2_,x3_) when the balance supports them.
Add to your MCP client
Claude Code
Claude Desktop / Cursor / Windsurf (claude_desktop_config.json, .cursor/mcp.json, …)
Add --read-only to allow weighing but block taring, zeroing and adjustment. For other clients: uvx labmcp config sartorius-balance --address /dev/ttyUSB0 --client vscode.
Tools
Safety limits
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). No tool of this server moves anything or heats, so there are no hazard tools.
Example prompts
- "Tare the balance, then tell me the weight once it's 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."
- "The bench is vibrating today; switch the balance filter to unstable conditions and lock the keypad."
- "Run an internal adjustment before we start the calibration curve and tell me whether it ran."
Notes
- Stability comes from the unit symbol. SBI has no explicit stability flag: the balance only sends the unit symbol (positions 12–14) when the reading is stable ("If the weighing system has not stabilized, no unit symbol is output", interface description 98647-000-53; the newer manuals list those positions as "unit symbol or space").
read_weight(stable=true)therefore pollsESC Puntil a reading with a unit arrives. Unstable readings report the last unit seen. - Line formats. The parser follows the documented fixed-width layouts: 16 characters (sign, value in positions 2–10, unit in 12–14, CR LF) and 22 characters (6-character ID code such as
N,G#,T,Stat, then the same 16). It also accepts the Cubis II "one line with full length" format, a decimal comma, and a G#/T/N weighing block (theNline is reported).High,Low,Err ###,APP.ERR,DIS.ERRandPRT.ERRare reported as clear errors. - No acknowledgements. SBI control commands (
ESC Utare,ESC Vzero,ESC Zadjust,ESC K–Nfilter,ESC O/Rkeys) produce no reply, so a balance that does not support one silently ignores it.tareandzerotherefore wait for a stable reading and check it is ~0, and report an error otherwise. - Zero vs tare.
ESC Vonly zeroes within the balance's zero-setting range (nearly empty pan);ESC Utares any load. Older balances (CP/CPA, LE, ...) only haveESC T(the tare key): start the server with--option legacy=true. - Internal adjustment (unverified).
ESC Zstarts isoCAL on balances with a built-in weight. SBI sends no completion or result message; the server watches for theCal.status (or a balance too busy to answer) and waits for a stable weight again, and reportsobserved_adjustment=falseif it never sees one. Confirm the result on the display or GLP printout. The exact status output during adjustment could not be verified in the manuals. - Identity replies (unverified format).
ESC x1_/x2_/x3_print the model, serial number and software version; their exact layout is not documented, so the text is passed through as sent. - The command log shows SBI traffic as hex (
1b 50 0d 0a=ESC P CR LF) because of the ESC character. - Not implemented: draft-shield and ionizer commands (Cubis MSE only), external adjustment (
ESC W, needs a reference weight),ESC Srestart and the function-key commands.
Hardware verification
Source: servers/chemistry/sartorius-balance/README.md at commit 46545ea
Tools
0Version history
2- v0.1.2LatestSep 27, 2026
- v0.1.0Sep 26, 2026
Score
50% of the applicable checks met
How complete this listing is, computed from the registry entry, the endpoint and public sources. Not a rating of the server and not a statement that it is safe or working today: reachability is a dated check, and no installs or reviews go into the score.
- Reached in the last 30 days25 pts
Keep the endpoint answering the MCP handshake; SourceWeft probes it every 30 days.
- Auth declared10 pts
Declare the credential headers in the registry entry, or keep the endpoint answering the probe so its auth can be classified.
- Tools listed15 pts
Answer tools/list without a credential, or ship a package that starts in a sandbox without one.
- DescriptionRequired15 pts
- Logo10 pts
- Documentation15 pts
- License10 pts