MCP server for real-time flight queries using Amadeus API
Flight MCP Server has solid naming conventions and complete input schemas for all four tools. Tool names follow verb_noun patterns (search_flights, get_airport_info, get_flight_status, get_airline_info) which is excellent. All tools have descriptions and properly typed JSON Schema inputs with parameter descriptions. However, critical gaps exist: (1) NO documented output schemas, the code returns types.TextContent but doesn't specify what fields are in the response text or structured format; (2) minimal error handling guidance, validation errors are caught but LLM guidance on recovery is limited; (3) no tool annotations (readOnlyHint, destructiveHint, idempotentHint); (4) parameters lack some constraints (e.g., adults has min/max but return_date has no format validation detail in description); (5) no pagination support declared despite search_flights likely returning multiple results. The server is functional and well-structured but lacks production-grade polish around output documentation and error recovery patterns.
Get information about an airline
Get information about an airport by its code
Get real-time status of a specific flight
Search for flights between two airports
No output schemas documented. All four tools return types.TextContent but do not specify structured field definitions. LLMs cannot plan downstream calls or extract data reliably without knowing response structure.
search_flights has no pagination support or result-limiting mechanism declared. If the API returns many results, LLM context will be exhausted. No 'limit' or 'offset' parameters, and no description of how many results are returned by default.
Error handling is minimal. Validation errors are caught generically in handle_call_tool() and returned as plain text. No error classification (retryable vs user-fixable vs fatal) or actionable recovery guidance (e.g., 'Invalid airport code. Try search_airports()'). LLM cannot self-correct from errors.
Inferred effective spec: <=2025-11-25.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-22 | B | 70 | <=2025-11-25 | v2 |
| 2026-03-09 | F | 43 | - | v1 |
No tool annotations present. All tools are read-only (per the Risk field), but this is not declared in the tool definitions via readOnlyHint. Agents cannot distinguish side-effect-free tools from destructive ones.
Tool descriptions are under-optimized for LLM selection. Some are minimal (e.g., get_airport_info: 'Get information about an airport by its code', 54 chars). Should include context on when to use vs similar tools and what data is returned.