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). frequencyKhz is the stored value for every navaid type (a VOR on 114.5 MHz reads 114500); frequencyMhz carries the VHF frequency of a VOR or VOR-DME and the paired VHF frequency of a DME, TACAN, or VORTAC, and is null for NDB and NDB-DME, which are tuned in kHz. Each navaid also carries its DME paired frequency, usage class, power, and actual and slaved magnetic variation. totalCount is the match count before limit; a capped result says so. 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. When airport_code is also a code of other airports, a resolutionNote says which airport it resolved to and names the others by ident — pass that ident to query one of them. 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
capNoThe limit that was applied. Present only when results were truncated.
modeNoWhich query mode was used.
errorNoPresent when the call failed. Absent on success.
shownNoNumber of navaids returned. Present only when results were truncated.
noticeNoGuidance when no navaids matched (empty radius, or airport found but unserved) or results were capped — how to widen or narrow.
navaidsNoMatching navaids. Nearest-first in coordinate mode; in airport-association order in airport mode.
truncatedNoPresent and true only when more navaids matched than were returned.
totalCountNoNavaids matched before the limit was applied: in-radius navaids passing the type filter (coordinate mode), or navaids associated with the airport passing the type filter (airport mode).
airportIdentNoIn airport mode, the resolved airport ident the navaids were matched against; null in coordinate mode.
resolutionNoteNoAirport mode, present only when airport_code is also a code of other airports: the identifier space that matched, why this airport won, and each other airport's ident, country, and code space.

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed16 schema fields changed
    • addedOutput schema / properties / cap
      Added value: +{
      +  "description": "The limit that was applied. Present only when results were truncated.",
      +  "type": "number"
      +}
    • changedOutput schema / properties / navaids / items / description
      Previous value: -"A navaid with its tuning frequency (kHz and MHz), type, position, and — in coordinate mode — distance and bearing from the query point."New value: +"A navaid with its frequency (kHz, plus MHz where the type has a VHF frequency), type, position, DME pairing, service volume, power, magnetic variation, and — in coordinate mode — distance and bearing from the query point."
    • changedOutput schema / properties / navaids / items / properties / dmeChannel / description
      Previous value: -"DME channel, or null."New value: +"DME channel (e.g. 115X), or null."
    • addedOutput schema / properties / navaids / items / properties / dmeFrequencyKhz
      Added value: +{
      +  "description": "Paired VHF frequency of the DME or TACAN component in kHz (divide by 1000 for MHz), on every type that has one — including NDB-DME, where it differs from frequencyKhz. Null when the navaid has no DME component recorded.",
      +  "type": [
      +    "number",
      +    "null"
      +  ]
      +}
    • changedOutput schema / properties / navaids / items / properties / frequencyKhz / description
      Previous value: -"Primary tuning frequency in kHz (VOR 114.5 MHz is stored as 114500 kHz), or null."New value: +"Frequency in kHz as stored upstream for every type. NDB and NDB-DME are tuned on this value directly; VOR and VOR-DME carry their VHF frequency and DME, TACAN, and VORTAC their paired VHF frequency (VOR 114.5 MHz is stored as 114500). Null when unknown."
    • changedOutput schema / properties / navaids / items / properties / frequencyMhz / description
      Previous value: -"Same frequency expressed in MHz for VHF navaids (kHz/1000), or null when unknown."New value: +"frequencyKhz / 1000 for VOR and VOR-DME (the VHF frequency) and for DME, TACAN, and VORTAC (the paired VHF frequency, which for some TACAN channels lies above 118 MHz). Null for NDB and NDB-DME, which are tuned in kHz, and when the frequency is unknown."
    • addedOutput schema / properties / navaids / items / properties / magneticVariationDeg
      Added value: +{
      +  "description": "Actual magnetic variation at the navaid site in degrees, positive east. Null when not recorded.",
      +  "type": [
      +    "number",
      +    "null"
      +  ]
      +}
    • addedOutput schema / properties / navaids / items / properties / power
      Added value: +{
      +  "description": "Transmitter power class as recorded upstream: HIGH, MEDIUM, LOW, or UNKNOWN. Null when not recorded.",
      +  "type": [
      +    "string",
      +    "null"
      +  ]
      +}
    • addedOutput schema / properties / navaids / items / properties / slavedVariationDeg
      Added value: +{
      +  "description": "Magnetic variation built into the radials of a VOR, VOR-DME, VORTAC, or TACAN in degrees, positive east — the reference radials are measured from, which can differ from magneticVariationDeg. Null when not recorded.",
      +  "type": [
      +    "number",
      +    "null"
      +  ]
      +}
    • addedOutput schema / properties / navaids / items / properties / usageType
      Added value: +{
      +  "description": "Service-volume class as recorded upstream: HI, LO, BOTH, TERMINAL, or RNAV. Null when not recorded.",
      +  "type": [
      +    "string",
      +    "null"
      +  ]
      +}
    • changedOutput schema / properties / navaids / items / required
      Previous value: -[
      -  "id",
      -  "ident",
      -  "name",
      -  "type",
      -  "frequencyKhz",
      -  "frequencyMhz",
      -  "latitudeDeg",
      -  "longitudeDeg",
      -  "elevationFt",
      -  "isoCountry",
      -  "dmeChannel",
      -  "associatedAirport",
      -  "distanceKm",
      -  "bearingDeg"
      -]New value: +[
      +  "id",
      +  "ident",
      +  "name",
      +  "type",
      +  "frequencyKhz",
      +  "frequencyMhz",
      +  "latitudeDeg",
      +  "longitudeDeg",
      +  "elevationFt",
      +  "isoCountry",
      +  "dmeChannel",
      +  "dmeFrequencyKhz",
      +  "usageType",
      +  "power",
      +  "magneticVariationDeg",
      +  "slavedVariationDeg",
      +  "associatedAirport",
      +  "distanceKm",
      +  "bearingDeg"
      +]
    • changedOutput schema / properties / notice / description
      Previous value: -"Guidance when no navaids matched (empty radius, or airport found but unserved)."New value: +"Guidance when no navaids matched (empty radius, or airport found but unserved) or results were capped — how to widen or narrow."
    • addedOutput schema / properties / resolutionNote
      Added value: +{
      +  "description": "Airport mode, present only when airport_code is also a code of other airports: the identifier space that matched, why this airport won, and each other airport's ident, country, and code space.",
      +  "type": "string"
      +}
    • addedOutput schema / properties / shown
      Added value: +{
      +  "description": "Number of navaids returned. Present only when results were truncated.",
      +  "type": "number"
      +}
    • changedOutput schema / properties / totalCount / description
      Previous value: -"Number of navaids returned."New value: +"Navaids matched before the limit was applied: in-radius navaids passing the type filter (coordinate mode), or navaids associated with the airport passing the type filter (airport mode)."
    • addedOutput schema / properties / truncated
      Added value: +{
      +  "description": "Present and true only when more navaids matched than were returned.",
      +  "type": "boolean"
      +}
  2. Changed18 schema fields changed
    • removedOutput schema / properties / airportIdent / anyOf
      Removed value: -[
      -  {
      -    "type": "string"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]
    • addedOutput schema / properties / airportIdent / type
      Added value: +[
      +  "string",
      +  "null"
      +]
    • removedOutput schema / properties / navaids / items / properties / associatedAirport / anyOf
      Removed value: -[
      -  {
      -    "type": "string"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]
    • addedOutput schema / properties / navaids / items / properties / associatedAirport / type
      Added value: +[
      +  "string",
      +  "null"
      +]
    • removedOutput schema / properties / navaids / items / properties / bearingDeg / anyOf
      Removed value: -[
      -  {
      -    "type": "number"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]
    • addedOutput schema / properties / navaids / items / properties / bearingDeg / type
      Added value: +[
      +  "number",
      +  "null"
      +]
    • removedOutput schema / properties / navaids / items / properties / distanceKm / anyOf
      Removed value: -[
      -  {
      -    "type": "number"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]
    • addedOutput schema / properties / navaids / items / properties / distanceKm / type
      Added value: +[
      +  "number",
      +  "null"
      +]
    • removedOutput schema / properties / navaids / items / properties / dmeChannel / anyOf
      Removed value: -[
      -  {
      -    "type": "string"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]
    • addedOutput schema / properties / navaids / items / properties / dmeChannel / type
      Added value: +[
      +  "string",
      +  "null"
      +]
    • removedOutput schema / properties / navaids / items / properties / elevationFt / anyOf
      Removed value: -[
      -  {
      -    "type": "number"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]
    • addedOutput schema / properties / navaids / items / properties / elevationFt / type
      Added value: +[
      +  "number",
      +  "null"
      +]
    • removedOutput schema / properties / navaids / items / properties / frequencyKhz / anyOf
      Removed value: -[
      -  {
      -    "type": "number"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]
    • addedOutput schema / properties / navaids / items / properties / frequencyKhz / type
      Added value: +[
      +  "number",
      +  "null"
      +]
    • removedOutput schema / properties / navaids / items / properties / frequencyMhz / anyOf
      Removed value: -[
      -  {
      -    "type": "number"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]
    • addedOutput schema / properties / navaids / items / properties / frequencyMhz / type
      Added value: +[
      +  "number",
      +  "null"
      +]
    • removedOutput schema / properties / navaids / items / properties / isoCountry / anyOf
      Removed value: -[
      -  {
      -    "type": "string"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]
    • addedOutput schema / properties / navaids / items / properties / isoCountry / type
      Added value: +[
      +  "string",
      +  "null"
      +]
  3. Changed6 schema fields changed
    • changedInput schema / $schema
      Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
    • addedInput schema / additionalProperties
      Added value: +false
    • changedOutput schema / $schema
      Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
    • addedOutput schema / anyOf
      Added value: +[
      +  {
      +    "not": {
      +      "required": [
      +        "error"
      +      ]
      +    },
      +    "required": [
      +      "mode",
      +      "airportIdent",
      +      "navaids",
      +      "totalCount"
      +    ]
      +  },
      +  {
      +    "required": [
      +      "error"
      +    ]
      +  }
      +]
    • addedOutput schema / properties / error
      Added value: +{
      +  "additionalProperties": {},
      +  "description": "Present when the call failed. Absent on success.",
      +  "properties": {
      +    "code": {
      +      "description": "JSON-RPC error code for this failure.",
      +      "maximum": 9007199254740991,
      +      "minimum": -9007199254740991,
      +      "type": "integer"
      +    },
      +    "data": {
      +      "additionalProperties": {},
      +      "properties": {
      +        "reason": {
      +          "description": "Machine-readable failure mode. Declared by this tool: `mode_conflict`: Both coordinate (latitude/longitude) and airport_code were supplied, or neither was. `unknown_code`: airport_code did not match any airport in any identifier space. Other values are possible when a failure originates below the handler.",
      +          "examples": [
      +            "mode_conflict",
      +            "unknown_code"
      +          ],
      +          "type": "string"
      +        },
      +        "recovery": {
      +          "additionalProperties": {},
      +          "description": "Actionable next step for the caller.",
      +          "properties": {
      +            "hint": {
      +              "type": "string"
      +            }
      +          },
      +          "required": [
      +            "hint"
      +          ],
      +          "type": "object"
      +        },
      +        "retryable": {
      +          "description": "Whether retrying may succeed.",
      +          "type": "boolean"
      +        }
      +      },
      +      "type": "object"
      +    },
      +    "message": {
      +      "description": "Human-readable description of what went wrong.",
      +      "type": "string"
      +    }
      +  },
      +  "required": [
      +    "code",
      +    "message"
      +  ],
      +  "type": "object"
      +}
    • removedOutput schema / required
      Removed value: -[
      -  "mode",
      -  "airportIdent",
      -  "navaids",
      -  "totalCount"
      -]
  4. Changed2 schema fields changed
    • changedInput schema / properties / airport_code / description
      Previous value: -"Airport mode: any airport code (IATA/ICAO/GPS/local/ident); returns the navaids serving that airport. Mutually exclusive with latitude/longitude."New value: +"Airport 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."
    • addedInput schema / properties / airport_code / minLength
      Added value: +1
  5. First observed

TDQS

A5/5.0
Behavior5/5

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

Annotations already declare readOnlyHint, openWorldHint, and idempotentHint, but the description adds substantial behavioral context: nearest-first ranking with distance and bearing, frequency unit semantics for each navaid type, totalCount/capping behavior, empty-list-vs-error distinction, and resolutionNote for ambiguous codes. No contradiction with annotations.

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

Conciseness5/5

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

The description is front-loaded with the core purpose and modes, then flows into field semantics and edge cases. Each sentence adds necessary information about result interpretation or validation; there is no filler. It is long but appropriately sized for the tool's complexity.

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?

Combined with the output schema and annotations, the description covers selection criteria, result semantics, error conditions, and data caveats (community-edited). It leaves little for an agent to infer, making it complete for correct invocation and interpretation.

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

Parameters5/5

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

Although the schema has 100% parameter description coverage, the description adds value by clarifying the mutually exclusive mode relationship, the default radius, case-insensitive/whitespace behavior for airport_code, and the ambiguity resolution behavior, which the schema alone doesn't convey.

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 'Find navigation aids' and enumerates the exact navaid types (VOR, VOR-DME, DME, NDB, etc.), making the resource specific. It also distinguishes the two call modes (spatial vs. relational), which sets it apart from sibling tools that handle airports, runways, or countries.

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

Usage Guidelines5/5

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

It explicitly states the two modes and the exclusion rule: 'Supply exactly one mode — both or neither is a validation error.' It also describes when to use each mode (coordinates or airport_code) and explains special cases like unknown airport_code error and ambiguity resolution, giving clear guidance on correct usage.

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.