dwf-mcp-server
Enables control of Digilent WaveForms instruments (oscilloscope, AWG, logic analyzer) over USB, supporting devices like Analog Discovery 2/3 and Digital Discovery.
README
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
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:
Then reload:# /etc/udev/rules.d/99-digilent.rules SUBSYSTEM=="usb", ATTRS{idVendor}=="1443", MODE="0666"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-server
Claude 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.json
Edit 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_devices |
List all connected Digilent WaveForms devices |
device_info |
Get detailed information about a specific device |
analog_capture |
Capture analog waveform samples (oscilloscope); supports action="single" / "start" / "read" / "stop" for continuous capture across tool calls |
generate_waveform |
Generate an analog signal (AWG): sine, square, triangle, ...; supports action="pulse" / "start" / "stop" for persistent output |
measure |
Measure DC voltage, RMS, frequency, period, or peak-to-peak |
power_supply |
Control the programmable power supply (V+ / V-) |
digital_capture |
Capture digital logic signals (logic analyzer); supports action="single" / "start" / "read" / "stop" for continuous capture across tool calls |
gpio_read |
Read the logic level of a digital I/O pin |
gpio_write |
Set the logic level of a digital I/O pin |
spi_transfer |
Send and receive data over SPI using the digital protocol interface |
device_state |
Report per-sub-instrument running/idle status (AWG, scope, LA, power supply) |
close_device |
Close the persistent device session and stop all outputs |
device_session_status |
Check whether the persistent device session is currently open |
Development
See CLAUDE.md for development setup, coding conventions, and release procedures.
License
推荐服务器
Baidu Map
百度地图核心API现已全面兼容MCP协议,是国内首家兼容MCP协议的地图服务商。
Playwright MCP Server
一个模型上下文协议服务器,它使大型语言模型能够通过结构化的可访问性快照与网页进行交互,而无需视觉模型或屏幕截图。
Magic Component Platform (MCP)
一个由人工智能驱动的工具,可以从自然语言描述生成现代化的用户界面组件,并与流行的集成开发环境(IDE)集成,从而简化用户界面开发流程。
Audiense Insights MCP Server
通过模型上下文协议启用与 Audiense Insights 账户的交互,从而促进营销洞察和受众数据的提取和分析,包括人口统计信息、行为和影响者互动。
VeyraX
一个单一的 MCP 工具,连接你所有喜爱的工具:Gmail、日历以及其他 40 多个工具。
graphlit-mcp-server
模型上下文协议 (MCP) 服务器实现了 MCP 客户端与 Graphlit 服务之间的集成。 除了网络爬取之外,还可以将任何内容(从 Slack 到 Gmail 再到播客订阅源)导入到 Graphlit 项目中,然后从 MCP 客户端检索相关内容。
Kagi MCP Server
一个 MCP 服务器,集成了 Kagi 搜索功能和 Claude AI,使 Claude 能够在回答需要最新信息的问题时执行实时网络搜索。
e2b-mcp-server
使用 MCP 通过 e2b 运行代码。
Neon MCP Server
用于与 Neon 管理 API 和数据库交互的 MCP 服务器
Exa MCP Server
模型上下文协议(MCP)服务器允许像 Claude 这样的 AI 助手使用 Exa AI 搜索 API 进行网络搜索。这种设置允许 AI 模型以安全和受控的方式获取实时的网络信息。