Skip to main content
Glama
qso-graph

io.github.qso-graph/ionis-mcp

by qso-graph

ionis-mcp

A Model Context Protocol (MCP) server for HF radio propagation analytics, built on the IONIS dataset collection — 175M+ aggregated signatures derived from 14 billion WSPR, RBN, Contest, DXpedition, and PSK Reporter observations spanning 2005-2026.

Overview

IONIS (Ionospheric Neural Inference System) is an open-source machine learning system for predicting HF (shortwave) radio propagation. The datasets — curated from the world's largest amateur radio telemetry networks — are distributed as SQLite files on SourceForge.

ionis-mcp bridges those datasets to AI assistants via the Model Context Protocol. Install the package, download data, and Claude (Desktop or Code) can answer propagation questions using 11 specialized tools — no SQL required.

Example 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?"

Related MCP server: GR-MCP

Datasets

Source

Signatures

Raw Observations

SNR Type

Years

WSPR

93.6M

10.9B beacon spots

Measured (-30 to +20 dB)

2008-2026

RBN

67.3M

2.3B CW/RTTY spots

Measured (8-29 dB)

2009-2026

CQ Contests

5.7M

234M SSB/RTTY QSOs

Anchored (+10/0 dB)

2005-2025

DXpeditions

260K

3.9M rare-grid paths

Measured

2009-2025

PSK Reporter

8.4M

514M+ FT8/WSPR spots

Measured (-34 to +38 dB)

Feb 2026+

Solar Indices

77K daily/3-hour records

SFI, SSN, Kp, Ap

2000-2026

DSCOVR L1

23K solar wind samples

Bz, speed, density

Feb 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.

Quick Start

# 1. Install
pip install ionis-mcp

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

# 3. Configure Claude (see below) and restart — tools appear automatically

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

Default Data Directory

Platform

Location

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

Configure Your MCP Client

ionis-mcp works with any MCP-compatible client. Add the server config and restart — 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": "ionis-mcp"
    }
  }
}

Claude Code

Add to .claude/settings.json:

{
  "mcpServers": {
    "ionis": {
      "command": "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": "ionis-mcp"
    }
  }
}

Cursor

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

{
  "mcpServers": {
    "ionis": {
      "command": "ionis-mcp"
    }
  }
}

VS Code / GitHub Copilot

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

{
  "servers": {
    "ionis": {
      "command": "ionis-mcp"
    }
  }
}

Gemini CLI

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

{
  "mcpServers": {
    "ionis": {
      "command": "ionis-mcp"
    }
  }
}

Tools

Tool

Purpose

list_datasets

Show available datasets with row counts and file sizes

query_signatures

Flexible signature lookup — filter by source, band, grid, hour, month

band_openings

Hour-by-hour propagation profile for a path on a specific band

path_analysis

Complete path analysis across all bands, hours, months, and sources

solar_correlation

SFI effect on propagation — grouped by solar flux bracket

grid_info

Maidenhead grid decode with solar elevation computation

compare_sources

Cross-dataset comparison (WSPR vs RBN vs Contest vs PSKR)

dark_hour_analysis

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

solar_history

Historical solar indices for any date range

band_summary

Band overview — hour distribution, top grid pairs, distance range

current_conditions

Live propagation forecast — SFI, Kp, solar wind, band outlook, POTA/SOTA tips

get_version_info

Service version + upstream dataset version (fleet identity attestation)

Data Directory Layout

