FreeFlight
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., "@FreeFlightWhat aircraft are flying near London Heathrow right now?"
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.
✈️ FreeFlight API
A free, self-hosted live flight tracking API. No API key, no quotas, no credit card.
FreeFlight merges three volunteer ADS-B receiver networks (adsb.lol, airplanes.live and adsb.fi) with the OpenSky Network's global snapshot, and serves them through one clean JSON API. It also gives you flight routes, aircraft details, photos, a live map, a streaming feed, OpenSky- and ADSBExchange-compatible endpoints, and an MCP server for AI agents.
Quick start · Endpoints · Live map · Drop-in compatibility · MCP · How it works · Coverage & limits
docker run -d -p 8000:8000 ghcr.io/ethos6/free-flight-api:latest
curl "http://localhost:8000/v1/flights/nearby?lat=51.47&lon=-0.45&radius_nm=30"{
"count": 87,
"aircraft": [
{
"hex": "406b0f", "callsign": "BAW117", "registration": "G-XWBA", "type": "A35K",
"lat": 51.4701, "lon": -0.905, "altitude_ft": 12025, "altitude_m": 3665,
"ground_speed_kt": 311.0, "speed_kmh": 576.0, "track": 265.1, "vertical_rate_fpm": 1984,
"squawk": "2301", "on_ground": false, "military": false, "position_source": "adsb",
"seen_pos_s": 0.1, "distance_nm": 17.9, "providers": ["adsb.fi", "adsb.lol", "airplanes.live"]
}
],
"providers": [ { "name": "adsb.lol", "ok": true, "aircraft": 90, "elapsed_ms": 212 }, "…" ],
"cached": false
}Why?
Price | Limits | Self-hosted | Open source | |
FlightAware AeroAPI, FlightRadar24 API | paid per query or subscription | quotas | ❌ | ❌ |
Calling one ADS-B network directly | free | about 1 request/second, one network's coverage | – | – |
FreeFlight API | free | none imposed by the software; clients share cached upstream calls | ✅ | ✅ MIT |
Related MCP server: adsb.lol MCP Server
✨ Features
Three networks merged. Each aircraft is matched by its ICAO address across networks. The freshest position wins, and gaps (registration, type, callsign) are filled in from the others, so you get better coverage than any single network.
World snapshot.
/v1/flights/worldreturns every aircraft OpenSky is tracking worldwide (typically 10,000–13,000 aircraft), cached so it stays within OpenSky's free credit budget.Polite by design. Each network gets its own request pacing (about 1 req/s), with a circuit breaker on 429 or 5xx errors and automatic failover. Requests are coalesced and grid-cached, so 1,000 clients looking at the same area cost one upstream call.
Flight lookups: callsign, ICAO hex, registration, aircraft type, military, squawk, and emergencies (7500/7600/7700).
/v1/track/{callsign}returns the live position, origin and destination airports and airline (from adsbdb), aircraft owner and model, and a photo (from planespotters.net).Streaming.
/v1/stream/nearbyis a Server-Sent Events feed that pushes a fresh snapshot every few seconds.Filters: altitude, on-ground, military, aircraft type, and limit.
Units: both aviation and metric (ft and m, kt and km/h).
Live map at
/, built with Leaflet. Click any plane for its route and photo, or search by callsign.Drop-in replacement for the OpenSky REST API and the ADSBExchange v2 / adsb.lol API.
An MCP server, a CLI, Docker, and optional API keys and rate limiting.
🚀 Quick start
# Docker (one command)
docker run -d -p 8000:8000 ghcr.io/ethos6/free-flight-api:latest
# or from source
git clone https://github.com/Ethos6/free-flight-api && cd free-flight-api && docker compose up -d
# or pip
pip install "free-flight-api[mcp] @ git+https://github.com/Ethos6/free-flight-api"
freeflight serveOpen http://localhost:8000 for the live map, or /docs for the interactive API.
CLI:
freeflight nearby 40.64 -73.78 -r 25 # planes around JFK
freeflight track BAW117 # live position + route + aircraft + photo
freeflight world # how many aircraft are flying right now
freeflight check # health table for every data network📡 Endpoints
Endpoint | Description |
| Aircraft within a radius (≤ 250 nm), sorted by distance |
| Aircraft in a bounding box. Small boxes use the live networks; large ones use the world snapshot |
| Every aircraft tracked worldwide (OpenSky, cached) |
| Military aircraft |
| Aircraft squawking 7500, 7600 or 7700 |
| Filter by squawk code or ICAO type |
| Live lookups |
| Live position, route, aircraft details and photo |
| Route only, or aircraft details only |
| Live Server-Sent Events stream |
| Per-network health: success rate, latency, cooldown |
Filters work on every list endpoint: min_alt, max_alt (feet), on_ground, military, type=A320,B738, and limit.
🗺️ Live map
http://localhost:8000 opens a full-screen live map. When you zoom in, it shows rotated plane icons that refresh every 8 seconds. When you zoom out to a continent or the whole world, it switches to a fast dot view. Click a plane to see its route, aircraft type, registration and a photo. The search box finds any callsign or ICAO hex.
🔁 Drop-in replacement
Existing code for | Point it at | Works |
OpenSky REST API |
|
|
ADSBExchange v2 / adsb.lol / airplanes.live |
|
|
So tar1090-style tools, OpenSky scripts and existing ADS-B dashboards can use FreeFlight without code changes.
🤖 MCP server for AI agents
{ "mcpServers": { "freeflight": { "command": "freeflight", "args": ["mcp"] } } }This gives your assistant four tools: flights_near, track_flight, emergencies and military_aircraft. You can then ask things like "What's flying over my house right now?" or "Where is BA117 and when did it leave London?"
🧠 How it works
flowchart LR
C[Clients · map · MCP] --> API[FreeFlight API]
API --> K{Grid cache +<br>request coalescing}
K -- miss --> P[Paced fan-out<br>~1 req/s per network]
P --> L[adsb.lol]
P --> A[airplanes.live]
P --> F[adsb.fi]
API -->|large areas / world| O[OpenSky global snapshot<br>cached 90 s – 15 min]
L & A & F --> M[Merge by ICAO hex<br>freshest position wins]
M --> K
API --> E[adsbdb routes · planespotters photos<br>cached 24 h]Grid cache. A request is snapped to a 0.25° grid and a fixed set of radius sizes, so nearby users share the same upstream request. Results are then filtered to each user's exact circle.
Coalescing. If 1,000 identical requests arrive at once, they wait for one upstream call.
Pacing and circuit breaking. No network is called more than about once per second. A network that returns 429 or errors cools down while the others keep answering.
Merge. Records are de-duplicated by ICAO address, the freshest position is kept, and missing fields are filled from the other networks.
📊 Coverage: honest numbers
Where coverage comes from. Live data comes from thousands of volunteer ADS-B and MLAT receivers. Coverage is excellent over North America, Europe, and much of Asia and Oceania. It is patchy over oceans, polar regions and parts of Africa, because there are no ground receivers there.
What gets tracked. Aircraft are tracked when they carry an ADS-B or Mode-S transponder that a receiver can hear. That covers virtually all airliners and most business jets and general aviation. Gliders and aircraft without transponders may be missing.
The world snapshot.
/v1/flights/worldis OpenSky's global view. Anonymous access gets about 100 global queries per day, so FreeFlight refreshes it every 15 minutes by default. Create a free OpenSky API client and setFREEFLIGHT_OPENSKY_CLIENT_IDandFREEFLIGHT_OPENSKY_CLIENT_SECRETto refresh it every 90 seconds.Some networks restrict datacenter IPs. In our GitHub Actions check, adsb.fi and OpenSky answered (12,063 aircraft in the world snapshot) while airplanes.live returned 403 and adsb.lol timed out from GitHub's cloud runners. From home and residential connections all networks normally work. FreeFlight fails over automatically, so you get the networks that are reachable from your server.
Daily health check. The Provider health workflow queries every network from a GitHub runner and posts the results.
⚖️ Data sources & terms
FreeFlight is a client. The data belongs to the networks that collect it. Please respect their terms and support them, ideally by feeding a receiver.
Source | Used for | Terms |
live positions | ODbL 1.0 (open data, attribution) | |
live positions | non-commercial use | |
live positions | non-commercial use, attribution | |
world snapshot | non-commercial research use; commercial licenses available | |
routes and aircraft details | free API | |
photos (credited) | photographer credit and link required |
For commercial use, get a commercial license from the providers, or switch networks off with FREEFLIGHT_PROVIDERS and FREEFLIGHT_OPENSKY=false.
⚙️ Configuration
See .env.example.
Variable | Default | |
|
| Networks to merge |
|
| World snapshot and large areas |
| – | Free OpenSky API client for 10× more world refreshes |
| auto | World refresh interval in seconds |
|
| How long area results are shared between clients |
|
| Fetch photos from planespotters.net |
| – / | Protect a public server |
🛠 Development
pip install -e ".[dev]"
pytest # offline: every upstream is mocked from fixtures
ruff check .
freeflight check # live check from your machinePRs are welcome, especially new data networks, airport and airline databases, and map features.
📄 License
MIT. If FreeFlight is useful to you, please ⭐ star the repo and consider feeding ADS-B data to one of the networks.
See also: FreeSearch API · FreeNews API
This server cannot be deployed
Maintenance
Related MCP Connectors
Aircraft intelligence for AI agents: valuations with uncertainty bands, FAA registry lookups, cost of ownership, comparable aircraft, fleet search, airworthiness directives and STCs, market metrics and forecasts, verified value reports, pre-buy diligence checklists, logbook search and a watchlist. 38 tools; free tier with OAuth or a Windsock API key.
Read-only airport delay, weather, and 24h forecast tools for AI assistants. Airport-level only.
Search award flights and cash fares, optimize points, and predict fares inside ChatGPT and Claude.
Live aircraft near an area
Related MCP Servers
- FlicenseNot gradedqualityDmaintenanceA real-time flight tracking interface for LLMs that connects AI assistants to live aircraft data from ADS-B Exchange, enabling searches by location, specific flight tracking, military aircraft monitoring, and aviation pattern discovery.4-
- AlicenseNot gradedqualityDmaintenanceProvides AI assistants with real-time aircraft tracking, FAA registration, and OpenSky flight data through the Model Context Protocol.1MIT
- AlicenseNot gradedqualityDmaintenanceEnables real-time aircraft tracking from Claude Desktop using the airplanes.live API, supporting searches by callsign, registration, hex ID, and position.9MIT
- AlicenseAqualityCmaintenanceProvides real-time and historical flight data via the Flightradar24 API, enabling AI assistants to track aircraft positions, flight summaries, and airport details.151,608 npm30MIT