Getting Started¶
Install¶
Every qso-graph package is a standalone pip install:
# Authenticated servers (require credential setup)
pip install eqsl-mcp
pip install qrz-mcp
pip install clublog-mcp
pip install lotw-mcp
pip install hamqth-mcp
# Public servers (no credentials needed — just install and go)
pip install pota-mcp
pip install sota-mcp
pip install solar-mcp
pip install wspr-mcp
All packages require Python 3.10+.
Credential Setup¶
Servers that access your accounts use adif-mcp to store credentials securely in your OS keyring.
Create a Persona¶
A persona is a named identity that holds your credentials:
pip install adif-mcp
# Set up credentials for each service you use
adif-mcp creds set --persona ki7mt --provider eqsl --password YOUR_PASSWORD
adif-mcp creds set --persona ki7mt --provider qrz --password YOUR_PASSWORD
adif-mcp creds set --persona ki7mt --provider lotw --password YOUR_PASSWORD
adif-mcp creds set --persona ki7mt --provider hamqth --password YOUR_PASSWORD
# QRZ Logbook requires a separate API key
adif-mcp creds set --persona ki7mt --provider qrz --api-key YOUR_API_KEY
Your credentials are stored in the OS keyring (macOS Keychain, Windows Credential Manager, or Linux Secret Service) — never in config files.
Club Log API Key¶
Club Log uses a per-application API key set via environment variable:
Get your API key at clublog.org/getapi.php.
MCP Client Configuration¶
Claude Desktop¶
Add servers to ~/Library/Application Support/Claude/claude_desktop_config.json (macOS) or %APPDATA%\Claude\claude_desktop_config.json (Windows):
{
"mcpServers": {
"eqsl": {
"command": "eqsl-mcp"
},
"qrz": {
"command": "qrz-mcp"
},
"clublog": {
"command": "clublog-mcp",
"env": {
"CLUBLOG_API_KEY": "your-key-here"
}
},
"lotw": {
"command": "lotw-mcp"
},
"hamqth": {
"command": "hamqth-mcp"
},
"pota": {
"command": "pota-mcp"
},
"sota": {
"command": "sota-mcp"
},
"solar": {
"command": "solar-mcp"
},
"wspr": {
"command": "wspr-mcp"
}
}
}
Claude Code¶
Add to ~/.claude/settings.json:
ChatGPT Desktop¶
Add to ~/.chatgpt/config.json:
Cursor¶
Add to .cursor/mcp.json in your project:
VS Code (GitHub Copilot)¶
Add to .vscode/mcp.json in your workspace:
Gemini CLI¶
Add to ~/.gemini/settings.json:
Mock Mode¶
Every server supports a mock mode for testing without real credentials:
# Run any server in mock mode
EQSL_MCP_MOCK=1 eqsl-mcp
QRZ_MCP_MOCK=1 qrz-mcp
CLUBLOG_MCP_MOCK=1 clublog-mcp
LOTW_MCP_MOCK=1 lotw-mcp
HAMQTH_MCP_MOCK=1 hamqth-mcp
POTA_MCP_MOCK=1 pota-mcp
SOTA_MCP_MOCK=1 sota-mcp
SOLAR_MCP_MOCK=1 solar-mcp
WSPR_MCP_MOCK=1 wspr-mcp
MCP Inspector¶
Test any server interactively with the MCP Inspector:
# Start a server with HTTP transport
eqsl-mcp --transport streamable-http --port 8001
# Open http://localhost:8001 in MCP Inspector
Each server uses a default port for Inspector mode:
| Server | Port |
|---|---|
| eqsl-mcp | 8001 |
| qrz-mcp | 8002 |
| clublog-mcp | 8003 |
| lotw-mcp | 8004 |
| hamqth-mcp | 8005 |
| pota-mcp | 8006 |
| sota-mcp | 8007 |
| solar-mcp | 8008 |
| wspr-mcp | 8009 |
Try It¶
Once configured, ask your AI assistant:
- "Look up W1AW on QRZ"
- "Do I have any new eQSL confirmations?"
- "Show me my LoTW DXCC credits"
- "What POTA spots are on 20m right now?"
- "Find SOTA summits near Boise, Idaho"
- "What are the current solar conditions?"
- "Is 3Y0J in the Club Log?"
- "What bands are open on WSPR right now?"