Koskamo

ourairports-mcp-server

An MCP server providing offline access to the public-domain OurAirports dataset. It allows agents to resolve airport codes, search for airports and runways by various facets, find nearest airports or navaids by coordinate, and retrieve detailed records including runways and radio frequencies.

Endpoint and access

No sign-in to connect and list tools. Individual tools may still need a vendor account, credentials, or permissions; check the documented prerequisites.

ourairports-mcp-server logo, by cyanheadsCommunity listingStreamable HTTPNo sign-inEndpoint checked 2026-11-07Published by cyanheads
MCP endpoint (Streamable HTTP)
https://ourairports.caseyjhand.com/mcp
Vendor documentation

What its tools do

6 tools, grouped by the hints the server advertises. Hints are self-declared, not verified behavior.

6 of 6 have a description · 6 of 6 declare behavior hints · 6 of 6 with parameters document them all

Checks and signals

Each line is separate evidence, not a trust score.

  • Passed Endpoint answered the live check ·
  • Availability 1 of 1 checks passed in 30 days

What you can do with it

  • Search airports by name, country, or type
  • Find nearest airport to a coordinate
  • Look up runways and navaids
  • Resolve airport codes (IATA/ICAO)

Source and maintenance

Community listingRegistry 0.2.6
Maintenance checked

Protocol and capabilities

Server
ourairports-mcp-server 0.2.6
MCP protocol negotiated in check
2025-11-25
Tools
6 advertised
Resources
0 advertised
Resource templates
1 advertised
Prompts
0 advertised
Server-advertised capabilities
{
  "tools": {
    "listChanged": true
  },
  "logging": {},
  "prompts": {
    "listChanged": true
  },
  "resources": {
    "subscribe": true,
    "listChanged": true
  }
}

Server-provided instructions

Untrusted server output shown for inspection. It is not Koskamo guidance and is excluded from knowledge search.

Static, offline aviation reference data (airports, runways, navaids, radio frequencies) from the public-domain OurAirports dataset — no API key, no rate limit, no upstream. Resolve any airport by a single `code` (IATA/ICAO/GPS/local/ident) with ourairports_get_airport; the `airport://{code}` resource mirrors it. Search by name or facets with ourairports_search_airports (closed airports excluded by default). Ground a coordinate in the nearest airports with ourairports_find_airports (no geocoding — resolve place names to lat/lon upstream first). Navaid frequencies are stored in kHz for every type; airport frequencies are in MHz. The data is community-edited and as fresh as the last build — not authoritative for real flight operations.

Tools

6 advertised

ourairports_search_airports — Search Airports
Advertised by the server during the last successful anonymous check.
Advertised read-only

Search the bundled OurAirports corpus by free-text (name / municipality / keywords) and/or facets (country, region, type). Every query token must match (word order and partial words are handled). Returns ranked airport summaries — operational and larger airports first — each with its full code set and coordinates, ready to chain into ourairports_get_airport. Closed airports are excluded unless include_closed is set. Use ourairports_list_countries for valid country/region codes. For "nearest airport to a coordinate" use ourairports_find_airports instead. OurAirports is community-edited — not authoritative for flight operations.

ourairports_search_airports input schema
{
  "type": "object",
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "properties": {
    "type": {
      "enum": [
        "large_airport",
        "medium_airport",
        "small_airport",
        "heliport",
        "seaplane_base",
        "balloonport",
        "closed"
      ],
      "type": "string",
      "description": "Restrict to one airport type: large_airport, medium_airport, small_airport, heliport, seaplane_base, balloonport, or closed."
    },
    "limit": {
      "type": "integer",
      "maximum": 100,
      "minimum": 1,
      "description": "Maximum airports to return (1–100). Defaults to OURAIRPORTS_DEFAULT_SEARCH_LIMIT (20)."
    },
    "query": {
      "type": "string",
      "description": "Free-text search over airport name, municipality, and keywords. Tokens are AND-matched. Omit to browse purely by facets."
    },
    "region": {
      "anyOf": [
        {
          "type": "string",
          "const": ""
        },
        {
          "type": "string",
          "pattern": "^[A-Za-z]{2}(-[A-Za-z0-9]{1,3}){1,2}$",
          "description": "Region code with one or two segments."
        }
      ],
      "description": "Region code from ourairports_list_countries with include_regions (e.g. US-WA or KS-U-A). Case-insensitive; surrounding whitespace is ignored. Literal empty string is unset; whitespace-only is invalid."
    },
    "country": {
      "anyOf": [
        {
          "type": "string",
          "const": ""
        },
        {
          "type": "string",
          "pattern": "^[A-Za-z]{2}$",
          "description": "Two-letter country code."
        }
      ],
      "description": "Country code from ourairports_list_countries (e.g. US). Case-insensitive; surrounding whitespace is ignored. Literal empty string is unset; whitespace-only is invalid."
    },
    "include_closed": {
      "type": "boolean",
      "default": false,
      "description": "Include airports of type \"closed\". Off by default — closed airports pollute the live-flight grounding use case."
    }
  },
  "additionalProperties": false
}
ourairports_search_airports output schema
{
  "type": "object",
  "anyOf": [
    {
      "not": {
        "required": [
          "error"
        ]
      },
      "required": [
        "airports",
        "totalCount"
      ]
    },
    {
      "required": [
        "error"
      ]
    }
  ],
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "properties": {
    "cap": {
      "type": "number",
      "description": "The limit that was applied. Present only when results were truncated."
    },
    "error": {
      "type": "object",
      "required": [
        "code",
        "message"
      ],
      "properties": {
        "code": {
          "type": "integer",
          "maximum": 9007199254740991,
          "minimum": -9007199254740991,
          "description": "JSON-RPC error code for this failure."
        },
        "data": {
          "type": "object",
          "properties": {
            "reason": {
              "type": "string",
              "examples": [
                "unknown_country",
                "unknown_region"
              ],
              "description": "Machine-readable failure mode. Declared by this tool: `unknown_country`: The country code is absent from the bundled country table. `unknown_region`: The region code is absent from the bundled region table. Other values are possible when a failure originates below the handler."
            },
            "recovery": {
              "type": "object",
              "required": [
                "hint"
              ],
              "properties": {
                "hint": {
                  "type": "string"
                }
              },
              "description": "Actionable next step for the caller.",
              "additionalProperties": {}
            },
            "retryable": {
              "type": "boolean",
              "description": "Whether retrying may succeed."
            }
          },
          "additionalProperties": {}
        },
        "message": {
          "type": "string",
          "description": "Human-readable description of what went wrong."
        }
      },
      "description": "Present when the call failed. Absent on success.",
      "additionalProperties": {}
    },
    "shown": {
      "type": "number",
      "description": "Number of airports returned. Present only when results were truncated."
    },
    "notice": {
      "type": "string",
      "description": "Guidance when nothing matched or results were capped — how to broaden or narrow."
    },
    "airports": {
      "type": "array",
      "items": {
        "type": "object",
        "required": [
          "id",
          "ident",
          "type",
          "name",
          "latitudeDeg",
          "longitudeDeg",
          "elevationFt",
          "continent",
          "isoCountry",
          "countryName",
          "isoRegion",
          "regionName",
          "municipality",
          "scheduledService",
          "icaoCode",
          "iataCode",
          "gpsCode",
          "localCode"
        ],
        "properties": {
          "id": {
            "type": "number",
            "description": "OurAirports internal integer id (the join key for runways/frequencies)."
          },
          "name": {
            "type": "string",
            "description": "Airport name."
          },
          "type": {
            "type": "string",
            "description": "Airport type: large_airport, medium_airport, small_airport, heliport, seaplane_base, balloonport, or closed."
          },
          "ident": {
            "type": "string",
            "description": "OurAirports universal identifier — globally unique; often equals the ICAO or GPS code."
          },
          "gpsCode": {
            "type": [
              "string",
              "null"
            ],
            "description": "GPS code, or null."
          },
          "iataCode": {
            "type": [
              "string",
              "null"
            ],
            "description": "3-letter IATA code, or null when the airport has none (~89% of fields)."
          },
          "icaoCode": {
            "type": [
              "string",
              "null"
            ],
            "description": "4-letter ICAO code, or null when the airport has none (~88% of fields)."
          },
          "continent": {
            "type": [
              "string",
              "null"
            ],
            "description": "Two-letter continent code (AF, AN, AS, EU, NA, OC, SA), or null."
          },
          "isoRegion": {
            "type": [
              "string",
              "null"
            ],
            "description": "ISO 3166-2 region code (e.g. US-WA), or null."
          },
          "localCode": {
            "type": [
              "string",
              "null"
            ],
            "description": "National/local code (e.g. FAA LID), or null."
          },
          "isoCountry": {
            "type": [
              "string",
              "null"
            ],
            "description": "ISO 3166-1 alpha-2 country code, or null."
          },
          "regionName": {
            "type": [
              "string",
              "null"
            ],
            "description": "Resolved region name, or null when the region code is unknown."
          },
          "countryName": {
            "type": [
              "string",
              "null"
            ],
            "description": "Resolved country name, or null when the country code is unknown."
          },
          "elevationFt": {
            "type": [
              "number",
              "null"
            ],
            "description": "Field elevation in feet, or null when unknown."
          },
          "latitudeDeg": {
            "type": "number",
            "description": "Latitude in decimal degrees (WGS84)."
          },
          "longitudeDeg": {
            "type": "number",
            "description": "Longitude in decimal degrees (WGS84)."
          },
          "municipality": {
            "type": [
              "string",
              "null"
            ],
            "description": "Served municipality, or null."
          },
          "scheduledService": {
            "type": "boolean",
            "description": "True when the airport has scheduled airline service."
          }
        },
        "description": "An airport summary with its full (sparse) code set and coordinates.",
        "additionalProperties": false
      },
      "description": "Matching airports, ranked best-first. Codes the airport lacks are null."
    },
    "truncated": {
      "type": "boolean",
      "description": "Present and true only when more airports matched than were returned."
    },
    "totalCount": {
      "type": "number",
      "description": "Total airports matched before the limit was applied."
    }
  },
  "additionalProperties": false
}
ourairports_search_airports annotations
{
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true
}
ourairports_search_runways — Search Runways
Advertised by the server during the last successful anonymous check.
Advertised read-only

Search runways across the whole bundled OurAirports corpus by attribute, joined back to their airports — the cross-airport counterpart to ourairports_get_airport (which returns runways for one already-known airport). Filter by airport facets (country, region, type) and runway facets (surface, min_length_ft, min_width_ft, lighted). Returns one flat {airport, runway} row per matching runway, so an airport with three matching runways contributes three rows. `surface` is a case-insensitive substring match against the raw upstream surface string, not an exact code — the runway surface must CONTAIN your text, so a shorter fragment matches more variants (no controlled vocabulary: "asp" matches ASP, ASPH, and Asphalt). Lengths are the full runway surface, including displaced thresholds and overruns — not usable takeoff or landing distance; each runway also reports its displaced threshold per end. A runway whose length or width is unknown is excluded when the matching min_*_ft filter is set — the data can never confirm it meets the threshold. Closed airports and closed runways are both excluded unless their include_* flag is set. Use ourairports_list_countries for valid country/region codes. OurAirports is community-edited — not authoritative for flight operations.

ourairports_search_runways input schema
{
  "type": "object",
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "properties": {
    "type": {
      "enum": [
        "large_airport",
        "medium_airport",
        "small_airport",
        "heliport",
        "seaplane_base",
        "balloonport",
        "closed"
      ],
      "type": "string",
      "description": "Restrict to runways at airports of one type: large_airport, medium_airport, small_airport, heliport, seaplane_base, balloonport, or closed."
    },
    "limit": {
      "type": "integer",
      "maximum": 100,
      "minimum": 1,
      "description": "Maximum runway rows to return (1–100). Defaults to OURAIRPORTS_DEFAULT_SEARCH_LIMIT (20)."
    },
    "region": {
      "anyOf": [
        {
          "type": "string",
          "const": ""
        },
        {
          "type": "string",
          "pattern": "^[A-Za-z]{2}(-[A-Za-z0-9]{1,3}){1,2}$",
          "description": "Region code with one or two segments."
        }
      ],
      "description": "Region code from ourairports_list_countries with include_regions (e.g. US-WA or KS-U-A). Case-insensitive; surrounding whitespace is ignored. Literal empty string is unset; whitespace-only is invalid."
    },
    "country": {
      "anyOf": [
        {
          "type": "string",
          "const": ""
        },
        {
          "type": "string",
          "pattern": "^[A-Za-z]{2}$",
          "description": "Two-letter country code."
        }
      ],
      "description": "Country code from ourairports_list_countries (e.g. US). Case-insensitive; surrounding whitespace is ignored. Literal empty string is unset; whitespace-only is invalid."
    },
    "lighted": {
      "type": "boolean",
      "description": "Filter by runway lighting: true for lighted runways only, false for unlighted only. Omit to include both."
    },
    "surface": {
      "type": "string",
      "minLength": 1,
      "description": "Surface filter — case-insensitive substring match against the raw upstream surface string (free text, no controlled vocabulary; ~654 distinct values). Match the literal text as recorded: \"asp\" matches ASP/ASPH/Asphalt/ASPH-G, \"con\" matches CON/Concrete, \"turf\" or \"grs\" for grass strips. A shorter fragment matches more variants; there is no enum or reference tool for surfaces."
    },
    "min_width_ft": {
      "type": "number",
      "minimum": 0,
      "description": "Minimum runway width in feet (inclusive). Runways with an unknown width are excluded when this is set, never assumed to pass."
    },
    "min_length_ft": {
      "type": "number",
      "minimum": 0,
      "description": "Minimum length of the full runway surface in feet (inclusive), matched against lengthFt — which includes displaced thresholds and overruns, so this is not a usable-distance filter. Runways with an unknown length are excluded when this is set, never assumed to pass."
    },
    "include_closed_runways": {
      "type": "boolean",
      "default": false,
      "description": "Include runways flagged closed. Off by default."
    },
    "include_closed_airports": {
      "type": "boolean",
      "default": false,
      "description": "Include runways at airports of type \"closed\". Off by default."
    }
  },
  "additionalProperties": false
}
ourairports_search_runways output schema
{
  "type": "object",
  "anyOf": [
    {
      "not": {
        "required": [
          "error"
        ]
      },
      "required": [
        "runways",
        "totalCount"
      ]
    },
    {
      "required": [
        "error"
      ]
    }
  ],
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "properties": {
    "cap": {
      "type": "number",
      "description": "The limit that was applied. Present only when results were truncated."
    },
    "error": {
      "type": "object",
      "required": [
        "code",
        "message"
      ],
      "properties": {
        "code": {
          "type": "integer",
          "maximum": 9007199254740991,
          "minimum": -9007199254740991,
          "description": "JSON-RPC error code for this failure."
        },
        "data": {
          "type": "object",
          "properties": {
            "reason": {
              "type": "string",
              "examples": [
                "unknown_country",
                "unknown_region"
              ],
              "description": "Machine-readable failure mode. Declared by this tool: `unknown_country`: The country code is absent from the bundled country table. `unknown_region`: The region code is absent from the bundled region table. Other values are possible when a failure originates below the handler."
            },
            "recovery": {
              "type": "object",
              "required": [
                "hint"
              ],
              "properties": {
                "hint": {
                  "type": "string"
                }
              },
              "description": "Actionable next step for the caller.",
              "additionalProperties": {}
            },
            "retryable": {
              "type": "boolean",
              "description": "Whether retrying may succeed."
            }
          },
          "additionalProperties": {}
        },
        "message": {
          "type": "string",
          "description": "Human-readable description of what went wrong."
        }
      },
      "description": "Present when the call failed. Absent on success.",
      "additionalProperties": {}
    },
    "shown": {
      "type": "number",
      "description": "Number of runway rows returned. Present only when results were truncated."
    },
    "notice": {
      "type": "string",
      "description": "Guidance when nothing matched or results were capped — how to broaden or narrow."
    },
    "runways": {
      "type": "array",
      "items": {
        "type": "object",
        "required": [
          "airport",
          "runway"
        ],
        "properties": {
          "runway": {
            "type": "object",
            "required": [
              "id",
              "lengthFt",
              "widthFt",
              "surface",
              "lighted",
              "closed",
              "leIdent",
              "leHeadingDegT",
              "leDisplacedThresholdFt",
              "heIdent",
              "heHeadingDegT",
              "heDisplacedThresholdFt"
            ],
            "properties": {
              "id": {
                "type": "number",
                "description": "OurAirports runway id."
              },
              "closed": {
                "type": "boolean",
                "description": "True when the runway is closed."
              },
              "heIdent": {
                "type": [
                  "string",
                  "null"
                ],
                "description": "High-end runway designator (e.g. 34R), or null."
              },
              "leIdent": {
                "type": [
                  "string",
                  "null"
                ],
                "description": "Low-end runway designator (e.g. 16L), or null."
              },
              "lighted": {
                "type": "boolean",
                "description": "True when the runway is lighted."
              },
              "surface": {
                "type": [
                  "string",
                  "null"
                ],
                "description": "Surface material as recorded upstream (free text, e.g. ASP, CON, GRS), or null."
              },
              "widthFt": {
                "type": [
                  "number",
                  "null"
                ],
                "description": "Runway width in feet, or null when unknown."
              },
              "lengthFt": {
                "type": [
                  "number",
                  "null"
                ],
                "description": "Length of the full runway surface in feet, including displaced thresholds and overrun areas — not the usable takeoff or landing distance. Null when unknown."
              },
              "heHeadingDegT": {
                "type": [
                  "number",
                  "null"
                ],
                "description": "High-end true heading in degrees, or null."
              },
              "leHeadingDegT": {
                "type": [
                  "number",
                  "null"
                ],
                "description": "Low-end true heading in degrees, or null."
              },
              "heDisplacedThresholdFt": {
                "type": [
                  "number",
                  "null"
                ],
                "description": "Length of the displaced threshold at the high end (heIdent) in feet — part of lengthFt. Null when none is recorded."
              },
              "leDisplacedThresholdFt": {
                "type": [
                  "number",
                  "null"
                ],
                "description": "Length of the displaced threshold at the low end (leIdent) in feet — part of lengthFt. Null when none is recorded."
              }
            },
            "description": "The matching runway — full-surface dimensions, surface, lighting, and per-end designators, headings, and displaced thresholds.",
            "additionalProperties": false
          },
          "airport": {
            "type": "object",
            "required": [
              "id",
              "ident",
              "type",
              "name",
              "latitudeDeg",
              "longitudeDeg",
              "elevationFt",
              "continent",
              "isoCountry",
              "countryName",
              "isoRegion",
              "regionName",
              "municipality",
              "scheduledService",
              "icaoCode",
              "iataCode",
              "gpsCode",
              "localCode"
            ],
            "properties": {
              "id": {
                "type": "number",
                "description": "OurAirports internal integer id (the join key for runways/frequencies)."
              },
              "name": {
                "type": "string",
                "description": "Airport name."
              },
              "type": {
                "type": "string",
                "description": "Airport type: large_airport, medium_airport, small_airport, heliport, seaplane_base, balloonport, or closed."
              },
              "ident": {
                "type": "string",
                "description": "OurAirports universal identifier — globally unique; often equals the ICAO or GPS code."
              },
              "gpsCode": {
                "type": [
                  "string",
                  "null"
                ],
                "description": "GPS code, or null."
              },
              "iataCode": {
                "type": [
                  "string",
                  "null"
                ],
                "description": "3-letter IATA code, or null when the airport has none (~89% of fields)."
              },
              "icaoCode": {
                "type": [
                  "string",
                  "null"
                ],
                "description": "4-letter ICAO code, or null when the airport has none (~88% of fields)."
              },
              "continent": {
                "type": [
                  "string",
                  "null"
                ],
                "description": "Two-letter continent code (AF, AN, AS, EU, NA, OC, SA), or null."
              },
              "isoRegion": {
                "type": [
                  "string",
                  "null"
                ],
                "description": "ISO 3166-2 region code (e.g. US-WA), or null."
              },
              "localCode": {
                "type": [
                  "string",
                  "null"
                ],
                "description": "National/local code (e.g. FAA LID), or null."
              },
              "isoCountry": {
                "type": [
                  "string",
                  "null"
                ],
                "description": "ISO 3166-1 alpha-2 country code, or null."
              },
              "regionName": {
                "type": [
                  "string",
                  "null"
                ],
                "description": "Resolved region name, or null when the region code is unknown."
              },
              "countryName": {
                "type": [
                  "string",
                  "null"
                ],
                "description": "Resolved country name, or null when the country code is unknown."
              },
              "elevationFt": {
                "type": [
                  "number",
                  "null"
                ],
                "description": "Field elevation in feet, or null when unknown."
              },
              "latitudeDeg": {
                "type": "number",
                "description": "Latitude in decimal degrees (WGS84)."
              },
              "longitudeDeg": {
                "type": "number",
                "description": "Longitude in decimal degrees (WGS84)."
              },
              "municipality": {
                "type": [
                  "string",
                  "null"
                ],
                "description": "Served municipality, or null."
              },
              "scheduledService": {
                "type": "boolean",
                "description": "True when the airport has scheduled airline service."
              }
            },
            "description": "The airport this runway belongs to. Codes the airport lacks are null.",
            "additionalProperties": false
          }
        },
        "description": "A runway paired with its airport (one row per matching runway).",
        "additionalProperties": false
      },
      "description": "Matching runways, each paired with its airport. One row per runway — an airport with N matching runways contributes N rows."
    },
    "truncated": {
      "type": "boolean",
      "description": "Present and true only when more runways matched than were returned."
    },
    "totalCount": {
      "type": "number",
      "description": "Total matching runways before the limit was applied."
    }
  },
  "additionalProperties": false
}
ourairports_search_runways annotations
{
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true
}
ourairports_get_airport — Get Airport
Advertised by the server during the last successful anonymous check.
Advertised read-only

