Skip to main content
Glama
qso-graph

iota-mcp

by qso-graph

iota-mcp

MCP server for Islands on the Air (IOTA) — group lookup, island search, DXCC mapping, nearby groups, and programme statistics through any MCP-compatible AI assistant.

Part of the qso-graph project. No authentication required — all IOTA data is public.

Install

pip install iota-mcp

Related MCP server: qrz-mcp

Tools

Tool

Description

iota_lookup

Look up an IOTA group by reference number (e.g., NA-005)

iota_search

Search groups and islands by name (e.g., Hawaii, Shetland)

iota_islands

List all islands and subgroups in an IOTA group

iota_dxcc

Bidirectional DXCC-to-IOTA mapping

iota_stats

Programme summary — totals by continent, most/least credited

iota_nearby

Find IOTA groups nearest to a lat/lon location

get_version_info

Service version + upstream programme data version (fleet identity attestation)

Quick Start

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

Configure your MCP client

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

Claude Code

Add to .claude/settings.json:

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

ChatGPT Desktop

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

Cursor

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

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

VS Code / GitHub Copilot

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

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

Gemini CLI

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

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

Example Prompts

  • "Look up IOTA group NA-005"

  • "Search for islands named Shetland"

  • "What IOTA groups are near Boise, Idaho?"

  • "Show me all islands in EU-005"

  • "What IOTA references map to DXCC 291?"

  • "Give me IOTA programme statistics"

Data Source

Data comes from the official IOTA website JSON downloads:

  • fulllist.json — complete group/subgroup/island hierarchy (~1.3 MB)

  • dxcc_matches_one_iota.json — 1:1 DXCC-to-IOTA mapping (~3.5 KB)

Data is downloaded once and cached for 24 hours (IOTA refreshes daily at 00:00 UTC).

Development

git clone https://github.com/qso-graph/iota-mcp.git
cd iota-mcp
pip install -e .

# Run with mock data (no network)
IOTA_MCP_MOCK=1 python -m iota_mcp.server

# Run with MCP Inspector
iota-mcp --transport streamable-http --port 8010

# Security tests
pip install pytest
pytest tests/test_security.py -v

License

GPL-3.0-or-later

Available Tools

7 tools
get_version_infoA

Get iota-mcp service version and upstream programme data version.

Returns the running PyPI version of iota-mcp and the IOTA programme data 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 (IOTA programme data).

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

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 full burden. It explicitly discloses that this is a read operation (get) and specifies the exact return fields (service_name, service_version, spec_version). No destructive behavior is 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 three sentences long: first sentence states the core purpose, second provides a use case, third lists return values. Every sentence adds value with no redundancy or filler.

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 output schema present, the description provides sufficient context: what the tool does, why to use it, and what it returns. It is complete for a version info tool without missing details.

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?

There are no parameters, so schema coverage is 100%. The description does not need to cover param semantics, but it adds value by detailing the output fields, which helps the agent understand what the tool returns without needing the output 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 'Get iota-mcp service version and upstream programme data version', specifying the exact resources and operation. It distinguishes itself from sibling tools like iota_dxcc or iota_search by focusing on version information.

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 use case: 'confirm fleet alignment across MCP deployments'. It explains when to use (to detect drift) but lacks explicit guidance on when not to use or alternatives, though the sibling tools cover different IOTA functions.

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

iota_dxccA

Bidirectional DXCC-to-IOTA mapping.

Provide either dxcc_num to find all IOTA groups for a DXCC entity, or refno to find which DXCC entities an IOTA group belongs to.

ParametersJSON Schema
NameRequiredDescriptionDefault
dxcc_numNoDXCC entity number (e.g., 291 for USA, 223 for England).
refnoNoIOTA reference number (e.g., EU-005).

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.2/5.0
Behavior3/5

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

Without annotations, the description carries the burden of behavioral disclosure. It explains the bidirectional nature and conditional usage, but does not specify behavior when both parameters are provided, when none are provided, or any side effects, authentication requirements, or rate limits.

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 only two sentences, front-loaded with the core purpose. Every sentence adds value with no redundancy or waste. It is appropriately concise.

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, the description does not need to detail return values. It adequately covers the two modes of operation. However, it lacks guidance on handling invalid inputs (e.g., both parameters provided or none), which slightly reduces completeness.

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 already has 100% description coverage with examples. The tool description adds functional meaning by clarifying the direction of mapping for each parameter ('find all IOTA groups for a DXCC entity' vs 'find which DXCC entities an IOTA group belongs to'), which goes beyond the schema's brief 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 the tool's purpose: bidirectional mapping between DXCC entities and IOTA groups. It specifies two distinct use cases (dxcc_num or refno) and uses a specific verb (mapping) that distinguishes it from sibling tools like general lookup or search.

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 clear usage conditions: use dxcc_num to find IOTA groups or refno to find DXCC entities. It implies the tool should be used when such bidirectional mapping is needed, though it does not explicitly mention when not to use it or compare with alternatives.

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

iota_islandsA

List all islands and subgroups in an IOTA group.

Returns the full hierarchy: subgroups containing individual islands.

