Track a flight in real-time and notify when to leave for airport pickup based on distance to destination.
Coding
flights-overhead
Try itSee what flights are above you right now. Identify contrails, planes overhead, and nearby air traffic using OpenSky Network (free, no key).
What it does
See what flights are above you right now. Identify contrails, planes overhead, and nearby air traffic using OpenSky Network (free, no key).
The skill document
Flights Overhead Skill
See what flights are currently above you. Identify contrails, planes overhead, and nearby air traffic using OpenSky Network (free, no API key needed).
When to Use
- "What flights are above me right now?"
- "What plane is that?"
- "What's that contrail?"
- "What flights are near me?"
- "What's flying overhead?"
- Any query about identifying aircraft in the sky
Requirements
- OpenSky Network — free, no API key, no account needed
- Python 3 (standard library only)
- User's location — lat/lng (from device location or ask the user)
- Script:
scripts/flights_overhead.py
Privacy & Data Disclosure
- OpenSky Network: Your approximate location (lat/lng bounding box) is sent as query parameters to OpenSky's public API to retrieve nearby aircraft. No account or personal data is transmitted beyond coordinates.
- Location source: The agent should confirm or ask for the user's location rather than silently using stored addresses. An approximate location (city-level) is usually sufficient for overhead flight queries.
- No data is stored externally.
Script Usage
# Show flights within 50 km (default)
python3 scripts/flights_overhead.py --lat 47.68 --lng -122.21
# Smaller radius, JSON output
python3 scripts/flights_overhead.py --lat 47.68 --lng -122.21 --radius 30 --json
# Limit results
python3 scripts/flights_overhead.py --lat 47.68 --lng -122.21 --limit 5 --json
Parameters
| Flag | Required | Default | Description |
|---|---|---|---|
--lat | Yes | — | Observer latitude |
--lng | Yes | — | Observer longitude |
--radius | No | 50 | Search radius in km |
--limit | No | 20 | Max flights to return |
--json | No | — | Output as JSON |
Output (JSON)
{
"count": 8,
"flights": [
{
"callsign": "ASA640",
"airline": "Alaska Airlines",
"flight_number": "AS640",
"lat": 47.65,
"lng": -122.30,
"altitude_ft": 4875,
"altitude_m": 1486,
"speed_kmh": 464.9,
"heading": 355,
"vertical_rate_ms": -5.2,
"distance_km": 8.2,
"origin_country": "United States"
}
]
}
Key Fields
| Field | Description |
|---|---|
callsign | ICAO callsign (e.g. ASA640) |
airline | Resolved airline name (if recognized) |
flight_number | IATA flight number (e.g. AS640) |
altitude_ft | Altitude in feet |
speed_kmh | Ground speed |
heading | Direction of travel (degrees, 0=north) |
distance_km | Distance from observer |
vertical_rate_ms | Climb/descent rate (negative = descending) |
Procedure
Step 1: Determine User Location
Options (in priority order):
- Device location (preferred for mobile users) — use
nodes→location_get. Requires user to have granted location permission on their paired device. Best option when the user may be away from home. - Home address from USER.md — convert to lat/lng. Use as fallback when device location is unavailable or user is known to be at home.
- Ask the user — if neither is available.
Note: Device location requires explicit user permission on the paired mobile device. If not granted, the call will fail — fall back to option 2 or 3. For mobile users who are frequently away from home, device location gives accurate results. For stationary/home use, the address from USER.md is sufficient.
Step 2: Query Flights
python3 scripts/flights_overhead.py --lat --lng --radius 30 --json
Use radius 5 km for "what's over me" / "what's that plane" (actually audible/visible). Use radius 30 km for "what's that contrail" (high altitude, visible far away). Use radius 20 km for "what flights are near me" or general area queries.
Step 3: Look Up Routes
For identified commercial flights, look up origin/destination:
# Web search for flight route
web_search " flight route origin destination today"
FlightAware (flightaware.com/live/flight/) and FlightStats typically show the route. Extract origin → destination from the search snippet.
Skip route lookup for:
- Private/GA aircraft (registration numbers like N262BS)
- If the user just wants a quick count, not details
Step 4: Present Results
For "what's that contrail?" or "what plane is that?":
- Filter to high-altitude flights (>25,000 ft for contrails)
- Show closest match with airline, flight number, altitude, heading
- Mention where it's likely going based on heading
For "what flights are above me?":
- Show all flights sorted by distance
- Group by airline if many results
- Mention total count
For identifying a specific plane:
- Ask for any details (direction it's heading, approximate altitude, size)
- Filter results to match
Step 4: Enrich (Optional)
If user wants more info about a specific flight:
- Use
flight_tracker.pyto get route (origin/destination) if callsign is known - Mention approximate aircraft type from origin_country + airline
Example Responses
"What flights are above me?"
Right now within 30 km of Kirkland, I can see 8 flights:
- AS640 (Alaska Airlines) at 4,875 ft, 8 km away, heading north
- DL2980 (Delta) at 3,850 ft, 9 km away, heading south
- WN1713 (Southwest) at 7,000 ft, 7 km away, heading north ... Mostly arrivals/departures from SEA-TAC.
"What's that contrail heading east?"
That's likely UA2271 (United Airlines) at 35,000 ft, heading 208° (southwest). It's about 13 km from you.
Data Source
- OpenSky Network — community-run ADS-B network, free, no key needed
- Rate limit: 1 request per 10 seconds (anonymous)
- Coverage: Excellent over US/Europe, good globally except remote oceans
- Delay: ~5-15 seconds behind real-time
Supported Airlines
The script recognizes 40+ airlines by ICAO callsign prefix and resolves them to human-readable names and IATA flight numbers. Unrecognized callsigns display as-is (often private/cargo aircraft with registration numbers like N262BS).
Notes
- Contrails typically form above 25,000 ft in cold air — filter by altitude for contrail queries
- Aircraft on the ground are automatically excluded
- Results sorted by distance from observer (closest first)
- Heading 0°/360° = north, 90° = east, 180° = south, 270° = west
- Private/GA aircraft show registration numbers (e.g. N262BS) without airline info
Related skills
Search Google Flights for flight prices
Live flight tracking and aviation data via FlightAware AeroAPI through MCP. Use when the user asks to track a flight, look up a flight's status/position/route/track, see an airport's arrivals/departures/delays/weather, find flights for an airline, look up an aircraft's owner, get scheduled flights between dates, or manage FlightAware flight alerts. Triggers on phrases like "where is flight UAL123", "track flight", "JFK departures", "is my flight delayed", "flights near", "who owns tail number N12345", or "set up a flight alert". Requires the @chrischall/flightaware-mcp package installed and the flightaware server registered (see Setup), plus an AeroAPI key.
Search Google Flights for a route and date as structured JSON — price, airline, duration, stops, and legs. Round-trip, one-way, and multi-city with cabin, stops, and airline filters. v2 engine, 1 credit per request.
Variflight Global Flight Fares searches one-way flight fares from the Variflight ticket API by departure IATA city code, arrival IATA city code, and departur...
Flexible flight search and safe Atlas booking