daq-mcp
Click on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@daq-mcpMonitor analog input Dev1/ai0"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
daq-mcp
An MCP server that lets an AI coding client talk to NI DAQ hardware.
Most MCP demos wrap APIs or filesystems. This one wraps a data-acquisition device: list channels, read voltages, write digital lines, acquire a short waveform. That is interesting because the failure modes are physical — a hallucinated channel name or a stray analog output can damage equipment or hurt someone. The protocol plumbing is the easy part; the safety model is the point of the project.
Safety model
Writes are off by default. Only channels on an explicit allowlist can be touched. Analog output is clamped to a configured voltage range, and every write returns what actually happened (including clamp flags and digital read-back) so the model can verify its own actions.
Control | Default | Env / constant |
Digital / analog writes | disabled |
|
Channel allowlist |
|
|
AO clamp range | ±5 V |
|
The MCP tools never import nidaqmx directly. They call a backend interface.
That boundary is what makes the server testable and portable.
Related MCP server: rigol-dho-mcp
Simulated by default (no NI drivers required)
Clone this on a machine without NI-DAQmx — including macOS — and it still
runs. Set DAQ_MCP_SIMULATE=1 to force the pure-Python backend, or leave it
unset: the server tries the real driver and falls back to simulation with a
clear log line if NI is missing.
The simulator exposes two fake devices (Dev1 / Dev2) with realistic
channel inventories. Dev1/ai0 is a slow sine with noise; Dev1/ai1 is a
noisy DC level. Digital lines keep state across calls.
Install
Requires Python 3.11+ and uv.
cd MCP-NIDAQMX
uv syncOptional real-hardware extra (needs NI-DAQmx drivers on the machine):
uv sync --extra hardwareRun the server:
uv run server.pyUseful environment variables:
DAQ_MCP_SIMULATE=1 # force simulated backend
DAQ_MCP_ALLOW_WRITE=1 # enable digital / analog outputVerify with MCP Inspector
cd MCP-NIDAQMX
DAQ_MCP_SIMULATE=1 npx -y @modelcontextprotocol/inspector uv run server.pyOn Windows PowerShell:
cd C:\Users\folayaod\personal\MCP-NIDAQMX
$env:DAQ_MCP_SIMULATE = "1"
npx -y @modelcontextprotocol/inspector uv run server.pyCursor configuration
Add to your Cursor MCP settings (user-level mcp.json). Prefer the full path
to uv so Cursor does not depend on PATH:
{
"mcpServers": {
"daq-mcp": {
"command": "C:\\Users\\folayaod\\.local\\bin\\uv.exe",
"args": [
"run",
"--directory",
"C:\\Users\\folayaod\\personal\\MCP-NIDAQMX",
"server.py"
],
"env": {
"DAQ_MCP_SIMULATE": "1"
}
}
}
}Add "DAQ_MCP_ALLOW_WRITE": "1" only when you intentionally enable outputs.
A copy-paste template lives at .cursor/mcp.json.example. Put your real
machine config in .cursor/mcp.json (gitignored) or in Cursor's user MCP
settings — do not commit local paths or write-enable flags.
Tests
uv run pytestAll tests run against the simulated backend.
Tool design decisions
One tool per complete operation. Splitting "create task / add channel / start / read / close" into separate tools would force the model into multiple round-trips and make it easy to leave a hardware task open. Each tool opens what it needs, does one job, and closes everything before returning.
Summary over raw data for waveforms. monitor_analog returns mean, RMS,
peak-to-peak, standard deviation, and a downsampled preview of at most 50
points. Dumping thousands of floats into the model context is expensive and
rarely what you need for "is my sensor behaving?"
Project layout
server.py # MCP tools + safety layer
src/daq_mcp/backend/ # DAQBackend ABC, simulated + nidaqmx backends
tests/ # pytest against the simulatorMaintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Servers
- Alicense-qualityDmaintenanceMCP server for controlling Universal Robots arms and Robotiq grippers via RTDE protocol, enabling motion, force, I/O, and gripper operations.1MIT
- AlicenseAqualityBmaintenanceMCP server for controlling and reading Rigol DHO800/DHO900 oscilloscopes over LAN via SCPI commands.111MIT
- Flicense-qualityBmaintenanceMCP server for ADALM2000 (M2k) — AWG, scope, and PSU control via FastMCP 3.4.
- AlicenseAqualityCmaintenanceA safety-bounded MCP server for discovering data-acquisition devices and performing finite analog-voltage and digital-input reads through NI's nidaqmx Python package.9Apache 2.0
Related MCP Connectors
MCP server for fcc-ecfs
MCP server for network documentation, generated by doc2mcp.
An MCP server for deep research or task groups
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/rhit-folayaod/MCP-NIDAQMX'
If you have feedback or need assistance with the MCP directory API, please join our Discord server