Skip to main content
Glama

Find Navaids

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

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

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. Changed1 schema field changed
    • changedOutput schema / properties / error / properties / data / properties / reason / description
      Previous value: -"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."New value: +"Machine-readable failure mode. Declared by this tool: `mode_conflict`: Coordinates are incomplete, both coordinate and airport modes were supplied, or neither mode was supplied. `unknown_code`: airport_code did not match any airport in any identifier space. Other values are possible when a failure originates below the handler."
  2. 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"
      +}
  3. 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"
      +]
  4. 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"
      -]
  5. 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
  6. First observed

TDQS

A4.6/5.0
Behavior4/5

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

Annotations already declare readOnly/idempotent/safe, but the description adds substantial behavior: nearest-first ranking with distance and bearing, totalCount semantics with capping, empty-list-vs-error for airport mode, and resolutionNote disambiguation. It is only slightly short of full behavioral disclosure (e.g. no explicit auth or rate-limit notes).

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-loads the two modes in the first sentence and keeps every clause informative. However, a large block of frequency-field semantics explains output values even though an output schema exists, which is slightly redundant for this tool's description.

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 six-parameter, mode-switching search tool, the description covers input modes, ranking, error conditions, disambiguation, and a data-authority caveat. Everything an agent needs to call it correctly is present, and the output schema carries return structure.

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?

With 100% schema coverage the baseline is 3, but the description clarifies cross-parameter behavior the schema can't fully convey: mode exclusivity consequences, radius_km being ignored in airport mode, and the meaning behind frequency/data fields. This is meaningful added meaning beyond per-field descriptions.

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 navigation aids) and enumerates the exact navaid types covered. It also distinguishes itself from sibling airport/runway tools by framing the two query modes, so an agent can pick it without opening the schema.

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?

Explicitly names the two entry paths (spatial via latitude+longitude with optional radius_km, relational via airport_code) and states the selection rule: exactly one mode, both or neither is a validation error. Airport-mode edge cases (empty list vs error) are also covered.

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.