flightaware-mcp
AeroAPI-backed MCP server for live flight tracking and aviation data over stdio.
Flights: get, search (simple/advanced/positions), count, track, position, route, map PNG, history, resolve ident.
Airports: details, flight boards, counts, routes, list, nearby search, delays, weather (METAR/TAF), resolve code.
Operators/aircraft: operator details/flights/list, aircraft owner by tail number.
Schedules/predictive: scheduled flights between dates, Foresight predictive search (premium).
Alerts: list/get/create/update/delete alerts and get/set webhook endpoint; writes require confirmation.
Health:
fa_healthcheckverifies credentials and upstream reachability without re-billing.
Provides tools for live flight tracking, airport information, flight schedules, aircraft and operator data, and flight alerts via the FlightAware AeroAPI.
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@flightaware-mcp track the current position of flight UA123"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
flightaware-mcp
MCP server for FlightAware AeroAPI (v4) — live flight tracking and aviation data for Claude. Track flights, read airport boards, look up operators and aircraft, fetch scheduled flights, and manage flight alerts, all over stdio.
Developed and maintained by AI (Claude Code). Use at your own discretion.
Quick start
{
"mcpServers": {
"flightaware": {
"command": "npx",
"args": ["-y", "@chrischall/flightaware-mcp"],
"env": { "AEROAPI_API_KEY": "your-aeroapi-key-here" }
}
}
}Get a key at flightaware.com/aeroapi/portal. The free Personal tier (500 calls/month) is enough to start; AeroAPI bills per query.
Related MCP server: FlightRadar MCP Server
Tools
Area | Tools |
Flights |
|
Airports |
|
Operators / aircraft |
|
Schedules / predictive |
|
Alerts |
|
Health |
|
Alert mutations (fa_create_alert, fa_update_alert, fa_delete_alert, fa_set_alerts_endpoint) ask you to confirm before they write — see Confirmations.
Confirmations
Every alert mutation asks for your confirmation before it touches your AeroAPI account. A client that can show a confirmation prompt (Claude Code) shows one. On a client that cannot (claude.ai, Claude Desktop), the first call makes no network call and returns a preview of the exact request (method, path, body) plus a confirmToken; only a repeat call with that token sends it. A token acts once, expires, and is refused if the request changed since the preview.
variable | default | |
|
| What a write does on a client that cannot show a confirmation prompt (claude.ai, Claude Desktop). |
|
|
|
|
| How long a token stays valid. |
| random per process | Signing key; set it only if tokens must survive a server restart. |
Configuration
Var | Required | Purpose |
| yes | Your AeroAPI key (sent as the |
| no | Default directory for flight-map PNGs (default: |
| no | Seconds to cache identical live-data GET responses (default: 15; |
| no | Longer TTL for reference data — airport/operator info, routes, ownership, canonical lookups (default: 3600; |
Upgrading
next release
fa_get_flight_mapon a hosted server (mcp-host, i.e.MCP_DATA_DIRorMCP_BLOB_BASE_URLset) no longer writes the PNG to the server's disk, where the caller could never open it. It returns the map as an inline image when it fits (10 MiB), otherwise a signed, expiring download link:{ "via": "link", "url": "…", "expiresAt": "…", "note"?: "…" }in place of{ "map": "<path>" }.inline:falseor anoutput_dirthere also yields a link (with anote). A hosted server with no blob store refuses an over-cap map with atoo_largeerror.Local installs: the default is unchanged (
{ "map": "<path>" }).inline:trueis now capped at 10 MiB; a bigger map is saved to disk and returned as{ "map": "<path>", "note": "…" }instead of an oversized inline image.
Development
npm install
npm run build
npm testEvery request rides your own AeroAPI key and counts against your subscription quota. See docs/FLIGHTAWARE-API.md for the pinned endpoint surface.
License
MIT
Available Tools
34 toolsfa_count_flightsARead-only
Count flights matching a query without returning the flights themselves. Returns { count }. Uses the SIMPLIFIED "-key value" syntax (same as fa_search_flights, NOT the structured grammar of fa_search_flights_advanced). Example: -airline UAL -belowAltitude 30000.
Inputs: query (required), view.
fa_create_alertA
Create a flight alert on your AeroAPI account. Asks the user to confirm first: a confirmation prompt where the client supports one (unless the server sets MCP_CONFIRM_ELICITATION=off); otherwise the first call returns a preview of the request (method, path, body) and a confirmToken, makes NO network call, and only a repeat call with that token proceeds (see MCP_CONFIRM_MODE). Requires a Standard or Premium AeroAPI tier (the free Personal tier returns 401).
Inputs: eta, hold, filed, ident, +11 more.
fa_delete_alertADestructiveIdempotent
Delete a flight alert by id. Asks the user to confirm first: a confirmation prompt where the client supports one (unless the server sets MCP_CONFIRM_ELICITATION=off); otherwise the first call returns a preview of the request (method, path, body) and a confirmToken, makes NO network call, and only a repeat call with that token proceeds (see MCP_CONFIRM_MODE). Requires a Standard or Premium AeroAPI tier (the free Personal tier returns 401).
Inputs: id (required), confirmToken.
fa_foresight_searchARead-only
Predictive flight search via AeroAPI Foresight (Boolean query language, like fa_search_flights_advanced, but predicted data). NOTE: Foresight is a premium tier — expect a 402/403 unless your subscription includes it.
Inputs: query (required), view, cursor, max_pages.
fa_get_aircraft_ownerBRead-only
Get the registered owner of an aircraft by tail number / registration (e.g. N12345).
Inputs: ident (required), view.
fa_get_airportARead-only
Get details for an airport by code (ICAO like KJFK, IATA like JFK, or LID).
Inputs: id (required), view.
fa_get_airport_delaysARead-only
Get current airport delays — all delayed airports, or just one when id is given.
Inputs: id, view, cursor, max_pages.
fa_get_airport_flight_countsARead-only
Get current flight counts at an airport: { departed, enroute, scheduled_arrivals, scheduled_departures }.
Inputs: id (required), view.
fa_get_airport_flightsARead-only
Get a flight board for an airport: all flights, or just arrivals/departures/scheduled_arrivals/scheduled_departures.
Inputs: id (required), end, type, view, +4 more.
fa_get_airport_routesARead-only
Get the most popular routes (with aircraft types, counts, and filed altitudes) flown between an origin and destination airport.
Inputs: id (required), destination (required), view, cursor, +1 more.
fa_get_airport_weatherARead-only
Get weather for an airport: current METAR observations, or the TAF forecast.
Inputs: id (required), view, cursor, report, +1 more.
fa_get_alertARead-only
Get a single configured flight alert by its id. Requires a Standard or Premium AeroAPI tier (the free Personal tier returns 401).
Inputs: id (required), view.
fa_get_alerts_endpointARead-only
Get the current delivery (webhook) endpoint configured for your AeroAPI alerts. Requires a Standard or Premium AeroAPI tier (the free Personal tier returns 401).
Inputs: view.
fa_get_flight_historyARead-only
Get historical flights for an ident (designator, registration, or fa_flight_id) beyond the recent window covered by fa_get_flights. NOTE: historical data requires a Standard or Premium AeroAPI tier — the free Personal tier returns 401.
Inputs: ident (required), end, view, start, +3 more.
fa_get_flight_mapA
Get a rendered map image (PNG) of a flight by fa_flight_id. Writes the PNG to disk (default: $AEROAPI_OUTPUT_DIR, else ~/Downloads/flightaware-mcp) and returns the path, or returns it inline as base64 when inline:true.
Inputs: id (required), width, height, inline, +2 more.
fa_get_flight_positionBRead-only
Get the most recent reported position for an in-air flight by fa_flight_id.
Inputs: id (required), view.
fa_get_flight_routeBRead-only
Get the decoded route (fixes/waypoints) for a specific flight by fa_flight_id.
Inputs: id (required), view.
fa_get_flightsBRead-only
Get flights for an ident — a flight designator (e.g. UAL123, AAL100), aircraft registration (e.g. N12345), or fa_flight_id. Returns recent, current, and scheduled flights for that ident.
Inputs: ident (required), end, view, start, +3 more.
fa_get_flight_trackBRead-only
Get the position track (breadcrumb log) for a specific flight by fa_flight_id.
Inputs: id (required), view, include_estimated_positions.
fa_get_nearby_airportsBRead-only
Find airports near a latitude/longitude within a radius (statute miles).
Inputs: radius (required), latitude (required), longitude (required), view, +3 more.
fa_get_operatorARead-only
Get details for an operator (airline) by code (ICAO like UAL, or IATA like UA).
Inputs: id (required), view.
fa_get_operator_flightsCRead-only
Get a flight board for an operator (airline): all flights, or arrivals/departures/enroute/scheduled.
Inputs: id (required), view, board, cursor, +1 more.
fa_get_scheduled_flightsBRead-only
Get airline-scheduled flights between two dates (YYYY-MM-DD), optionally filtered by origin, destination, airline, or flight number.
Inputs: date_end (required), date_start (required), view, cursor, +6 more.
fa_healthcheckVerify credentials and upstream reachabilityARead-onlyIdempotent
Resolves the credential the way real tools do, then makes one authenticated request to aeroapi.flightaware.com. Reports which source supplied the credential, whether aeroapi.flightaware.com accepted it, the round-trip time, and a plain-English hint distinguishing 'no credential' from 'credential rejected' from 'a aeroapi.flightaware.com-side problem'. Read-only; never returns the credential itself. Call this when a real tool fails and you want to know which hop broke.
Inputs: no named parameters.
fa_list_airportsBRead-only
List airports known to AeroAPI (paged). Use the cursor to page through.
Inputs: view, cursor, max_pages.
fa_list_alertsARead-only
List the flight alerts configured on your AeroAPI account — the flights you are watching. Requires a Standard or Premium AeroAPI tier (the free Personal tier returns 401).
Inputs: view, cursor, max_pages.
fa_list_operatorsBRead-only
List operators (airlines) known to AeroAPI (paged). Use the cursor to page through.
Inputs: view, cursor, max_pages.
fa_resolve_airportARead-only
Resolve an airport code to its canonical AeroAPI identifier (and equivalents). NOTE: requires a Standard or Premium AeroAPI tier — the free Personal tier returns 401.
Inputs: id (required), view, id_type.
fa_resolve_flightARead-only
Resolve a flight ident (designator/registration) to its canonical form and any alternate idents. NOTE: requires a Standard or Premium AeroAPI tier — the free Personal tier returns 401.
Inputs: ident (required), view, ident_type.
fa_search_flight_positionsARead-only
Search live flight POSITIONS using the structured "{operator key value}" query language (same grammar as fa_search_flights_advanced — NOT the simplified "-key value" syntax). Returns position points rather than flight summaries. Example: {match ident UAL*} {> alt 300}.
Inputs: query (required), view, cursor, max_pages.
fa_search_flightsBRead-only
Search airborne flights using AeroAPI's simplified query syntax — a single string of "-key value" pairs. Keys: -prefix -type -idents -identOrReg -airline -destination -origin -originOrDestination -aboveAltitude -belowAltitude -aboveGroundspeed -belowGroundspeed -latlong "MINLAT MINLON MAXLAT MAXLON" -filter {ga|airline}. Example: -airline UAL -belowAltitude 30000
Inputs: query (required), view, cursor, max_pages.
fa_search_flights_advancedARead-only
Search flights using AeroAPI's full structured query language (more expressive than fa_search_flights). The query is a space-separated list of {operator key value} predicates, e.g. "{match ident UAL*} {> alt 300} {= dest KLAX}". Operators: true/false/null/notnull/=/!=/</>/<=/>=, match/notmatch (case-insensitive wildcards), range (two values), in/orig_or_dest/aircraftType/ident/ident_or_reg ({a b c} value lists), airline (1=airline, 0=GA). Common keys: ident, orig, dest (ICAO codes), aircraftType, alt (hundreds of ft), prefix, lifeguard, cancelled, arrived.
Inputs: query (required), view, cursor, max_pages.
fa_set_alerts_endpointADestructiveIdempotent
Set the delivery (webhook) endpoint AeroAPI POSTs alert notifications to. Asks the user to confirm first: a confirmation prompt where the client supports one (unless the server sets MCP_CONFIRM_ELICITATION=off); otherwise the first call returns a preview of the request (method, path, body) and a confirmToken, makes NO network call, and only a repeat call with that token proceeds (see MCP_CONFIRM_MODE). Requires a Standard or Premium AeroAPI tier (the free Personal tier returns 401).
Inputs: url (required), format, confirmToken.
fa_update_alertADestructiveIdempotent
Update an existing flight alert (replaces its configuration). Asks the user to confirm first: a confirmation prompt where the client supports one (unless the server sets MCP_CONFIRM_ELICITATION=off); otherwise the first call returns a preview of the request (method, path, body) and a confirmToken, makes NO network call, and only a repeat call with that token proceeds (see MCP_CONFIRM_MODE). Requires a Standard or Premium AeroAPI tier (the free Personal tier returns 401).
Inputs: id (required), eta, hold, filed, +12 more.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
Loading tool schema changelog…
TDQS
Scored across 34 tools
Most tools target a clearly distinct resource+action, and the descriptions proactively disambiguate the riskiest near-neighbours (fa_search_flights vs fa_search_flights_advanced vs fa_search_flight_positions, fa_get_flights vs fa_get_flight_history via the recent/historical distinction). A few pairs remain easy to confuse: fa_resolve_flight/fa_resolve_airport overlap with fa_get_flights/fa_get_airport, and the result-shape difference between position search and flight search must be inferred from prose rather than names.
Every tool carries the same fa_ prefix and follows a verb_noun snake_case pattern (fa_get_flight_track, fa_list_operators, fa_create_alert), with resource-scoped variants (fa_get_airport_flights, fa_get_operator_flights) staying readable. The only notable deviation is fa_healthcheck, which omits the verb, but it is a single diagnostic outlier and not confusing.
34 tools is heavy for a single API wrapper and sits well above the comfortable 3-15 band, even though the domain (flights, airports, operators, alerts, search grammars) is genuinely broad. Several entries feel like thin variations that could be folded into a mode/parameter—fa_count_flights, fa_resolve_flight, fa_resolve_airport, fa_search_flights vs fa_search_flights_advanced—so the surface is larger than strictly necessary.
Coverage is strong: alerts have full lifecycle CRUD plus webhook endpoint get/set, flights cover position, track, route, map, history, search, count and resolve, and airports/operators each get detail, list, flight board and near/route/weather extras. Gaps are minor but real—no aircraft-type/airframe detail lookup beyond owner, no operator-level route statistics, and no airport/runway or surface data.
Maintenance
Related MCP Connectors
FlightAware MCP — wraps FlightAware AeroAPI v4 (aeroapi.flightaware.com)
Flight search MCP server providing search, pagination, and itinerary details for AI assistants.
Live flight status and scheduled-route search via the official FlightAware AeroAPI.
Geo-based flight search MCP server. Find more flights between any two places on earth
Related MCP Servers
- AlicenseBqualityDmaintenanceA Claude Desktop MCP server that helps you track flights in real-time using Flightradar24 data. Perfect for aviation enthusiasts, travel planners, or anyone curious about flights overhead!210 npm47MIT
- AlicenseCqualityCmaintenanceA Model Context Protocol (MCP) server that provides real-time flight tracking and status information using the AviationStack API.332 npm7MIT
- AlicenseNot gradedqualityDmaintenanceProvides comprehensive flight tracking capabilities using the OpenSky Network API, enabling real-time flight data, geographic searches, historical data, and airport operations through MCP tools.MIT
- FlicenseNot gradedqualityDmaintenanceMCP server for flight schedule finding via Skyscanner API. Enables querying flight quotes and schedules using natural language.-