Skip to content
verify mcp Beta VerifyMCP is currently in beta. If you notice any issues, get in touch and we’ll put it right.

DAQiFi

NUGET · DAQIFI.MCP · SCANNED SEP 20

Discover, configure and read DAQiFi Nyquist data-acquisition hardware from an AI agent

Available components

+6 this week 76 Trust /100
Trust breakdown (7 categories)

How this component scores in each security and reliability category. Every signal is checked automatically from public evidence about the published package, including repeated runs of it in an isolated sandbox, and we only credit what we can confirm. How we score → Why this is hard to score →

Supply Chain Security100
  • No malware found by supply-chain analysis.Pass
  • No known CVEs affecting this package version or its production dependencies.Pass
  • No install/post-install scripts declared.Pass
  • No production dependencies, so there is no dependency health to assess. View diagnostics → Pass
Provenance & Transparency45
Schema Quality & AI Usability80
  • AI-judged instruction clarity (excellent).Pass
  • Context-footprint check failed: tool/resource definitions use about 3379 tokens (~129/item across 26 items; 26 tools + 0 resources), over budget; trim descriptions and params. See how to fix → Fail
  • Usage-examples check failed: none of the tools include examples. See how to fix → Fail
Stability & Change Management40
  • Stability observed for 12 of 30 days with no destabilising changes; credit accrues until the full window elapses.Partial
