Skip to main content
Glama
qso-graph

sota-mcp

by qso-graph

sota-mcp

PyPI MCP Registry

MCP server for Summits on the Air (SOTA) — live spots, activation alerts, summit info, and nearby summits through any MCP-compatible AI assistant.

Part of the QSO-Graph project. No authentication required — uses the public SOTA API exclusively.

Install

uvx sota-mcp            # run it; nothing to install

Related MCP server: qrz-mcp

Tools

Tool

Description

sota_spots

Current and recent spots with time window and association/mode filters

sota_alerts

Upcoming scheduled activation alerts

sota_summit_info

Summit details by SOTA reference code

sota_summits_near

Find summits near coordinates (geospatial search)

get_version_info

Service version + upstream spec version (fleet identity attestation)

Quick Start

No credentials needed — just install and configure your MCP client.

Configure your MCP client

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

Claude Desktop

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

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

Claude Code

Add to .claude/settings.json:

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

ChatGPT Desktop

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

Cursor

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

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

VS Code / GitHub Copilot

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

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

Gemini CLI

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

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

Ask questions

"What SOTA spots are active right now?"

"Tell me about summit W7I/SI-001"

"What summits are near Boise, Idaho?"

"Any SOTA alerts for this weekend?"

Testing Without Network

For testing all tools without hitting the SOTA APIs:

SOTA_MCP_MOCK=1 sota-mcp

MCP Inspector

sota-mcp --transport streamable-http --port 8007

Then open the MCP Inspector at http://localhost:8007.

Development

git clone https://github.com/qso-graph/sota-mcp.git
cd sota-mcp
uv sync --group dev
uv run pytest

License

GPL-3.0-or-later

Available Tools

5 tools
get_version_infoGet Version InfoA
Read-onlyIdempotent

Get sota-mcp service version and upstream spec version.

Returns the running PyPI version of sota-mcp and the SOTA api2 endpoint contract 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.

NameRequiredDescriptionDefault

No parameters

Output Schema

NameRequiredDescription

No output parameters

TDQS

A4/5.0
Behavior4/5

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

Annotations already declare readOnly, idempotent, non-destructive and closed-world, so the safety profile is covered. The description adds genuine context beyond them: it identifies the two version values returned and the operational purpose (drift detection across servers). It does not add much else, but the annotations carry that burden.

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 key statement is front-loaded in the first sentence, and the follow-up paragraph explains the values and the reason to call it. It is slightly longer than strictly necessary ('without going outside the MCP protocol' is filler), but every other sentence earns its place.

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?

With an output schema present, the description need not explain return shapes, and annotations plus zero parameters leave little else to cover. What the tool reports and why an agent would call it are both stated, leaving no meaningful gap.

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 tool takes zero parameters, which sets the baseline at 4; there is nothing for the description to clarify and it correctly avoids inventing input details.

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 opens with a specific verb and resource ('Get sota-mcp service version and upstream spec version') and names the two values returned (running PyPI version, api2 endpoint contract). It does not explicitly contrast itself with the siblings, but those tools (sota_spots, sota_alerts, etc.) cover unrelated domain data, so confusion is unlikely.

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?

It gives a clear use case: confirm fleet alignment across MCP deployments by comparing service_version and spec_version to detect drift. There are no exclusions or alternatives named, but for a zero-parameter version probe there is no competing tool to route away from.

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

sota_alertsSota AlertsB
Read-onlyIdempotent

Get upcoming SOTA activation alerts.

NameRequiredDescriptionDefault
hoursNoLook-ahead window in hours (default 16).
associationNoFilter by SOTA association (e.g., W7I). Empty for all.

Output Schema

NameRequiredDescription

No output parameters

TDQS

B3.2/5.0
Behavior3/5

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

Annotations already declare readOnly, idempotent, non-destructive and open-world behavior, so the safety profile is covered. The description adds only the time-bound framing ('upcoming'), with nothing about data source, refresh cadence, or what an empty result means — modest added value against a low bar.

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?

A single front-loaded sentence with zero filler. It is efficient, though the terseness borders on under-specification for a tool that competes with a closely related sibling.

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?

