DAQiFi MCP Server · io.github.daqifi/daqifi-mcp · MIT · .NET

Discover, configure and read a DAQ from an AI agent

Daqifi.Mcp is an open-source Model Context Protocol (MCP) server for DAQiFi Nyquist data-acquisition (DAQ) hardware. Add it to Claude, Cursor, Codex or any MCP client, connect a Nyquist over USB or WiFi, and describe the measurement. The agent finds the device, sets channels and sample rate, reads the data back, and reasons about it in the same conversation.

Install in two commands ↓

DAQiFi Nyquist 1, Nyquist 2 and Nyquist 3 data-acquisition devices

What a session looks like

An illustrative exchange with a Nyquist on USB. The agent chooses the tools, and every call it makes is shown in the conversation as it runs, so the steps behind an answer are never hidden.

You: Capture two seconds off channels 0–3 and tell me if anything looks noisy.

discover_devices
connect_device → deviceId from discover_devices
configure_analog_channels → enabledChannels = [0, 1, 2, 3]
set_sample_rate → rateHz = 1000
capture_samples → durationMs = 2000, maxRows = 500

Agent: Channels 0, 1 and 3 are flat to within a few millivolts over the whole capture. Channel 2 carries a 60 Hz component at roughly 40 mV peak-to-peak, which points at a grounding or shielding problem on that input rather than at the signal itself.

What the server can do

Daqifi.Mcp is a thin layer over the open-source Daqifi.Core .NET library, so every tool talks to the device the same way the DAQiFi desktop software does. The tools group into six jobs.

Discover and connect

Finds Nyquist devices on USB/serial and WiFi and connects to any of them by ID. Several devices can be open at once, and every later call names the device it acts on.

Configure channels and rate

Enables exactly the analog and digital channels you name and sets the sample rate in Hz. The rate ceiling depends on how many channels are enabled, and a request above it is rejected rather than silently lowered.

Read live data

Returns the latest value on every enabled channel with its timestamp, or a block of samples as rows: one per sample tick, one column per channel. Captures are bounded by duration and row count so the result stays inside the conversation.

Log to the SD card

Starts and stops on-device logging at full rate, lists the files on the card, reports free space, and downloads a log parsed to CSV. The device records unattended; the agent collects the file later.

Drive outputs

Sets digital lines high or low, runs PWM from 6 Hz to 50 kHz at 1 to 100 % duty, and on Nyquist 3 drives the DAC outputs. Voltages are range-checked before they are sent, and several channels can be latched to change together.

Report its own version

Announces its version in the MCP handshake and checks NuGet once at startup for a newer release. The tool list grows with each release, so the agent can tell an out-of-date install from a hardware limit.


Why put an AI agent on your DAQ

A DAQ is only useful once someone has configured it, captured the data and looked at it. An agent that can do all three from a sentence changes who can run a measurement and how much of the work is recorded.

Tests without a software project

A bench technician describes the test in a sentence. No LabVIEW seat, no driver install, no capture script to maintain. The same prompt runs the same test next month, on the same or a different Nyquist.

Spot checks during bring-up

Ask what is on AI1 right now, or whether a supply rail is noisy, without stopping to write a capture script. The answer comes back with the samples behind it.

Analysis without an export

Captured rows return to the agent that asked for them. Averaging, comparing channels, spotting a 60 Hz component or flagging a dropout happens in the next sentence rather than after an export.

A record of how data was taken

The prompt, the tool calls and the returned rows sit in one transcript. Channel set, sample rate and duration are recorded alongside the result instead of in a notebook margin.

Instrumentation for teaching

Students get from “measure this” to data without first learning a driver API, and the tool calls the agent makes stay visible, so discovery, configuration and sampling remain in view rather than behind a button.

An open standard, not a plug-in

MCP is an open protocol. The same server works with Claude Desktop, Claude Code, Cursor and Codex, and any agent framework that speaks MCP can put a Nyquist inside a larger automated procedure.


Get started

1. Install the server

dotnet tool install -g Daqifi.Mcp

Requires the .NET runtime and provides the daqifi-mcp command. With the .NET 10 SDK installed, dnx Daqifi.Mcp --yes runs the current release without installing it, which is how a client that finds the server in the MCP Registry launches it. Update later with dotnet tool update -g Daqifi.Mcp, then restart the client.

2. Point your MCP client at it

A stdio MCP server is a command the client launches as a subprocess, so every client configuration reduces to a command plus arguments.

Claude Code

claude mcp add daqifi -- daqifi-mcp

Claude Desktop and Cursor

claude_desktop_config.json or ~/.cursor/mcp.json:

{
  "mcpServers": {
    "daqifi": { "command": "daqifi-mcp", "args": [] }
  }
}

Codex CLI

~/.codex/config.toml:

[mcp_servers.daqifi]
command = "daqifi-mcp"
args = []

Optional flags

  • --read-only exposes discovery and reading only.
  • --max-sample-rate-hz <n> caps the rate an agent can request.
  • --no-version-check skips the startup check against nuget.org.

3. Connect a Nyquist and ask

Plug the device in over USB or join its WiFi network. SD-card logging needs the USB connection, since the card and the WiFi radio share a bus. Then ask in your own words, for example:

  • “Discover my DAQiFi, connect, enable analog channels 0–3 at 1 kHz, and start logging to the SD card.”
  • “Stop the log, then download it and tell me the average on AI0.”
  • “What voltage is on AI1 right now?”
  • “Set digital channel 3 to output and drive it high, then read AI0 for one second.”

Runs on your machine, with guardrails

The server runs locally and talks to the device exactly as the Daqifi.Core library does. Measurement, device and configuration data never leave the machine. The one outbound request is a startup version check against nuget.org, which sends nothing but a user agent, times out after five seconds, and is disabled by --no-version-check.

  • Read-only mode. With --read-only, channel and rate configuration, digital, PWM and analog outputs, logging control and SD-card deletion are refused, and the refusal says why. Listing and downloading existing logs still works.
  • Rejected, not degraded. A sample rate above the ceiling, a DAC voltage outside the channel’s range, or analog output on a board without it is refused outright rather than silently applied as something else.
  • Existing sessions left alone. Live reads start the device’s stream only if nothing is streaming and stop it again afterwards. A session that was already running is read and left as it was.
  • Every call is visible. The agent’s tool calls and their results appear in the conversation, so the person at the bench can see exactly what was sent to the hardware.

Works with every Nyquist

One server, three devices. Channel counts and ranges come from the device’s own capability document, and the analog-output tools are available on Nyquist 3.

Nyquist 1

16 analog inputs, 12-bit, 0–5 V, up to 19,250 Hz on a single channel. 16 digital I/O with PWM. WiFi, USB and MicroSD logging.

Nyquist 2

16 analog inputs, 24-bit (AD7173), 0–5 V. 16 digital I/O with PWM. WiFi, USB and MicroSD logging.

Nyquist 3

8 analog inputs, 18-bit, ±10 V (AD7609), sampled simultaneously. 8 analog outputs, 0–10 V (DAC7718), drivable from the agent. 16 digital I/O with PWM.

Open source, like the rest of the stack

Daqifi.Mcp lives in the daqifi-core repository under the MIT license, next to the .NET SDK it is built on. It is published to NuGet as Daqifi.Mcp and listed in the official MCP Registry as io.github.daqifi/daqifi-mcp. Issues and pull requests are welcome.

NuGet package · MCP Registry listing · All DAQiFi software · The open-source stack · Get a Nyquist