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:
parent
62af53c9d1
commit
0e5553c661
@ -10,10 +10,12 @@ import { Tabs, TabItem, Aside } from '@astrojs/starlight/components';
|
|||||||
### From PyPI (Recommended)
|
### From PyPI (Recommended)
|
||||||
|
|
||||||
<Tabs>
|
<Tabs>
|
||||||
<TabItem label="Claude Code">
|
<TabItem label="MCP Client">
|
||||||
|
For Claude Code:
|
||||||
```bash
|
```bash
|
||||||
claude mcp add mcnanovna -- uvx mcnanovna
|
claude mcp add mcnanovna -- uvx mcnanovna
|
||||||
```
|
```
|
||||||
|
For other MCP clients, configure `uvx mcnanovna` as a server.
|
||||||
</TabItem>
|
</TabItem>
|
||||||
<TabItem label="Standalone">
|
<TabItem label="Standalone">
|
||||||
```bash
|
```bash
|
||||||
@ -53,10 +55,12 @@ MCNANOVNA_WEB_PORT=8080 uv run mcnanovna
|
|||||||
### From PyPI
|
### From PyPI
|
||||||
|
|
||||||
<Tabs>
|
<Tabs>
|
||||||
<TabItem label="Claude Code">
|
<TabItem label="MCP Client">
|
||||||
|
For Claude Code:
|
||||||
```bash
|
```bash
|
||||||
claude mcp add mcpositioner -- uvx mcpositioner
|
claude mcp add mcpositioner -- uvx mcpositioner
|
||||||
```
|
```
|
||||||
|
For other MCP clients, configure `uvx mcpositioner` as a server.
|
||||||
</TabItem>
|
</TabItem>
|
||||||
<TabItem label="Standalone">
|
<TabItem label="Standalone">
|
||||||
```bash
|
```bash
|
||||||
@ -94,15 +98,12 @@ mcpositioner requires the ESP32 positioner hardware. See [Hardware Build](/hardw
|
|||||||
|
|
||||||
## Both Servers Together
|
## 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
|
```bash
|
||||||
# Add both to Claude Code
|
# Claude Code example
|
||||||
claude mcp add mcnanovna -- uvx mcnanovna
|
claude mcp add mcnanovna -- uvx mcnanovna
|
||||||
claude mcp add mcpositioner -- uvx mcpositioner
|
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.
|
Then use the `measure_antenna_range` prompt to run automated pattern sweeps.
|
||||||
|
|||||||
@ -7,26 +7,25 @@ import { Steps, Tabs, TabItem, Aside } from '@astrojs/starlight/components';
|
|||||||
|
|
||||||
## Prerequisites
|
## Prerequisites
|
||||||
|
|
||||||
- Claude Code CLI installed
|
- An MCP client (Claude Code, Cursor, Zed, or any MCP-compatible app)
|
||||||
- NanoVNA-H connected via USB
|
- NanoVNA-H connected via USB
|
||||||
- Python 3.11+ (handled automatically by uvx)
|
- Python 3.11+ (handled automatically by uvx)
|
||||||
|
|
||||||
## Installation
|
## Installation
|
||||||
|
|
||||||
<Steps>
|
<Steps>
|
||||||
1. **Add the MCP server to Claude Code**
|
1. **Add the MCP server to your client**
|
||||||
|
|
||||||
|
For Claude Code:
|
||||||
```bash
|
```bash
|
||||||
claude mcp add mcnanovna -- uvx mcnanovna
|
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
|
2. **Start a new session**
|
||||||
claude
|
|
||||||
```
|
|
||||||
|
|
||||||
3. **Ask Claude to use your VNA**
|
3. **Ask your assistant to use your VNA**
|
||||||
|
|
||||||
Try these prompts:
|
Try these prompts:
|
||||||
- "Scan my antenna from 144 to 148 MHz"
|
- "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
|
## Verify Connection
|
||||||
|
|
||||||
Ask Claude: "Get VNA info"
|
Try: *"Get VNA info"*
|
||||||
|
|
||||||
You should see device details like firmware version, serial number, and frequency range.
|
You should see device details like firmware version, serial number, and frequency range.
|
||||||
|
|
||||||
|
|||||||
@ -26,7 +26,7 @@ import nanoVNA from '../../assets/hardware/NanoVNA-H-2.jpg';
|
|||||||
|
|
||||||
## What is this?
|
## 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>
|
<CardGrid stagger>
|
||||||
<Card title="mcnanovna" icon="document">
|
<Card title="mcnanovna" icon="document">
|
||||||
@ -39,7 +39,7 @@ Two MCP servers that let Claude control RF test equipment:
|
|||||||
</Card>
|
</Card>
|
||||||
<Card title="Cross-Server Workflows" icon="rocket">
|
<Card title="Cross-Server Workflows" icon="rocket">
|
||||||
Both servers work together for automated 3D antenna pattern measurement.
|
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>
|
||||||
<Card title="Web UI" icon="laptop">
|
<Card title="Web UI" icon="laptop">
|
||||||
Optional Three.js 3D viewer for radiation patterns.
|
Optional Three.js 3D viewer for radiation patterns.
|
||||||
@ -73,12 +73,12 @@ Direct access to professional RF measurement capabilities:
|
|||||||
## Quick Install
|
## Quick Install
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
# Add both servers to Claude Code
|
# Add both servers (Claude Code example)
|
||||||
claude mcp add mcnanovna -- uvx mcnanovna
|
claude mcp add mcnanovna -- uvx mcnanovna
|
||||||
claude mcp add mcpositioner -- uvx mcpositioner
|
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
|
## Hardware
|
||||||
|
|
||||||
@ -104,7 +104,7 @@ Then ask Claude to analyze your antenna, measure a filter, or run a 3D pattern s
|
|||||||
|
|
||||||
## Example Prompts
|
## 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"*
|
- *"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"*
|
- *"Measure the insertion loss of this BPF from 144-148 MHz"*
|
||||||
|
|||||||
@ -5,7 +5,7 @@ description: MCP server for NanoVNA-H vector network analyzers
|
|||||||
|
|
||||||
import { Aside } from '@astrojs/starlight/components';
|
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
|
## Capabilities
|
||||||
|
|
||||||
@ -49,7 +49,7 @@ Other NanoVNA variants using the same USB serial protocol (VID 0x0483, PID 0x574
|
|||||||
|
|
||||||
```
|
```
|
||||||
┌─────────────────────────────────────────────────────────┐
|
┌─────────────────────────────────────────────────────────┐
|
||||||
│ Claude Code │
|
│ MCP Client │
|
||||||
│ │ │
|
│ │ │
|
||||||
│ MCP Protocol │
|
│ MCP Protocol │
|
||||||
│ ▼ │
|
│ ▼ │
|
||||||
|
|||||||
@ -5,7 +5,7 @@ description: Guided workflow prompts for mcnanovna
|
|||||||
|
|
||||||
import { Aside } from '@astrojs/starlight/components';
|
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
|
## Available Prompts
|
||||||
|
|
||||||
|
|||||||
@ -130,30 +130,30 @@ import { Tabs, TabItem } from '@astrojs/starlight/components';
|
|||||||
```
|
```
|
||||||
User: Scan my antenna from 144 to 148 MHz with 201 points
|
User: Scan my antenna from 144 to 148 MHz with 201 points
|
||||||
|
|
||||||
Claude uses: sweep(144000000, 148000000, 201)
|
Calls: sweep(144000000, 148000000, 201)
|
||||||
Claude uses: scan(s11=true)
|
Calls: scan(s11=true)
|
||||||
Claude uses: analyze()
|
Calls: analyze()
|
||||||
```
|
```
|
||||||
</TabItem>
|
</TabItem>
|
||||||
<TabItem label="Filter Analysis">
|
<TabItem label="Filter Analysis">
|
||||||
```
|
```
|
||||||
User: Analyze this bandpass filter from 1 to 500 MHz
|
User: Analyze this bandpass filter from 1 to 500 MHz
|
||||||
|
|
||||||
Claude uses: sweep(1000000, 500000000, 201)
|
Calls: sweep(1000000, 500000000, 201)
|
||||||
Claude uses: analyze_filter()
|
Calls: analyze_filter()
|
||||||
```
|
```
|
||||||
</TabItem>
|
</TabItem>
|
||||||
<TabItem label="Calibration">
|
<TabItem label="Calibration">
|
||||||
```
|
```
|
||||||
User: Calibrate for the 2m band
|
User: Calibrate for the 2m band
|
||||||
|
|
||||||
Claude uses: sweep(144000000, 148000000, 101)
|
Calls: sweep(144000000, 148000000, 101)
|
||||||
Claude uses: cal("load") # user connects load
|
Calls: cal("load") # user connects load
|
||||||
Claude uses: cal("open") # user connects open
|
Calls: cal("open") # user connects open
|
||||||
Claude uses: cal("short") # user connects short
|
Calls: cal("short") # user connects short
|
||||||
Claude uses: cal("thru") # user connects through
|
Calls: cal("thru") # user connects through
|
||||||
Claude uses: cal("done")
|
Calls: cal("done")
|
||||||
Claude uses: save(0)
|
Calls: save(0)
|
||||||
```
|
```
|
||||||
</TabItem>
|
</TabItem>
|
||||||
</Tabs>
|
</Tabs>
|
||||||
|
|||||||
@ -5,7 +5,7 @@ description: MCP server for ESP32 dual-axis antenna positioner
|
|||||||
|
|
||||||
import { Aside } from '@astrojs/starlight/components';
|
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
|
## Purpose
|
||||||
|
|
||||||
@ -36,7 +36,7 @@ Full build instructions and KiCad schematics are in the [Hardware section](/hard
|
|||||||
|
|
||||||
```
|
```
|
||||||
┌─────────────────────────────────────────────────────────┐
|
┌─────────────────────────────────────────────────────────┐
|
||||||
│ Claude Code │
|
│ MCP Client │
|
||||||
│ │ │
|
│ │ │
|
||||||
│ MCP Protocol │
|
│ MCP Protocol │
|
||||||
│ ▼ │
|
│ ▼ │
|
||||||
|
|||||||
@ -86,12 +86,12 @@ This prompt requires both mcpositioner AND mcnanovna MCP servers to be running.
|
|||||||
|
|
||||||
## Using Prompts
|
## 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
|
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.
|
||||||
|
|||||||
@ -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.
|
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
|
1. Run a sweep across the band
|
||||||
2. Find the resonant frequency (minimum SWR)
|
2. Find the resonant frequency (minimum SWR)
|
||||||
3. Calculate impedance at resonance
|
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):
|
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
|
## Impedance Matching
|
||||||
|
|
||||||
If your antenna doesn't match 50Ω, design a matching network:
|
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 1: Series L (27 nH) + Shunt C (18 pF)
|
||||||
Solution 2: Shunt C (12 pF) + Series L (42 nH)
|
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
|
- Narrow bandwidth
|
||||||
- Figure-8 radiation pattern
|
- Figure-8 radiation pattern
|
||||||
|
|
||||||
Ask Claude: "Analyze my dipole on 20m"
|
Say: "Analyze my dipole on 20m"
|
||||||
</TabItem>
|
</TabItem>
|
||||||
<TabItem label="Vertical">
|
<TabItem label="Vertical">
|
||||||
**Expected characteristics:**
|
**Expected characteristics:**
|
||||||
@ -65,7 +65,7 @@ Solution 2: Shunt C (12 pF) + Series L (42 nH)
|
|||||||
- Needs matching network or radials
|
- Needs matching network or radials
|
||||||
- Omnidirectional pattern
|
- Omnidirectional pattern
|
||||||
|
|
||||||
Ask Claude: "Analyze my vertical on 40m"
|
Say: "Analyze my vertical on 40m"
|
||||||
</TabItem>
|
</TabItem>
|
||||||
<TabItem label="Yagi">
|
<TabItem label="Yagi">
|
||||||
**Expected characteristics:**
|
**Expected characteristics:**
|
||||||
@ -73,7 +73,7 @@ Solution 2: Shunt C (12 pF) + Series L (42 nH)
|
|||||||
- Narrow bandwidth
|
- Narrow bandwidth
|
||||||
- Directional pattern
|
- Directional pattern
|
||||||
|
|
||||||
Ask Claude: "Analyze my Yagi from 144 to 148 MHz"
|
Say: "Analyze my Yagi from 144 to 148 MHz"
|
||||||
</TabItem>
|
</TabItem>
|
||||||
<TabItem label="Loop">
|
<TabItem label="Loop">
|
||||||
**Expected characteristics:**
|
**Expected characteristics:**
|
||||||
@ -81,7 +81,7 @@ Solution 2: Shunt C (12 pF) + Series L (42 nH)
|
|||||||
- High Q (narrow bandwidth)
|
- High Q (narrow bandwidth)
|
||||||
- Figure-8 pattern (small loop)
|
- Figure-8 pattern (small loop)
|
||||||
|
|
||||||
Ask Claude: "Analyze my magnetic loop on 40m"
|
Say: "Analyze my magnetic loop on 40m"
|
||||||
</TabItem>
|
</TabItem>
|
||||||
</Tabs>
|
</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Ω.
|
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
|
### 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:
|
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.
|
This uses the S11 data to determine resonance and impedance, then generates an idealized 3D pattern.
|
||||||
|
|
||||||
|
|||||||
@ -34,7 +34,7 @@ An SMA calibration kit includes precision standards. For casual use, a 50Ω term
|
|||||||
<Steps>
|
<Steps>
|
||||||
1. **Set the sweep range**
|
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.
|
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.
|
Connect the 50Ω load termination to Port 1.
|
||||||
|
|
||||||
Ask Claude: "Run cal load"
|
Say: "Run cal load"
|
||||||
|
|
||||||
3. **Connect the OPEN**
|
3. **Connect the OPEN**
|
||||||
|
|
||||||
Remove the load, leave Port 1 open (or use an open standard).
|
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**
|
4. **Connect the SHORT**
|
||||||
|
|
||||||
Connect the short standard to Port 1.
|
Connect the short standard to Port 1.
|
||||||
|
|
||||||
Ask Claude: "Run cal short"
|
Say: "Run cal short"
|
||||||
|
|
||||||
5. **Connect the THROUGH**
|
5. **Connect the THROUGH**
|
||||||
|
|
||||||
Connect Port 1 to Port 2 with a short cable or barrel adapter.
|
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**
|
6. **Optional: Isolation**
|
||||||
|
|
||||||
Connect 50Ω loads to both ports.
|
Connect 50Ω loads to both ports.
|
||||||
|
|
||||||
Ask Claude: "Run cal isoln"
|
Say: "Run cal isoln"
|
||||||
|
|
||||||
This corrects for crosstalk between ports.
|
This corrects for crosstalk between ports.
|
||||||
|
|
||||||
7. **Apply calibration**
|
7. **Apply calibration**
|
||||||
|
|
||||||
Ask Claude: "Run cal done"
|
Say: "Run cal done"
|
||||||
|
|
||||||
This computes and applies the error correction coefficients.
|
This computes and applies the error correction coefficients.
|
||||||
|
|
||||||
8. **Save calibration**
|
8. **Save calibration**
|
||||||
|
|
||||||
Ask Claude: "Save calibration to slot 0"
|
Say: "Save calibration to slot 0"
|
||||||
|
|
||||||
Saves to NanoVNA flash for later recall.
|
Saves to NanoVNA flash for later recall.
|
||||||
</Steps>
|
</Steps>
|
||||||
@ -109,7 +109,7 @@ Each slot holds one calibration. Common approach:
|
|||||||
|
|
||||||
## Recalling Calibration
|
## 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.
|
The NanoVNA will use the stored calibration. Note that calibration must match the current sweep settings.
|
||||||
|
|
||||||
|
|||||||
@ -11,7 +11,7 @@ This tutorial walks through measuring a complete 3D antenna radiation pattern us
|
|||||||
|
|
||||||
- NanoVNA-H connected via USB
|
- NanoVNA-H connected via USB
|
||||||
- ESP32 positioner built and on WiFi
|
- 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
|
```bash
|
||||||
claude mcp add mcnanovna -- uvx mcnanovna
|
claude mcp add mcnanovna -- uvx mcnanovna
|
||||||
claude mcp add mcpositioner -- uvx mcpositioner
|
claude mcp add mcpositioner -- uvx mcpositioner
|
||||||
@ -56,27 +56,27 @@ For accurate patterns, the transmit antenna should have a known, broad pattern (
|
|||||||
<Steps>
|
<Steps>
|
||||||
1. **Verify both servers are connected**
|
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**
|
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).
|
This establishes the reference position (theta=0, phi=0).
|
||||||
|
|
||||||
3. **Calibrate the VNA**
|
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.
|
Follow the SOLT calibration procedure. This is critical for accurate S21 measurements.
|
||||||
|
|
||||||
4. **Run the pattern measurement**
|
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)
|
- Confirms grid resolution (default: 5° theta × 10° phi)
|
||||||
- Moves through each grid point in serpentine order
|
- Moves through each grid point in serpentine order
|
||||||
- Measures S21 at each position
|
- 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.
|
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>
|
</Steps>
|
||||||
|
|
||||||
## Resolution Tradeoffs
|
## Resolution Tradeoffs
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user