~/.ionis-mcp/data/                  (or $IONIS_DATA_DIR)
├── propagation/
│   ├── wspr-signatures/wspr_signatures_v2.sqlite      (8.4 GB, 93.6M rows)
│   ├── rbn-signatures/rbn_signatures.sqlite            (5.6 GB, 67.3M rows)
│   ├── contest-signatures/contest_signatures.sqlite    (424 MB, 5.7M rows)
│   ├── dxpedition-signatures/dxpedition_signatures.sqlite (22 MB, 260K rows)
│   └── pskr-signatures/pskr_signatures.sqlite          (606 MB, 8.4M rows)
├── solar/
│   ├── solar-indices/solar_indices.sqlite               (7.7 MB, 76.7K rows)
│   └── dscovr/dscovr_l1.sqlite                         (2.9 MB, 23K rows)
└── tools/
    ├── grid-lookup/grid_lookup.sqlite                   (1.1 MB, 31.7K rows)
    └── balloon-callsigns/balloon_callsigns_v2.sqlite    (116 KB, 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.

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 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

Testing with MCP Inspector

ionis-mcp --transport streamable-http --port 8000
# Open http://localhost:8000/mcp in browser

Repository

Purpose

ionis-validate

IONIS model validation suite (PyPI)

IONIS Datasets

Distributed dataset files (SourceForge)

License

GPL-3.0-or-later

Citation

If you use the IONIS 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/

Available Tools

12 tools
band_openingsA

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
tx_gridYesTransmitter 4-char Maidenhead grid (e.g., "DN13")
rx_gridYesReceiver 4-char Maidenhead grid (e.g., "JO51")
bandYesADIF band ID (102-111)
sourceNoall

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description fully carries the burden of behavioral disclosure. It transparently lists output components (SNR, reliability, SFI, solar elevation) and the hourly breakdown. No hidden side effects are mentioned, but the description is sufficient for safe invocation.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is concise at two sentences, front-loaded with the key question, and contains no redundant or extraneous information. Every sentence adds value.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the presence of an output schema (not shown but indicated by context signals), the description does not need to detail return values. It provides a useful summary of output fields. However, it could mention the purpose of the 'source' parameter and any required antenna or propagation data prerequisites. Overall adequate for the tool's complexity.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 75%, covering three required parameters. The description does not add meaning beyond the schema for these parameters. The optional 'source' parameter lacks a description in both schema and tool description, slightly reducing clarity. Baseline of 3 is appropriate given high but incomplete coverage.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool's purpose with a specific verb-resource combination: 'When does a specific band open between two grid squares?' It distinguishes from siblings like band_summary and path_analysis by focusing on hour-by-hour propagation for a specific grid pair and band.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies usage for checking band openings between grids, but does not explicitly state when to use this tool over alternatives or provide exclusions. No guidance on prerequisites or contexts where other tools (e.g., path_analysis) might be more appropriate.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

band_summaryA

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
bandYesADIF band ID (102-111)
sourceNoDataset source or "all"all

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.7/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description bears full burden. It discloses output contents but does not mention behavioral aspects like data freshness, query latency, or that it is read-only. The 'Overview' phrasing implies aggregation but lacks explicit behavioral traits.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences front-load the purpose and list key outputs efficiently. There is minimal fluff, though the list could be slightly tighter.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the simple schema with only 2 parameters and the presence of an output schema, the description adequately covers the tool's purpose and output. It could mention that it aggregates across all hours, but it is reasonably complete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% with clear descriptions for both parameters (band: ADIF band ID, source: dataset source or 'all'). The description adds no extra meaning beyond the schema, so baseline 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states 'Overview of a band across all hours and available sources' and enumerates specific outputs like total signatures, spots, hour distribution, top grid pairs, SFI range, and distance distribution. This distinguishes it from siblings like band_openings or compare_sources.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies use for getting a broad summary but provides no explicit guidance on when to use this tool versus alternatives, nor any conditions or exclusions.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

compare_sourcesA

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
tx_gridYesTransmitter 4-char grid
rx_gridYesReceiver 4-char grid
bandYesADIF band ID (102-111)
hourNoSpecific UTC hour (omit for all hours)

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.6/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries full burden for behavioral transparency. It only describes the high-level function and does not disclose aspects like read-only nature, data freshness, rate limits, or authentication requirements. The description is insufficient to fully inform an agent about operational constraints.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is extremely efficient: three short sentences with no unnecessary words. The main purpose is front-loaded, and each sentence adds value (purpose, action, use case). There is no repetition or fluff.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the existence of an output schema (reducing need to describe return values), the description is reasonably complete. It identifies the data sources and the validation use case. One could argue for a 3, but the presence of the output schema and clear purpose brings it to 4 – it covers the essential context for a tool of this complexity.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the schema already documents all 4 parameters. The description adds context that parameters define the path and band for comparison, but adds little beyond the schema. Baseline is 3, and this is met.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses a specific verb ('Shows side-by-side data') and clearly identifies the resource (cross-dataset comparison for a path/band). It lists the distinct sources (WSPR, RBN, etc.) which differentiates it from sibling tools like path_analysis or band_openings that likely focus on single sources or other aspects.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description notes the tool is 'useful for validating observations across independent measurement systems', implying a use case. However, it does not explicitly state when to use this tool over alternatives, nor does it mention when not to use it. Sibling tools like path_analysis could be complementary, but no guidance is provided.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

current_conditionsA

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?"

ParametersJSON Schema
NameRequiredDescriptionDefault
qth_gridNoYour 4-char Maidenhead grid (e.g., "DN13") for solar elevation context. Optional but recommended.

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.2/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full burden. It discloses that it fetches real-time data from NOAA SWPC and generates an operator-friendly band outlook, but does not explicitly state that it is read-only or describe any side effects, rate limits, or authentication needs. Given the output schema exists, the description provides adequate but not rich behavioral context.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is concise, using three short paragraphs that front-load key information. Every sentence adds value: a metaphor, a list of data sources, and clear use cases. No unnecessary words.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's simplicity (one optional param, no required fields, output schema exists), the description covers purpose, usage, parameters, and expected outcome. It does not discuss limitations or data freshness, but overall it is sufficiently complete for an agent to use it correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema has one optional parameter with a description. The description adds 'solar elevation context' and indicates it is 'optional but recommended', which provides additional guidance beyond the schema. Since schema coverage is 100%, a baseline of 3 is appropriate, and the added context merits a 4.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states it provides live space weather and band conditions, fetching specific data like SFI and Kp index, and generating a band outlook. It uses the metaphor 'like a morning propagation forecast' and gives specific use cases ('What bands should I use today?'), making it easy to distinguish from siblings like band_openings or band_summary.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explicitly states 'Perfect for: ...' with two concrete use cases, which helps an agent decide when to invoke it. However, it does not provide guidance on when not to use it or explicitly compare with sibling tools.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

dark_hour_analysisA

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).

