Skip to main content
Glama
Cyreslab-AI

flightradar24-mcp-server

Flightradar24 MCP Server

A Model Context Protocol (MCP) server that provides access to flight tracking data from the official, commercial Flightradar24 API (fr24api.flightradar24.com).

This server previously called an undocumented, reverse-engineered mobile-app endpoint (api.flightradar24.com/v1/...). It has been migrated to FR24's real, documented, credit-metered API. See "Migration notes" below for what changed.

Features

Tools

  • get_flight_data: Get real-time position data for a specific flight that is currently airborne, by flight number or callsign

  • search_flights: Search for currently airborne flights by airline, registration, aircraft type, route, altitude, or geographic area

  • get_flight_summary: Get takeoff/landing history for completed flights in a date/time window

  • get_flight_tracks: Get the detailed position track for one specific flight by its FR24 flight ID

  • get_airport_data: Get information about an airport by its exact IATA or ICAO code

  • get_airline_data: Get an airline's name and IATA code by its ICAO code

  • get_flights_in_zone: Get all currently airborne flights within a geographic bounding box

  • get_api_usage: Get a summary of your FR24 API credit usage per endpoint

Resources

  • flight://{flight_number}: Real-time position of a currently airborne flight by IATA or ICAO flight number

  • airport://{code}: Information about an airport by exact IATA or ICAO code

  • airline://{icao}: Information about an airline by ICAO code

  • flighttrack://{flight_id}: Detailed position track for a specific flight by FR24 flight ID

  • zone://{north}/{south}/{west}/{east}: Currently airborne flights in a specified geographic zone

Related MCP server: mcp-metar

Installation

  1. Clone this repository

  2. Install dependencies:

    npm install
  3. Build the server:

    npm run build

Getting an FR24 API key

  1. Create an account and subscribe to an API plan at fr24api.flightradar24.com.

  2. Generate a token from the Key Management page.

  3. Set it as the FR24_API_KEY environment variable (see Configuration below).

Pricing / credits, in brief

The FR24 API is credit-metered, not a flat-rate subscription: each request costs credits based on how many entities (flights, airports, etc.) are returned, and the price per entity varies by endpoint. For example, a Live Flight Positions (light) query costs roughly 6 credits per flight returned. Subscription credits refresh monthly and do not roll over; top-up credits expire after 6 months. Use the get_api_usage tool (or the /usage endpoint directly) to monitor consumption, and see Subscriptions & credits and Credit overview for current, authoritative pricing.

Configuration

The server requires an FR24 API key to function. You can set this in your MCP settings configuration file:

{
  "mcpServers": {
    "flightradar24": {
      "command": "node",
      "args": ["/path/to/flightradar24-server/build/index.js"],
      "env": {
        "FR24_API_KEY": "YOUR_FR24_API_KEY_HERE"
      },
      "disabled": false,
      "autoApprove": []
    }
  }
}

Usage Examples

Get Flight Data

<use_mcp_tool>
<server_name>flightradar24</server_name>
<tool_name>get_flight_data</tool_name>
<arguments>
{
  "flight_number": "BA123"
}
</arguments>
</use_mcp_tool>

Search Flights

<use_mcp_tool>
<server_name>flightradar24</server_name>
<tool_name>search_flights</tool_name>
<arguments>
{
  "airline_icao": "BAW",
  "limit": 5
}
</arguments>
</use_mcp_tool>

Get Flight Summary (historical / completed flights)

<use_mcp_tool>
<server_name>flightradar24</server_name>
<tool_name>get_flight_summary</tool_name>
<arguments>
{
  "flight_datetime_from": "2024-01-01T00:00:00Z",
  "flight_datetime_to": "2024-01-02T00:00:00Z",
  "route": "JFK-LAX"
}
</arguments>
</use_mcp_tool>

Get Flight Track

<use_mcp_tool>
<server_name>flightradar24</server_name>
<tool_name>get_flight_tracks</tool_name>
<arguments>
{
  "flight_id": "3b3d2e3f"
}
</arguments>
</use_mcp_tool>

Get Airport Data

<use_mcp_tool>
<server_name>flightradar24</server_name>
<tool_name>get_airport_data</tool_name>
<arguments>
{
  "code": "LHR"
}
</arguments>
</use_mcp_tool>

Get Flights in Zone

<use_mcp_tool>
<server_name>flightradar24</server_name>
<tool_name>get_flights_in_zone</tool_name>
<arguments>
{
  "north": 51.6,
  "south": 51.4,
  "west": -0.5,
  "east": 0.2
}
</arguments>
</use_mcp_tool>

Access Flight Resource

