Skip to main content
Glama
qso-graph

io.github.qso-graph/pota-mcp

by qso-graph

pota-mcp

PyPI MCP Registry

MCP server for Parks on the Air (POTA) — live activator spots, park info, activator/hunter stats, and scheduled activations through any MCP-compatible AI assistant.

Part of the qso-graph project. No authentication required — all POTA endpoints are public.

Install

uvx pota-mcp            # run it; nothing to install

Related MCP server: qrz-mcp

Tools

Tool

Description

pota_spots

Current activator spots with park/grid enrichment and optional filters

pota_park_info

Park details by reference code (name, grid, type, agencies, website)

pota_park_stats

Activation and QSO counts for a park

pota_park_activations

A park's recent activations — who, when, and QSOs by mode

pota_park_leaderboard

A park's top activators, activator QSOs and hunter QSOs

pota_user_stats

Activator/hunter stats by callsign (callsign, name, activator, attempts, hunter, awards, endorsements; no address or email-derived fields)

pota_scheduled

Upcoming scheduled activations, with optional location, park, activator and time-window filters

pota_location_parks

All parks in a state/province/country

pota_nearby_parks

Find parks near a point — great for 2-fer planning

pota_rare_parks_near

Parks near a point that are rarely or never activated

get_version_info

Service version + upstream spec version (fleet identity attestation)

Quick Start

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

Configure your MCP client

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

Claude Code

Add to .claude/settings.json:

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

ChatGPT Desktop

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

Cursor

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

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

VS Code / GitHub Copilot

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

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

Gemini CLI

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

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

Ask questions

"What POTA activations are happening right now?"

"Tell me about park US-0001 — how many activations has it had?"

"What are K4SWL's POTA stats?"

"Show me all parks in Idaho"

"Are there any CW activators on 20m right now?"

"What activations are scheduled for tomorrow?"

Testing Without Network

For testing all tools without hitting the POTA API:

POTA_MCP_MOCK=1 pota-mcp

MCP Inspector

pota-mcp --transport streamable-http --port 8006

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

Development

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

License

GPL-3.0-or-later

Available Tools

11 tools
get_version_infoGet Version InfoA
Read-onlyIdempotent

Get pota-mcp service version and upstream spec version.

Returns the running PyPI version of pota-mcp and the POTA API revision currently in use. Use this to confirm fleet alignment across MCP deployments — agents can compare service_version and spec_version across servers to detect drift without going outside the MCP protocol.

NameRequiredDescriptionDefault

No parameters

Output Schema

NameRequiredDescription

No output parameters

TDQS

A4.4/5.0
Behavior4/5

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

Annotations already cover the safety profile (readOnly, idempotent, non-destructive, closed-world), so the description adds context on top: it returns the running PyPI version plus the POTA API revision in use, and can be compared across servers. It does not discuss failure modes, but for a zero-parameter version readout little else is needed.

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 the core statement, then the rationale. Mostly economical, though "detect drift without going outside the MCP protocol" is slightly padded relative to the informational content.

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?

With zero parameters, rich annotations, and an output schema present, the description covers what the tool returns and why an agent would call it. Nothing needed for correct invocation is missing.

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 no parameters, so the baseline is 4. The description names the response fields (service_version, spec_version), which is a small bonus beyond the empty schema without being parameter semantics per se.

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 and resource ("Get pota-mcp service version and upstream spec version") and immediately enumerates the two returned fields, service_version and spec_version. This is clearly distinguishable from all siblings, which are POTA park/user data tools.

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?

"Use this to confirm fleet alignment across MCP deployments" gives an explicit when-to-use condition (cross-server drift detection). No exclusions or named alternatives are given, but no sibling plausibly substitutes for this tool, so the gap is minor.

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

pota_location_parksPota Location ParksA
Read-onlyIdempotent

List all POTA parks in a state, province, or country.

NameRequiredDescriptionDefault
locationYesLocation code (e.g., US-ID for Idaho, CA-ON for Ontario, G for England).

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

