A FastAPI-based REST API for managing travel itineraries with support for creating, retrieving, and recommending itineraries based on duration. Stores itinerary details including days, hotel stays, transfers, and activities.
Server has 3 tools with complete input schemas and descriptions, but quality is inconsistent. Tool naming follows verb_noun convention (create_, get_). Descriptions are present but generic (avg 95 chars, below 194-char baseline). Parameter descriptions exist but lack constraints (no enums, ranges, or format specs). Output schemas documented in code but not exposed to LLM. No error handling guidance, no idempotency markers, no pagination support despite potential for large result sets. create_itinerary has deeply nested input (days→hotels/transfers/activities) but no validation rules documented. get_recommendations returns 404 on empty results, error lacks recovery guidance.
Create a new travel itinerary with details including name, region, number of nights, and daily activities (hotels, transfers, activities)
Retrieve all travel itineraries from the database
Get recommended itineraries filtered by number of nights. Returns all itineraries matching the specified duration.
No pagination support on list endpoints. get_all_itineraries and get_recommendations return unbounded lists; large datasets will exhaust context window. Missing limit, offset, and total_count fields.
Error responses lack recovery guidance. get_recommendations returns HTTPException(404) with generic 'No itinerary found', does not suggest alternatives or next steps for the LLM.
Parameter descriptions lack constraints. 'nights' in get_recommendations has no range (e.g., 1 - 365). 'day_number' in create_itinerary has no validation rule. LLMs will pass invalid values without guidance.
No tool annotations (readOnlyHint, destructiveHint, idempotentHint). create_itinerary is destructive (WRITE risk) but lacks annotation. get_* tools are read-only but unmarked. LLM cannot infer safety properties.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | D | 53 | 2026-07-28+ | v2 |
Output schema not exposed to LLM. ItineraryOut schema defined in code but not returned in tool definition. LLM cannot plan downstream calls or extract required fields (e.g., itinerary_id for follow-up operations).