open289-mcp
Server Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
| OPEN289_SIM | No | Set to 1 to use the virtual IR3000 FC + Fluke 289 instead of Bluetooth hardware. | |
| OPEN289_HOME | No | Directory used for open289 state/ and data/ folders. Defaults to the source checkout if present, otherwise %LOCALAPPDATA%\open289 on Windows or ~/.local/share/open289 elsewhere. | |
| OPEN289_NO_BLE | No | Set to 1 to make the real Bluetooth backend refuse to start, preventing hardware access. | |
| OPEN289_SIM_RATE | No | Virtual meter live notifications per second. | 4 |
| OPEN289_SIM_AUDIT | No | Override path for the virtual meter GATT write audit file. | |
| OPEN289_SIM_DELAY | No | Virtual meter pass-through send latency in seconds. | 0.05 |
| OPEN289_SIM_STATE | No | Override path for the virtual meter state file. |
Instructions
Guidance the server publishes about itself, which clients place ahead of the tool catalog so the model reads it before choosing anything.
Read a Fluke 287/289 multimeter through a Fluke IR3000 FC Bluetooth adapter clipped onto its IR port.
Start with status (adapter and meter identity, batteries, saved items). read returns what the display shows now
(function, range, modes such as HOLD or MIN MAX, the primary value and every other reading); live collects real-time
readings (about 4/s) and returns their statistics and the last few; for minutes or hours use log_start, then
log_status and log_stop (a CSV/JSONL file written in the background). memory lists saved measurements, MIN MAX
and peak sessions and trend recordings; download_recording saves one recording to a file. press simulates
front-panel keys, query sends read-only remote commands (ID, IM, Q*), selftest checks adapter, link and meter.
Values are in SI base units (V, A, ohm, F, Hz, s), display is the text the meter shows.
The adapter accepts ONE connection: tools run one at a time, and while a background log runs every other meter tool
returns BUSY until log_stop (BUSY also when another program, such as Fluke Connect or another open289, holds the
adapter). METER_BUSY means a menu, setup or result page is open on the meter: close it on the meter (or with press)
and retry. NOT_FOUND = the adapter is not advertising (press its button until the LED flashes green); DETACHED = no
powered meter on the adapter. Safety: press changes the meter's state (HOLD, MIN MAX, range ...); ONOFF needs
allow_off=true and switches the meter off for good (it cannot be switched on remotely, and the adapter sleeps too).
query is read-only: anything that could change or erase meter state is refused.
Capabilities
Features and capabilities supported by this server
Protocol revision2025-11-25
| Capability | Details |
|---|---|
| tools | {
"listChanged": false
} |
Tools
Functions exposed to the LLM to take actions
| Name | Description |
|---|---|
| statusA | Is the IR3000 FC adapter reachable and a Fluke 287/289 attached and on? Adapter address, firmware and battery %; meter model, firmware, serial, battery, memory level and clock; the number of saved items. meter.attached false = the adapter is not on a powered meter. NOT_FOUND = the adapter is not advertising (press its button until the LED flashes green; close Fluke Connect on any phone). |
| readA | One snapshot of the meter display: function (V_DC, OHMS ...), secondary function, range and autorange, modes (HOLD, MIN_MAX_AVG, REL, RECORD ...), the primary reading and every other reading on screen (MINIMUM, MAXIMUM, AVERAGE, SECONDARY, REL_REFERENCE ...). value is in SI base units, display is the text the meter shows. METER_BUSY = a menu or result page is open. |
| liveA | Collect real-time readings from the adapter (about 4 per second) for |
| memoryA | What is saved in the meter's memory: the counts and every saved measurement, MIN MAX session, peak session and trend recording (name, time, function, primary value and the other readings; recordings also interval, number of records and duration). download_recording fetches the records of a recording; the index is the item's index within its kind. |
| download_recordingA | Download trend recording |
| pressA | Simulate front-panel keys in order (soft keys F1-F4 under the display, the arrows, HOLD, MINMAX, RANGE, INFO, BACKLIGHT, ONOFF) and return the display state after each key. held: a long press (RANGE held = back to autorange). ONOFF switches the meter OFF for good (it cannot be switched on remotely, and the adapter goes to sleep with it): it is refused unless allow_off is true; the meter then asks for confirmation (F1 confirms, F4 cancels). |
| queryA | Send read-only remote commands to the meter and return each answer (text, or hex for binary replies): ID (model, firmware, serial), IM, and Q* queries such as QM (primary measurement), QDDB (display data), QBL (battery), QSLS (saved counts), QMP . Anything else (PRESS, MP, CSD, RI, OFF ...) is refused with UNSAFE_OPERATION before it reaches the meter. |
| selftestA | Read-only health check of adapter, link and meter: adapter advertising, connection, meter attached, adapter firmware, ID, display snapshot, a live reading within 5 s, adapter and meter battery. Never changes the meter. SELFTEST_FAILED lists the failed checks (measured vs expected). |
| log_startA | Start logging live readings to a CSV or JSONL file in the background and return the job id and the file. The log ends after |
| log_statusA | State of a background log (running / done / failed), the records written so far, the last status line, the file, and once it has ended its summary (min/max/mean per unit, link gaps). |
| log_stopA | Stop the background log cleanly and return its summary: file, records, duration, min/max/mean per unit, link gaps. Without |
Prompts
Interactive templates invoked by user choice
| Name | Description |
|---|---|
No prompts | |
Resources
Contextual data attached and managed by the client
| Name | Description |
|---|---|
No resources | |
TDQS
Scored across 11 tools
Most tools map to distinct actions such as read, press, logging, memory inventory, and recording download. However, status and selftest both report adapter/link/meter health and battery state, and query can duplicate display data available through read, so an agent may occasionally choose the wrong diagnostic tool.
All names use lowercase snake_case, but the pattern is mixed: some are single-word noun-like names (memory, status), some are verbs (read, press, query), and the logging tools use a log_* prefix. It remains readable, but there is no predictable verb_noun convention across the set.
Eleven tools is well within the expected range for a meter-control server and each tool covers a meaningful workflow. The set divides cleanly into reading, logging, memory, control, and diagnostics without obvious filler tools.
The surface covers connection/health checks, display snapshots, live capture, background logging, keypress control, memory inventory, recording download, and diagnostics. Minor gaps remain, such as no direct retrieval or clearing of saved measurement items beyond trend recordings, but common workflows are supported.