Skip to main content
Glama

ourairports-mcp-server

ourairports_find_navaids
Read-onlyIdempotent

Find navigation aids (VOR, VOR-DME, DME, NDB, NDB-DME, TACAN, VORTAC) two ways: spatially, by passing latitude+longitude (with an optional radius_km); or relationally, by passing airport_code to get the navaids that serve that airport. Supply exactly one mode — both or neither is a validation error. Coordinate mode ranks nearest-first with distance (km) and bearing (degrees true). Frequencies are stored in kHz for every navaid type (a VOR on 114.5 MHz reads frequencyKhz 114500) and are also surfaced in MHz. Airport mode returns an empty list (not an error) when the airport exists but has no associated navaids; an unknown airport_code is an error. OurAirports is community-edited — not authoritative for flight operations.

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
typeNoRestrict to one navaid type: NDB, VOR-DME, VORTAC, TACAN, VOR, DME, or NDB-DME.
limitNoMaximum navaids to return (1–50). Defaults to OURAIRPORTS_DEFAULT_SEARCH_LIMIT (20).
latitudeNoCoordinate mode: query point latitude (−90 to 90). Provide with longitude; mutually exclusive with airport_code.
longitudeNoCoordinate mode: query point longitude (−180 to 180). Provide with latitude.
radius_kmNoCoordinate mode: search radius in kilometers (1–500). Defaults to 100. Ignored in airport mode.
airport_codeNoAirport mode: any airport code (IATA/ICAO/GPS/local/ident); returns the navaids serving that airport. Case-insensitive; surrounding whitespace is ignored. Mutually exclusive with latitude/longitude.

Output Schema

TableJSON Schema
NameRequiredDescriptionDefault
modeNoWhich query mode was used.
errorNoPresent when the call failed. Absent on success.
noticeNoGuidance when no navaids matched (empty radius, or airport found but unserved).
navaidsNoMatching navaids. Nearest-first in coordinate mode; in airport-association order in airport mode.
totalCountNoNumber of navaids returned.
airportIdentNoIn airport mode, the resolved airport ident the navaids were matched against; null in coordinate mode.

TDQS

A4.6/5.0
Behavior5/5

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

Annotations already declare readOnlyHint=true and idempotentHint=true, which the description does not contradict. The description goes beyond annotations by detailing mode-specific behavior: coordinate mode ranks nearest-first with distance and bearing, airport mode returns an empty list for existing airports without navaids but errors on unknown codes, frequency units are given in kHz and MHz, and it warns that the data is community-edited. This is rich, non-redundant 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?

The description is moderately long but each sentence contributes new information. It is well-structured by mode, leading with the core purpose and then detailing the two paths. The frequency unit explanation and data-quality caveat are useful but might be slightly tangential in the main flow; however, they are concise and front-loaded enough to remain helpful.

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 that an output schema exists (so return values are documented), the description covers all essential behavioral aspects: the two modes, validation rules, result ordering, error semantics, frequency units, and data authority caveat. Nothing critical is missing for an agent to correctly invoke the tool and interpret results.

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 schema already documents each parameter. The description adds meaningful semantics: the mode relationships and mutual exclusivity, defaults for radius_km and limit, and the interpretation of frequencyKhz. It clarifies how parameters interplay (e.g., radius_km ignored in airport mode), which is not explicit in the schema. This adds value beyond the structured definitions.

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 opens with a clear verb and resource: 'Find navigation aids' and enumerates the navaid types. It distinguishes this tool from sibling tools (airports, runways, countries) by focusing on navaids and offering two explicit search modes. The purpose is unambiguous and immediately recognizable.

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 explains the two mutually exclusive modes (spatial and airport-based) and the validation rule that exactly one mode must be supplied. It gives concrete context for each mode's parameters and behavior. However, it does not explicitly name alternative tools or state when not to use this tool, but given the sibling names and the specificity of navaids, the use case is clear enough.

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

Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.

TDQS

A4.7/5.0
Disambiguation5/5

Each tool targets a distinct operation: spatial lookup (find_airports, find_navaids), code-based retrieval (get_airport), free-text/faceted search (search_airports), runway attribute search (search_runways), and a reference table (list_countries). No two tools overlap in purpose; even the two 'search' tools are clearly differentiated by entity type.

Naming Consistency5/5

All tool names follow a strict 'ourairports_<verb>_<noun>' pattern with snake_case throughout. Verbs are distinct and indicative (find, get, list, search), and nouns clearly identify the resource (airports, navaids, countries, runways). The pattern is uniform and predictable.

Tool Count5/5

The server exposes exactly 6 tools, which is well-scoped for its domain. Each tool addresses a distinct core need: spatial proximity, code resolution, text/facet search, runway attributes, navaid lookup, and country/region reference. No unnecessary tools, and the count is within the ideal 3-15 range.

Completeness5/5

The surface covers the full read-only lifecycle for aviation data: find by location, resolve by code, search by name/facets, inspect runways, and retrieve navaids. The inclusion of a country lookup table for valid filters and clear cross-references (e.g., search_airports → get_airport) demonstrates thoughtful coverage. Since the dataset is static, CRUD operations aren't expected, and no obvious gaps exist.