{
  "markdown": "<!-- mcp-name: io.github.qso-graph/eqsl-mcp -->\n# eqsl-mcp\n\nMCP 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.\n\nPart of the [qso-graph](https://qso-graph.io/) project. Uses [qso-graph-auth](https://pypi.org/project/qso-graph-auth/) for credential management.\n\n## Install\n\n```bash\npip install eqsl-mcp\n```\n\n## Tools\n\n| Tool | Auth | Description |\n|------|------|-------------|\n| `eqsl_inbox` | Yes | Download incoming eQSLs with date/confirmation filters |\n| `eqsl_verify` | No | Check if a specific QSO exists in eQSL |\n| `eqsl_ag_check` | No | Check if a callsign has AG (Authenticity Guaranteed) status |\n| `eqsl_download` | Yes | Download eQSL card images |\n| `eqsl_last_upload` | No | When did a persona last upload to eQSL |\n| `get_version_info` | No | Service version + upstream eQSL.cc endpoint version (fleet identity attestation) |\n\n## Quick Start\n\n### 1. Set up credentials\n\neqsl-mcp uses qso-graph-auth personas for credential management:\n\n```bash\n# Install qso-graph-auth if you haven't\npip install qso-graph-auth\n\n# Create a persona and add eQSL credentials\nqso-auth persona create ki7mt --callsign KI7MT\nqso-auth persona provider ki7mt eqsl --username KI7MT\nqso-auth persona secret ki7mt eqsl\n```\n\n### 2. Configure your MCP client\n\neqsl-mcp works with any MCP-compatible client. Add the server config and restart — tools appear automatically.\n\n#### Claude Desktop\n\nAdd to `claude_desktop_config.json` (`~/Library/Application Support/Claude/` on macOS, `%APPDATA%\\Claude\\` on Windows):\n\n```json\n{\n  \"mcpServers\": {\n    \"eqsl\": {\n      \"command\": \"eqsl-mcp\"\n    }\n  }\n}\n```\n\n#### Claude Code\n\nAdd to `.claude/settings.json`:\n\n```json\n{\n  \"mcpServers\": {\n    \"eqsl\": {\n      \"command\": \"eqsl-mcp\"\n    }\n  }\n}\n```\n\n#### ChatGPT Desktop\n\nChatGPT 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:\n\n```json\n{\n  \"mcpServers\": {\n    \"eqsl\": {\n      \"command\": \"eqsl-mcp\"\n    }\n  }\n}\n```\n\n#### Cursor\n\nAdd to `.cursor/mcp.json` (project-level) or `~/.cursor/mcp.json` (global):\n\n```json\n{\n  \"mcpServers\": {\n    \"eqsl\": {\n      \"command\": \"eqsl-mcp\"\n    }\n  }\n}\n```\n\n#### VS Code / GitHub Copilot\n\nAdd to `.vscode/mcp.json` in your workspace:\n\n```json\n{\n  \"servers\": {\n    \"eqsl\": {\n      \"command\": \"eqsl-mcp\"\n    }\n  }\n}\n```\n\n#### Gemini CLI\n\nAdd to `~/.gemini/settings.json` (global) or `.gemini/settings.json` (project):\n\n```json\n{\n  \"mcpServers\": {\n    \"eqsl\": {\n      \"command\": \"eqsl-mcp\"\n    }\n  }\n}\n```\n\n### 3. Ask questions\n\n> \"Show me all eQSLs received this week\"\n\n> \"How many unconfirmed eQSLs do I have on 20m FT8?\"\n\n> \"Does W1AW have AG status on eQSL?\"\n\n> \"Verify my QSO with KI7MT on 20m on March 1, 2026\"\n\n## Testing Without Credentials\n\nThe two public tools (`eqsl_verify` and `eqsl_ag_check`) work without any credentials.\n\nFor `eqsl_inbox` testing, set the mock environment variable:\n\n```bash\nEQSL_MCP_MOCK=1 eqsl-mcp\n```\n\nOr point to a local ADIF file:\n\n```bash\nEQSL_MCP_MOCK=1 EQSL_MCP_ADIF=/path/to/test.adi eqsl-mcp\n```\n\n## MCP Inspector\n\n```bash\neqsl-mcp --transport streamable-http --port 8001\n```\n\nThen open the MCP Inspector at `http://localhost:8001`.\n\n## Development\n\n```bash\ngit clone https://github.com/qso-graph/eqsl-mcp.git\ncd eqsl-mcp\npip install -e .\n```\n\n## Date Formats\n\neQSL uses different date formats across endpoints. eqsl-mcp normalizes everything — you always use `YYYY-MM-DD`:\n\n| You provide | eqsl-mcp sends | Endpoint |\n|-------------|----------------|----------|\n| `2026-03-01` | `202603010000` | DownloadInBox (RcvdSince) |\n| `2026-03-01` | `03/01/2026` | VerifyQSO (QSODate) |\n\n## Mode Matching\n\neQSL requires exact mode matching. `SSB` won't match `USB`/`LSB`. `PSK` won't match `PSK31`. Use the exact mode logged by the other station.\n\n## License\n\nGPL-3.0-or-later\n",
  "bytes": 3956,
  "sha": "5a6e12de8b7d20282b6e180f8ae4778675815561d32e6fec207923eb1e0a8084",
  "repo_slug": "qso-graph/eqsl-mcp",
  "fonte": "repo",
  "truncated": false,
  "api": "https://agentalog.com/api/listings/mcp_io_github_qso_graph_eqsl_mcp_9d7abe17/readme"
}