Skip to main content
Glama
MagnusJohansson

siglent-sdg-mcp

siglent-sdg-mcp

A Model Context Protocol (MCP) server that lets AI assistants control Siglent SDG waveform generators over your local network. Connect Claude to your bench and generate, modulate, and configure signals through natural language.

Overview

This MCP server communicates with Siglent SDG waveform generators via SCPI commands over TCP sockets (port 5025). No VISA drivers or NI-MAX installation required — just a network connection to your generator.

Oscilloscope screenshot captured via MCP

Key features:

  • 21 tools covering output control, waveform generation, modulation, sweep, burst, arbitrary waveforms, and more

  • Dual-channel support (C1 and C2)

  • 8 waveform types: sine, square, ramp, pulse, noise, arbitrary, DC, PRBS

  • 8 modulation types: AM, DSB-AM, FM, PM, PWM, ASK, FSK, PSK

  • Auto-connect on startup via environment variable

  • Query queue serializes commands automatically — tools can safely run in parallel

  • Raw SCPI escape hatch for any command not covered by the built-in tools

Related MCP server: jds6600-mcp

Compatibility

Status

Model

Tested

SDG1032X

Expected to work

SDG1000X series (SDG1062X, etc.)

May work

Other Siglent SDG models with SCPI over TCP support

The server uses standard SCPI commands from the SDG series programming guide. Other Siglent models that support the same command set over port 5025 should work with little or no modification.

Quick Start

You need a Siglent waveform generator accessible on your network (TCP port 5025). Pick one of the three options below and add the config to your .mcp.json (in your project directory, or ~/.claude/.mcp.json for global access).

Replace 192.168.1.126 with your generator's IP address.

No Node.js installation required. Works on Linux, macOS, and Windows (via WSL2 or Docker Desktop).

{
  "mcpServers": {
    "siglent-sdg": {
      "type": "stdio",
      "command": "docker",
      "args": [
        "run", "--rm", "-i",
        "-e", "SIGLENT_SDG_IP=192.168.1.126",
        "ghcr.io/magnusjohansson/siglent-sdg-mcp:latest"
      ]
    }
  }
}

Option B: npx

Requires Node.js 20+. Downloads and runs the package automatically.

{
  "mcpServers": {
    "siglent-sdg": {
      "type": "stdio",
      "command": "npx",
      "args": ["-y", "siglent-sdg-mcp"],
      "env": {
        "SIGLENT_SDG_IP": "192.168.1.126"
      }
    }
  }
}

Option C: Clone and build

git clone https://github.com/magnusjohansson/siglent-sdg-mcp.git
cd siglent-sdg-mcp
npm install
npm run build
{
  "mcpServers": {
    "siglent-sdg": {
      "type": "stdio",
      "command": "node",
      "args": ["/path/to/siglent-sdg-mcp/build/index.js"],
      "env": {
        "SIGLENT_SDG_IP": "192.168.1.126"
      }
    }
  }
}

Replace /path/to/siglent-sdg-mcp with the actual path to your clone.

Environment Variables

Variable

Required

Default

Description

SIGLENT_SDG_IP

No

Generator IP address for auto-connect on startup

SIGLENT_IP

No

Fallback if SIGLENT_SDG_IP is not set

SIGLENT_SDG_PORT

No

5025

TCP port (only change if your setup differs)

SIGLENT_PORT

No

5025

Fallback if SIGLENT_SDG_PORT is not set

Auto-Connect Behavior

If SIGLENT_SDG_IP (or SIGLENT_IP) is set, the server attempts to connect to the generator immediately after starting. This runs in the background and does not block the MCP server — Claude can start using other tools right away. If the generator is offline or unreachable, the server logs a warning and you can connect manually later using the connect tool.

If neither variable is set, the server starts without a connection. Use the connect tool to connect when ready.

Using with Other AI Clients

The Quick Start examples above use Claude Code's .mcp.json format, which includes a "type": "stdio" field. Other AI clients use the same JSON structure but without the "type" field and with different config file locations.

Claude Desktop

Edit claude_desktop_config.json:

  • Windows: %APPDATA%\Claude\claude_desktop_config.json

  • macOS: ~/Library/Application Support/Claude/claude_desktop_config.json

Docker

{
  "mcpServers": {
    "siglent-sdg": {
      "command": "docker",
      "args": [
        "run", "--rm", "-i",
        "-e", "SIGLENT_SDG_IP=192.168.1.126",
        "ghcr.io/magnusjohansson/siglent-sdg-mcp:latest"
      ]
    }
  }
}

npx

{
  "mcpServers": {
    "siglent-sdg": {
      "command": "npx",
      "args": ["-y", "siglent-sdg-mcp"],
      "env": {
        "SIGLENT_SDG_IP": "192.168.1.126"
      }
    }
  }
}

Note: You must fully restart Claude Desktop after changing the config file.

Cursor

Edit one of:

  • User-level: ~/.cursor/mcp.json (available across all projects)

  • Project-level: .cursor/mcp.json (shared with your team via version control)

You can also add servers through the UI: Settings > Cursor Settings > MCP > Add new global MCP server.

Docker

{
  "mcpServers": {
    "siglent-sdg": {
      "command": "docker",
      "args": [
        "run", "--rm", "-i",
        "-e", "SIGLENT_SDG_IP=192.168.1.126",
        "ghcr.io/magnusjohansson/siglent-sdg-mcp:latest"
      ]
    }
  }
}

npx

{
  "mcpServers": {
    "siglent-sdg": {
      "command": "npx",
      "args": ["-y", "siglent-sdg-mcp"],
      "env": {
        "SIGLENT_SDG_IP": "192.168.1.126"
      }
    }
  }
}

Windsurf

Edit mcp_config.json:

  • Windows: %USERPROFILE%\.codeium\windsurf\mcp_config.json

  • macOS/Linux: ~/.codeium/windsurf/mcp_config.json

You can also configure servers through the UI: Cascade panel > MCP icon > Manage MCP Servers > View raw config.

Docker

{
  "mcpServers": {
    "siglent-sdg": {
      "command": "docker",
      "args": [
        "run", "--rm", "-i",
        "-e", "SIGLENT_SDG_IP=192.168.1.126",
        "ghcr.io/magnusjohansson/siglent-sdg-mcp:latest"
      ]
    }
  }
}

npx

