From 0e5553c661bfe86ed925e4a756dd264d354c2802 Mon Sep 17 00:00:00 2001 From: Ryan Malloy Date: Thu, 5 Feb 2026 12:56:26 -0700 Subject: [PATCH] Make docs MCP-client agnostic MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 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. --- .../docs/getting-started/installation.mdx | 15 ++++++------ .../docs/getting-started/quickstart.mdx | 15 ++++++------ src/content/docs/index.mdx | 10 ++++---- src/content/docs/mcnanovna/overview.mdx | 4 ++-- src/content/docs/mcnanovna/prompts.mdx | 2 +- src/content/docs/mcnanovna/tools.mdx | 24 +++++++++---------- src/content/docs/mcpositioner/overview.mdx | 4 ++-- src/content/docs/mcpositioner/prompts.mdx | 6 ++--- .../docs/tutorials/antenna-analysis.mdx | 24 +++++++++---------- src/content/docs/tutorials/calibration.mdx | 18 +++++++------- .../docs/tutorials/pattern-measurement.mdx | 16 ++++++------- 11 files changed, 69 insertions(+), 69 deletions(-) diff --git a/src/content/docs/getting-started/installation.mdx b/src/content/docs/getting-started/installation.mdx index 882e43e..a45d081 100644 --- a/src/content/docs/getting-started/installation.mdx +++ b/src/content/docs/getting-started/installation.mdx @@ -10,10 +10,12 @@ import { Tabs, TabItem, Aside } from '@astrojs/starlight/components'; ### From PyPI (Recommended) - + + For Claude Code: ```bash claude mcp add mcnanovna -- uvx mcnanovna ``` + For other MCP clients, configure `uvx mcnanovna` as a server. ```bash @@ -53,10 +55,12 @@ MCNANOVNA_WEB_PORT=8080 uv run mcnanovna ### From PyPI - + + For Claude Code: ```bash claude mcp add mcpositioner -- uvx mcpositioner ``` + For other MCP clients, configure `uvx mcpositioner` as a server. ```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. diff --git a/src/content/docs/getting-started/quickstart.mdx b/src/content/docs/getting-started/quickstart.mdx index cf08771..4e9cef3 100644 --- a/src/content/docs/getting-started/quickstart.mdx +++ b/src/content/docs/getting-started/quickstart.mdx @@ -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 -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. diff --git a/src/content/docs/index.mdx b/src/content/docs/index.mdx index a865d24..16c982e 100644 --- a/src/content/docs/index.mdx +++ b/src/content/docs/index.mdx @@ -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: @@ -39,7 +39,7 @@ Two MCP servers that let Claude control RF test equipment: 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. 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"* diff --git a/src/content/docs/mcnanovna/overview.mdx b/src/content/docs/mcnanovna/overview.mdx index c5f15d4..1295484 100644 --- a/src/content/docs/mcnanovna/overview.mdx +++ b/src/content/docs/mcnanovna/overview.mdx @@ -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 │ │ ▼ │ diff --git a/src/content/docs/mcnanovna/prompts.mdx b/src/content/docs/mcnanovna/prompts.mdx index 9505c72..36c9ab3 100644 --- a/src/content/docs/mcnanovna/prompts.mdx +++ b/src/content/docs/mcnanovna/prompts.mdx @@ -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 diff --git a/src/content/docs/mcnanovna/tools.mdx b/src/content/docs/mcnanovna/tools.mdx index 38b1858..553d5ab 100644 --- a/src/content/docs/mcnanovna/tools.mdx +++ b/src/content/docs/mcnanovna/tools.mdx @@ -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() ``` ``` 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() ``` ``` 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) ``` diff --git a/src/content/docs/mcpositioner/overview.mdx b/src/content/docs/mcpositioner/overview.mdx index ca9310b..a04e6f2 100644 --- a/src/content/docs/mcpositioner/overview.mdx +++ b/src/content/docs/mcpositioner/overview.mdx @@ -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 │ │ ▼ │ diff --git a/src/content/docs/mcpositioner/prompts.mdx b/src/content/docs/mcpositioner/prompts.mdx index e1d82d5..73b1aa4 100644 --- a/src/content/docs/mcpositioner/prompts.mdx +++ b/src/content/docs/mcpositioner/prompts.mdx @@ -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. diff --git a/src/content/docs/tutorials/antenna-analysis.mdx b/src/content/docs/tutorials/antenna-analysis.mdx index c1a5c87..5d96a22 100644 --- a/src/content/docs/tutorials/antenna-analysis.mdx +++ b/src/content/docs/tutorials/antenna-analysis.mdx @@ -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" **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" **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" **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" @@ -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. diff --git a/src/content/docs/tutorials/calibration.mdx b/src/content/docs/tutorials/calibration.mdx index 617aa68..4590c70 100644 --- a/src/content/docs/tutorials/calibration.mdx +++ b/src/content/docs/tutorials/calibration.mdx @@ -34,7 +34,7 @@ An SMA calibration kit includes precision standards. For casual use, a 50Ω term 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. @@ -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. diff --git a/src/content/docs/tutorials/pattern-measurement.mdx b/src/content/docs/tutorials/pattern-measurement.mdx index 33a3967..40ea067 100644 --- a/src/content/docs/tutorials/pattern-measurement.mdx +++ b/src/content/docs/tutorials/pattern-measurement.mdx @@ -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 ( 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"* ## Resolution Tradeoffs