Skip to main content
Glama
qso-graph

itu-zones-mcp

by qso-graph

itu-zones-mcp

PyPI MCP Registry

Source: the IARU's HF Managers Handbook, chapter 9.8, "Definition of ITU-Zones when used by radio amateurs" (IARU Region 1, v8.2; the chapter's pages are dated November 2000). The zone border-lines for amateur use are kept there under IARU Region 1 recommendation REC/99/LH/C4.2; the list was drafted by G3HTA from the ITU's CIRAF zones and approved by all three IARU regions. The 90 ITU zones are the IARU's: this package serves facts from that chapter, each citing its page and zone, and links to the handbook rather than copying it. Our GPL-3.0 licence covers our code, not the IARU's data.

Checked against: AD1C's country files (Jim Reisert, AD1C), ADIF 3.1.7's subdivision zones, and ARRL's DXCC list. The tests fetch AD1C's and ARRL's files from their sites to validate the facts; neither is included here. where they differ, the owner's list wins (see docs/TRANSCRIPTION.md).

MCP server for ITU zones as the IARU publishes them for amateur use: the 90 zones of chapter 9.8, "Definition of ITU-Zones when used by radio amateurs", of the IARU Region 1 HF Managers Handbook (v8.2), used by the IARU HF Championship and ITU-zone awards. Each zone's prefixes are given in ADIF's own DXCC and subdivision codes, with the IARU's own wording where it splits an area by a line.

Part of the qso-graph project. No network, no authentication: the facts from the owner's list ship with the package, and every answer names its source.

Install

uvx itu-zones-mcp            # run it; nothing to install

Related MCP server: adif-mcp

Tools

Tool

Description

Key Parameters

itu_zones_lookup

One zone: every prefix, subdivision and boundary the IARU lists, with the citation

code

itu_zones_codes_for

Which zones cover an ADIF DXCC entity, or one of its subdivisions

dxcc, subdivision

itu_zones_search

Find zones by prefix or wording

text, limit

itu_zones_valid_on

Whether a zone was valid on a date (ITU zones have no validity window)

code, on_date

itu_zones_source_info

Owner, edition, terms, and the owner's file's URL and SHA-256

—

get_version_info

Service version + the owner's edition served (fleet identity attestation)

—

Quick Start

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

Configure your MCP client

itu-zones-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": {
    "itu-zones": {
      "command": "uvx",
      "args": ["itu-zones-mcp"]
    }
  }
}

Claude Code

Add to .claude/settings.json:

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

ChatGPT Desktop

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

Cursor

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

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

VS Code / GitHub Copilot

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

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

Gemini CLI

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

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

Ask questions

"Which ITU zone is Arizona in?"

"What does ITU zone 75 cover?"

"Which ITU zones does Antarctica span?"

MCP Inspector

itu-zones-mcp --transport streamable-http --port 8017

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

Development

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