Annotations already declare readOnlyHint, idempotentHint, openWorldHint, and destructiveHint=false, so the safety profile is fully covered without help from the description. The description adds only the word 'all', which hints at potentially unbounded result sets but never states pagination, result size, or truncation behavior — useful context that is missing.

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?

One sentence, front-loaded with the verb and resource, ending with the scope. Nothing redundant and nothing buried.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists, so return-value shape need not be explained, and the single required parameter is fully documented in the schema. The description is nearly complete for this simple tool; the only real gap is not distinguishing region-based listing from the proximity-based sibling.

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 parameter's own description gives example codes (US-ID, CA-ON, G). The description adds a small amount by confirming country-level codes are valid and not just state/province, but it provides no format rules, delimiters, or case sensitivity. Baseline 3 applies when the schema does the work.

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 (List), resource (POTA parks), and scope (state, province, or country), so an agent knows exactly what it returns. It does not, however, differentiate itself from the sibling pota_nearby_parks, which is the obvious alternative when the user's criterion is proximity rather than a named region.

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: call this when you have a location code and want the parks in that region. There is no explicit when-not guidance and no mention of pota_nearby_parks for geographic-radius searches, leaving the agent to infer which of the two location-based tools to pick.

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

pota_nearby_parksPota Nearby ParksA
Read-onlyIdempotent

Find POTA parks near a geographic point.

Fetches all parks in the given location and filters by distance. Useful for finding 2-fer candidates near an activation site.

NameRequiredDescriptionDefault
limitNoMaximum parks to return (default 25, max 100).
latitudeYesCenter point latitude (e.g., 43.617).
locationYesLocation code (e.g., US-ID, CA-ON). Required to scope the search.
longitudeYesCenter point longitude (e.g., -115.993).
radius_kmNoSearch radius in km (default 50, max 500).

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 read-only, idempotent, open-world behavior, so the bar is lower. The description still adds genuinely useful mechanics: it fetches all parks in the location first and then filters by distance, which signals a potentially expensive fetch-then-filter operation rather than a server-side spatial query.

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?

Three short lines with the core action front-loaded and zero filler. Slight redundancy between the first and second sentences ('near a geographic point' vs. 'filters by distance'), but the second earns its place by explaining the mechanism.

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?

Five parameters, full schema coverage, an output schema, and complete annotations mean the description only needs to establish purpose and use case, which it does. The one remaining gap is not clarifying how this differs from the nearest sibling, pota_location_parks.

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 every parameter carries a description with examples, defaults, and maxima, so the schema does all the work. The description adds no parameter-level meaning beyond what is already documented.

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 and resource with geographic scope: 'Find POTA parks near a geographic point.' The addition that it fetches all parks in a location then filters by distance distinguishes it from siblings like pota_location_parks, though the differentiation is implicit rather than stated.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Offers one concrete use case ('finding 2-fer candidates near an activation site'), which implies the when-to-use context. However, it names no alternatives and gives no exclusions, so an agent must infer how this differs from pota_location_parks or pota_rare_parks_near.

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

pota_park_activationsPota Park ActivationsA
Read-onlyIdempotent

List recent activations of a POTA park, most recent first.

Answers "when was this park last activated?" and "is it often on the air?".

NameRequiredDescriptionDefault
countNoHow many recent activations to return (default 10, max 50).
referenceYesPark reference code (e.g., US-0062).

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

Annotations already declare readOnly, idempotent, openWorld and non-destructive, so the safety profile is covered. The description adds only the ordering guarantee ('most recent first'), which is genuinely useful but stops short of noting whether inactive parks return an empty list, how stale the data is, or what an 'activation' record contains.

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 short sentences with no filler; the core action and sort order come first and the intent questions follow. Nothing could be removed without losing 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?

With an output schema present, return values need not be described, and annotations cover safety, so the definition is essentially sufficient. The only residual gap is what an empty result or a never-activated park looks like, which an agent may want before reporting to a user.

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%, with both 'reference' (example US-0062) and 'count' (default 10, max 50) fully documented in the schema. The description adds no parameter-level meaning beyond that, so the baseline 3 applies.

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

