io.github.qso-graph/eqsl-mcp
eQSL.cc MCP server. Inbox download, QSO verification, Authenticity Guaranteed status.
Open source Open in the app JSON README (API)
About
eQSL.cc MCP server. Inbox download, QSO verification, Authenticity Guaranteed status.
Details
- Kind
- MCP servers
- Topic
- Communication
- Publisher
- qso-graph
- Origin
- official
- Category
- ferramentas
- Transport
- local
- Version
- 0.2.0
- Last push
- 2026-05-16T01:53:10Z
- Repository state
- ativo
- Language
- Python
- License
- NOASSERTION
- Added
- 2026-08-29 04:01:15
- Updated
- 2026-08-29 04:01:15
- Origin id
io.github.qso-graph/eqsl-mcp
README
<!-- mcp-name: io.github.qso-graph/eqsl-mcp -->
# eqsl-mcp
MCP server for [eQSL.cc](https://www.eqsl.cc/) — download incoming eQSLs, verify QSOs, check AG status, and query upload history through any MCP-compatible AI assistant.
Part of the [qso-graph](https://qso-graph.io/) project. Uses [qso-graph-auth](https://pypi.org/project/qso-graph-auth/) for credential management.
## Install
```bash
pip install eqsl-mcp
```
## Tools
| Tool | Auth | Description |
|------|------|-------------|
| `eqsl_inbox` | Yes | Download incoming eQSLs with date/confirmation filters |
| `eqsl_verify` | No | Check if a specific QSO exists in eQSL |
| `eqsl_ag_check` | No | Check if a callsign has AG (Authenticity Guaranteed) status |
| `eqsl_download` | Yes | Download eQSL card images |
| `eqsl_last_upload` | No | When did a persona last upload to eQSL |
| `get_version_info` | No | Service version + upstream eQSL.cc endpoint version (fleet identity attestation) |
## Quick Start
### 1. Set up credentials
eqsl-mcp uses qso-graph-auth personas for credential management:
```bash
# Install qso-graph-auth if you haven't
pip install qso-graph-auth
# Create a persona and add eQSL credentials
qso-auth persona create ki7mt --callsign KI7MT
qso-auth persona provider ki7mt eqsl --username KI7MT
qso-auth persona secret ki7mt eqsl
```
### 2. Configure your MCP client
eqsl-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": {
"eqsl": {
"command": "eqsl-mcp"
}
}
}
```
#### Claude Code
Add to `.claude/settings.json`:
```json
{
"mcpServers": {
"eqsl": {
"command": "eqsl-mcp"
}
}
}
```
#### ChatGPT Desktop
ChatGPT supports MCP via the [OpenAI Agents SDK](https://developers.openai.com/api/docs/mcp/). Add under Settings > Apps & Connectors, or configure in your agent definition:
```json
{
"mcpServers": {
"eqsl": {
"command": "eqsl-mcp"
}
}
}
```
#### Cursor
Add to `.cursor/mcp.json` (project-level) or `~/.cursor/mcp.json` (global):
```json
{
"mcpServers": {
"eqsl": {
"command": "eqsl-mcp"
}
}
}
```
#### VS Code / GitHub Copilot
Add to `.vscode/mcp.json` in your workspace:
```json
{
"servers": {
"eqsl": {
"command": "eqsl-mcp"
}
}
}
```
#### Gemini CLI
Add to `~/.gemini/settings.json` (global) or `.gemini/settings.json` (project):
```json
{
"mcpServers": {
"eqsl": {
"command": "eqsl-mcp"
}
}
}
```
### 3. Ask questions
> "Show me all eQSLs received this week"
> "How many unconfirmed eQSLs do I have on 20m FT8?"
> "Does W1AW have AG status on eQSL?"
> "Verify my QSO with KI7MT on 20m on March 1, 2026"
## Testing Without Credentials
The two public tools (`eqsl_verify` and `eqsl_ag_check`) work without any credentials.
For `eqsl_inbox` testing, set the mock environment variable:
```bash
EQSL_MCP_MOCK=1 eqsl-mcp
```
Or point to a local ADIF file:
```bash
EQSL_MCP_MOCK=1 EQSL_MCP_ADIF=/path/to/test.adi eqsl-mcp
```
## MCP Inspector
```bash
eqsl-mcp --transport streamable-http --port 8001
```
Then open the MCP Inspector at `http://localhost:8001`.
## Development
```bash
git clone https://github.com/qso-graph/eqsl-mcp.git
cd eqsl-mcp
pip install -e .
```
## Date Formats
eQSL uses different date formats across endpoints. eqsl-mcp normalizes everything — you always use `YYYY-MM-DD`:
| You provide | eqsl-mcp sends | Endpoint |
|-------------|----------------|----------|
| `2026-03-01` | `202603010000` | DownloadInBox (RcvdSince) |
| `2026-03-01` | `03/01/2026` | VerifyQSO (QSODate) |
## Mode Matching
eQSL requires exact mode matching. `SSB` won't match `USB`/`LSB`. `PSK` won't match `PSK31`. Use the exact mode logged by the other station.
## License
GPL-3.0-or-later