MCP server for real-time flight data, airport operations, and arrival planning using AviationStack API
SkyMate defines 4 tools with clear verb-noun naming (search_*, build_*) and basic descriptions. All tools have input schemas with type definitions and parameter descriptions. However, descriptions are minimal (10-60 chars), falling below the 50-200 char baseline for LLM-optimized docs. Output schemas are not documented, LLMs cannot predict response structure. Error handling is absent; tools return generic 'not found' messages without recovery guidance. No parameter constraints (enums, ranges) despite accepting free-form strings like airport_iata. The 'limit' parameter lacks bounds documentation. Tools are read-only (good for safety) but lack idempotent/readonly annotations.
Build a step-by-step arrival plan for a flight including terminal, gate, and ground transportation guidance
Search for arriving flights at an airport by IATA code
Search for departing flights from an airport by IATA code
Search for real-time flight status by IATA flight code
Output schemas not documented. LLMs cannot predict response structure (e.g., 'found' boolean, 'flight' object fields, 'plan' array). Forces agents to guess field names for downstream processing.
Descriptions are too brief (10-60 chars vs. 50-200 char baseline). 'Search for real-time flight status by IATA flight code' lacks context on when to use this vs. search_departures/arrivals, what fields are returned, or error cases.
'limit' parameter in search_departures and search_arrivals lacks bounds. No min/max documented. LLMs could pass 0, negative, or 10000+ values, breaking pagination or API limits.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | D | 55 | 2026-07-28+ | v2 |
No error recovery guidance. 'No real-time flight found for AA100' tells LLM nothing, should suggest 'Try search_departures() to see available flights' or 'Check IATA code format (e.g., AA100)'.
No tool annotations (readOnlyHint, idempotentHint). All 4 tools are read-only and safe to retry, but LLMs cannot infer this without explicit hints.