dwf-mcp-server
Click on "Deploy 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., "@dwf-mcp-serverlist connected Digilent devices"
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.
dwf-mcp-server
MCP Server for Digilent WaveForms
instruments — oscilloscope, arbitrary waveform generator (AWG), and logic analyzer.
Built on dwfpy, a Python binding for the
Digilent WaveForms SDK (libdwf).
Supported Devices
Analog Discovery 2 (AD2)
Analog Discovery 3 (AD3)
Digital Discovery (DD)
Any device supported by the Digilent WaveForms SDK
Related MCP server: niscope-mcp
Prerequisites
Docker installed on the host machine.
No host-side WaveForms SDK installation is required. The proprietary
libdwf.sois added via a derived Dockerfile layer (see Installation).USB device permissions — Digilent USB devices default to
root:root 0664. If the container cannot find any devices, add a udev rule on the host:# /etc/udev/rules.d/99-digilent.rules SUBSYSTEM=="usb", ATTRS{idVendor}=="1443", MODE="0666"Then reload:
sudo udevadm control --reload-rules && sudo udevadm trigger
Installation
The public Docker image does not bundle any Digilent proprietary software
(Adept 2 Runtime, WaveForms SDK / libdwf.so). You must create a derived image
that adds them.
1. Create a derived Dockerfile
Create a file named Dockerfile.dwf:
FROM ghcr.io/kenosinc/dwf-mcp-server:latest
ARG ADEPT_VERSION=2.27.9
ARG WAVEFORMS_VERSION=3.24.4
RUN ARCH="$(dpkg --print-architecture)" \
&& apt-get update \
&& apt-get install -y --no-install-recommends curl \
&& curl -fsSL "https://files.digilent.com/Software/Adept2%20Runtime/${ADEPT_VERSION}/digilent.adept.runtime_${ADEPT_VERSION}-${ARCH}.deb" \
-o /tmp/adept-runtime.deb \
&& curl -fsSL "https://files.digilent.com/Software/Waveforms/${WAVEFORMS_VERSION}/digilent.waveforms_${WAVEFORMS_VERSION}_${ARCH}.deb" \
-o /tmp/waveforms.deb \
&& (apt-get install -y --no-install-recommends /tmp/adept-runtime.deb /tmp/waveforms.deb || true) \
&& for cmd in xdg-desktop-menu xdg-icon-resource xdg-mime; do \
printf '#!/bin/sh\nexit 0\n' > "/usr/bin/$cmd" && chmod +x "/usr/bin/$cmd"; \
done \
&& dpkg --configure -a \
&& apt-get purge -y curl \
&& apt-get autoremove -y \
&& rm -f /tmp/adept-runtime.deb /tmp/waveforms.deb \
&& rm -rf /var/lib/apt/lists/*2. Build the image
docker build -f Dockerfile.dwf -t dwf-mcp-server .3. Configure your MCP client
Claude Code
claude mcp add dwf -- docker run -i --rm --privileged dwf-mcp-serverClaude Desktop
Add to claude_desktop_config.json:
{
"mcpServers": {
"dwf": {
"command": "docker",
"args": [
"run", "-i", "--rm",
"--privileged",
"dwf-mcp-server"
]
}
}
}Pass --privileged so the container can access USB devices.
Project-level config (Claude Code)
If you have cloned this repository, copy the bundled example to a project-local
.mcp.json (which is gitignored) so Claude Code picks it up automatically when
opened against this directory:
cp .mcp.example.json .mcp.jsonEdit the resulting .mcp.json to match your local image tag or to add other
servers; the original .mcp.example.json stays clean and shareable.
Available MCP Tools
Tool | Description |
| List all connected Digilent WaveForms devices |
| Get detailed information about a specific device |
| Capture analog waveform samples (oscilloscope); supports |
| Generate an analog signal (AWG): sine, square, triangle, ...; supports |
| Measure DC voltage, RMS, frequency, period, or peak-to-peak |
| Control the programmable power supply (V+ / V-) |
| Capture digital logic signals (logic analyzer); supports |
| Read the logic level of a digital I/O pin |
| Set the logic level of a digital I/O pin |
| Send and receive data over SPI using the digital protocol interface |
| Report per-sub-instrument running/idle status (AWG, scope, LA, power supply) |
| Close the persistent device session and stop all outputs |
| Check whether the persistent device session is currently open |
Development
See CLAUDE.md for development setup, coding conventions, and release procedures.
License
This server cannot be deployed
Maintenance
Related MCP Connectors
Drive real devices from your AI Coding tool. Embed a client SDK (Unity, Godot, Flutter, iOS/macOS, Android, React Native, Web) in your app, then capture screenshots, traverse the UI tree, inject taps and key events, and run automated test tasks on the physical device over a secure relay.
Protocol-native energy infrastructure orchestration for AI data centers. Provides 46 MCP tools across 8 grid protocols (IEC-61850, DNP3, Modbus, OCPP, OpenADR, IEEE 2030.5, IEC 60870-5-104, ICCP) with 5 core API primitives: connect, dispatch, settle, comply, and intel. Enables AI agents to programmatically interact with substations, grid interfaces, and energy assets for real-time workload-grid coordination.
Control your Discord community: send/read messages, manage channels and forums, and handle webhook…
Control Unreal Engine to browse assets, import content, and manage levels and sequences. Automate…
Related MCP Servers
- FlicenseAqualityDmaintenanceEnables LLMs like Claude to interact with PicoScope oscilloscopes for signal acquisition, measurement, and analysis. Supports device management, data capture, triggering, and signal generation through natural language commands.245-
- AlicenseNot gradedqualityDmaintenanceEnables AI assistants to directly control NI oscilloscopes (e.g., PXIe-5160/5164/5110) through the Model Context Protocol, including waveform acquisition, measurement, and configuration.MIT
- AlicenseNot gradedqualityBmaintenanceEnables LLMs to control a PicoScope 5000A USB oscilloscope for signal generation, block capture, measurements, and frequency response sweeps.1MIT
- AlicenseAqualityAmaintenanceEnables LLMs to control RIGOL oscilloscopes over SCPI via LAN or USB, including configuring channels/timebase/trigger, taking measurements, capturing waveforms and screenshots, decoding serial protocols, running FFT analysis, and controlling the built-in AFG.38MIT