{
  "mcpServers": {
    "siglent-sdg": {
      "command": "npx",
      "args": ["-y", "siglent-sdg-mcp"],
      "env": {
        "SIGLENT_SDG_IP": "192.168.1.126"
      }
    }
  }
}

Google Antigravity

Configuration is managed through the IDE's UI:

  1. Open the Agent pane on the right side of the workspace

  2. Click the ... button at the top

  3. Select MCP Servers

  4. Click Manage MCP Servers

  5. Click View raw config

  6. Add the configuration below and save

Docker

{
  "mcpServers": {
    "siglent-sdg": {
      "command": "docker",
      "args": [
        "run", "--rm", "-i",
        "-e", "SIGLENT_SDG_IP=192.168.1.126",
        "ghcr.io/magnusjohansson/siglent-sdg-mcp:latest"
      ]
    }
  }
}

npx

{
  "mcpServers": {
    "siglent-sdg": {
      "command": "npx",
      "args": ["-y", "siglent-sdg-mcp"],
      "env": {
        "SIGLENT_SDG_IP": "192.168.1.126"
      }
    }
  }
}

Replace 192.168.1.126 with your generator's IP address in all examples above.

ChatGPT Desktop

ChatGPT Desktop only supports remote HTTPS MCP servers (called "connectors"), not local stdio servers. Since this MCP server uses stdio transport, it is not directly compatible with ChatGPT Desktop.

Tools

21 tools across 9 categories.

Category

Tool

Description

Connection

connect

Connect to waveform generator over TCP

disconnect

Close the connection

identify

Query device ID (manufacturer, model, serial, firmware)

Output

get_output

Read output state, load impedance, and polarity

configure_output

Turn output on/off, set load impedance and polarity

Basic Waveform

get_basic_wave

Read waveform parameters (type, frequency, amplitude, etc.)

configure_basic_wave

Set waveform type, frequency, amplitude, offset, phase, duty cycle, and more

Modulation

get_modulation

Read modulation settings (type, source, depth/deviation)

configure_modulation

Set modulation type, source, frequency, depth, deviation, and carrier parameters

Sweep

get_sweep

Read sweep parameters (time, frequency range, mode, direction)

configure_sweep

Set sweep time, start/stop frequencies, mode, direction, trigger, and marker

Burst

get_burst

Read burst parameters (mode, period, trigger, cycle count)

configure_burst

Set burst mode, period, trigger source, cycle count, delay, and gate polarity

Arbitrary Waveform

get_arbitrary_wave

Read the current arbitrary waveform selection

set_arbitrary_wave

Set arbitrary waveform by index (built-in) or name (user-defined)

Utility

reset

Reset generator to factory defaults (*RST)

copy_channel

Copy all parameters from one channel to another

configure_sync

Configure sync output signal

equal_phase

Synchronize phase of both channels

SCPI

scpi_query

Send arbitrary SCPI query and return the response

scpi_command

Send arbitrary SCPI command (no response expected)

Example Conversations

Generate a basic waveform

You: Output a 1 kHz sine wave at 2 Vpp on channel 1.

Claude calls configure_basic_wave with channel: "C1", waveform_type: "SINE", frequency: 1000, amplitude: 2, then configure_output with channel: "C1", state: "ON".

Set up modulation

You: Add AM modulation to channel 1 with 80% depth at 100 Hz.

Claude calls configure_modulation with channel: "C1", state: "ON", type: "AM", depth: 80, frequency: 100.

Configure a frequency sweep

You: Sweep channel 2 from 100 Hz to 10 kHz over 5 seconds.

Claude calls configure_sweep with channel: "C2", state: "ON", start: 100, stop: 10000, time: 5, then configure_output with channel: "C2", state: "ON".

Check current settings

You: What's the current waveform setup on both channels?

Claude calls get_basic_wave on both C1 and C2 in parallel and reports the waveform type, frequency, amplitude, and other settings for each channel.

Copy channel configuration

You: Make channel 2 match channel 1's settings.

Claude calls copy_channel with source: "C1", destination: "C2".

Set up burst mode

You: Configure channel 1 for 5-cycle bursts triggered externally.

Claude calls configure_burst with channel: "C1", state: "ON", burst_mode: "NCYC", cycles: "5", trigger_source: "EXT".

Architecture

Claude Code <-- stdio/JSON-RPC --> siglent-sdg-mcp <-- TCP/SCPI --> Generator:5025
  • Transport: MCP over stdio (JSON-RPC 2.0)

  • Protocol: SCPI commands over raw TCP sockets, newline-terminated

  • Query Queue: All SCPI queries are serialized through an internal queue. The generator processes one command at a time, so even when tools issue parallel requests, the queue ensures they're sent sequentially.

  • Auto-Connect: If SIGLENT_SDG_IP is set, connects in the background on startup without blocking the MCP server.

Development

npm run build       # Compile TypeScript
npm run watch       # Watch mode — recompile on changes
npm run dev         # Build and run
npm run inspector   # Launch with MCP Inspector for debugging

Docker (local build)

Build the image locally:

docker build -t siglent-sdg-mcp .

Then use the local image in your .mcp.json:

{
  "mcpServers": {
    "siglent-sdg": {
      "type": "stdio",
      "command": "docker",
      "args": [
        "run", "--rm", "-i",
        "-e", "SIGLENT_SDG_IP=192.168.1.126",
        "siglent-sdg-mcp"
      ]
    }
  }
}

Project Structure

src/
  index.ts              # Entry point, MCP server setup
  connection.ts         # TCP socket manager with query queue
  tools/
    connection.ts       # connect, disconnect, identify
    output.ts           # get_output, configure_output
    basic-wave.ts       # get_basic_wave, configure_basic_wave
    modulation.ts       # get_modulation, configure_modulation
    sweep.ts            # get_sweep, configure_sweep
    burst.ts            # get_burst, configure_burst
    arbitrary.ts        # get_arbitrary_wave, set_arbitrary_wave
    utility.ts          # reset, copy_channel, configure_sync, equal_phase
    scpi.ts             # scpi_query, scpi_command

Troubleshooting

"Not connected to waveform generator"

The generator isn't connected yet. Either set SIGLENT_SDG_IP in your .mcp.json env for auto-connect, or use the connect tool manually.

Connection timeout

  • Verify the generator's IP address (check the generator's Utility > Interface menu)

  • Ensure port 5025 is accessible (try telnet <generator-ip> 5025 from your machine)

  • Check that no firewall is blocking the connection

  • The generator only accepts one TCP connection at a time — close any other SCPI clients