Fetch the full record for one airport resolved by ANY code — IATA (SEA), ICAO (KSEA), GPS, national/local, or the OurAirports ident — with its runways and radio frequencies inline. The single `code` param is resolved case-insensitively across all five identifier spaces (priority: ident, then ICAO, IATA, GPS, local). The response always echoes the airport's complete code set and a resolutionNote naming which space matched; when other airports carry the same code, the note names each one (ident, country, code space) and why this airport won, so a wrong resolution is self-correcting — pass the other airport's ident to fetch it. Absent codes are reported as null, never an error. Runway lengths are the full runway surface (displaced thresholds and overruns included), not usable takeoff or landing distance. Closed airports always resolve. OurAirports is community-edited — not authoritative for flight operations.

ourairports_get_airport input schema
{
  "type": "object",
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "required": [
    "code"
  ],
  "properties": {
    "code": {
      "type": "string",
      "minLength": 1,
      "description": "Any airport code: IATA (SEA), ICAO (KSEA), GPS code, national/local code, or the OurAirports ident. Case-insensitive; surrounding whitespace is ignored."
    },
    "include": {
      "type": "array",
      "items": {
        "enum": [
          "runways",
          "frequencies"
        ],
        "type": "string"
      },
      "default": [
        "runways",
        "frequencies"
      ],
      "description": "Which related records to include inline. Defaults to both. Pass a subset to trim the response."
    }
  },
  "additionalProperties": false
}
ourairports_get_airport output schema
{
  "type": "object",
  "anyOf": [
    {
      "not": {
        "required": [
          "error"
        ]
      },
      "required": [
        "airport",
        "resolvedVia",
        "resolutionNote",
        "included",
        "runways",
        "frequencies"
      ]
    },
    {
      "required": [
        "error"
      ]
    }
  ],
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "properties": {
    "error": {
      "type": "object",
      "required": [
        "code",
        "message"
      ],
      "properties": {
        "code": {
          "type": "integer",
          "maximum": 9007199254740991,
          "minimum": -9007199254740991,
          "description": "JSON-RPC error code for this failure."
        },
        "data": {
          "type": "object",
          "properties": {
            "reason": {
              "type": "string",
              "examples": [
                "unknown_code"
              ],
              "description": "Machine-readable failure mode. Declared by this tool: `unknown_code`: No airport matched the supplied code in any identifier space (IATA/ICAO/GPS/local/ident). Other values are possible when a failure originates below the handler."
            },
            "recovery": {
              "type": "object",
              "required": [
                "hint"
              ],
              "properties": {
                "hint": {
                  "type": "string"
                }
              },
              "description": "Actionable next step for the caller.",
              "additionalProperties": {}
            },
            "retryable": {
              "type": "boolean",
              "description": "Whether retrying may succeed."
            }
          },
          "additionalProperties": {}
        },
        "message": {
          "type": "string",
          "description": "Human-readable description of what went wrong."
        }
      },
      "description": "Present when the call failed. Absent on success.",
      "additionalProperties": {}
    },
    "airport": {
      "type": "object",
      "required": [
        "id",
        "ident",
        "type",
        "name",
        "latitudeDeg",
        "longitudeDeg",
        "elevationFt",
        "continent",
        "isoCountry",
        "countryName",
        "isoRegion",
        "regionName",
        "municipality",
        "scheduledService",
        "icaoCode",
        "iataCode",
        "gpsCode",
        "localCode"
      ],
      "properties": {
        "id": {
          "type": "number",
          "description": "OurAirports internal integer id (the join key for runways/frequencies)."
        },
        "name": {
          "type": "string",
          "description": "Airport name."
        },
        "type": {
          "type": "string",
          "description": "Airport type: large_airport, medium_airport, small_airport, heliport, seaplane_base, balloonport, or closed."
        },
        "ident": {
          "type": "string",
          "description": "OurAirports universal identifier — globally unique; often equals the ICAO or GPS code."
        },
        "gpsCode": {
          "type": [
            "string",
            "null"
          ],
          "description": "GPS code, or null."
        },
        "iataCode": {
          "type": [
            "string",
            "null"
          ],
          "description": "3-letter IATA code, or null when the airport has none (~89% of fields)."
        },
        "icaoCode": {
          "type": [
            "string",
            "null"
          ],
          "description": "4-letter ICAO code, or null when the airport has none (~88% of fields)."
        },
        "continent": {
          "type": [
            "string",
            "null"
          ],
          "description": "Two-letter continent code (AF, AN, AS, EU, NA, OC, SA), or null."
        },
        "isoRegion": {
          "type": [
            "string",
            "null"
          ],
          "description": "ISO 3166-2 region code (e.g. US-WA), or null."
        },
        "localCode": {
          "type": [
            "string",
            "null"
          ],
          "description": "National/local code (e.g. FAA LID), or null."
        },
        "isoCountry": {
          "type": [
            "string",
            "null"
          ],
          "description": "ISO 3166-1 alpha-2 country code, or null."
        },
        "regionName": {
          "type": [
            "string",
            "null"
          ],
          "description": "Resolved region name, or null when the region code is unknown."
        },
        "countryName": {
          "type": [
            "string",
            "null"
          ],
          "description": "Resolved country name, or null when the country code is unknown."
        },
        "elevationFt": {
          "type": [
            "number",
            "null"
          ],
          "description": "Field elevation in feet, or null when unknown."
        },
        "latitudeDeg": {
          "type": "number",
          "description": "Latitude in decimal degrees (WGS84)."
        },
        "longitudeDeg": {
          "type": "number",
          "description": "Longitude in decimal degrees (WGS84)."
        },
        "municipality": {
          "type": [
            "string",
            "null"
          ],
          "description": "Served municipality, or null."
        },
        "scheduledService": {
          "type": "boolean",
          "description": "True when the airport has scheduled airline service."
        }
      },
      "description": "The resolved airport record. Codes the airport lacks are null.",
      "additionalProperties": false
    },
    "runways": {
      "type": "array",
      "items": {
        "type": "object",
        "required": [
          "id",
          "lengthFt",
          "widthFt",
          "surface",
          "lighted",
          "closed",
          "leIdent",
          "leHeadingDegT",
          "leDisplacedThresholdFt",
          "heIdent",
          "heHeadingDegT",
          "heDisplacedThresholdFt"
        ],
        "properties": {
          "id": {
            "type": "number",
            "description": "OurAirports runway id."
          },
          "closed": {
            "type": "boolean",
            "description": "True when the runway is closed."
          },
          "heIdent": {
            "type": [
              "string",
              "null"
            ],
            "description": "High-end runway designator (e.g. 34R), or null."
          },
          "leIdent": {
            "type": [
              "string",
              "null"
            ],
            "description": "Low-end runway designator (e.g. 16L), or null."
          },
          "lighted": {
            "type": "boolean",
            "description": "True when the runway is lighted."
          },
          "surface": {
            "type": [
              "string",
              "null"
            ],
            "description": "Surface material as recorded upstream (free text, e.g. ASP, CON, GRS), or null."
          },
          "widthFt": {
            "type": [
              "number",
              "null"
            ],
            "description": "Runway width in feet, or null when unknown."
          },
          "lengthFt": {
            "type": [
              "number",
              "null"
            ],
            "description": "Length of the full runway surface in feet, including displaced thresholds and overrun areas — not the usable takeoff or landing distance. Null when unknown."
          },
          "heHeadingDegT": {
            "type": [
              "number",
              "null"
            ],
            "description": "High-end true heading in degrees, or null."
          },
          "leHeadingDegT": {
            "type": [
              "number",
              "null"
            ],
            "description": "Low-end true heading in degrees, or null."
          },
          "heDisplacedThresholdFt": {
            "type": [
              "number",
              "null"
            ],
            "description": "Length of the displaced threshold at the high end (heIdent) in feet — part of lengthFt. Null when none is recorded."
          },
          "leDisplacedThresholdFt": {
            "type": [
              "number",
              "null"
            ],
            "description": "Length of the displaced threshold at the low end (leIdent) in feet — part of lengthFt. Null when none is recorded."
          }
        },
        "description": "A runway with full-surface dimensions, surface, lighting, and per-end designators, headings, and displaced thresholds.",
        "additionalProperties": false
      },
      "description": "Runways for the airport. Empty when the airport has none OR when `runways` was not in `include` — check `included` to tell which."
    },
    "included": {
      "type": "array",
      "items": {
        "enum": [
          "runways",
          "frequencies"
        ],
        "type": "string"
      },
      "description": "Which related-record sets this response carries, echoing the effective `include` selection. A relation NOT listed here was omitted by `include` (its array is empty for that reason); a listed relation with an empty array genuinely has no records."
    },
    "frequencies": {
      "type": "array",
      "items": {
        "type": "object",
        "required": [
          "id",
          "type",
          "description",
          "frequencyMhz"
        ],
        "properties": {
          "id": {
            "type": "number",
            "description": "OurAirports frequency id."
          },
          "type": {
            "type": "string",
            "description": "Frequency type/role (e.g. TWR, GND, ATIS, APP) as recorded upstream."
          },
          "description": {
            "type": [
              "string",
              "null"
            ],
            "description": "Human-readable description, or null."
          },
          "frequencyMhz": {
            "type": [
              "number",
              "null"
            ],
            "description": "Radio frequency in MHz (e.g. 122.9), or null when unknown."
          }
        },
        "description": "An airport radio frequency (tower, ground, ATIS, etc.) in MHz.",
        "additionalProperties": false
      },
      "description": "Radio frequencies in MHz. Empty when the airport has none OR when `frequencies` was not in `include` — check `included` to tell which."
    },
    "resolvedVia": {
      "type": "string",
      "description": "Which identifier space the code matched: ident, icao_code, iata_code, gps_code, or local_code."
    },
    "resolutionNote": {
      "type": "string",
      "description": "How the code resolved: the identifier space that matched and, when other airports carry the same code, why this one won (resolution priority or dataset row order) and each other airport's ident, country, and code space — pass that ident to fetch it."
    }
  },
  "additionalProperties": false
}
ourairports_get_airport annotations
{
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true
}
ourairports_find_airports — Find Airports
Advertised by the server during the last successful anonymous check.
Advertised read-only

