Skip to main content
Glama

Server Configuration

Describes the environment variables required to run the server.

NameRequiredDescriptionDefault
OPEN289_SIMNoSet to 1 to use the virtual IR3000 FC + Fluke 289 instead of Bluetooth hardware.
OPEN289_HOMENoDirectory 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_BLENoSet to 1 to make the real Bluetooth backend refuse to start, preventing hardware access.
OPEN289_SIM_RATENoVirtual meter live notifications per second.4
OPEN289_SIM_AUDITNoOverride path for the virtual meter GATT write audit file.
OPEN289_SIM_DELAYNoVirtual meter pass-through send latency in seconds.0.05
OPEN289_SIM_STATENoOverride 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

CapabilityDetails
tools
{
  "listChanged": false
}

Tools

Functions exposed to the LLM to take actions

NameDescription
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 count readings or seconds, and return a summary instead of the readings: count, rate, first/last time, min/max/mean of the primary value per unit, the function(s) and unit(s) seen and the last 5 readings. Default: 20 readings. For longer runs or a file use log_start.

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 index (see memory) to a CSV or JSONL file, one row per record (start/end time, primary, minimum, average, maximum, unit, states). Long recordings take minutes over Bluetooth. Returns the file, the number of records, seconds per record, retries and the recording header. An interrupted download resumes with start and the same out (a failed result names both under resume).

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 duration, at log_stop, or when the Bluetooth link stays lost longer than reconnect_for; it keeps running if this client disconnects. One log at a time, and meanwhile the other meter tools return BUSY. Follow it with log_status, end it with log_stop.

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 job it also stops a log or live started elsewhere (a terminal, another client); already_ended true = the log had ended before this call (the summary is its old one).

Prompts

Interactive templates invoked by user choice

NameDescription

No prompts

Resources

Contextual data attached and managed by the client

NameDescription

No resources

TDQS

A3.9/5.0

Scored across 11 tools

Disambiguation4/5

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.

Naming Consistency3/5

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.

Tool Count5/5

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.

Completeness4/5

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.

Maintenance

ActivityMaintained
ResponsivenessNo recent community issues