ARRL Logbook of The World MCP server. QSO query, QSL status, DXCC credit tracking.
Runs on your machine from its package; the steps are below.
At most: only reads or looks up information.
Odel charges nothing per call. The publisher may charge for its own service.
Runs locally over stdio
This server isn't hosted — your MCP client launches it from a package registry. Use one of the commands below, or drop the config into your client (e.g. Claude Desktop).
Run
uvx lotw-mcp
MCP client config
{
"mcpServers": {
"lotw": {
"command": "uvx",
"args": [
"lotw-mcp"
]
}
}
}MCP server for ARRL Logbook of The World (LoTW) — query confirmations, uploaded QSOs, DXCC credits, and user activity through any MCP-compatible AI assistant.
Part of the qso-graph project. Read-only — uploads require TQSL digital signatures and are out of scope.
uvx lotw-mcp # run it; nothing to install
| Tool | Auth | Description |
|---|---|---|
lotw_confirmations | Yes | Query confirmed QSLs with band/mode/call/date filters |
lotw_qsos | Yes | Query all uploaded QSOs (confirmed and unconfirmed) |
lotw_dxcc_credits | Yes | DXCC award credits from LoTW confirmations |
lotw_download | Yes | Download QSOs as ADIF file |
lotw_user_activity | No | Check if a callsign uses LoTW and when they last uploaded |
get_version_info | No | Service version + upstream LoTW schema version (fleet identity attestation) |
lotw-mcp uses qso-graph-auth personas for credential management:
# Install qso-graph-auth if you haven't
uv tool install qso-graph-auth
# A persona (your callsign and the dates it covers), then LoTW for it
qso-auth persona add --name ki7mt --callsign KI7MT --start 2020-01-01
qso-auth provider enable ki7mt lotw
qso-auth creds set ki7mt lotw # asks for your username, then your password (hidden)
All three steps are needed: without provider enable, the server reports that the persona has no lotw ref.
Note: The LoTW login is usually your callsign but not always. Pre-Sept 2019 accounts may require lowercase passwords. Avoid special characters in passwords.
Add to claude_desktop_config.json (~/Library/Application Support/Claude/ on macOS, %APPDATA%\Claude\ on Windows):
{
"mcpServers": {
"lotw": {
"command": "uvx",
"args": ["lotw-mcp"]
}
}
}
Add to .claude/settings.json:
{
"mcpServers": {
"lotw": {
"command": "uvx",
"args": ["lotw-mcp"]
}
}
}
{
"mcpServers": {
"lotw": {
"command": "uvx",
"args": ["lotw-mcp"]
}
}
}
Add to .cursor/mcp.json (project-level) or ~/.cursor/mcp.json (global):
{
"mcpServers": {
"lotw": {
"command": "uvx",
"args": ["lotw-mcp"]
}
}
}
Add to .vscode/mcp.json in your workspace:
{
"servers": {
"lotw": {
"command": "uvx",
"args": ["lotw-mcp"]
}
}
}
Add to ~/.gemini/settings.json (global) or .gemini/settings.json (project):
{
"mcpServers": {
"lotw": {
"command": "uvx",
"args": ["lotw-mcp"]
}
}
}
"How many LoTW confirmations did I get this month?"
"Show me all unconfirmed 20m FT8 QSOs uploaded to LoTW in the last 90 days"
"What DXCC credits do I have on 40m CW?"
"Does JA1ABC use LoTW? When did they last upload?"
lotw_user_activity works without any credentials. It uses the public LoTW user activity CSV, cached locally for 7 days.
Set the mock environment variable:
LOTW_MCP_MOCK=1 lotw-mcp
LoTW can be slow (30-60s for large queries). lotw-mcp uses 120s timeouts. Use date filters (since, start_date) to limit result sets.
lotw-mcp --transport streamable-http --port 8004
git clone https://github.com/qso-graph/lotw-mcp.git
cd lotw-mcp
uv sync --group dev
uv run pytest
GPL-3.0-or-later