USBTMC MCP Server
A Model Context Protocol (MCP) server for controlling multiple USBTMC (USB Test and Measurement Class) devices simultaneously using SCPI commands.
Features
- Multi-Device Support: Connect and control up to 16 instruments at once.
- Unified Interface: Use standard SCPI commands via a simplified MCP toolset.
- Keysight Support: Includes specialized tools to unlock Keysight modular instruments from firmware mode to USBTMC mode.
- Screenshot Capture: Take screenshots from Keysight/Agilent and Tektronix oscilloscopes.
- State Management: Automatic tracking of device IDs and connection states.
Requirements
- Python >= 3.13
Windows Additional Setup
This project uses libUSB as a backend for USB communication. On Windows, you need to install a compatible USB driver for your device using Zadig.
- Download and run Zadig
- Select your target USB device from the dropdown (enable Options β List All Devices if it does not appear)
- Select WinUSB as the driver and click Replace Driver
Note: Replacing the driver will remove the device's original functionality (e.g., HID recognition). To restore it, uninstall the driver from Device Manager and reconnect the device.
Installation
Using uv (recommended):
uv pip install usbtmc-lite-mcp
Or via pip:
pip install usbtmc-lite-mcp
Or from source:
git clone https://github.com/NaoNaoMe/usbtmc-lite-mcp.git
cd usbtmc-lite-mcp
uv sync
Configuration
Claude Desktop Config
Add the server to your claude_desktop_config.json:
{
"mcpServers": {
"usbtmc-lite-mcp": {
"command": "uvx",
"args": [
"usbtmc-lite-mcp"
]
}
}
}
Tools Overview
Connection
usbtmc_list_devices: Scan the USB bus for available USBTMC instruments.usbtmc_list_connected_devices: List all currently active device connections.usbtmc_connect: Establish a connection to a specific device (returns adevice_id).usbtmc_disconnect: Close the connection to a device.
Communication
usbtmc_query: Send a SCPI query (e.g.,*IDN?) and receive the response.usbtmc_send: Send a SCPI command.usbtmc_receive: Manually reads the response.usbtmc_clear: Clear device buffers and reset communication state.
Keysight / Tektronix Utilities
usbtmc_unlock_keysight_devices: Switch Keysight modular instruments to USBTMC mode.usbtmc_screenshot_keysight_display: Capture a screenshot from a Keysight/Agilent oscilloscope.usbtmc_screenshot_tektronix_display: Capture a screenshot from a Tektronix oscilloscope.
Example Workflow
- List Devices: Call
usbtmc_list_devicesto find your instrument's serial number. - Connect: Call
usbtmc_connectwith theserial_number. It will return adevice_id(e.g.,0). - Identify: Call
usbtmc_querywithdevice_id: 0andcommand: "*IDN?". - Configure: Call
usbtmc_sendto set parameters. - Disconnect: Call
usbtmc_disconnectwhen finished.
License
This project is licensed under the MIT License β see the LICENSE file for details.