MCP 서버

ourairports-mcp-server

io.github.cyanheads/ourairports-mcp-server
지도 및 위치 여행 및 호스피탈리티 공개 · 연결 가능 MCP 2025-11-25

이 MCP로 할 수 있는 일

Provides offline airport, runway, navigation-aid, frequency, and location reference data from OurAirports.

ourairports_find_airports
ourairports-mcp-server
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.
읽기 전용 멱등성
입력 스키마
{'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â\x80\x9350). Defaults to OURAIRPORTS_DEFAULT_SEARCH_LIMIT (20).'}, 'latitude': {'type': 'number', 'maximum': 90, 'minimum': -90, 'description': 'Query point latitude in decimal degrees (WGS84), â\x88\x9290 to 90.'}, 'longitude': {'type': 'number', 'maximum': 180, 'minimum': -180, 'description': 'Query point longitude in decimal degrees (WGS84), â\x88\x92180 to 180.'}, 'radius_km': {'type': 'number', 'default': 100, 'maximum': 500, 'minimum': 1, 'description': 'Search radius in kilometers (1â\x80\x93500). Defaults to 100.'}, 'include_closed': {'type': 'boolean', 'default': False, 'description': 'Include airports of type "closed". Off by default.'}}, 'additionalProperties': False}
출력 스키마
{'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 â\x80\x94 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 â\x80\x94 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â\x80\x93360, 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_navaids
ourairports-mcp-server
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.
읽기 전용 멱등성
입력 스키마
{'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â\x80\x9350). Defaults to OURAIRPORTS_DEFAULT_SEARCH_LIMIT (20).'}, 'latitude': {'type': 'number', 'maximum': 90, 'minimum': -90, 'description': 'Coordinate mode: query point latitude (â\x88\x9290 to 90). Provide with longitude; mutually exclusive with airport_code.'}, 'longitude': {'type': 'number', 'maximum': 180, 'minimum': -180, 'description': 'Coordinate mode: query point longitude (â\x88\x92180 to 180). Provide with latitude.'}, 'radius_km': {'type': 'number', 'default': 100, 'maximum': 500, 'minimum': 1, 'description': 'Coordinate mode: search radius in kilometers (1â\x80\x93500). 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}
출력 스키마
{'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`: 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.'}, '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 â\x80\x94 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 â\x80\x94 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 â\x80\x94 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 â\x80\x94 in coordinate mode â\x80\x94 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_get_airport
ourairports-mcp-server
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.
읽기 전용 멱등성
입력 스키마
{'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}
출력 스키마
{'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 â\x80\x94 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 â\x80\x94 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 â\x80\x94 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 â\x80\x94 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` â\x80\x94 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` â\x80\x94 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 â\x80\x94 pass that ident to fetch it."}}, 'additionalProperties': False}
ourairports_list_countries
ourairports-mcp-server
List the countries present in the bundled OurAirports dataset with their ISO 3166-1 alpha-2 codes and airport counts. This is the lookup table for valid `country` (and, with include_regions, `region`) filter values used by ourairports_search_airports. Optionally restrict to a continent or nest each country's regions. Counts exclude closed airports.
읽기 전용 멱등성
입력 스키마
{'type': 'object', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'properties': {'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}
출력 스키마
{'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', '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': {}}, 'notice': {'type': 'string', 'description': 'Guidance when the continent filter matched no countries.'}, 'countries': {'type': 'array', 'items': {'type': 'object', 'required': ['code', 'name', 'continent', 'airportCount'], 'properties': {'code': {'type': 'string', 'description': 'ISO 3166-1 alpha-2 country code (the value to pass as `country` to ourairports_search_airports).'}, '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_search_airports
ourairports-mcp-server
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.
읽기 전용 멱등성
입력 스키마
{'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â\x80\x93100). 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': {'type': 'string', 'minLength': 1, 'description': 'ISO 3166-2 region code filter (e.g. US-WA). Exact match, case-insensitive; surrounding whitespace is ignored.'}, 'country': {'type': 'string', 'minLength': 1, 'description': 'ISO 3166-1 alpha-2 country code filter (e.g. US). Exact match, case-insensitive; surrounding whitespace is ignored. Discover codes with ourairports_list_countries.'}, 'include_closed': {'type': 'boolean', 'default': False, 'description': 'Include airports of type "closed". Off by default â\x80\x94 closed airports pollute the live-flight grounding use case.'}}, 'additionalProperties': False}
출력 스키마
{'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 nothing matched or results were capped â\x80\x94 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 â\x80\x94 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_runways
ourairports-mcp-server
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.
읽기 전용 멱등성
입력 스키마
{'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â\x80\x93100). Defaults to OURAIRPORTS_DEFAULT_SEARCH_LIMIT (20).'}, 'region': {'type': 'string', 'minLength': 1, 'description': 'ISO 3166-2 region code filter (e.g. US-WA). Exact match, case-insensitive; surrounding whitespace is ignored.'}, 'country': {'type': 'string', 'minLength': 1, 'description': 'ISO 3166-1 alpha-2 country code filter (e.g. US). Exact match, case-insensitive; surrounding whitespace is ignored. Discover codes with ourairports_list_countries.'}, '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 â\x80\x94 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 â\x80\x94 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}
출력 스키마
{'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', '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 runway rows returned. Present only when results were truncated.'}, 'notice': {'type': 'string', 'description': 'Guidance when nothing matched or results were capped â\x80\x94 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 â\x80\x94 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 â\x80\x94 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 â\x80\x94 part of lengthFt. Null when none is recorded.'}}, 'description': 'The matching runway â\x80\x94 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 â\x80\x94 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 â\x80\x94 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_find_navaids
2026년 9월 25일 2:51 AM
변경됨
ourairports_find_airports
2026년 9월 25일 2:51 AM
변경됨
ourairports_get_airport
2026년 9월 25일 2:51 AM
변경됨
ourairports_search_runways
2026년 9월 25일 2:51 AM
변경됨
ourairports_search_airports
2026년 9월 25일 2:51 AM
변경됨
ourairports_list_countries
2026년 9월 21일 2:50 AM
변경됨
ourairports_find_navaids
2026년 9월 21일 2:50 AM
변경됨
ourairports_find_airports
2026년 9월 21일 2:50 AM
변경됨
ourairports_get_airport
2026년 9월 21일 2:50 AM
변경됨
ourairports_search_runways
2026년 9월 21일 2:50 AM
변경됨
ourairports_search_airports
2026년 9월 21일 2:50 AM
추가됨
ourairports_list_countries
2026년 9월 17일 12:41 PM
추가됨
ourairports_find_navaids
2026년 9월 17일 12:41 PM
추가됨
ourairports_find_airports
2026년 9월 17일 12:41 PM
추가됨
ourairports_get_airport
2026년 9월 17일 12:41 PM
추가됨
ourairports_search_runways
2026년 9월 17일 12:41 PM
추가됨
ourairports_search_airports
2026년 9월 17일 12:41 PM