itu-zones-mcp
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@itu-zones-mcpwhich ITU zone is Arizona in?"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
itu-zones-mcp
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 installRelated MCP server: adif-mcp
Tools
Tool | Description | Key Parameters |
| One zone: every prefix, subdivision and boundary the IARU lists, with the citation | code |
| Which zones cover an ADIF DXCC entity, or one of its subdivisions | dxcc, subdivision |
| Find zones by prefix or wording | text, limit |
| Whether a zone was valid on a date (ITU zones have no validity window) | code, on_date |
| Owner, edition, terms, and the owner's file's URL and SHA-256 | — |
| 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 8017Then 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 pytestscripts/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 toolsget_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).
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| dxcc | Yes | ADIF DXCC entity code (e.g. 291 for the United States, 1 for Canada). | |
| subdivision | No | ADIF Primary_Administrative_Subdivision code, e.g. "QC" or "AZ". |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| code | Yes | An ITU zone number, 1 to 90. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
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.
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.
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.
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.
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.
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_searchItu Zones SearchB
Find codes whose name, prefixes, area wording or attributes contain every word of text.
| Name | Required | Description | Default |
|---|---|---|---|
| text | Yes | Words to look for, e.g. "Antarctica", "UA0" or "110W". | |
| limit | No | Most records to return (1 to 200, default 50). |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full behavioral burden. It usefully discloses the matching semantics (every word must be present, i.e. AND logic), but says nothing about case sensitivity, substring vs prefix matching, result ordering, or why "prefixes" is a searchable field. It also omits any performance/pagination note.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single compact sentence with the key constraint (all words must match) front-loaded and no filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
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 no explanation, and the two parameters are fully documented in the schema. Still, a read-only search with five siblings would benefit from routing guidance and matching details, which are absent.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the baseline is 3; the description goes beyond it by naming the four searchable fields (name, prefixes, area wording, attributes), telling the agent what "text" actually matches against. It adds no extra guidance on multi-word splitting or the limit parameter.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description gives a specific verb ("Find") and resource ("codes") plus the exact fields searched (name, prefixes, area wording, attributes), so an agent knows this is a free-text search over code records rather than a lookup. It does not explicitly distinguish itself from siblings like itu_zones_lookup or itu_zones_codes_for, but the operation is clear.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no when-to-use framing, no prerequisites, and no mention of the alternative tools (itu_zones_lookup, itu_zones_codes_for) that would handle exact-key or relationship queries. The agent must infer usage purely from the functional statement.
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.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| code | Yes | An ITU zone number, 1 to 90. | |
| on_date | Yes | The date, YYYY-MM-DD. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
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.
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.
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.
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.
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.
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.
6 tool updates
v0.1.0- First observed
get_version_info - First observed
itu_zones_codes_for - First observed
itu_zones_lookup - First observed
itu_zones_search - First observed
itu_zones_source_info - First observed
itu_zones_valid_on
TDQS
Scored across 6 tools
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.
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.
Six tools is well-scoped for a focused reference-lookup server. Each tool covers a distinct query type with no filler or redundancy.
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
Human-reviewed zoning answers with ordinance citations for covered US municipalities.
Offline, keyless lookup of the US civil aircraft registry — decode N-numbers, search records.
Free, keyless postal/ZIP code lookup: place name(s), state/region, and coordinates.
Postal lookups for 120 countries with cited sources; deep US tier: demographics, climate, area codes
Related MCP Servers
- AlicenseAqualityBmaintenanceMCP server for QRZ.com — callsign lookups, DXCC entity resolution, and logbook queries through any MCP-compatible AI assistant.61,758 PyPI3GPL 3.0
- AlicenseAqualityAmaintenanceProvides safe, typed access to Amateur Radio logging data with ADIF validation, parsing, spec search, and geospatial utilities for Maidenhead locators.81,634 PyPI4GPL 3.0
- AlicenseNot gradedqualityAmaintenanceEnables 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.1Apache 2.0
- AlicenseAqualityCmaintenanceEnables 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.9MIT