ourairports-mcp-server
Offline global aviation reference — airports, runways, navaids, frequencies from OurAirports.
我该使用它吗
质量与安全性
基于对工具定义和协议合规性的自动分析。
上下文开销
这是每次将服务器的工具加载到模型上下文窗口时所消耗的大致 token 数。数值越高,可用于其他任务的注意力就越少。
安装
一键安装
将以下内容添加到你的 `claude_desktop_config.json` 文件中:
{
"mcpServers": {
"ourairports-mcp-server": {
"command": "bun",
"args": [
"@cyanheads/ourairports-mcp-server"
]
}
}
}可运行的软件包
0.2.4streamable-http远程端点
https://ourairports.caseyjhand.com/mcpstreamable-http它能做什么
工具清单
工具(6)
🟢ourairports_search_airports(query, country, region, type, include_closed, ...)
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",
"properties": {
"query": {
"description": "Free-text search over airport name, municipality, and keywords. Tokens are AND-matched. Omit to browse purely by facets.",
"type": "string"
},
"country": {
"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.",
"type": "string",
"minLength": 1
},
"region": {
"description": "ISO 3166-2 region code filter (e.g. US-WA). Exact match, case-insensitive; surrounding whitespace is ignored.",
"type": "string",
"minLength": 1
},
"type": {
"description": "Restrict to one airport type: large_airport, medium_airport, small_airport, heliport, seaplane_base, balloonport, or closed.",
"type": "string",
"enum": [
"large_airport",
"medium_airport",
"small_airport",
"heliport",
"seaplane_base",
"balloonport",
"closed"
]
},
"include_closed": {
"default": false,
"description": "Include airports of type \"closed\". Off by default — closed airports pollute the live-flight grounding use case.",
"type": "boolean"
},
"limit": {
"description": "Maximum airports to return (1–100). Defaults to OURAIRPORTS_DEFAULT_SEARCH_LIMIT (20).",
"type": "integer",
"minimum": 1,
"maximum": 100
}
},
"$schema": "https://json-schema.org/draft/2020-12/schema",
"additionalProperties": false
}输出模式
{
"type": "object",
"properties": {
"airports": {
"type": "array",
"items": {
"type": "object",
"properties": {
"id": {
"type": "number",
"description": "OurAirports internal integer id (the join key for runways/frequencies)."
},
"ident": {
"type": "string",
"description": "OurAirports universal identifier — globally unique; often equals the ICAO or GPS code."
},
"type": {
"type": "string",
"description": "Airport type: large_airport, medium_airport, small_airport, heliport, seaplane_base, balloonport, or closed."
},
"name": {
"type": "string",
"description": "Airport name."
},
"latitudeDeg": {
"type": "number",
"description": "Latitude in decimal degrees (WGS84)."
},
"longitudeDeg": {
"type": "number",
"description": "Longitude in decimal degrees (WGS84)."
},
"elevationFt": {
"description": "Field elevation in feet, or null when unknown.",
"type": [
"number",
"null"
]
},
"continent": {
"description": "Two-letter continent code (AF, AN, AS, EU, NA, OC, SA), or null.",
"type": [
"string",
"null"
]
},
"isoCountry": {
"description": "ISO 3166-1 alpha-2 country code, or null.",
"type": [
"string",
"null"
]
},
"countryName": {
"description": "Resolved country name, or null when the country code is unknown.",
"type": [
"string",
"null"
]
},
"isoRegion": {
"description": "ISO 3166-2 region code (e.g. US-WA), or null.",
"type": [
"string",
"null"
]
},
"regionName": {
"description": "Resolved region name, or null when the region code is unknown.",
"type": [
"string",
"null"
]
},
"municipality": {
"description": "Served municipality, or null.",
"type": [
"string",
"null"
]
},
"scheduledService": {
"type": "boolean",
"description": "True when the airport has scheduled airline service."
},
"icaoCode": {
"description": "4-letter ICAO code, or null when the airport has none (~88% of fields).",
"type": [
"string",
"null"
]
},
"iataCode": {
"description": "3-letter IATA code, or null when the airport has none (~89% of fields).",
"type": [
"string",
"null"
]
},
"gpsCode": {
"description": "GPS code, or null.",
"type": [
"string",
"null"
]
},
"localCode": {
"description": "National/local code (e.g. FAA LID), or null.",
"type": [
"string",
"null"
]
}
},
"required": [
"id",
"ident",
"type",
"name",
"latitudeDeg",
"longitudeDeg",
"elevationFt",
"continent",
"isoCountry",
"countryName",
"isoRegion",
"regionName",
"municipality",
"scheduledService",
"icaoCode",
"iataCode",
"gpsCode",
"localCode"
],
"additionalProperties": false,
"description": "An airport summary with its full (sparse) code set and coordinates."
},
"description": "Matching airports, ranked best-first. Codes the airport lacks are null."
},
"totalCount": {
"type": "number",
"description": "Total airports matched before the limit was applied."
},
"truncated": {
"description": "Present and true only when more airports matched than were returned.",
"type": "boolean"
},
"shown": {
"description": "Number of airports returned. Present only when results were truncated.",
"type": "number"
},
"cap": {
"description": "The limit that was applied. Present only when results were truncated.",
"type": "number"
},
"notice": {
"description": "Guidance when nothing matched or results were capped — how to broaden or narrow.",
"type": "string"
},
"error": {
"description": "Present when the call failed. Absent on success.",
"type": "object",
"properties": {
"code": {
"type": "integer",
"minimum": -9007199254740991,
"maximum": 9007199254740991,
"description": "JSON-RPC error code for this failure."
},
"message": {
"type": "string",
"description": "Human-readable description of what went wrong."
},
"data": {
"type": "object",
"properties": {
"reason": {
"type": "string",
"description": "Machine-readable failure mode."
},
"recovery": {
"description": "Actionable next step for the caller.",
"type": "object",
"properties": {
"hint": {
"type": "string"
}
},
"required": [
"hint"
],
"additionalProperties": {}
},
"retryable": {
"description": "Whether retrying may succeed.",
"type": "boolean"
}
},
"additionalProperties": {}
}
},
"required": [
"code",
"message"
],
"additionalProperties": {}
}
},
"$schema": "https://json-schema.org/draft/2020-12/schema",
"additionalProperties": false,
"anyOf": [
{
"not": {
"required": [
"error"
]
},
"required": [
"airports",
"totalCount"
]
},
{
"required": [
"error"
]
}
]
}🟢ourairports_search_runways(country, region, type, min_length_ft, min_width_ft, ...)
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",
"properties": {
"country": {
"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.",
"type": "string",
"minLength": 1
},
"region": {
"description": "ISO 3166-2 region code filter (e.g. US-WA). Exact match, case-insensitive; surrounding whitespace is ignored.",
"type": "string",
"minLength": 1
},
"type": {
"description": "Restrict to runways at airports of one type: large_airport, medium_airport, small_airport, heliport, seaplane_base, balloonport, or closed.",
"type": "string",
"enum": [
"large_airport",
"medium_airport",
"small_airport",
"heliport",
"seaplane_base",
"balloonport",
"closed"
]
},
"min_length_ft": {
"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.",
"type": "number",
"minimum": 0
},
"min_width_ft": {
"description": "Minimum runway width in feet (inclusive). Runways with an unknown width are excluded when this is set, never assumed to pass.",
"type": "number",
"minimum": 0
},
"surface": {
"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.",
"type": "string",
"minLength": 1
},
"lighted": {
"description": "Filter by runway lighting: true for lighted runways only, false for unlighted only. Omit to include both.",
"type": "boolean"
},
"include_closed_airports": {
"default": false,
"description": "Include runways at airports of type \"closed\". Off by default.",
"type": "boolean"
},
"include_closed_runways": {
"default": false,
"description": "Include runways flagged closed. Off by default.",
"type": "boolean"
},
"limit": {
"description": "Maximum runway rows to return (1–100). Defaults to OURAIRPORTS_DEFAULT_SEARCH_LIMIT (20).",
"type": "integer",
"minimum": 1,
"maximum": 100
}
},
"$schema": "https://json-schema.org/draft/2020-12/schema",
"additionalProperties": false
}输出模式
{
"type": "object",
"properties": {
"runways": {
"type": "array",
"items": {
"type": "object",
"properties": {
"airport": {
"type": "object",
"properties": {
"id": {
"type": "number",
"description": "OurAirports internal integer id (the join key for runways/frequencies)."
},
"ident": {
"type": "string",
"description": "OurAirports universal identifier — globally unique; often equals the ICAO or GPS code."
},
"type": {
"type": "string",
"description": "Airport type: large_airport, medium_airport, small_airport, heliport, seaplane_base, balloonport, or closed."
},
"name": {
"type": "string",
"description": "Airport name."
},
"latitudeDeg": {
"type": "number",
"description": "Latitude in decimal degrees (WGS84)."
},
"longitudeDeg": {
"type": "number",
"description": "Longitude in decimal degrees (WGS84)."
},
"elevationFt": {
"description": "Field elevation in feet, or null when unknown.",
"type": [
"number",
"null"
]
},
"continent": {
"description": "Two-letter continent code (AF, AN, AS, EU, NA, OC, SA), or null.",
"type": [
"string",
"null"
]
},
"isoCountry": {
"description": "ISO 3166-1 alpha-2 country code, or null.",
"type": [
"string",
"null"
]
},
"countryName": {
"description": "Resolved country name, or null when the country code is unknown.",
"type": [
"string",
"null"
]
},
"isoRegion": {
"description": "ISO 3166-2 region code (e.g. US-WA), or null.",
"type": [
"string",
"null"
]
},
"regionName": {
"description": "Resolved region name, or null when the region code is unknown.",
"type": [
"string",
"null"
]
},
"municipality": {
"description": "Served municipality, or null.",
"type": [
"string",
"null"
]
},
"scheduledService": {
"type": "boolean",
"description": "True when the airport has scheduled airline service."
},
"icaoCode": {
"description": "4-letter ICAO code, or null when the airport has none (~88% of fields).",
"type": [
"string",
"null"
]
},
"iataCode": {
"description": "3-letter IATA code, or null when the airport has none (~89% of fields).",
"type": [
"string",
"null"
]
},
"gpsCode": {
"description": "GPS code, or null.",
"type": [
"string",
"null"
]
},
"localCode": {
"description": "National/local code (e.g. FAA LID), or null.",
"type": [
"string",
"null"
]
}
},
"required": [
"id",
"ident",
"type",
"name",
"latitudeDeg",
"longitudeDeg",
"elevationFt",
"continent",
"isoCountry",
"countryName",
"isoRegion",
"regionName",
"municipality",
"scheduledService",
"icaoCode",
"iataCode",
"gpsCode",
"localCode"
],
"additionalProperties": false,
"description": "The airport this runway belongs to. Codes the airport lacks are null."
},
"runway": {
"type": "object",
"properties": {
"id": {
"type": "number",
"description": "OurAirports runway id."
},
"lengthFt": {
"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.",
"type": [
"number",
"null"
]
},
"widthFt": {
"description": "Runway width in feet, or null when unknown.",
"type": [
"number",
"null"
]
},
"surface": {
"description": "Surface material as recorded upstream (free text, e.g. ASP, CON, GRS), or null.",
"type": [
"string",
"null"
]
},
"lighted": {
"type": "boolean",
"description": "True when the runway is lighted."
},
"closed": {
"type": "boolean",
"description": "True when the runway is closed."
},
"leIdent": {
"description": "Low-end runway designator (e.g. 16L), or null.",
"type": [
"string",
"null"
]
},
"leHeadingDegT": {
"description": "Low-end true heading in degrees, or null.",
"type": [
"number",
"null"
]
},
"leDisplacedThresholdFt": {
"description": "Length of the displaced threshold at the low end (leIdent) in feet — part of lengthFt. Null when none is recorded.",
"type": [
"number",
"null"
]
},
"heIdent": {
"description": "High-end runway designator (e.g. 34R), or null.",
"type": [
"string",
"null"
]
},
"heHeadingDegT": {
"description": "High-end true heading in degrees, or null.",
"type": [
"number",
"null"
]
},
"heDisplacedThresholdFt": {
"description": "Length of the displaced threshold at the high end (heIdent) in feet — part of lengthFt. Null when none is recorded.",
"type": [
"number",
"null"
]
}
},
"required": [
"id",
"lengthFt",
"widthFt",
"surface",
"lighted",
"closed",
"leIdent",
"leHeadingDegT",
"leDisplacedThresholdFt",
"heIdent",
"heHeadingDegT",
"heDisplacedThresholdFt"
],
"additionalProperties": false,
"description": "The matching runway — full-surface dimensions, surface, lighting, and per-end designators, headings, and displaced thresholds."
}
},
"required": [
"airport",
"runway"
],
"additionalProperties": false,
"description": "A runway paired with its airport (one row per matching runway)."
},
"description": "Matching runways, each paired with its airport. One row per runway — an airport with N matching runways contributes N rows."
},
"totalCount": {
"type": "number",
"description": "Total matching runways before the limit was applied."
},
"truncated": {
"description": "Present and true only when more runways matched than were returned.",
"type": "boolean"
},
"shown": {
"description": "Number of runway rows returned. Present only when results were truncated.",
"type": "number"
},
"cap": {
"description": "The limit that was applied. Present only when results were truncated.",
"type": "number"
},
"notice": {
"description": "Guidance when nothing matched or results were capped — how to broaden or narrow.",
"type": "string"
},
"error": {
"description": "Present when the call failed. Absent on success.",
"type": "object",
"properties": {
"code": {
"type": "integer",
"minimum": -9007199254740991,
"maximum": 9007199254740991,
"description": "JSON-RPC error code for this failure."
},
"message": {
"type": "string",
"description": "Human-readable description of what went wrong."
},
"data": {
"type": "object",
"properties": {
"reason": {
"type": "string",
"description": "Machine-readable failure mode."
},
"recovery": {
"description": "Actionable next step for the caller.",
"type": "object",
"properties": {
"hint": {
"type": "string"
}
},
"required": [
"hint"
],
"additionalProperties": {}
},
"retryable": {
"description": "Whether retrying may succeed.",
"type": "boolean"
}
},
"additionalProperties": {}
}
},
"required": [
"code",
"message"
],
"additionalProperties": {}
}
},
"$schema": "https://json-schema.org/draft/2020-12/schema",
"additionalProperties": false,
"anyOf": [
{
"not": {
"required": [
"error"
]
},
"required": [
"runways",
"totalCount"
]
},
{
"required": [
"error"
]
}
]
}🟢ourairports_get_airport(code, include)
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",
"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": {
"default": [
"runways",
"frequencies"
],
"description": "Which related records to include inline. Defaults to both. Pass a subset to trim the response.",
"type": "array",
"items": {
"type": "string",
"enum": [
"runways",
"frequencies"
]
}
}
},
"required": [
"code"
],
"$schema": "https://json-schema.org/draft/2020-12/schema",
"additionalProperties": false
}输出模式
{
"type": "object",
"properties": {
"airport": {
"type": "object",
"properties": {
"id": {
"type": "number",
"description": "OurAirports internal integer id (the join key for runways/frequencies)."
},
"ident": {
"type": "string",
"description": "OurAirports universal identifier — globally unique; often equals the ICAO or GPS code."
},
"type": {
"type": "string",
"description": "Airport type: large_airport, medium_airport, small_airport, heliport, seaplane_base, balloonport, or closed."
},
"name": {
"type": "string",
"description": "Airport name."
},
"latitudeDeg": {
"type": "number",
"description": "Latitude in decimal degrees (WGS84)."
},
"longitudeDeg": {
"type": "number",
"description": "Longitude in decimal degrees (WGS84)."
},
"elevationFt": {
"description": "Field elevation in feet, or null when unknown.",
"type": [
"number",
"null"
]
},
"continent": {
"description": "Two-letter continent code (AF, AN, AS, EU, NA, OC, SA), or null.",
"type": [
"string",
"null"
]
},
"isoCountry": {
"description": "ISO 3166-1 alpha-2 country code, or null.",
"type": [
"string",
"null"
]
},
"countryName": {
"description": "Resolved country name, or null when the country code is unknown.",
"type": [
"string",
"null"
]
},
"isoRegion": {
"description": "ISO 3166-2 region code (e.g. US-WA), or null.",
"type": [
"string",
"null"
]
},
"regionName": {
"description": "Resolved region name, or null when the region code is unknown.",
"type": [
"string",
"null"
]
},
"municipality": {
"description": "Served municipality, or null.",
"type": [
"string",
"null"
]
},
"scheduledService": {
"type": "boolean",
"description": "True when the airport has scheduled airline service."
},
"icaoCode": {
"description": "4-letter ICAO code, or null when the airport has none (~88% of fields).",
"type": [
"string",
"null"
]
},
"iataCode": {
"description": "3-letter IATA code, or null when the airport has none (~89% of fields).",
"type": [
"string",
"null"
]
},
"gpsCode": {
"description": "GPS code, or null.",
"type": [
"string",
"null"
]
},
"localCode": {
"description": "National/local code (e.g. FAA LID), or null.",
"type": [
"string",
"null"
]
}
},
"required": [
"id",
"ident",
"type",
"name",
"latitudeDeg",
"longitudeDeg",
"elevationFt",
"continent",
"isoCountry",
"countryName",
"isoRegion",
"regionName",
"municipality",
"scheduledService",
"icaoCode",
"iataCode",
"gpsCode",
"localCode"
],
"additionalProperties": false,
"description": "The resolved airport record. Codes the airport lacks are null."
},
"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."
},
"included": {
"type": "array",
"items": {
"type": "string",
"enum": [
"runways",
"frequencies"
]
},
"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."
},
"runways": {
"type": "array",
"items": {
"type": "object",
"properties": {
"id": {
"type": "number",
"description": "OurAirports runway id."
},
"lengthFt": {
"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.",
"type": [
"number",
"null"
]
},
"widthFt": {
"description": "Runway width in feet, or null when unknown.",
"type": [
"number",
"null"
]
},
"surface": {
"description": "Surface material as recorded upstream (free text, e.g. ASP, CON, GRS), or null.",
"type": [
"string",
"null"
]
},
"lighted": {
"type": "boolean",
"description": "True when the runway is lighted."
},
"closed": {
"type": "boolean",
"description": "True when the runway is closed."
},
"leIdent": {
"description": "Low-end runway designator (e.g. 16L), or null.",
"type": [
"string",
"null"
]
},
"leHeadingDegT": {
"description": "Low-end true heading in degrees, or null.",
"type": [
"number",
"null"
]
},
"leDisplacedThresholdFt": {
"description": "Length of the displaced threshold at the low end (leIdent) in feet — part of lengthFt. Null when none is recorded.",
"type": [
"number",
"null"
]
},
"heIdent": {
"description": "High-end runway designator (e.g. 34R), or null.",
"type": [
"string",
"null"
]
},
"heHeadingDegT": {
"description": "High-end true heading in degrees, or null.",
"type": [
"number",
"null"
]
},
"heDisplacedThresholdFt": {
"description": "Length of the displaced threshold at the high end (heIdent) in feet — part of lengthFt. Null when none is recorded.",
"type": [
"number",
"null"
]
}
},
"required": [
"id",
"lengthFt",
"widthFt",
"surface",
"lighted",
"closed",
"leIdent",
"leHeadingDegT",
"leDisplacedThresholdFt",
"heIdent",
"heHeadingDegT",
"heDisplacedThresholdFt"
],
"additionalProperties": false,
"description": "A runway with full-surface dimensions, surface, lighting, and per-end designators, headings, and displaced thresholds."
},
"description": "Runways for the airport. Empty when the airport has none OR when `runways` was not in `include` — check `included` to tell which."
},
"frequencies": {
"type": "array",
"items": {
"type": "object",
"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": {
"description": "Human-readable description, or null.",
"type": [
"string",
"null"
]
},
"frequencyMhz": {
"description": "Radio frequency in MHz (e.g. 122.9), or null when unknown.",
"type": [
"number",
"null"
]
}
},
"required": [
"id",
"type",
"description",
"frequencyMhz"
],
"additionalProperties": false,
"description": "An airport radio frequency (tower, ground, ATIS, etc.) in MHz."
},
"description": "Radio frequencies in MHz. Empty when the airport has none OR when `frequencies` was not in `include` — check `included` to tell which."
},
"error": {
"description": "Present when the call failed. Absent on success.",
"type": "object",
"properties": {
"code": {
"type": "integer",
"minimum": -9007199254740991,
"maximum": 9007199254740991,
"description": "JSON-RPC error code for this failure."
},
"message": {
"type": "string",
"description": "Human-readable description of what went wrong."
},
"data": {
"type": "object",
"properties": {
"reason": {
"type": "string",
"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.",
"examples": [
"unknown_code"
]
},
"recovery": {
"description": "Actionable next step for the caller.",
"type": "object",
"properties": {
"hint": {
"type": "string"
}
},
"required": [
"hint"
],
"additionalProperties": {}
},
"retryable": {
"description": "Whether retrying may succeed.",
"type": "boolean"
}
},
"additionalProperties": {}
}
},
"required": [
"code",
"message"
],
"additionalProperties": {}
}
},
"$schema": "https://json-schema.org/draft/2020-12/schema",
"additionalProperties": false,
"anyOf": [
{
"not": {
"required": [
"error"
]
},
"required": [
"airport",
"resolvedVia",
"resolutionNote",
"included",
"runways",
"frequencies"
]
},
{
"required": [
"error"
]
}
]
}🟢ourairports_find_airports(latitude, longitude, radius_km, type, include_closed, ...)
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",
"properties": {
"latitude": {
"type": "number",
"minimum": -90,
"maximum": 90,
"description": "Query point latitude in decimal degrees (WGS84), −90 to 90."
},
"longitude": {
"type": "number",
"minimum": -180,
"maximum": 180,
"description": "Query point longitude in decimal degrees (WGS84), −180 to 180."
},
"radius_km": {
"default": 100,
"description": "Search radius in kilometers (1–500). Defaults to 100.",
"type": "number",
"minimum": 1,
"maximum": 500
},
"type": {
"description": "Restrict to one airport type (e.g. large_airport for major fields only).",
"type": "string",
"enum": [
"large_airport",
"medium_airport",
"small_airport",
"heliport",
"seaplane_base",
"balloonport",
"closed"
]
},
"include_closed": {
"default": false,
"description": "Include airports of type \"closed\". Off by default.",
"type": "boolean"
},
"limit": {
"description": "Maximum airports to return (1–50). Defaults to OURAIRPORTS_DEFAULT_SEARCH_LIMIT (20).",
"type": "integer",
"minimum": 1,
"maximum": 50
}
},
"required": [
"latitude",
"longitude"
],
"$schema": "https://json-schema.org/draft/2020-12/schema",
"additionalProperties": false
}输出模式
{
"type": "object",
"properties": {
"airports": {
"type": "array",
"items": {
"type": "object",
"properties": {
"airport": {
"type": "object",
"properties": {
"id": {
"type": "number",
"description": "OurAirports internal integer id (the join key for runways/frequencies)."
},
"ident": {
"type": "string",
"description": "OurAirports universal identifier — globally unique; often equals the ICAO or GPS code."
},
"type": {
"type": "string",
"description": "Airport type: large_airport, medium_airport, small_airport, heliport, seaplane_base, balloonport, or closed."
},
"name": {
"type": "string",
"description": "Airport name."
},
"latitudeDeg": {
"type": "number",
"description": "Latitude in decimal degrees (WGS84)."
},
"longitudeDeg": {
"type": "number",
"description": "Longitude in decimal degrees (WGS84)."
},
"elevationFt": {
"description": "Field elevation in feet, or null when unknown.",
"type": [
"number",
"null"
]
},
"continent": {
"description": "Two-letter continent code (AF, AN, AS, EU, NA, OC, SA), or null.",
"type": [
"string",
"null"
]
},
"isoCountry": {
"description": "ISO 3166-1 alpha-2 country code, or null.",
"type": [
"string",
"null"
]
},
"countryName": {
"description": "Resolved country name, or null when the country code is unknown.",
"type": [
"string",
"null"
]
},
"isoRegion": {
"description": "ISO 3166-2 region code (e.g. US-WA), or null.",
"type": [
"string",
"null"
]
},
"regionName": {
"description": "Resolved region name, or null when the region code is unknown.",
"type": [
"string",
"null"
]
},
"municipality": {
"description": "Served municipality, or null.",
"type": [
"string",
"null"
]
},
"scheduledService": {
"type": "boolean",
"description": "True when the airport has scheduled airline service."
},
"icaoCode": {
"description": "4-letter ICAO code, or null when the airport has none (~88% of fields).",
"type": [
"string",
"null"
]
},
"iataCode": {
"description": "3-letter IATA code, or null when the airport has none (~89% of fields).",
"type": [
"string",
"null"
]
},
"gpsCode": {
"description": "GPS code, or null.",
"type": [
"string",
"null"
]
},
"localCode": {
"description": "National/local code (e.g. FAA LID), or null.",
"type": [
"string",
"null"
]
}
},
"required": [
"id",
"ident",
"type",
"name",
"latitudeDeg",
"longitudeDeg",
"elevationFt",
"continent",
"isoCountry",
"countryName",
"isoRegion",
"regionName",
"municipality",
"scheduledService",
"icaoCode",
"iataCode",
"gpsCode",
"localCode"
],
"additionalProperties": false,
"description": "The airport record. Codes the airport lacks are null."
},
"distanceKm": {
"type": "number",
"description": "Great-circle distance from the query point in kilometers."
},
"bearingDeg": {
"type": "number",
"description": "Initial bearing from the query point in degrees true (0–360, clockwise from north)."
}
},
"required": [
"airport",
"distanceKm",
"bearingDeg"
],
"additionalProperties": false,
"description": "An airport with its great-circle distance and bearing from the query point."
},
"description": "Airports within the radius, nearest-first."
},
"totalCount": {
"type": "number",
"description": "Airports within the radius that pass the type and include_closed filters, counted before the limit was applied."
},
"truncated": {
"description": "Present and true only when more airports matched than were returned.",
"type": "boolean"
},
"shown": {
"description": "Number of airports returned. Present only when results were truncated.",
"type": "number"
},
"cap": {
"description": "The limit that was applied. Present only when results were truncated.",
"type": "number"
},
"notice": {
"description": "Guidance when no airport fell within the radius or results were capped — how to widen or narrow.",
"type": "string"
},
"error": {
"description": "Present when the call failed. Absent on success.",
"type": "object",
"properties": {
"code": {
"type": "integer",
"minimum": -9007199254740991,
"maximum": 9007199254740991,
"description": "JSON-RPC error code for this failure."
},
"message": {
"type": "string",
"description": "Human-readable description of what went wrong."
},
"data": {
"type": "object",
"properties": {
"reason": {
"type": "string",
"description": "Machine-readable failure mode."
},
"recovery": {
"description": "Actionable next step for the caller.",
"type": "object",
"properties": {
"hint": {
"type": "string"
}
},
"required": [
"hint"
],
"additionalProperties": {}
},
"retryable": {
"description": "Whether retrying may succeed.",
"type": "boolean"
}
},
"additionalProperties": {}
}
},
"required": [
"code",
"message"
],
"additionalProperties": {}
}
},
"$schema": "https://json-schema.org/draft/2020-12/schema",
"additionalProperties": false,
"anyOf": [
{
"not": {
"required": [
"error"
]
},
"required": [
"airports",
"totalCount"
]
},
{
"required": [
"error"
]
}
]
}🟢ourairports_find_navaids(latitude, longitude, radius_km, airport_code, type, ...)
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",
"properties": {
"latitude": {
"description": "Coordinate mode: query point latitude (−90 to 90). Provide with longitude; mutually exclusive with airport_code.",
"type": "number",
"minimum": -90,
"maximum": 90
},
"longitude": {
"description": "Coordinate mode: query point longitude (−180 to 180). Provide with latitude.",
"type": "number",
"minimum": -180,
"maximum": 180
},
"radius_km": {
"default": 100,
"description": "Coordinate mode: search radius in kilometers (1–500). Defaults to 100. Ignored in airport mode.",
"type": "number",
"minimum": 1,
"maximum": 500
},
"airport_code": {
"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.",
"type": "string",
"minLength": 1
},
"type": {
"description": "Restrict to one navaid type: NDB, VOR-DME, VORTAC, TACAN, VOR, DME, or NDB-DME.",
"type": "string",
"enum": [
"NDB",
"VOR-DME",
"VORTAC",
"TACAN",
"VOR",
"DME",
"NDB-DME"
]
},
"limit": {
"description": "Maximum navaids to return (1–50). Defaults to OURAIRPORTS_DEFAULT_SEARCH_LIMIT (20).",
"type": "integer",
"minimum": 1,
"maximum": 50
}
},
"$schema": "https://json-schema.org/draft/2020-12/schema",
"additionalProperties": false
}输出模式
{
"type": "object",
"properties": {
"mode": {
"type": "string",
"enum": [
"coordinate",
"airport"
],
"description": "Which query mode was used."
},
"airportIdent": {
"description": "In airport mode, the resolved airport ident the navaids were matched against; null in coordinate mode.",
"type": [
"string",
"null"
]
},
"navaids": {
"type": "array",
"items": {
"type": "object",
"properties": {
"id": {
"type": "number",
"description": "OurAirports navaid id."
},
"ident": {
"type": "string",
"description": "Navaid identifier (e.g. SEA)."
},
"name": {
"type": "string",
"description": "Navaid name."
},
"type": {
"type": "string",
"description": "Navaid type: NDB, VOR-DME, VORTAC, TACAN, VOR, DME, or NDB-DME."
},
"frequencyKhz": {
"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.",
"type": [
"number",
"null"
]
},
"frequencyMhz": {
"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.",
"type": [
"number",
"null"
]
},
"latitudeDeg": {
"type": "number",
"description": "Latitude in decimal degrees (WGS84)."
},
"longitudeDeg": {
"type": "number",
"description": "Longitude in decimal degrees (WGS84)."
},
"elevationFt": {
"description": "Elevation in feet, or null when unknown.",
"type": [
"number",
"null"
]
},
"isoCountry": {
"description": "ISO 3166-1 alpha-2 country code, or null.",
"type": [
"string",
"null"
]
},
"dmeChannel": {
"description": "DME channel (e.g. 115X), or null.",
"type": [
"string",
"null"
]
},
"dmeFrequencyKhz": {
"description": "Paired VHF frequency of the DME or TACAN component in kHz (divide by 1000 for MHz), on every type that has one — including NDB-DME, where it differs from frequencyKhz. Null when the navaid has no DME component recorded.",
"type": [
"number",
"null"
]
},
"usageType": {
"description": "Service-volume class as recorded upstream: HI, LO, BOTH, TERMINAL, or RNAV. Null when not recorded.",
"type": [
"string",
"null"
]
},
"power": {
"description": "Transmitter power class as recorded upstream: HIGH, MEDIUM, LOW, or UNKNOWN. Null when not recorded.",
"type": [
"string",
"null"
]
},
"magneticVariationDeg": {
"description": "Actual magnetic variation at the navaid site in degrees, positive east. Null when not recorded.",
"type": [
"number",
"null"
]
},
"slavedVariationDeg": {
"description": "Magnetic variation built into the radials of a VOR, VOR-DME, VORTAC, or TACAN in degrees, positive east — the reference radials are measured from, which can differ from magneticVariationDeg. Null when not recorded.",
"type": [
"number",
"null"
]
},
"associatedAirport": {
"description": "Ident of the airport this navaid serves, or null for standalone enroute navaids.",
"type": [
"string",
"null"
]
},
"distanceKm": {
"description": "Great-circle distance from the query point in km (coordinate mode); null in airport mode.",
"type": [
"number",
"null"
]
},
"bearingDeg": {
"description": "Bearing from the query point in degrees true (coordinate mode); null in airport mode.",
"type": [
"number",
"null"
]
}
},
"required": [
"id",
"ident",
"name",
"type",
"frequencyKhz",
"frequencyMhz",
"latitudeDeg",
"longitudeDeg",
"elevationFt",
"isoCountry",
"dmeChannel",
"dmeFrequencyKhz",
"usageType",
"power",
"magneticVariationDeg",
"slavedVariationDeg",
"associatedAirport",
"distanceKm",
"bearingDeg"
],
"additionalProperties": false,
"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."
},
"description": "Matching navaids. Nearest-first in coordinate mode; in airport-association order in airport mode."
},
"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)."
},
"truncated": {
"description": "Present and true only when more navaids matched than were returned.",
"type": "boolean"
},
"shown": {
"description": "Number of navaids returned. Present only when results were truncated.",
"type": "number"
},
"cap": {
"description": "The limit that was applied. Present only when results were truncated.",
"type": "number"
},
"notice": {
"description": "Guidance when no navaids matched (empty radius, or airport found but unserved) or results were capped — how to widen or narrow.",
"type": "string"
},
"resolutionNote": {
"description": "Airport mode, present only when airport_code is also a code of other airports: the identifier space that matched, why this airport won, and each other airport's ident, country, and code space.",
"type": "string"
},
"error": {
"description": "Present when the call failed. Absent on success.",
"type": "object",
"properties": {
"code": {
"type": "integer",
"minimum": -9007199254740991,
"maximum": 9007199254740991,
"description": "JSON-RPC error code for this failure."
},
"message": {
"type": "string",
"description": "Human-readable description of what went wrong."
},
"data": {
"type": "object",
"properties": {
"reason": {
"type": "string",
"description": "Machine-readable failure mode. Declared by this tool: `mode_conflict`: Both coordinate (latitude/longitude) and airport_code were supplied, or neither was. `unknown_code`: airport_code did not match any airport in any identifier space. Other values are possible when a failure originates below the handler.",
"examples": [
"mode_conflict",
"unknown_code"
]
},
"recovery": {
"description": "Actionable next step for the caller.",
"type": "object",
"properties": {
"hint": {
"type": "string"
}
},
"required": [
"hint"
],
"additionalProperties": {}
},
"retryable": {
"description": "Whether retrying may succeed.",
"type": "boolean"
}
},
"additionalProperties": {}
}
},
"required": [
"code",
"message"
],
"additionalProperties": {}
}
},
"$schema": "https://json-schema.org/draft/2020-12/schema",
"additionalProperties": false,
"anyOf": [
{
"not": {
"required": [
"error"
]
},
"required": [
"mode",
"airportIdent",
"navaids",
"totalCount"
]
},
{
"required": [
"error"
]
}
]
}🟢ourairports_list_countries(continent, include_regions)
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",
"properties": {
"continent": {
"description": "Restrict to one continent: AF (Africa), AN (Antarctica), AS (Asia), EU (Europe), NA (North America), OC (Oceania), SA (South America).",
"type": "string",
"enum": [
"AF",
"AN",
"AS",
"EU",
"NA",
"OC",
"SA"
]
},
"include_regions": {
"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.",
"type": "boolean"
}
},
"$schema": "https://json-schema.org/draft/2020-12/schema",
"additionalProperties": false
}输出模式
{
"type": "object",
"properties": {
"countries": {
"type": "array",
"items": {
"type": "object",
"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."
},
"continent": {
"description": "Two-letter continent code (AF, AN, AS, EU, NA, OC, SA), or null.",
"type": [
"string",
"null"
]
},
"airportCount": {
"type": "number",
"description": "Number of non-closed airports in the country."
},
"regions": {
"description": "Regions within the country with airport counts. Present only when include_regions is true.",
"type": "array",
"items": {
"type": "object",
"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."
}
},
"required": [
"code",
"name",
"airportCount"
],
"additionalProperties": false,
"description": "A region within a country, with its non-closed airport count."
}
}
},
"required": [
"code",
"name",
"continent",
"airportCount"
],
"additionalProperties": false,
"description": "A country present in the dataset, with its non-closed airport count and ISO code."
},
"description": "Countries present in the dataset, sorted by name."
},
"totalCount": {
"type": "number",
"description": "Number of countries returned."
},
"notice": {
"description": "Guidance when the continent filter matched no countries.",
"type": "string"
},
"error": {
"description": "Present when the call failed. Absent on success.",
"type": "object",
"properties": {
"code": {
"type": "integer",
"minimum": -9007199254740991,
"maximum": 9007199254740991,
"description": "JSON-RPC error code for this failure."
},
"message": {
"type": "string",
"description": "Human-readable description of what went wrong."
},
"data": {
"type": "object",
"properties": {
"reason": {
"type": "string",
"description": "Machine-readable failure mode."
},
"recovery": {
"description": "Actionable next step for the caller.",
"type": "object",
"properties": {
"hint": {
"type": "string"
}
},
"required": [
"hint"
],
"additionalProperties": {}
},
"retryable": {
"description": "Whether retrying may succeed.",
"type": "boolean"
}
},
"additionalProperties": {}
}
},
"required": [
"code",
"message"
],
"additionalProperties": {}
}
},
"$schema": "https://json-schema.org/draft/2020-12/schema",
"additionalProperties": false,
"anyOf": [
{
"not": {
"required": [
"error"
]
},
"required": [
"countries",
"totalCount"
]
},
{
"required": [
"error"
]
}
]
}社区
证据