Find airports within a radius of a latitude/longitude, ranked nearest-first by great-circle distance, each with its distance (km) and bearing (degrees true) from the query point. The grounding tool for "nearest airport to here" — pair it with a live aviation server to fetch weather or positions for the result. Takes a coordinate only: no geocoding, so resolve place names to lat/lon upstream first (e.g. an OpenStreetMap or Open-Meteo geocode tool). Closed airports are excluded unless include_closed is set. totalCount is the in-radius match count before limit; a capped result says so. OurAirports is community-edited — not authoritative for flight operations.

ourairports_find_airports input schema
{
  "type": "object",
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "required": [
    "latitude",
    "longitude"
  ],
  "properties": {
    "type": {
      "enum": [
        "large_airport",
        "medium_airport",
        "small_airport",
        "heliport",
        "seaplane_base",
        "balloonport",
        "closed"
      ],
      "type": "string",
      "description": "Restrict to one airport type (e.g. large_airport for major fields only)."
    },
    "limit": {
      "type": "integer",
      "maximum": 50,
      "minimum": 1,
      "description": "Maximum airports to return (1–50). Defaults to OURAIRPORTS_DEFAULT_SEARCH_LIMIT (20)."
    },
    "latitude": {
      "type": "number",
      "maximum": 90,
      "minimum": -90,
      "description": "Query point latitude in decimal degrees (WGS84), −90 to 90."
    },
    "longitude": {
      "type": "number",
      "maximum": 180,
      "minimum": -180,
      "description": "Query point longitude in decimal degrees (WGS84), −180 to 180."
    },
    "radius_km": {
      "type": "number",
      "default": 100,
      "maximum": 500,
      "minimum": 1,
      "description": "Search radius in kilometers (1–500). Defaults to 100."
    },
    "include_closed": {
      "type": "boolean",
      "default": false,
      "description": "Include airports of type \"closed\". Off by default."
    }
  },
  "additionalProperties": false
}
ourairports_find_airports output schema
{
  "type": "object",
  "anyOf": [
    {
      "not": {
        "required": [
          "error"
        ]
      },
      "required": [
        "airports",
        "totalCount"
      ]
    },
    {
      "required": [
        "error"
      ]
    }
  ],
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "properties": {
    "cap": {
      "type": "number",
      "description": "The limit that was applied. Present only when results were truncated."
    },
    "error": {
      "type": "object",
      "required": [
        "code",
        "message"
      ],
      "properties": {
        "code": {
          "type": "integer",
          "maximum": 9007199254740991,
          "minimum": -9007199254740991,
          "description": "JSON-RPC error code for this failure."
        },
        "data": {
          "type": "object",
          "properties": {
            "reason": {
              "type": "string",
              "description": "Machine-readable failure mode."
            },
            "recovery": {
              "type": "object",
              "required": [
                "hint"
              ],
              "properties": {
                "hint": {
                  "type": "string"
                }
              },
              "description": "Actionable next step for the caller.",
              "additionalProperties": {}
            },
            "retryable": {
              "type": "boolean",
              "description": "Whether retrying may succeed."
            }
          },
          "additionalProperties": {}
        },
        "message": {
          "type": "string",
          "description": "Human-readable description of what went wrong."
        }
      },
      "description": "Present when the call failed. Absent on success.",
      "additionalProperties": {}
    },
    "shown": {
      "type": "number",
      "description": "Number of airports returned. Present only when results were truncated."
    },
    "notice": {
      "type": "string",
      "description": "Guidance when no airport fell within the radius or results were capped — how to widen or narrow."
    },
    "airports": {
      "type": "array",
      "items": {
        "type": "object",
        "required": [
          "airport",
          "distanceKm",
          "bearingDeg"
        ],
        "properties": {
          "airport": {
            "type": "object",
            "required": [
              "id",
              "ident",
              "type",
              "name",
              "latitudeDeg",
              "longitudeDeg",
              "elevationFt",
              "continent",
              "isoCountry",
              "countryName",
              "isoRegion",
              "regionName",
              "municipality",
              "scheduledService",
              "icaoCode",
              "iataCode",
              "gpsCode",
              "localCode"
            ],
            "properties": {
              "id": {
                "type": "number",
                "description": "OurAirports internal integer id (the join key for runways/frequencies)."
              },
              "name": {
                "type": "string",
                "description": "Airport name."
              },
              "type": {
                "type": "string",
                "description": "Airport type: large_airport, medium_airport, small_airport, heliport, seaplane_base, balloonport, or closed."
              },
              "ident": {
                "type": "string",
                "description": "OurAirports universal identifier — globally unique; often equals the ICAO or GPS code."
              },
              "gpsCode": {
                "type": [
                  "string",
                  "null"
                ],
                "description": "GPS code, or null."
              },
              "iataCode": {
                "type": [
                  "string",
                  "null"
                ],
                "description": "3-letter IATA code, or null when the airport has none (~89% of fields)."
              },
              "icaoCode": {
                "type": [
                  "string",
                  "null"
                ],
                "description": "4-letter ICAO code, or null when the airport has none (~88% of fields)."
              },
              "continent": {
                "type": [
                  "string",
                  "null"
                ],
                "description": "Two-letter continent code (AF, AN, AS, EU, NA, OC, SA), or null."
              },
              "isoRegion": {
                "type": [
                  "string",
                  "null"
                ],
                "description": "ISO 3166-2 region code (e.g. US-WA), or null."
              },
              "localCode": {
                "type": [
                  "string",
                  "null"
                ],
                "description": "National/local code (e.g. FAA LID), or null."
              },
              "isoCountry": {
                "type": [
                  "string",
                  "null"
                ],
                "description": "ISO 3166-1 alpha-2 country code, or null."
              },
              "regionName": {
                "type": [
                  "string",
                  "null"
                ],
                "description": "Resolved region name, or null when the region code is unknown."
              },
              "countryName": {
                "type": [
                  "string",
                  "null"
                ],
                "description": "Resolved country name, or null when the country code is unknown."
              },
              "elevationFt": {
                "type": [
                  "number",
                  "null"
                ],
                "description": "Field elevation in feet, or null when unknown."
              },
              "latitudeDeg": {
                "type": "number",
                "description": "Latitude in decimal degrees (WGS84)."
              },
              "longitudeDeg": {
                "type": "number",
                "description": "Longitude in decimal degrees (WGS84)."
              },
              "municipality": {
                "type": [
                  "string",
                  "null"
                ],
                "description": "Served municipality, or null."
              },
              "scheduledService": {
                "type": "boolean",
                "description": "True when the airport has scheduled airline service."
              }
            },
            "description": "The airport record. Codes the airport lacks are null.",
            "additionalProperties": false
          },
          "bearingDeg": {
            "type": "number",
            "description": "Initial bearing from the query point in degrees true (0–360, clockwise from north)."
          },
          "distanceKm": {
            "type": "number",
            "description": "Great-circle distance from the query point in kilometers."
          }
        },
        "description": "An airport with its great-circle distance and bearing from the query point.",
        "additionalProperties": false
      },
      "description": "Airports within the radius, nearest-first."
    },
    "truncated": {
      "type": "boolean",
      "description": "Present and true only when more airports matched than were returned."
    },
    "totalCount": {
      "type": "number",
      "description": "Airports within the radius that pass the type and include_closed filters, counted before the limit was applied."
    }
  },
  "additionalProperties": false
}
ourairports_find_airports annotations
{
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true
}
ourairports_find_navaids — Find Navaids
Advertised by the server during the last successful anonymous check.
Advertised read-only

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.

