Skip to main content
Glama
qso-graph

io.github.qso-graph/cq-zones-mcp

by qso-graph

cq-zones-mcp

PyPI MCP Registry

Source: CQ's WAZ Zone Definitions ("Updated and correct as of April 1, 2018"), © CQ Communications, Inc. and the World Wide Radio Operators Foundation (WWROF). The 40 CQ zones are CQ's: this package serves facts from CQ's list, each citing the zone it comes from, and links to CQ's page rather than copying it. Our GPL-3.0 licence covers our code, not CQ'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 CQ zones as CQ publishes them: the 40 zones of CQ's WAZ Zone Definitions (2018-04-01), the zones used by CQ's Worked All Zones award and the CQ World Wide DX Contest. Each zone's entities and subdivisions are given in ADIF's own DXCC and subdivision codes, with CQ's own wording where it splits an area.

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 cq-zones-mcp            # run it; nothing to install

Related MCP server: qrz-mcp

Tools

Tool

Description

Key Parameters

cq_zones_lookup

One zone: its name and every entity, subdivision and boundary CQ lists, with the citation

code

cq_zones_codes_for

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

dxcc, subdivision

cq_zones_search

Find zones by name, prefix or wording

text, limit

cq_zones_valid_on

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

code, on_date

cq_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

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

Claude Code

Add to .claude/settings.json:

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

ChatGPT Desktop

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

Cursor

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

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

VS Code / GitHub Copilot

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

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

Gemini CLI

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

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

Ask questions

"Which CQ zone is Quebec in?"

"What does CQ zone 23 cover?"

"Which CQ zones does Canada span?"

MCP Inspector

cq-zones-mcp --transport streamable-http --port 8016

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

Development

git clone https://github.com/qso-graph/cq-zones-mcp.git
cd cq-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

cq-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
cq_zones_codes_forCq Zones Codes ForA
Read-onlyIdempotent

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

Where CQ splits an entity (VE2 Quebec at the 50th parallel), each zone is returned with CQ's boundary wording.

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

NameRequiredDescription

No output parameters

TDQS

A3.8/5.0
Behavior4/5

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

Annotations already declare this as a read-only, idempotent, non-destructive operation, so safety behavior is covered. The description adds useful context beyond annotations by explaining that split entities can return multiple zones with CQ's boundary wording, though it does not cover not-found or error behavior.

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

Conciseness5/5

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

The description is two short sentences and front-loads the core purpose. The second sentence earns its place by documenting the important split-entity return behavior.

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 simple two-parameter, read-only lookup with full schema coverage, annotations, and an output schema, the description is largely complete for correct invocation. The main remaining gap is routing guidance relative to the sibling tools.

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 explains both dxcc and subdivision parameters. The description reinforces the entity/subdivision concept but does not add syntax, constraints, or examples beyond what the schema provides, making the baseline 3 appropriate.

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

Purpose4/5

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

The description clearly states a specific verb-and-resource query: which CQ zones cover an ADIF DXCC entity or subdivision. It is understandable without opening the schema, but it does not explicitly distinguish this from siblings such as cq_zones_lookup, cq_zones_search, or cq_zones_valid_on.

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 query wording: an agent can infer this is for mapping a DXCC entity or subdivision to CQ zones. However, the description gives no explicit when-to-use guidance, no exclusions, and no named alternatives among the sibling tools.

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

cq_zones_lookupCq Zones LookupA
Read-onlyIdempotent

One CQ zone: its name and every entity, subdivision and boundary CQ lists for it, with ADIF codes and the citation.

NameRequiredDescriptionDefault
codeYesA CQ zone number, 1 to 40.

Output Schema

NameRequiredDescription

No output parameters

TDQS

A4.2/5.0
Behavior4/5

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

The description goes beyond the structural annotations (readOnlyHint: true) by providing rich behavioral context regarding the *output* data: what specific components (entity lists, boundaries, ADIF codes, citation) are provided, which informs the agent about the depth of the lookup.

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 definition is highly efficient; a single, clear sentence captures the resource, the scope, and the specific data points returned without any extraneous language.

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 that the input schema and safety annotations are comprehensive, the description is complete by focusing on the unique value of the lookup—the inclusion of detailed information like boundaries and ADIF codes.

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?

Since schema description coverage is 100%, the schema already details the 'code' parameter. The description provides context that confirms the input is a 'CQ zone number, 1 to 40,' meeting the baseline score for high schema coverage.

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

Purpose5/5

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

The description is highly specific, stating that it retrieves a single CQ zone's details, including its name and a list of its entities, subdivisions, and boundaries with ADIF codes.

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?

While it doesn't explicitly state alternatives, the description clearly defines its function as a granular lookup for a single zone, implicitly distinguishing it from broader search or code-listing tools.

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

cq_zones_source_infoCq Zones Source InfoA
Read-onlyIdempotent

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

NameRequiredDescriptionDefault

No parameters

Output Schema

NameRequiredDescription

No output parameters

TDQS

A3.6/5.0
Behavior4/5

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

The description provides rich behavioral context by listing the highly specific technical data points it returns, such as 'owner's files' URLs and SHA-256s. This goes beyond simple read/write status provided by the annotations.

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 definition is highly concise, delivering all necessary context in a single, direct sentence without unnecessary filler or jargon.

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 that there are zero input parameters, the description is highly complete, as it informs the agent exactly what specific knowledge is returned upon invocation.

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?

