All projects

copper-mountain-vna-mcp

tools

The first VNA MCP server

Python MCP SCPI VNA RF Test
View on GitHub

Overview

copper-mountain-vna-mcp exposes a Copper Mountain vector network analyzer to AI assistants through the Model Context Protocol (MCP). Instead of clicking through the instrument UI or hand-writing automation scripts, you can ask an MCP-compatible client — like Claude — to configure a sweep, trigger a measurement, and pull back S-parameters in a single conversational step. To my knowledge it was the first MCP server published for a VNA.

Why I built it

RF measurement work is full of repetitive instrument setup: setting spans, IF bandwidths, calibration recall, marker placement, and exporting traces. MCP turns those routine sequences into tools an LLM can orchestrate, so the engineer stays focused on interpreting results rather than driving the box.

How it works

The server speaks SCPI over TCP/IP straight to the Copper Mountain software socket server (default port 5025) — no VISA layer, no proprietary middleware, just asyncio sockets. It surfaces 45 MCP tools spanning sweep configuration, calibration, S-parameter capture, marker math, and Touchstone export, so the agent calls vna_configure_sweep, vna_trigger_sweep, vna_get_s_parameter, or marker_search_min and gets structured data back — it never has to know the SCPI command set itself.

It’s validated against all four Copper Mountain families:

FamilyTypeS-parameters
RVNA1-port reflectometerS11
TRVNA2-port, 1-pathS11, S21
S2VNA2-port, full reversingS11 / S12 / S21 / S22
S4VNA4-portfull 4×4 matrix

Two surfaces sit over the same core: import the Python driver directly, or run it as an MCP server for AI-agent automation.

async with CopperMountainVNADriver("127.0.0.1", 5025) as vna:
    await vna.configure_sweep(SweepConfig(
        start_freq_hz=1e9, stop_freq_hz=2e9, num_points=201,
    ))
    await vna.trigger_sweep()
    s11    = await vna.get_s_parameter_data(SParameter.S11)
    marker = await vna.marker_search_min()   # best match in the band

…and over MCP, that whole sequence is just “sweep 1–2 GHz and tell me where S11 is deepest.”

Tech

Python with asyncio TCP/IP SCPI, exposed through the MCP server SDK. AGPL-3.0, and a member of my eng-mcp-suite of engineering MCP servers.

Not affiliated with or endorsed by Copper Mountain Technologies; “Copper Mountain” is their trademark. This is an independent open-source project.

Get it

Source, setup, and the full tool reference are on GitHub.