ourairports_find_navaids input schema
{
  "type": "object",
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "properties": {
    "type": {
      "enum": [
        "NDB",
        "VOR-DME",
        "VORTAC",
        "TACAN",
        "VOR",
        "DME",
        "NDB-DME"
      ],
      "type": "string",
      "description": "Restrict to one navaid type: NDB, VOR-DME, VORTAC, TACAN, VOR, DME, or NDB-DME."
    },
    "limit": {
      "type": "integer",
      "maximum": 50,
      "minimum": 1,
      "description": "Maximum navaids to return (1–50). Defaults to OURAIRPORTS_DEFAULT_SEARCH_LIMIT (20)."
    },
    "latitude": {
      "type": "number",
      "maximum": 90,
      "minimum": -90,
      "description": "Coordinate mode: query point latitude (−90 to 90). Provide with longitude; mutually exclusive with airport_code."
    },
    "longitude": {
      "type": "number",
      "maximum": 180,
      "minimum": -180,
      "description": "Coordinate mode: query point longitude (−180 to 180). Provide with latitude."
    },
    "radius_km": {
      "type": "number",
      "default": 100,
      "maximum": 500,
      "minimum": 1,
      "description": "Coordinate mode: search radius in kilometers (1–500). Defaults to 100. Ignored in airport mode."
    },
    "airport_code": {
      "type": "string",
      "minLength": 1,
      "description": "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."
    }
  },
  "additionalProperties": false
}
ourairports_find_navaids output schema
{
  "type": "object",
  "anyOf": [
    {
      "not": {
        "required": [
          "error"
        ]
      },
      "required": [
        "mode",
        "airportIdent",
        "navaids",
        "totalCount"
      ]
    },
    {
      "required": [
        "error"
      ]
    }
  ],
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "properties": {
    "cap": {
      "type": "number",
      "description": "The limit that was applied. Present only when results were truncated."
    },
    "mode": {
      "enum": [
        "coordinate",
        "airport"
      ],
      "type": "string",
      "description": "Which query mode was used."
    },
    "error": {
      "type": "object",
      "required": [
        "code",
        "message"
      ],
      "properties": {
        "code": {
          "type": "integer",
          "maximum": 9007199254740991,
          "minimum": -9007199254740991,
          "description": "JSON-RPC error code for this failure."
        },
        "data": {
          "type": "object",
          "properties": {
            "reason": {
              "type": "string",
              "examples": [
                "mode_conflict",
                "unknown_code"
              ],
              "description": "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."
            },
            "recovery": {
              "type": "object",
              "required": [
                "hint"
              ],
              "properties": {
                "hint": {
                  "type": "string"
                }
              },
              "description": "Actionable next step for the caller.",
              "additionalProperties": {}
            },
            "retryable": {
              "type": "boolean",
              "description": "Whether retrying may succeed."
            }
          },
          "additionalProperties": {}
        },
        "message": {
          "type": "string",
          "description": "Human-readable description of what went wrong."
        }
      },
      "description": "Present when the call failed. Absent on success.",
      "additionalProperties": {}
    },
    "shown": {
      "type": "number",
      "description": "Number of navaids returned. Present only when results were truncated."
    },
    "notice": {
      "type": "string",
      "description": "Guidance when no navaids matched (empty radius, or airport found but unserved) or results were capped — how to widen or narrow."
    },
    "navaids": {
      "type": "array",
      "items": {
        "type": "object",
        "required": [
          "id",
          "ident",
          "name",
          "type",
          "frequencyKhz",
          "frequencyMhz",
          "latitudeDeg",
          "longitudeDeg",
          "elevationFt",
          "isoCountry",
          "dmeChannel",
          "dmeFrequencyKhz",
          "usageType",
          "power",
          "magneticVariationDeg",
          "slavedVariationDeg",
          "associatedAirport",
          "distanceKm",
          "bearingDeg"
        ],
        "properties": {
          "id": {
            "type": "number",
            "description": "OurAirports navaid id."
          },
          "name": {
            "type": "string",
            "description": "Navaid name."
          },
          "type": {
            "type": "string",
            "description": "Navaid type: NDB, VOR-DME, VORTAC, TACAN, VOR, DME, or NDB-DME."
          },
          "ident": {
            "type": "string",
            "description": "Navaid identifier (e.g. SEA)."
          },
          "power": {
            "type": [
              "string",
              "null"
            ],
            "description": "Transmitter power class as recorded upstream: HIGH, MEDIUM, LOW, or UNKNOWN. Null when not recorded."
          },
          "usageType": {
            "type": [
              "string",
              "null"
            ],
            "description": "Service-volume class as recorded upstream: HI, LO, BOTH, TERMINAL, or RNAV. Null when not recorded."
          },
          "bearingDeg": {
            "type": [
              "number",
              "null"
            ],
            "description": "Bearing from the query point in degrees true (coordinate mode); null in airport mode."
          },
          "distanceKm": {
            "type": [
              "number",
              "null"
            ],
            "description": "Great-circle distance from the query point in km (coordinate mode); null in airport mode."
          },
          "dmeChannel": {
            "type": [
              "string",
              "null"
            ],
            "description": "DME channel (e.g. 115X), or null."
          },
          "isoCountry": {
            "type": [
              "string",
              "null"
            ],
            "description": "ISO 3166-1 alpha-2 country code, or null."
          },
          "elevationFt": {
            "type": [
              "number",
              "null"
            ],
            "description": "Elevation in feet, or null when unknown."
          },
          "latitudeDeg": {
            "type": "number",
            "description": "Latitude in decimal degrees (WGS84)."
          },
          "frequencyKhz": {
            "type": [
              "number",
              "null"
            ],
            "description": "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."
          },
          "frequencyMhz": {
            "type": [
              "number",
              "null"
            ],
            "description": "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."
          },
          "longitudeDeg": {
            "type": "number",
            "description": "Longitude in decimal degrees (WGS84)."
          },
          "dmeFrequencyKhz": {
            "type": [
              "number",
              "null"
            ],
            "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."
          },
          "associatedAirport": {
            "type": [
              "string",
              "null"
            ],
            "description": "Ident of the airport this navaid serves, or null for standalone enroute navaids."
          },
          "slavedVariationDeg": {
            "type": [
              "number",
              "null"
            ],
            "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."
          },
          "magneticVariationDeg": {
            "type": [
              "number",
              "null"
            ],
            "description": "Actual magnetic variation at the navaid site in degrees, positive east. Null when not recorded."
          }
        },
        "description": "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.",
        "additionalProperties": false
      },
      "description": "Matching navaids. Nearest-first in coordinate mode; in airport-association order in airport mode."
    },
    "truncated": {
      "type": "boolean",
      "description": "Present and true only when more navaids matched than were returned."
    },
    "totalCount": {
      "type": "number",
      "description": "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)."
    },
    "airportIdent": {
      "type": [
        "string",
        "null"
      ],
      "description": "In airport mode, the resolved airport ident the navaids were matched against; null in coordinate mode."
    },
    "resolutionNote": {
      "type": "string",
      "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."
    }
  },
  "additionalProperties": false
}
ourairports_find_navaids annotations
{
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true
}
ourairports_list_countries — List Countries
Advertised by the server during the last successful anonymous check.
Advertised read-only

