Title98/100
Search Hotels
The title clearly communicates the tool’s action and subject. Keep it concise.
Description98/100
Search Almatar hotel inventory by destination and dates. Use this tool first in the hotel booking flow. Returns up to 10 best-value hotels (ranked by combined price, rating, and review count). OPTIONAL FILTERS: When the user asks to refine results ("only 4-star hotels", "under SAR 1500 per night", "in Marina"), re-call this tool with the appropriate optional fields: - minRating: 4 for "4 star and above" - maxPricePerNight: 1500 for "under SAR 1500 per night" - locationContains: "Marina" for "in Marina" (case-insensitive substring) Combine filters freely. Each refinement is a fresh API call. OUTPUT HANDLING (important): This tool renders an interactive widget that displays hotels as cards. Each card has two buttons: "View more about this hotel" (opens an in-widget detail blow-out with a left list of the other stays) and "View on Almatar.com" (opens the booking page). The user browses and books entirely through the widget and almatar.com. - When the widget IS displayed (a normal chat): do NOT repeat, paraphrase, or summarise the hotel list - the widget IS the display. A single brief sentence such as "Here are the stays - tap a card to see more." is enough, and only if you must say anything at all. - When the interactive widget is NOT shown to the user (e.g. ChatGPT agent / "Work" mode, or any surface that does not render app components): the tool result ALSO contains a ready-to-use text list with per-hotel "View on Almatar.com" markdown links. In that case present the top stays as that text (name, location, rating, price, and the booking links) so the user can still act. Do NOT say the search "failed to render" or "failed to load" and do NOT silently retry - the data is in the result; surface it. This is the only hotel tool. There is no in-chat rooms/cart/payment step - booking happens on almatar.com via the card's "View on Almatar.com" button. Do not attempt to call any getHotelRooms / addHotelToCart / createBooking tools (they are intentionally not available).
The description explains the capability, when to use it, and what to expect.
Inputs73/100
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
destinationName
Free-form destination name, for example "Dubai"
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
lat
Latitude of the destination
Clarify units, where to obtain this value, or conventions not already expressed in the schema.
lng
Longitude of the destination
Clarify units, where to obtain this value, or conventions not already expressed in the schema.
checkIn
Check-in date as ISO YYYY-MM-DD
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
checkOut
Check-out date as ISO YYYY-MM-DD
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
adults
Number of adult guests, at least 1
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
children
Number of children, defaults to 0
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
minRating
Minimum star rating, e.g. 4 for "4 star and above"
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
maxPricePerNight
Maximum price per night in SAR. Excludes options above this cap.
Clear enough to supply this argument.
locationContains
Case-insensitive substring of the hotel location, e.g. "Marina" or "Downtown".
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.
{
"title": "Search Hotels",
"readOnlyHint": true,
"openWorldHint": true,
"destructiveHint": false
}Output schema66/100
Describe the returned fields so an agent can interpret the result.
View output schema
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"destinationName",
"dates",
"guests",
"results",
"hotels",
"viewMoreUrl"
],
"properties": {
"dates": {
"type": "object",
"required": [
"checkIn",
"checkOut"
],
"properties": {
"checkIn": {
"type": "string"
},
"checkOut": {
"type": "string"
}
},
"additionalProperties": false
},
"guests": {
"type": "object",
"required": [
"adults",
"children"
],
"properties": {
"adults": {
"type": "number"
},
"children": {
"type": "number"
}
},
"additionalProperties": false
},
"hotels": {
"type": "array",
"items": {
"type": "object",
"required": [
"hotelId",
"name",
"location",
"rating",
"reviewsCount",
"mainImage",
"price",
"currency"
],
"properties": {
"name": {
"type": "string"
},
"price": {
"type": "number"
},
"rating": {
"type": "number"
},
"hotelId": {
"type": "string"
},
"viewUrl": {
"type": "string"
},
"currency": {
"type": "string",
"const": "SAR"
},
"location": {
"type": "string"
},
"perNight": {
"type": "boolean"
},
"amenities": {
"type": "array",
"items": {
"type": "string"
}
},
"mainImage": {
"type": "string"
},
"refundable": {
"type": "boolean"
},
"reviewsCount": {
"type": "number"
}
},
"additionalProperties": false
}
},
"results": {
"type": "array",
"items": {
"type": "object",
"required": [
"hotelId",
"name",
"location",
"rating",
"reviewsCount",
"mainImage",
"price",
"currency"
],
"properties": {
"name": {
"type": "string"
},
"price": {
"type": "number"
},
"rating": {
"type": "number"
},
"hotelId": {
"type": "string"
},
"viewUrl": {
"type": "string"
},
"currency": {
"type": "string",
"const": "SAR"
},
"location": {
"type": "string"
},
"perNight": {
"type": "boolean"
},
"amenities": {
"type": "array",
"items": {
"type": "string"
}
},
"mainImage": {
"type": "string"
},
"refundable": {
"type": "boolean"
},
"reviewsCount": {
"type": "number"
}
},
"additionalProperties": false
}
},
"viewMoreUrl": {
"type": "string"
},
"totalAvailable": {
"type": "number"
},
"destinationName": {
"type": "string"
}
},
"additionalProperties": false
}