Skip to main content
Documentation for qso-graph-auth v0.5.1. Source at v0.5.1.

qso-graph-auth

PyPI Python License: GPL v3

Persona and credential management for qso-graph MCP servers.

Provides a shared identity layer so that authenticated MCP servers (eqsl-mcp, qrz-mcp, lotw-mcp, hamqth-mcp) can retrieve credentials from the OS keyring without embedding secrets in configuration files.

Install​

uv tool install qso-graph-auth # the qso-graph-auth command, on your PATH

MCP servers that need it install it themselves. For your own code: uv add qso-graph-auth.

Quick Start​

# Create a persona
qso-graph-auth persona add --name default --callsign YOUR_CALL --start 2020-01-01

# Enable providers
qso-graph-auth provider enable default eqsl
qso-graph-auth provider enable default qrz
qso-graph-auth provider enable default lotw
qso-graph-auth provider enable default hamqth
qso-graph-auth provider enable default qrz_logbook

# Set credentials (stored in OS keyring)
qso-graph-auth creds set default eqsl --username YOUR_CALL --password YOUR_PASS
qso-graph-auth creds set default qrz --username YOUR_CALL --password YOUR_PASS
qso-graph-auth creds set default lotw --username YOUR_CALL --password YOUR_PASS
qso-graph-auth creds set default hamqth --username YOUR_CALL --password YOUR_PASS
qso-graph-auth creds set default qrz_logbook --username YOUR_CALL --api-key YOUR_API_KEY

# Check credential health
qso-graph-auth creds doctor

Providers​

ProviderAuth TypeDescription
eqslusername + passwordeQSL.cc electronic QSL
lotwusername + passwordARRL Logbook of The World
qrzusername + passwordQRZ.com XML subscription
qrz_logbookusername + API keyQRZ.com Logbook API
hamqthusername + passwordHamQTH.com callsign lookup

Security​

  • Credentials are stored only in the OS keyring (macOS Keychain, GNOME Keyring, Windows Credential Locker)
  • Credentials are never written to config files, logs, tool results, or error messages
  • The persona index (~/.config/adif-mcp/personas.json) stores only non-secret metadata (callsign, provider names)
  • All external connections use HTTPS only

For MCP Server Authors​

from qso_graph_auth.identity import PersonaManager

pm = PersonaManager()
username, secret = pm.require("default", "eqsl")

The require() method raises typed exceptions (PersonaNotFound, ProviderRefMissing, SecretMissing) with actionable error messages pointing users to the correct qso-graph-auth creds set command.

CLI Reference​

qso-graph-auth persona add Create a new persona
qso-graph-auth persona list List all personas
qso-graph-auth persona show Show persona details
qso-graph-auth persona remove Remove a persona
qso-graph-auth provider list List supported providers
qso-graph-auth provider enable Enable a provider for a persona
qso-graph-auth provider disable Disable a provider for a persona
qso-graph-auth creds set Save credentials to OS keyring
qso-graph-auth creds get Show redacted credentials
qso-graph-auth creds delete Delete stored credentials
qso-graph-auth creds doctor Check credential health
qso-graph-auth creds reset Factory reset (delete all)

Development​

git clone https://github.com/qso-graph/qso-graph-auth.git
cd qso-graph-auth
uv sync --group dev
uv run pytest

Part of QSO-Graph​

This package is part of the qso-graph MCP server suite for amateur radio. See qso-graph.io for documentation.

License​

GPLv3