List countries and valid country/region filter codes for ourairports_search_airports and ourairports_search_runways, with airport counts excluding closed airports. Restrict to country for one country's regions; country and continent combine as AND. include_regions without a scope returns the entire region table, so prefer country for a one-country lookup. Unscoped and continent-only requests remain available.

ourairports_list_countries input schema
{
  "type": "object",
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "properties": {
    "country": {
      "anyOf": [
        {
          "type": "string",
          "const": ""
        },
        {
          "type": "string",
          "pattern": "^[A-Za-z]{2}$",
          "description": "Two-letter country code."
        }
      ],
      "description": "Country code from ourairports_list_countries (e.g. US). Case-insensitive; surrounding whitespace is ignored. Literal empty string is unset; whitespace-only is invalid."
    },
    "continent": {
      "enum": [
        "AF",
        "AN",
        "AS",
        "EU",
        "NA",
        "OC",
        "SA"
      ],
      "type": "string",
      "description": "Restrict to one continent: AF (Africa), AN (Antarctica), AS (Asia), EU (Europe), NA (North America), OC (Oceania), SA (South America)."
    },
    "include_regions": {
      "type": "boolean",
      "default": false,
      "description": "When true, nest each country's ISO 3166-2 regions (with airport counts) under it. Off by default to keep the response compact."
    }
  },
  "additionalProperties": false
}
ourairports_list_countries output schema
{
  "type": "object",
  "anyOf": [
    {
      "not": {
        "required": [
          "error"
        ]
      },
      "required": [
        "countries",
        "totalCount"
      ]
    },
    {
      "required": [
        "error"
      ]
    }
  ],
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "properties": {
    "error": {
      "type": "object",
      "required": [
        "code",
        "message"
      ],
      "properties": {
        "code": {
          "type": "integer",
          "maximum": 9007199254740991,
          "minimum": -9007199254740991,
          "description": "JSON-RPC error code for this failure."
        },
        "data": {
          "type": "object",
          "properties": {
            "reason": {
              "type": "string",
              "examples": [
                "unknown_country"
              ],
              "description": "Machine-readable failure mode. Declared by this tool: `unknown_country`: The country code is absent from the bundled country table. Other values are possible when a failure originates below the handler."
            },
            "recovery": {
              "type": "object",
              "required": [
                "hint"
              ],
              "properties": {
                "hint": {
                  "type": "string"
                }
              },
              "description": "Actionable next step for the caller.",
              "additionalProperties": {}
            },
            "retryable": {
              "type": "boolean",
              "description": "Whether retrying may succeed."
            }
          },
          "additionalProperties": {}
        },
        "message": {
          "type": "string",
          "description": "Human-readable description of what went wrong."
        }
      },
      "description": "Present when the call failed. Absent on success.",
      "additionalProperties": {}
    },
    "notice": {
      "type": "string",
      "description": "Guidance when the country and/or continent filters matched no countries."
    },
    "countries": {
      "type": "array",
      "items": {
        "type": "object",
        "required": [
          "code",
          "name",
          "continent",
          "airportCount"
        ],
        "properties": {
          "code": {
            "type": "string",
            "description": "Country code to pass as country to ourairports_search_airports or ourairports_search_runways."
          },
          "name": {
            "type": "string",
            "description": "Country name."
          },
          "regions": {
            "type": "array",
            "items": {
              "type": "object",
              "required": [
                "code",
                "name",
                "airportCount"
              ],
              "properties": {
                "code": {
                  "type": "string",
                  "description": "ISO 3166-2 region code (e.g. US-WA)."
                },
                "name": {
                  "type": "string",
                  "description": "Region name."
                },
                "airportCount": {
                  "type": "number",
                  "description": "Number of non-closed airports in the region."
                }
              },
              "description": "A region within a country, with its non-closed airport count.",
              "additionalProperties": false
            },
            "description": "Regions within the country with airport counts. Present only when include_regions is true."
          },
          "continent": {
            "type": [
              "string",
              "null"
            ],
            "description": "Two-letter continent code (AF, AN, AS, EU, NA, OC, SA), or null."
          },
          "airportCount": {
            "type": "number",
            "description": "Number of non-closed airports in the country."
          }
        },
        "description": "A country present in the dataset, with its non-closed airport count and ISO code.",
        "additionalProperties": false
      },
      "description": "Countries present in the dataset, sorted by name."
    },
    "totalCount": {
      "type": "number",
      "description": "Number of countries returned."
    }
  },
  "additionalProperties": false
}
ourairports_list_countries annotations
{
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true
}

