{
  "markdown": "<!-- mcp-name: io.github.qso-graph/wspr-mcp -->\n# wspr-mcp\n\nMCP server for [WSPR](https://www.wsprnet.org/) (Weak Signal Propagation Reporter) beacon data — live spots, band activity, top beacons, propagation paths, SNR trends, and more through any MCP-compatible AI assistant.\n\nData from [wspr.live](https://wspr.live/) (~2.7 billion spots, 2008-present). Part of the [qso-graph](https://qso-graph.io/) project. **No authentication required** — all public data.\n\n## Install\n\n```bash\npip install wspr-mcp\n```\n\n## Tools\n\n| Tool | Description | Key Parameters |\n|------|-------------|----------------|\n| `wspr_spots` | Recent WSPR spots with flexible filtering | callsign, band, hours, grid, min/max SNR, min distance |\n| `wspr_band_activity` | Per-band spot counts, station counts, distances, and SNR | hours |\n| `wspr_top_beacons` | Top transmitters ranked by spot count or max distance | band, hours, sort_by (spots/distance), limit |\n| `wspr_top_spotters` | Top receivers ranked by spot count or max distance | band, hours, sort_by (spots/distance), limit |\n| `wspr_propagation` | Propagation between two locations — auto-widens to field-level proxy for sparse endpoints | tx, rx, band, hours |\n| `wspr_grid_activity` | All WSPR activity in/out of a Maidenhead grid square | grid (2 or 4 char), band, hours |\n| `wspr_longest_paths` | Longest distance WSPR paths in a time window | band, hours, min_distance, limit |\n| `wspr_snr_trend` | Hourly SNR trend for a specific path over time | tx, rx, band, hours |\n| `get_version_info` | Service version + upstream spec version (fleet identity attestation) | — |\n\n## What is WSPR?\n\nWSPR beacons transmit a 2-minute encoded signal at very low power (typically 200 mW to 5 W). Each decoded spot proves a propagation path exists between two locations on a specific band. With thousands of beacons worldwide transmitting 24/7, WSPR provides continuous, automated propagation monitoring across all HF bands.\n\n## Good Neighbour Policy\n\nwspr.live is a volunteer-run service that mirrors all wsprnet.org data into a public ClickHouse database. We take our responsibility as a good neighbour seriously:\n\n| Measure | Detail |\n|---------|--------|\n| **Rate limiting** | 3 seconds between requests (20 req/min max) |\n| **Circuit breaker** | Opens after 3 consecutive failures; exponential backoff up to 5 minutes. Prevents hammering a struggling service. |\n| **Time-bounded queries** | Every query filters by time (max 72 hours). No unbounded full-table scans. |\n| **Band filtering** | Queries filter by band whenever the user provides one — this hits wspr.live's indexes efficiently. |\n| **Column selection** | We SELECT only the columns each tool needs (8-10 per query), never `SELECT *`. |\n| **Result limits** | All queries cap results (200 spots, 50 leaderboard entries). |\n| **Response caching** | 2-10 minute TTL per tool. Identical queries within the window hit local cache with zero network traffic. |\n| **Request timeout** | 20-second timeout — we don't hold connections open on a shared service. |\n| **User-Agent header** | Every request identifies itself as `wspr-mcp/{version}` so the operators can reach us if needed. |\n\nIf wspr.live is down or overloaded, the circuit breaker backs off automatically. We don't retry in a tight loop.\n\n## Quick Start\n\nNo credentials needed — just install and configure your MCP client.\n\n### Configure your MCP client\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    \"wspr\": {\n      \"command\": \"wspr-mcp\"\n    }\n  }\n}\n```\n\n#### Claude Code\n\nAdd to `.claude/settings.json`:\n\n```json\n{\n  \"mcpServers\": {\n    \"wspr\": {\n      \"command\": \"wspr-mcp\"\n    }\n  }\n}\n```\n\n#### ChatGPT Desktop\n\n```json\n{\n  \"mcpServers\": {\n    \"wspr\": {\n      \"command\": \"wspr-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    \"wspr\": {\n      \"command\": \"wspr-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    \"wspr\": {\n      \"command\": \"wspr-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    \"wspr\": {\n      \"command\": \"wspr-mcp\"\n    }\n  }\n}\n```\n\n### Ask questions\n\n> \"Show me recent WSPR spots on 20m\"\n\n> \"What bands are open right now?\"\n\n> \"Who are the top WSPR beacons on 20m today?\"\n\n> \"What are the longest WSPR paths in the last 24 hours?\"\n\n> \"Is there propagation between Idaho (DN13) and central Europe (JN48)?\"\n\n> \"Any WSPR paths between DN13 and Bouvet (JD15)?\" *(auto-widens to DN↔JD if no exact match)*\n\n> \"What's happening in grid square JN48?\"\n\n> \"How's the SNR trending between K9AN and G8JNJ on 20m?\"\n\n> \"Who are the best WSPR receivers sorted by distance?\"\n\n## Testing Without Network\n\n```bash\nWSPR_MCP_MOCK=1 wspr-mcp\n```\n\n## MCP Inspector\n\n```bash\nwspr-mcp --transport streamable-http --port 8009\n```\n\n## Development\n\n```bash\ngit clone https://github.com/qso-graph/wspr-mcp.git\ncd wspr-mcp\npip install -e .\n```\n\n## License\n\nGPL-3.0-or-later\n",
  "bytes": 5209,
  "sha": "2269162f8a584130be24bcef100c77a4dbf6903dc9dfab1874d9e790618859f4",
  "repo_slug": "qso-graph/wspr-mcp",
  "fonte": "repo",
  "truncated": false,
  "api": "https://agentalog.com/api/listings/mcp_io_github_qso_graph_wspr_mcp_706b2f9a/readme"
}