Query timeout

Some SCPI queries can take a few seconds. The default timeout is 5 seconds. For scpi_query, you can increase the timeout with the timeout_ms parameter.

Docker: can't reach the waveform generator

By default, Docker containers can reach LAN devices via the bridge network (NAT). If the container can't connect to your generator:

  • Verify the generator is reachable from your host: telnet 192.168.1.126 5025

  • On Linux, try adding --network host to the Docker args:

    "args": ["run", "--rm", "-i", "--network", "host", "-e", "SIGLENT_SDG_IP=192.168.1.126", "ghcr.io/magnusjohansson/siglent-sdg-mcp:latest"]

    Note: --network host does not work on macOS or Windows Docker Desktop.

Docker: wrong architecture / exec format error

The published image supports linux/amd64 and linux/arm64. Docker should pull the correct one automatically. If you see an exec format error, pull explicitly:

docker pull --platform linux/amd64 ghcr.io/magnusjohansson/siglent-sdg-mcp:latest

"CHDR" appears in responses

This shouldn't happen — the server sets CHDR OFF on connect. If you see command headers in responses, try disconnecting and reconnecting.

License

MIT — see LICENSE for details.

Available Tools

21 tools
configure_basic_waveA

Configure the basic waveform parameters of a channel. Multiple parameters can be set in a single call. The command builds a single BSWV command with all specified parameters.

ParametersJSON Schema
NameRequiredDescriptionDefault
dutyNoDuty cycle in % (only for SQUARE or PULSE)
fallNoFall time in seconds (only for PULSE)
meanNoMean in volts (only for NOISE)
riseNoRise time in seconds (only for PULSE)
delayNoWaveform delay in seconds
phaseNoPhase in degrees (0-360, not valid for NOISE, PULSE, or DC)
stdevNoStandard deviation in volts (only for NOISE)
widthNoPulse width in seconds (only for PULSE)
offsetNoDC offset in volts (not valid for NOISE)
periodNoPeriod in seconds (alternative to frequency)
channelYesChannel to configure
symmetryNoSymmetry in % (0-100, only for RAMP)
amplitudeNoAmplitude in Vpp (not valid for NOISE or DC)
frequencyNoFrequency in Hz (not valid for NOISE or DC)
low_levelNoLow level in volts
high_levelNoHigh level in volts
waveform_typeNoWaveform type
amplitude_vrmsNoAmplitude in Vrms

TDQS

A3.7/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations only indicate readOnlyHint:false, so the description carries the burden for behavioral disclosure. It adds context about building a single BSWV command, hinting at atomicity/efficiency, but doesn't mention prerequisites (e.g., setting waveform_type), validation of parameter combinations, or side effects beyond the mutation itself.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is brief overall, but the second and third sentences ('Multiple parameters can be set in a single call' and 'builds a single BSWV command with all specified parameters') are redundant, repeating the same idea. It is front-loaded but could be tightened without losing meaning.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool has 18 parameters, no output schema, and minimal annotations, the description is under-specified. It doesn't explain parameter dependencies (e.g., some params are only valid for specific waveform types), mutual exclusivity (frequency vs. period), or the need to set waveform_type first. The schema describes each parameter individually, but the description fails to synthesize this into a coherent usage model.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the schema itself documents each parameter's meaning and constraints. The description adds little beyond noting that multiple parameters can be set at once, which doesn't deepen understanding of individual parameter semantics or relationships like mutual exclusivity.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states 'Configure the basic waveform parameters of a channel' with a specific verb and resource. It distinguishes itself from sibling tools like configure_modulation, configure_sweep, and configure_output by focusing on basic waveform parameters, and the name reinforces this scope.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

While it doesn't explicitly name alternatives, the context is clear: it is for basic waveform parameters and supports batching multiple parameters in a single call. This implies when to use it (for basic wave settings) but lacks explicit exclusions or comparisons to siblings like configure_modulation or configure_sweep.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

configure_burstA

Configure burst mode on a channel. State must be set to ON before other parameters. Builds a single BTWV command with all specified parameters.

ParametersJSON Schema
NameRequiredDescriptionDefault
delayNoTrigger delay in seconds (when NCYC mode)
stateNoBurst state. Must be ON before setting other params.
cyclesNoNumber of burst cycles (integer, or 'INF' for infinite)
periodNoBurst period in seconds
channelYesChannel to configure
burst_modeNoBurst mode: GATE or NCYC (N-cycle)
start_phaseNoStart phase in degrees (0-360)
trigger_outNoTrigger output mode (when NCYC and INT/MAN)
carrier_dutyNoCarrier duty cycle in % (for SQUARE or PULSE)
trigger_edgeNoTrigger edge (when EXT or MAN)
carrier_phaseNoCarrier phase in degrees (0-360)
gate_polarityNoGate polarity (when GATE mode)
carrier_offsetNoCarrier DC offset in volts
manual_triggerNoSend a manual trigger (only when trigger source is MAN)
trigger_sourceNoTrigger source
carrier_symmetryNoCarrier symmetry in % (for RAMP)
carrier_waveformNoCarrier waveform type
carrier_amplitudeNoCarrier amplitude in Vpp
carrier_frequencyNoCarrier frequency in Hz

TDQS

A3.9/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description adds a useful behavioral detail: it 'Builds a single BTWV command with all specified parameters.' This goes beyond the basic readOnlyHint annotation by revealing the command construction. However, it does not disclose whether the command is actually sent, how errors are handled, or whether parameters are validated, which is significant for a tool with 19 parameters.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is two concise sentences with no redundant information. It front-loads the purpose and includes an essential usage note, making it highly efficient.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

As a complex tool with 19 parameters and no output schema, the description covers the key prerequisite but omits details about execution behavior, validation, and possible error states. The rich schema descriptions compensate for some gaps, but the description alone leaves important context unclear, such as whether the BTWV command is immediately applied or merely built.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema provides 100% description coverage for all 19 parameters, so the baseline is 3. The description adds the important cross-parameter dependency that 'State must be set to ON before other parameters,' which is not fully captured in the schema. This is valuable but minimal, as all individual parameter meanings are already in the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly identifies the action ('Configure burst mode'), the target resource ('on a channel'), and the implementation approach ('Builds a single BTWV command'). This distinguishes it from sibling tools like configure_modulation or configure_sweep, 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.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides an explicit ordering guideline: 'State must be set to ON before other parameters.' This is a key usage condition. It does not explicitly name alternatives or exclusions, but the focus on burst mode and the mention of BTWV command imply when it should be used relative to other configuration tools.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

configure_modulationA

Configure modulation on a channel. Set state first (ON), then type and parameters. Commands are sent sequentially: state, then type, then type-specific parameters, then carrier parameters.

ParametersJSON Schema
NameRequiredDescriptionDefault
typeNoModulation type
depthNoAM modulation depth in % (0-120)
stateNoModulation state. Must be ON before setting other params.
sourceNoModulation source (availability depends on type)
channelYesChannel to configure
mod_waveNoModulating waveform shape (only when source is INT)
polarityNoPSK polarity
deviationNoFM frequency deviation in Hz, or PM phase deviation in degrees (0-360), or PWM duty deviation in %
frequencyNoModulation frequency in Hz (AM/FM/PM/PWM) or key frequency (ASK/FSK/PSK)
carrier_phaseNoCarrier phase in degrees (0-360)
hop_frequencyNoFSK hop frequency in Hz
carrier_offsetNoCarrier DC offset in volts
carrier_waveformNoCarrier waveform type
carrier_amplitudeNoCarrier amplitude in Vpp
carrier_frequencyNoCarrier frequency in Hz

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Beyond the readOnlyHint:false annotation, the description discloses the sequential execution behavior: state, then type, then type-specific parameters, then carrier parameters. This adds valuable insight into the tool's operation, though it does not cover error handling or side effects.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is only three sentences, front-loaded with the purpose and then the key usage sequence. Every sentence contributes essential information without redundancy or fluff.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The tool has 15 parameters and no output schema, but the schema fully documents each parameter. The description adds the crucial state-first prerequisite and command sequencing, which are essential for correct invocation. It could be more explicit about which parameters apply to which modulation types, but that is partially hinted at with 'type-specific parameters' and covered by enum descriptions in the schema.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the baseline is 3. The description adds value by explaining the ordering and dependency of parameters (state first, type before type-specific parameters), which is not captured in the schema itself. This helps the agent understand how parameters interrelate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with a specific verb and resource: 'Configure modulation on a channel.' This clearly distinguishes it from sibling tools like configure_output or configure_basic_wave. The purpose is unambiguous and action-oriented.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides clear procedural context: 'Set state first (ON), then type and parameters' and explains the sequential command ordering. While it does not explicitly mention alternatives or when-not-to-use, the ordering guidance is a strong usage guideline for this complex tool.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

configure_outputA

Configure the output of a channel. Can turn output on/off, set load impedance, and set polarity.

ParametersJSON Schema
NameRequiredDescriptionDefault
loadNoLoad impedance in ohms (50-100000) or 'HZ' for high impedance
stateNoOutput state: ON or OFF
channelYesChannel to configure
polarityNoOutput polarity: NOR (normal) or INVT (inverted)

TDQS

A3.5/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations declare readOnlyHint=false, confirming a write operation. The description aligns with this and adds the specific configurable aspects (state, load, polarity). However, it does not disclose side effects, prerequisites, or persistence, so it adds only moderate behavioral context beyond the annotation.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is two concise sentences, front-loaded with the main action and specific options. Every word earns its place with no filler or redundancy.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The tool is moderately complex with 4 parameters and a comprehensive schema. The description explains the core function but omits usage context (e.g., when to configure, interaction with connect/disconnect) and return behavior. It is minimally adequate but not complete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100% for all 4 parameters. The description summarizes the three main parameters (state, load, polarity) but does not add any new meaning beyond what the schema already documents. Baseline 3 applies due to high schema coverage.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

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 the output of a channel' and lists specific capabilities (turn output on/off, set load impedance, set polarity). This is a specific verb+resource combination that distinguishes it from sibling tools like configure_basic_wave or get_output.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

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, no prerequisites, and no scenarios. It simply states what the tool does, without any contextual cues for selection.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

configure_sweepA

Configure sweep on a channel. State must be set to ON before other parameters. Builds a single SWWV command with all specified parameters.

ParametersJSON Schema
NameRequiredDescriptionDefault
spanNoFrequency span in Hz
stopNoStop frequency in Hz
timeNoSweep time in seconds
startNoStart frequency in Hz
stateNoSweep state. Must be ON before setting other params.
centerNoCenter frequency in Hz
channelYesChannel to configure
symmetryNoSymmetry in % (0-100) when direction is UP_DOWN
directionNoSweep direction
sweep_modeNoSweep mode: LINE (linear), LOG (logarithmic), or STEP
return_timeNoReturn time in seconds (0-300)
trigger_outNoTrigger output state
marker_stateNoFrequency marker state
trigger_edgeNoTrigger edge (only for EXT or MAN trigger source)
carrier_phaseNoCarrier phase in degrees (0-360)
end_hold_timeNoEnd hold time in seconds (0-300)
carrier_offsetNoCarrier DC offset in volts
manual_triggerNoSend a manual trigger (only when trigger source is MAN)
trigger_sourceNoTrigger source: EXT (external), INT (internal), MAN (manual)
start_hold_timeNoStart hold time in seconds (0-300)
carrier_waveformNoCarrier waveform type
marker_frequencyNoMarker frequency in Hz
carrier_amplitudeNoCarrier amplitude in Vpp
carrier_frequencyNoCarrier frequency in Hz

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations only include readOnlyHint: false, indicating mutation. The description adds meaningful behavioral context by revealing the SWWV command construction and the dependency on state being ON first, which goes beyond the minimal annotation. No contradiction with annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two concise sentences with no fluff. The purpose is front-loaded ('Configure sweep on a channel') and the second sentence delivers a critical usage constraint. Every word earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Despite 24 parameters and no output schema, the description covers the most important non-obvious behaviors: the state ordering prerequisite and the command-building approach. The schema fully handles parameter details. Could potentially mention defaults or what gets overwritten, but overall sufficient for a configuration tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Input schema has 100% coverage with individual parameter descriptions, so baseline is 3. The description's phrase 'all specified parameters' adds no new parameter-specific meaning; the schema already documents each field thoroughly.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states 'Configure sweep on a channel' with a specific verb and resource, distinguishing it from sibling tools like get_sweep (read) and other configure_* tools. The second sentence about building a single SWWV command adds useful implementation-specific detail.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explicitly gives a usage ordering requirement: 'State must be set to ON before other parameters.' This is a clear directive for correct invocation. It does not explicitly name alternatives, but the tool's name and sibling set imply this is for configuring sweeps versus reading them via get_sweep.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