Prompts

0 advertised

No prompt definitions available.

Resources

0 advertised

airport-record — Airport Record

Advertised by the server during the last successful anonymous check.

A single airport record by any code (IATA / ICAO / GPS / local / OurAirports ident), with runways and radio frequencies inline. Stable-URI twin of ourairports_get_airport.

airport-record URI template
airport://{code}

MIME type: application/json

90-day uptime

A lightweight connection check about every six hours, sampled on hosts with many listings. It shows the server answered, not that its tools work.

Too few checks for a percentage yet (3 of 3 answered).

  1. 2026-11-07: 1 of 1 checks answered
  2. 2026-11-09: 1 of 1 checks answered
  3. 2026-11-10: 1 of 1 checks answered

30-day availability

Aggregated from read-only remote checks; this is not a tool-execution or security guarantee.

Successful checks
1 of 1 (100%)
Average latency
628 ms
95th percentile latency
628 ms

Maintenance history

Public check and source-refresh events. Editorial and ownership records remain private.

  • · probe · passed · 628 ms · metadata changed · 6 tool(s), 0 resource(s), 1 resource template(s), 0 prompt(s)

Connect from your client

Each snippet registers the same endpoint; pick the client you use.

This server is operated by the named third party. Listing and endpoint checks are not an endorsement or a security audit. Review the operator's permissions, terms, and data handling before connecting. How listings are checked and corrected.

