Skip to main content

BOOKOO Themis Ultra MCP server

An MCP server that lets AI assistants read and control a BOOKOO Themis Ultra scale over Bluetooth LE. It covers every data packet and command in BOOKOO's official Bluetooth protocol, with one tool per protocol entry.

Requirements

  • Python 3.10 or later.
  • A computer with Bluetooth LE: macOS, Linux (BlueZ) or Windows 10 or later, through bleak.
  • The scale switched on, in range and not connected to another app, such as the BOOKOO app. It accepts one connection at a time.

On macOS, the app that starts the server (VS Code, Claude, Terminal…) needs Bluetooth access: System Settings → Privacy & Security → Bluetooth.

Installation

Install it from PyPI into a virtual environment:

python3 -m venv .venv
.venv/bin/pip install bookoo-themis-ultra-mcp

This installs the bookoo-themis-ultra-mcp command in .venv/bin/. It runs the server over stdio. With uv, uvx bookoo-themis-ultra-mcp runs it without installing it first.

Configuration

Add the command to your MCP client, using its absolute path. With uv, use "command": "uvx" and "args": ["bookoo-themis-ultra-mcp"] instead.

VS Code (.vscode/mcp.json):

{
  "servers": {
    "bookoo-themis-ultra": {
      "type": "stdio",
      "command": "/absolute/path/to/.venv/bin/bookoo-themis-ultra-mcp"
    }
  }
}

Claude Desktop (claude_desktop_config.json):

{
  "mcpServers": {
    "bookoo-themis-ultra": {
      "command": "/absolute/path/to/.venv/bin/bookoo-themis-ultra-mcp"
    }
  }
}

Options, passed in args:

Option Default Description
--address ADDRESS First scale found Bluetooth address of the scale (a UUID on macOS). Use it when several scales are nearby.
--timeout SECONDS 10 How long to wait when searching for, connecting to or reading from the scale.

The server looks for a scale advertising a name that starts with BOOKOO_SC_U and connects on the first tool call. If the connection drops, for example because the scale turned itself off, the next tool call reconnects once the scale is back on.

To try the server without an AI client, open it in the MCP Inspector:

npx @modelcontextprotocol/inspector .venv/bin/bookoo-themis-ultra-mcp

Tools

Data the scale sends:

Tool Protocol entry Returns
get_scale_data Receiving weight (03 0B) Weight (g), flow rate (g/s), timer (ms), battery (%), display unit, auto-off time (min), beep level and flow smoothing
get_powder_weight Receiving powder weight (03 0F) The last powder (dose) weight the scale reported
get_auto_mode_event Receiving automatic mode event and settlement data (03 0D) The last event (ready, started, stopped, exit_ready, exit_done) with its timer, weight and result: average flow rate (timing mode) or liquid/powder ratio (ratio mode)

Commands (03 0A):

Tool Code Notes
tare 01 Not while charging, or while automatic mode is running or done
set_beep_level(level) 02 0 = mute, 1 = low, 2 = medium, 3 = high
set_auto_off_time(minutes) 03 5–30 minutes
start_timer 04 Timing and ratio modes
stop_timer 05 Timing and ratio modes
reset_timer 06 Timing and ratio modes
tare_and_start_timer 07 In automatic mode, starts extraction when the scale is ready
set_flow_smoothing(enabled) 08
calibrate 09 Destructive: a wrong calibration skews every later reading
set_auto_stop_condition(mode, condition) 0B Firmware V4.0.0+. Mode timing or ratio; condition flow_stopped, filter_removed or server_removed
set_auto_stop_condition_legacy(condition) 0B Firmware V3.1.2 and earlier. Condition flow_stopped or container_removed
set_powder_weight(grams) 0D 0.1–999.9 g. Firmware V3.2.4 beta or V4.0.0+
shut_down 15 Destructive: the scale must then be switched on by hand. Firmware V4.0.0+, not while charging
reset_auto_off_countdown 25 Keeps the scale on; send it periodically, well before it would turn off. Firmware V4.0.1+

