wspr-ai-lite
Lightweight WSPR analytics and AI‑ready backend using DuckDB + Streamlit, with safe query access via MCP Agents.
Workflows and Packaging Status
Overview
- Analytics Dashboard: Streamlit UI lets you explore WSPR spots with SNR trends, DX distance analysis, station activity, and “QSO‑like” reciprocity views.
- Canonical Schema: Data is normalized into a portable DuckDB file—consistent, lightweight, and ready for future backend upgrades.
- CLI Tools: Click-based tools (
wspr-ai-lite,wspr-ai-lite-fetch,wspr-ai-lite-tools) for downloading, ingesting, verifying, and managing the database. - MCP Integration: Experimental MCP server (
wspr-ai-lite-mcp) exposing safe APIs for AI agents. A manifest defines permitted queries and access control. - Roadmap (v0.4+ vision): MCP server will migrate to a FastAPI + Uvicorn backend with service control (start/stop/restart), enabling production-grade deployment.
What Can You Do With It
Explore Weak Signal Propagation Reporter (WSPR) data with an easy, local dashboard:
- SNR distributions & monthly spot trends
- Top reporters, most-heard TX stations
- Geographic spread & distance/DX analysis
- QSO-like reciprocal reports
- Hourly activity heatmaps & yearly unique counts
- Works on Windows, Linux, macOS — no heavy server required.
Key Features
- Local DuckDB storage with efficient ingest + caching
- Streamlit UI for interactive exploration
- Distance/DX analysis with Maidenhead grid conversion
- QSO-like reciprocal finder with configurable time window
Fast Performance
- Columnar Storage: DuckDB is a columnar database, which allows for better data compression and faster query execution.
- Vectorization: processes data in batches, optimized CPU usage, significantly faster than traditional OLTP databases.
Ease of Use
- Simple Installation: DuckDB can be installed with just a few lines of code, and on any platform.
- In-Process Operation: It runs within as a host application, eliminating network latency and simplifying data access.
Quickstart (Recommended: PyPI)
1. Install from PyPI
optional but recommended: create a Python virtual environment first
python3 -m venv .venv && source .venv/bin/activate
pip install wspr-ai-lite
2. Ingest Data
Fetch WSPRNet monthly archives and load them into DuckDB:
wspr-ai-lite ingest --from 2014-07 --to 2014-07 --db data/wspr.duckdb
- Downloads compressed monthly CSVs (caches locally in .cache/)
- Normalizes into data/wspr.duckdb
- Adds extra fields (band, reporter grid, tx grid)
3. Launch the Dashboard
wspr-ai-lite ui --db data/wspr.duckdb --port 8501
Open http://localhost:8501 in your browser 🎉
👉 For developers who want to hack on the code directly, see Developer Setup.
Example Visualizations
- SNR Distribution by Count
- Monthly Spot Counts
- Top Reporting Stations
- Most Heard TX Stations
- Geographic Spread (Unique Grids)
- Distance Distribution + Longest DX
- Best DX per Band
- Activity by Hour × Month
- TX/RX Balance and QSO Success Rate
Development
For contributors and developers:
- docs/dev-setup.md --> Development setup guide
- docs/testing.md --> Testing instructions (pytest + Makefile)
- docs/troubleshooting.md --> Common issues & fixes
make setup-dev # create venv and install deps
make ingest # run ingest pipeline
make run # launch Streamlit UI
make test # run pytest suite
Makefile Usage
There is an extensive list of Makefile targets that simplify operations. See make help for a full list of available targets.
Get Help
- Report a bug → New Bug Report
- Request a feature → New Feature Request
- Ask a question / share ideas → GitHub Discussions
- Read the docs → https://ki7mt.github.io/wspr-ai-lite/
Acknowledgements
- Joe Taylor, K1JT, and the WSJT-X Development Team
- WSPRNet community for providing global weak-signal data
- Contributors to DuckDB and Streamlit
- Amateur radio operators worldwide who share spots and keep the network alive
Contributing
Pull requests are welcome!
Roadmap
- Phase 1: wspr-ai-lite (this project)
- Lightweight, local-only DuckDB + Streamlit dashboard
- Phase 2: wspr-ai-analytics (modernize wspr-analytics)
- Full analytics suite with ClickHouse, Grafana, AI Agents, and MCP integration
- Designed for heavier infrastructure and richer analysis
📜 License
MIT — free to use for amateur radio and research.
Metadata
Release files for wspr-ai-lite 0.4.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| wspr_ai_lite-0.4.0.tar.gz | 34.3 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| wspr_ai_lite-0.4.0-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 67.4 kB
Release files / wspr_ai_lite-0.4.0.tar.gz
| Download URL | wspr_ai_lite-0.4.0.tar.gz |
|---|---|
| Size | 34.3 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
fce90dc5278e58d503de3133f2481bb0be71d35d93fbcb9201728768fcc0b1e3
|
|
BLAKE2b-256 checksum How to use checksums |
009cfcefbc26aea85bd2519a98086b251068f08a3c10c53eddd187706f21099d
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/6.1.0 CPython/3.12.9
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Aug 26, 2025.
Transparency logRelease files / wspr_ai_lite-0.4.0-py3-none-any.whl
| Download URL | wspr_ai_lite-0.4.0-py3-none-any.whl |
|---|---|
| Size | 33.1 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
6a67f19c5741261c8b3888a8a2a111b374e2983bcf62fa224c029c81ce9149fe
|
|
BLAKE2b-256 checksum How to use checksums |
e1a03627a0f02a58fc1dddf13d79edfa637e51d9bfa3023ceae2188329485ea2
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/6.1.0 CPython/3.12.9
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Aug 26, 2025.
Transparency log