Claude Code

Run this once in a terminal. It registers the remote server. Use --scope project to write .mcp.json for the repo.
Claude Code configuration
claude mcp add --transport http ourairports-mcp-server https://ourairports.caseyjhand.com/mcp

Codex

Run this once. Codex stores MCP servers in ~/.codex/config.toml (or .codex/config.toml in a trusted project).
Codex configuration
codex mcp add ourairports-mcp-server --url https://ourairports.caseyjhand.com/mcp

Cursor

Merge this server into .cursor/mcp.json in your project, then enable ourairports-mcp-server in your MCP settings.
Cursor configuration
{
  "mcpServers": {
    "ourairports-mcp-server": {
      "url": "https://ourairports.caseyjhand.com/mcp"
    }
  }
}

Cline

Merge this into cline_mcp_settings.json (Cline → MCP Servers → Configure).
Cline configuration
{
  "mcpServers": {
    "ourairports-mcp-server": {
      "type": "streamableHttp",
      "url": "https://ourairports.caseyjhand.com/mcp",
      "disabled": false
    }
  }
}

VS Code

Merge this server into .vscode/mcp.json. Use MCP: List Servers to start ourairports-mcp-server and inspect its tools.
VS Code configuration
{
  "servers": {
    "ourairports-mcp-server": {
      "type": "http",
      "url": "https://ourairports.caseyjhand.com/mcp"
    }
  }
}

Gemini CLI

Run this once. It writes .gemini/settings.json in the current project; pass --scope user for ~/.gemini/settings.json.
Gemini CLI configuration
gemini mcp add --transport http ourairports-mcp-server https://ourairports.caseyjhand.com/mcp

Claude Desktop

Open Claude Settings > Connectors > Add custom connector, enter this server URL and enable it for the conversation. This is a manual remote-connector handoff, not a desktop JSON configuration.
Claude Desktop configuration
https://ourairports.caseyjhand.com/mcp

Windsurf

Merge this into ~/.codeium/windsurf/mcp_config.json, then refresh MCP in Cascade. Windsurf remote servers use serverUrl, not url.
Windsurf configuration
{
  "mcpServers": {
    "ourairports-mcp-server": {
      "serverUrl": "https://ourairports.caseyjhand.com/mcp"
    }
  }
}

Let your agent find its tools

Find servers like ourairports-mcp-server from your agent. Add Koskamo once to search the index for endpoints, access requirements, and client setup. Public discovery needs no key.