Ryan Malloy e21219be8d Initial docs site: Astro/Starlight with caddy-docker-proxy
- Starlight documentation for mcnanovna and mcpositioner
- 19 pages covering tools, prompts, hardware, and tutorials
- Docker deployment with dev/prod modes
- Makefile for docker compose management
- Custom SVG logos and hero illustration
2026-02-04 13:53:21 -07:00

90 lines
5.1 KiB
Plaintext

---
title: mcpositioner Overview
description: MCP server for ESP32 dual-axis antenna positioner
---
import { Aside } from '@astrojs/starlight/components';
mcpositioner gives AI assistants 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
Automated 3D antenna radiation pattern measurement. The positioner physically rotates an antenna under test through a theta/phi grid while a VNA measures transmission (S21) at each position.
## Capabilities
- **Absolute positioning**: Move to any theta/phi coordinate
- **Relative moves**: Offset from current position
- **StallGuard homing**: Sensorless homing using TMC2209 stall detection
- **Emergency stop**: Immediate motor halt
- **Motion tuning**: Configurable speed, acceleration, microstepping
## Hardware Requirements
| Component | Specification |
|-----------|--------------|
| Controller | ESP32 DevKit (any variant) |
| Drivers | 2x TMC2209 in UART mode |
| Motors | 2x NEMA 17 (0.9° or 1.8° step) |
| Power | 24V for motors, 5V for ESP32 |
<Aside type="tip">
Full build instructions and KiCad schematics are in the [Hardware section](/hardware/positioner-build/).
</Aside>
## Architecture
```
┌─────────────────────────────────────────────────────────┐
│ Claude Code │
│ │ │
│ MCP Protocol │
│ ▼ │
│ ┌─────────────────────────────────────────────────┐ │
│ │ mcpositioner server │ │
│ │ ┌─────────────┐ ┌─────────────────────┐ │ │
│ │ │ tools.py │ │ positioner.py │ │ │
│ │ │ 5 tools │─────▶│ httpx client │ │ │
│ │ └─────────────┘ └──────────┬──────────┘ │ │
│ └─────────────────────────────────────────────────┘ │
│ │ │
│ WiFi HTTP │
│ ▼ │
│ ┌──────────────────────────────────────┐ │
│ │ ESP32 Firmware │ │
│ │ ┌─────────┐ ┌──────────────────┐ │ │
│ │ │AccelStep│ │ESPAsyncWebServer │ │ │
│ │ └────┬────┘ └────────┬─────────┘ │ │
│ │ │ HTTP API │ │
│ │ ▼ │ │
│ │ ┌─────────────────────────────┐ │ │
│ │ │ TMC2209 UART (StallGuard) │ │ │
│ │ └──────────┬──────────────────┘ │ │
│ └─────────────│────────────────────────┘ │
│ ▼ │
│ ┌──────────────────────────────────────┐ │
│ │ NEMA 17 Steppers (θ and φ axes) │ │
│ └──────────────────────────────────────┘ │
└─────────────────────────────────────────────────────────┘
```
## Network Discovery
The ESP32 firmware advertises itself via mDNS as `positioner.local`. Override with the `MCPOSITIONER_HOST` environment variable if your network doesn't support mDNS or you have multiple positioners.
```bash
# Use IP address instead of mDNS
MCPOSITIONER_HOST=192.168.1.100 uvx mcpositioner
```
## Cross-Server Workflow
mcpositioner works with [mcnanovna](/mcnanovna/overview/) for automated pattern measurement:
1. **mcpositioner**: Move antenna to theta/phi position
2. **mcnanovna**: Measure S21 transmission
3. **Repeat** across the measurement grid
4. **Assemble** pattern from collected data
The `measure_pattern_grid` prompt guides this workflow step by step.