---
title: Installation
description: Detailed installation options for mcnanovna and mcpositioner
---

import { Tabs, TabItem, Aside } from '@astrojs/starlight/components';

## mcnanovna

### From PyPI (Recommended)

<Tabs>
  <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
    # Run directly with uvx
    uvx mcnanovna

    # Or install globally
    pipx install mcnanovna
    mcnanovna
    ```
  </TabItem>
</Tabs>

### From Source

```bash
git clone https://git.supported.systems/rf/mcnanovna.git
cd mcnanovna
uv sync
uv run mcnanovna
```

### With Web UI

The optional 3D radiation pattern viewer requires additional dependencies:

```bash
# From source
uv sync --extra webui
MCNANOVNA_WEB_PORT=8080 uv run mcnanovna

# Open http://localhost:8080 in your browser
```

## mcpositioner

### From PyPI

<Tabs>
  <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
    uvx mcpositioner
    ```
  </TabItem>
</Tabs>

### From Source

```bash
git clone https://git.supported.systems/rf/mcpositioner.git
cd mcpositioner
uv sync
uv run mcpositioner
```

<Aside type="note">
mcpositioner requires the ESP32 positioner hardware. See [Hardware Build](/hardware/positioner-build/) for assembly instructions.
</Aside>

## Environment Variables

### mcnanovna

| Variable | Default | Description |
|----------|---------|-------------|
| `MCNANOVNA_WEB_PORT` | (disabled) | Port for 3D pattern web UI |

### mcpositioner

| Variable | Default | Description |
|----------|---------|-------------|
| `MCPOSITIONER_HOST` | `positioner.local` | ESP32 hostname or IP |

## Both Servers Together

For automated 3D antenna pattern measurement, add both servers to your MCP client:

```bash
# Claude Code example
claude mcp add mcnanovna -- uvx mcnanovna
claude mcp add mcpositioner -- uvx mcpositioner
```

Then use the `measure_antenna_range` prompt to run automated pattern sweeps.
