Repository navigation
Home
A Model Context Protocol (MCP) server that lets an AI assistant control a UNI-T UTS series spectrum analyzer (UTS1000B/T, UTS3000B) over your local network. It talks SCPI over VXI-11 when the analyzer offers it, or over a raw TCP socket (port 5025), so there are no VISA drivers to install.
Status: release v1.1.0 is out. It has 85 tools in 15 groups, verified on a UNI-T UTS3036B, firmware V1.04.0040, over LAN. See the Roadmap. You can install it from the npm registry (
npx -y uni-t-uts-mcp), the release tarball, the git tag or a Docker image (see Getting Started).
| Group | Tools |
|---|---|
| Connection |
connect, discover_instruments, disconnect, list_instruments, identify
|
| Raw SCPI |
scpi_query, scpi_command
|
| Frequency |
get_frequency, set_frequency
|
| Amplitude |
get_amplitude, set_amplitude
|
| Bandwidth, sweep and detector |
get_bandwidth, set_bandwidth, get_sweep, set_sweep, get_detector, set_detector
|
| Acquisition |
get_acquisition, set_acquisition, single_sweep, start_sweep, wait_for_sweep_complete
|
| Trace |
get_trace, set_trace, restart_trace, set_trace_math, get_trace_data
|
| Markers |
get_marker, set_marker, marker_search, marker_to_instrument, markers_all_off, get_peak_criteria, set_peak_criteria, get_marker_function, set_marker_function, get_marker_ndb, set_marker_ndb, get_frequency_counter, set_frequency_counter
|
| Limit lines |
get_limit_line, set_limit_line, delete_limit_line
|
| Tracking generator |
get_tracking_generator, set_tracking_generator
|
| Measurement function module |
get_instrument_module, select_instrument_module
|
| Analog demodulation module |
enter_analog_demod, exit_analog_demod, get_ad_settings, set_ad_frequency, set_ad_demod_timing, set_ad_filters, set_ad_audio, get_demod_result, set_ad_display, ad_marker, ad_marker_search, get_ad_marker, ad_markers_all_off
|
| EMI function |
get_emi_settings, set_emi_scan_table, set_emi_measurement, get_emi_limit_line, set_emi_limit_line, delete_emi_limit_line, get_emi_correction, set_emi_correction, get_emi_marker, set_emi_marker, emi_marker_search, emi_markers_all_off, get_emi_peak_criteria, set_emi_peak_criteria, emi_signal_list, get_emi_signal_list_sort, set_emi_signal_list_sort, emi_run, emi_stop
|
| Measurements |
get_measurement, configure_measurement, read_measurement, exit_measurement, measure
|
| Screenshot | screenshot |
Example requests to your assistant once the server is connected:
- "Identify the analyzer and show me its current frequency, amplitude and bandwidth settings."
- "Set the center to 100 MHz with a 10 MHz span and a 10 kHz RBW."
- "Set the reference level to -20 dBm with 5 dB per division."
- "Show trace 2 as max hold, then restart it."
- "Take a single sweep and tell me when it is finished."
Every setter reads the instrument back and tells you when the analyzer changed or clamped a value (this unit clamps silently), and reports instrument errors with their code and text. Parallel tool calls are safe: the server runs tool calls one at a time per instrument, in arrival order (see Architecture).
- Getting Started: requirements, install paths, configuring your MCP client
- Tools: every tool with its parameters and behavior
- Instrument Behavior: what was verified on the real analyzer, including the quirks that shape the design
- Architecture: how the server is built and how a tool call flows through it
- Safety and Security: the command denylist and how to report vulnerabilities
- Troubleshooting: common problems and what they mean
- Manual Testing: check every tool group on a real analyzer
- Development: workflow, tests, adding a tool, hardware testing rules, how this wiki is kept up to date
- Roadmap: open and completed issues
- The project site with a quick start and the tool list.
- The repository docs: tools-reference.md, verified-hardware.md, programming-guide.md (SCPI syntax extracted from the UNI-T manuals) and references.md (manual links).
- The roadmap issue #1.
This wiki is built from the repository by scripts/sync-wiki.mjs and published automatically after every change to main, so edits made directly in the GitHub wiki editor are overwritten. Tools, Instrument Behavior, Home (the status and tool table) and Roadmap are generated from docs/tools-reference.md, docs/verified-hardware.md, package.json and the issue tracker; the other pages live in docs/wiki/ and change through pull requests. See Development.
MIT licensed. Verified on a UNI-T UTS3036B (firmware V1.04.0040); other models are untested. This wiki is generated from the repository's docs/ folder, which is authoritative: change it there, not here.