Sitelet https://github.com/qso-graph
Skip to content
@qso-graph

QSO-Graph

Open amateur radio software, built to work together: a net logger, club services, propagation analytics, and MCP servers for QRZ, LoTW, eQSL, POTA and more.

QSO Graph — Open-Source Software for Amateur Radio

Live Demo DXpedition Demo Docs

Open amateur radio software, built to work together.

QSO Graph is open amateur radio software for your station: logging, nets, awards, spots and your radio, in one place, on Windows, macOS and Linux, with the libraries and AI integrations behind them. Today that is the MCP servers and the libraries under them; QSO Graph Desktop, the app that brings it together, is in design. They share one data model, publish their interfaces, and are built so that any of them can be used alone. Free software under the GPL, for individual operators and for clubs, small and large.

View the live demo → · Documentation →

Today

  • MCP servers that connect AI assistants to the services hams use every day: QRZ, LoTW, eQSL, HamQTH, POTA, SOTA, IOTA, NOAA space weather, WSPR, OMISS, NetLogger, N1MM Logger+, IONIS-AI propagation analytics, and the ADIF specification itself. Published on PyPI; each one runs with a single uvx command, nothing to install.
  • Tools that look after them: credential handling that keeps your passwords in your operating system's keyring, and a relay that gives local LLMs the same tools.
  • Live demos of what that makes possible: logbook analysis, and DXpedition propagation planning.

Where we're heading

Product What it is Status
QSO Graph Desktop One app for your station on Windows, macOS and Linux: your logbook, nets, awards, spots and your radio, with your callsigns and logins kept in your own OS keyring In design
QSO Graph SDK (QGSDK) The build kit for QSO Graph's standalone apps: Qt and CMake, one command to a pinned build environment on Windows or Linux, so anyone can build them Available (open source)

Earlier plans for a separate net logger, an ADIF service and a self-hosted club server are folded into it.

Products are linked here as each becomes public.

In order:

  1. Now: one app for the station, designed properly. QSO Graph Desktop, built to enterprise security standards.
  2. With it: the clubs with nothing. Club rosters, nets and awards for the many clubs and nets that have no software or server of their own.
  3. Then: publish the seams. The interfaces between the pieces become published specifications that anyone can implement, including software that isn't ours.
  4. Eventually: governance that isn't us. Clubs, small and large with an equal voice, steering the parts that affect them, through the specifications.

Underneath all of it, continuously: the data. ADIF as the base, propagation as the research edge.

How the pieces fit:

  • ADIF is the base. Every QSO Graph tool reads and writes ADIF, the format LoTW, eQSL, QRZ and every major logger share, and uses ADIF's own definition for every field ADIF defines. No one-off custom fields: when a tool genuinely needs something ADIF doesn't have, it is defined once, published, and used the same way across every QSO Graph tool where it applies. That costs more than a quick private field, and it's a cost accepted deliberately: it's what keeps the tools working together, and what lets you take your log anywhere.
  • Shared contracts, not shared code. The pieces talk through published APIs and the same reference data (ADIF, DXCC), and are tested against the same recorded service responses, so a Python MCP server and the desktop app agree on what a service means.
  • Each piece stands alone. Every service is a library with thin layers over it: an MCP server for AI assistants, and the desktop app's own screens. Each works on its own; club features connect when a club has them.

What we don't do: replace LoTW, eQSL or QRZ. QSO Graph records, queries and predicts contacts, and connects to those services rather than standing in for them.

MCP Servers

The integration layer, available now. Open-source Model Context Protocol servers that connect AI assistants to amateur radio services. Ask Claude, ChatGPT, Copilot, or Gemini about your QSOs, confirmations, and logbook data — no manual API wrangling required.

Nothing to install per server. Every server, its tools and its current version: qso-graph.io.

Install

Install uv once:

curl -LsSf https://astral.sh/uv/install.sh | sh                  # Linux / macOS
powershell -c "irm https://astral.sh/uv/install.ps1 | iex"      # Windows

Then your MCP client runs each server with uvx, always the current release:

"command": "uvx", "args": ["solar-mcp"]

Command-line tools install with uv tool install: qso-graph-auth (credentials, the qso-auth command) and qsp-client (the local-LLM relay). Client configs for Claude Desktop, Claude Code, ChatGPT, Cursor, VS Code and Gemini CLI: Getting Started.

Security — Our #1 Priority

Your credentials never leave the OS keyring. Every qso-graph server enforces non-negotiable security guarantees:

  • Credentials stored in OS keyring only (macOS Keychain, Windows Credential Manager, Linux Secret Service) — never in config files, environment variables, or logs
  • Credentials never appear in MCP tool results, error messages, or debug output — enforced by architecture, not policy
  • No command injection surface — no subprocess, no shell=True, no eval
  • All external connections HTTPS only
  • Rate limiting on every API to prevent account bans
  • Independent security audit required before every PyPI release

Full details: Security

Packages

Foundation

Package Purpose Status
adif-mcp ADIF 3.1.7 spec parsing, validation, enumerations (8 tools) PyPI
qso-graph-auth Persona management, OS keyring credentials, qso-auth CLI PyPI

Logbook Services (Authenticated)

