Skip to main content
Glama

flightaware-mcp

npm

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

fa_get_flights, fa_search_flights, fa_search_flights_advanced, fa_search_flight_positions, fa_count_flights, fa_get_flight_track, fa_get_flight_position, fa_get_flight_route, fa_get_flight_map, fa_get_flight_history, fa_resolve_flight

Airports

fa_get_airport, fa_get_airport_flights, fa_get_airport_flight_counts, fa_get_airport_routes, fa_list_airports, fa_get_nearby_airports, fa_get_airport_delays, fa_get_airport_weather, fa_resolve_airport

Operators / aircraft

fa_get_operator, fa_get_operator_flights, fa_list_operators, fa_get_aircraft_owner

Schedules / predictive

fa_get_scheduled_flights, fa_foresight_search (premium tier)

Alerts

fa_list_alerts, fa_get_alert, fa_create_alert, fa_update_alert, fa_delete_alert, fa_get_alerts_endpoint, fa_set_alerts_endpoint

Health

fa_healthcheck — is this connector working? Reports whether AEROAPI_API_KEY resolved, whether AeroAPI accepted it, and what to fix. Uses a static-cached lookup, so repeat checks are not re-billed.

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

MCP_CONFIRM_MODE

ask-user

What a write does on a client that cannot show a confirmation prompt (claude.ai, Claude Desktop). ask-user: two steps — the first call does nothing and returns a preview plus a token, and the model must get your approval in chat before calling again with it. auto: the same two steps, but the model may use the token after reviewing the preview itself. refuse: writes are refused on such clients. A client that can show prompts (Claude Code) always gets the real prompt, unless MCP_CONFIRM_ELICITATION=off. An unrecognised value is treated as refuse.

MCP_CONFIRM_ELICITATION

on

off never sends a confirmation prompt, so every client gets the MCP_CONFIRM_MODE path. Set it for a client that declares it can show prompts but never does (the gated call hangs — opencode 2.0.x). Any other value stays on, with a stderr warning.

MCP_CONFIRM_TTL_SECONDS

600

How long a token stays valid.

MCP_CONFIRM_SECRET

random per process

Signing key; set it only if tokens must survive a server restart.

Configuration

Var

Required

Purpose

AEROAPI_API_KEY

yes

Your AeroAPI key (sent as the x-apikey header).

AEROAPI_OUTPUT_DIR

no

Default directory for flight-map PNGs (default: ~/Downloads/flightaware-mcp). A per-call output_dir must be inside this directory (or inside ~/Downloads/flightaware-mcp when it is unset).

AEROAPI_CACHE_TTL

no

Seconds to cache identical live-data GET responses (default: 15; 0 disables). Cuts AeroAPI per-query billing.

AEROAPI_STATIC_CACHE_TTL

no

Longer TTL for reference data — airport/operator info, routes, ownership, canonical lookups (default: 3600; 0 disables).

Upgrading

next release

  • fa_get_flight_map on a hosted server (mcp-host, i.e. MCP_DATA_DIR or MCP_BLOB_BASE_URL set) 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:false or an output_dir there also yields a link (with a note). A hosted server with no blob store refuses an over-cap map with a too_large error.

  • Local installs: the default is unchanged ({ "map": "<path>" }). inline:true is 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 test

Every 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 tools
fa_count_flightsA
Read-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_alertA
DestructiveIdempotent

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_get_aircraft_ownerB
Read-only

Get the registered owner of an aircraft by tail number / registration (e.g. N12345).

Inputs: ident (required), view.

fa_get_airportA
Read-only

Get details for an airport by code (ICAO like KJFK, IATA like JFK, or LID).

Inputs: id (required), view.

fa_get_airport_delaysA
Read-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_countsA
Read-only

Get current flight counts at an airport: { departed, enroute, scheduled_arrivals, scheduled_departures }.

Inputs: id (required), view.

fa_get_airport_flightsA
Read-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_routesA
Read-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_weatherA
Read-only

Get weather for an airport: current METAR observations, or the TAF forecast.

Inputs: id (required), view, cursor, report, +1 more.

fa_get_alertA
Read-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_endpointA
Read-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_historyA
Read-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_positionB
Read-only

Get the most recent reported position for an in-air flight by fa_flight_id.

Inputs: id (required), view.

fa_get_flight_routeB
Read-only

Get the decoded route (fixes/waypoints) for a specific flight by fa_flight_id.

Inputs: id (required), view.

fa_get_flightsB
Read-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_trackB
Read-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_airportsB
Read-only

Find airports near a latitude/longitude within a radius (statute miles).

Inputs: radius (required), latitude (required), longitude (required), view, +3 more.

fa_get_operatorA
Read-only

Get details for an operator (airline) by code (ICAO like UAL, or IATA like UA).

Inputs: id (required), view.

fa_get_operator_flightsC
Read-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_flightsB
Read-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 reachabilityA
Read-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_airportsB
Read-only

List airports known to AeroAPI (paged). Use the cursor to page through.

Inputs: view, cursor, max_pages.

fa_list_alertsA
Read-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_operatorsB
Read-only

List operators (airlines) known to AeroAPI (paged). Use the cursor to page through.

Inputs: view, cursor, max_pages.

fa_resolve_airportA
Read-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_flightA
Read-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_positionsA
Read-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_flightsB
Read-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_advancedA
Read-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_endpointA
DestructiveIdempotent

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_alertA
DestructiveIdempotent

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

    A3.6/5.0

    Scored across 34 tools

    Disambiguation4/5

    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.

    Naming Consistency5/5

    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.

    Tool Count3/5

    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.

    Completeness4/5

    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

    ActivityActive
    ResponsivenessUsually handled

    Related MCP Connectors

    Related MCP Servers