MCP server for controlling LeCroy oscilloscopes via SCPI/VXI-11
Project description
lecroy-mcp
MCP server for controlling LeCroy oscilloscopes via SCPI over LAN (VXI-11) or USB.
Requirements
- uv installed
- A LeCroy oscilloscope connected over LAN or USB
MCP configuration
Add to your MCP client config (e.g. Claude Code's .mcp.json):
{
"mcpServers": {
"lecroy-scope": {
"type": "stdio",
"command": "uvx",
"args": ["lecroy-mcp"]
}
}
}
uvx will automatically download and run the server — no manual installation needed.
Oscilloscope setup (LAN / VXI-11)
This server communicates over the standard VXI-11 protocol. Before connecting, enable it on the scope:
- On the scope, go to Utilities → Utilities Setup ... → Remote
- In the Control from section, enable LXI (VXI11)
- Note the IP Address shown — you will need it for the connection string
The scope's IP can be assigned via DHCP or configured statically under Utilities → Utility → Remote → Net Connections.
Note: The TCPIP (VICP) option shown in the same panel uses LeCroy's proprietary protocol and is currently not supported by this server. Only LXI (VXI11) is required.
Connection options
Option 1 — Manual connection
Copy the MCP client config from above as-is and connect from within the Claude session:
scope_scan— auto-detect LeCroy scopes on the local networkscope_list_resources— list all VISA resources (LAN + USB)scope_connect("TCPIP0::192.168.1.111::inst0::INSTR")— connect directly
Optionally set LECROY_SUBNET to hint the scan range:
{
"mcpServers": {
"lecroy-scope": {
"type": "stdio",
"command": "uvx",
"args": ["lecroy-mcp"],
"env": {
"LECROY_SUBNET": "192.168.1.0/24"
}
}
}
}
Option 2 — Pre-configure the IP address (recommended for LAN)
Set LECROY_HOST in the env block and the server auto-connects on startup:
{
"mcpServers": {
"lecroy-scope": {
...
"env": {
"LECROY_HOST": "192.168.1.111"
}
}
}
}
Option 3 — Pre-configure a full resource string (LAN or USB)
Use LECROY_RESOURCE for full control, including USB connections:
{
"mcpServers": {
"lecroy-scope": {
...
"env": {
"LECROY_RESOURCE": "USB0::0x05FF::0x1023::12345::INSTR"
}
}
}
}
Usage
Once connected, you have tools for:
- Channel setup (scale, offset, coupling, bandwidth limit)
- Trigger configuration (mode, source, level, edge)
- Timebase and memory depth
- Automated measurements (PKPK, FREQ, RMS, RISE, DUTY, etc.)
- Waveform capture (JSON or CSV)
- Screenshots
- Math functions (FFT, INTG, DIFF, etc.)
- WaveSource built-in generator (WaveSurfer 3000Z and similar)
Supported models
The server detects the connected model and adjusts commands accordingly. Profiles are included for:
- WaveSurfer 3000Z / 4000HD
- HDO4000A / HDO6000B / HDO8000A
- WaveRunner 6000 / 8000
- WavePro HD
- MDA800A, SDA
Unknown models fall back to conservative defaults.
Manual installation
If you prefer not to use uvx:
pip install lecroy-mcp
Then use lecroy-mcp as the command in your MCP config instead of uvx lecroy-mcp.
Updating
With uvx, use the @latest tag to force the newest version:
uvx lecroy-mcp@latest
Or update the args in your .mcp.json to always pull the latest:
"args": ["lecroy-mcp@latest"]
With pip:
pip install --upgrade lecroy-mcp
Notes
- Requires
pyvisa-pybackend — NI-VISA is currently not supported (breaks screenshot capture) - All VISA access is serialized via a threading lock; parallel MCP tool calls are safe
Troubleshooting
Diagnostic messages not appearing in MCP logs
If you are not seeing server log output (e.g. auto-connect status or errors) in your MCP client's log viewer, add PYTHONUNBUFFERED to the env block:
"env": {
"PYTHONUNBUFFERED": "1"
}
This disables Python's output buffering so log messages are flushed immediately. It is not required for normal operation.
Tested with
| Component | Details |
|---|---|
| Oscilloscope | Teledyne LeCroy WaveSurfer 3024Z |
| Operating system | Windows 10, Windows 11, Linux Mint |
| MCP client | Claude Code |
This server should also work with other MCP-compatible clients such as OpenAI Codex and Google Gemini Code Assist, and on other operating systems such as macOS. Reports and contributions for additional configurations are welcome.
Disclaimer
Teledyne LeCroy and LeCroy are registered trademarks of Teledyne LeCroy, Inc. This project is an independent open-source tool and is not affiliated with, endorsed by, or sponsored by Teledyne LeCroy, Inc. All product and company names are trademarks or registered trademarks of their respective holders.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file lecroy_mcp-0.1.18.tar.gz.
File metadata
- Download URL: lecroy_mcp-0.1.18.tar.gz
- Upload date:
- Size: 40.3 MB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
ff9ac24523933d7c92c149bdcc29699be6cd75440f6f203a8b21c9465cb7e399
|
|
| MD5 |
f843ccd8d16d4ea050d5e04f030d0839
|
|
| BLAKE2b-256 |
72956337f8cf4610ee86af173eb3fa0b2d21b0f0dfe90a2660109d837081b26f
|
Provenance
The following attestation bundles were made for lecroy_mcp-0.1.18.tar.gz:
Publisher:
release.yml on lucasgerads/lecroy-mcp
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
lecroy_mcp-0.1.18.tar.gz -
Subject digest:
ff9ac24523933d7c92c149bdcc29699be6cd75440f6f203a8b21c9465cb7e399 - Sigstore transparency entry: 1297182109
- Sigstore integration time:
-
Permalink:
lucasgerads/lecroy-mcp@50e97e8d0f0bd75d33a568c5225dd395f92a249e -
Branch / Tag:
refs/heads/main - Owner: https://github.com/lucasgerads
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@50e97e8d0f0bd75d33a568c5225dd395f92a249e -
Trigger Event:
push
-
Statement type:
File details
Details for the file lecroy_mcp-0.1.18-py3-none-any.whl.
File metadata
- Download URL: lecroy_mcp-0.1.18-py3-none-any.whl
- Upload date:
- Size: 48.7 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
b28b5c73063d447bd9513af0dd2586d3a9b6826a4b238438a1e76b64e023bde3
|
|
| MD5 |
037f5bed0d5dcd8c6b2ee46a3cc62315
|
|
| BLAKE2b-256 |
ef0e4a4243e0d628d717ae69a783b28f1d24a2185ab57d49f0e3c8bbc5a9c500
|
Provenance
The following attestation bundles were made for lecroy_mcp-0.1.18-py3-none-any.whl:
Publisher:
release.yml on lucasgerads/lecroy-mcp
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
lecroy_mcp-0.1.18-py3-none-any.whl -
Subject digest:
b28b5c73063d447bd9513af0dd2586d3a9b6826a4b238438a1e76b64e023bde3 - Sigstore transparency entry: 1297182411
- Sigstore integration time:
-
Permalink:
lucasgerads/lecroy-mcp@50e97e8d0f0bd75d33a568c5225dd395f92a249e -
Branch / Tag:
refs/heads/main - Owner: https://github.com/lucasgerads
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@50e97e8d0f0bd75d33a568c5225dd395f92a249e -
Trigger Event:
push
-
Statement type: