mcpyvisa
MCP server for test equipment. Connects any MCP client (Claude Code, Claude Desktop, etc.) to instruments via pyvisa - GPIB, USB-TMC, LAN/VXI-11, or simulated hardware.
Docs: mcpyvisa.warehack.ing
Install
pip install mcpyvisa
# or
uv add mcpyvisa
Optional extras for specific backends and features:
pip install mcpyvisa[ar488] # GPIB via AR488/Prologix adapters
pip install mcpyvisa[pyvisa-py] # USB-TMC, LAN/VXI-11
pip install mcpyvisa[pymeasure] # Validated drivers for 8 instruments
pip install mcpyvisa[sim] # Simulated instruments (no hardware needed)
pip install mcpyvisa[all] # Everything
Add to Claude Code
claude mcp add mcpyvisa -- uvx mcpyvisa
The server runs over stdio. Works with any MCP client.
Configure
Create mcpyvisa.toml in the current directory or ~/.config/mcpyvisa/config.toml:
[server]
log_level = "INFO"
# AR488/Prologix adapter on serial
[[backend]]
name = "bench"
type = "ar488"
transport = "serial"
port = "/dev/ttyUSB0"
baudrate = 115200
# Give instruments friendly names
[instruments.dmm]
resource = "GPIB0::22::INSTR"
backend = "bench"
[instruments.smu]
resource = "GPIB0::24::INSTR"
backend = "bench"
Config search order: $MCPYVISA_CONFIG, ./mcpyvisa.toml, ~/.config/mcpyvisa/config.toml.
Backends
| Type | Extra | What it connects to |
|---|---|---|
ar488 |
mcpyvisa[ar488] |
GPIB instruments via AR488 or Prologix adapters (serial or TCP) |
pyvisa-py |
mcpyvisa[pyvisa-py] |
USB-TMC and LAN/VXI-11 instruments |
system |
(none) | NI-VISA or Keysight IO Libraries |
sim |
mcpyvisa[sim] |
Simulated instruments from YAML definitions |
Multiple backends can be active simultaneously. A GPIB bus on serial and a LAN scope work side-by-side through the same server.
Tools (22)
Universal - server_status, connect_backend, disconnect_backend,
discover_instruments, instrument_query, instrument_write,
instrument_identify, instrument_reset
GPIB - instrument_clear, serial_poll, check_srq, bus_trigger,
interface_clear, instrument_local, instrument_remote
AR488 - ar488_command, ar488_diagnostic, configure_ar488
pymeasure (when installed) - instrument_inspect, instrument_get,
instrument_set, instrument_call
What a session looks like
You: Connect to the bench backend and see what's on the bus.
Claude: [connect_backend("bench")] Connected.
[discover_instruments("bench")] Found 3 instruments:
GPIB0::5::INSTR - HP 34401A multimeter
GPIB0::22::INSTR - Keithley 2400 SourceMeter
GPIB0::10::INSTR - HP 33120A function generator
You: Measure DC voltage on the DMM.
Claude: [instrument_query("dmm", "MEAS:VOLT:DC?")] -0.00342 V
Try without hardware
Install the sim backend and point it at the included instrument catalog:
[[backend]]
name = "virtual-bench"
type = "sim"
sim_file = "gpib-catalog/sim/all_instruments.yaml"
This gives you 16 simulated instruments that respond to *IDN? and basic SCPI.
pymeasure drivers
When mcpyvisa[pymeasure] is installed, 4 additional tools let you interact
with instruments through validated, property-based drivers instead of raw SCPI.
Supported instruments:
HP 33120A, HP 34401A, HP 3478A, HP 8657B, Agilent 4284A, Keithley 2000, Keithley 2400, Keithley 6517B
Requirements
- Python 3.11+
- pyvisa >= 1.13
- fastmcp >= 3.0
Links
- Docs: mcpyvisa.warehack.ing
- Repository: git.supported.systems/warehack.ing/mcgpib
- pyvisa-ar488: Standalone pyvisa backend included in this repo
License
MIT
Metadata
Release files for mcpyvisa 2026.2.25
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | Provenance | |
|---|---|---|---|---|
| mcpyvisa-2026.2.25.tar.gz | 33.8 kB | Without provenance | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| mcpyvisa-2026.2.25-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 70.4 kB
Release files / mcpyvisa-2026.2.25.tar.gz
| Download URL | mcpyvisa-2026.2.25.tar.gz |
|---|---|
| Size | 33.8 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
4a6dd762fe865e273b09db1ba6bb95ca54097e9aa2d032cdf98122ffdc235fa7
|
|
BLAKE2b-256 checksum How to use checksums |
ccc16175f70742a6087964fe6ff3915478a6ab0746526d75f2366599f9110883
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
uv/0.9.26 {"installer":{"name":"uv","version":"0.9.26","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"EndeavourOS","version":null,"id":null,"libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}
|
Release files / mcpyvisa-2026.2.25-py3-none-any.whl
| Download URL | mcpyvisa-2026.2.25-py3-none-any.whl |
|---|---|
| Size | 36.6 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
fb065b4537bf14514a068f6d9793da239caac2fce6c6364c4eb598a5ce3dffed
|
|
BLAKE2b-256 checksum How to use checksums |
daacaf494c2f2eefd471190e7cc3fa7ccf0e2820b7834a47aa626bf59e3fb683
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
uv/0.9.26 {"installer":{"name":"uv","version":"0.9.26","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"EndeavourOS","version":null,"id":null,"libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}
|
Security for mcpyvisa 2026.2.25
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
No provenance found
None of the files in this release were uploaded with provenance metadata.
A note on package security
PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.