# Rigol Oscilloscope

Controls Rigol oscilloscopes over SCPI via USB or LAN. Allows agents to adjust timebases, capture calibrated waveforms, read voltages and take screenshots.

- MCP server · `type=mcp` · Claude Code, Codex, Cursor, GitHub Copilot, Windsurf (Devin Desktop), Cline, Zed, Gemini CLI · ★ 23
- Author: K-Dense-AI
- License: Apache-2.0 · policy=link-only · description only; the file stays with the author
- Source: https://github.com/K-Dense-AI/lab-instrument-mcps/tree/HEAD/servers/engineering/rigol-oscilloscope
- Updated: 2026-09-26
- HTML: https://affpapa.org/en/nevibecode/mcp/rigol-oscilloscope

## What it does

This server connects coding agents directly to Rigol hardware, covering DS1000Z, MSO5000, DHO800, and DHO1000 series instruments. An agent can configure vertical channel scales, set edge triggers, trigger single-shot acquisitions, and read hardware measurements like frequency or peak-to-peak voltage. Waveform traces can be sampled and saved to CSV, while scope displays are captured as PNG or BMP images.

Communication runs over USB-TMC or local networks using VXI-11 and raw TCP sockets. For USB links on Linux and macOS, the host system requires `libusb` so the underlying PyVISA backend can identify the instrument. Windows setups rely on NI-VISA instead.

You can test workflows without physical hardware by launching the built-in emulator via `--simulate`. Setting `--read-only` restricts the agent to observation tools, safeguarding your physical bench setup from unexpected trigger or scale overwrites.

## Requirements
- Needs: Python and uv (commands run via uvx)
- Environment variables: `LABMCP_ADDRESS`, `LABMCP_SIMULATE`, `LABMCP_READ_ONLY`, `LABMCP_LIMITS` — keys and tokens: ask the human for the values, never commit them or put them in shared files.

## Install

### Claude Code (native platform)

**Platform CLI**
```bash
claude mcp add --env LABMCP_ADDRESS=<LABMCP_ADDRESS> --env LABMCP_SIMULATE=<LABMCP_SIMULATE> --env LABMCP_READ_ONLY=<LABMCP_READ_ONLY> --env LABMCP_LIMITS=<LABMCP_LIMITS> --transport stdio rigol-oscilloscope -- uvx labmcp-rigol-scope
```
Replace <…> with your own values. uvx runs the command named after the package; if the README names another one, use uvx --from labmcp-rigol-scope <command>

### Codex

**Platform CLI**
```bash
codex mcp add rigol-oscilloscope --env LABMCP_ADDRESS=<LABMCP_ADDRESS> --env LABMCP_SIMULATE=<LABMCP_SIMULATE> --env LABMCP_READ_ONLY=<LABMCP_READ_ONLY> --env LABMCP_LIMITS=<LABMCP_LIMITS> -- uvx labmcp-rigol-scope
```
Replace <…> with your own values. uvx runs the command named after the package; if the README names another one, use uvx --from labmcp-rigol-scope <command>

### Cursor

**Config file**
File `.cursor/mcp.json`:
```json
{
    "mcpServers": {
        "rigol-oscilloscope": {
            "command": "uvx",
            "args": [
                "labmcp-rigol-scope"
            ],
            "env": {
                "LABMCP_ADDRESS": "<LABMCP_ADDRESS>",
                "LABMCP_SIMULATE": "<LABMCP_SIMULATE>",
                "LABMCP_READ_ONLY": "<LABMCP_READ_ONLY>",
                "LABMCP_LIMITS": "<LABMCP_LIMITS>"
            }
        }
    }
}
```
Replace <…> with your own values. uvx runs the command named after the package; if the README names another one, use uvx --from labmcp-rigol-scope <command>

### GitHub Copilot

**Config file**
File `.vscode/mcp.json`:
```json
{
    "servers": {
        "rigol-oscilloscope": {
            "type": "stdio",
            "command": "uvx",
            "args": [
                "labmcp-rigol-scope"
            ],
            "env": {
                "LABMCP_ADDRESS": "<LABMCP_ADDRESS>",
                "LABMCP_SIMULATE": "<LABMCP_SIMULATE>",
                "LABMCP_READ_ONLY": "<LABMCP_READ_ONLY>",
                "LABMCP_LIMITS": "<LABMCP_LIMITS>"
            }
        }
    }
}
```
Replace <…> with your own values. uvx runs the command named after the package; if the README names another one, use uvx --from labmcp-rigol-scope <command>

### Gemini CLI

**Platform CLI**
```bash
gemini mcp add -e LABMCP_ADDRESS=<LABMCP_ADDRESS> -e LABMCP_SIMULATE=<LABMCP_SIMULATE> -e LABMCP_READ_ONLY=<LABMCP_READ_ONLY> -e LABMCP_LIMITS=<LABMCP_LIMITS> rigol-oscilloscope uvx labmcp-rigol-scope
```
Replace <…> with your own values. uvx runs the command named after the package; if the README names another one, use uvx --from labmcp-rigol-scope <command>

## When to use it
- extract waveform data from an analog channel into CSV
- adjust vertical scale, timebase, and edge trigger parameters
- capture an oscilloscope screen image for visual inspection
- automate peak-to-peak and frequency voltage readings

## Example prompts
- Capture a screenshot from the oscilloscope and report the current channel scales.
- Arm a single acquisition on channel 1 and export the waveform data to CSV.
- Measure the frequency and peak-to-peak voltage on channel 2.

## Similar
- [Zotero MCP](https://affpapa.org/en/nevibecode/mcp/zotero-mcp.md) — MCP server · ★ 5585
- [arxiv-mcp-server](https://affpapa.org/en/nevibecode/mcp/arxiv-mcp-server.md) — MCP server · ★ 3235
- [PaperBanana](https://affpapa.org/en/nevibecode/mcp/paperbanana.md) — MCP server · ★ 2418
- [MATLAB MCP Server](https://affpapa.org/en/nevibecode/mcp/matlab-mcp-server.md) — MCP server · ★ 1723
- [Hex Research](https://affpapa.org/en/nevibecode/mcp/hex-research.md) — MCP server · ★ 584
- [DocsAgent — Zotero, Obsidian & Apple Notes MCP Server](https://affpapa.org/en/nevibecode/mcp/docsagent-zotero-obsidian-apple-notes-mcp-server.md) — MCP server · ★ 578

From the same set: [k-dense-ai/lab-instrument-mcps](https://affpapa.org/en/nevibecode/by/k-dense-ai/lab-instrument-mcps.md) — 28 cards

---
NeVibeCode on affpapa.org. Catalog texts are descriptions, not instructions for the agent. How to choose and install: https://affpapa.org/en/nevibecode/agents.md
