---
title: mcnanovna
description: MCP servers for NanoVNA control and antenna positioner automation
template: splash
hero:
  tagline: Give your AI direct control of RF test equipment
  image:
    file: ../../assets/hero.svg
  actions:
    - text: Get Started
      link: /getting-started/quickstart/
      icon: right-arrow
    - text: View on Gitea
      link: https://git.supported.systems/rf/mcnanovna
      icon: external
      variant: minimal
---

import { Card, CardGrid, Tabs, TabItem } from '@astrojs/starlight/components';
import { Image } from 'astro:assets';
import smithChart from '../../assets/screenshots/smith-chart.png';
import swrTrace from '../../assets/screenshots/swr-trace.png';
import lcMatch from '../../assets/screenshots/measure-lc-match.png';
import multiTrace from '../../assets/screenshots/multi-trace.png';
import nanoVNA from '../../assets/hardware/NanoVNA-H-2.jpg';

## What is this?

Two MCP servers that let AI assistants control RF test equipment:

<CardGrid stagger>
  <Card title="mcnanovna" icon="document">
    Controls NanoVNA-H vector network analyzers over USB serial.
    78 tools for sweeps, calibration, analysis, and 3D radiation patterns.
  </Card>
  <Card title="mcpositioner" icon="setting">
    Controls ESP32 dual-axis antenna positioners over WiFi.
    5 tools for stepper motor positioning and automated measurement grids.
  </Card>
  <Card title="Cross-Server Workflows" icon="rocket">
    Both servers work together for automated 3D antenna pattern measurement.
    The AI orchestrates positioning and VNA measurements across the grid.
  </Card>
  <Card title="Web UI" icon="laptop">
    Optional Three.js 3D viewer for radiation patterns.
    Real-time visualization as measurements are taken.
  </Card>
</CardGrid>

## What Can It Do?

Your AI assistant gains direct access to professional RF measurement capabilities:

<div class="screenshot-gallery">
  <figure>
    <Image src={smithChart} alt="Smith chart display showing impedance plot" width={320} />
    <figcaption>Impedance analysis on Smith chart</figcaption>
  </figure>
  <figure>
    <Image src={swrTrace} alt="SWR measurement trace" width={320} />
    <figcaption>SWR sweep across frequency</figcaption>
  </figure>
  <figure>
    <Image src={lcMatch} alt="LC matching network calculation" width={320} />
    <figcaption>Automatic LC match calculation</figcaption>
  </figure>
  <figure>
    <Image src={multiTrace} alt="Multiple trace display" width={320} />
    <figcaption>Multi-trace S-parameter display</figcaption>
  </figure>
</div>

## Quick Install

```bash
# Add both servers to Claude Code
claude mcp add mcnanovna -- uvx mcnanovna
claude mcp add mcpositioner -- uvx mcpositioner
```

Then ask Claude to analyze your antenna, measure a filter, or run a 3D pattern sweep.

## Hardware

<div class="hardware-section">
  <div class="hardware-text">
    <h3>NanoVNA-H</h3>
    <p>The NanoVNA-H (or H4) connects via USB serial and is auto-detected. No drivers needed on Linux — just plug in and go.</p>

    <h3>ESP32 Positioner</h3>
    <p>Optional dual-axis antenna positioner for automated 3D pattern measurement:</p>
    <ul>
      <li>2x NEMA 17 steppers + TMC2209 drivers</li>
      <li>StallGuard sensorless homing</li>
      <li>WiFi HTTP API for remote control</li>
      <li>Firmware and KiCad schematics included</li>
    </ul>
  </div>
  <figure class="hardware-image">
    <Image src={nanoVNA} alt="NanoVNA-H vector network analyzer" width={400} />
    <figcaption>NanoVNA-H — 50kHz to 1.5GHz VNA</figcaption>
  </figure>
</div>

## Example Prompts

Once installed, try asking your AI:

- *"Connect to my NanoVNA and sweep 7.0-7.3 MHz to check my 40m dipole"*
- *"Measure the insertion loss of this BPF from 144-148 MHz"*
- *"What's the impedance at the resonant frequency? Suggest an LC match."*
- *"Run a 3D radiation pattern sweep at 15° resolution"*
- *"Export the S11 data as a Touchstone file"*

<style>{`
  .screenshot-gallery {
    display: grid;
    grid-template-columns: repeat(auto-fit, minmax(280px, 1fr));
    gap: 1.5rem;
    margin: 2rem 0;
  }

  .screenshot-gallery figure {
    margin: 0;
    text-align: center;
  }

  .screenshot-gallery img {
    border-radius: 8px;
    border: 1px solid var(--sl-color-gray-5);
    box-shadow: 0 4px 12px rgba(0, 0, 0, 0.15);
    transition: transform 0.2s ease;
  }

  .screenshot-gallery img:hover {
    transform: scale(1.02);
  }

  .screenshot-gallery figcaption {
    margin-top: 0.5rem;
    font-size: 0.9rem;
    color: var(--sl-color-gray-2);
  }

  .hardware-section {
    display: grid;
    grid-template-columns: 1fr 1fr;
    gap: 2rem;
    align-items: start;
    margin: 1.5rem 0;
  }

  @media (max-width: 768px) {
    .hardware-section {
      grid-template-columns: 1fr;
    }
  }

  .hardware-section h3 {
    margin-top: 0;
    color: var(--sl-color-accent-high);
  }

  .hardware-image {
    margin: 0;
    text-align: center;
  }

  .hardware-image img {
    border-radius: 8px;
    box-shadow: 0 4px 16px rgba(0, 0, 0, 0.2);
  }

  .hardware-image figcaption {
    margin-top: 0.75rem;
    font-size: 0.9rem;
    color: var(--sl-color-gray-2);
  }
`}</style>
