Server Overview¶
qso-graph provides 9 MCP servers with 44 tools covering the major ham radio services.
Fleet Summary¶
| Package | Tools | Service | Auth Pattern |
|---|---|---|---|
| eqsl-mcp | 4 | eQSL.cc | Persona (session) |
| qrz-mcp | 4 | QRZ.com | Persona (XML) + API key (Logbook) |
| clublog-mcp | 6 | Club Log | API key (env var) |
| lotw-mcp | 4 | LoTW (ARRL) | Persona (HTTPS) |
| hamqth-mcp | 4 | HamQTH.com | Persona (XML session) |
| pota-mcp | 6 | Parks on the Air | None (public) |
| sota-mcp | 5 | Summits on the Air | None (public) |
| solar-mcp | 6 | NOAA SWPC | None (public) |
| wspr-mcp | 5 | WSPR network | None (public) |
Authentication Patterns¶
Persona Auth (OS Keyring)¶
eQSL, QRZ, LoTW, and HamQTH use adif-mcp personas — named identities with credentials stored in your OS keyring:
Every tool call includes a persona parameter so the server knows which credentials to use. See Getting Started for setup.
API Key (Environment Variable)¶
Club Log uses a per-application API key set via CLUBLOG_API_KEY environment variable.
Public (No Auth)¶
POTA, SOTA, Solar, and WSPR servers access public APIs — no credentials needed. Just install and go.
Architecture¶
All servers share a common architecture:
AI Assistant
│
▼ MCP protocol (stdio)
│
MCP Server (local process)
│
├── Rate Limiter (prevents account bans)
├── Input Validator (regex on all user strings)
├── Response Cache (in-memory TTL)
│
▼ HTTPS only
│
External API (eQSL, QRZ, LoTW, etc.)
Common Properties¶
- Transport: stdio (default) or
--transport streamable-httpfor MCP Inspector - Framework: FastMCP 3.x
- Python: 3.10+
- License: GPL-3.0-or-later
- Mock mode: Every server supports
<NAME>_MCP_MOCK=1for testing without credentials
Rate Limiting¶
Each server implements rate limiting appropriate for its service:
| Server | Min Delay | Max Rate | Ban Freeze |
|---|---|---|---|
| eqsl-mcp | 500ms | — | — |
| qrz-mcp | 500ms | 35/min | 3600s (IP ban) |
| clublog-mcp | 500ms | 30/min | 3600s |
| lotw-mcp | 500ms | — | — |
| hamqth-mcp | 500ms | — | — |
| pota-mcp | 100ms | — | — |
| sota-mcp | 200ms | — | — |
| solar-mcp | 200ms | — | — |
| wspr-mcp | 200ms | — | — |