hamqth-mcp
by qso-graph
README.md
<!-- mcp-name: io.github.qso-graph/hamqth-mcp -->
# hamqth-mcp
MCP server for [HamQTH.com](https://www.hamqth.com/) — callsign lookup, DX cluster spots, Reverse Beacon Network, DXCC resolution, and more through any MCP-compatible AI assistant.
Part of the [qso-graph](https://qso-graph.io/) project. Authenticated tools use [qso-graph-auth](https://pypi.org/project/qso-graph-auth/) for persona and credential management.
## Install
```bash
pip install hamqth-mcp
```
## Tools
| Tool | Auth | Description |
|------|------|-------------|
| `hamqth_lookup` | Yes | Callsign lookup (name, grid, DXCC, coordinates, QSL preferences) |
| `hamqth_dxcc` | No | Resolve DXCC entity from callsign or ADIF code |
| `hamqth_bio` | Yes | Fetch operator biography |
| `hamqth_activity` | Yes | Recent DX cluster, RBN, and logbook activity |
| `hamqth_dx_spots` | No | Live DX cluster spots — filter by band and/or callsign |
| `hamqth_rbn` | No | Reverse Beacon Network decodes — filter by band, mode, continent, callsign |
| `hamqth_verify_qso` | No | Verify a QSO via HamQTH SAVP protocol |
| `get_version_info` | No | Service version + upstream HamQTH API version (fleet identity attestation) |
## Quick Start
### 1. Create a free HamQTH account
Sign up at [hamqth.com](https://www.hamqth.com/) — it's free, no subscription required.
### 2. Set up credentials
hamqth-mcp uses adif-mcp personas for credential management:
```bash
# Install adif-mcp if you haven't
pip install adif-mcp
# Create a persona and add HamQTH credentials
adif-mcp persona create ki7mt --callsign KI7MT
adif-mcp persona provider ki7mt hamqth --username KI7MT
adif-mcp persona secret ki7mt hamqth
```
### 3. Configure your MCP client
hamqth-mcp works with any MCP-compatible client. Add the server config and restart — tools appear automatically.
#### Claude Desktop
Add to `claude_desktop_config.json` (`~/Library/Application Support/Claude/` on macOS, `%APPDATA%\Claude\` on Windows):
```json
{
"mcpServers": {
"hamqth": {
"command": "hamqth-mcp"
}
}
}
```
#### Claude Code
Add to `.claude/settings.json`:
```json
{
"mcpServers": {
"hamqth": {
"command": "hamqth-mcp"
}
}
}
```
#### ChatGPT Desktop
```json
{
"mcpServers": {
"hamqth": {
"command": "hamqth-mcp"
}
}
}
```
#### Cursor
Add to `.cursor/mcp.json` (project-level) or `~/.cursor/mcp.json` (global):
```json
{
"mcpServers": {
"hamqth": {
"command": "hamqth-mcp"
}
}
}
```
#### VS Code / GitHub Copilot
Add to `.vscode/mcp.json` in your workspace:
```json
{
"servers": {
"hamqth": {
"command": "hamqth-mcp"
}
}
}
```
#### Gemini CLI
Add to `~/.gemini/settings.json` (global) or `.gemini/settings.json` (project):
```json
{
"mcpServers": {
"hamqth": {
"command": "hamqth-mcp"
}
}
}
```
### 4. Ask questions
> "Look up the callsign OK2CQR"
> "What DXCC entity is VP8PJ?"
> "Show me the biography for OK2CQR"
> "What's the recent activity for KI7MT?"
> "Show me DX spots for 3Y0K"
> "What RBN decodes are there for 3Y0K on CW?"
> "Show me 20m DX spots"
> "Verify my QSO with OK2CQR on 20m on March 5"
## Testing Without Credentials
The DXCC tool (`hamqth_dxcc`) works without any credentials — it uses a public endpoint.
For testing all tools without a HamQTH account:
```bash
HAMQTH_MCP_MOCK=1 hamqth-mcp
```
## MCP Inspector
```bash
hamqth-mcp --transport streamable-http --port 8005
```
Then open the MCP Inspector at `http://localhost:8005`.
## Development
```bash
git clone https://github.com/qso-graph/hamqth-mcp.git
cd hamqth-mcp
pip install -e .
```
## License
GPL-3.0-or-later
TDQS
A3.7/5.0
Scored across 8 tools
Disambiguation5/5
Each tool targets a distinct type of information: version, activity, biography, DXCC, DX spots, callsign lookup, RBN spots, and QSO verification. No overlapping purposes.
Naming Consistency5/5
All tools follow a consistent hamqth_<descriptive_noun> pattern, making them predictable and easy to navigate.
Tool Count5/5
8 tools cover the core functionality of the HamQTH interface without being excessive or insufficient.
Completeness4/5
Covers all major lookup and activity features, but lacks tools for advanced search or user account interaction, which are not essential for the scope.
Maintenance
ActivityInactive
ResponsivenessNo issues