Since the tool has zero parameters and 100% schema coverage, the description provides no functional value over the structured data. The baseline score of 3 is appropriate for metadata-only descriptions.

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

Purpose4/5

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

The description clearly defines the function as retrieving specific metadata (ownership, edition, terms, URLs, and SHA-256s). While it doesn't distinguish its purpose relative to all siblings, it clearly specifies the nature of the 'source info' provided.

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?

The description does not provide any guidance on when to use this tool versus similar tools like cq_zones_lookup or cq_zones_search. It relies entirely on the agent inferring the correct use case based on the description's content.

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

cq_zones_valid_onCq Zones Valid OnA
Read-onlyIdempotent

Whether a CQ zone was valid on a date.

CQ's list gives no validity window, so every zone it lists is valid; the tool exists so every owner-list server answers the same questions.

NameRequiredDescriptionDefault
codeYesA CQ zone number, 1 to 40.
on_dateYesThe date, YYYY-MM-DD.

Output Schema

NameRequiredDescription

No output parameters

TDQS

A3.7/5.0
Behavior4/5

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

Annotations already declare readOnly/idempotent/non-destructive/closed-world, yet the description adds the important behavioral fact that CQ publishes no validity window, so the answer is effectively always true for listed zones. That is real context an agent cannot get from the schema, though it omits what happens for an out-of-range code.

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 core answer front-loaded. The second sentence is slightly discursive but earns its place by explaining the no-validity-window rationale.

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 and parameters are fully described, so the description only needs to convey the tool's semantics and the quirk of constant validity, which it does. Little is missing for correct invocation.

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 (code 1-40, date YYYY-MM-DD) are fully documented in the schema. The description only restates 'zone' and 'date' without adding format or edge-case meaning, so the baseline of 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 predicate: whether a CQ zone (identified by code) was valid on a given date. It is clearly distinct from lookup/search/codes_for siblings, though it never names them to sharpen the distinction.

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?

Explains why the tool exists (uniform semantics across owner-list servers) but never says when to call it versus cq_zones_lookup, cq_zones_codes_for, or cq_zones_search. Usage is implied rather than directed.

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

get_version_infoGet Version InfoA
Read-onlyIdempotent

Get cq-zones-mcp's version and the edition of CQ's list it serves.

NameRequiredDescriptionDefault

No parameters

Output Schema

NameRequiredDescription

No output parameters

TDQS

A3.7/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 real information beyond that by stating the tool returns both the package version and the served data edition, which an agent cannot infer from annotations or the empty schema.

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

Conciseness5/5

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

A single sentence with no filler, front-loading the core action and then the two outputs. Every clause 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 needn't explain return value structure, and for a zero-parameter read tool it is nearly complete. The only gap is not clarifying how it differs from cq_zones_source_info.

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, so there is no parameter semantics to explain and the baseline of 4 applies. Nothing in the description misleads about inputs.

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 two distinct pieces of data returned: the package version and the edition of CQ's list being served. That clearly separates it from lookup/search/valid_on siblings, though it doesn't distinguish it from the similarly-named cq_zones_source_info.

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 call this rather than a sibling, and no mention of prerequisites. The closest overlap, cq_zones_source_info, is never mentioned, leaving the agent to infer the difference from names 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. 6 tool updatesv0.1.0
    • First observedcq_zones_codes_for
    • First observedcq_zones_lookup
    • First observedcq_zones_search
    • First observedcq_zones_source_info
    • First observedcq_zones_valid_on
    • First observedget_version_info

TDQS

A3.9/5.0

Scored across 6 tools

Disambiguation4/5

Lookup, search, codes_for, and valid_on are clearly distinct operations targeting different queries. The only mild overlap is between get_version_info and cq_zones_source_info, since both return server/list metadata, though their descriptions distinguish version from ownership/terms.

Naming Consistency4/5

Five of six tools use a consistent cq_zones_ prefix with a verb/noun tail (lookup, search, codes_for, valid_on, source_info). get_version_info breaks the pattern by using a bare get_ verb and no cq_zones_ prefix, a minor but visible deviation.

Tool Count5/5

Six tools is well-scoped for a focused reference-data server. Each tool serves a distinct query need without excess, comfortably within the ideal 3-15 range.

Completeness5/5

The domain is a static CQ zone reference list, so mutation tools are unnecessary. Lookup by zone, search by text, reverse lookup by entity/subdivision, date validity, and source/version metadata cover the read surface fully with no dead ends.

Maintenance

ActivityMaintained
ResponsivenessUnresponsive

Related MCP Connectors

Related MCP Servers

  • F
    license
    B
    quality
    D
    maintenance
    Enables exploration of geographical data including countries, cities, states/provinces, and regions through a SQLite database. Supports searches by name, location coordinates, currency, and regional groupings with comprehensive statistical queries.
    15
    7
    -
  • 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
    3
    GPL 3.0
  • A
    license
    B
    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,505 PyPI
    4
    GPL 3.0
  • A
    license
    Not graded
    quality
    A
    maintenance
    Enables searching 13M+ GeoNames places by name, country, feature class, or bounding box, retrieving full place records, walking administrative hierarchies up and down, reverse geocoding coordinates, finding postal codes, and looking up country facts and reference data. Runs over STDIO or Streamable HTTP with caching, per-account rate limiting, and typed failure reasons.
    243 npm
    1
    Apache 2.0