Make docs MCP-client agnostic

Replace Claude-specific terminology with generic language:
- "Ask Claude:" → "Say:"
- "Claude will:" → "Your assistant will:"
- "Claude uses:" → "Calls:" / "This uses:"
- Architecture diagrams: "Claude Code" → "MCP Client"
- Installation tabs: "Claude Code" → "MCP Client" (with Claude Code as example)
- Prerequisites: list multiple MCP clients (Claude Code, Cursor, Zed)

Docs now work for any MCP-compatible client or custom implementation.
This commit is contained in:
Ryan Malloy 2026-02-05 12:56:26 -07:00
parent 62af53c9d1
commit 0e5553c661
11 changed files with 69 additions and 69 deletions

View File

@ -10,10 +10,12 @@ import { Tabs, TabItem, Aside } from '@astrojs/starlight/components';
### From PyPI (Recommended)
<Tabs>
<TabItem label="Claude Code">
<TabItem label="MCP Client">
For Claude Code:
```bash
claude mcp add mcnanovna -- uvx mcnanovna
```
For other MCP clients, configure `uvx mcnanovna` as a server.
</TabItem>
<TabItem label="Standalone">
```bash
@ -53,10 +55,12 @@ MCNANOVNA_WEB_PORT=8080 uv run mcnanovna
### From PyPI
<Tabs>
<TabItem label="Claude Code">
<TabItem label="MCP Client">
For Claude Code:
```bash
claude mcp add mcpositioner -- uvx mcpositioner
```
For other MCP clients, configure `uvx mcpositioner` as a server.
</TabItem>
<TabItem label="Standalone">
```bash
@ -94,15 +98,12 @@ mcpositioner requires the ESP32 positioner hardware. See [Hardware Build](/hardw
## Both Servers Together
For automated 3D antenna pattern measurement, run both servers:
For automated 3D antenna pattern measurement, add both servers to your MCP client:
```bash
# Add both to Claude Code
# Claude Code example
claude mcp add mcnanovna -- uvx mcnanovna
claude mcp add mcpositioner -- uvx mcpositioner
# Restart Claude Code to load both
claude
```
Then use the `measure_antenna_range` prompt to run automated pattern sweeps.

View File

@ -7,26 +7,25 @@ import { Steps, Tabs, TabItem, Aside } from '@astrojs/starlight/components';
## Prerequisites
- Claude Code CLI installed
- An MCP client (Claude Code, Cursor, Zed, or any MCP-compatible app)
- NanoVNA-H connected via USB
- Python 3.11+ (handled automatically by uvx)
## Installation
<Steps>
1. **Add the MCP server to Claude Code**
1. **Add the MCP server to your client**
For Claude Code:
```bash
claude mcp add mcnanovna -- uvx mcnanovna
```
2. **Start a new Claude Code session**
For other clients, configure `uvx mcnanovna` as an MCP server per your client's documentation.
```bash
claude
```
2. **Start a new session**
3. **Ask Claude to use your VNA**
3. **Ask your assistant to use your VNA**
Try these prompts:
- "Scan my antenna from 144 to 148 MHz"
@ -42,7 +41,7 @@ The VNA auto-connects on first tool call. No configuration needed if using defau
## Verify Connection
Ask Claude: "Get VNA info"
Try: *"Get VNA info"*
You should see device details like firmware version, serial number, and frequency range.

View File

@ -26,7 +26,7 @@ import nanoVNA from '../../assets/hardware/NanoVNA-H-2.jpg';
## What is this?
Two MCP servers that let Claude control RF test equipment:
Two MCP servers that let LLMs control RF test equipment:
<CardGrid stagger>
<Card title="mcnanovna" icon="document">
@ -39,7 +39,7 @@ Two MCP servers that let Claude control RF test equipment:
</Card>
<Card title="Cross-Server Workflows" icon="rocket">
Both servers work together for automated 3D antenna pattern measurement.
Claude orchestrates positioning and VNA measurements across the grid.
Your assistant orchestrates positioning and VNA measurements across the grid.
</Card>
<Card title="Web UI" icon="laptop">
Optional Three.js 3D viewer for radiation patterns.
@ -73,12 +73,12 @@ Direct access to professional RF measurement capabilities:
## Quick Install
```bash
# Add both servers to Claude Code
# Add both servers (Claude Code example)
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.
Then ask your assistant to analyze your antenna, measure a filter, or run a 3D pattern sweep.
## Hardware
@ -104,7 +104,7 @@ Then ask Claude to analyze your antenna, measure a filter, or run a 3D pattern s
## Example Prompts
Once installed, try asking Claude:
Once installed, try prompts like:
- *"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"*

View File

@ -5,7 +5,7 @@ description: MCP server for NanoVNA-H vector network analyzers
import { Aside } from '@astrojs/starlight/components';
mcnanovna gives Claude direct control of NanoVNA-H vector network analyzers over USB serial. It exposes 78 MCP tools for frequency sweeps, S-parameter measurements, calibration, LCD capture, RF analysis, and 3D antenna radiation pattern visualization.
mcnanovna gives LLMs direct control of NanoVNA-H vector network analyzers over USB serial. It exposes 78 MCP tools for frequency sweeps, S-parameter measurements, calibration, LCD capture, RF analysis, and 3D antenna radiation pattern visualization.
## Capabilities
@ -49,7 +49,7 @@ Other NanoVNA variants using the same USB serial protocol (VID 0x0483, PID 0x574
```
┌─────────────────────────────────────────────────────────┐
Claude Code
MCP Client
│ │ │
│ MCP Protocol │
│ ▼ │

View File

@ -5,7 +5,7 @@ description: Guided workflow prompts for mcnanovna
import { Aside } from '@astrojs/starlight/components';
Prompts are pre-built conversation templates that guide Claude through multi-step procedures. They set up context and provide step-by-step instructions for common workflows.
Prompts are pre-built conversation templates that guide your assistant through multi-step procedures. They set up context and provide step-by-step instructions for common workflows.
## Available Prompts

View File

@ -130,30 +130,30 @@ import { Tabs, TabItem } from '@astrojs/starlight/components';
```
User: Scan my antenna from 144 to 148 MHz with 201 points
Claude uses: sweep(144000000, 148000000, 201)
Claude uses: scan(s11=true)
Claude uses: analyze()
Calls: sweep(144000000, 148000000, 201)
Calls: scan(s11=true)
Calls: analyze()
```
</TabItem>
<TabItem label="Filter Analysis">
```
User: Analyze this bandpass filter from 1 to 500 MHz
Claude uses: sweep(1000000, 500000000, 201)
Claude uses: analyze_filter()
Calls: sweep(1000000, 500000000, 201)
Calls: analyze_filter()
```
</TabItem>
<TabItem label="Calibration">
```
User: Calibrate for the 2m band
Claude uses: sweep(144000000, 148000000, 101)
Claude uses: cal("load") # user connects load
Claude uses: cal("open") # user connects open
Claude uses: cal("short") # user connects short
Claude uses: cal("thru") # user connects through
Claude uses: cal("done")
Claude uses: save(0)
Calls: sweep(144000000, 148000000, 101)
Calls: cal("load") # user connects load
Calls: cal("open") # user connects open
Calls: cal("short") # user connects short
Calls: cal("thru") # user connects through
Calls: cal("done")
Calls: save(0)
```
</TabItem>
</Tabs>

View File

@ -5,7 +5,7 @@ description: MCP server for ESP32 dual-axis antenna positioner
import { Aside } from '@astrojs/starlight/components';
mcpositioner gives Claude control of an ESP32-based dual-axis antenna positioner over WiFi. It drives two NEMA 17 stepper motors via TMC2209 drivers for theta (polar, 0-180°) and phi (azimuth, 0-360°) rotation.
mcpositioner gives LLMs control of an ESP32-based dual-axis antenna positioner over WiFi. It drives two NEMA 17 stepper motors via TMC2209 drivers for theta (polar, 0-180°) and phi (azimuth, 0-360°) rotation.
## Purpose
@ -36,7 +36,7 @@ Full build instructions and KiCad schematics are in the [Hardware section](/hard
```
┌─────────────────────────────────────────────────────────┐
Claude Code
MCP Client
│ │ │
│ MCP Protocol │
│ ▼ │

View File

@ -86,12 +86,12 @@ This prompt requires both mcpositioner AND mcnanovna MCP servers to be running.
## Using Prompts
In Claude Code, invoke prompts by name:
Invoke prompts by name:
```
User: Run the measure_pattern_grid prompt for my Yagi on 70cm
Claude: [Uses measure_pattern_grid prompt with antenna_type="yagi", band="70cm"]
[Uses measure_pattern_grid prompt with antenna_type="yagi", band="70cm"]
```
The prompt provides step-by-step guidance, and Claude executes the tools from both mcpositioner and mcnanovna as needed.
The prompt provides step-by-step guidance, and your assistant executes the tools from both mcpositioner and mcnanovna as needed.

View File

@ -11,9 +11,9 @@ This tutorial covers common antenna analysis tasks using mcnanovna.
The most common antenna measurement is SWR (Standing Wave Ratio) and impedance at the feedpoint.
Ask Claude: "Analyze my antenna from 144 to 148 MHz"
Say: "Analyze my antenna from 144 to 148 MHz"
Claude will:
Your assistant will:
1. Run a sweep across the band
2. Find the resonant frequency (minimum SWR)
3. Calculate impedance at resonance
@ -32,17 +32,17 @@ Return loss at resonance: -23.4 dB
For antennas with multiple resonances (like a multi-band antenna):
Ask Claude: "Find all resonances from 1 to 30 MHz"
Say: "Find all resonances from 1 to 30 MHz"
Claude uses `analyze_s11_resonance` to find all points where the antenna is resonant.
This uses `analyze_s11_resonance` to find all points where the antenna is resonant.
## Impedance Matching
If your antenna doesn't match 50Ω, design a matching network:
Ask Claude: "Design a matching network for 35+j25 ohms at 145 MHz"
Say: "Design a matching network for 35+j25 ohms at 145 MHz"
Claude uses `analyze_lc_match` to compute L-network solutions:
This uses `analyze_lc_match` to compute L-network solutions:
```
Solution 1: Series L (27 nH) + Shunt C (18 pF)
Solution 2: Shunt C (12 pF) + Series L (42 nH)
@ -57,7 +57,7 @@ Solution 2: Shunt C (12 pF) + Series L (42 nH)
- Narrow bandwidth
- Figure-8 radiation pattern
Ask Claude: "Analyze my dipole on 20m"
Say: "Analyze my dipole on 20m"
</TabItem>
<TabItem label="Vertical">
**Expected characteristics:**
@ -65,7 +65,7 @@ Solution 2: Shunt C (12 pF) + Series L (42 nH)
- Needs matching network or radials
- Omnidirectional pattern
Ask Claude: "Analyze my vertical on 40m"
Say: "Analyze my vertical on 40m"
</TabItem>
<TabItem label="Yagi">
**Expected characteristics:**
@ -73,7 +73,7 @@ Solution 2: Shunt C (12 pF) + Series L (42 nH)
- Narrow bandwidth
- Directional pattern
Ask Claude: "Analyze my Yagi from 144 to 148 MHz"
Say: "Analyze my Yagi from 144 to 148 MHz"
</TabItem>
<TabItem label="Loop">
**Expected characteristics:**
@ -81,7 +81,7 @@ Solution 2: Shunt C (12 pF) + Series L (42 nH)
- High Q (narrow bandwidth)
- Figure-8 pattern (small loop)
Ask Claude: "Analyze my magnetic loop on 40m"
Say: "Analyze my magnetic loop on 40m"
</TabItem>
</Tabs>
@ -114,7 +114,7 @@ For a dipole, each side is approximately λ/4 in length. At 145 MHz, that's abou
The antenna is resonant but not at 50Ω.
Ask Claude: "Design a matching network for my measured impedance"
Say: "Design a matching network for my measured impedance"
### Narrow bandwidth
@ -127,7 +127,7 @@ High-Q antennas (small loops, loaded verticals) have narrow bandwidth. Options:
For a quick analytical pattern based on antenna type:
Ask Claude: "Show the radiation pattern for my dipole"
Say: "Show the radiation pattern for my dipole"
This uses the S11 data to determine resonance and impedance, then generates an idealized 3D pattern.

View File

@ -34,7 +34,7 @@ An SMA calibration kit includes precision standards. For casual use, a 50Ω term
<Steps>
1. **Set the sweep range**
Ask Claude: "Set sweep from 144 to 148 MHz with 101 points"
Say: "Set sweep from 144 to 148 MHz with 101 points"
Calibration is frequency-specific. Always calibrate at the frequencies you'll measure.
@ -42,43 +42,43 @@ An SMA calibration kit includes precision standards. For casual use, a 50Ω term
Connect the 50Ω load termination to Port 1.
Ask Claude: "Run cal load"
Say: "Run cal load"
3. **Connect the OPEN**
Remove the load, leave Port 1 open (or use an open standard).
Ask Claude: "Run cal open"
Say: "Run cal open"
4. **Connect the SHORT**
Connect the short standard to Port 1.
Ask Claude: "Run cal short"
Say: "Run cal short"
5. **Connect the THROUGH**
Connect Port 1 to Port 2 with a short cable or barrel adapter.
Ask Claude: "Run cal thru"
Say: "Run cal thru"
6. **Optional: Isolation**
Connect 50Ω loads to both ports.
Ask Claude: "Run cal isoln"
Say: "Run cal isoln"
This corrects for crosstalk between ports.
7. **Apply calibration**
Ask Claude: "Run cal done"
Say: "Run cal done"
This computes and applies the error correction coefficients.
8. **Save calibration**
Ask Claude: "Save calibration to slot 0"
Say: "Save calibration to slot 0"
Saves to NanoVNA flash for later recall.
</Steps>
@ -109,7 +109,7 @@ Each slot holds one calibration. Common approach:
## Recalling Calibration
Ask Claude: "Recall calibration from slot 0"
Say: "Recall calibration from slot 0"
The NanoVNA will use the stored calibration. Note that calibration must match the current sweep settings.

View File

@ -11,7 +11,7 @@ This tutorial walks through measuring a complete 3D antenna radiation pattern us
- NanoVNA-H connected via USB
- ESP32 positioner built and on WiFi
- Both MCP servers added to Claude Code:
- Both MCP servers added to your client (e.g., for Claude Code):
```bash
claude mcp add mcnanovna -- uvx mcnanovna
claude mcp add mcpositioner -- uvx mcpositioner
@ -56,27 +56,27 @@ For accurate patterns, the transmit antenna should have a known, broad pattern (
<Steps>
1. **Verify both servers are connected**
Ask Claude: "Check positioner status and VNA info"
Say: "Check positioner status and VNA info"
Claude will call `positioner_status` and `info` to verify both devices respond.
This will call `positioner_status` and `info` to verify both devices respond.
2. **Home the positioner**
Ask Claude: "Home the positioner on both axes"
Say: "Home the positioner on both axes"
This establishes the reference position (theta=0, phi=0).
3. **Calibrate the VNA**
Ask Claude: "Calibrate for the 2m band"
Say: "Calibrate for the 2m band"
Follow the SOLT calibration procedure. This is critical for accurate S21 measurements.
4. **Run the pattern measurement**
Ask Claude: "Measure a 3D radiation pattern for my dipole antenna on 2m"
Say: "Measure a 3D radiation pattern for my dipole antenna on 2m"
Claude uses the `measure_pattern_grid` prompt to guide the measurement:
This uses the `measure_pattern_grid` prompt to guide the measurement:
- Confirms grid resolution (default: 5° theta × 10° phi)
- Moves through each grid point in serpentine order
- Measures S21 at each position
@ -86,7 +86,7 @@ For accurate patterns, the transmit antenna should have a known, broad pattern (
If the mcnanovna web UI is running (`MCNANOVNA_WEB_PORT=8080`), the pattern renders in 3D automatically.
Or ask Claude: "Show the pattern statistics"
Or say: *"Show the pattern statistics"*
</Steps>
## Resolution Tradeoffs