pypi eqsl-mcpstdioupdated 3mo ago
MCP server for eQSL.cc — download incoming eQSLs, verify QSOs, check AG status, and query upload history through any MCP-compatible AI assistant.
What can you do with eqsl mcp?
eqsl-mcp
MCP server for 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 project. Uses qso-graph-auth for credential management.
Install
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:
# 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):
{
"mcpServers": {
"eqsl": {
"command": "eqsl-mcp"
}
}
}
Claude Code
Add to .claude/settings.json:
{
"mcpServers": {
"eqsl": {
"command": "eqsl-mcp"
}
}
}
ChatGPT Desktop
ChatGPT supports MCP via the OpenAI Agents SDK. Add under Settings > Apps & Connectors, or configure in your agent definition:
{
"mcpServers": {
"eqsl": {
"command": "eqsl-mcp"
}
}
}
Cursor
Add to .cursor/mcp.json (project-level) or ~/.cursor/mcp.json (global):
{
"mcpServers": {
"eqsl": {
"command": "eqsl-mcp"
}
}
}
VS Code / GitHub Copilot
Add to .vscode/mcp.json in your workspace:
{
"servers": {
"eqsl": {
"command": "eqsl-mcp"
}
}
}
Gemini CLI
Add to ~/.gemini/settings.json (global) or .gemini/settings.json (project):
{
"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:
EQSL_MCP_MOCK=1 eqsl-mcp
Or point to a local ADIF file:
EQSL_MCP_MOCK=1 EQSL_MCP_ADIF=/path/to/test.adi eqsl-mcp
MCP Inspector
eqsl-mcp --transport streamable-http --port 8001
Then open the MCP Inspector at http://localhost:8001.
Development
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
Install
Add eqsl mcp to your client. Pick the one you use.
claude mcp add eqsl-mcp -- uvx eqsl-mcpcodex mcp add eqsl-mcp -- uvx eqsl-mcpamp mcp add eqsl-mcp -- uvx eqsl-mcp{
"mcpServers": {
"eqsl-mcp": {
"command": "uvx",
"args": [
"eqsl-mcp"
]
}
}
}Add to `claude_desktop_config.json`, then restart Claude Desktop.
{
"mcpServers": {
"eqsl-mcp": {
"command": "uvx",
"args": [
"eqsl-mcp"
]
}
}
}Add to `~/.cursor/mcp.json`, or `.cursor/mcp.json` for a single project.
code --add-mcp '{"name":"eqsl-mcp","command":"uvx","args":["eqsl-mcp"]}'Or add the block manually to `.vscode/mcp.json` under `servers`.
{
"mcpServers": {
"eqsl-mcp": {
"command": "uvx",
"args": [
"eqsl-mcp"
]
}
}
}Add to `~/.codeium/windsurf/mcp_config.json`.
{
"mcpServers": {
"eqsl-mcp": {
"command": "uvx",
"args": [
"eqsl-mcp"
]
}
}
}Add to `cline_mcp_settings.json` via the MCP Servers panel.
{
"mcpServers": {
"eqsl-mcp": {
"command": "uvx",
"args": [
"eqsl-mcp"
]
}
}
}Add to `~/.gemini/settings.json`.
{
"mcpServers": {
"eqsl-mcp": {
"type": "local",
"command": "uvx",
"args": [
"eqsl-mcp"
],
"tools": [
"*"
]
}
}
}Add to `~/.copilot/mcp-config.json`, or run `/mcp add` inside the CLI.
{
"context_servers": {
"eqsl-mcp": {
"command": {
"path": "uvx",
"args": [
"eqsl-mcp"
]
}
}
}
}Add to your Zed `settings.json`.
uvx eqsl-mcpRun `goose configure`, choose **Add Extension → Command-line Extension**, and paste this command.
6 tools
eqsl mcp exposes 6 tools to a connected agent.
- eqsl_inbox
- Yes
- eqsl_verify
- No
- eqsl_ag_check
- No
- eqsl_download
- Yes
- eqsl_last_upload
- No
- get_version_info
- No
Score
62 / 100
Good
- Documentation22/25
- Maintenance13/25
- Trust9/20
- Capability6/15
- Install experience12/15
- Documents what it does and how to connect
- Has a resolvable package or endpoint
- Exposes at least one tool, prompt or resource
- README has substantive content
- Includes a code example
- Documents its configuration
- Mentions credentials or security posture
- Last commit 108 days ago
- Has a release history
- Repository is not archived
- No licence detected
- Namespace verified in the official MCP registry
- Claimed by its owner
- Published under an organisation
- 6 tool(s) documented
- Provides prompt templates
- Provides resources
- 12 documented install method(s)
- Published to a package registry
- Offers a hosted endpoint — no local install
Version history
| Versions | Published |
|---|---|
| 0.2.0Latest | Mar 6, 2026 |