ParametersJSON Schema
NameRequiredDescriptionDefault
bandYesADIF band ID (102-111)
hourYesUTC hour (0-23)
monthNoMonth (1-12) for solar geometry (default: all months aggregated)
sourceNoDataset source (default: "pskr" for most recent data)pskr
min_spotsNoMinimum spot count filter (default: 10)

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Without annotations, the description carries full burden. It discloses that the tool retrieves paths and classifies them based on solar elevation, implying read-only behavior. However, it does not mention potential limitations, data source specifics, or whether it modifies anything. The behavioral disclosure is adequate but minimal.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is very concise: two sentences plus a short clarification, totaling under 50 words. The main purpose is front-loaded in the first sentence, and every sentence adds value without redundancy. Excellent structure.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool has 5 parameters and an output schema, the description covers the core functionality and provides an example use case. It does not explicitly describe the output schema, but that is acceptable since the schema is provided. Minor omission: no mention that month defaults to aggregated, but overall complete enough.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the schema already documents all parameters. The description adds context by tying 'band' and 'hour' to solar geometry and mentioning the classification outcome, but does not elaborate on optional parameters like 'month' or 'source'. This meets the baseline for high schema coverage.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool classifies propagation paths by solar geometry into three categories (both-day, cross-terminator, or both-dark). The verb 'Classify' and the resource 'propagation paths' are specific, and the output categories are listed, making it distinct from sibling tools like path_analysis or solar_correlation.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides a clear usage context: 'Useful for identifying physically anomalous paths (e.g., 10m both-dark propagation).' This tells the agent when to apply the tool but does not explicitly state when not to use it or compare to alternatives, leaving some ambiguity.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_version_infoA

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.

Returns: service_name, service_version (PyPI), and spec_version (dataset bundle).

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.3/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description fully describes the read-only behavior: it returns version values without side effects. It explains the meaning of each returned field (PyPI version, dataset bundle revision). No error conditions or rate limits are mentioned, but for a simple query, this is adequate.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is concise: a few sentences that front-load the main purpose, provide usage context, and specify return values. Every sentence adds value without redundancy. Excellent structure.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's simplicity (no parameters, output schema exists), the description is complete. It explains purpose, usage scenario, and return fields. No gaps in necessary information for an agent to select and invoke this tool correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema has zero parameters and 100% schema coverage, so the baseline is 3. The description adds no parameter information (none needed), but it does clarify the output fields, which is a bonus. No points lost.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool retrieves service version and upstream dataset version. The verb 'get' matches the tool name, and the specific returned fields (service_version, spec_version) are identified. Among sibling tools, none serve this version-check purpose, so it is distinct and unambiguous.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explicitly states when to use this tool: to confirm fleet alignment across MCP deployments and detect drift. It implies when not to use it (when no version comparison needed). While it does not name alternatives, the sibling list shows no comparable tool, so guidance is clear.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

