copper-mountain-vna-mcp
Enables AI agents to control Copper Mountain Vector Network Analyzers over TCP/IP SCPI, offering 45 tools for sweep configuration, calibration, measurement, and Touchstone export.
README
<div align="center">
<img src="assets/logo-banner.svg" alt="copper-mountain-vna-mcp — Copper Mountain VNA control over SCPI" width="100%"/>
<br/>
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
</div>
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-mcp
Or 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
<table> <tr> <td valign="top" width="50%">
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())
</td> <td valign="top" width="50%">
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.
</td> </tr> </table>
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:5025
Or in the GUI: System > Socket Server > Enable.
Configuration
Configure via environment variables or .env file:
| Variable | Default | Description |
|---|---|---|
VNA_DEFAULT_HOST |
127.0.0.1 |
VNA software host IP |
VNA_DEFAULT_PORT |
5025 |
Socket server port |
VNA_CONNECTION_TIMEOUT |
5.0 |
TCP connection timeout (s) |
VNA_COMMAND_TIMEOUT |
30.0 |
SCPI command timeout (s) |
VNA_MAX_POWER_DBM |
10 |
Max output power |
VNA_MIN_POWER_DBM |
-55 |
Min output power |
VNA_MAX_FREQUENCY_HZ |
20e9 |
Upper sweep bound |
VNA_MAX_POINTS |
10001 |
Maximum sweep points |
Tools
45 MCP tools, grouped:
| Group | Tools |
|---|---|
| Connection | vna_discover, vna_connect, vna_disconnect, vna_identify, vna_get_status |
| Configuration | vna_configure_sweep, vna_set_center_span, vna_set_averaging, vna_set_port_power, vna_output_on, vna_output_off |
| Measurement | vna_trigger_sweep, vna_get_s_parameter, vna_measure_return_loss, vna_measure_vswr, vna_measure_insertion_loss |
| Markers | vna_set_marker, vna_get_marker, vna_marker_search_min, vna_marker_search_max, vna_marker_bandwidth |
| Calibration | vna_calibration_status, vna_calibration_start, vna_calibration_measure_standard, vna_calibration_apply, vna_correction_on, vna_correction_off |
| Export | vna_save_touchstone, vna_save_screenshot |
| Templates | vna_list_templates, vna_load_template, vna_apply_template |
| State | vna_save_state, vna_load_state, vna_get_full_state |
| Limits | vna_define_limit, vna_check_limits, vna_list_limits, vna_clear_limits |
| Software | vna_software_show, vna_software_hide |
| Low-level SCPI | vna_scpi_send, vna_scpi_query, vna_reset, vna_preset |
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 | antenna_wifi_24ghz, antenna_ble_24ghz, antenna_wifi_5ghz, antenna_wifi_5ghz_unii1/unii3, antenna_wifi_6ghz, antenna_wifi_dual_band, antenna_wifi_tri_band |
| Antennas — MIMO | antenna_mimo_wifi_24ghz, antenna_mimo_wifi_5ghz, antenna_mimo_wifi_dual_band, antenna_mimo_cellular |
| Antennas — ISM/cellular/GNSS | antenna_ism_us915, antenna_ism_eu868, antenna_ism_worldwide, antenna_cellular, antenna_gps_l1, antenna_gnss_dual_band, antenna_nfc |
| Antennas — UWB | antenna_uwb_channel_5, antenna_uwb_channel_9, antenna_uwb_full_band |
| Cables | cable_dc_2_4ghz, cable_dc_8_5ghz |
| Filters | filter_wifi_24ghz, filter_wifi_5ghz, filter_ism_915mhz, filter_gps_l1, filter_bandpass_custom, filter_lowpass_custom |
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-automation
Documentation
- 📘 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.
- 📝 Changelog
Part of eng-mcp-suite
<sub>This MCP server is part of</sub>
<sub>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.</sub>
| Domain | Sibling MCPs |
|---|---|
| RF / Transmission lines | lineforge |
| EMC regulatory | mcp-emc-regulations |
| EM simulation | mcp-openems, mcp-nec2-antenna |
| Diagrams | drawio-engineering-mcp |
| 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_mcp - Open 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.
<div align="center">
<sub>Part of <a href="https://github.com/RFingAdam/eng-mcp-suite">eng-mcp-suite</a> — built for RF engineers, PCB designers, EMC labs, and AI agents.</sub>
</div>
推荐服务器
Baidu Map
百度地图核心API现已全面兼容MCP协议,是国内首家兼容MCP协议的地图服务商。
Playwright MCP Server
一个模型上下文协议服务器,它使大型语言模型能够通过结构化的可访问性快照与网页进行交互,而无需视觉模型或屏幕截图。
Magic Component Platform (MCP)
一个由人工智能驱动的工具,可以从自然语言描述生成现代化的用户界面组件,并与流行的集成开发环境(IDE)集成,从而简化用户界面开发流程。
Audiense Insights MCP Server
通过模型上下文协议启用与 Audiense Insights 账户的交互,从而促进营销洞察和受众数据的提取和分析,包括人口统计信息、行为和影响者互动。
VeyraX
一个单一的 MCP 工具,连接你所有喜爱的工具:Gmail、日历以及其他 40 多个工具。
graphlit-mcp-server
模型上下文协议 (MCP) 服务器实现了 MCP 客户端与 Graphlit 服务之间的集成。 除了网络爬取之外,还可以将任何内容(从 Slack 到 Gmail 再到播客订阅源)导入到 Graphlit 项目中,然后从 MCP 客户端检索相关内容。
Kagi MCP Server
一个 MCP 服务器,集成了 Kagi 搜索功能和 Claude AI,使 Claude 能够在回答需要最新信息的问题时执行实时网络搜索。
e2b-mcp-server
使用 MCP 通过 e2b 运行代码。
Neon MCP Server
用于与 Neon 管理 API 和数据库交互的 MCP 服务器
Exa MCP Server
模型上下文协议(MCP)服务器允许像 Claude 这样的 AI 助手使用 Exa AI 搜索 API 进行网络搜索。这种设置允许 AI 模型以安全和受控的方式获取实时的网络信息。