configure_syncC

Configure the sync output signal for a channel.

ParametersJSON Schema
NameRequiredDescriptionDefault
typeNoSync source type
stateYesSync output state
channelYesChannel to configure

TDQS

C2.9/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The annotation readOnlyHint=false indicates a write operation, but the description adds no further behavioral context. It does not explain side effects, reversibility, or how parameters affect behavior (e.g., state ON/OFF enables/disables the sync output). The description essentially restates the tool's name without disclosing additional traits.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, clear sentence that is short and to the point. It is appropriately sized for the simplicity of the tool, though it could be slightly more informative without becoming verbose.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The description and schema together give a basic understanding of the tool's purpose and parameters, but the description lacks usage context and behavioral nuance. For a simple configuration tool with a rich schema, this is minimally complete but leaves gaps around when to use it and what happens when invoked.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%: each parameter has a clear description (type, state, channel). The tool description adds no extra parameter semantics, so the baseline score of 3 is appropriate as the schema fully documents the parameters.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a clear action and resource: 'Configure the sync output signal for a channel.' This distinguishes it from other configure tools like configure_output or configure_modulation, though it does not explicitly contrast them. The verb and resource are specific enough for basic purpose clarity.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no guidance on when to use this tool versus alternatives. The description does not provide context such as typical use cases, prerequisites, or exclusions. Given the presence of sibling tools like configure_sweep and configure_burst, the lack of usage direction is a notable gap.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

connectA

Connect to a Siglent SDG waveform generator over TCP. Returns device identification on success.

ParametersJSON Schema
NameRequiredDescriptionDefault
hostNoIP address of the waveform generator (defaults to SIGLENT_SDG_IP or SIGLENT_IP env var)
portNoTCP port (defaults to 5025)

TDQS

A3.8/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description adds 'Returns device identification on success' and specifies TCP, but it does not disclose that the connection is persistent or that it should be terminated with 'disconnect'. Annotations provide openWorldHint=true but do not cover connection lifecycle. The description is adequate but not rich in behavioral detail.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two concise sentences that front-load the primary action and mention the success return value. No redundant or vague wording; every sentence contributes valuable information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple connection tool, the description covers the essential aspects: connection address, protocol, and return value. It is slightly incomplete by not stating that the connection persists or that 'disconnect' should be used, but the sibling tool list makes this inferable. Overall, it is well-rounded for the tool's complexity.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, with host and port both having descriptions including defaults and environment variable fallback. The description adds no new parameter-specific semantics beyond mentioning TCP, which is already implied by the port default of 5025. Baseline 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Description clearly states the tool's function: 'Connect to a Siglent SDG waveform generator over TCP.' It uses a specific verb (Connect), identifies the resource (Siglent SDG waveform generator), and specifies the protocol (TCP), making it distinct from siblings like 'disconnect' and 'identify'.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies that this tool should be used before other operations (as it establishes a connection), but it does not explicitly say 'use before sending commands' or mention alternatives. There is no exclusion guidance, but the purpose is self-evident given the sibling tools.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

copy_channelA

Copy all parameters from one channel to another.

ParametersJSON Schema
NameRequiredDescriptionDefault
sourceYesSource channel to copy from
destinationYesDestination channel to copy to

TDQS

A4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The annotations indicate this is not read-only, and the description adds that all parameters are copied. However, it does not disclose edge cases like source and destination being the same channel or explicitly state that the destination's existing settings are overwritten.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, direct sentence with no filler. It front-loads the action and identifies the operand immediately.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple tool with two well-described enum parameters and no output schema, this description is largely complete. It could mention overwrite behavior, but that is not essential given the tool's simplicity.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema covers both parameters with clear descriptions and enumerations, so the description adds little beyond the schema. This matches the baseline for high schema coverage.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses a specific verb ('copy') and identifies the exact resource ('all parameters from one channel to another'). It clearly distinguishes this tool from the surrounding get_/configure_ siblings.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides clear context: use it to duplicate all parameters between channels. It does not explicitly mention alternatives or when not to use it, but the purpose is self-evident from the sibling tool set.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

disconnectA

Disconnect from the waveform generator.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A3.8/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The annotation readOnlyHint=false already signals that this tool changes state. The description adds no extra behavioral context beyond that, e.g., whether it is idempotent, what side effects occur on the device, or whether it closes sockets gracefully.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single, direct sentence that is front-loaded and contains no superfluous words. It earns its place by stating the exact action.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the low complexity (no params, no output schema, simple action), the description is essentially complete. It could optionally mention that it is the inverse of 'connect', but that is a minor gap.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

There are zero parameters, so no additional parameter explanation is needed. The baseline of 4 applies because the schema fully covers the (nonexistent) parameter surface.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses a specific verb ('Disconnect') and resource ('waveform generator'), clearly stating the action. It distinguishes itself from siblings like 'connect' and 'reset' by naming the operation directly.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The usage context is implied: it is the counterpart to 'connect'. However, there is no explicit guidance on when to use it vs alternatives like 'reset' or 'idle', nor any mention of prerequisites or post-conditions.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

equal_phaseB

Synchronize the phase of both channels (EQPHASE). Aligns the phase relationship between C1 and C2.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

B3.4/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The annotation readOnlyHint=false indicates a mutation, but the description only restates the action ('synchronize') without disclosing side effects, prerequisites, reversibility, or whether the operation is destructive. It adds no behavioral context beyond what the name and annotation already imply.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is extremely concise—two short sentences, front-loaded with the primary action. No filler or redundancy.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple, parameterless tool, the description adequately explains the core purpose. However, it fails to clarify how this differs from the related sibling 'configure_sync' or to mention any prerequisites or consequences of use. This could lead to confusion for an agent deciding between tools.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

There are zero parameters, so the description does not need to explain parameter meanings. The baseline of 4 is appropriate since the tool's operation is clear from the description.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states a specific verb ('Synchronize'/'Aligns') and the resource (phase of channels C1/C2). It identifies the operation without ambiguity, but it does not explicitly differentiate from the sibling tool 'configure_sync', which might also deal with synchronization.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies when to use the tool (when phase alignment between C1 and C2 is needed), but it provides no explicit guidance about when not to use it or what alternatives exist. No exclusions or comparison with related tools like 'configure_sync' are given.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_arbitrary_waveA
Read-only