<access_mcp_resource>
<server_name>flightradar24</server_name>
<uri>flight://BA123</uri>
</access_mcp_resource>

Access Zone Resource

<access_mcp_resource>
<server_name>flightradar24</server_name>
<uri>zone://51.6/51.4/-0.5/0.2</uri>
</access_mcp_resource>

Migration notes (v1 → v2)

Version 2 replaces every call to the old, undocumented api.flightradar24.com/v1 host with FR24's real, official API at fr24api.flightradar24.com, confirmed against FR24's own fr24api-mcp reference server. This changed both the environment variable and the tool set:

  • Env var renamed: FLIGHTRADAR24_API_KEY → FR24_API_KEY.

  • search_airports removed: the real API only supports an exact IATA/ICAO code lookup (/static/airports/{code}) — there is no name/country/free-text search to fake. get_airport_data now covers the one real capability.

  • get_aircraft_data removed: the real API has no aircraft-by-registration registry at all (no owner, operator, manufacturer, MSN, or age data anywhere in its documented contract). Registration remains available only as a filter on search_flights, get_flight_summary, and live/historic position queries — it can no longer be used to look up static aircraft details.

  • get_flight_summary added: the real API has no single "flight info" endpoint with scheduled, estimated, and real times like the old one did. Live position data (via get_flight_data) only exists while a flight is airborne; get_flight_summary (backed by /flight-summary) is the real equivalent for completed/historical flights.

  • get_flight_tracks added: replaces the "trail" field that used to be embedded in get_flight_data's response. The real API exposes this as its own endpoint (/flight-tracks), keyed by FR24 flight ID (fr24_id) rather than flight number.

  • get_api_usage added: the real API is credit-metered per request; this tool wraps its /usage endpoint (rate-limited by FR24 to 1 call/minute) so usage can be monitored from the client.

  • Airline lookup is ICAO-only: the real airline endpoint takes only an ICAO code and returns only { name, iata, icao } — no IATA-code lookup and no country field, unlike the old tool.

  • All tools require Accept-Version: v1: this is sent automatically by the client on every request, as required by the FR24 API.

  • All tools now carry readOnlyHint: true / openWorldHint: true annotations, since every one of them is a pure read against a third-party data source.

License

This project is licensed under the MIT License - see the LICENSE file for details.

Available Tools

8 tools
get_airline_dataA
Read-only

Get an airline's name and IATA code by its ICAO code.

ParametersJSON Schema
NameRequiredDescriptionDefault
icaoYesICAO (3-letter) airline code (e.g., 'BAW' for British Airways). IATA-only lookup is not supported by the FR24 API.

Output Schema

ParametersJSON Schema
NameRequiredDescription
nameYes
codesYes
updatedYes

TDQS

A4.1/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already provide readOnlyHint and openWorldHint, and the description does not repeat them. It adds no extra behavioral details like not-found behavior or rate limits, but it doesn't contradict the annotations either.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

