MCP server for AENA Spanish airport flight data - unified over the public website API and the OAuth2 REST API
Three well-named, read-only tools with complete input schemas and solid descriptions. search_flights and get_flight have rich, LLM-optimized descriptions (150 - 200 chars) explaining WHAT, WHEN, and HOW. All parameters are typed and described. Tool annotations (readOnlyHint, openWorldHint) are present. However, output schemas are not formally documented, responses are free-text formatted strings rather than structured objects. Error handling is basic (missing credentials returns text error, but no recovery guidance for invalid airports or API failures). list_airports lacks parameter descriptions (though it takes none). No pagination support despite search_flights potentially returning large result sets.
Find one flight by number at an airport. Convenience wrapper over search_flights that returns the single best match.
List all Spanish airports in the AENA network with IATA/ICAO codes and city. Fetched live, so always current.
List flights for an AENA airport (arrivals or departures). Codeshares of the same physical flight are collapsed into one entry by default. Filter by flight number and/or a local-time window (e.g. afternoon = fromLocal 12:00, toLocal 20:00). Times in the output are local Madrid time.
Output schemas not documented. Tools return formatted text strings rather than structured JSON objects. LLMs cannot reliably extract fields for downstream tool calls or data extraction.
No pagination support. search_flights can return many flights but lacks limit/offset/cursor parameters and total count. Large result sets will blow context windows.
Error handling lacks recovery guidance. Missing credentials returns a text error; invalid airport codes, API timeouts, and network failures have no actionable guidance for the LLM.
list_airports description is generic (60 chars). Does not explain when to call it, what structure it reveals, or how to use results downstream.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | C | 62 | 2026-07-28+ | v2 |
No input validation or constraint documentation for airport codes. Description says 'IATA code' but does not validate length or format; LLMs may pass invalid codes.