Skip to main content
Documentation for ionis-mcp v1.6.2. Source at v1.6.2.

ionis-mcp

PyPI MCP Registry

MCP server for HF radio propagation analytics on the IONIS-AI datasets—175M+ aggregated signatures derived from 14 billion WSPR, RBN, contest, DXpedition and PSK Reporter observations, 2005–2026—through any MCP-compatible AI assistant.

Part of the qso-graph project. No authentication required. The datasets are downloaded once (see Datasets).

Install​

uv tool install ionis-mcp # puts ionis-mcp and ionis-download on your PATH
ionis-download --bundle minimal # 454 MB; see Datasets for the other bundles

Tools​

ToolDescriptionKey Parameters
list_datasetsAvailable datasets with row counts and file sizes—
query_signaturesSignature lookup filtered by source, band, grid, hour, monthsource, band, tx_grid, rx_grid, hour, month
band_openingsHour-by-hour propagation profile for a path on one bandtx_grid, rx_grid, band
path_analysisA path across all bands, hours, months and sourcestx_grid, rx_grid, source
solar_correlationSolar flux effect on propagation, by SFI bracketband, tx_grid, rx_grid
grid_infoMaidenhead grid decode with solar elevationgrid, hour, month
compare_sourcesCross-dataset comparison (WSPR vs RBN vs contest vs PSKR)tx_grid, rx_grid, band
dark_hour_analysisPaths by solar geometry: both-day, cross-terminator, both-darkband, hour, month
solar_historyHistorical solar indices for a date rangestart_date, end_date, resolution
band_summaryBand overview: hour distribution, top grid pairs, distancesband, source
current_conditionsLive forecast: SFI, Kp, solar wind, band outlook, POTA/SOTA tipsqth_grid
get_version_infoService version + upstream spec version (fleet identity attestation)—

What is IONIS-AI?​

IONIS-AI is an open-source machine learning system for predicting HF (shortwave) radio propagation. Its datasets are curated from the world's largest amateur radio telemetry networks and distributed as SQLite files on SourceForge. ionis-mcp lets an assistant answer propagation questions from them, no SQL required.

SourceSignaturesRaw ObservationsSNR TypeYears
WSPR93.6M10.9 billion beacon spotsMeasured (-30 to +20 dB)2008-2026
RBN67.3M2.3 billion CW/RTTY spotsMeasured (8-29 dB)2009-2026
CQ Contests5.7M234M SSB/RTTY QSOsAnchored (+10/0 dB)2005-2025
DXpeditions260K3.9M rare-grid pathsMeasured2009-2025
PSK Reporter8.4M514M+ FT8/WSPR spotsMeasured (-34 to +38 dB)Feb 2026+
Solar Indices—77K daily/3-hour recordsSFI, SSN, Kp, Ap2000-2026
DSCOVR L1—23K solar wind samplesBz, speed, densityFeb 2026+

All signature tables share an identical 13-column schema (tx_grid, rx_grid, band, hour, month, median_snr, spot_count, snr_std, reliability, avg_sfi, avg_kp, avg_distance, avg_azimuth)—ready for cross-source analysis.

Datasets​

# 1. Install
uv tool install ionis-mcp

# 2. Download datasets (to default location: ~/.ionis-mcp/data/)
ionis-download --bundle minimal # 454 MB — contest + solar + grids
ionis-download --bundle recommended # 1.1 GB — adds PSKR + DSCOVR
ionis-download --bundle full # 16.2 GB — all 9 datasets

# 3. Configure your MCP client (see Quick Start) and restart

That's it. Both ionis-download and ionis-mcp use the same default data directory. No environment variables needed.

Default data directory​

PlatformLocation
Linux / macOS~/.ionis-mcp/data/
Windows%LOCALAPPDATA%\ionis-mcp\data\

Override with a custom path:

# Download to custom location
ionis-download --bundle minimal /path/to/my/data

# Tell the server where to find it
ionis-mcp --data-dir /path/to/my/data
# or
export IONIS_DATA_DIR=/path/to/my/data

Download individual datasets​

# Pick specific datasets
ionis-download --datasets wspr,rbn,grids,solar

# See all available datasets and bundles
ionis-download --list

# Re-download (overwrite existing)
ionis-download --bundle minimal --force

If a download is interrupted (a dropped connection, Ctrl-C), run the same command again: it picks up where it stopped. Brief network errors are retried on their own. Sizes are in MB and GB (1 MB = 1,000,000 bytes).

Data directory layout​

~/.ionis-mcp/data/ (or $IONIS_DATA_DIR)
├── propagation/
│ ├── wspr-signatures/wspr_signatures_v2.sqlite (9.1 GB, 93.6M rows)
│ ├── rbn-signatures/rbn_signatures.sqlite (6.0 GB, 67.3M rows)
│ ├── contest-signatures/contest_signatures.sqlite (445 MB, 5.7M rows)
│ ├── dxpedition-signatures/dxpedition_signatures.sqlite (22 MB, 260K rows)
│ └── pskr-signatures/pskr_signatures.sqlite (635 MB, 8.4M rows)
├── solar/
│ ├── solar-indices/solar_indices.sqlite (8.0 MB, 76.7K rows)
│ └── dscovr/dscovr_l1.sqlite (3.0 MB, 23K rows)
└── tools/
├── grid-lookup/grid_lookup.sqlite (1.1 MB, 31.7K rows)
└── balloon-callsigns/balloon_callsigns_v2.sqlite (0.1 MB, 1.5K rows)

The server works with whatever datasets are present. Missing datasets degrade gracefully—tools that need unavailable data return clear messages instead of errors.

Quick Start​

Configure your MCP client​

ionis-mcp works with any MCP-compatible client. Add the server config and restart. The tools appear automatically.

If you downloaded data to a custom location, add "env": { "IONIS_DATA_DIR": "/path/to/data" } to any config below.

Claude Desktop​

Add to claude_desktop_config.json (~/Library/Application Support/Claude/ on macOS, %APPDATA%\Claude\ on Windows):

{
"mcpServers": {
"ionis": {
"command": "uvx",
"args": ["ionis-mcp"]
}
}
}

Claude Code​

Add to .claude/settings.json:

{
"mcpServers": {
"ionis": {
"command": "uvx",
"args": ["ionis-mcp"]
}
}
}

ChatGPT Desktop​

ChatGPT supports MCP via the OpenAI Agents SDK. Add under Settings > Apps & Connectors, or configure in your agent definition:

{
"mcpServers": {
"ionis": {
"command": "uvx",
"args": ["ionis-mcp"]
}
}
}

Cursor​

Add to .cursor/mcp.json (project-level) or ~/.cursor/mcp.json (global):

{
"mcpServers": {
"ionis": {
"command": "uvx",
"args": ["ionis-mcp"]
}
}
}

VS Code / GitHub Copilot​

Add to .vscode/mcp.json in your workspace:

{
"servers": {
"ionis": {
"command": "uvx",
"args": ["ionis-mcp"]
}
}
}

Gemini CLI​

Add to ~/.gemini/settings.json (global) or .gemini/settings.json (project):

{
"mcpServers": {
"ionis": {
"command": "uvx",
"args": ["ionis-mcp"]
}
}
}

Installed with pip instead? Use "command": "ionis-mcp" in any config above.

Ask questions​

"When is 20m open from Idaho to Europe?"

"How does solar flux affect 15m propagation?"

"Show me 10m paths at 03z where both stations are in the dark"

"Compare WSPR and RBN observations on 20m FN31 to JO51"

"What are the current band conditions? I'm heading out for POTA."

"What were the solar conditions during the February 2026 geomagnetic storm?"

Architecture​

  • Transport: stdio (Claude Desktop / Claude Code) or streamable-http (MCP Inspector)
  • Database: Read-only sqlite3 connections (?mode=ro)—no writes, ever
  • Query safety: All queries use parameterized SQL (? placeholders), result limits enforced server-side (max 1000 rows)
  • Grid lookup: 31.7K Maidenhead grids loaded into memory at startup (~2 MB) for instant lat/lon resolution
  • Solar geometry: Pure Python solar elevation computation (same algorithm as the IONIS-AI training pipeline)—classifies endpoints as day/twilight/night for propagation context
  • Cross-source queries: Each SQLite database opened separately, results merged in Python with source labels

MCP Inspector​

ionis-mcp --transport streamable-http --port 8000

Then open the MCP Inspector at http://localhost:8000/mcp.

Development​

git clone https://github.com/qso-graph/ionis-mcp.git
cd ionis-mcp
uv sync --group dev
uv run pytest
RepositoryPurpose
ionis-validateIONIS-AI model validation suite (PyPI)
IONIS-AI datasetsDistributed dataset files (SourceForge)

License​

GPL-3.0-or-later

Citation​

If you use the IONIS-AI datasets in research, please cite:

Beam, G. (KI7MT). IONIS: Ionospheric Neural Inference System—HF Propagation Prediction Datasets. SourceForge, 2026. https://sourceforge.net/projects/ionis-ai/


Tool Reference

Generated from the released server's own tool definitions.

band_openings

When does a specific band open between two grid squares?

Shows propagation hour-by-hour (0-23z) for a grid pair on a given band. Includes spot-count-weighted SNR, reliability, SFI, and solar elevation at both endpoints.

ParameterTypeRequiredDefaultDescription
tx_gridstringYesTransmitter 4-char Maidenhead grid (e.g., "DN13")
rx_gridstringYesReceiver 4-char Maidenhead grid (e.g., "JO51")
bandintegerYesADIF band ID (102-111)
sourcestringNo"all"

band_summary

Overview of a band across all hours and available sources.

Shows total signatures and spots, hour distribution, top grid pairs, SFI range observed, and distance distribution.

ParameterTypeRequiredDefaultDescription
bandintegerYesADIF band ID (102-111)
sourcestringNo"all"Dataset source or "all"

compare_sources

Cross-dataset comparison for a path/band.

Shows side-by-side data from all available sources (WSPR, RBN, Contest, DXpedition, PSKR) for the same path. Useful for validating observations across independent measurement systems.

ParameterTypeRequiredDefaultDescription
tx_gridstringYesTransmitter 4-char grid
rx_gridstringYesReceiver 4-char grid
bandintegerYesADIF band ID (102-111)
hourintegerNonullSpecific UTC hour (omit for all hours)

current_conditions

Live space weather and band conditions — like a morning propagation forecast.

Fetches real-time solar flux (SFI), Kp index, solar wind data, and active alerts from NOAA SWPC. Generates an operator-friendly band outlook based on current conditions and historical propagation patterns.

Perfect for: "What bands should I use today?" or "Is it worth setting up for POTA/SOTA on 10m?"

ParameterTypeRequiredDefaultDescription
qth_gridstringNonullYour 4-char Maidenhead grid (e.g., "DN13") for solar elevation context. Optional but recommended.

dark_hour_analysis

Classify propagation paths by solar geometry — both-day, cross-terminator, or both-dark.

For a given band and hour, retrieves paths and classifies each by the solar elevation at both endpoints. Useful for identifying physically anomalous paths (e.g., 10m both-dark propagation).

ParameterTypeRequiredDefaultDescription
bandintegerYesADIF band ID (102-111)
hourintegerYesUTC hour (0-23)
monthintegerNonullMonth (1-12) for solar geometry (default: all months aggregated)
sourcestringNo"pskr"Dataset source (default: "pskr" for most recent data)
min_spotsintegerNo10Minimum spot count filter (default: 10)

get_version_info

Get ionis-mcp service version and upstream dataset version.

Returns the running PyPI version of ionis-mcp and the IONIS SourceForge dataset bundle revision in use. Use this to confirm fleet alignment across MCP deployments — agents can compare service_version and spec_version across servers to detect drift without going outside the MCP protocol.

No parameters.

grid_info

Decode a Maidenhead grid to lat/lon and compute solar elevation.

Converts a 4-char or 6-char Maidenhead grid square to geographic coordinates. If hour is provided, computes solar elevation angle with day/twilight/night classification.

ParameterTypeRequiredDefaultDescription
gridstringYesMaidenhead grid (4-char like "DN13" or 6-char like "DN13la")
hourintegerNonullUTC hour (0-23) for solar elevation calculation
monthintegerNonullMonth (1-12) for solar elevation (used if day_of_year not given)
day_of_yearintegerNonullDay of year (1-366) for precise solar elevation

list_datasets

Show available IONIS datasets and their statistics.

Lists all datasets found in the configured data directory with row counts, file sizes, and descriptions. Use this to see what data is available for querying.

No parameters.

path_analysis

Complete analysis of a propagation path across all bands and hours.

Provides distance/azimuth, best band/hour combinations ranked by reliability, seasonal patterns, solar geometry, and total observation counts from all available data sources.

ParameterTypeRequiredDefaultDescription
tx_gridstringYesTransmitter 4-char Maidenhead grid
rx_gridstringYesReceiver 4-char Maidenhead grid
sourcestringNo"all"Dataset source or "all"

query_signatures

Query propagation signatures with filters.

Searches across WSPR, RBN, Contest, DXpedition, and PSKR signature tables. All signature tables share the same 13-column schema.

ParameterTypeRequiredDefaultDescription
sourcestringNo"all""wspr", "rbn", "contest", "dxpedition", "pskr", or "all"
bandintegerNonullADIF band ID (102=160m, 103=80m, 104=60m, 105=40m, 106=30m, 107=20m, 108=17m, 109=15m, 110=12m, 111=10m)
tx_gridstringNonullTX grid square (4-char like "DN13" or 2-char field like "DN")
rx_gridstringNonullRX grid square (4-char or 2-char)
hourintegerNonullUTC hour (0-23)
monthintegerNonullMonth (1-12)
min_spotsintegerNo5Minimum spot count filter (default: 5)
limitintegerNo100Max rows returned (default: 100, max: 1000)

solar_correlation

How does solar flux (SFI) affect propagation on a specific band?

Groups signatures by SFI bracket and shows spot counts, average SNR, and reliability for each bracket. Higher SFI generally helps HF bands above 30m (F-layer ionization) but hurts bands below 30m (D-layer absorption).

ParameterTypeRequiredDefaultDescription
bandintegerYesADIF band ID (102-111)
tx_gridstringNonullOptional TX grid to filter (omit for global)
rx_gridstringNonullOptional RX grid to filter (omit for global)
sourcestringNo"wspr"Dataset source (default: "wspr")

solar_history

Query historical solar indices (SFI, SSN, Kp, Ap) for a date range.

Returns solar flux, sunspot number, and geomagnetic indices from the IONIS dataset (GFZ Potsdam and NOAA SWPC, 2000-2026). For live current conditions, use solar-mcp's solar_conditions tool instead.

ParameterTypeRequiredDefaultDescription
start_datestringYesStart date (YYYY-MM-DD)
end_datestringYesEnd date (YYYY-MM-DD)
resolutionstringNo"daily""daily" (default) or "3hour" for Kp resolution