rigol-mcp
Control a Rigol DS1000Z series oscilloscope over LAN through natural language commands via MCP (e.g., Claude).
Identification & State
Identify instrument (make, model, serial, firmware)
Get a full snapshot of current channel, timebase, and trigger configurations
Acquisition Control
Start continuous acquisition, freeze display, arm single trigger, or autoscale
Configuration
Set channel vertical scale (V/div), offset, coupling (AC/DC/GND), probe ratio, and on/off state
Adjust horizontal timebase (time/div) and trigger offset
Configure edge trigger source, slope (rising/falling/either), and level
Measurements
Query 30+ single-channel measurements (VPP, VRMS, VMAX, FREQUENCY, PERIOD, RTIME, FTIME, OVERSHOOT, etc.)
Measure delay (seconds) or phase (degrees) between two channels
Waveform Analysis
Download ~1200-point screen buffer waveform data with automatic signal characterization or raw time/voltage arrays
Cursors
Set cursor mode (MANUAL/TRACK/OFF) and X positions; read cursor values and deltas
Utility
Capture oscilloscope display as a PNG screenshot
Send arbitrary SCPI commands directly (
send_raw) for unsupported operationsCheck the SCPI error queue
Connects via LAN (TCP port 5555) — no NI-VISA required
Limitations
LAN only (no USB)
Waveform download limited to screen buffer (~1200 points), not full memory depth
No dedicated tools for math channels, digital channels (MSO), or protocol decode (use
send_rawas a workaround)
Click on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@rigol-mcpMeasure the frequency and Vpp on channel 1, then take a screenshot."
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
rigol-mcp
MCP server for controlling Rigol DS1000Z and DHO series oscilloscopes over LAN or USB. Exposes the scope as a set of tools that Claude (or any MCP client) can call to take measurements, configure the instrument, and capture screenshots — entirely through natural language.

Example: unknown signal characterisation in Claude
Unknown signal (square wave into LCR trap), wrong channel enabled, invalid timebase/voltage/trigger. Claude identifies the signal type, corrects the setup, and characterises the waveform.