Get the current arbitrary waveform selection for a channel. Returns the waveform index and name.

ParametersJSON Schema
NameRequiredDescriptionDefault
channelYesChannel to query

TDQS

A4.1/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The readOnlyHint annotation already signals a safe read operation. The description adds meaningful behavioral context by explicitly stating what is returned (waveform index and name), going beyond the bare annotation. It does not contradict the annotation.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is only two sentences, front-loaded with the action and resource, and every word is necessary. No fluff or repetition.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple getter with one enum parameter and no output schema, the description fully covers what the tool does and what it returns. The readOnlyHint annotation supplies the safety context, and the schema covers the parameter, making the description complete for this low-complexity tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% with the channel parameter fully documented via enum and description. The tool description does not add further semantic detail beyond repeating 'channel,' so it meets but does not exceed the baseline expected when the schema carries the parameter information.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description begins with a specific verb 'Get' and identifies the exact resource: 'current arbitrary waveform selection for a channel.' It also states the return value (waveform index and name), which differentiates this getter from siblings like get_basic_wave or get_modulation.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description clearly implies use when querying the current arbitrary waveform selection, but it does not explicitly state when to use this tool versus alternatives or mention the sibling set_arbitrary_wave. The usage context is implied rather than directly expressed.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_basic_waveA
Read-only

Get the basic waveform parameters of a channel, including waveform type, frequency, amplitude, offset, phase, duty cycle, etc.

ParametersJSON Schema
NameRequiredDescriptionDefault
channelYesChannel to query

TDQS

A3.8/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The readOnlyHint annotation already declares the operation is safe, and the description matches with 'Get'. The description adds value by listing the specific parameters included, but does not disclose return format, error behavior, or any side effects. Given the annotation covers the main safety concern, a mid-range score is appropriate.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, focused sentence that front-loads the action and resource. It avoids fluff and provides a useful list of example parameters, earning its place without excess.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple one-parameter read tool with a readOnlyHint, the description plus schema is mostly complete. It identifies the purpose, the target channel, and key parameters. It lacks return format, but the absence of an output schema lowers this need; still, a brief mention of what the response includes would have made it fully complete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%: the only parameter 'channel' has a clear description and enum of C1/C2. The tool description does not add anything beyond the schema, so it relies on the schema for parameter meaning. Baseline 3 is warranted due to full schema coverage.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool gets basic waveform parameters (type, frequency, amplitude, etc.) from a channel. The verb 'Get' plus resource 'basic waveform parameters' is specific and distinguishes it from sibling get_* tools like get_modulation and get_sweep.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Usage context is implied: the tool is for reading basic waveform settings, contrasting with configuration tools like configure_basic_wave. However, there is no explicit guidance on when to choose this over other get_* tools or what to do if the channel is invalid. The 'etc.' at the end leaves scope slightly ambiguous.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_burstA
Read-only

Get the burst wave parameters of a channel, including state, period, trigger source, burst mode (gate/ncycle), cycle count, carrier settings, and delay.

ParametersJSON Schema
NameRequiredDescriptionDefault
channelYesChannel to query

TDQS

A4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations declare readOnlyHint=true, and the description reinforces this with 'Get'. The description adds value by listing the specific attributes returned, which helps the agent understand the tool's output scope. It does not contradict annotations, and the added context goes beyond the minimal read-only hint, though it stops short of providing return format details.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single sentence that front-loads the core purpose ('Get the burst wave parameters of a channel') and then lists the included parameters without unnecessary words. Every word contributes to understanding the tool's function.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple read-only query tool with one fully documented parameter, the description adequately covers purpose and return content. No output schema exists, so the description carries the burden of explaining return values, which it does by listing them. It lacks explicit return format or error conditions, but the simplicity of the tool makes this a minor gap.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema covers the single 'channel' parameter completely with type, enum (C1/C2), and description 'Channel to query'. The description's phrase 'of a channel' adds no new semantic meaning beyond the schema. With 100% schema coverage, a baseline of 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly specifies a get operation for 'burst wave parameters of a channel' and enumerates the exact parameters covered (state, period, trigger source, burst mode, cycle count, carrier settings, delay). This distinguishes it from sibling get_* tools like get_basic_wave or get_modulation, and from configure_burst which is the write counterpart.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies usage for querying burst settings but does not explicitly state when to use this tool versus configure_burst or other get_* tools. There is no mention of alternatives or conditions for use, so it earns an average score for implied but not explicit guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_modulationA
Read-only

Get the modulation parameters of a channel. Returns all modulation settings including type, source, frequency, depth/deviation, and carrier parameters.

ParametersJSON Schema
NameRequiredDescriptionDefault
channelYesChannel to query

TDQS

A4.3/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, so the description only needs to add context about behavior. It does so by listing what settings are returned ('type, source, frequency, depth/deviation, and carrier parameters'), which goes beyond the annotation. No contradictions or missing safety information are apparent.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, front-loaded sentence that immediately states the purpose and then provides a concise list of returned content. Every clause adds value, and there is no redundant or extraneous language.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple one-parameter getter with a provided readOnly annotation, the description is sufficiently complete: it specifies the resource, the channel parameter, and the categories of returned settings. No output schema exists, but the description gives an adequate high-level overview of the return value, which is all that is needed for this low-complexity tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100% (the 'channel' parameter is described as 'Channel to query'), so the baseline is 3. The description does not add additional parameter semantics beyond restating 'channel', so it earns the baseline without exceeding it.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses a specific verb ('Get') and resource ('modulation parameters of a channel'), making the tool's function unambiguous. It also enumerates the exact settings returned (type, source, frequency, depth/deviation, carrier), which further distinguishes it from sibling getters like get_basic_wave or get_sweep.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description clearly implies this tool is for reading modulation settings, and given the sibling list includes configure_modulation (the write counterpart), the use case is clear. It does not explicitly state 'when to use' or alternatives, but there are no alternative read tools for modulation, so the context is sufficient.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_outputA
Read-only

Get the output state of a channel, including on/off status, load impedance, and polarity.

ParametersJSON Schema
NameRequiredDescriptionDefault
channelYesChannel to query

TDQS