Tool Coverage100
  • 100% of tools have a non-trivial description (not blank, and not just the tool's name).Pass
  • 100% of tool parameters carry a description.Pass
Tool Safety75
  • No prompt-injection markers were found in the server instructions, tool names or descriptions we captured.Pass
  • 0 of 1 tool(s) whose name or description implies an irreversible operation declare an MCP destructiveHint annotation; "delete_sd_file" implies "delete" and declares no destructiveHint at all, which the MCP spec reads as destructive by default. See how to fix → Fail
  • An AI judge read all 26 captured unit(s) of tool text and found none that tries to manipulate the model reading it.Pass
Capabilities100
  • Implements a current MCP spec version (2026-07-28).Pass
Install

How do I install the DAQiFi MCP server?

DAQiFi runs locally as a NuGet package, launched with dnx Daqifi.Mcp@1.8.0 --yes. Ready-made configuration for Claude, Cursor, VS Code, Codex and 3 more is on this page, copied from each client's own documentation.

nuget · Daqifi.Mcp

# add to Claude Code
claude mcp add daqifi-daqifi-mcp -- dnx Daqifi.Mcp@1.8.0 --yes
// .cursor/mcp.json
{
  "mcpServers": {
    "daqifi-daqifi-mcp": {
      "command": "dnx",
      "args": [
        "Daqifi.Mcp@1.8.0",
        "--yes"
      ]
    }
  }
}
// .vscode/mcp.json
{
  "servers": {
    "daqifi-daqifi-mcp": {
      "command": "dnx",
      "args": [
        "Daqifi.Mcp@1.8.0",
        "--yes"
      ]
    }
  }
}
# add to Codex CLI
codex mcp add daqifi-daqifi-mcp -- dnx Daqifi.Mcp@1.8.0 --yes
// opencode.json
{
  "$schema": "https://opencode.ai/config.json",
  "mcp": {
    "daqifi-daqifi-mcp": {
      "type": "local",
      "command": [
        "dnx",
        "Daqifi.Mcp@1.8.0",
        "--yes"
      ],
      "enabled": true
    }
  }
}
# ~/.hermes/config.yaml
mcp_servers:
  daqifi-daqifi-mcp:
    command: "dnx"
    args: ["Daqifi.Mcp@1.8.0", "--yes"]
// ~/.netclaw/config/netclaw.json
{
  "McpServers": {
    "daqifi-daqifi-mcp": {
      "Transport": "stdio",
      "Command": "dnx",
      "Arguments": [
        "Daqifi.Mcp@1.8.0",
        "--yes"
      ]
    }
  }
}
// mcp.json
{
  "mcpServers": {
    "daqifi-daqifi-mcp": {
      "command": "dnx",
      "args": [
        "Daqifi.Mcp@1.8.0",
        "--yes"
      ]
    }
  }
}
Changelog

Every change we have recorded for this component, newest first. Security-relevant changes are always shown. ▲ marks a change for the better, ▼ a change for the worse; unmarked changes are neutral.

  • 20 Sept 26 +1

    No change was recorded against any check on this day. Stability & Change Management went from 37 to 40. That category is still filling its 30-day observation window: 11 days of observed history at the previous scan, 12 at this one. The score rises as the window fills, whether or not the server changes.

  • 18 Sept 26 +1

    No change was recorded against any check on this day. Stability & Change Management went from 30 to 33. That category is still filling its 30-day observation window: 9 days of observed history at the previous scan, 10 at this one. The score rises as the window fills, whether or not the server changes.

  • 16 Sept 26 +4
    • Stability: unverified → 0.27 functional
  • 8 Sept 26 70

    First indexed and scored.

Diagnostics

Diagnostic detail from the automated scan of this channel: what the scanner observed at each step, so you can see exactly where a check passed or failed. It is informational only and never changes the trust score.

Captured 20 Sept 2026 · Analysed nuget/Daqifi.Mcp@1.8.0

Provenance No attestation

The registry publishes no build provenance for this version, so there is nothing to verify.

Result No attestation
Ecosystem nuget
Reason Signature present, unreadable

Background: How many MCP packages publish verified provenance →

Dependencies 0 packages
Packages resolved 0
Tree resolution Complete

Background: SBOMs and build attestations, explained →

MCP tools · 26 exposed · ~3,379 tokens

The tools this component advertises to a client, with an estimated token cost for each. Expand a tool to see its parameters and schema. The per-tool counts are indicative and are not scored directly; the schema's total context footprint is one signal in Schema Quality & AI Usability. A tool's description is untrusted text the model reads on every call, which is what makes this list a security surface and not just an inventory: how tool poisoning works →

Tool Tokens
capture_samples ~366

Capture a block of live data as rows: one row per sample tick, one column per enabled channel (columns are named AI0/DIO0 and listed in the result). The capture ends at whichever budget runs out first, the duration or the row count, and reports what it actually got — rows, the rate it achieved, and the number of samples dropped because this server could not keep up. Compare measuredRateHz (this machine's clock) with sampleRateHz to see whether the device is streaming as fast as it was asked to, and with deviceClockRateHz (the device's own timestamps) to see whether its clock is keeping real time. Configure channels and the sample rate first. If the device is not already streaming this starts its stream and stops it again afterwards (refused in --read-only mode); a stream that was already running is read and left running. The device is held exclusively for the whole capture, so other tool calls on it wait.

NameTypeReqDescription
deviceIdstringyesThe device_id to capture from.
durationMsintegerHow long to capture for, in milliseconds (default 1000; clamped to 250..60000). The floor is bench-measured: a device that is not streaming yet sends nothing for the first ~100 ms after the start com…
maxRowsintegerMost rows to return (default 500; clamped to 1..10000). A row is one sample tick across all enabled channels, so 1000 rows at 1 kHz is one second of data. rowLimitReached in the result tells you the…

No output schema declared.

No examples provided.

configure_analog_channels ~130

Enable exactly the given analog input channels (by channel number) and disable the rest. Pass an empty list to disable all analog channels. Widening the channel set can lower the device's sample-rate ceiling; if the currently set rate no longer fits, it is automatically lowered to the new ceiling and the response's sampleRateAdjustedFromHz reports the rate it was lowered from.

NameTypeReqDescription
deviceIdstringyesThe device_id to configure.
enabledChannelsarrayyesAnalog channel numbers to enable, e.g. [0,1,2,3]. Channels not listed are disabled.

No output schema declared.

No examples provided.

configure_digital_channels ~130

Enable exactly the given digital channels (by channel number) and disable the rest. Enabled digital channels are sampled during streaming; the device's DIO enable is global, so enabling any digital channel powers the whole port. Pass an empty list to disable all digital channels. As with configure_analog_channels, an over-cap live sample rate is automatically lowered and reported via sampleRateAdjustedFromHz.

NameTypeReqDescription
deviceIdstringyesThe device_id to configure.
enabledChannelsarrayyesDigital channel numbers to enable, e.g. [0,1,2]. Channels not listed are disabled.

No output schema declared.

No examples provided.

connect_device ~76

Connect to a previously-discovered device. Pass a device_id from discover_devices. Channels are populated on connect. If that physical device is already connected (including over a different transport), the existing connection is returned — use the device_id from the result for follow-up calls.

NameTypeReqDescription
deviceIdstringyesThe device_id from discover_devices.

No output schema declared.

No examples provided.

delete_sd_file ~89

Permanently delete a file from the device's SD card. There is no undo and no recycle bin — download it first if the data matters. Refused in --read-only mode, and refused while the device is logging.

NameTypeReqDescription
deviceIdstringyesThe device_id to delete from.
fileNamestringyesThe on-card file name, exactly as list_sd_files reports it.

No output schema declared.

No examples provided.

disable_pwm ~149

Stop PWM output on a digital channel. The pin is left high-impedance (not driven); use set_digital_direction/set_digital_output to drive it digitally again. Allowed on any digital channel, including one that isn't PWM-capable — this is the only recovery path for the firmware's half-armed PWM state. This call always succeeds from the caller's point of view: if the channel was never actually armed, the firmware rejects the command internally but that rejection is not surfaced here (the tool never throws for it and the result carries no error field).

NameTypeReqDescription
channelintegeryesThe digital channel number to stop PWM on.
deviceIdstringyesThe device_id to control.

No output schema declared.

No examples provided.

disconnect_device ~30

Disconnect from a connected device and release it.

NameTypeReqDescription
deviceIdstringyesThe device_id to disconnect.

No output schema declared.

No examples provided.

discover_devices ~178

Discover DAQiFi devices on USB/serial and WiFi. Returns a list whose device_id values are used by the other tools. Call this first.

NameTypeReqDescription
serialbooleanInclude USB/serial discovery (default true).
timeoutMsintegerDiscovery timeout in milliseconds (default 2000; clamped to 1000..30000). The floor is bench-measured: the serial identify handshake takes ~830 ms, so a lower budget returns an empty list before a de…
wifibooleanInclude WiFi/network discovery (default true).

No output schema declared.

No examples provided.

download_sd_file ~215

Download an SD-card log file to this machine and, by default, parse it into a CSV you can read. Returns the local path of both files plus the sample and CSV row counts (a row is one timestamp, not one sample). Run SD retrieval before any live streaming on the same connection: a stream collapses the device's SD buffer and later downloads come back empty. Filenames come from list_sd_files. Large files take as long as the transfer takes.

NameTypeReqDescription
deviceIdstringyesThe device_id to download from.
exportCsvbooleanAlso parse the download and write a CSV next to it (default true). Set false to fetch the raw file only, e.g. when it is large and you just want it on disk. If the parse fails, the download still suc…
fileNamestringyesThe on-card file name as list_sd_files reports it (matched without case sensitivity). A name that is not on the card is rejected straight away.

No output schema declared.

No examples provided.

get_device_status ~48

Get a live status snapshot for a connected device: connection state, streaming/logging flags, sample rate, and enabled analog channels.

NameTypeReqDescription
deviceIdstringyesThe device_id to inspect.

No output schema declared.

No examples provided.

get_sd_storage ~65

Report free, used, and total space on the device's SD card. Refused while the device is logging (the SD card is busy) — call stop_sd_logging first. Available in --read-only mode.

NameTypeReqDescription
deviceIdstringyesThe device_id to inspect.

No output schema declared.

No examples provided.

get_server_info ~145

Report this MCP server's own version and whether a newer Daqifi.Mcp has been published to NuGet. Call it when a tool you expected does not exist, when behaviour disagrees with the documentation, or before telling a user that a DAQiFi cannot do something: the tool surface grows with each release, so an out-of-date server is missing capabilities rather than the hardware lacking them. The message field says what to do about it. Needs no device and no connection, costs no device round-trip, and is available in --read-only mode. The comparison is made once per server start; --no-version-check disables it, and then versionCheck reads 'disabled'.

Input schema present but exposes no named parameters.

No output schema declared.

No examples provided.

latch_analog_outputs ~69

Apply every analog output voltage staged with set_analog_output latch=false, so the staged channels change together. Returns the state of every analog output afterwards. Harmless with nothing staged — the device re-applies what it already holds.

NameTypeReqDescription
deviceIdstringyesThe device_id to latch.

No output schema declared.

No examples provided.

list_analog_outputs ~230

List the device's analog output (DAC) channels with the voltage range each accepts, its resolution, and the value it is driving. Call this before set_analog_output to learn the legal range. An empty list means no DAC channel is modelled, which happens two ways: the board has none (analog output is Nyquist 3 hardware), or it has them but did not describe them in its capability document (firmware below v3.5.0). Do not read an empty list as 'writing is impossible' — in the second case set_analog_output still drives the channel by number and answers with rangeChecked false, saying that nothing validated the voltage; only in the first is it refused. Available in --read-only mode; costs no device round-trip, so `volts` is only what this server has written or read back this session — a null there means this server has not touched the channel, NOT that the pin is at 0 V. Use read_analog_output to ask the device itself.

NameTypeReqDescription
deviceIdstringyesThe device_id to inspect.

No output schema declared.

No examples provided.

list_channels ~38

List all channels on a connected device with their type, enabled state, and direction.

NameTypeReqDescription
deviceIdstringyesThe device_id to inspect.

No output schema declared.

No examples provided.

list_connected_devices ~25

List the devices currently connected to this server. Cheap; safe to call often.

Input schema present but exposes no named parameters.

No output schema declared.

No examples provided.

list_sd_files ~75

List the log files on the device's SD card, with size and creation date where the device reports them. An empty list always means an empty card — a device that fails to answer the listing raises an error instead. Available in --read-only mode.

NameTypeReqDescription
deviceIdstringyesThe device_id to list files on.

No output schema declared.

No examples provided.

read_analog_output ~130

Ask the device what voltage an analog output channel is holding. This is a round-trip to the firmware, so it reflects what the device actually accepted — including a value written before this server connected — but it is not a measurement of the pin: the DAC has no readback path, so the device answers with the value it was last told to drive. Refused while the device is streaming, because the binary stream corrupts the reply. Available in --read-only mode.

NameTypeReqDescription
channelintegeryesThe analog output channel number.
deviceIdstringyesThe device_id to query.

No output schema declared.

No examples provided.

read_channel_values ~237

Read the latest value on every enabled channel: volts for analog inputs, 0/1 for digital ones, each with the timestamp it was sampled at. Returns as soon as every enabled channel has reported, so it normally costs one sample period rather than the full timeout; a channel that reported nothing comes back with a null value rather than a zero. Configure and enable channels first — with none enabled the device sends nothing and the call is refused. If the device is not already streaming this starts its stream and stops it again afterwards (refused in --read-only mode, since that is a change); a stream that was already running is read and left running.

NameTypeReqDescription
deviceIdstringyesThe device_id to read.
timeoutMsintegerHow long to wait for every enabled channel to report, in milliseconds (default 2000; clamped to 500..30000). Reached only when a channel stays silent: a device already streaming at 1 kHz answers in a…

No output schema declared.

No examples provided.

set_analog_output ~246

Drive an analog output (DAC) channel to a voltage. Nyquist 3 hardware only; on any other board the call is refused rather than silently discarded by the firmware. A voltage outside the channel's range is rejected before anything is sent — call list_analog_outputs for the range. By default the value takes effect immediately; pass latch=false to stage it instead and apply several channels together with latch_analog_outputs. Note that the latch is device-wide, not per-channel: a call with latch=true also applies anything staged earlier on OTHER channels, and the result reports only the channel written — call list_analog_outputs afterwards to see them all.

NameTypeReqDescription
channelintegeryesThe analog output channel number, as list_analog_outputs reports it.
deviceIdstringyesThe device_id to control.
latchbooleanApply the value now (default). Pass false to stage it without changing the pin; it takes effect on the next latch_analog_outputs, which is how several outputs are made to change together.
voltsnumberyesThe output voltage in volts. Must lie inside the channel's range (commonly 0-10 V).

No output schema declared.

No examples provided.

set_digital_direction ~113

Set a digital channel's direction: 'input' (high-impedance, sampled during streaming) or 'output' (driven by the device; set the level with set_digital_output). Rejected while PWM is enabled on the channel — call disable_pwm first.

NameTypeReqDescription
channelintegeryesThe digital channel number (e.g. 0-15 on Nyquist).
deviceIdstringyesThe device_id to configure.
directionstringyes'input' or 'output'.

No output schema declared.

No examples provided.

set_digital_output ~112

Drive a digital channel high or low. If the channel is currently an input it is switched to output direction first, so one call is enough to drive a pin. Rejected while PWM is enabled on the channel — call disable_pwm first.

NameTypeReqDescription
channelintegeryesThe digital channel number (e.g. 0-15 on Nyquist).
deviceIdstringyesThe device_id to control.
highbooleanyestrue to drive the pin high, false to drive it low.

No output schema declared.

No examples provided.

set_pwm_output ~204

Start PWM output on a PWM-capable digital channel (Nyquist: channels 0, 3, 4, 5, 6, 7). Sets the duty cycle, optionally the device-wide frequency, then enables the channel. The frequency is shared by ALL PWM channels (one hardware timer). While PWM runs, set_digital_direction/set_digital_output on the channel are rejected rather than silently ignored — call disable_pwm first to drive it digitally again.

NameTypeReqDescription
channelintegeryesThe PWM-capable digital channel number.
deviceIdstringyesThe device_id to control.
dutyCyclePercentintegeryesDuty cycle in whole percent, 1-100. To stop the output use disable_pwm, not duty 0.
frequencyHzintegerPWM frequency in Hz, 6-50000, applied device-wide. Pass 0 to keep the current session frequency (defaults to 1000 Hz until explicitly set).

No output schema declared.

No examples provided.

set_sample_rate ~136

Set the device sample (streaming) rate in Hz, applied to streaming and SD-card logging. The achievable maximum depends on how many channels are currently enabled (configure channels first for an accurate ceiling) and is further capped by --max-sample-rate-hz if set; a request above the effective cap is rejected — the call throws rather than silently applying a lower rate.

NameTypeReqDescription
deviceIdstringyesThe device_id to configure.
rateHzintegeryesSample rate in Hz. The ceiling varies with the enabled channel count; get_device_status or a prior configure_analog_channels call error message reports the current limit.

No output schema declared.

No examples provided.

start_sd_logging ~109

Start on-device SD-card logging using the currently enabled channels and sample rate. Requires a USB/serial connection (the SD card and WiFi share a bus). Configure channels and sample rate first.

NameTypeReqDescription
deviceIdstringyesThe device_id to log on.
fileNamestring|nullOptional log file name. If omitted, the device auto-generates log_<timestamp>.
formatstringLog format: 'protobuf' (default), 'json', or 'csv'.

No output schema declared.

No examples provided.

stop_sd_logging ~34

Stop on-device SD-card logging on a device.

NameTypeReqDescription
deviceIdstringyesThe device_id to stop logging on.

No output schema declared.

No examples provided.

Common questions

What is the DAQiFi MCP server?

DAQiFi is an MCP server listed in the public MCP registry as io.github.daqifi/daqifi-mcp. Discover, configure and read DAQiFi Nyquist data-acquisition hardware from an AI agent. This page covers its NuGet package (Daqifi.Mcp).

Is the DAQiFi MCP server safe to use?

DAQiFi scores 76 out of 100 on VerifyMCP. We found no known CVEs affecting it as of 20 September 2026. It declares no install or post-install scripts. That is a record of what we were able to check automatically, not an endorsement. The category breakdown on this page shows every signal behind the number, including the ones we could not confirm.

What tools does the DAQiFi MCP server expose?

DAQiFi exposes 26 tools: download_sd_file, start_sd_logging, configure_digital_channels, get_device_status, list_connected_devices, and 21 more. Their descriptions and schemas cost roughly 3,379 tokens of context every time the server is loaded.

Is the DAQiFi MCP server still maintained?

DAQiFi is still listed as active in the MCP registry. We last reached this channel on 20 September 2026. Those dates come from our own scans of the registry and the channel itself, not from anything the publisher announced.

What licence is the DAQiFi MCP server under?

DAQiFi declares the MIT licence, which is OSI-approved. That covers the source only, and says nothing about the cost of any service it calls.