Purpose4/5

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

States a specific verb and resource ('List recent activations of a POTA park') plus the ordering ('most recent first'), which is far more precise than the bare name. It implicitly separates itself from pota_park_info (park metadata) and pota_spots (live spots), but never names those siblings explicitly.

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 two framing questions ('when was this park last activated?' and 'is it often on the air?') give a clear trigger for calling the tool. There is no explicit when-not guidance or pointer to pota_park_info / pota_park_stats for the related questions an agent might confuse with this one.

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

pota_park_infoPota Park InfoC
Read-onlyIdempotent

Get detailed park information by POTA reference code.

NameRequiredDescriptionDefault
referenceYesPark reference code (e.g., US-0001, CA-5580, G-0001).

Output Schema

NameRequiredDescription

No output parameters

TDQS

C2.9/5.0
Behavior2/5

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

Annotations already declare readOnlyHint=true, idempotentHint=true, destructiveHint=false, and openWorldHint=true, so the safety profile is fully covered. The description adds nothing beyond that — it does not say whether unknown reference codes error or return empty, whether results are cached, or what the 'detailed' fields comprise.

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?

One front-loaded sentence with zero filler. It is efficient but so terse that it borders on under-specification relative to the six park-related siblings.

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 no explanation) and the lone parameter is fully documented, leaving the tool callable as described. What is missing is disambiguation from pota_park_stats and pota_park_activations, which is the main risk for an agent choosing among these 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% and the single parameter already documents the reference format with three examples (US-0001, CA-5580, G-0001). The description adds no meaning beyond the schema, so baseline 3 applies.

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

Purpose4/5

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

A specific verb (Get) plus resource (detailed park information) keyed by POTA reference code, so the agent knows exactly what comes back in kind. However, it never distinguishes 'park information' from the closely named siblings pota_park_stats, pota_park_activations, and pota_park_leaderboard, which all also take a park reference.

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 when-to-use statement, no prerequisites, and no named alternatives among the several park-scoped siblings. The only implied guidance is that a reference code is required, which the schema already makes mandatory.

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

pota_park_leaderboardPota Park LeaderboardA
Read-onlyIdempotent

Top activators and hunters of a POTA park.

Three boards: most activations, most QSOs as an activator, most QSOs as a hunter. Each row is a callsign and a count and nothing else.

NameRequiredDescriptionDefault
limitNoRows per board (default 10, max 25). POTA currently publishes five per board, so a higher limit changes nothing until it does.
referenceYesPark reference code (e.g., US-0062).

Output Schema

NameRequiredDescription

No output parameters

TDQS

A4.1/5.0
Behavior4/5

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

Annotations already declare readOnly, idempotent, non-destructive, openWorld, so the safety profile is covered. The description adds genuinely new context: there are exactly three boards and each row contains only a callsign and a count, which tells the agent not to expect dates, modes, or per-QSO detail.

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?

Three short sentences, front-loaded with the purpose, then the board breakdown, then the row shape. No filler and nothing 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?

A simple read tool with an output schema, full annotation coverage, and 100% parameter documentation; the description supplies the one thing structured fields don't convey — the three-board structure and minimal row fields. Nothing an agent needs to call it correctly is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, with both reference and limit documented in the schema (including the max 25 and the note that POTA publishes only five per board). The description adds nothing about parameters, 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?

States a specific resource (POTA park leaderboard) and enumerates exactly what it returns: three boards keyed by activation count, activator QSOs, and hunter QSOs, with rows of callsign+count only. That row-shape statement cleanly separates it from raw-list siblings like pota_park_activations or pota_park_stats.

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 content (ask for rankings of a park), but the description never states when to prefer this over pota_park_stats or pota_park_activations, nor any prerequisite such as needing a valid park reference first. Adequate but with a clear gap.

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

