Rigol Oscilloscope

io.github.K-Dense-AI由 GitHub 账号 K-Dense-AI 发布v0.1.2更新于 Oct 24, 2026

MCP server for Rigol oscilloscopes (DS1000Z, MSO5000, DHO series): measurements and waveforms.

发布方自己的服务:Scope (AEC) - Preview

已验证STDIO仅桌面开发者工具数据与分析

概览

AI 生成的概览

让助手通过 SCPI 读取 Rigol 示波器的设置、测量值、波形和截图,并可调整通道、时基和触发。

可以做什么
通过 USB 或局域网连接 Rigol DS1000Z、MSO5000 和 DHO 系列示波器并使用 SCPI 通信。读取类工具可返回设备型号与固件、各通道/时基/触发设置、自动测量值(Vpp、频率、上升时间、占空比)以及经过校准的波形采集,还能保存屏幕截图。控制类工具可执行自动设置、设置通道、时基和边沿触发,并启动、单次、强制或停止采集。命令日志会记录原始 SCPI 通信内容。
适用场景
适合让助手查看或操作实验台上的示波器:读取当前设置、进行测量、把波形保存为 CSV,或截屏用于实验记录。主要面向实验室和硬件调试场景,而非通用软件任务。
运行要求
以 Python 包形式在本地通过 stdio 运行(uvx labmcp-rigol-scope)。需要一台可通过 USB-TMC 或局域网访问的 Rigol 示波器,并在 LABMCP_ADDRESS 中填写仪器地址(serial:///dev/ttyUSB0 或 tcp://host:5025)。通过 pyvisa-py 使用 USB 时需安装 libusb;Windows 上使用 NI-VISA 和 @ivi 后端。未声明需要账号或 API 密钥。
安装前请注意
控制类工具会改变仪器状态:自动设置会覆盖当前设置,set_channel、set_timebase、set_trigger、run、single、stop 和 force_trigger 都会改动示波器。设置 LABMCP_READ_ONLY=1 可禁用所有改变状态的工具。波形和截图的保存路径必须是新文件,不会覆盖已有文件。项目说明仅在模拟器上测试过,尚未在真实硬件上验证。

安装

在 SourceWeft 中

  1. 打开 控制台中的 Rigol Oscilloscope,将其添加到工作区。
  2. 为需要使用其工具的对话启用该服务。

Desktop only,通过 STDIO。 STDIO 服务会启动本地进程,因此需要 SourceWeft 桌面宿主。

其他 MCP 客户端

参照 仓库 中的启动说明。

README

Rigol Oscilloscope — MCP Server

Let an AI agent read the setup, adjust channels, timebase and trigger, run single acquisitions, take the scope's own measurements, capture calibrated waveforms and grab screenshots on Rigol digital oscilloscopes over SCPI.

Packagelabmcp-rigol-scope
InstrumentsDS1000Z / MSO1000Z (DS1054Z, DS1074Z, DS1104Z, MSO1104Z, "Plus" models), DS1000Z-E (DS1102Z-E, DS1202Z-E), MSO5000 (MSO5072 … MSO5354), DHO800 / DHO900 (DHO802, DHO804, DHO914, DHO924), DHO1000 / DHO4000 (DHO1072 … DHO4804)
InterfacesUSB (USB-TMC), LAN (VXI-11/LXI, raw socket)
ProtocolSCPI per Rigol's programming guides: MSO1000Z/DS1000Z PGA19109-1110, DS1000Z-E PGA27100-1110, MSO5000 PGA25104-1110, DHO800/DHO900, DHO1000/DHO4000 PGA34101-1110
Status🧪 simulated: tested against a wire-level SCPI simulator (including binary waveform and screenshot blocks), not yet verified on hardware. Report a hardware test

Try it without hardware

bash
uvx labmcp-rigol-scope --simulate --checkuvx labmcp-rigol-scope --simulate --option sim_model=DHO804 --check    # also DS1202Z-E, MSO5074, DHO1204 ...

The simulated scope has a 1 kHz, 0-3 V square wave on CH1 and a 2 kHz, 1 V sine on CH2 (CH3/CH4 grounded). It answers :WAVeform:DATA? and :DISPlay:DATA? with real IEEE 488.2 binary blocks, keeps an SCPI error queue, and its trigger only fires when the level is inside the signal, so you can try single with a bad trigger level.

Connect your oscilloscope

  1. USB: plug in the USB device port. The server uses PyVISA with the pure-Python pyvisa-py backend, which needs libusb on the system (brew install libusb, apt install libusb-1.0-0; on Windows use NI-VISA with ?backend=@ivi). Find the resource with python -m pyvisa info or uvx labmcp ports.
  2. LAN: in the scope's Utility I/O / LAN settings enable DHCP or set a static IP, and note the address.
  3. Test the connection:
    bash
    uvx labmcp-rigol-scope --address USB0::0x1AB1::0x04CE::DS1ZA123456789::INSTR --check   # USB-TMCuvx labmcp-rigol-scope --address TCPIP0::192.168.1.50::INSTR --check                   # LAN (VXI-11)uvx labmcp-rigol-scope --address tcp://192.168.1.50:5555 --check                        # LAN raw socket
    --check prints the *IDN? identity and the detected command family.

Add to your MCP client

Claude Code

bash
claude mcp add scope -- uvx labmcp-rigol-scope --address TCPIP0::192.168.1.50::INSTR

Claude Desktop / Cursor / Windsurf (claude_desktop_config.json, .cursor/mcp.json, …)

json
{  "mcpServers": {    "scope": {      "command": "uvx",      "args": ["labmcp-rigol-scope", "--address", "TCPIP0::192.168.1.50::INSTR"]    }  }}

Add --read-only to allow reading settings, measurements, waveforms and screenshots while blocking every tool that changes the scope setup. For other clients, generate the snippet with uvx labmcp config rigol-oscilloscope --address TCPIP0::192.168.1.50::INSTR --client vscode (also cursor, codex, claude-code).

Tools

ToolKindDescription
autoscale🎛 controlRun the scope's automatic setup (AUTO key): it picks vertical scales, timebase and trigger for the connected signals. This overwrites the user's current setup - only use it when asked. Needs signals of roughly >20 mVpp and >40 Hz.
capture_waveform👁 readCapture a channel's waveform, scaled to volts and seconds with the scope's waveform preamble, and return statistics plus a downsampled trace; optionally save all points to CSV.
force_trigger🎛 controlForce one trigger (FORCE key). Only has an effect in NORMal or SINGle sweep while waiting.
get_command_log👁 readReturn the most recent raw commands sent to / replies received from the instrument (newest last). Useful for debugging and for recording what was done.
get_connection_info👁 readReport which instrument is connected (identity, address, simulated or real), whether the server is read-only, and the active safety limits. Call this first.
get_device_info👁 readIdentify the oscilloscope (model, serial, firmware), the command family used for it, the number of analog channels, and the current sample rate and memory depth.
get_settings👁 readRead the current vertical settings of every channel (on/off, V/div, offset, coupling, probe ratio, bandwidth limit), the timebase, the trigger (type, sweep, status, edge source/level/slope) and the acquisition sample rate / memory depth.
measure👁 readRead the scope's automatic measurements for one channel: voltages (Vpp, Vmax, Vmin, Vtop, Vbase, Vamp, Vavg, Vrms, overshoot, preshoot) and timing (period, frequency, rise/fall time, +/- width, +/- duty). Values the scope cannot determine are null.
reconnect🛑 safetyClose and re-open the connection to the instrument (e.g. after it was power cycled or a cable was re-plugged).
run🎛 controlStart continuous acquisition (RUN).
screenshot👁 readSave a screenshot of the oscilloscope display (PNG; BMP on the MSO5000) and return its path. For PNG screenshots the image is also returned so the model can look at the screen.
set_channel🎛 controlChange a channel's vertical settings; unspecified settings are left alone. The probe ratio is applied first because it changes the valid scale range. Returns the settings the scope actually applied (the scale snaps to 1-2-5 steps). Rejected values are reported from the scope's error queue.
set_timebase🎛 controlSet the main timebase scale and/or offset. Returns the applied values.
set_trigger🎛 controlConfigure an edge trigger (source, level, slope) and the sweep mode. Sets the trigger type to EDGE. The level must lie within the source channel's screen range.
single🎛 controlArm a single acquisition (SINGLE key): the scope triggers once, then stops. With wait_s > 0 it waits until the acquisition is complete (status STOP). If the trigger condition is never met the status stays WAIT - check the trigger level/source or use force_trigger.
stop🎛 controlStop acquisition (STOP) and freeze the current waveforms, e.g. before reading deep memory.

get_connection_info, get_command_log and reconnect are built into every LabMCP server. The command log shows every SCPI command sent.

Safety limits

LimitDefaultMeaning
max_memory_points1 200 000 pointsMost points read from acquisition memory in one capture (bounds transfer time)

Override at launch, e.g. --limit max_memory_points=24000000. An oscilloscope does not source energy, so there are no hazard tools; this server does not control the built-in waveform generator some models have.

Example prompts

  • "What is on the scope right now? Give me the channel settings, timebase and trigger."
  • "Measure the frequency, Vpp and rise time on CH1."
  • "Set CH2 to 200 mV/div, AC coupling, trigger on CH2 falling edge at 0 V, then take a single shot and save the full memory record to ~/data/burst.csv."
  • "Capture the CH1 waveform from the screen and tell me the duty cycle and whether the trace is clipped."
  • "Take a screenshot of the scope so I can put it in my lab notebook."

Notes

  • One driver, three command families. Commands common to all guides are used as written (long forms, e.g. :TRIGger:EDGE:LEVel, :MEASure:ITEM? VPP,CHANnel1, :WAVeform:PREamble?). The differences are taken from each guide: autoscale is :AUToscale (DS1000Z, MSO5000) or :AUToset (DHO); screenshots are :DISPlay:DATA? ON,OFF,PNG (DS1000Z), :DISPlay:DATA? PNG (DHO) or :DISPlay:DATA? → BMP (MSO5000); screen captures return 1200 points (DS1000Z, 12 divisions) or 1000 (MSO5000/DHO, 10 divisions). The family is detected from *IDN?; unknown Rigol models are refused unless you force --option profile=DS1000Z|MSO5000|DHO.
  • Waveform scaling always uses :WAVeform:PREamble? and BYTE format: volts = (byte − YORigin − YREFerence) × YINCrement. WORD format is not used because the DHO guides do not document its byte order. For the 12-bit DHO scopes this means 8-bit screen/memory data.
  • Deep memory (mode="memory") follows the documented RAW procedure: stop the scope, then read in batches of 250 000 points with :WAVeform:STARt/STOP (the DS1000Z maximum for BYTE). The MSO5000 and DHO guides document batched reads but not a maximum; the server checks every batch length and fails clearly if a batch comes back short. Not yet verified on MSO5000/DHO hardware.
  • Captures hold the connection from source selection to the last byte, then re-read the preamble: if V/div or the timebase changed during the read, the capture is refused rather than mis-scaled. clipped_fraction counts points at the ADC limits (codes 0/255) in both modes. The returned trace keeps each block's minimum and maximum sample, so narrow glitches survive downsampling. save_path (CSV) and the screenshot save_path (.png, .bmp on the MSO5000) must be new files: they are checked before anything is read, and existing files are never overwritten.
  • Measurements return null when the scope answers 9.9E37 (cannot measure). Duty cycle and overshoot are reported exactly as the scope returns them (the DS1000Z guide defines duty as a ratio).
  • Setting commands are checked by reading :SYSTem:ERRor? afterwards, so an out-of-range scale, offset or trigger level is reported instead of silently ignored. The scale snaps to 1-2-5 steps unless fine adjustment (VERNier) is on.
  • LAN: the programming guides describe LAN access through VISA (VXI-11/LXI, TCPIP0::<ip>::INSTR). Rigol scopes also accept raw SCPI on TCP port 5555 (tcp://<ip>:5555); that port is widely used but not stated in these guides.
  • USB additionally needs libusb for pyvisa-py; pyusb is installed with this package.
  • Screenshots are returned as MCP image content only for PNG; large BMP screenshots (MSO5000) are saved to disk and the path is returned.

Hardware verification

ModelFirmwareInterfaceVerified byDate
none yet: be the first

来源:servers/engineering/rigol-oscilloscope/README.md,提交 46545ea

工具

0
SourceWeft 尚未在沙箱中启动过该软件包,因此其工具未知。

版本历史

2
  1. v0.1.2最新Sep 27, 2026
  2. v0.1.0Sep 26, 2026

评分

已满足适用检查项的 50%

该评分衡量此收录条目的完整程度,依据注册中心条目、端点与公开来源计算得出。它不是对服务器本身的评价,也不表示服务器安全或当前可用:可连通性是带日期的检查结果,评分也不包含安装量或用户评价。

  • 近 30 天内可连通25 分

    请保持端点能够响应 MCP 握手;SourceWeft 每 30 天探测一次。

  • 已声明认证方式10 分

    请在注册中心条目中声明凭据请求头,或保持端点能够响应探测,以便判定其认证方式。

  • 已列出工具15 分

    请让服务器在无凭据时响应 tools/list,或发布可在沙箱中无凭据启动的软件包。

  • 描述必需15 分
  • 图标10 分
  • 文档15 分
  • 许可证10 分

其他 Scope 集成