Good to know:

  • The scale does not acknowledge commands. Call get_scale_data afterwards to check the effect, for example that the weight is zero after tare or that the beep level changed. Changes show up within a fraction of a second.
  • The firmware version can't be read over Bluetooth, so the server can't check firmware requirements. The BOOKOO app shows the version.
  • get_powder_weight and get_auto_mode_event return the last value the scale sent since the server connected.
  • Tool annotations mark the get_* tools as read-only and calibrate and shut_down as destructive, so clients can ask before running them.
  • Tested on a Themis Ultra from macOS: get_scale_data, set_beep_level, set_flow_smoothing, set_auto_off_time, tare, shut_down, and reconnecting after the scale was switched off and on. The other tools follow the protocol document but haven't been tried on a scale yet; the scale sent no powder-weight or automatic-mode packets during testing.

Python library

The protocol and Bluetooth layers also work without MCP:

import asyncio

from bookoo_themis_ultra_mcp import protocol
from bookoo_themis_ultra_mcp.scale import BookooScale


async def main() -> None:
    scale = BookooScale()
    try:
        print((await scale.read()).weight_g)
        await scale.send(protocol.tare())
    finally:
        await scale.disconnect()


asyncio.run(main())
  • protocol: builds commands and decodes data packets. No Bluetooth.
  • scale: BookooScale finds, connects to and reconnects to the scale.
  • server: the MCP tools.

Development

git clone https://github.com/gustavo-pabon/mhs-pilot.git
cd mhs-pilot/bookoo-themis-ultra-mcp
python3 -m venv .venv
.venv/bin/pip install -e . --group dev   # needs pip 25.1 or later
.venv/bin/pytest
.venv/bin/ruff check . && .venv/bin/ruff format --check .

The tests don't need a scale.

To release, update __version__ in src/bookoo_themis_ultra_mcp/__init__.py and push a tag named after it, for example bookoo-themis-ultra-mcp-v0.1.0. GitHub Actions then tests the package on Python 3.10–3.14, builds it and publishes it to PyPI.

License

MIT. This project is not affiliated with or endorsed by BOOKOO.

Metadata

Release files for bookoo-themis-ultra-mcp 0.1.0

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

Source distribution (sdist)

Source distribution for bookoo-themis-ultra-mcp 0.1.0
File Size Uploaded Provenance Actions
bookoo_themis_ultra_mcp-0.1.0.tar.gz 12.8 kB With provenance Details for bookoo_themis_ultra_mcp-0.1.0.tar.gz

Built distribution (wheel)

Table of built distributions (wheels) for bookoo-themis-ultra-mcp 0.1.0
File Interpreter ABI Platform Actions
bookoo_themis_ultra_mcp-0.1.0-py3-none-any.whl Python 3 none any Details for bookoo_themis_ultra_mcp-0.1.0-py3-none-any.whl

Total release size: 26.3 kB

Release files / bookoo_themis_ultra_mcp-0.1.0.tar.gz

Download URL bookoo_themis_ultra_mcp-0.1.0.tar.gz
Size 12.8 kB
Tags Source
SHA-256 checksum
How to use checksums
367acb36075ed74804feae6c25ae2536071492cdae0c35ba645b63726f0a1efa
BLAKE2b-256 checksum
How to use checksums
ae10890a7af2aa7eafd196145489976baf74276d8cfcaeb989d59e61a2bde6c3
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.16

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 Nov 11, 2026.

Transparency log

Release files / bookoo_themis_ultra_mcp-0.1.0-py3-none-any.whl

Download URL bookoo_themis_ultra_mcp-0.1.0-py3-none-any.whl
Size 13.5 kB
Tags Python 3
SHA-256 checksum
How to use checksums
8133f6867be6e6d02ba00b2a520d822e3d63d40b001146664d3ef46d6116268e
BLAKE2b-256 checksum
How to use checksums
6fb3f5f13c2f114c6ce2a0b0a593caceff0a231820106dfdb4c7f23cc2f8d5eb
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.16

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 Nov 11, 2026.

Transparency log

Security for bookoo-themis-ultra-mcp 0.1.0

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.

Full provenance

Both files in this release have been uploaded with provenance metadata.

Select from 2 files

Attestation for bookoo_themis_ultra_mcp-0.1.0.tar.gz

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 Nov 11, 2026.

Transparency log

A note on package security

PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.

To learn more about protecting yourself from malicious actors, visit our package security documentation.

Release history Release notifications | RSS feed

This release

0.1.0 This release

2 release files Full provenance

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