An AI Engineering system for travel planning with hotel search, flight pricing, weather forecasts, airport lookup, and currency conversion capabilities
This travel agent MCP server has 14 tools with READ_ONLY operations. While most tools have descriptions and visible schemas, quality is inconsistent. Naming is verb-driven and mostly clear (search_*, get_*, check_*), but descriptions vary widely in completeness. Many parameter descriptions are present but generic. Critical gaps: no tool annotations (readOnlyHint present via risk metadata but not formally in output), no error handling guidance visible in source, no documented output schemas, and STDIO-only transport (hard cap 50). The booking_tool.py snippet shows incomplete implementation (cut off mid-string). Overall, this is a functional but unpolished implementation suitable for development but not production agent deployment.
Check visa requirements for traveling from one country to another
Convert currency using real-time exchange rates
Estimate flight duration between two cities or airports
Get detailed weather forecast using wttr.in (completely free, no API key needed)
Get upcoming events, festivals, concerts, and local activities calendar for any destination. CALL THIS when user asks: 'What events are happening in [location]?', 'Things to do in [location]', 'Any festivals in [location]?'. Returns: Event name, date, type (festival/concert/exhibition/market), description
Get flight price trends and airfare cost estimates between two locations. CALL THIS when user asks: 'How much are flights to [destination]?', 'What's the airfare from [origin] to [destination]?', 'Flight costs to [destination]'. Returns: Average flight cost range, economy class pricing
Three tools (convert_currency, estimate_flight_time, check_visa_requirements) have minimal descriptions (all under 50 chars). This violates the 10-1024 character guideline and provides insufficient context for LLM tool selection. 'Convert currency using real-time exchange rates' does not explain when or why to use it.
No documented output schemas visible in source code. The rubric baseline states 100% of A+ tools have documented return types. For example, search_airports returns 'Formatted string with airport details' but the exact structure (JSON object vs string vs array) is not declared. This forces LLMs to guess field names for downstream tool chaining.
Inferred effective spec: <=2025-11-25.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-22 | C | 65 | <=2025-11-25 | v2 |
| 2026-03-09 | F | 36 | - | v1 |
Get current hotel pricing and accommodation cost trends for any destination. CALL THIS when user asks: 'How much are hotels in [location]?', 'What's the average hotel price in [location]?', 'Is accommodation expensive in [location]?'. Returns: Average nightly rates, price range (low-high), hotel categories (star standard)
Get tourist traffic analytics, crowd levels, and visitor statistics for destinations. CALL THIS when user asks: 'Is [location] crowded/busy?', 'What's the tourist season in [location]?', 'When is [location] least crowded?'. Returns: Tourist volume level (low/moderate/high), daily visitor counts, season classification
Get 5-6 day weather forecast with temperature, precipitation, and conditions for any city worldwide. ALWAYS call this when user mentions: Weather, temperature, forecast, climate conditions. Returns: Daily min/max temperature (°C), precipitation (mm), weather conditions (clear/rain/snow/etc.) Data source: Open-Meteo API (real-time, no API key needed)
Search for airports using Azure AI Search or fallback database. Search for airports by city, country, or airport code.
REQUIRED: Search travel database by filters (climate, budget, season). Use when user asks about 'budget level', 'climate type', 'best season', or wants filtered results like 'expensive destinations', 'tropical places', 'spring travel'. Returns filtered results from travel-index.
Search for hotel destinations on Booking.com by city/location name. CALL THIS FIRST when user asks about hotels - you need the dest_id for hotel searches. Use when: User wants to search hotels in a city/location, Need to get destination ID before searching for hotels. Returns: List of matching destinations with their dest_id values. The dest_id is needed for the search_hotels function.
Get real-time hotel listings with prices from Booking.com for a destination. IMPORTANT: You need a dest_id first - use search_hotel_destinations to get it. Use when: User wants hotel prices and availability. Returns: Hotel names, ratings, prices, and details. Prices are real-time from Booking.com.
REQUIRED: Search the indexed travel database whenever user asks about destinations, places, or travel info. Use when user says 'search', 'find', 'database', 'tell me about [place]', or asks for destination information. Returns data from the travel-index with budget levels, climate info, and descriptions.
STDIO transport only. Hard capped at protocol readiness score 50. STDIO is not remotely accessible and cannot be invoked by hosted MCP clients or cloud-based LLM agents. To be production-ready, implement Streamable HTTP transport (current standard per spec 2026-07-28).
No tool annotations detected in source (readOnlyHint, destructiveHint, idempotentHint). While all 14 tools are READ_ONLY (no side effects), this metadata is not explicitly declared in the tool definitions. Per current spec, tool annotations guide agent planning and safety. All tools should carry readOnlyHint:true.
Parameter descriptions for search criteria filters are generic. E.g., search_destinations_by_criteria has parameters 'climate', 'budget', 'activities', 'season' but descriptions do not list valid enum values or formats. Without explicit constraints, LLMs may hallucinate invalid values like 'climate=purple' or 'season=springtime'.
No error handling guidance visible in tool implementations. For example, search_airports falls back to a local database if Azure fails, but the response does not guide the agent on what to do if the search returns no results or if both Azure and local fail. Per pattern:recovery-guide, error responses must tell the LLM what to do next.
Incomplete source code: booking_tool.py snippet cuts off mid-implementation (ends with 'RAPIDAPI_K'). Cannot fully assess parameter validation, error handling, or output formatting for search_hotels. This blocks definitive scoring of these critical tools.
search_hotel_destinations and search_hotels form a required multi-step sequence. The descriptions mention 'CALL THIS FIRST' and 'You need a dest_id first', which is helpful but not enforced. Per pattern:tool-chain, output from tool A must include IDs that tool B requires. Verify search_hotel_destinations actually returns 'dest_id' as a field, and search_hotels accepts that exact field name.