Supported Hardware
Rigol DS1000Z / MSO1000Z series (8-bit):
Model | Channels | Notes |
DS1054Z | 4 analog | Most common, 50 MHz |
DS1074Z | 4 analog | 70 MHz |
DS1074Z-S | 4 analog + signal gen | |
DS1104Z | 4 analog | 100 MHz |
DS1104Z-S | 4 analog + signal gen | |
MSO1054Z | 4 analog + 16 digital | MSO variant |
MSO1074Z | 4 analog + 16 digital | |
MSO1104Z | 4 analog + 16 digital |
Rigol DHO series (12-bit):
Model | Channels | Notes |
DHO924S | 4 analog + signal gen | 250 MHz |
Other DHO models (DHO900/1000/4000 families) likely work with the same SCPI dialect but are not verified.
The scope connects either over your local network via Ethernet (rear panel RJ45) or over USB (rear panel USB-B device port). LAN is the default; USB is used when RIGOL_USB is set (see Configuration). USB transport has been validated on DS1000Z; DHO support has so far been validated over LAN only.
Related MCP server: SkippyMCP
Requirements
Python 3.11+
A Rigol DS1000Z (LAN or USB) or DHO series scope (LAN) connected to your computer
For LAN: SCPI over TCP/IP enabled on the scope (on by default)
For USB: a VISA driver on the scope's USB interface — either the native USBTMC driver (e.g. from Rigol UltraSigma / any NI-VISA runtime) or WinUSB via Zadig (see USB connection)
Installation
git clone https://github.com/erebusnz/rigol-mcp
cd rigol-mcp
uv syncScope Network Setup
On the scope, go to Utility → IO Setting → LAN and note the IP address (or assign a static one). The scope listens on port 5555 for raw SCPI commands — no additional configuration is needed.
Replace 192.168.1.123 with the IP address of your scope in all instructions below.
Verify in browser: http://192.168.1.123/DS1000Z_WelcomePage.html
Verify connectivity before using as MCP:
python -c "import pyvisa; rm = pyvisa.ResourceManager('@py'); s = rm.open_resource('TCPIP0::192.168.1.123::5555::SOCKET'); s.write_termination='\n'; s.read_termination='\n'; print(s.query('*IDN?'))"You should see something like:
RIGOL TECHNOLOGIES,DS1054Z,DS1ZA123456789,00.04.04.SP4Configuration
Set the scope IP for MCP via environment variable:
export RIGOL_IP=192.168.1.123Or create a .env file (copy from .env.example):
RIGOL_IP=192.168.1.123Optional:
Variable | Default | Description |
| (required for LAN) | Scope IP address |
| (unset) | Set to |
| (unset) | When several Rigol scopes are on USB, pin a specific one by serial number. |
| (unset) | Set to |
|
| Directory for saved PNG screenshots |
USB connection
Set RIGOL_USB=1 to connect over USB instead of LAN. The server looks for a Rigol scope
on USB (vendor ID 0x1AB1) and connects to it. If more than one scope is connected, set
RIGOL_USB_SERIAL to choose which one by serial number.
RIGOL_USB=1
# RIGOL_USB_SERIAL=DS1ZA000000000 # only needed if more than one scope is on USBWindows USB instructions
The scope's USB interface needs a VISA-compatible driver. The server auto-detects whichever you have installed — pick one:
Option A — install the WinUSB driver with Zadig. The server talks to the scope through
the bundled pure-Python pyvisa-py (@py) backend (pyusb + libusb); no extra Rigol
software needed. Do this once per scope:
Connect the scope over USB and power it on.
Download and run Zadig.
Choose Options → List All Devices.
Select "DS1000Z Series" in the device dropdown.
Set the target driver to WinUSB and click Install Driver (or Replace Driver).
Wait for "The driver was installed successfully", then set
RIGOL_USB=1.
Option B — install Rigol UltraSigma, which bundles the driver.
UltraSigma installs the standard "USB Test and Measurement
Device" (USBTMC) driver. Once it's installed, the server reaches the scope through the
NI-VISA (@ivi) backend — nothing else to configure.
Note: the two drivers are mutually exclusive on a given USB interface. Installing WinUSB (Option A) means UltraSigma can no longer see the scope over USB until you revert the driver in Device Manager, and vice versa. LAN access is unaffected either way.
Linux / macOS USB
Works without needing drivers using the pyvisa-py (@py) backend.
macOS: typically works as-is once
RIGOL_USB=1is set; no driver to install.Linux: give your user permission to claim the device with a udev rule, then replug it:
# /etc/udev/rules.d/60-rigol.rules SUBSYSTEM=="usb", ATTRS{idVendor}=="1ab1", MODE="0660", GROUP="plugdev"sudo udevadm control --reload-rules && sudo udevadm trigger(Make sure your user is in the
plugdevgroup:sudo usermod -aG plugdev $USER, then log out and back in.)If the kernel's
usbtmcmodule has already claimed the scope, unbind or blacklist it solibusbcan take the interface — pyvisa-py does not detach it automatically.
USB is currently hardware-tested on Windows only; Linux/macOS use the standard
libusbsetup above.
Claude Desktop / Claude Code Setup
Add to your .mcp.json (or Claude Desktop MCP config):
{
"mcpServers": {
"rigol": {
"command": "uv",
"args": ["run", "rigol-mcp"],
"cwd": "/path/to/rigol-mcp",
"env": {
"RIGOL_IP": "192.168.1.123"
}
}
}
}For USB, replace the RIGOL_IP entry in env with "RIGOL_USB": "1" (see USB connection).
Tools
Identification & State
Tool | Description |
| Identify the instrument — make, model, serial, firmware |
| Snapshot of all channel configs, timebase, and trigger settings |
Acquisition Control
Tool | Description |
| Start continuous acquisition |
| Stop and freeze display |
| Arm for one trigger event, then stop |
| Auto-configure timebase, vertical scale, and trigger |
Configuration
Tool | Description |
| Set scale (V/div), offset, coupling (AC/DC/GND), probe ratio, on/off |
| Set time/div and trigger offset |
| Configure edge trigger: source, slope (POS/NEG/RFAL), level |
Measurement
Tool | Description |
| Query any single-channel measurement: VMAX, VMIN, VPP, VTOP, VBASE, VAMP, VAVG, VRMS, PVRMS, VUPPER, VMID, VLOWER, VARIANCE, FREQUENCY, PERIOD, PWIDTH, NWIDTH, PDUTY, NDUTY, RTIME, FTIME, OVERSHOOT, PRESHOOT, PSLEWRATE, NSLEWRATE, TVMAX, TVMIN, MAREA, MPAREA, PPULSES, NPULSES, PEDGES, NEDGES |
| Query delay or phase between two channels. DS1000Z: RDELAY, FDELAY, RPHASE, FPHASE. DHO: RRDELAY/RFDELAY/FRDELAY/FFDELAY, RRPHASE/RFPHASE/FRPHASE/FFPHASE (DS1000Z names auto-map to the homogeneous-edge DHO equivalents) |
| Download and analyse waveform data (NORM screen buffer: up to 1200 pts on DS1000Z, 1000 on DHO); returns text analysis by default, raw time/voltage arrays with |
Cursors
Tool | Description |
| Set cursor mode (MANUAL/TRACK/OFF) and time positions in seconds |
| Read cursor positions (in seconds) and all delta/amplitude readouts |
Utility
Tool | Description |
| Capture display as PNG — returns image inline and saves to disk |
| Send any SCPI command directly (escape hatch). Disabled by default — set |
| Query the SCPI error queue |
Example Prompts
Basic measurement session:
"Connect to the scope, check what's configured, then measure the frequency and Vpp on channel 1."
Signal characterisation:
"Stop the scope, download the waveform from channel 2, and tell me the rise time, overshoot percentage, and estimated fundamental frequency."
Setup from scratch:
"Set channel 1 to 2V/div DC coupling with a 10x probe, set the timebase to 1ms/div, trigger on channel 1 rising edge at 1V, then run and take a screenshot."
Cursor measurement:
"Put manual cursors on the first rising edge of the signal on channel 1 — cursor A at the 10% level and cursor B at the 90% level — and read the rise time from the delta."
Transient / ringing characterisation:
"There's a damped oscillation on channel 1 after a step edge. Stop the scope, measure Vpp, Vmax, Vmin, and Vrms, then estimate the ring frequency and how many cycles it takes to decay."
Iterative debugging:
"I'm verifying the gain of an amplifier. Channel 1 is the input, channel 2 is the output. The expected gain is 20 dB. Figure out whether it's within spec."
Unknown signal characterisation:
"There's an unfamiliar signal on channel 1. I don't know its frequency, amplitude, or shape. Keep adjusting the timebase and vertical scale until you have a stable, well-framed view of at least two full cycles, then give me a complete characterisation of what you see."
Architecture
Claude / MCP client
│ MCP protocol (stdio)
rigol_mcp.server ← tool definitions, request routing
│ Python function calls
rigol_mcp.scope ← VISA connection, SCPI command helpers
│ SCPI over TCP/IP (port 5555) or USBTMC
Rigol DS1000Z ← 192.168.1.123 / USBThe VISA connection is cached across tool calls (one connection per server session) and reconnects automatically on communication errors.
SCPI Transport
By default the server connects using raw socket VISA (TCPIP0::<ip>::5555::SOCKET), not VXI-11. This avoids the NI-VISA dependency and works with the pure-Python pyvisa-py backend. It also eliminates the VXI-11 handshake overhead, making individual commands faster.
When RIGOL_USB is set, the server instead connects over USBTMC (USB0::0x1AB1::<model>::<serial>::INSTR), discovering the scope automatically. It auto-selects whichever VISA backend can see the scope:
@py(pyvisa-py+pyusb+ bundledlibusb) — for a USB interface bound to WinUSB (no NI-VISA needed).@ivi(NI-VISA / IVI VISA) — for the native USBTMC driver (e.g. installed with Rigol UltraSigma).
The two backends frame USBTMC reads differently, so block reads (waveform/screenshot) are read by exact byte count on @py and via native message reads (read_raw) on @ivi. Transport and backend selection live in rigol_mcp.scope.get_scope / _open_usb_scope.
Testing
Unit tests are fully offline — the VISA layer is faked, so no instrument is required.
uv run --extra test pytest # or: uv sync --extra test && uv run pytestLimitations
USB driver setup is platform-specific: Windows needs WinUSB (via Zadig) or NI-VISA/UltraSigma; Linux needs
libusbaccess (a udev rule) or NI-VISA; macOS typically works throughlibusbwith no setup. The server auto-detects the backend — see USB connection. LAN needs no driver setup on any platform.No support for math channels, digital channels (MSO), or protocol decode in the current tools yet — use
send_rawfor thoseWaveform download uses NORMAL mode (screen buffer — up to 1200 points on DS1000Z, 1000 on DHO); full memory depth (RAW mode, up to 56M on DS1000Z / 50M on DHO) is not yet implemented
License
MIT — see LICENSE.
Available Tools
17 toolsautoscaleA
Run the scope's auto-setup (timebase, vertical scale, trigger). Takes a few seconds; call get_scope_state afterwards to see the resulting configuration.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden and adds valuable behavioral context: it discloses that the operation 'takes a few seconds' (indicating latency) and that the resulting configuration is not immediately visible (requiring a follow-up call to 'get_scope_state'). This goes beyond the basic action, though it could mention more about potential side effects or errors.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded with the core action, followed by important behavioral notes, all in two efficient sentences with zero waste. Every sentence earns its place by providing critical information without redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity (an auto-setup operation with no parameters) and lack of annotations or output schema, the description is reasonably complete: it explains what the tool does, its duration, and the need to check results. However, it could be more comprehensive by mentioning potential failure modes or what 'auto-setup' entails in more detail, preventing a perfect score.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has 0 parameters with 100% coverage, so no parameter documentation is needed. The description appropriately does not discuss parameters, focusing instead on behavior and usage. A baseline of 4 is applied since it handles the zero-parameter case well without unnecessary details.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('run the scope's auto-setup') and specifies what it configures ('timebase, vertical scale, trigger'), making the purpose understandable. However, it does not explicitly differentiate this from sibling tools like 'set_timebase' or 'set_trigger', which handle manual configuration of those same components, so it falls short of a perfect score.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides clear context by stating 'Takes a few seconds' and instructing to 'call get_scope_state afterwards to see the resulting configuration,' which guides when to use it (after running, to check results). It does not explicitly mention when not to use it or alternatives (e.g., manual setup tools), so it's not a full 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
check_errorA
Query the SCPI error queue. Returns the error if present, or 'No error' if clear.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It describes the return behavior (error or 'No error'), which is useful, but does not cover other aspects like permissions needed, rate limits, or whether it clears the error queue. It adds some value but lacks comprehensive behavioral context for a tool that queries system state.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences with zero waste: the first states the purpose, and the second specifies the return behavior. It is front-loaded with the core action and efficiently conveys necessary information without unnecessary details.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's simplicity (0 parameters, no output schema, no annotations), the description is complete enough to understand its basic function. However, for a tool that queries error states, it could benefit from more context on error formats, when errors occur, or how it interacts with other tools, leaving some gaps in full understanding.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has 0 parameters with 100% coverage, so the schema fully documents the lack of inputs. The description adds no parameter information, which is appropriate here, but does not compensate for any gaps since there are none. A baseline of 4 is given as it adequately handles the zero-parameter case without redundancy.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the specific action ('Query the SCPI error queue') and the resource ('SCPI error queue'), distinguishing it from all sibling tools which involve measurement, configuration, or control operations. It precisely defines what the tool does without restating the name.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage context by stating it 'Returns the error if present, or 'No error' if clear,' suggesting it should be used to check error status after operations. However, it does not explicitly state when to use this tool versus alternatives or provide exclusions, leaving some ambiguity about its specific application scenarios.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_cursor_valuesB
Read current cursor mode and all cursor readouts. AX_s and BX_s are time positions in seconds.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It states this is a read operation, implying it is non-destructive, but does not cover other traits like error handling, rate limits, or authentication needs. The mention of 'AX_s and BX_s are time positions in seconds' adds some context about output format, but overall, behavioral information is minimal.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise and front-loaded, with two sentences that directly state the tool's purpose and provide additional context. There is no wasted text, and each sentence adds value, making it efficient and well-structured.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool has 0 parameters and no output schema, the description is moderately complete. It explains what the tool does and provides some output details, but lacks information on behavioral aspects like error handling or usage context. For a read-only tool with no annotations, it could be more comprehensive to fully guide the agent.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has 0 parameters, with 100% schema description coverage (since there are no parameters to describe). The description does not need to compensate for any parameter gaps, and it adds value by explaining output semantics ('AX_s and BX_s are time positions in seconds'), which is beyond the empty input schema. This meets the baseline for 0 parameters.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose: 'Read current cursor mode and all cursor readouts.' This specifies the verb ('Read') and the resource ('cursor mode and all cursor readouts'), making it understandable. However, it does not explicitly differentiate from sibling tools like 'set_cursors' or 'measure_between', which might involve cursor operations, so it lacks sibling differentiation.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus alternatives. It does not mention any context, prerequisites, or exclusions, such as when to prefer 'get_cursor_values' over 'measure' or 'get_scope_state' for cursor-related data. This leaves the agent without usage direction.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
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.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries full burden and does well by specifying it returns a 'snapshot' (implying read-only, non-destructive behavior) and clarifies it captures 'current configuration.' It doesn't mention rate limits or authentication needs, but for a read-only tool with zero parameters, this is reasonably transparent.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded with the core purpose in the first sentence, followed by a usage guideline. Both sentences earn their place by providing essential information without redundancy or fluff, making it highly efficient.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity (read-only, 0 parameters) and lack of annotations/output schema, the description is mostly complete. It explains what the tool does and when to use it, though it could benefit from mentioning the return format or data structure for the snapshot.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has 0 parameters with 100% schema description coverage, so the baseline is 4. The description adds no parameter information, which is appropriate since none are needed, maintaining the baseline score.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the specific action ('Return a snapshot') and resource ('scope's current configuration'), listing key components like active channels, timebase, and trigger. It distinguishes from siblings by focusing on configuration retrieval rather than measurement, waveform capture, or control functions.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicit guidance is provided on when to use this tool: 'Call this at the start of a session to understand the current setup.' This clearly indicates the intended context and timing for usage, distinguishing it from tools meant for ongoing operations or error checking.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| channel | Yes | ||
| raw_data | No | Return raw time/voltage JSON arrays instead of text analysis (default false) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It effectively describes key behaviors: it requires stopping/single-triggering the scope first, returns either text analysis or raw JSON arrays based on a parameter, includes data-quality warnings, and provides actionable advice for handling specific warning cases like adjusting timebase or offset.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is appropriately sized and front-loaded, starting with the core purpose and immediate prerequisites. Each sentence adds value, such as explaining output options and post-analysis actions, with no redundant information, though it could be slightly more streamlined by integrating warning handling more succinctly.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity (waveform analysis with warnings and raw data options), no annotations, and no output schema, the description is largely complete. It covers purpose, usage, parameters, and behavioral aspects, but lacks details on exact output formats or error cases, leaving some gaps for an agent to infer.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 50% (only raw_data has a description). The description adds significant value by explaining the channel parameter's purpose ('for a channel') and the raw_data parameter's effect ('returns a plain-text analysis... Set raw_data=true to get the full time/voltage JSON arrays'), compensating for the schema's lack of channel description and enriching raw_data context.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose with specific verbs ('download and analyse') and resource ('current waveform for a channel'), distinguishing it from siblings like 'get_scope_state' or 'measure' by focusing on waveform data extraction and analysis rather than general scope information or measurements.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides explicit usage guidance: it instructs to 'stop or single-trigger the scope first for consistent data,' specifies when to use raw_data=true for raw arrays versus default text analysis, and advises on post-processing actions based on warnings, offering clear alternatives and prerequisites.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
idnA
Identify the instrument. Returns make, model, serial, and firmware version. Use to verify connectivity before starting a measurement session.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden. It discloses the return values (make, model, serial, firmware version) and the purpose (verification), but lacks details about error conditions, timing, or whether this is a read-only operation. The description doesn't contradict any annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is perfectly concise with two sentences: one stating the purpose and return values, another providing usage guidance. Every word earns its place with zero waste.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a zero-parameter tool with no annotations or output schema, the description provides good context about what the tool does and when to use it. However, it could be more complete by mentioning whether this is a read operation or if it has any side effects.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has 0 parameters with 100% schema coverage, so the baseline is 4. The description appropriately doesn't discuss parameters since none exist, focusing instead on the tool's purpose and usage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose: 'Identify the instrument' with specific outputs (make, model, serial, firmware version). It distinguishes from siblings by focusing on identification rather than measurement or configuration, though it doesn't explicitly name alternatives.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides clear context for when to use this tool: 'Use to verify connectivity before starting a measurement session.' This gives practical guidance, though it doesn't specify when NOT to use it or name specific alternative tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| channel | Yes | ||
| item | Yes | Measurement item (e.g. FREQUENCY, VPP, VRMS) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It effectively describes critical behaviors: the requirement to stop acquisition for stable readings, the meaning of the invalid/overflow sentinel value (9.9E37), and troubleshooting advice for specific cases like FREQUENCY errors. It does not cover all possible edge cases or error conditions, but provides substantial operational guidance.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is appropriately sized and front-loaded, starting with the core purpose and immediate prerequisites. The list of items is necessary for clarity, and the explanation of the sentinel value and alternative tool usage adds value without redundancy. It could be slightly more structured but remains efficient and informative.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity (measurement operations with potential errors) and lack of annotations or output schema, the description is largely complete. It covers purpose, usage, parameters, and key behavioral aspects like the sentinel value and acquisition requirement. It does not detail the return format or all error scenarios, but provides sufficient context for effective use.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 50% (only 'item' has a description), but the description compensates well. It explains the 'channel' parameter range (CHAN1–CHAN4) and provides a comprehensive list of valid 'item' values with examples, adding significant meaning beyond the schema's enum and basic description. The description effectively clarifies parameter usage and constraints.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the specific action ('Query a single-source built-in measurement') and resource ('on a channel'), distinguishing it from sibling tools like 'measure_between' for two-channel measurements. It provides a comprehensive list of measurable items, making the purpose explicit and distinct.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly states when to use this tool ('Query a single-source built-in measurement') and when not to ('For delay or phase between two channels use measure_between'). It also provides prerequisites ('Stop acquisition first for stable readings') and troubleshooting guidance for invalid results, offering clear alternatives and context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| source1 | Yes | Reference channel | |
| source2 | Yes | Measured channel | |
| item | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It adds important context about the need to 'stop acquisition first for stable readings,' which reveals a critical operational constraint. However, it doesn't describe what the tool returns (numeric values? units?), error conditions, or performance characteristics like response time or rate limits. The description provides some behavioral insight but leaves significant gaps.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is perfectly concise and well-structured. Three sentences each serve distinct purposes: (1) states the core function, (2) explains parameter roles and item meanings, (3) provides critical usage prerequisite. No wasted words, front-loaded with the main purpose, and efficiently delivers necessary information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given 3 parameters with partial schema coverage (67%), no annotations, and no output schema, the description does a decent job but has notable gaps. It explains parameter semantics well and provides a usage prerequisite, but doesn't describe return values (critical for a measurement tool), error handling, or system state requirements beyond the acquisition stop. For a measurement query tool with no structured output documentation, this leaves the agent guessing about what to expect.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 67% (2 of 3 parameters have descriptions). The description adds meaningful semantics beyond the schema: it explains that 'source1 is the reference channel' and 'source2 is the measured channel,' clarifying the directional relationship. It also defines the 'item' enum values (RDELAY=rising-edge delay in seconds, etc.), which the schema lacks. This compensates well for the schema's gaps, though it doesn't cover all possible parameter nuances.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose: 'Query a two-source delay or phase measurement between two channels.' It specifies the verb ('query'), resource ('measurement'), and distinguishes it from siblings like 'measure' (general) or 'get_cursor_values' (cursor-based). The description provides specific measurement types (RDELAY, FDELAY, RPHASE, FPHASE), making it highly differentiated.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description includes explicit usage guidance: 'Stop acquisition first for stable readings.' This provides a clear prerequisite context. However, it doesn't specify when to use this tool versus alternatives like 'measure' or 'get_cursor_values' for similar measurements, nor does it mention exclusion cases. The guidance is helpful but incomplete regarding sibling differentiation.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
runB
Start continuous acquisition. Returns trigger status after the command.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden. It mentions that it 'Returns trigger status after the command,' which adds some behavioral context about the output. However, it lacks details on side effects, error handling, or operational constraints like rate limits or dependencies.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, efficient sentence that front-loads the main action ('Start continuous acquisition') and adds necessary output information. There is no wasted text, making it highly concise and well-structured.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool has 0 parameters and no output schema, the description covers the basic action and output. However, as a tool likely involved in system control (with siblings like 'stop' and 'single'), it lacks details on behavior, error cases, or integration context, making it minimally adequate but incomplete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has 0 parameters with 100% coverage, so no parameter documentation is needed. The description appropriately doesn't discuss parameters, focusing instead on the tool's action and output, which aligns with the schema's simplicity.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('Start continuous acquisition') and resource ('acquisition'), making the purpose understandable. However, it doesn't differentiate from sibling tools like 'single' or 'measure' that might also involve acquisition, leaving room for ambiguity.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is provided on when to use this tool versus alternatives such as 'single' or 'measure'. The description implies it's for starting continuous acquisition but doesn't specify prerequisites, stopping conditions, or when other tools might be more appropriate.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
screenshotA
Capture a screenshot of the oscilloscope display. Returns the image and the absolute path where the PNG was saved.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It effectively describes the action (capture), output (image and absolute path), and format (PNG), covering key behavioral aspects. However, it lacks details on potential side effects, permissions, or error conditions, which would enhance transparency further.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is highly concise and front-loaded, consisting of two sentences that directly state the action and the return values. Every sentence earns its place by providing essential information without any waste, making it efficient and easy to understand.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's simplicity (0 parameters, no annotations, no output schema), the description is nearly complete. It covers the purpose, action, and output format adequately. However, it could be more complete by including details like error handling or file naming conventions, which would help in edge cases.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has 0 parameters with 100% coverage, so no parameter documentation is needed. The description appropriately avoids redundant parameter details, focusing instead on the tool's function and output. This aligns with the baseline expectation for tools without parameters, adding value by clarifying the output.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the specific action ('Capture a screenshot') and the target resource ('oscilloscope display'), distinguishing it from sibling tools like get_waveform or get_scope_state that retrieve data rather than capture visual output. It precisely defines the tool's function without being vague or tautological.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage when a visual capture of the oscilloscope display is needed, but it does not explicitly state when to use this tool versus alternatives (e.g., get_waveform for numerical data). No guidance is provided on prerequisites, timing, or exclusions, leaving usage context inferred rather than clearly defined.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| command | Yes | SCPI command, e.g. ':CHAN1:SCAL?' or ':CHAN1:DISP ON' |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It effectively describes key behaviors: queries return response strings, writes return empty strings, and writes auto-check the error queue. It doesn't mention error handling for malformed commands or rate limits, but covers the core operational behavior well.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is perfectly concise with two sentences that each earn their place. The first sentence explains the core functionality and behavior, while the second provides crucial usage guidance. There is zero wasted text or redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity (low-level SCPI interface), single parameter, 100% schema coverage, and no output schema, the description is quite complete. It explains what the tool does, when to use it, and the different behaviors for queries vs. writes. The main gap is lack of output format details for queries, but this is reasonable for an 'escape hatch' tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents the single parameter. The description adds marginal value by providing example commands (':CHAN1:SCAL?' and ':CHAN1:DISP ON') that illustrate the parameter's purpose, but doesn't add significant semantic information beyond what the schema provides.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose with specific verbs ('send an arbitrary SCPI command') and distinguishes it from siblings by positioning it as an 'escape hatch when no dedicated tool covers the operation.' It explicitly identifies the resource (SCPI commands) and differentiates from other tools like set_channel or measure.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides explicit guidance on when to use this tool ('when no dedicated tool covers the operation') and when not to use it (implied: use dedicated tools when available). It also distinguishes between query and write operations, offering clear context for usage decisions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| channel | Yes | ||
| display | No | Turn channel on/off | |
| scale_v_div | No | Vertical scale in V/div | |
| offset_v | No | Vertical offset in volts | |
| coupling | No | ||
| probe | No | Probe attenuation ratio (e.g. 1, 10, 100) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It adds useful context: 'Only specified parameters are changed' (partial updates), 'Parameter names match get_scope_state output for easy round-tripping' (compatibility), and 'Returns the resulting channel configuration' (output behavior). However, it doesn't cover permissions, error conditions, or side effects, leaving gaps for a mutation tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is efficiently structured: first sentence states the core action, followed by key behavioral notes and parameter details, ending with return information. Every sentence adds value—no fluff or repetition. It's appropriately sized for a tool with 6 parameters and no annotations.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity (mutation with 6 parameters), no annotations, and no output schema, the description does a solid job. It covers purpose, partial update behavior, parameter semantics, and return value. However, it lacks error handling, prerequisites (e.g., device state), and doesn't fully explain all parameters (e.g., 'display' is only in schema). It's mostly complete but has minor gaps.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 67% (4 out of 6 parameters have descriptions). The description adds value beyond the schema by explaining that 'channel: CHAN1–CHAN4' (clarifying range), 'scale_v_div: V/div' (units), 'offset_v: volts' (units), 'coupling: AC, DC, or GND' (options), and 'probe: attenuation ratio (1, 10, 100, …)' (examples). It compensates well for the schema's gaps, though not perfectly.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose: 'Configure a channel' with specific parameters like scale, offset, coupling, and probe. It distinguishes itself from siblings like 'set_timebase' or 'set_trigger' by focusing on channel configuration rather than timebase or trigger settings. However, it doesn't explicitly differentiate from all siblings (e.g., 'set_cursors'), so it's not a perfect 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides some implied usage context: 'Only specified parameters are changed' and mentions round-tripping with 'get_scope_state'. However, it doesn't explicitly state when to use this tool versus alternatives like 'autoscale' or 'measure', nor does it provide exclusions or prerequisites. The guidance is helpful but not comprehensive.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| mode | No | ||
| ax | No | Cursor A X position in seconds | |
| bx | No | Cursor B X position in seconds |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden of behavioral disclosure. It states the tool sets cursor modes and positions and returns readouts, but lacks details on permissions, side effects, error handling, or rate limits. For a mutation tool with zero annotation coverage, this is insufficient to inform safe and effective use.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise and front-loaded, stating the core purpose in the first clause. It efficiently explains parameter behavior and the return value in two sentences. There's no unnecessary verbiage, though it could be slightly more structured for clarity.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity (mutation with 3 parameters) and lack of annotations and output schema, the description is incomplete. It doesn't cover error cases, response format details beyond 'readouts', or integration with sibling tools. For a tool that modifies state, more context is needed to ensure reliable use.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 67%, with 'ax' and 'bx' documented in the schema but 'mode' lacking a description. The description adds value by explaining that 'mode' can be omitted to keep current and lists the enum values, partially compensating for the coverage gap. However, it doesn't fully clarify the semantics of 'ax' and 'bx' beyond what the schema provides, resulting in a baseline score.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose: 'Set cursor mode and/or X positions.' It specifies the verb ('Set') and resource ('cursor mode and/or X positions'), making it easy to understand what the tool does. However, it doesn't explicitly differentiate from sibling tools like 'get_cursor_values' or 'measure_between', which might involve cursor operations, so it misses full sibling distinction.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides minimal guidance: it mentions that parameters can be omitted to keep current values, but offers no explicit advice on when to use this tool versus alternatives. There's no mention of prerequisites, context, or comparison with sibling tools like 'get_cursor_values' for reading cursor data, leaving usage unclear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| scale_s_div | No | Time per division in seconds | |
| offset_s | No | Trigger offset in seconds |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden. It effectively discloses that this is a configuration/mutation tool (implied by 'Set'), explains the mathematical relationship between parameters and display window, and describes the return value. It doesn't mention permission requirements, rate limits, or error conditions, but provides substantial behavioral context.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is efficiently structured with zero wasted sentences. It front-loads the core purpose, then provides essential formulas and practical examples, and concludes with integration notes and return information. Every sentence serves a clear purpose in helping an agent understand and use the tool correctly.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 2-parameter configuration tool with no annotations or output schema, the description provides excellent coverage of purpose, parameter semantics, and behavioral context. It explains the mathematical model and practical usage patterns thoroughly. The only minor gap is the lack of explicit error handling or validation constraints information.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Despite 100% schema description coverage, the description adds significant value beyond the schema. It explains the practical meaning of parameters with formulas (time_start = offset_s − 6×scale_s_div), provides usage examples for alignment scenarios, and clarifies the relationship to trigger positioning. This transforms abstract parameter definitions into actionable guidance.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the specific action ('Set the horizontal timebase') and resource ('timebase'), distinguishing it from sibling tools like set_channel or set_trigger. It provides a precise technical definition of what the tool does, going beyond a simple verb-noun pairing.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides clear context for when to use this tool (to configure timebase parameters) and mentions alignment with get_scope_state output for round-tripping. However, it doesn't explicitly state when NOT to use it or name specific alternatives among siblings like autoscale.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| source | No | Trigger source, e.g. CHAN1 | |
| slope | No | ||
| level | No | Trigger level in volts |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It mentions the return value ('Returns the resulting trigger configuration'), which is helpful, but does not disclose critical behavioral traits such as whether this is a destructive operation, if it requires specific permissions, or potential side effects like resetting other settings. For a configuration tool with zero annotation coverage, this is insufficient.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded with the core purpose, followed by parameter explanations and return value, all in two efficient sentences. Every sentence adds value without redundancy, making it highly concise and well-structured.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the complexity (a configuration tool with 3 parameters), no annotations, and no output schema, the description is moderately complete. It covers parameter semantics and the return value, but lacks behavioral context and usage guidelines. For a tool that likely interacts with hardware (oscilloscope), more detail on effects and constraints would be beneficial.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The description adds significant meaning beyond the input schema. It explains the semantics of 'source' (CHAN1–CHAN4 or EXT), 'slope' (POS, NEG, RFAL with definitions), and 'level' (in volts), which complements the schema's 67% coverage (only 'source' and 'level' have descriptions). This compensates well for the schema's gaps, especially for 'slope' which lacks a description but is clarified in the tool description.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('Configure edge trigger') and specifies the resource ('edge trigger'), distinguishing it from sibling tools like set_channel or set_timebase. It provides specific details about what is being configured, making the purpose unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description lacks guidance on when to use this tool versus alternatives. It does not mention prerequisites, such as whether the scope must be in a certain state, or compare it to other trigger-related tools (none listed in siblings). This leaves the agent without context for appropriate tool selection.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
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.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden and does well by disclosing key behavioral traits: it's a mutation tool (arms the scope), it stops automatically after one trigger, returns trigger status, and notes that acquisition completion depends on a trigger occurring. It doesn't cover permissions or rate limits, but provides substantial operational context.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is efficiently structured in two sentences: the first states the core action and behavior, the second adds crucial notes about completion and follow-up actions. Every sentence earns its place with no wasted words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a mutation tool with no annotations and no output schema, the description provides good context about what the tool does, its automatic stopping behavior, and important notes about trigger dependency. It could be more complete by explicitly describing the return format of 'trigger status' or error conditions, but it's substantially helpful.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has 0 parameters with 100% schema description coverage, so the baseline is 4. The description doesn't need to add parameter information, and it appropriately focuses on behavior instead.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose with specific verbs ('arm', 'stops', 'returns') and resources ('scope', 'acquisition', 'trigger status'). It distinguishes from siblings like 'run' (continuous) and 'stop' (manual) by specifying it's for a single acquisition that stops automatically after one trigger.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides clear context on when to use this tool: for arming the scope for a single acquisition that stops automatically after a trigger. It implies usage vs. alternatives like 'run' (continuous) and 'stop' (manual), but doesn't explicitly name them or state exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
stopA
Stop acquisition and freeze the display. Use before reading measurements or cursors for stable values. Returns trigger status after the command.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries full burden. It discloses the tool's effect (stops acquisition, freezes display) and return value (trigger status), but doesn't mention potential side effects like whether this affects subsequent measurements, if it requires specific device state, or latency considerations. The description adds value but lacks comprehensive behavioral context.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences with zero waste. First sentence states purpose and usage context, second sentence discloses return value. Every word earns its place and information is front-loaded appropriately.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a zero-parameter tool with no annotations and no output schema, the description provides good context about what the tool does, when to use it, and what it returns. However, it doesn't fully explain the 'trigger status' return value or potential error conditions, leaving some gaps in completeness.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has 0 parameters with 100% schema description coverage. The description appropriately doesn't waste space discussing nonexistent parameters, maintaining focus on the tool's purpose and usage. Baseline for 0 parameters is 4.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose with specific verbs ('stop acquisition', 'freeze the display') and identifies the resource (oscilloscope acquisition/display). It distinguishes from siblings like 'run' (which would start acquisition) and 'single' (which captures one acquisition).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicit guidance is provided on when to use this tool: 'before reading measurements or cursors for stable values.' This tells the agent precisely when this tool is needed versus alternatives like directly reading measurements without stopping acquisition.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections. Dates show when Glama detected each change.
17 tool updates
v0.1.0- First observed
autoscale - First observed
check_error - First observed
get_cursor_values - First observed
get_scope_state - First observed
get_waveform - First observed
idn - First observed
measure - First observed
measure_between - First observed
run - First observed
screenshot - First observed
send_raw - First observed
set_channel - First observed
set_cursors - First observed
set_timebase - First observed
set_trigger - First observed
single - First observed
stop
TDQS
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.
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Connectors
MCP server enabling AI agents to manage Bitrix24 features via standardized protocol
MCP server for building and testing AI agents with multi-model experimentation and insights.
QuLab MCP remote server (Streamable HTTP) for computational science and lab tools.
MCP server providing access to the Scorecard API to evaluate and optimize LLM systems.
Related MCP Servers
- AlicenseAqualityDmaintenanceAn MCP server that enables AI assistants to control Siglent SDS oscilloscopes over a local network using SCPI commands. It allows users to measure signals, configure channel and acquisition settings, and capture waveforms or screenshots through natural language.1347MIT
- AlicenseNot gradedqualityAmaintenanceAn MCP server for controlling Rigol oscilloscopes from an AI assistant. It translates MCP tool calls into SCPI commands over PyVISA.1MIT
- AlicenseAqualityAmaintenanceAn MCP server that enables AI agents to operate an oscilloscope through high-level tools like signal capture and measurement, abstracting vendor-specific SCPI commands.183MIT
- AlicenseNot gradedqualityDmaintenanceMCP server for controlling Hantek DSO2D15 and other DSO2000-family oscilloscopes via USB and SCPI, enabling waveform acquisition, measurements, and screen captures.MIT
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/erebusnz/rigol-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server