get_live_flights_count
Count real-time aircraft flights by specifying criteria like location, flight numbers, aircraft types, or airports to track aviation activity.
Instructions
Returns the count of real-time aircraft flights matching the specified criteria. IMPORTANT: At least one search parameter (other than limit) must be provided and non-empty. Choose from: bounds, flights, callsigns, registrations, painted_as, operating_as, airports, routes, aircraft, altitude_ranges, squawks, categories, data_sources, airspaces, gspeed.
Input Schema
TableJSON Schema
| Name | Required | Description | Default |
|---|---|---|---|
| bounds | No | Coordinates defining an area. Order: north, south, west, east (comma-separated float values). | |
| flights | No | Flight numbers (comma-separated values, max 15). | |
| callsigns | No | Flight callsigns (comma-separated values, max 15). | |
| registrations | No | Aircraft registration numbers (comma-separated values, max 15). | |
| painted_as | No | Aircraft painted in an airline's livery (ICAO code, comma-separated, max 15). | |
| operating_as | No | Aircraft operating under an airline's call sign (ICAO code, comma-separated, max 15). | |
| airports | No | Airports (IATA/ICAO/ISO 3166-1 alpha-2) or countries. Use format: [direction:]<code>. Directions: inbound, outbound, both. | |
| routes | No | Flights between airports/countries (e.g., SE-US, ESSA-JFK). Max 15. | |
| aircraft | No | Aircraft ICAO type codes (comma-separated, max 15). | |
| altitude_ranges | No | Flight altitude ranges in feet (e.g., 0-3000, 5000-7000). | |
| squawks | No | Squawk codes in hex format (comma-separated). | |
| categories | No | Categories of Flights (comma-separated: P, C, M, J, T, H, B, G, D, V, O, N). | |
| data_sources | No | Source of information (comma-separated: ADSB, MLAT, ESTIMATED). | |
| airspaces | No | Flight information region in lower or upper airspace. | |
| gspeed | No | Flight ground speed in knots (single value or range, e.g., 120-140, 80). | |
| limit | No | Limit of results. Recommended, unless needed. Max 30000. |
Implementation Reference
- src/server.ts:171-196 (registration)Registers the 'get_live_flights_count' MCP tool with description, input schema, and handler function that validates, cleans params, fetches count from FR24Client, and returns formatted response.server.tool( 'get_live_flights_count', 'Returns the count of real-time aircraft flights matching the specified criteria. IMPORTANT: At least one search parameter (other than limit) must be provided and non-empty. Choose from: bounds, flights, callsigns, registrations, painted_as, operating_as, airports, routes, aircraft, altitude_ranges, squawks, categories, data_sources, airspaces, gspeed.', liveFlightPositionsCountSchema.shape, async (params: z.infer<typeof liveFlightPositionsCountSchema>) => { try { validateHasRequiredParams(params, ['limit']); const cleaned = cleanParams(params); const result = await fr24Client.getLivePositionsCount(cleaned); return { content: [{ type: 'text' as const, text: `Live flight count: ${result.record_count}` }] }; } catch (error) { return { content: [{ type: 'text' as const, text: `Error: ${error instanceof Error ? error.message : 'Unknown error'}` }], isError: true }; } } );
- src/server.ts:31-51 (schema)Zod schema (baseFlightPositionsSchema) defining optional input parameters for live flight queries, aliased to liveFlightPositionsCountSchema used by the tool.const baseFlightPositionsSchema = z.object({ bounds: z.string().min(1).optional().describe('Coordinates defining an area. Order: north, south, west, east (comma-separated float values).'), flights: z.string().min(1).optional().describe('Flight numbers (comma-separated values, max 15).'), callsigns: z.string().min(1).optional().describe('Flight callsigns (comma-separated values, max 15).'), registrations: z.string().min(1).optional().describe('Aircraft registration numbers (comma-separated values, max 15).'), painted_as: z.string().min(1).optional().describe("Aircraft painted in an airline's livery (ICAO code, comma-separated, max 15)."), operating_as: z.string().min(1).optional().describe("Aircraft operating under an airline's call sign (ICAO code, comma-separated, max 15)."), airports: z.string().min(1).optional().describe('Airports (IATA/ICAO/ISO 3166-1 alpha-2) or countries. Use format: [direction:]<code>. Directions: inbound, outbound, both.'), routes: z.string().min(1).optional().describe('Flights between airports/countries (e.g., SE-US, ESSA-JFK). Max 15.'), aircraft: z.string().min(1).optional().describe('Aircraft ICAO type codes (comma-separated, max 15).'), altitude_ranges: z.string().min(1).optional().describe('Flight altitude ranges in feet (e.g., 0-3000, 5000-7000).'), squawks: z.string().min(1).optional().describe('Squawk codes in hex format (comma-separated).'), categories: z.string().min(1).optional().describe('Categories of Flights (comma-separated: P, C, M, J, T, H, B, G, D, V, O, N).'), data_sources: z.string().min(1).optional().describe('Source of information (comma-separated: ADSB, MLAT, ESTIMATED).'), airspaces: z.string().min(1).optional().describe('Flight information region in lower or upper airspace.'), gspeed: z.string().min(1).optional().describe('Flight ground speed in knots (single value or range, e.g., 120-140, 80).'), limit: z.number().optional().describe('Limit of results. Recommended, unless needed. Max 30000.') }); const liveFlightPositionsSchema = baseFlightPositionsSchema; const liveFlightPositionsCountSchema = baseFlightPositionsSchema;
- src/server.ts:175-195 (handler)Inline handler function for the tool: validates parameters, cleans empty values, calls FR24Client.getLivePositionsCount, returns count or error in MCP format.async (params: z.infer<typeof liveFlightPositionsCountSchema>) => { try { validateHasRequiredParams(params, ['limit']); const cleaned = cleanParams(params); const result = await fr24Client.getLivePositionsCount(cleaned); return { content: [{ type: 'text' as const, text: `Live flight count: ${result.record_count}` }] }; } catch (error) { return { content: [{ type: 'text' as const, text: `Error: ${error instanceof Error ? error.message : 'Unknown error'}` }], isError: true }; } }
- src/fr24-client.ts:74-76 (helper)FR24Client helper method that performs the API request to retrieve live flight positions count.async getLivePositionsCount(params: LiveFlightPositionsCountQueryParams): Promise<RecordCountResponse> { return this.makeRequest<RecordCountResponse>('/live/flight-positions/count', params); }
- src/server.ts:18-29 (helper)Helper function used in handler to ensure at least one non-limit parameter is provided.function validateHasRequiredParams(params: Record<string, any>, excludeKeys: string[] = ['limit']): void { const meaningfulParams = Object.entries(params).filter(([key, value]) => !excludeKeys.includes(key) && value !== null && value !== undefined && value !== '' ); if (meaningfulParams.length === 0) { throw new Error(`At least one parameter other than ${excludeKeys.join(', ')} must be provided and non-empty. Available parameters: ${Object.keys(params).filter(k => !excludeKeys.includes(k)).join(', ')}`); } }