Skip to main content
Glama
qso-graph

io.github.qso-graph/pota-mcp

by qso-graph

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-mcp

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_user_stats

Activator/hunter stats by callsign

pota_scheduled

Upcoming scheduled activations

pota_location_parks

All parks in a state/province/country

pota_nearby_parks

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

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": "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-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
pip install -e .

License

GPL-3.0-or-later

Available Tools

8 tools
get_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).

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.5/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness5/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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.

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

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A3.6/5.0
Behavior2/5

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

No annotations are provided, so the description carries the full burden. It 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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines3/5

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.

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

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

B3.3/5.0
Behavior2/5

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.

Conciseness5/5

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.

Completeness3/5

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.

Parameters3/5

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.

Purpose4/5

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.

Usage Guidelines3/5

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.

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

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

B3.4/5.0
Behavior2/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose5/5

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.

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 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.

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

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

B3.3/5.0
Behavior2/5

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.

Conciseness5/5

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.

Completeness3/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines2/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.3/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness5/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines3/5

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.

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

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

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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.

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

Output Schema

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

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters4/5

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.

Purpose5/5

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.

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 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.

  1. 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

A4/5.0

Scored across 8 tools

Disambiguation5/5

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.

Naming Consistency5/5

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.

Tool Count5/5

With 8 tools, the server is well-scoped for its purpose. It covers essential POTA operations without unnecessary bloat or gaps.

Completeness5/5

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

ActivityInactive
ResponsivenessUnresponsive

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

Related MCP Servers

  • A
    license
    A
    quality
    D
    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
    GPL 3.0
  • A
    license
    A
    quality
    F
    maintenance
    MCP server for QRZ.com — callsign lookups, DXCC entity resolution, and logbook queries through any MCP-compatible AI assistant.
    6
    2
    GPL 3.0
  • A
    license
    A
    quality
    D
    maintenance
    Enables IOTA group lookup, island search, DXCC mapping, nearby groups, and programme statistics through any MCP-compatible AI assistant.
    7
    GPL 3.0
  • A
    license
    A
    quality
    D
    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
    GPL 3.0