grid_infoA

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
gridYesMaidenhead grid (4-char like "DN13" or 6-char like "DN13la")
hourNoUTC hour (0-23) for solar elevation calculation
monthNoMonth (1-12) for solar elevation (used if day_of_year not given)
day_of_yearNoDay of year (1-366) for precise solar elevation

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full burden. It clearly states the tool converts grids and computes solar elevation, with a classification output. Although it does not detail edge cases or validation, the description is transparent about its core behavior and is not contradictory.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is concise with two short paragraphs. It front-loads the main purpose and then explains optional parameters. Every sentence adds value without redundancy.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's moderate complexity (grid conversion and solar calculation), the description covers both functions adequately. An output schema exists, so return values are not needed in the description. The mention of day/twilight/night classification completes the picture.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% with detailed descriptions. The description adds value by explaining the relationship between month and day_of_year (fallback logic) and the purpose of the hour parameter. This exceeds the baseline expectation for a fully described schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool decodes a Maidenhead grid to lat/lon and optionally computes solar elevation. It specifies input formats (4-char or 6-char) and the optional parameters for solar calculation. This distinguishes it from sibling tools like band_openings or solar_correlation, which serve different purposes.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explains when to use optional parameters (hour, month, day_of_year) for solar elevation computation. It implicitly suggests when not to use them (if only lat/lon is needed). However, it does not explicitly exclude usage scenarios or provide alternatives among siblings.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_datasetsA

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.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.7/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Even without annotations, the description fully discloses the tool's behavior as a read-only listing operation, mentioning what it returns (datasets with statistics). No hidden side effects are implied.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is two short paragraphs, front-loaded with the purpose, and every sentence provides necessary information. No wasted words.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given zero parameters and an existing output schema, the description covers all relevant information about the tool's purpose and output. It is complete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema has no parameters (schema coverage 100%), so the description correctly adds no parameter information. A baseline of 4 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool's function: 'Show available IONIS datasets and their statistics.' It specifies listing datasets with row counts, file sizes, and descriptions, which distinguishes it from sibling tools like 'band_summary' or 'compare_sources'.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides explicit usage context: 'Use this to see what data is available for querying.' It does not mention when to avoid using it or alternatives, but for a straightforward listing tool, this is sufficient.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

path_analysisA

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
tx_gridYesTransmitter 4-char Maidenhead grid
rx_gridYesReceiver 4-char Maidenhead grid
sourceNoDataset source or "all"all

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.8/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations provided, so description carries burden. Describes outputs and data sources ('all available data sources') but does not mention read-only nature, authorization, or constraints. Adequate but not thorough.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences, front-loaded with key action, no redundant information. Every word adds value.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Has output schema, so return details unnecessary. Description covers major aspects: distance/azimuth, band/hour ranking, seasonal patterns, solar geometry, counts. Missing prerequisites or data source details, but adequate for complexity.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

All 3 parameters have descriptions in schema (100% coverage). Description adds context about combining bands/hours but no additional param-specific meaning beyond schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Clearly states 'Complete analysis of a propagation path across all bands and hours' with specific outputs listed. Distinguishes from siblings like band_openings and band_summary by being comprehensive.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Implies use for thorough path analysis but does not explicitly state when to use or avoid this tool compared to siblings like current_conditions or dark_hour_analysis. No exclusions or alternatives mentioned.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

query_signaturesC

Query propagation signatures with filters.

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

ParametersJSON Schema
NameRequiredDescriptionDefault
sourceNo"wspr", "rbn", "contest", "dxpedition", "pskr", or "all"all
bandNoADIF band ID (102=160m, 103=80m, 104=60m, 105=40m, 106=30m, 107=20m, 108=17m, 109=15m, 110=12m, 111=10m)
tx_gridNoTX grid square (4-char like "DN13" or 2-char field like "DN")
rx_gridNoRX grid square (4-char or 2-char)
hourNoUTC hour (0-23)
monthNoMonth (1-12)
min_spotsNoMinimum spot count filter (default: 5)
limitNoMax rows returned (default: 100, max: 1000)

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

C2.9/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description should disclose behaviors. It mentions searching across multiple tables and a common schema, but lacks details on mutability (likely read-only), performance, error handling, or pagination.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is two concise sentences that communicate the core functionality. It is not verbose, but every sentence is meaningful and earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the 8 parameters (all documented in schema) and an output schema (inferred), the description provides adequate context. However, it could be more complete by briefly summarizing the output or typical usage scenarios.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the description adds minimal value beyond the schema. It mentions the common schema across tables but does not elaborate on parameter semantics beyond what the schema already provides.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states it queries propagation signatures with filters, listing specific tables (WSPR, RBN, etc.), which is a specific verb and resource. However, it does not differentiate from sibling tools like band_openings or band_summary, so it loses some clarity.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance is provided on when to use this tool versus the many sibling tools. The description does not mention scenarios, prerequisites, or when it would be preferred over alternatives.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

solar_correlationA

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).