One sentence, front-loaded with the action and result, and zero filler. Every word earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a one-parameter read-only lookup with a rich input schema, output schema, and annotations, the description covers the essential behavior. There are no critical gaps that would prevent correct invocation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Input schema coverage is 100%, including an example and an explicit note that IATA-only lookup is unsupported. The tool description only says 'by its ICAO code,' adding no meaning beyond the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Uses a specific verb ('Get') and resource ('airline's name and IATA code') with a clear lookup key (ICAO code). This cleanly differentiates it from sibling tools that concern flights, airports, or searches.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies the usage context: use when you have an ICAO code and need the airline name/IATA code. It doesn't name alternatives, but none of the sibling tools overlap directly, so the guidance is sufficient.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_airport_dataA
Read-only

Get information about an airport by its exact IATA or ICAO code.

ParametersJSON Schema
NameRequiredDescriptionDefault
codeYesIATA (3-letter) or ICAO (4-letter) airport code
detail_levelNoAmount of detail to return. "full" (default) includes coordinates, elevation, city, and timezone; "light" returns only name and codes and costs fewer FR24 API credits.

Output Schema

ParametersJSON Schema
NameRequiredDescription
nameYes
codesYes
updatedYes
locationNo
timezoneNo

TDQS

A3.7/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The annotations already declare readOnlyHint=true and openWorldHint=true, and the description's 'Get information' is consistent with that. The description adds no behavioral context beyond the annotations, so it meets the baseline but provides no extra transparency about limitations or edge cases.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, front-loaded sentence with no filler. It communicates the tool's purpose and lookup key efficiently, earning every word.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple read-only lookup tool, the description plus the detailed input schema and output schema provide enough information for an agent to call it correctly. No critical context appears missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, and both parameters are already documented with meaningful descriptions, including the enum for detail_level. The description adds only the word 'exact,' which slightly reinforces the code format, but it does not materially add value beyond the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description names a specific verb ('Get') and resource ('information about an airport') and adds a precise lookup criterion ('exact IATA or ICAO code'), which makes the core purpose clear. It distinguishes the tool from sibling flight/airline tools by resource type, though it does not name a sibling or explicitly contrast itself.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies a clear use case: call this when you need airport details and have a specific IATA or ICAO code. However, it provides no explicit guidance about alternatives or when not to use this tool, leaving some inference to the agent.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_api_usageA
Read-only

Get a summary of FR24 API credit usage per endpoint. Note: FR24 rate-limits this endpoint to 1 call per minute.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
usageYes
timestampYes

TDQS

A4.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already mark the endpoint as read-only and open-world, and the description adds meaningful behavioral detail beyond those hints: the rate limit and the per-endpoint grouping. No contradiction exists.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two short sentences: the first states the purpose, and the second adds a critical rate-limit caution. Every word earns its place with no redundancy.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a zero-parameter read-only endpoint with an output schema, the description covers the purpose, the scope (per endpoint), and the key operational constraint. Nothing an agent needs to call it correctly is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool has zero parameters and schema coverage is 100%, so the schema already fully describes everything an agent needs. The description adds no parameter semantics, but none are necessary.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb ('Get') and resource ('a summary of FR24 API credit usage per endpoint'). It is immediately distinguishable from all sibling tools, which focus on flight, airport, and airline data rather than API usage.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Clearly indicates when to use the tool: when the agent needs a per-endpoint summary of FR24 API credit usage. It also supplies operational guidance by warning about the 1-call-per-minute rate limit. It does not name alternatives, but no sibling tool serves the same purpose.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_flight_dataA
Read-only

Get real-time position data for a specific flight that is currently airborne, by flight number or callsign. Uses the FR24 live flight positions endpoint, so it only returns a result while the flight is in the air. For completed, scheduled, or historical flights, use get_flight_summary instead.

ParametersJSON Schema
NameRequiredDescriptionDefault
callsignNoATC callsign of the flight (e.g., 'BAW123'), used instead of flight_number.
detail_levelNoAmount of detail to return. "full" (default) includes route, registration, and aircraft type; "light" returns only position data and costs fewer FR24 API credits.
flight_numberNoIATA or ICAO flight number (e.g., 'BA123' or 'BAW123').

Output Schema

ParametersJSON Schema
NameRequiredDescription
countNo
queryYes
flightsYes
messageNo
timestampYes

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description discloses a key behavioral trait: the tool only returns a result while the flight is in the air, which is critical for an agent to understand. The annotations (readOnlyHint=true, openWorldHint=true) already indicate safety and non-exhaustiveness, and the description adds the real-time constraint. It doesn't mention rate limits or credit costs, but the detail_level parameter description covers credit costs partially.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is two sentences, front-loads the core purpose, and includes the key constraint and alternative tool. No wasted words.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The description is complete for a read-only lookup tool with a rich schema and output schema. It covers the main usage caveat (airborne only) and routes to the right sibling. It could mention that the tool may return no result if the flight is not found, but the 'only returns a result while in the air' statement implies this. Minor gap.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the schema already documents all parameters. The description adds context about the flight_number/callsign alternatives and the real-time nature, but doesn't add much beyond the schema. Baseline 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool's function: retrieving real-time position data for a currently airborne flight by flight number or callsign. It explicitly distinguishes itself from get_flight_summary for non-airborne flights, which helps an agent differentiate it from siblings.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explicitly states when to use this tool (for currently airborne flights) and when not to use it (for completed, scheduled, or historical flights), directing the agent to get_flight_summary instead. This is clear, actionable guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_flights_in_zoneA
Read-only

Get all currently airborne flights within a specified geographic bounding box.

ParametersJSON Schema
NameRequiredDescriptionDefault
eastYesEastern longitude bound
westYesWestern longitude bound
limitNoMaximum number of results to return (default: 50, max: 30000).
northYesNorthern latitude bound
southYesSouthern latitude bound
detail_levelNoAmount of detail to return. "full" (default) includes route, registration, and aircraft type; "light" returns only position data and costs fewer FR24 API credits.

Output Schema

ParametersJSON Schema
NameRequiredDescription
zoneYes
countYes
flightsYes
messageNo
timestampYes

TDQS

A3.8/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true and openWorldHint=true, covering the safety profile. The description adds useful scope ('currently airborne', 'bounding box') but does not mention the optional limit's default/max or the credit-cost difference between detail levels; those details are left to the schema, so this is a minor gap rather than a contradiction.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

One short sentence that front-loads the action and object while capturing the essential scope. There is no filler, redundancy, or unnecessary elaboration.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With a rich output schema, fully described parameters, and readOnly/openWorld annotations, the description is complete enough for an agent to invoke the tool correctly. The main omissions—explicit sibling differentiation and the default limit behavior—are minor because the schema already captures the limit and detail-level semantics.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, and every parameter, including limit and detail_level, has a clear description. The free-text description only restates the bounding-box concept and adds no parameter meaning beyond what the schema already provides, so the baseline of 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific action ('Get') on a specific resource ('currently airborne flights') with a precise geographic scope ('bounding box'). This clearly distinguishes it from sibling tools like get_flight_tracks or get_flight_data, which target different data shapes.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies the use case: querying live flights within a geographic area. However, it does not explicitly say when to prefer this tool over siblings like search_flights or get_flight_data, nor does it provide exclusions or alternative routing guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_flight_summaryA
Read-only

Get takeoff/landing history (flight summary) for flights in a date/time window, optionally filtered by flight number, callsign, registration, airport, route, or aircraft type. Covers completed flights; use get_flight_data for flights currently in the air.

ParametersJSON Schema
NameRequiredDescriptionDefault
sortNoSort order by datetime.
limitNoMaximum number of results to return (default: 10, max: 20000).
routeNoRoute(s) between airports or countries, comma-separated (e.g., 'JFK-LAX'). Max 15.
airline_icaoNoICAO airline code the aircraft is operating as, comma-separated. Max 15.
detail_levelNoAmount of detail to return. "light" (default) covers the essentials and costs fewer FR24 API credits; "full" adds runway, distance, and flight-time data.
registrationNoAircraft registration(s), comma-separated. Max 15.
flight_numberNoFlight number(s), comma-separated (e.g., 'BA123'). Max 15.
flight_datetime_toYesEnd of the datetime window, ISO 8601 (e.g., '2024-01-02T00:00:00Z'). The window can span at most 14 days.
flight_datetime_fromYesStart of the datetime window, ISO 8601 (e.g., '2024-01-01T00:00:00Z').

Output Schema

ParametersJSON Schema
NameRequiredDescription
countYes
queryYes
flightsYes
messageNo
timestampYes

TDQS

A4.1/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint and openWorldHint, so the safety profile is established. The description adds the useful scope that only completed flights appear in the history, but it does not go into rate/credit limits, ordering caveats, or other behavioral details. This is helpful but not rich beyond what annotations already signal.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two compact sentences: the first states the action, scope, and filters; the second states the completion condition and routes to the live alternative. Every clause earns its place and the key scoping constraint is front-loaded.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With full schema descriptions and an output schema, the description only needs to carry selection-level context, which it does: purpose, historical scope, and the alternative for live flights. It loses a point for the unsupported filter list, which makes the prose not fully trustworthy as a summary of capabilities.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% and every parameter has a strong description, so the baseline is 3; however, the prose adds an inaccurate filter list—it names callsign, airport, and aircraft type, none of which exist as parameters in the schema. This can mislead an agent into constructing invalid calls, and the accurate filter set is better conveyed by the schema alone.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with a specific verb and object—'Get takeoff/landing history (flight summary)'—and narrows the resource to flights in a date/time window. It lists optional filter dimensions and explicitly contrasts with get_flight_data for live flights, so an agent can distinguish this tool from siblings immediately.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

'Covers completed flights; use get_flight_data for flights currently in the air' is an explicit when-to-use and alternative rule. It tells the agent the tool is for historical windows and directs live-flight queries elsewhere. No further selection guidance is needed.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_flight_tracksA
Read-only

Get the detailed position track (a series of timestamped lat/lon/altitude/speed points) for one specific flight, identified by its FR24 flight ID (fr24_id). Get the fr24_id from get_flight_data, search_flights, or get_flight_summary first.

ParametersJSON Schema
NameRequiredDescriptionDefault
flight_idYesFR24 flight ID (fr24_id), a hexadecimal string (e.g., '3b3d2e3f').

Output Schema

ParametersJSON Schema
NameRequiredDescription
tracksYes
messageNo
flight_idYes
timestampYes

TDQS

A4.3/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true and openWorldHint=true, so the safety profile is covered. The description adds the output shape (timestamped lat/lon/altitude/speed points) and the prerequisite of obtaining fr24_id first. It does not discuss limitations like track availability, retention, or pagination, but given the read-only annotation the added context is adequate.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is two sentences with no filler. The purpose is front-loaded, and the prerequisite is presented as a clear second sentence. Every word contributes.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a single-parameter read-only tool with an output schema, the description covers purpose, parameter origin, and the primary prerequisite. The annotations handle the read-only and open-world aspects. Nothing essential is missing for an agent to call this tool correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% and the schema already documents flight_id as a hexadecimal string. The description adds value by explaining that the fr24_id must be obtained from specific sibling tools before use, which is useful operational guidance beyond the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool's function: retrieving a detailed position track (series of timestamped lat/lon/altitude/speed points) for one specific flight. It explicitly ties the input to the FR24 flight ID, distinguishing it from list/search tools like search_flights and get_flights_in_zone by limiting scope to a single flight.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives explicit guidance on when to use this tool: after obtaining the fr24_id from get_flight_data, search_flights, or get_flight_summary. It clearly communicates the prerequisite dependency. It does not, however, offer explicit 'when not to use' or alternative routing beyond the prerequisite mention.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

search_flightsA
Read-only

Search for currently airborne flights using the FR24 live flight positions endpoint. At least one filter (besides limit and detail_level) must be provided.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMaximum number of results to return (default: 10, max: 30000).
routeNoRoute(s) between airports or countries, comma-separated (e.g., 'JFK-LAX'). Max 15.
boundsNoGeographic bounds to search within
airline_icaoNoICAO airline code the aircraft is operating as (e.g., 'BAW' for British Airways). IATA airline codes are not supported by the FR24 API for this filter.
detail_levelNoAmount of detail to return. "full" (default) includes route, registration, and aircraft type; "light" returns only position data and costs fewer FR24 API credits.
registrationNoAircraft registration(s), comma-separated (e.g., 'G-EUPT'). Max 15.
aircraft_typeNoICAO aircraft type code(s), comma-separated (e.g., 'A320'). Max 15.
altitude_rangeNoAltitude range(s) in feet (e.g., '0-3000' or '0-3000,30000-40000').

Output Schema

ParametersJSON Schema
NameRequiredDescription
countYes
flightsYes
messageNo
timestampYes
search_paramsYes

TDQS

A4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With readOnlyHint=true and openWorldHint=true annotations already covering the safety profile, the description adds useful context: the tool targets currently airborne flights and enforces a filter requirement. This goes beyond the annotations without contradicting them.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two tight sentences with no filler. The key scoping detail ('currently airborne', 'FR24 live flight positions endpoint') is front-loaded, and the validation constraint is stated directly.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the rich input schema, output schema, and read-only annotations, the description is largely complete for calling the tool correctly. The only notable gap is not mentioning sibling tools or when another endpoint would be more appropriate.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the schema already documents every parameter thoroughly. The description adds only a global filter requirement and does not enrich individual parameter meaning; baseline 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description names a specific verb and resource ('Search for currently airborne flights using the FR24 live flight positions endpoint') and the 'currently airborne' scope helps set it apart from flight-data lookup siblings. It does not explicitly name a sibling alternative, so it misses the top tier for differentiation.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives a clear context (searching currently airborne flights) and an explicit, operational constraint: at least one actual filter must be provided. It does not state when to prefer a sibling such as get_flights_in_zone, so there is no exclusion guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

  1. 8 tool updatesv2.0.0
    • First observedget_airline_data
    • First observedget_airport_data
    • First observedget_api_usage
    • First observedget_flight_data
    • First observedget_flight_summary
    • First observedget_flight_tracks
    • First observedget_flights_in_zone
    • First observedsearch_flights

TDQS

A4/5.0

Scored across 8 tools

Disambiguation4/5

Most tools clearly target distinct resources: airports, airlines, tracks, live positions, and historical summaries. The only mild overlap is between search_flights and get_flights_in_zone, both returning currently airborne flights, but their filter-based vs bounding-box approaches are described clearly enough to avoid significant confusion.

Naming Consistency4/5

The naming follows a mostly consistent get_X pattern (get_flight_data, get_airport_data, get_flight_summary). Minor deviations include search_flights using a different verb and the singular/plural variation between get_flight_tracks and get_flights_in_zone, but the overall convention remains predictable.

Tool Count5/5

Eight tools is well-scoped for a flight tracking and aviation data server. Each tool covers a meaningful query type without unnecessary redundancy, and the count fits comfortably within the ideal range.

Completeness4/5

The core workflows are covered: live flight search, live flight detail, historical summaries, detailed tracks, airport lookup, airline lookup, and API usage. Minor gaps such as airport arrival/departure boards or aircraft-specific data are absent, but common FR24 use cases are fully workable.

Maintenance

ActivityMaintained
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers