copper-mountain-vna-mcp
Click on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@copper-mountain-vna-mcpSweep 1-2 GHz at 201 points and return S11 data."
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
Drive Copper Mountain Vector Network Analyzers from any MCP-compatible AI client. TCP/IP SCPI over the wire — 45 tools spanning sweep, calibration, measurement, and export.
Quick start · Tools · Workflows · Documentation
What is copper-mountain-vna-mcp?
copper-mountain-vna-mcp is a Model Context Protocol
server that exposes a Copper Mountain VNA — RVNA, TRVNA, S2VNA, or S4VNA family
— to any MCP-capable AI assistant. The server speaks raw TCP/IP SCPI to the
Copper Mountain software socket server (default port 5025), then surfaces
sweep configuration, calibration, S-parameter capture, marker math, and
Touchstone export as plain MCP tools.
Drive it from Claude Desktop, Claude Code, VS Code Copilot, or any other MCP
client. SCPI is generated server-side, so the AI agent never needs to know the
underlying command set — it just calls vna_configure_sweep, vna_trigger_sweep,
vna_get_s_parameter and gets back structured data.
What copper-mountain-vna-mcp does well:
🤖 AI-native via MCP. First-class Model Context Protocol server with 45 tools. Any Claude / LLM agent can drive it.
🐍 Python + MCP surfaces. Import
coppermountain_vna_mcpfor direct driver access, or run as an MCP server for AI-agent automation.⚡ Direct TCP/IP SCPI. No VISA dependency, no proprietary middleware — just asyncio sockets straight to the Copper Mountain software socket server.
✅ Validated against 4 VNA families. RVNA (S11), TRVNA (S11/S21), S2VNA (full 2-port), S4VNA (full 4×4).
🔒 AGPL-3.0-or-later. Network-copyleft open-source. Independent of Copper Mountain Technologies (trademark disclaimer below).
Disclaimer: This project is not affiliated with, endorsed by, or sponsored by Copper Mountain Technologies. "Copper Mountain" is a trademark of Copper Mountain Technologies. This is an independent open-source project.
Quick start
Install
pip install coppermountain-vna-mcpOr from source:
git clone https://github.com/RFingAdam/copper-mountain-vna-mcp.git
cd copper-mountain-vna-mcp
pip install -e ".[dev]"Supported instruments
Family | Description | Example models | S-parameters |
RVNA | 1-port reflectometer | R54, R60 | S11 |
TRVNA | 2-port 1-path | TR1300 | S11, S21 |
S2VNA | 2-port full reversing | M5090, Planar 804/1 | S11, S12, S21, S22 |
S4VNA | 4-port full | S5048 | Full 4×4 matrix |
Two surfaces, same answer
Python
import asyncio
from coppermountain_vna_mcp.driver import CopperMountainVNADriver
from coppermountain_vna_mcp.models import SParameter, SweepConfig
async def main():
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, if_bandwidth_hz=1000, power_dbm=0,
))
await vna.trigger_sweep()
data = await vna.get_s_parameter_data(SParameter.S11)
marker = await vna.marker_search_min()
print(f"Best match: {marker.frequency_hz/1e9:.3f} GHz @ {marker.magnitude_db:.1f} dB")
asyncio.run(main())MCP (Claude Desktop, Claude Code, any MCP client)
{
"mcpServers": {
"copper-mountain-vna": {
"command": "python",
"args": ["-m", "coppermountain_vna_mcp"],
"env": {
"VNA_DEFAULT_HOST": "127.0.0.1",
"VNA_DEFAULT_PORT": "5025"
}
}
}
}Then ask your assistant in plain English:
"Connect to the VNA on 127.0.0.1, sweep 1–2 GHz at 201 points, and tell me where S11 is best matched."
The agent will call vna_connect, vna_configure_sweep, vna_trigger_sweep,
and vna_marker_search_min in sequence and report the result.
Start the VNA software socket server
The VNA software runs on Windows. Enable the socket server via command line:
:: S2VNA / S4VNA
S2VNA.exe /SocketServer:on /SocketPort:5025 /visible:on
:: RVNA / TRVNA
RVNA.exe EnableSocket:5025Or in the GUI: System > Socket Server > Enable.
Configuration
Configure via environment variables or .env file:
Variable | Default | Description |
|
| VNA software host IP |
|
| Socket server port |
|
| TCP connection timeout (s) |
|
| SCPI command timeout (s) |
|
| Max output power |
|
| Min output power |
|
| Upper sweep bound |
|
| Maximum sweep points |
Tools
45 MCP tools, grouped:
Group | Tools |
Connection |
|
Configuration |
|
Measurement |
|
Markers |
|
Calibration |
|
Export |
|
Templates |
|
State |
|
Limits |
|
Software |
|
Low-level SCPI |
|
Full tool reference in docs/tools.md.
Calibration
Standard cal flows are exposed as discrete tools so an agent can walk them step by step.
SOL (1-port reflection):
vna_calibration_start(method="SOL")vna_calibration_measure_standard(standard="SHORT", port_num=1)vna_calibration_measure_standard(standard="OPEN", port_num=1)vna_calibration_measure_standard(standard="LOAD", port_num=1)vna_calibration_apply()vna_correction_on()
SOLT (2-port full): SHORT/OPEN/LOAD on both ports, then THRU between
them, then apply.
Calibration is frequency-specific — recalibrate when the sweep range changes substantially.
Measurement templates
Pre-configured sweep + marker + trace setups for common DUT classes. Load by
name with vna_load_template, then vna_apply_template to push to the VNA.
Category | Examples |
Antennas — WiFi/BLE |
|
Antennas — MIMO |
|
Antennas — ISM/cellular/GNSS |
|
Antennas — UWB |
|
Cables |
|
Filters |
|
await vna.load_template("antenna_wifi_5ghz")
await vna.apply_template()
# Custom filter — provide parameters at load time
await vna.load_template("filter_bandpass_custom",
center_freq_hz=1.5e9, bandwidth_hz=100e6)
await vna.apply_template()Workflows
copper-mountain-vna-mcp fits in the following eng-mcp-suite
workflow bundles:
lab-automation— pair withmcp-rs-spectrum-analyzer,mcp-rs-siggen, andmcp-rs-cmw500for end-to-end RF bench-test workflows driven from a single agent session.antenna-tuning— feed return-loss / VSWR traces intomcp-nec2-antennaormcp-openemsfor iterative match optimization.
Install the bundle with:
eng-mcp-suite install --workflow lab-automationDocumentation
📘 Quick Start — install through first call.
🛠️ Tool reference — every MCP tool, every argument.
📐 Usage examples — a practical end-to-end S11 walkthrough.
🏗️ Architecture — how this MCP fits in eng-mcp-suite.
Part of eng-mcp-suite
This MCP server is part of
Part of eng-mcp-suite — an open
umbrella of MCP servers for RF / EMC / PCB / signal-integrity engineering. Drop
into the lab-automation workflow bundle with
eng-mcp-suite install --workflow lab-automation.
Domain | Sibling MCPs |
RF / Transmission lines | |
EMC regulatory | |
EM simulation | mcp-openems, mcp-nec2-antenna |
Diagrams | |
Lab gear | copper-mountain-vna-mcp · mcp-rs-spectrum-analyzer · mcp-rs-siggen · mcp-rs-cmw500 |
Contributing
Contributions welcome.
Pick a GitHub issue.
Fork + branch (
feature/your-thingorfix/your-bug).Run the local check suite:
ruff check . && mypy src/coppermountain_vna_mcp pytest --cov=coppermountain_vna_mcpOpen a PR — link the issue, request review.
License
AGPL-3.0-or-later. Copyright 2025-2026 Adam Engelbrecht (RFingAdam). Relicensed from Apache-2.0 in v0.3.0 to align with the eng-mcp-suite toolkit-wide AGPL move.
Acknowledgments
Copper Mountain Technologies — for documenting the SCPI command set used by RVNA / TRVNA / S2VNA / S4VNA software.
The MCP working group — for the Model Context Protocol specification.
Part of eng-mcp-suite — built for RF engineers, PCB designers, EMC labs, and AI agents.
This server cannot be installed
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Latest Blog Posts
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/RFingAdam/copper-mountain-vna-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server