ParametersJSON Schema
NameRequiredDescriptionDefault
bandYesADIF band ID (102-111)
tx_gridNoOptional TX grid to filter (omit for global)
rx_gridNoOptional RX grid to filter (omit for global)
sourceNoDataset source (default: "wspr")wspr

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations provided, but description discloses grouping by SFI bracket, output metrics, and the physical effect (HF vs. lower bands). Adds useful behavioral context beyond the schema.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences plus a note, extremely concise with no wasted words. Front-loaded with question and explanation.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Output schema exists, so description doesn't need to detail return structure. Explains grouping and metrics. Could mention data source explicitly, but it is a parameter. Complete enough for a correlation tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so baseline 3 is appropriate. Description does not add new parameter details beyond what schema provides, but gives context on how parameters (band, grids, source) are used in analysis.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Description clearly states the tool's purpose: analyzing how solar flux affects propagation on a specific band, and describes output metrics (spot counts, average SNR, reliability). Distinct from siblings like band_openings or band_summary.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Implied usage context (when to analyze SFI correlation), but no explicit when-not-to-use or comparison with sibling tools. Limited guidance for an agent to differentiate.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

solar_historyA

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
start_dateYesStart date (YYYY-MM-DD)
end_dateYesEnd date (YYYY-MM-DD)
resolutionNo"daily" (default) or "3hour" for Kp resolutiondaily

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.6/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description mentions the data source (IONIS dataset, GFZ Potsdam and NOAA SWPC), time range (2000-2026), and indices returned. It implies read-only behavior without stating it explicitly. No annotations exist to cover safety, so description does well but could be more explicit about non-destructive nature.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences, no unnecessary words. First sentence clearly states the action and scope, second provides context and sibling differentiation.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the output schema exists, description sufficiently covers purpose, data source, time range, and parameters. Could mention that dates must be in YYYY-MM-DD format (schema does), but overall complete for a query tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Input schema has 100% description coverage. The description adds value by naming the specific indices (SFI, SSN, Kp, Ap) and mentioning resolution options ('daily' or '3hour'), which is not fully detailed in schema descriptions.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states it queries historical solar indices (SFI, SSN, Kp, Ap) for a date range, specifying the dataset and time frame. It distinguishes itself from the sibling tool solar_conditions for live data.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly tells when to use this tool (historical data) and when not to (live current conditions), and provides a specific alternative tool name (solar_conditions).

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

  1. 12 tool updatesv1.2.9
    • First observedband_openings
    • First observedband_summary
    • First observedcompare_sources
    • First observedcurrent_conditions
    • First observeddark_hour_analysis
    • First observedget_version_info
    • First observedgrid_info
    • First observedlist_datasets
    • First observedpath_analysis
    • First observedquery_signatures
    • First observedsolar_correlation
    • First observedsolar_history

TDQS

A3.7/5.0

Scored across 12 tools

Disambiguation4/5

Most tools have distinct purposes (e.g., band_openings vs band_summary, path_analysis vs compare_sources), but some overlap exists between compare_sources and query_signatures as both query data; however, descriptions clearly differentiate them.

Naming Consistency3/5

All names use snake_case, but they mix noun-first (band_openings, current_conditions) and verb-first (compare_sources, get_version_info) patterns inconsistently, which may confuse an agent expecting a uniform verb_noun format.

Tool Count5/5

12 tools are well-scoped for the propagation analysis domain, covering key areas like band-specific queries, path analysis, solar conditions, and utilities without being excessive or skeletal.

Completeness4/5

The set covers core propagation analysis needs (querying, band/path analysis, solar correlation, historical data), but lacks a tool for direct band-to-band comparison or predictive modeling, which are minor gaps.

Maintenance

ActivityInactive
ResponsivenessResponsive

Related MCP Connectors

Related MCP Servers

  • A
    license
    Not graded
    quality
    D
    maintenance
    Provides real-time NOAA space weather data (solar flares, Kp index, solar wind) and analyzes HF radio propagation conditions for amateur radio operators to determine optimal frequency bands.
    MIT
  • A
    license
    Not graded
    quality
    C
    maintenance
    An MCP server that enables natural language-driven creation and management of GNU Radio flowgraphs with validated block connections and parameter configurations. It provides tools for searching the GNU Radio block library, detecting SDR hardware, and generating functional signal processing code.
    7
    MIT
  • A
    license
    A
    quality
    D
    maintenance
    MCP server for HamQTH.com — callsign lookup, DX cluster spots, Reverse Beacon Network, DXCC resolution, and more through any MCP-compatible AI assistant.
    8
    GPL 3.0
  • A
    license
    A
    quality
    D
    maintenance
    MCP server for space weather and HF propagation conditions — live solar flux, Kp index, DSCOVR solar wind, X-ray flux, alerts, 27-day forecast, and band-by-band outlook through any MCP-compatible AI assistant.
    7
    2
    GPL 3.0