pota_park_statsPota Park StatsB
Read-onlyIdempotent

Get activation and QSO counts for a POTA park.

NameRequiredDescriptionDefault
referenceYesPark reference code (e.g., US-0001).

Output Schema

NameRequiredDescription

No output parameters

TDQS

B3.2/5.0
Behavior3/5

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

Annotations already declare readOnly, idempotent, non-destructive, and open-world behavior, so the safety profile is covered. The description adds that aggregation over activations and QSOs is what's returned, but says nothing about whether the response is a lifetime total, a per-year breakdown, or how caching/freshness works.

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?

One tight sentence with no filler and the resource front-loaded. It is efficient but so terse that the scope of 'counts' is left ambiguous.

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 described. But in a dense sibling cluster of park-scoped tools, the description should have stated what set this apart from pota_park_info and pota_park_activations; that routing information is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% and the sole parameter is documented with a concrete example format (US-0001), so the schema carries the load. The description adds nothing about reference semantics, which is acceptable at baseline 3.

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 and resource ('Get activation and QSO counts for a POTA park'), which is clearly a statistics/aggregate operation, distinct from map-listing tools like pota_spots. However, it never names or contrasts the closest siblings (pota_park_info, pota_park_activations), so the differentiation is left to inference.

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 on when to use this versus pota_park_info (park metadata) or pota_park_activations (raw activations). The agent must guess whether counts come from this tool or can be derived from the activations list.

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

pota_rare_parks_nearPota Rare Parks NearA
Read-onlyIdempotent

Find the least-activated POTA parks near a point.

Answers "which parks near me have never, or rarely, been activated?" — for an activator looking for something unworked, or a hunter looking for a rare one. Least activated first, nearest first among equals.

NameRequiredDescriptionDefault
limitNoMaximum parks to return (default 25, max 100).
latitudeYesCenter point latitude (e.g., 43.617).
locationYesLocation code (e.g., US-ID, CA-ON). Required to scope the search.
longitudeYesCenter point longitude (e.g., -115.993).
radius_kmNoSearch radius in km (default 50, max 500).

Output Schema

NameRequiredDescription

No output parameters

TDQS

A4.1/5.0
Behavior4/5

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

Annotations already cover safety (readOnly, idempotent, non-destructive, openWorld) and an output schema exists, so the description's added value is the result ordering: 'least activated first, nearest first among equals.' That is genuinely useful behavior not expressed in structured fields. It says nothing about limits or result size control beyond what the schema states.

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?

Three short sentences, front-loaded with the core action, followed by the user-facing question and the sort order. The middle question sentence is slightly redundant with the first but earns its place by conveying intent.

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 a full output schema and 100% parameter coverage, the description only needs to convey purpose, ranking, and selection context — all present. It stops short of noting the required location/coordinate combination or the cap on results behavior, but those live in the schema.

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 all five parameters (limit, radius_km, location, latitude, longitude) are already documented with defaults and maxima. The description adds no parameter-level detail, so the 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?

States a specific verb and resource ('Find the least-activated POTA parks near a point') plus the ranking rule, which distinguishes it from the sibling pota_nearby_parks. An agent can select it without opening either schema.

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?

Gives two concrete use cases an activator/hunter would recognize ('which parks near me have never, or rarely, been activated?'), which is clear conditional context. It does not name the alternative (pota_nearby_parks) or say when NOT to use this, so it falls short of a 5.

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

pota_scheduledPota ScheduledA
Read-onlyIdempotent

Get upcoming scheduled POTA activations.

All filters are optional and combine with AND — omit them all and the whole schedule comes back, as before.

