io.github.qso-graph/pota-mcp
Enables GitHub Copilot to access POTA data including current spots, park information, user statistics, and upcoming scheduled activations.
Click on "Install 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., "@io.github.qso-graph/pota-mcpWhat are the current POTA spots?"
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.
pota-mcp
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
pip install pota-mcpRelated MCP server: qrz-mcp
Tools
Tool | Description |
| Current activator spots with park/grid enrichment and optional filters |
| Park details by reference code (name, grid, type, agencies, website) |
| Activation and QSO counts for a park |
| Activator/hunter stats by callsign |
| Upcoming scheduled activations |
| All parks in a state/province/country |
| Find parks near a point — great for 2-fer planning |
| 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": "pota-mcp"
}
}
}Claude Code
Add to .claude/settings.json:
{
"mcpServers": {
"pota": {
"command": "pota-mcp"
}
}
}ChatGPT Desktop
{
"mcpServers": {
"pota": {
"command": "pota-mcp"
}
}
}Cursor
Add to .cursor/mcp.json (project-level) or ~/.cursor/mcp.json (global):
{
"mcpServers": {
"pota": {
"command": "pota-mcp"
}
}
}VS Code / GitHub Copilot
Add to .vscode/mcp.json in your workspace:
{
"servers": {
"pota": {
"command": "pota-mcp"
}
}
}Gemini CLI
Add to ~/.gemini/settings.json (global) or .gemini/settings.json (project):
{
"mcpServers": {
"pota": {
"command": "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-mcpMCP Inspector
pota-mcp --transport streamable-http --port 8006Then open the MCP Inspector at http://localhost:8006.
Development
git clone https://github.com/qso-graph/pota-mcp.git
cd pota-mcp
pip install -e .License
GPL-3.0-or-later
Available Tools
8 toolsget_version_infoA
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.
Returns: service_name, service_version (PyPI), and spec_version (POTA API).
| 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 provided, but description discloses return fields (service_name, service_version, spec_version) and clarifies it's a read operation. Adds value beyond the empty input schema.
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?
Concise, front-loaded with purpose, and uses bullet-style listing for returns. Every sentence adds value with no repetition.
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 no parameters and an output schema, the description fully explains return values and use case. No gaps in information needed for 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?
No parameters exist, so baseline is 4. Description doesn't need to add parameter info since schema coverage is 100% trivially.
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 clearly states it retrieves service version and upstream spec version, using specific verb-resource pairing. It distinguishes itself from sibling tools (all park/spots related) by focusing on version info.
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?
Explicitly suggests using it to confirm fleet alignment and compare versions across servers. While no when-not-to-use is given, the context is clear and excludes alternatives implicitly.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
pota_location_parksA
List all POTA parks in a state, province, or country.
| Name | Required | Description | Default |
|---|---|---|---|
| location | Yes | Location code (e.g., US-ID for Idaho, CA-ON for Ontario, G for England). |
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 only states it lists parks, with no mention of authentication, rate limits, error handling, or whether the operation is read-only. Minimal behavioral context beyond the action itself.
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?
The description is a single concise sentence that effectively communicates the tool's purpose. No extraneous information or repetition.
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 the tool's simplicity (one parameter, has output schema), the description covers the core functionality adequately. It could be improved by mentioning the output format briefly, but the presence of an output schema reduces the burden. Slightly lacking in usage guidance, but otherwise complete for a straightforward list tool.
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 input schema has 100% coverage for the single parameter location, with an example and description. The tool description adds context ('state, province, or country') that aligns with the schema's examples, but does not provide additional semantic detail beyond what the schema already conveys.
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 clearly states the action (list), the resource (POTA parks), and the scope (in a state, province, or country). It distinguishes from sibling tools like pota_nearby_parks (which likely uses proximity) and pota_park_info (single park details).
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 for regional queries but does not explicitly tell when to use this tool versus alternatives (e.g., pota_nearby_parks for proximity). No guidance on prerequisites or limitations.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
pota_nearby_parksB
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.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Maximum parks to return (default 25, max 100). | |
| latitude | Yes | Center point latitude (e.g., 43.617). | |
| location | Yes | Location code (e.g., US-ID, CA-ON). Required to scope the search. | |
| longitude | Yes | Center point longitude (e.g., -115.993). | |
| radius_km | No | Search radius in km (default 50, max 500). |
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, and the description minimally discloses behavior beyond the schema (e.g., 'filters by distance'). It does not mention read-only nature, rate limits, or error handling.
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 action, efficient, and free of fluff. Every sentence adds value.
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?
The description is adequate given the 100% schema coverage and existence of an output schema, but it could clarify the interplay between the 'location' code and the latitude/longitude parameters.
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%, so baseline is 3. The description adds a general purpose but does not enhance per-parameter meaning beyond the existing schema descriptions.
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 clearly states it finds POTA parks near a geographic point, specifying the action and resource. It differentiates from sibling tools like pota_location_parks by mentioning distance filtering, though not explicitly naming alternatives.
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?
It provides a use case ('finding 2-fer candidates near an activation site'), which implies when to use, but lacks explicit guidance on when not to use or alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
pota_park_infoB
Get detailed park information by POTA reference code.
| Name | Required | Description | Default |
|---|---|---|---|
| reference | Yes | Park reference code (e.g., US-0001, CA-5580, G-0001). |
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 provided, the description carries full burden for behavioral traits. It does not disclose any side effects, authentication needs, rate limits, or what 'detailed' means. Simply stating 'Get' implies a read operation but offers no further transparency.
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?
The description is a single, front-loaded sentence with no extraneous words. It directly conveys the tool's purpose efficiently.
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 the simple tool (one parameter, output schema exists), the description is adequate. It clearly indicates input and output type. Could detail what 'detailed park information' includes, but output schema likely covers that.
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% for the single parameter 'reference'. The tool description does not add additional meaning beyond the schema's description of examples. Baseline of 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?
The description uses a specific verb 'Get' and resource 'detailed park information' with a clear input method 'by POTA reference code'. It effectively distinguishes from sibling tools like pota_spots or pota_scheduled which serve different purposes.
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?
No guidance on when to use this tool versus alternatives, nor any conditions for use. The description merely states what it does without contextual recommendations.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
pota_park_statsB
Get activation and QSO counts for a POTA park.
| Name | Required | Description | Default |
|---|---|---|---|
| reference | Yes | Park reference code (e.g., US-0001). |
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 full burden for behavioral disclosure. It only states the function without indicating whether the operation is read-only, has side effects, or requires any permissions. No other behavioral traits are mentioned.
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?
The description is a single concise sentence with no fluff. It efficiently conveys the tool's function without unnecessary words.
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?
The tool is simple with one parameter and an output schema, so the description is minimally complete. However, it lacks context about the nature of counts (e.g., time period) and does not help an agent decide among sibling tools.
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 input schema has 100% coverage, so the baseline is 3. The description does not add meaning beyond the schema's parameter description; it merely implies the reference is for a POTA park.
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 clearly states the tool retrieves 'activation and QSO counts for a POTA park,' specifying both the verb and resource. This distinguishes it from sibling tools like 'pota_park_info' (which likely provides general info) and 'pota_user_stats' (for user stats).
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?
No guidance is provided on when to use this tool versus alternatives, nor are there any prerequisites or exclusions. The description simply states what it does without contextual use cases.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
pota_scheduledA
Get upcoming scheduled POTA activations.
Returns: List of scheduled activations with activator, park, date, time window, planned frequencies, and comments.
| 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, the description fully explains the return type (list of scheduled activations with specific fields) and implies a read-only operation, though it lacks details on edge cases or limitations.
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 concisely convey purpose and return structure with no wasted words, front-loading the key action.
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 parameterless tool with an output schema, the description sufficiently covers what the tool does and what it returns, leaving no major gaps.
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 tool has no parameters, and schema coverage is 100%, so the description does not need to add parameter info; the baseline of 4 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?
The description clearly states 'Get upcoming scheduled POTA activations,' using a specific verb and resource that distinguishes it from siblings like 'pota_spots' (current spots) and 'pota_park_info' (park details).
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 for retrieving future planned activations but does not explicitly state when to use this tool versus alternatives or provide exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
pota_spotsA
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.
| Name | Required | Description | Default |
|---|---|---|---|
| band | No | Filter by band (e.g., 20m, 40m). Empty for all bands. | |
| mode | No | Filter by mode (e.g., CW, FT8, SSB). Empty for all modes. | |
| program | No | Filter by program prefix (e.g., US, VE, G). Empty for all. | |
| location | No | Filter by location code (e.g., US-ID, CA-ON). Empty for all. |
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 bears full responsibility. It discloses that the tool returns live spot feed with park details, grid squares, and coordinates, which is adequate for a read-only tool. However, it does not mention update frequency or any 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences: the first conveys the main action, the second explains filters. It is concise, front-loaded, and each sentence adds value without redundancy.
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 the presence of an output schema, the description does not need to detail return values. It provides enough context about the data (park details, grid squares, coordinates) for an agent to understand what to expect. Minor omission: no mention of result size or real-time guarantees.
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% with each parameter well-documented. The description adds only that filters are optional, which is already implied by the schema. Following guidelines, the baseline is 3.
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 clearly states 'Get current POTA activator spots.' It identifies a specific verb and resource. The tool is distinct from siblings like pota_park_info or pota_user_stats, which serve different purposes.
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 notes that all filters are optional—omit to get all active spots. This gives clear usage context but lacks explicit guidance on when not to use this tool or how it compares to alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
pota_user_statsA
Get POTA activator and hunter statistics for a callsign.
| Name | Required | Description | Default |
|---|---|---|---|
| callsign | Yes | Callsign to look up (e.g., K4SWL, KI7MT). |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so description bears full burden. It implies a read operation but does not mention auth, rate limits, or output specifics. Adequate for a simple lookup but lacks depth.
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?
Single sentence that is clear and direct. No unnecessary words, front-loaded with key action and object.
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 an output schema exists, description need not detail returns. Covers core purpose fully for a simple one-parameter tool. Slightly hindered by missing usage guidance.
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 100% for the single parameter. Description adds context that the stats are for activator and hunter, supplementing the schema. Baseline 3, extra context justifies 4.
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?
Description explicitly states 'Get POTA activator and hunter statistics for a callsign', with specific verb and resource. Distinguishes from sibling tools like pota_park_stats, pota_spots, etc. which focus on parks and spots.
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?
No guidance on when to use this tool vs alternatives, no prerequisites, no exclusion criteria. Agent must infer from sibling tool names.
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.
8 tool updates
v0.2.2- First observed
get_version_info - First observed
pota_location_parks - First observed
pota_nearby_parks - First observed
pota_park_info - First observed
pota_park_stats - First observed
pota_scheduled - First observed
pota_spots - First observed
pota_user_stats
TDQS
Scored across 8 tools
Each tool targets a distinct POTA operation: version info, park listing by location, nearby parks, park details, park statistics, scheduled activations, live spots, and user stats. No overlap in functionality.
All tools follow a consistent 'pota_' prefix combined with a verb_noun pattern (e.g., pota_location_parks, pota_park_info, pota_user_stats). The only exception is get_version_info, but it still adheres to a clear verb_noun structure without the prefix.
With 8 tools, the server is well-scoped for its purpose. It covers essential POTA operations without unnecessary bloat or gaps.
The tool surface covers all core POTA functionalities: version checking, park discovery (by location, nearby, info, stats), scheduled activations, live spots, and user statistics. No obvious missing operations for a read-only data API.
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Connectors
- UnifAPIOAuthcom.unifapi
Hosted MCP server for live public-data APIs and Skills for AI agents.
- ZapierOAuthcom.zapier
Hosted MCP server connecting AI assistants to 9,000+ apps and 40,000+ actions via Zapier.
MCP server for AI dialogue using various LLM models via AceDataCloud
Pocket Agent (aipocketagent.com) MCP server — read tools for personas, apps, and product info.
Related MCP Servers
- AlicenseAqualityDmaintenanceMCP server for HamQTH.com — callsign lookup, DX cluster spots, Reverse Beacon Network, DXCC resolution, and more through any MCP-compatible AI assistant.8GPL 3.0
- AlicenseAqualityFmaintenanceMCP server for QRZ.com — callsign lookups, DXCC entity resolution, and logbook queries through any MCP-compatible AI assistant.62GPL 3.0
- AlicenseAqualityDmaintenanceEnables IOTA group lookup, island search, DXCC mapping, nearby groups, and programme statistics through any MCP-compatible AI assistant.7GPL 3.0
- AlicenseAqualityDmaintenanceMCP server for Summits on the Air (SOTA) — live spots, activation alerts, summit info, and nearby summits through any MCP-compatible AI assistant.5GPL 3.0