rigol-oscilloscope-mcp
Server Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
No arguments | |||
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
} |
| prompts | {
"listChanged": false
} |
| resources | {
"subscribe": false,
"listChanged": false
} |
| experimental | {} |
Tools
Functions exposed to the LLM to take actions
| Name | Description |
|---|---|
| connectA | Connect to the oscilloscope. Pass the address the user gave you (IP address etc.) as address. If you do not know it, ask the user instead of guessing. When omitted, transport is inferred from the address format ("lan" / "usb") and port falls back to the profile default. Any existing connection is replaced. |
| disconnectA | Close the current connection (not an error if not connected). |
| scope_identifyA | Return the connection state and device identity (*IDN?, profile). Not an error when disconnected; returns connected: false instead. |
| get_capabilitiesA | Return the features available on the connected device (channel count, supported features). When the profile confidence is generic, unverified features are restricted. options reports the installed license options, and is null when this model does not support option queries. |
| get_stateA | Get the main settings (channels / timebase / trigger / acquisition) in one call. When you know what you need, narrowing with sections is much faster (a full read is about 39 queries and can take several seconds). Omitting sections returns every section. |
| get_channelB | Return the state of one channel ("CH1" to "CH4"). |
| get_timebaseA | Return the horizontal (timebase) state. |
| get_triggerA | Return the trigger settings and status. |
| get_acquisition_stateA | Return the acquisition state (whether it is running, and the trigger status). |
| measureB | Measure the given channel. Choose measurements from frequency / period / vpp / vmax / vmin / vavg / rms / duty / rise_time / fall_time. Returned values use SI-suffixed keys (frequency_hz, vpp_v, ...); do not trust a value whose quality is not valid. |
| capture_waveformB | Capture waveform data and return it converted to volts (V). When there are many points the data is written to a CSV file and its path is returned in data_file. Screen data may be decimated, so read the effective sample rate as the reciprocal of sample_interval_s. |
| analyze_waveformA | Analyze a waveform on the host and return only the summary. The raw samples are never returned; use capture_waveform when the data itself is needed. analyses is a subset of ["stats", "fft"] (all of them when omitted). stats gives min/max/mean/rms/std/vpp in volts; fft gives the dominant frequency and the strongest peaks. Frequency accuracy is limited by frequency_resolution_hz, so do not read more digits than that. |
| capture_screenshotA | Capture the screen, save it, and also return the image (for visual checks). path is the destination directory or file (defaults to the configured default directory). A relative path is resolved against the invocation directory (the default save location). Saving outside the allowed roots is rejected (add roots with RIGOL_MCP_ALLOWED_DIRS). format is png / jpg / jpeg / bmp / webp. With return_image=false only the metadata is returned, without the image (saves tokens). For numeric readings use measure, not this image. |
| configure_channelA | Configure the vertical axis (a channel). Omitted items are left unchanged. channel is "CH1" to "CH4", coupling is DC / AC / GND, impedance is "1M" / "50". Specify at least one item to change. The device may snap values, so trust applied (the read-back value), not requested. impedance="50" risks damaging the device and needs the confirmation flow: the first call does not execute and returns a confirm_token, so ask the human user whether to proceed and then call again with the same arguments plus that confirm_token. |
| configure_timebaseA | Configure the horizontal axis (timebase). Omitted items are left unchanged. Specify at least one item to change. The device may snap values, so trust applied (the read-back value). |
| configure_triggerA | Configure the edge trigger. Omitted items are left unchanged. source is "CH1" to "CH4", slope is rising / falling / either, and sweep_mode is auto / normal / single. Specify at least one item to change. |
| configure_decodeA | Configure a serial protocol decode bus. Omitted items are left unchanged. The bus count is model-dependent (get_capabilities decode_buses; 4 on MHO98). protocol is uart / i2c / spi / can / lin / parallel (options such as I2S, FlexRay, MIL-STD-1553 and CAN-FD are not supported). data_format is hex / ascii / dec / bin. Source values are "CH1"-"CH4", "D0"-"D15" or "off". settings keys per protocol (all optional):
Set event_table=true (together with enabled=true) before reading the decoded results with get_decode_result. This only changes what the device displays and analyses: acquisition settings are untouched, so configure the channels and trigger separately. |
| get_decode_resultA | Read the decoded event table of a decode bus (bus 1-4). Call configure_decode with enabled=true and event_table=true first; otherwise no table is read and the reason is returned in warnings. Stop the acquisition (stop) before reading, or the table keeps changing between reads and is only a snapshot. The column names depend on the protocol and on the device (for example time_s, tx_rx, data, error for UART/RS232); read columns instead of assuming a fixed layout. time_s is in seconds relative to the trigger, and the other cells are strings formatted as the data_format of configure_decode selects (hex / ascii / dec / bin). max_events returns only the first N events; event_count is always the total number of events on the device before truncation. |
| configure_afgA | Configure the built-in function generator (AFG). Omitted items are left unchanged. This never turns the generator output on or off. The output state is not touched at all, so nothing new reaches the wiring: a configured generator only emits a signal once its output is enabled with the separate, confirmation-gated tool enable_afg (and disable_afg turns it off again). Read the current output state with get_afg_state. channel is the generator channel (1 or 2 on MHO98; see get_capabilities afg_channels). Specify at least one item to change. waveform is sine / square / ramp / noise / dc / arb / exp_rise / exp_fall / ecg / gaussian / lorentz / haversine / sinc. amplitude_vpp is the peak-to-peak amplitude in volts (not the peak and not RMS), offset_v the DC offset in volts, frequency_hz the frequency in hertz, phase_deg the phase in degrees (0-360), duty_percent the duty cycle of the square wave (1-99) and symmetry_percent the symmetry of the ramp (0-100). Duty and symmetry are stored independently of the current waveform, so they can be set at any time. impedance is "highz" or "50" and is the GENERATOR's own output impedance setting, i.e. the load the amplitude is calibrated for. It has nothing to do with the oscilloscope input impedance of configure_channel. The frequency and amplitude limits depend on the installed options and on impedance, and the instrument clamps an out-of-range value silently (no error is reported): always compare applied (the read-back value) against requested. Writing a frequency while the waveform is dc or noise is rejected by the instrument. |
| get_afg_stateA | Return the function generator settings, including whether the output is on. With channel given, the settings of that channel are returned flat (channel, output, waveform, impedance, frequency_hz, amplitude_vpp, offset_v, phase_deg, duty_percent, symmetry_percent). With channel omitted, every generator channel is returned under channels, keyed by the channel number as a string: {"channels": {"1": {...}, "2": {...}}}. output tells whether the generator is currently driving its connector. Reading never changes it. This is read-only: it costs about 9 queries per channel. |
| enable_afgA | DANGEROUS: turn the function generator output on (a real signal starts coming out). This is the only tool that makes the instrument drive a signal into whatever is wired to the generator output, so it needs the confirmation flow: the first call does not execute and returns a confirm_token, and only a second call carrying that confirm_token turns the output on. The token is bound to this channel, is single use, and expires. Before asking for confirmation, read the settings back with get_afg_state and show the human user what is about to be driven (waveform, frequency_hz, amplitude_vpp, offset_v) - those values take effect the instant the output turns on. Then ask the human user what is connected to the generator output and whether it is safe to drive it. Never confirm on your own, and never drive a live or powered circuit. Returns the settings of the channel in state, with output true. Turn the output off again with disable_afg. |
| disable_afgA | Turn the function generator output off immediately (no signal comes out any more). No confirmation is needed by design: stopping the output is always the safe direction, so it must never be blocked by the confirmation flow. Use it as soon as the measurement is done, and whenever the user asks for the signal to stop. The waveform settings are kept, so enable_afg drives the same signal again. Returns the settings of the channel in state, with output false. |
| runA | Start waveform acquisition (continuous run). |
| stopA | Stop waveform acquisition (freezes the waveform on screen). |
| singleA | Perform a single-shot acquisition (triggers once, then stops). |
| autosetA | Run Auto Setup (autoscale). This changes the current settings substantially (vertical scale, timebase and trigger are auto-adjusted and the previous settings are lost), so it needs the confirmation flow: the first call does not execute and returns a confirm_token, so ask the human user whether to proceed and then call again with that confirm_token. After execution the changed main settings are returned in state. |
Prompts
Interactive templates invoked by user choice
| Name | Description |
|---|---|
No prompts | |
Resources
Contextual data attached and managed by the client
| Name | Description |
|---|---|
No resources | |
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/zinntikumugai/rigol-oscilloscope-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server