A travel itinerary application with MCP server for managing destinations, attractions, hotels, and creating customized travel itineraries
Travelio has 6 tools with basic schemas and descriptions, but significant gaps prevent higher scores. All tools have descriptions (10-100 chars, mostly adequate) and input schemas with type definitions. However, parameter descriptions are minimal or missing context. Output schemas are undocumented, LLMs cannot plan downstream calls or extract chaining IDs. No error handling guidance, no enum constraints on filter objects, and no pagination support for list-returning tools (get_destinations, get_attractions, get_hotels). The create_itinerary tool modifies state but lacks confirmation/dry-run patterns. Tool naming is clear (verb_noun), but composition issues exist: cluster_attractions and create_itinerary both perform clustering internally, risking duplication. No tool annotations (readOnlyHint/destructiveHint) despite clear risk levels.
Cluster attractions based on proximity for multi-day planning.
Create a new itinerary.
Get attractions for a destination.
Get all destinations or search by name.
Get hotels in a destination area.
Get an existing itinerary by ID.
Output schemas undocumented. LLMs cannot infer what fields are returned or plan chaining calls. E.g., get_destinations returns List[Dict] with no field documentation; create_itinerary returns Dict with unknown structure.
Filter parameters (get_attractions, get_hotels) accept Dict with no schema or enum constraints. LLMs cannot discover valid filter keys (categories, ratings, price, amenities). Invites hallucinated filter names.
No pagination support. get_destinations, get_attractions, get_hotels return unbounded lists. Large result sets blow context window and degrade LLM reasoning. Missing limit, offset, and total_count fields.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | F | 49 | 2026-07-28+ | v2 |
create_itinerary modifies state (saves to database) but lacks confirmation/dry-run pattern. Agents cannot preview itinerary before committing. No error guidance if save fails.
No tool annotations. Tools lack readOnlyHint/destructiveHint/idempotentHint metadata. Agents cannot distinguish safe reads from destructive writes without parsing descriptions.