An output schema exists, so return values need not be explained, and the schema fully covers the two optional parameters. What is missing is the disambiguation from sota_spots and any note on the 16-hour default window's practical meaning, which matters for an open-world data 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% and both parameters (hours window, association filter) are fully documented in the schema with defaults and an example. The description adds no parameter detail, so the baseline 3 applies.

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 names a specific verb and resource ('Get ... SOTA activation alerts') and the word 'upcoming' signals a forward-looking query, which implicitly differentiates it from the live sota_spots sibling. It stops short of explicitly naming sota_spots, so an agent must infer the distinction rather than read it.

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?

There is no statement of when to use this versus sota_spots (current spots) or the summit-lookup tools, and no exclusions or prerequisites. 'Upcoming' hints at the use case but the agent is left to infer the routing decision entirely.

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

sota_spotsSota SpotsB
Read-onlyIdempotent

Get current and recent SOTA spots.

Returns live spot feed with summit details.

NameRequiredDescriptionDefault
modeNoFilter by mode (e.g., CW, SSB, FT8). Empty for all.
hoursNoTime window in hours (default 24).
associationNoFilter by SOTA association (e.g., W7I, G, VK). Empty for all.

Output Schema

NameRequiredDescription

No output parameters

TDQS

B3.4/5.0
Behavior3/5

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

The annotations already declare readOnlyHint, idempotentHint, openWorldHint, and destructiveHint=false, so the safety profile is fully covered. The description adds only that the result is a 'live spot feed with summit details', which is modest additional context and largely duplicated by the output schema.

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 short sentences with the resource and scope front-loaded and no filler. It is efficient, though the second sentence carries little that the output schema does not already state.

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?

With a rich annotation set, a full output schema, and 100% parameter coverage, the main remaining gap is distinguishing this live spot feed from sota_alerts and sota_summit_info. The description does not close that gap, so it is adequate but not 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 description coverage is 100%, so the mode, hours, and association filters are already fully documented in the schema. The description adds no filtering semantics or examples beyond what the schema provides, so the baseline 3 applies.

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 names a specific verb (Get) and resource (SOTA spots) with a clear scope: 'current and recent'. It does not differentiate from the sibling sota_alerts, which an agent could easily confuse with a live spot feed, so the purpose is clear but not disambiguated.

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?

'Current and recent' implies usage for real-time monitoring, and the schema's hours default of 24 reinforces that. However, the description never states when to prefer this over sota_alerts or sota_summit_info, and gives no exclusions or prerequisites, leaving usage to inference.

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

sota_summit_infoSota Summit InfoA
Read-onlyIdempotent

Get detailed summit information by SOTA reference code.

NameRequiredDescriptionDefault
summit_codeYesSOTA reference (e.g., W7I/SI-001, G/LD-001).

Output Schema

NameRequiredDescription

No output parameters

TDQS

A3.5/5.0
Behavior3/5

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

Annotations already declare readOnlyHint, idempotentHint, openWorldHint, and destructiveHint=false, so the safety and idempotency profile is fully conveyed by structured data. The description adds nothing about what 'detailed' contains or whether lookups can miss, so it earns a baseline 3 rather than more.

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?

A single efficient sentence with no filler, and the operation type is front-loaded. It is appropriately sized, though it is so terse that it leaves no room for routing hints.

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?

An output schema exists, so return-value explanation is not required, and annotations cover the behavioral profile. Combined with a fully documented single parameter, the definition is complete enough for correct invocation; only sibling routing guidance is missing.

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% and the single parameter includes concrete examples (W7I/SI-001, G/LD-001), so the schema carries the parameter semantics. The description only restates that lookup is keyed by code, adding no format or validation detail beyond the schema.

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?

States a specific verb ('Get') and resource ('detailed summit information') keyed by SOTA reference code, which is clear enough for an agent to grasp. It does not explicitly differentiate itself from the close sibling sota_summits_near, leaving the agent to infer that this is lookup-by-code rather than proximity search.

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?