Package Service Tools Status
eqsl-mcp eQSL.cc 6 tools: inbox, verify, AG status, download, last upload, version info PyPI
lotw-mcp LoTW 6 tools: confirmations, QSOs, DXCC credits, download, user activity, version info PyPI
qrz-mcp QRZ.com 6 tools: lookup, DXCC, logbook status, download, logbook fetch, version info PyPI
hamqth-mcp HamQTH 8 tools: lookup, DXCC, bio, activity, DX spots, RBN, verify QSO, version info PyPI

Public Services (No Auth Required)

Package Service Tools Status
pota-mcp POTA 8 tools: spots, park info, stats, schedules, location, nearby, activator, version info PyPI
sota-mcp SOTA 5 tools: spots, alerts, summit info, nearby summits, version info PyPI
iota-mcp IOTA 7 tools: group lookup, island search, DXCC mapping, nearby, stats, version info PyPI
solar-mcp NOAA SWPC 7 tools: SFI, Kp, solar wind, X-ray flux, band outlook, alerts, version info PyPI
wspr-mcp WSPR 9 tools: spots, band activity, top beacons/spotters, propagation, grid, SNR, version info PyPI
ionis-mcp IONIS-AI 12 tools: HF propagation analytics from 175M+ signatures (14B observations) PyPI
omiss-mcp OMISS 13 tools: net schedule, nets on the air, member lookup, check-in history, past net check-ins, Statehood, officers, awards, award rules, award recipients, net statistics, set callsign, version info PyPI

Reference Data (No Auth, No Network)

The lists ADIF's fields point to but ADIF doesn't define, each as its owner publishes it, credited to the owner. The facts ship with the package; the owner's document doesn't.

Package Owner's list Tools Status
cq-zones-mcp CQ zones: CQ's WAZ Zone Definitions (CQ / WWROF) 6 tools: lookup, codes for an entity, search, valid on a date, source info, version info PyPI
itu-zones-mcp ITU zones: IARU HF Managers Handbook, ch. 9.8 (IARU Region 1) 6 tools: lookup, codes for an entity, search, valid on a date, source info, version info PyPI
darc-dok-mcp DOKs and special DOKs: DARC's DOK-Liste and special-DOK list 6 tools: lookup, valid on a date, search, codes for an entity, source info, version info PyPI

Radio Logging

Package Service Tools Status
n1mm-mcp N1MM Logger+ 9 tools: station state, lookup, contacts, bandmap, performance, multipliers, clock, diagnostics, version info PyPI
netlogger-mcp NetLogger 6 tools: active nets, live check-ins and who's up, past nets, past check-ins, set callsign, version info PyPI

Infrastructure

Package Purpose Status
qsp-client QSP — an MCP client that relays tools to any local LLM (llama.cpp, Ollama, vLLM, SGLang). Formerly qsp-mcp PyPI

Demos

Demo Description Status
qso-graph-demo QSO logbook analysis showcase (Next.js / Vercel) Live Demo
dxpedition-demo DXpedition propagation analysis — 3Y0K Bouvet Island (Next.js / Vercel) Live Demo

Related Projects

Project Description
ionis-jupyter Jupyter notebooks for propagation research

Quick Start

# Install uv once (Linux / macOS)
curl -LsSf https://astral.sh/uv/install.sh | sh

# Run any server
uvx solar-mcp

# Credentials for the logbook servers
uv tool install qso-graph-auth

Each server works with any MCP client: Claude Desktop, Claude Code, ChatGPT, Cursor, VS Code / GitHub Copilot, Windsurf, Gemini CLI, Goose, and Codex CLI — or use qsp-client to relay tools to any local LLM.

Architecture

qso-graph-auth (identity)       MCP Servers (qso-graph)
 ├── PersonaManager        ──>   eqsl-mcp, qrz-mcp, lotw-mcp, hamqth-mcp
 ├── OS keyring credentials      Each server = 1 uvx
 └── qso-auth CLI                Each server = 5-13 MCP tools

adif-mcp (ADIF spec)            Public Servers
 └── 8 spec tools          ──>   solar, pota, sota, iota, wspr, omiss,
                                 ionis, netlogger (no auth); n1mm (local)

qsp-client (tool relay)         Local LLM Inference
 └── Stateless pipe        ──>   llama.cpp, Ollama, vLLM, SGLang
     MCP tools → OpenAI           Any model with function calling
     tools format                  Zero cloud dependency

Reporting Security Issues

Do NOT open public GitHub issues for security vulnerabilities. Email: ki7mt@yahoo.com with subject [SECURITY] qso-graph vulnerability report.

License

GPL-3.0-or-later

Popular repositories Loading

  1. adif-mcp adif-mcp Public

    ADIF MCP server — AI-agent access to Amateur Radio logging per ADIF 3.1.7

    Python 4

  2. qrz-mcp qrz-mcp Public

    MCP server for QRZ.com — callsign lookup, DXCC resolution, logbook queries

    Python 3 1

  3. solar-mcp solar-mcp Public

    MCP server for solar indices and space weather — SFI, SSN, Kp, DSCOVR, alerts

    Python 3 1

  4. pota-mcp pota-mcp Public

    MCP server for Parks on the Air — park lookup, activator/hunter stats, spots

    Python 2

  5. sota-mcp sota-mcp Public

    MCP server for Summits on the Air — summit lookup, spots, alerts, nearby summits

    Python 1

  6. lotw-mcp lotw-mcp Public

    MCP server for ARRL Logbook of The World — QSO query, QSL status, DXCC credit

    Python 1

Repositories

Showing 10 of 24 repositories

Top languages

Loading…

Most used topics

Loading…