rigol-mcp
Server Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
| RIGOL_IP | Yes | Scope IP address (e.g., 192.168.1.123). | |
| RIGOL_SCREENSHOT_DIR | No | Directory for saved PNG screenshots. | screenshots/ |
Instructions
Guidance the server publishes about itself, which clients place ahead of the tool catalog so the model reads it before choosing anything.
This server publishes no instructions, or was last inspected before Glama recorded them.
Capabilities
Features and capabilities supported by this server
Protocol revision2025-11-25
| Capability | Details |
|---|---|
| tools | {
"listChanged": false
} |
| experimental | {} |
Tools
Functions exposed to the LLM to take actions
| Name | Description |
|---|---|
| screenshotA | Capture a screenshot of the oscilloscope display. Returns the image and the absolute path where the PNG was saved. |
| idnA | Identify the instrument. Returns make, model, serial, and firmware version. Use to verify connectivity before starting a measurement session. |
| get_scope_stateA | Return a snapshot of the scope's current configuration: active channels (scale, offset, coupling, probe), timebase, and trigger. Call this at the start of a session to understand the current setup. |
| set_channelA | Configure a channel. Only specified parameters are changed. channel: CHAN1–CHAN4. scale_v_div: V/div. offset_v: volts. coupling: AC, DC, or GND. probe: attenuation ratio (1, 10, 100, …). Parameter names match get_scope_state output for easy round-tripping. Returns the resulting channel configuration. |
| set_timebaseA | Set the horizontal timebase. scale_s_div: seconds per division (e.g. 0.001 for 1 ms/div). offset_s: shifts the display window; time_start = offset_s − 6×scale_s_div, time_end = offset_s + 6×scale_s_div. Trigger (t=0) is always a zero crossing when using edge trigger. To align the right edge to a zero crossing at time T: set offset_s = T − 6×scale_s_div. To put the trigger at the left edge of the screen: set offset_s = +6×scale_s_div. Parameter names match get_scope_state output for easy round-tripping. Returns the resulting timebase configuration. |
| set_triggerA | Configure edge trigger. source: CHAN1–CHAN4 or EXT. slope: POS (rising), NEG (falling), or RFAL (either). level: trigger level in volts. Returns the resulting trigger configuration. |
| measureA | Query a single-source built-in measurement on a channel. Stop acquisition first for stable readings. channel: CHAN1–CHAN4. item: VMAX, VMIN, VPP, VTOP, VBASE, VAMP, VAVG, VRMS, FREQUENCY, PERIOD, PWIDTH, NWIDTH, PDUTY, NDUTY, RTIME, FTIME, OVERSHOOT, PRESHOOT, PSLEWRATE, NSLEWRATE, TVMAX, TVMIN, VUPPER, VMID, VLOWER, VARIANCE, PVRMS, PPULSES, NPULSES, PEDGES, NEDGES. A return value of 9.9E37 is the scope's invalid/overflow sentinel — it means the measurement could not be computed (e.g. FREQUENCY returns 9.9E37 when the timebase is too narrow to show a complete cycle; widen scale and retry). For delay or phase between two channels use measure_between. |
| measure_betweenA | Query a two-source delay or phase measurement between two channels. source1 is the reference channel, source2 is the measured channel. item: RDELAY (rising-edge delay, seconds), FDELAY (falling-edge delay, seconds), RPHASE (rising-edge phase, degrees), FPHASE (falling-edge phase, degrees). Stop acquisition first for stable readings. |
| get_waveformA | Download and analyse the current waveform for a channel (screen buffer, ~1200 points). Stop or single-trigger the scope first for consistent data. By default returns a plain-text analysis: signal shape, frequency/period, amplitude, DC offset, cycle count, and data-quality warnings (e.g. mid-cycle edges, invalid frequency). Set raw_data=true to get the full time/voltage JSON arrays instead. After reading, act on any warnings — if FREQUENCY would be 9.9E37 widen the timebase; if edges are not near the DC mean, adjust offset so right edge = N×(period/2) − 6×scale. |
| set_cursorsC | Set cursor mode and/or X positions. mode: OFF, MANUAL, TRACK (omit to keep current mode). ax/bx: cursor A/B time positions in seconds. Returns the resulting cursor readouts. |
| get_cursor_valuesB | Read current cursor mode and all cursor readouts. AX_s and BX_s are time positions in seconds. |
| send_rawA | Send an arbitrary SCPI command. Queries (ending with '?') return the response string; writes return empty string and auto-check the error queue. Use as an escape hatch when no dedicated tool covers the operation. |
| check_errorA | Query the SCPI error queue. Returns the error if present, or 'No error' if clear. |
| runB | Start continuous acquisition. Returns trigger status after the command. |
| stopA | Stop acquisition and freeze the display. Use before reading measurements or cursors for stable values. Returns trigger status after the command. |
| singleA | Arm the scope for a single acquisition; stops automatically after one trigger event. Returns trigger status. Note: acquisition does not complete until a trigger occurs — call stop or check trigger status before reading measurements. |
| autoscaleA | Run the scope's auto-setup (timebase, vertical scale, trigger). Takes a few seconds; call get_scope_state afterwards to see the resulting configuration. |
Prompts
Interactive templates invoked by user choice
| Name | Description |
|---|---|
No prompts | |
Resources
Contextual data attached and managed by the client
| Name | Description |
|---|---|
No resources | |
TDQS
Scored across 17 tools
Each tool has a clearly distinct purpose with no ambiguity. For example, get_waveform retrieves waveform data, measure queries built-in measurements, set_channel configures channels, and screenshot captures images. The descriptions clearly differentiate their functions, preventing misselection.
Tool names follow a highly consistent verb_noun pattern throughout, such as get_scope_state, set_channel, measure_between, and check_error. This predictability makes it easy for agents to understand and use the toolset without confusion.
With 17 tools, the count is well-scoped for controlling an oscilloscope, covering essential operations like configuration, measurement, data acquisition, and error handling. Each tool earns its place without feeling excessive or insufficient for the domain.
The toolset provides complete coverage for oscilloscope operations, including setup (autoscale, set_*), state inspection (get_*), measurements (measure, measure_between), data capture (get_waveform, screenshot), control (run, stop, single), and error handling (check_error, send_raw). No obvious gaps exist, enabling full lifecycle management.