scripts/fetch_published.py fetches the owner's document(s) into published/ (not committed) and checks their SHA-256s; uv run pytest --live runs the tests that need them. scripts/build.py regenerates derived/ and load.sql, a PostgreSQL load for QSO Graph's reference data (load QG ADIF's adif schema first).

License

itu-zones-mcp's own code is GPL-3.0-or-later. See LICENSE. The data it serves is the owner's, credited at the top of this page: our licence doesn't cover it, and we claim no rights in it. The owner's document itself is not included; data/SOURCE.json records its URL and SHA-256 so anyone can check the facts against it. Files we built from the facts (data/derived/) are ours and labelled as ours. How the owner's text was read is recorded in docs/TRANSCRIPTION.md. See NOTICE.

Available Tools

6 tools
get_version_infoGet Version InfoA

Get itu-zones-mcp's version and the edition of the IARU's list it serves.

Returns: service_name, service_version (PyPI), and spec_version (the owner's edition).

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A3.7/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 the exact return payload (service_name, service_version, spec_version), which is useful, but never states that this is a side-effect-free read, whether authentication is needed, or how it relates to the sibling source_info tool. Adequate but thin for an annotation-free tool.

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?

Front-loaded with one crisp sentence stating what is returned, followed by a short field list. The Returns block duplicates information already present in the output schema, which is minor redundancy, but nothing is bloated or buried.

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?

For a zero-parameter, side-effect-free introspection tool backed by an output schema, the description is complete enough to invoke correctly — the agent knows what it gets back and needs no argument details. The only non-essential gap is sibling differentiation, which does not affect correct invocation.

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 has zero parameters, so there is no parameter semantics to document; the baseline of 4 applies. The description correctly adds no parameter noise.

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 gives a specific verb and resource — reporting the service version and the IARU list edition — which is clearly distinct from the data-retrieval siblings (lookup, search, codes_for, valid_on). It stops short of distinguishing itself from itu_zones_source_info, the one sibling that could plausibly overlap in scope.

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 only implied: the nature of the tool (version/edition reporting) signals a diagnostic or compatibility-check purpose, but there is no explicit statement of when to call it, nor any differentiation from itu_zones_source_info. An agent can infer the context but is given no routing guidance.

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

itu_zones_codes_forItu Zones Codes ForA

Which ITU zones cover an ADIF DXCC entity, or one of its subdivisions. Where the IARU splits an entity by a line (W7 states at 110W), each zone is returned with the IARU's boundary wording.

ParametersJSON Schema
NameRequiredDescriptionDefault
dxccYesADIF DXCC entity code (e.g. 291 for the United States, 1 for Canada).
subdivisionNoADIF Primary_Administrative_Subdivision code, e.g. "QC" or "AZ".

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A3.6/5.0
Behavior3/5

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

With no annotations, the description carries the full behavioral burden. It does disclose a non-obvious trait — that IARU-split entities return each zone with the IARU's boundary wording — which goes beyond the schema, but it says nothing about error behavior for unknown codes, casing/format handling, or whether results can be empty.

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 tight sentences with zero padding; the primary scope statement is front-loaded and the second sentence adds genuinely new information about IARU boundary handling.

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?

For a two-parameter read-only query with an output schema (so return shape needn't be described) and full schema coverage, the description covers what the tool does and one subtle return behavior. The only meaningful omission is routing guidance against its near-identical siblings.

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 both parameters (dxcc, subdivision) are already fully documented in the schema. The description's phrase 'ADIF DXCC entity, or one of its subdivisions' restates that structure rather than adding syntax, format, or edge-case meaning.

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 states a specific resource and outcome — 'which ITU zones cover an ADIF DXCC entity, or one of its subdivisions' — so an agent knows exactly what it returns. It does not, however, differentiate itself from close siblings like itu_zones_lookup or itu_zones_search, which sound like they answer adjacent questions.

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: you call it when you have a DXCC entity or subdivision code and want its covering zones. But no explicit when-to-use, when-not-to-use, or alternative tool is named, and with four similarly named itu_zones_* siblings that omission is a real gap.

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

itu_zones_lookupItu Zones LookupA

One ITU zone: every prefix, subdivision and boundary the IARU lists for it, with ADIF codes and the citation. Zones 76-77 and 79-89 have no entry in this edition.

ParametersJSON Schema
NameRequiredDescriptionDefault
codeYesAn ITU zone number, 1 to 90.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A3.7/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 burden. It discloses a significant behavioral trait: coverage gaps (zones 76-77 and 79-89 return no entry), which is important for an agent to know. However, it doesn't state whether a missing zone returns an empty result or an error, nor does it cover rate limits or auth. Partial credit for the coverage disclosure.

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 compact sentences, front-loaded with purpose followed by the coverage caveat. No wasted words; each clause 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?

An output schema exists, so return values need not be explained. For a simple single-parameter lookup, the description covers purpose and coverage gaps adequately, but it omits error behavior (what happens for zones 76-77/79-89) and any routing to sibling tools, leaving a gap in an otherwise complete definition.

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 the single 'code' parameter is documented as 'An ITU zone number, 1 to 90.' The description adds the important cross-reference that certain codes have no entry, but this is schema-adjacent rather than adding syntax or format beyond the schema. 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?

States a specific verb+resource ('One ITU zone') and enumerates exactly what is retrieved: prefixes, subdivisions, boundaries, ADIF codes, and citation. This clearly distinguishes it from siblings like itu_zones_search or itu_zones_codes_for.

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 (retrieve full details for a single zone), and the coverage caveat (zones 76-77, 79-89 have no entry) is useful, but it doesn't explicitly say when to use this versus itu_zones_search or itu_zones_codes_for. No explicit alternatives named.

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

itu_zones_source_infoItu Zones Source InfoA

Who owns this list, which edition is served, its terms, and the owner's files' URLs and SHA-256s.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

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

With no annotations at all, the description carries the full burden. It conveys that this is a passive metadata/source description (no mutation implied) and even mentions terms and SHA-256 hashes, suggesting licensing and integrity context. However, it does not state the return shape, format, or that it requires no parameters—gaps for a zero-annotation tool.

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?

A single dense sentence that front-loads ownership and edition before listing terms and file integrity data. Every clause adds distinct information with no padding.

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 the description need not enumerate return values; it instead summarizes the categories of information returned (owner, edition, terms, file URLs, hashes). For a zero-param metadata tool this is largely complete, though a sentence on freshness or how the edition is determined would strengthen it.

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 zero parameters, so the baseline is 4. The schema is trivially complete, and the description correctly implies no inputs are needed.

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 the specific resource (the ITU zones list) and enumerates what information is served: ownership, edition, terms, file URLs, and SHA-256 hashes. That distinguishes it from lookup/search siblings, which query zone data rather than describe the dataset's provenance.

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 explicit when-to-use guidance and no mention of alternatives. The sibling names imply this is the provenance/metadata tool rather than a query tool, but the description itself offers no routing guidance and doesn't say when an agent should reach for this versus get_version_info.

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

itu_zones_valid_onItu Zones Valid OnA

Whether an ITU zone was valid on a date. The chapter gives no validity window, so every zone it lists is valid; the tool exists so every owner-list server answers the same questions.

ParametersJSON Schema
NameRequiredDescriptionDefault
codeYesAn ITU zone number, 1 to 90.
on_dateYesThe date, YYYY-MM-DD.

Output Schema

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

No annotations are provided, so the description carries the full behavioral burden. It discloses that every listed zone is always valid (no validity window), which is meaningful context beyond the schema. However, it doesn't describe return format (though an output schema exists) or any constraints on the date parameter beyond the schema. For a query tool with an output schema, this is adquate but not rich.

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-loaded with the core purpose. The second sentence explains the reasoning and cross-server consistency goal, which is relevant context. No wasted words, though the second clause is slightly verbose.

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 a two-parameter query tool with a rich output schema and no annotations, the description covers the core question and the underlying domain logic (no validity window). It doesn't need to explain return values because an output schema exists. The only gap is lack of explicit distinction from siblings, but the tool is simple enough that this is minor.

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 both parameters (code: 1-90, on_date: YYYY-MM-DD). The description adds no parameter-level details beyond what the schema provides. Baseline 3 is appropriate when the schema does the heavy lifting.

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+resource: determining whether an ITU zone was valid on a date. The description goes further by explaining the underlying logic (no validity window exists, so all listed zones are valid) and why the tool exists at all, which is more than a bare purpose statement. It doesn't explicitly distinguish itself from siblings like itu_zones_codes_for or itu_zones_lookup, keeping it from a 5.

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 when to use the tool (to check zone validity on a specific date) but offers no explicit when-not guidance or alternatives. The note about answering the same questions as other owner-list servers hints at consistency purposes but doesn't route the agent to a different tool for edge cases.

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. 6 tool updatesv0.1.0
    • First observedget_version_info
    • First observeditu_zones_codes_for
    • First observeditu_zones_lookup
    • First observeditu_zones_search
    • First observeditu_zones_source_info
    • First observeditu_zones_valid_on

TDQS

A3.7/5.0

Scored across 6 tools

Disambiguation4/5

The query tools (lookup, search, codes_for, valid_on) each target a distinct question and are clearly separable. The only mild overlap is between get_version_info (service/edition versioning) and itu_zones_source_info (data ownership/edition terms), which both surface metadata and could be confused at a glance.

Naming Consistency4/5

Five of six tools use a consistent snake_case itu_zones_ prefix (lookup, search, codes_for, valid_on, source_info), giving a predictable pattern. get_version_info breaks the prefix convention, a minor deviation from an otherwise uniform scheme.

Tool Count5/5

Six tools is well-scoped for a focused reference-lookup server. Each tool covers a distinct query type with no filler or redundancy.

Completeness4/5

The surface covers lookup by zone, reverse lookup by DXCC entity/subdivision, text search, validity checks, and provenance/version metadata, matching the apparent domain well. A tool to enumerate or list all zones is absent, but agents can largely work around this via search.

Related MCP Connectors

Related MCP Servers

  • A
    license
    A
    quality
    B
    maintenance
    MCP server for QRZ.com — callsign lookups, DXCC entity resolution, and logbook queries through any MCP-compatible AI assistant.
    6
    1,758 PyPI
    3
    GPL 3.0
  • A
    license
    A
    quality
    A
    maintenance
    Provides safe, typed access to Amateur Radio logging data with ADIF validation, parsing, spec search, and geospatial utilities for Maidenhead locators.
    8
    1,634 PyPI
    4
    GPL 3.0
  • A
    license
    Not graded
    quality
    A
    maintenance
    Enables querying a local SQLite index of FCC ULS licensing data to look up licenses by callsign, licensee, or FRN, find licensed transmitter sites near a coordinate, and see who is authorized on a frequency or band. Runs over STDIO or Streamable HTTP with no API key required at request time.
    1
    Apache 2.0
  • A
    license
    A
    quality
    C
    maintenance
    Enables users to resolve historical US land and jurisdiction questions: which county held a given spot on a specific date, where a federal land description (PLSS) falls on the ground, and which National Archives series and file hold the case behind a land patent. All lookups are read-only and can be used alongside archive-search tools to route records requests to the right office.
    9
    MIT