Title100/100
Search hotels
The title clearly communicates the tool’s action and subject. Keep it concise.
Description90/100
Search for hotels in a specific location. Use this when the user wants to find hotels, accommodation, or places to stay. Returns top 8 hotels matching the criteria with photos, ratings, and prices. CRITICAL - PROMPT FIELD: - Copy the user's EXACT message into "prompt" - character-for-character, no changes. - If user wrote "أبحث عن فندق في دبي", pass that EXACT Arabic text. - NEVER translate the prompt field. OTHER FIELDS: Must be in English (location, dates, etc). IMPORTANT - LOCATION FORMAT: Always provide the full location name with city and country: - For cities: "City, Country" (e.g., "Dubai, United Arab Emirates", "Riyadh, Saudi Arabia") - For areas/neighborhoods: "Area, City, Country" (e.g., "Dubai Marina, Dubai, United Arab Emirates", "JBR, Dubai, United Arab Emirates", "Al Olaya, Riyadh, Saudi Arabia") Always use the official/correct area name as it appears on maps. PRICE FIELDS IN THE RESPONSE - read this carefully so you don't misquote prices: Each hotel has price.perNight (average per-night rate), price.total (sum across all nights), and price.nights (number of nights). When mentioning a price to the user, use the field that matches what they asked for: - "X per night" / "Y a night" / "ليلة" → use price.perNight - "total trip cost" / "for the whole stay" / "السعر الإجمالي" → use price.total - If unclear, mention both: "SAR 1,500/night (SAR 7,500 total for 5 nights)". NEVER invent a per-night value by dividing price.total by anything. NEVER claim price.total is a per-night rate. The two numbers are already computed for you. DATE PRE-VALIDATION (HARD — DO NOT CALL THE TOOL IF ANY OF THESE FAIL): Before calling search_hotels, validate the dates against today. If any check fails, do NOT call the tool. Reply directly to the user, explain which date is invalid, and ask them to provide corrected dates. - checkIn must be today or later. If checkIn is in the past, do NOT call the tool. - checkOut must be strictly after checkIn. If checkOut is the same day or earlier than checkIn, do NOT call the tool. - Stay length (checkOut - checkIn) must not exceed 28 nights. If longer, do NOT call. Calling the tool with invalid dates and letting the schema reject is NOT acceptable — catch it before the call. OCCUPANCY LIMITS (HARD — DO NOT CALL THE TOOL): The hotel search supports at most 4 rooms per query, and at most 8 total guests (adults + children) across all rooms combined. If the user asks for more (e.g. "5 rooms", "10 people", "9 guests across 3 rooms"), DO NOT call the tool — tell them the limit and ask them to reduce the party size or split the request. STAY LENGTH LIMIT (HARD): Maximum 28 nights per search (checkOut - checkIn ≤ 28 days). If the user requests a longer stay (e.g. "2 months", "30 days"), DO NOT call the tool — tell them the 28-night limit and ask them to split the stay into separate searches. FILTER RULES — READ CAREFULLY, THIS IS THE #1 SOURCE OF BUGS: The "filters" object must be OMITTED entirely unless the user's words explicitly match a specific filter. "Explicitly" means the user used words that directly name the filter concept. Common mistakes to AVOID: - "cheap" / "affordable" / "budget" → set sortBy: "priceAsc". Do NOT invent a priceRange.max number. Only set priceRange when the user states a specific number (e.g. "under $100", "less than 500 SAR", "max budget 200"). - "comfy" / "nice" / "good" / "cozy" / "clean" → these are vibes, NOT filters. Do NOT add starRating, freeCancellation, or priceRange. Leave filters empty. - "organize a trip" / "plan a vacation" / "travel to X" → general travel intent. Do NOT add starRating (e.g. 3-5 stars) or any other filter. Leave filters empty. - "two bedroom" / "apartment" / "suite" → ONLY set propertyType if it matches the enum. Do NOT add freeCancellation or any other unrelated filter. - freeCancellation → ONLY when user literally says "free cancellation", "refundable", or "cancel for free". Words like "flexible", "affordable", "safe" do NOT mean free cancellation. - starRating → ONLY when user says "5-star", "at least 4 stars", "3-star or above", etc. General quality words ("nice", "good", "decent") are NOT star ratings. If in doubt, OMIT the filter. A search with no filters returns more results, which is always better than a search that silently excludes matches the user would have wanted.
The description explains the capability, when to use it, and what to expect.
Inputs75/100
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
prompt
REQUIRED. Copy the user's EXACT original text, character-for-character. If Arabic, pass Arabic. NEVER translate. Used for locale detection and must be present on every tool call.
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
location
Full location name with city and country. For cities: "City, Country" (e.g., "Dubai, United Arab Emirates"). For areas/neighborhoods: "Area, City, Country" (e.g., "Dubai Marina, Dubai, United Arab Emirates"). For specific hotels: "Hotel Name, City, Country" (e.g., "Radisson Blu Dubai Waterfront, Dubai, United Arab Emirates").
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
checkIn
Check-in date in YYYY-MM-DD format. Must be today or later — if the user gives a past date, do NOT call this tool, ask for a corrected date instead. Stay length (checkOut - checkIn) must not exceed 28 nights.
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
checkOut
Check-out date in YYYY-MM-DD format. Must be strictly after checkIn — if the user gives a checkOut on or before checkIn, do NOT call this tool, ask for a corrected date instead. Total stay must not exceed 28 nights.
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
rooms › items › adultsCount
Number of adults in this room
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
rooms › items › childrenCount
Number of children in this room
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
rooms › items › childrenAges
Ages of children (0-11 only). Guests aged 12+ MUST be counted as adults in adultsCount, NOT listed here.
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
filters › roomBasis
ONLY set when user explicitly asks for meal plan (e.g. "with breakfast" → BB, "half board" → HB, "full board" → FB, "all-inclusive" → AI, "room only" → RO). Do NOT infer.
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
filters › freeCancellation
ONLY set when user literally says "free cancellation", "refundable", or "cancel for free". Words like "flexible", "affordable", "safe" do NOT mean free cancellation. Do NOT infer.
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
filters › starRating › min
Minimum star rating (1-5)
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
filters › starRating › max
Maximum star rating (1-5)
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
filters › priceRange › min
Minimum price
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
filters › priceRange › max
Maximum price
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
filters › propertyType
ONLY set when user explicitly asks for a property type (e.g. "find me a resort", "apartment in Dubai"). For serviced-apartment queries, use "Hotel Apartment" — the Almosafer catalog under-tags "Serviced Apartment" and it returns zero results. Do NOT infer from hotel name.
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
sortBy
Sort order. Set to "priceAsc" when the user explicitly mentions cheapness (trigger words: "cheapest", "cheap", "cheaper", "budget", "affordable", "lowest price"). Set to "priceDesc" for "most expensive", "highest price". Set to "rating" ONLY when user explicitly asks for "top-rated", "best-reviewed", "highest-rated", "best quality" hotels (sorts by guest review score descending). Otherwise leave unset — default is "priority" (best match). Do NOT infer from soft words like "good", "nice", "great", "best" alone.
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
Annotations75/100
Declare idempotentHint based on the tool’s actual behavior.
{
"readOnlyHint": true,
"openWorldHint": false,
"destructiveHint": false
}Output schema0/100
No output schema is declared. Add one for structured results so clients can interpret returned fields.
Not declared