NameRequiredDescriptionDefault
locationNoFilter by location code (e.g., US-ID, CA-ON). Matches a park that spans regions, so US-MD finds a park listed as US-VA,US-MD. Empty for all.
activatorNoFilter by activator callsign (e.g., N3VEM). Empty for all.
referenceNoFilter by park reference (e.g., US-0058). Empty for all.
within_hoursNoOnly activations whose start time falls between now and this many hours from now. An activation already under way is not included — pota_spots is what reports the air now. Omit for no time limit.

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 cover read-only, idempotent and open-world behavior, so the bar is lower; the description still adds the non-obvious AND-combination rule and the default 'return whole schedule' behavior. The trailing 'as before' adds no information for an agent without prior context.

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 tight sentences with the core purpose front-loaded and no wasted preamble. The parenthetical 'as before' is the only baggy fragment.

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 all four parameters are fully documented, so the description needn't explain returns. It supplies the filter-combination and empty-filter default, leaving only result ordering and typical result size unstated.

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?

Schema coverage is 100%, so the baseline is 3; the description earns one more by documenting cross-parameter semantics (filters AND together) that the per-field schema descriptions do not express.

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 and resource ('Get upcoming scheduled POTA activations'), which is clearly distinct from stats/leaderboard siblings. It does not explicitly distinguish itself from the closest sibling, pota_spots (reports current activations), leaving that contrast only in a parameter description.

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?

It explains the filtering model ('all optional, combine with AND, omit for everything'), which implies usage. But it never says when to prefer this over pota_spots or pota_park_activations, so routing guidance is left implicit.

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

pota_spotsPota SpotsA
Read-onlyIdempotent

Get current POTA activator spots.

Returns live spot feed with park details, grid squares, and coordinates. All filters are optional — omit to get all active spots.

NameRequiredDescriptionDefault
bandNoFilter by band (e.g., 20m, 40m). Empty for all bands.
modeNoFilter by mode (e.g., CW, FT8, SSB). Empty for all modes.
programNoFilter by program prefix (e.g., US, VE, G). Empty for all.
locationNoFilter by location code (e.g., US-ID, CA-ON). Empty for all.

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 read-only, idempotent, open-world behavior, so the safety profile is covered. The description adds the important nuance that results are a live, currently-changing feed, which usefully signals that repeated calls may return different spots despite idempotentHint. It does not mention freshness latency, caching, 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?

Three short sentences, purpose front-loaded, with return-shape and optionality following in order of decision relevance. No filler or redundancy.

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?

Output schema exists, so return values need no explanation, and annotations carry the safety profile. With fully documented parameters, the description covers what an agent needs to call it correctly; only cross-tool routing guidance is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%; each of band, mode, program, and location already has an example and an empty-string default documented. The description only contributes the general 'all filters optional' behavior, which the schema's defaults and zero required params already convey. Baseline 3 applies.

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

Purpose4/5

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

States a specific verb and resource ('Get current POTA activator spots') and the second sentence clarifies the payload ('live spot feed with park details, grid squares, and coordinates'). It implicitly separates itself from pota_scheduled by emphasizing 'current'/'live', but never names that or any other sibling explicitly.

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 line 'All filters are optional — omit to get all active spots' tells the agent how to call it with no arguments, which is genuinely useful. But there is no guidance on when to prefer this over pota_scheduled (upcoming activations) or pota_park_activations (per-park history), leaving routing to inference.

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

pota_user_statsPota User StatsA
Read-onlyIdempotent

Get POTA activator and hunter statistics for a callsign.

NameRequiredDescriptionDefault
callsignYesCallsign to look up (e.g., K4SWL, KI7MT).

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

The annotations already declare this as a read-only, idempotent, non-destructive, open-world lookup. The description adds only that the result covers activator and hunter statistics, with no extra behavioral detail such as data freshness or error behavior; the output schema likely covers return structure.

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 a single front-loaded sentence with no wasted words. It states the action and scope immediately.

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 one-parameter read-only lookup with rich annotations, full schema coverage, and an output schema, the description is nearly sufficient to call the tool correctly. It could be stronger only by briefly clarifying when to prefer it over sibling statistics 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 callsign parameter is already well documented with examples. The description mentions the callsign context but adds no format, validation, or lookup semantics beyond the schema.

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

Purpose4/5

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