ParametersJSON Schema
NameRequiredDescriptionDefault
refnoYesIOTA reference number (e.g., NA-005, EU-005).

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A3.8/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 full burden. It indicates a read operation (list) and explains the return structure (hierarchy), but does not disclose error handling, rate limits, or any side effects. Minimal disclosure beyond the core function.

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 concise with two sentences, no wasted words, and directly states the purpose and output structure. It is front-loaded and efficiently communicates the key information.

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 (indicated by context signals), the description explains the returned hierarchy adequately. It could be slightly more complete by defining an IOTA group, but for a simple list tool it is sufficient.

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 100% coverage with a clear description for the refno parameter. The tool description does not add additional parameter semantics 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 the tool lists all islands and subgroups in an IOTA group, with a specific verb (list) and resource (islands and subgroups). It distinguishes itself from sibling tools like iota_search or iota_lookup by focusing on the full hierarchy of a single group.

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 when needing a complete hierarchy of a specific IOTA group, but does not explicitly state when to use this tool over alternatives like iota_search or iota_lookup, nor does it mention any prerequisites or exclusions.

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

iota_lookupA

Look up an IOTA group by reference number.

Returns group details including name, DXCC entity, bounding box, center coordinates, credit percentage, and island count.

ParametersJSON Schema
NameRequiredDescriptionDefault
refnoYesIOTA reference number (e.g., NA-005, EU-005, AF-001).

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?

No annotations provided, so description carries full burden. It discloses that the tool is a read operation and lists return fields, providing adequate transparency for a lookup. Missing error handling details but acceptable.

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, zero waste. The first sentence states the action, the second lists return fields. Efficient and front-loaded.

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 presence of an output schema and the simple nature of a lookup, the description is complete. It tells what it does and what it returns. No need for further detail.

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% (refno described with examples). The tool description adds no extra parameter detail beyond restating 'reference number', so baseline 3 applies.

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 'Look up an IOTA group by reference number' uses a specific verb and resource, clearly differentiating it from siblings like iota_search or iota_nearby.

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 implies usage when a reference number is available, but lacks explicit when-not or alternative guidance. However, the context is clear for a direct lookup.

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

iota_nearbyA

Find IOTA groups nearest to a location.

Computes great-circle distance from the given coordinates to the center of each IOTA group's bounding box.

ParametersJSON Schema
NameRequiredDescriptionDefault
latitudeYesLatitude in decimal degrees (e.g., 43.6 for Boise).
longitudeYesLongitude in decimal degrees (e.g., -116.2 for Boise).
limitNoMaximum results to return (default 20).

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A3.8/5.0
Behavior3/5

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

The description discloses the algorithm (great-circle distance, bounding box center) but lacks other behavioral traits such as authentication needs, data freshness, or any side effects. With no annotations, the description partially fulfills the transparency burden.

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 only two sentences, front-loading the main action. Every word serves a purpose, with no repetition or unnecessary detail.

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 and the presence of an output schema, the description adequately covers the key aspects: what it does and how it computes results. It could optionally mention what constitutes an IOTA group, but this is not critical.

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 schema provides descriptions for all parameters (100% coverage). The tool description adds value by explaining how coordinates and limit are used in the distance calculation, which helps the agent understand parameter purpose beyond the 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 finds IOTA groups nearest to a location and explains the great-circle distance computation. It distinguishes from siblings by focusing on geospatial proximity, which is unique among the listed sibling tools.

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 alternatives like iota_search or iota_lookup. The description does not mention prerequisites, limitations, or scenarios where this tool is appropriate.

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

iota_statsA

Get IOTA programme summary statistics.

Returns total groups and islands, breakdown by continent, DXCC entity count, and most/least credited groups.

Returns: Programme-wide statistics and summaries.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A3.9/5.0
Behavior3/5

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

With no annotations, the description carries full burden. It describes returns but does not state side effects or safety (e.g., read-only). Assumes no destructive behavior but should explicitly confirm.

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?

Mostly concise, with a clear summary and specifics. Minor redundancy in the last line ('Returns: Programme-wide statistics and summaries') repeats earlier content.

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 no inputs and presence of output schema, description adequately covers what the tool does. Could mention that no arguments are needed, but overall sufficient for a simple stats 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?

No parameters exist, and schema coverage is 100%. Description adds value by detailing the output structure, compensating for the lack of parameter info (baseline 4 for 0 params).

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 it returns summary statistics for the IOTA programme, listing specific breakdowns (total groups/islands, continent, DXCC count, credited groups). This differentiates it from sibling tools that focus on specific islands or searches.

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?

Lacks explicit guidance on when to use vs alternatives, but the purpose is self-evident given the tool name and description. No exclusionary context is provided.

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. 7 tool updatesv0.1.2
    • First observedget_version_info
    • First observediota_dxcc
    • First observediota_islands
    • First observediota_lookup
    • First observediota_nearby
    • First observediota_search
    • First observediota_stats

TDQS

A3.9/5.0

Scored across 7 tools

Disambiguation5/5

Each tool has a clearly distinct purpose: version info, DXCC mapping, islands listing, group lookup, nearby search, name search, and statistics. No overlap.

Naming Consistency4/5

Six tools follow the 'iota_xxx' pattern, but 'get_version_info' breaks it with a 'get_' prefix, a minor inconsistency.

Tool Count5/5

7 tools cover the core IOTA data exploration needs without redundancy; the count is well-scoped for the domain.

Completeness3/5

Missing a tool to list all IOTA groups or DXCC entities, which could hinder agents lacking prior knowledge; search requires a query, leaving no entry point.

Maintenance

ActivityInactive
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers

  • 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
    F
    maintenance
    MCP server for QRZ.com — callsign lookups, DXCC entity resolution, and logbook queries through any MCP-compatible AI assistant.
    6
    39 PyPI
    3
    GPL 3.0
  • A
    license
    A
    quality
    D
    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.
    8
    1
    GPL 3.0
  • A
    license
    A
    quality
    D
    maintenance
    MCP server for Summits on the Air (SOTA) — live spots, activation alerts, summit info, and nearby summits through any MCP-compatible AI assistant.
    5
    9 PyPI
    GPL 3.0