A4.1/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, so the description does not need to cover safety. It adds value by listing the specific fields returned, but does not detail return format, error behavior, or other behavioral aspects. This aligns with a baseline of 3 for tools with annotations and partial added context.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, concise sentence that front-loads the action and object, with no wasted words. It conveys the necessary information efficiently.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's simplicity (one parameter, read-only, no output schema), the description is complete. It specifies what is returned and the scope (channel). The annotations cover the read-only nature, and the schema covers parameter details, so no further information is needed.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema has a 100% description coverage for the single parameter 'channel', with a clear description and enum values. The tool description adds no further semantic meaning beyond what the schema already provides, so a baseline of 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly specifies the action ('Get'), the resource ('output state of a channel'), and the specific attributes returned (on/off status, load impedance, polarity). It is easily distinguished from sibling tools like configure_output, which would set these values.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies this tool is for reading the current output state of a channel, which is clear given the name and the sibling tool 'configure_output' for writing. However, it does not explicitly state when to use this instead of other getters or mention exclusions, but the context is unambiguous.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_sweepA
Read-only

Get the sweep parameters of a channel, including state, time, start/stop frequencies, sweep mode, direction, trigger source, carrier settings, and marker.

ParametersJSON Schema
NameRequiredDescriptionDefault
channelYesChannel to query

TDQS

A3.8/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The readOnlyHint annotation already communicates that this is a safe read operation. The description adds value by listing the sweep parameters returned, which is helpful given there is no output schema. However, it does not elaborate on possible error conditions, exact return format, or any other behavioral details beyond the field list, so it is adequate but not exceptional.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single sentence that is front-loaded with the core purpose ('Get the sweep parameters of a channel') and then lists the specific parameters. It contains no filler, redundancy, or irrelevant information, 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.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given that there is only one parameter and no output schema, the description gives a good overview of what will be returned by enumerating the sweep parameter fields. It could be more explicit about the return structure or units, but for a straightforward read-only getter, it is sufficiently complete for an agent to understand the tool's behavior.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema fully describes the single 'channel' parameter with an enum and a clear description ('Channel to query'), so the schema description coverage is 100%. The tool description does not need to add parameter details, and the baseline of 3 applies because the schema does the heavy lifting.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool's function with a specific verb ('Get') and resource ('sweep parameters of a channel'), and enumerates the major fields included (state, frequencies, mode, direction, trigger source, etc.). This makes it easily distinguishable from sibling tools like configure_sweep (set) and other get_* tools (which target different resources).

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description does not explicitly state when to use this tool versus alternatives, such as configuring sweep with configure_sweep. The usage is implied by the 'get' verb and the presence of a corresponding configure tool, but no explicit comparison or exclusion is provided. This falls under implied usage, which aligns with a score of 3.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

identifyA
Read-only

Query the waveform generator identification (*IDN?). Returns manufacturer, model, serial number, and firmware version.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The readOnlyHint annotation already indicates this is a safe read operation. The description adds value by specifying the exact return fields (manufacturer, model, serial, firmware) and the SCPI command, providing context beyond the annotation. It does not contradict annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, concise sentence that front-loads the action and includes essential details (SCPI command and return data). Every word contributes value with no redundancy.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's simplicity (no parameters, read-only, no output schema), the description fully covers what the tool does and what it returns. It is complete for an agent to select and invoke this tool correctly, even among many siblings.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool has no parameters, and schema coverage is 100% (empty schema matches no-parameter invocation). Per the baseline for zero-parameter tools, a score of 4 is appropriate, as there is nothing additional to explain about parameters.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description explicitly states the tool performs a query for waveform generator identification using the *IDN? command, which clearly distinguishes it from sibling tools like get_output or configure_output. It also lists the specific data returned (manufacturer, model, serial, firmware), 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.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies usage by stating it queries identification, which is clearly the tool for retrieving device identity. While it does not explicitly mention alternatives or exclusions, no sibling tool serves this purpose, so the context is clear and no additional guidance is necessary.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

resetA

Reset the waveform generator to factory default settings (*RST).

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A3.8/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations only provide readOnlyHint=false, indicating a mutation. The description beyond that reveals the SCPI command and that it resets to factory defaults, but does not mention potential side effects such as losing current settings or affecting all channels. Since annotations are minimal, the description carries the burden, yet it adds limited 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.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, concise sentence that directly states the purpose including the SCPI command. No wasted words.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given there are no parameters and no output schema, the description covers the basic function. It could mention side effects like all settings being overwritten, but for a simple reset command it is sufficiently complete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool has no parameters, and the input schema is empty. The baseline is 4 because no parameter documentation is needed. The description appropriately omits parameter details.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the verb 'reset', the target 'waveform generator', and the result 'to factory default settings'. It also includes the SCPI command (*RST) for precision. This is distinct from any sibling tool.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No explicit guidance on when to use this tool versus alternatives. The description simply states what it does without context on preferability or prerequisites.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

scpi_commandA

Send an arbitrary SCPI command to the waveform generator (no response expected). Use this as an escape hatch for commands not covered by other tools.

ParametersJSON Schema
NameRequiredDescriptionDefault
commandYesSCPI command to send (e.g. '*RST', 'C1:OUTP ON', 'C1:BSWV WVTP,SINE')

TDQS

A4.3/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With annotations only providing readOnlyHint=false, the description adds valuable behavioral context: 'no response expected' clarifies the tool returns nothing, and 'arbitrary SCPI command' implies potential side effects. It doesn't warn about safety, but the readOnlyHint already signals mutation. This is solid transparency beyond the annotation.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is two sentences, front-loaded with the core action, and every clause earns its place. No filler or redundancy.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a single-parameter tool with no output schema, the description covers the essential context: what it does, when to use it, and the lack of response. The schema covers input format, so the description is fully sufficient.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema fully documents the only parameter 'command' with examples (100% coverage). The description adds no additional parameter meaning beyond the schema, so the baseline of 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses a specific verb ('Send') and resource ('arbitrary SCPI command to the waveform generator'), clearly stating the tool's action. It also distinguishes itself from siblings by explicitly noting 'no response expected' and framing as an escape hatch for commands not covered by other tools.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides explicit when-to-use guidance: 'Use this as an escape hatch for commands not covered by other tools.' It also implies when-not-to-use by noting 'no response expected,' distinguishing it from scpi_query. However, it does not name the alternative sibling explicitly, so it stops short of a 5.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

scpi_queryA
Read-only