The description states a specific verb and resource: get POTA activator and hunter statistics for a callsign. This clearly distinguishes it from park-oriented siblings such as pota_park_stats and pota_park_activations, though it does not explicitly name alternatives.

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 'for a callsign,' but the description gives no explicit when-to-use guidance, prerequisites, or comparisons with sibling tools. An agent can infer the context but is not routed between this and related lookups.

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. 4 tool updatesv0.6.0
    • Addedpota_park_activations
    • Addedpota_park_leaderboard
    • Addedpota_rare_parks_near
    • Changedpota_scheduled4 fields changed
      • addedInput schema / properties / activator
        Added value: +{
        +  "anyOf": [
        +    {
        +      "type": "string"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "default": "",
        +  "description": "Filter by activator callsign (e.g., N3VEM). Empty for all."
        +}
      • addedInput schema / properties / location
        Added value: +{
        +  "anyOf": [
        +    {
        +      "type": "string"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "default": "",
        +  "description": "Filter by location code (e.g., US-ID, CA-ON). Matches a park\nthat spans regions, so US-MD finds a park listed as US-VA,US-MD.\nEmpty for all."
        +}
      • addedInput schema / properties / reference
        Added value: +{
        +  "anyOf": [
        +    {
        +      "type": "string"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "default": "",
        +  "description": "Filter by park reference (e.g., US-0058). Empty for all."
        +}
      • addedInput schema / properties / within_hours
        Added value: +{
        +  "anyOf": [
        +    {
        +      "type": "number"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "default": null,
        +  "description": "Only activations whose start time falls between now and\nthis many hours from now. An activation already under way is not\nincluded — pota_spots is what reports the air now. Omit for no\ntime limit."
        +}
  2. 8 tool updatesv0.2.2
    • First observedget_version_info
    • First observedpota_location_parks
    • First observedpota_nearby_parks
    • First observedpota_park_info
    • First observedpota_park_stats
    • First observedpota_scheduled
    • First observedpota_spots
    • First observedpota_user_stats

TDQS

A3.7/5.0

Scored across 11 tools

Disambiguation4/5

Most tools cleanly target distinct Park/User/Activity/Spot/Schedule resources. The only meaningful overlap is pota_nearby_parks vs pota_rare_parks_near, which the latter's description explicitly refines (rarity-filtered subset), and pota_park_activations vs pota_spots/pota_scheduled which differ by time frame.

Naming Consistency4/5

Ten of eleven tools follow a consistent pota_<resource> snake_case convention. get_version_info breaks the prefix pattern, though it is a service-level meta tool and its name is still clear and predictable in style.

Tool Count5/5

Eleven tools is well-scoped for a POTA domain covering parks, activations, spots, schedules, users, and leaderboards. Each tool has a distinguishable job and none appear redundant.

Completeness4/5

Coverage spans discovery (location, nearby, rare), live/scheduled activity, historical activations, stats, and leaderboards, plus a version tool. Minor gaps remain: no lookup by park name or callsign-driven park listing, and no per-activation QSO detail, but core activator/hunter workflows are supported.

Maintenance

ActivityMaintained
ResponsivenessUnresponsive

Related MCP Connectors

Related MCP Servers

  • A
    license
    A
    quality
    A
    maintenance
    MCP server for HamQTH.com — callsign lookup, DX cluster spots, Reverse Beacon Network, DXCC resolution, and more through any MCP-compatible AI assistant.
    8
    586 PyPI
    GPL 3.0
  • A
    license
    A
    quality
    A
    maintenance
    MCP server for QRZ.com — callsign lookups, DXCC entity resolution, and logbook queries through any MCP-compatible AI assistant.
    6
    575 PyPI
    4
    GPL 3.0
  • A
    license
    A
    quality
    A
    maintenance
    Enables IOTA group lookup, island search, DXCC mapping, nearby groups, and programme statistics through any MCP-compatible AI assistant.
    7
    587 PyPI
    GPL 3.0
  • A
    license
    B
    quality
    A
    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
    571 PyPI
    1
    GPL 3.0