Usage is implied by the required summit_code parameter and the 'by SOTA reference code' phrasing, so an agent can infer the call shape. There is no explicit when-to-use, when-not, or named alternative (e.g., use sota_summits_near when you lack a code), so guidance is only implicitly present.

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

sota_summits_nearSota Summits NearC
Read-onlyIdempotent

Find SOTA summits near a geographic location.

NameRequiredDescriptionDefault
limitNoMaximum number of results (default 20).
latitudeYesCenter latitude (decimal degrees).
longitudeYesCenter longitude (decimal degrees).
radius_kmNoSearch radius in km (default 50).

Output Schema

NameRequiredDescription

No output parameters

TDQS

C2.9/5.0
Behavior2/5

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

Annotations already declare readOnly, idempotent, openWorld, and non-destructive, so the safety profile is covered structurally. The description adds nothing beyond that — no note on result ordering (nearest-first?), whether the radius is a hard cutoff, or what happens when the limit truncates a dense area.

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?

A single well-formed sentence with the resource and scope front-loaded and zero waste. It is efficient but so terse that there is nothing to trim and nothing extra to reward.

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?

An output schema exists, so return values need not be explained, and the parameters are fully documented. What is missing is any sense of result ordering, radius behavior, or how this relates to the other sota_* tools — enough gaps to keep it at minimum viable.

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%, with latitude, longitude, radius_km (default 50), and limit (default 20) all documented inline. The description adds no semantics beyond the schema, so the baseline 3 applies.

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?

States a specific verb ('Find') and resource ('SOTA summits') with a clear scoping qualifier ('near a geographic location'), which distinguishes it from sota_summit_info (detail lookup) and sota_alerts. It stops short of explicitly naming those siblings, so differentiation is inferred rather than stated.

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?

There is no guidance on when to prefer this over sota_spots or sota_summit_info, no mention of prerequisites, and no exclusions. The agent must infer the proximity-search use case from the name alone.

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. 5 tool updatesv0.1.6
    • First observedget_version_info
    • First observedsota_alerts
    • First observedsota_spots
    • First observedsota_summit_info
    • First observedsota_summits_near

TDQS

B3.4/5.0

Scored across 5 tools

Disambiguation5/5

Each tool targets a distinct resource or action: version metadata, live spots, upcoming alerts, summit lookup by reference, and geographic summit search. The spots-vs-alerts overlap is resolved by descriptions (current/recent vs upcoming), leaving no realistic misselection risk.

Naming Consistency4/5

All names use snake_case and four of five share a clear `sota_` domain prefix, which groups the domain tools well. However, `get_version_info` follows a verb_noun pattern while the others are bare noun phrases, and `sota_summits_near` is an odd suffix-style construction rather than a verb-led name.

Tool Count4/5

Five tools is a lean, well-scoped surface for a read-only SOTA feed-and-reference API, and each tool covers a distinct access pattern. It sits at the low end but does not feel artificially thin.

Completeness3/5

Core read paths are covered (spots, alerts, summit by reference code, nearby summits), but there is no way to search summits by name, list associations/regions, or filter spots/alerts by band, mode, or association. Agents without a known reference code or coordinates have limited discovery paths.

Maintenance

ActivityMaintained
ResponsivenessUnresponsive

Related MCP Connectors

Related MCP Servers

  • A
    license
    A
    quality
    A
    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
    586 PyPI
    GPL 3.0
  • A
    license
    A
    quality
    A
    maintenance
    MCP server for QRZ.com — callsign lookups, DXCC entity resolution, and logbook queries through any MCP-compatible AI assistant.
    6
    575 PyPI
    4
    GPL 3.0
  • A
    license
    A
    quality
    A
    maintenance
    Enables IOTA group lookup, island search, DXCC mapping, nearby groups, and programme statistics through any MCP-compatible AI assistant.
    7
    587 PyPI
    GPL 3.0
  • A
    license
    A
    quality
    A
    maintenance
    MCP server for Parks on the Air (POTA) providing live activator spots, park details, activator/hunter stats, and scheduled activations through any MCP-compatible AI assistant.
    11
    612 PyPI
    3
    GPL 3.0