
LabJack T-series DAQ
io.github.K-Dense-AIPublished by GitHub account K-Dense-AIv0.1.3Updated Oct 24, 2026
MCP server for LabJack T4, T7/T7-Pro and T8 DAQ devices (LJM).
Overview
Local MCP server that lets an AI assistant read analog inputs, stream waveforms, read thermocouples and, with permission, drive DACs and digital outputs on LabJ
- What you can do
- Inspect the connection and device: report the connected LabJack, its model, serial, firmware, available inputs, ranges and digital lines, and review the raw command log or reconnect after a power cycle or cable change. Read analog inputs and device temperature once, including the internal sensor and estimated ambient temperature. Read thermocouples on T7/T8 extended features with type, measured voltage and cold-junction temperature. Read digital line levels and directions without changing them. Stream hardware-timed waveforms on analog inputs with per-channel statistics, a downsampled waveform and optional CSV export. Drive outputs: set a digital line high or low, write DAC0/DAC1 DC voltage,
- When to use it
- Useful when you have a LabJack T4, T7/T7-Pro or T8 on your desk and want an assistant to take measurements, log waveforms, check thermocouples or digital lines, or adjust analog and digital outputs under safety limits. The built-in simulator lets you try the workflow without hardware.
- Requirements
- Runs locally as a Python package (uvx labmcp-labjack) over stdio, desktop only. Needs LabJack's native LJM library and USB driver installed separately, and the device reachable over USB, Ethernet or WiFi. Configure the instrument with LABMCP_ADDRESS (serial number, IP, device name or ANY); optional LABMCP_LIMITS, LABMCP_READ_ONLY and LABMCP_SIMULATE. Close other LabJack software such as Kipling, LJLogM or LJStreamM, since a device can only be claimed by one process at a time over USB.
Installation
In SourceWeft
- Open LabJack T-series DAQ 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
LabJack T-series DAQ — MCP Server
Let an AI agent read analog inputs, stream waveforms, read thermocouples, check digital lines and (with your permission) set DACs and digital outputs on LabJack T4, T7/T7-Pro and T8 DAQ devices through LabJack's official LJM library.
Try it without hardware
The simulator wires a 2 V / 10 Hz sine to AIN0, a thermistor divider (~2.5 V) to AIN1, DAC0 back into AIN2, an LM34 cold-junction sensor to AIN3, and a ~37 °C thermocouple to AIN0-AIN3 when the thermocouple feature is used. Other inputs are grounded.
Connect your LabJack
- Install LJM (the native library and USB driver) from labjack.com/support/software/installers/ljm. The
labjack-ljmPython package is installed automatically with this server, but it needs that native library. - Close other LabJack software (Kipling, LJLogM, LJStreamM). A device can only be claimed by one process at a time over USB.
- Test the connection:
--addressis the LJM identifier: a serial number, an IP address, a device name, orANY(the default).
Add to your MCP client
Claude Code
Claude Desktop / Cursor / Windsurf (claude_desktop_config.json, .cursor/mcp.json, …)
Add --read-only to allow measurements but block the DAC and digital-output tools (set_outputs_safe stays available). Add --option safe_dio=FIO0,FIO1 to make set_outputs_safe always release those lines, even if another program drove them. For other clients, generate the snippet with uvx labmcp config labjack --client vscode (also cursor, codex, claude-code).
Tools
get_connection_info, get_command_log and reconnect are built into every LabMCP server. The command log records every LJM register read and write.
Safety limits
Override at launch, e.g. --limit max_dac_voltage_v=2.5. Limits are checked before anything is sent. Streams are also capped at 2 million samples in total.
Example prompts
- "Read AIN0-AIN3 on the ±1 V range and tell me which channels look like they are floating."
- "Stream AIN0 and AIN1 at 5 kHz for 2 seconds, give me the RMS and peak-to-peak of each, and save the data to ~/data/run12.csv."
- "Read the type K thermocouple on AIN2 every 10 seconds for a minute and tell me whether it is still warming up."
- "Set DAC0 to 1.25 V, then check the loopback on AIN2 and report the error in millivolts."
- "Which digital lines are outputs right now, and what level are they at?"
- "We're done — put all the outputs back in a safe state."
Notes
- Model differences are enforced. Valid input ranges (
AIN#_RANGE) and resolution indices come from LabJack's register map: T7 ±10/±1/±0.1/±0.01 V and index 0-8 (T7-Pro 0-12, but 9-12 cannot stream); T8 ±11 … ±0.018 V and index 0-16 (one index shared by all inputs); T4 fixed ranges (AIN0-3 ±10 V, AIN4-11 0-2.5 V) and index 0-5. DAC range: T4/T7 0-5 V, T8 0-10 V. - Settings persist. Range, resolution and differential settings made by
read_analog_inputsstay on the device until changed or power-cycled. Omitted settings are left as they are; every reading reports what it was measured against (GND, the T7 negative input, or the T8's isolated terminal). - Reading digital lines never changes their direction.
read_digital_inputsuses theDIO_STATE/DIO_DIRECTIONbitmasks. (Reading a single-line register such asFIO3would switch that line to input.) - T4 flexible I/O. AIN4-AIN11 share terminals with FIO4-EIO3. The server refuses to read those AINs while the line is a digital output, because the read would switch it to analog and release whatever it drives.
set_outputs_safedefault isinput, the T-series power-up state (input with pull-up). If an attached relay board treats a pulled-up input as "on", usedio_mode="low"instead.- Thermocouples use the AIN extended feature (
AIN#_EF_INDEX20-30). Withcjc="internal"the CJC register is set to its documented defaultTEMPERATURE_DEVICE_K(address 60052), which the T8 firmware maps to each channel's own terminal sensor (TEMPERATURE#_CAPTURE);cjc="lm34"uses LabJack's LM34 conversion (55.56 K/V, 255.37 K). An open input returnsvalid=false(the device reports -9999). - Streams follow LabJack's
stream_basic.pyexample (internal clock, no trigger, auto settling). While a stream runs, command-response analog reads are blocked by the device. Skipped scans (buffer overflow) are reported and left empty.set_outputs_safedoes not wait for a running stream: it stops it at the next read (the partial result is returned withaborted: true). A stream runs at 1 scan/s or faster (so that stop is prompt) and always takes at least two scans; that real duration is what themax_stream_duration_slimit checks. The returned waveform is downsampled by keeping each block's minimum and maximum, so short spikes are not lost;save_pathmust be a new.csvfile (an existing file is never overwritten, and the path is checked before streaming). - Importing the LJM wrapper prints to stdout if the native library is missing. The server redirects that import so the MCP stdio channel is never corrupted, and reports a clear install hint instead.
Hardware verification
Source: servers/engineering/labjack/README.md at commit 46545ea
Tools
0Version history
2- v0.1.3LatestSep 27, 2026
- v0.1.1Sep 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