Send an arbitrary SCPI query to the waveform generator and return the response. Use this as an escape hatch for commands not covered by other tools. Note: CHDR is set to OFF, so responses contain only values (no headers).

ParametersJSON Schema
NameRequiredDescriptionDefault
commandYesSCPI query command to send (e.g. '*IDN?', 'C1:BSWV?', 'C1:OUTP?')
timeout_msNoTimeout in milliseconds (default 5000)

TDQS

A4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations indicate readOnlyHint=true, which sets the safety baseline. The description adds a valuable behavioral detail by noting CHDR is OFF, so responses contain only values without headers. However, it does not mention potential errors from malformed arbitrary commands or timeout behavior, which is a moderate gap.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is three sentences, each serving a distinct purpose: purpose, usage, and an important response-format caveat. It is front-loaded and free of redundant information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's simplicity, the description covers the essential aspects: what it does, when to use it, and a key response-format nuance. With readOnlyHint and full schema coverage, it is fairly complete for an escape-hatch tool, though it could mention error behavior.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, with both command and timeout_ms documented with examples. The description does not add further parameter-specific details beyond what the schema provides, so a baseline score is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states 'Send an arbitrary SCPI query to the waveform generator and return the response,' specifying the verb, resource, and action. It distinguishes itself from siblings by positioning itself as an escape hatch for commands not covered by other tools.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explicitly advises using this as an escape hatch for commands not covered by other tools, providing clear when-to-use context. It does not explicitly name alternatives like scpi_command for write commands, so it's not fully exhaustive but still offers solid guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

set_arbitrary_waveA

Set the arbitrary waveform for a channel by index number or by name. Use index for built-in waveforms (e.g. 2=StairUp, 18=Sinc, 26=Cardiac) or name for user-defined waveforms.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameNoName of the waveform (for user-defined waves, use quotes). Can also be a path like "Local/wave1.bin"
indexNoIndex of the built-in arbitrary waveform (0-198). Examples: 0=Sine, 2=StairUp, 10=ExpFal, 18=Sinc, 19=Gaussian, 26=Cardiac
channelYesChannel to configure

TDQS

A3.5/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The annotation readOnlyHint=false already indicates a mutation operation, and the description adds no further behavioral context. It does not mention side effects (e.g., overwriting the existing waveform), prerequisites, or persistence. The description essentially restates the tool's function without exposing additional behavioral traits beyond what the annotation provides.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is two sentences, front-loaded with the action and followed by concise usage examples. Every sentence adds value, with no redundant filler. It is exceptionally concise and well-structured.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The tool has 3 parameters with only channel required. The description explains the two methods (index/name) but does not clarify that at least one of them must be provided or whether they are mutually exclusive. This is a significant gap because the schema allows omitting both, which would lead to an invalid call. The description otherwise covers the main usage well.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

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 each parameter with descriptions and examples. The tool description repeats some examples (2=StairUp, 18=Sinc, 26=Cardiac) and adds the index/name distinction, but this information is already present in the schema. The description adds marginal value, aligning with the baseline of 3 for high schema coverage.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool's action: 'Set the arbitrary waveform for a channel by index number or by name.' It names the resource (arbitrary waveform), the target (channel), and the two selection methods. While it doesn't explicitly differentiate from sibling tools like configure_basic_wave, the purpose is specific and unambiguous.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides clear usage guidance: 'Use index for built-in waveforms ... or name for user-defined waveforms.' This tells the agent exactly when to use each parameter. It doesn't discuss alternatives like get_arbitrary_wave, but it gives clear context for using this tool effectively.

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.

  1. 21 tool updatesv1.0.0
    • First observedconfigure_basic_wave
    • First observedconfigure_burst
    • First observedconfigure_modulation
    • First observedconfigure_output
    • First observedconfigure_sweep
    • First observedconfigure_sync
    • First observedconnect
    • First observedcopy_channel
    • First observeddisconnect
    • First observedequal_phase
    • First observedget_arbitrary_wave
    • First observedget_basic_wave
    • First observedget_burst
    • First observedget_modulation
    • First observedget_output
    • First observedget_sweep
    • First observedidentify
    • First observedreset
    • First observedscpi_command
    • First observedscpi_query
    • First observedset_arbitrary_wave

TDQS

A3.8/5.0

Scored across 21 tools

Disambiguation5/5

Each tool targets a distinct resource or action: connection management, identification, output control, basic wave, modulation, sweep, burst, arbitrary wave, reset, channel copy, sync, phase, and raw SCPI. The get/configure pairs are clearly separated by waveform function, and the two SCPI tools are explicit escape hatches.

Naming Consistency4/5

Most tools follow a consistent verb_noun pattern with get_ and configure_ pairs (e.g., get_output/configure_output, get_sweep/configure_sweep). Minor deviations include set_arbitrary_wave instead of configure_arbitrary_wave, and equal_phase/copy_channel which don't follow the get/configure convention.

Tool Count4/5

At 21 tools, the server is slightly above the ideal 3-15 range but remains reasonable given the feature-rich scope of a waveform generator (connection, output, multiple wave modes, arbitrary waves, sync, phase, SCPI). Some redundancy exists (identify vs connect returning IDN), but each tool covers a distinct capability.

Completeness5/5

The tool set provides comprehensive coverage of the waveform generator's core lifecycle: connection, identification, output configuration, basic wave, modulation, sweep, burst, arbitrary wave selection, synchronization, phase alignment, and reset. The inclusion of scpi_query and scpi_command as escape hatches ensures any unmodeled functionality is still accessible.

Maintenance

ActivityInactive
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers

  • A
    license
    A
    quality
    D
    maintenance
    An 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.
    13
    5 npm
    7
    MIT
  • A
    license
    Not graded
    quality
    D
    maintenance
    MCP server for the JDS6600 signal generator, enabling vintage tape recorder calibration via auto-detection and advanced waveform controls.
    MIT
  • A
    license
    Not graded
    quality
    D
    maintenance
    An MCP server that connects AI assistants to the Owon DS1102 oscilloscope, enabling waveform capture, measurement retrieval, and remote control of scope settings.
    GPL 3.0
  • F
    license
    Not graded
    quality
    C
    maintenance
    MCP server for controlling SIGLENT oscilloscopes and signal generators via USBTMC, enabling waveform generation, scope configuration, measurement, and evidence reporting for electronics competitions.
    1
    -