Skip to main content
Glama

Search hotels near a place

search_hotels
Read-onlyIdempotent

Find and compare hotels in India by location and dates, with live prices from multiple sources. Filter by drive time, stars, and price.

Instructions

Finds hotels around a place in India for given dates, with live prices from several sources (trivago, HotelsCasa, Google Hotels via SerpApi, Xotelo/TripAdvisor) merged per hotel. The place is lat+lng, an Indian Railways station code, an airport IATA code, or a place name. Each hotel has its distance, stars, best-supported guest rating and cheapest price in INR, and a section per source with that source's own name, rating, property type, amenities, link and offers (booking site, price, taxes, refundability, room and meals as the source names them). Every source is asked for one room for the party, and each quotes the offer it chooses. With max_drive_minutes, keeps only hotels within that drive time (OpenStreetMap routing with a traffic allowance) and adds drive_minutes. Results are paginated. Every offer per source is in get_hotel_details; times to other places are in compare_hotels. coverage reports what each source returned and what limited it (sources return limited pages, so the list is not exhaustive). Does not book.

Input Schema

NameRequiredDescriptionDefault
latNoLatitude (India). Use with lng.
lngNoLongitude (India). Use with lat.
iataNoIndian airport IATA code, e.g. DEL.
sortNoSort order; drive_time needs max_drive_minutes.distance
limitNoHotels per page.
placeNoPlace name, e.g. 'Taj Mahal' or 'Paharganj, Delhi'; resolved to its best match.
adultsNoAdults (18+) sharing the one room searched for.
offsetNoNumber of hotels to skip, for paging.
check_inYesCheck-in date, YYYY-MM-DD (IST).
check_outYesCheck-out date, YYYY-MM-DD, after check_in.
min_starsNoMinimum hotel class (official stars).
radius_kmNoSearch radius in km.
station_codeNoIndian Railways station code, e.g. NDLS.
children_agesNoAges (0–17) of children sharing that room, one entry per child, e.g. [6, 9]; empty for adults only.
max_price_inrNoOnly hotels with a known nightly price at or below this, in INR.
min_rating_pctNoMinimum guest rating in percent, e.g. 60 = 6.0/10 = 3.0/5. Default 0 (server setting); 0 turns the filter off. While on, hotels with no guest rating are left out.
include_unpricedNoAlso list hotels with no live price (OpenStreetMap listings), for places with thin price coverage.
max_drive_minutesNoOnly hotels within this many minutes' drive of the place (traffic-adjusted).

Output Schema

NameRequiredDescriptionDefault
notesYesCaveats about the results, sources and attribution.
queryYesThe search as run.
totalYesNumber of hotels matching all filters, across all pages.
anchorYesThe resolved search place.
hotelsYesThis page of hotels, in the requested sort order.
showingYesWhich slice of the results this page holds, e.g. 'Showing 1–10 of 42'.
coverageYesWhat each source returned within the radius and what limited it; sources return limited pages.
sources_okYesIds of the sources that answered.
sources_failedYesSources that did not answer, and why.

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed49 schema fields changedv0.3.0
    • changedInput schema / properties / adults / description
      Previous value: -"Guests in the room; searches are for one room."New value: +"Adults (18+) sharing the one room searched for."
    • addedInput schema / properties / children_ages
      Added value: +{
      +  "default": [],
      +  "description": "Ages (0–17) of children sharing that room, one entry per child, e.g. [6, 9]; empty for adults only.",
      +  "items": {
      +    "maximum": 17,
      +    "minimum": 0,
      +    "type": "integer"
      +  },
      +  "maxItems": 4,
      +  "type": "array"
      +}
    • addedInput schema / properties / min_rating_pct
      Added value: +{
      +  "default": 0,
      +  "description": "Minimum guest rating in percent, e.g. 60 = 6.0/10 = 3.0/5. Default 0 (server setting); 0 turns the filter off. While on, hotels with no guest rating are left out.",
      +  "maximum": 100,
      +  "minimum": 0,
      +  "type": "number"
      +}
    • changedInput schema / properties / min_stars / description
      Previous value: -"Minimum star rating."New value: +"Minimum hotel class (official stars)."
    • addedOutput schema / properties / anchor / description
      Added value: +"The resolved search place."
    • addedOutput schema / properties / anchor / properties / code / description
      Added value: +"Railway station code or airport IATA code (null when the place has none)."
    • addedOutput schema / properties / anchor / properties / context / description
      Added value: +"Extra detail, e.g. the airport's city, the bus operator, a halt marker or the geocoder's locality."
    • addedOutput schema / properties / anchor / properties / kind / description
      Added value: +"Kind of place: station, airport, bus_station, landmark, locality or point (raw coordinates)."
    • addedOutput schema / properties / anchor / properties / lat / description
      Added value: +"Latitude."
    • addedOutput schema / properties / anchor / properties / lng / description
      Added value: +"Longitude."
    • addedOutput schema / properties / anchor / properties / name / description
      Added value: +"Place name."
    • addedOutput schema / properties / anchor / properties / source / description
      Added value: +"Dataset or geocoder the place came from, e.g. openstreetmap, ourairports, or input for given coordinates."
    • addedOutput schema / properties / coverage
      Added value: +{
      +  "description": "What each source returned within the radius and what limited it; sources return limited pages.",
      +  "items": {
      +    "additionalProperties": false,
      +    "properties": {
      +      "hotels": {
      +        "description": "Hotels the source returned within the radius.",
      +        "type": "number"
      +      },
      +      "max_km": {
      +        "description": "Distance of the source's furthest hotel from the search place, km (null if it returned none).",
      +        "type": [
      +          "number",
      +          "null"
      +        ]
      +      },
      +      "note": {
      +        "description": "What limited the source's results, e.g. pages fetched.",
      +        "type": [
      +          "string",
      +          "null"
      +        ]
      +      },
      +      "priced": {
      +        "description": "How many of those hotels the source priced.",
      +        "type": "number"
      +      },
      +      "source": {
      +        "description": "Id of the source.",
      +        "type": "string"
      +      }
      +    },
      +    "required": [
      +      "source",
      +      "hotels",
      +      "priced",
      +      "max_km",
      +      "note"
      +    ],
      +    "type": "object"
      +  },
      +  "type": "array"
      +}
    • addedOutput schema / properties / hotels / description
      Added value: +"This page of hotels, in the requested sort order."
    • addedOutput schema / properties / hotels / items / properties / also_ids / description
      Added value: +"Ids (source:source_id) of the same hotel at other sources; each resolves to this hotel."
    • changedOutput schema / properties / hotels / items / properties / cheapest / anyOf
      Previous value: -[
      -  {
      -    "additionalProperties": false,
      -    "properties": {
      -      "available": {
      -        "type": [
      -          "boolean",
      -          "null"
      -        ]
      -      },
      -      "currency": {
      -        "type": "string"
      -      },
      -      "fetched_at": {
      -        "type": "string"
      -      },
      -      "includes_taxes": {
      -        "type": [
      -          "boolean",
      -          "null"
      -        ]
      -      },
      -      "per_night": {
      -        "type": "number"
      -      },
      -      "per_night_inr": {
      -        "type": [
      -          "number",
      -          "null"
      -        ]
      -      },
      -      "refundable": {
      -        "type": [
      -          "boolean",
      -          "null"
      -        ]
      -      },
      -      "seller": {
      -        "type": [
      -          "string",
      -          "null"
      -        ]
      -      },
      -      "source": {
      -        "type": "string"
      -      },
      -      "url": {
      -        "type": [
      -          "string",
      -          "null"
      -        ]
      -      }
      -    },
      -    "required": [
      -      "per_night_inr",
      -      "per_night",
      -      "currency",
      -      "seller",
      -      "source",
      -      "includes_taxes",
      -      "available",
      -      "refundable",
      -      "url",
      -      "fetched_at"
      -    ],
      -    "type": "object"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]New value: +[
      +  {
      +    "additionalProperties": false,
      +    "properties": {
      +      "per_night_inr": {
      +        "description": "Per-night price in INR (null if no exchange rate).",
      +        "type": [
      +          "number",
      +          "null"
      +        ]
      +      },
      +      "seller": {
      +        "description": "Booking site of the price (null when the source names none).",
      +        "type": [
      +          "string",
      +          "null"
      +        ]
      +      },
      +      "source": {
      +        "description": "Source that quoted it; its section in sources has the details.",
      +        "type": "string"
      +      },
      +      "url": {
      +        "description": "Link to the offer, when given.",
      +        "type": [
      +          "string",
      +          "null"
      +        ]
      +      }
      +    },
      +    "required": [
      +      "per_night_inr",
      +      "source",
      +      "seller",
      +      "url"
      +    ],
      +    "type": "object"
      +  },
      +  {
      +    "type": "null"
      +  }
      +]
    • addedOutput schema / properties / hotels / items / properties / cheapest / description
      Added value: +"Lowest bookable per-night INR price across sources; null when no source priced the hotel."
    • addedOutput schema / properties / hotels / items / properties / distance_km / description
      Added value: +"Straight-line distance from the search place, km."
    • addedOutput schema / properties / hotels / items / properties / drive_minutes / description
      Added value: +"Traffic-adjusted drive time from the search place, minutes (null without max_drive_minutes)."
    • addedOutput schema / properties / hotels / items / properties / hotel_id / description
      Added value: +"Hotel id as source:source_id of the first source that listed it."
    • addedOutput schema / properties / hotels / items / properties / lat / description
      Added value: +"Hotel latitude."
    • addedOutput schema / properties / hotels / items / properties / lng / description
      Added value: +"Hotel longitude."
    • addedOutput schema / properties / hotels / items / properties / name / description
      Added value: +"Hotel name as the first source gives it."
    • removedOutput schema / properties / hotels / items / properties / price_count
      Removed value: -{
      -  "type": "number"
      -}
    • addedOutput schema / properties / hotels / items / properties / rating_10 / description
      Added value: +"Guest review score on a 0–10 scale, from the source with the most reviews (null if unrated)."
    • addedOutput schema / properties / hotels / items / properties / review_count / description
      Added value: +"Number of guest reviews behind rating_10 (null if unknown)."
    • addedOutput schema / properties / hotels / items / properties / sources / description
      Added value: +"Each source's own listing of this hotel (name, rating, details, link) with its offers, cheapest source first; up to 3 offers per source here (get_hotel_details lists all)."
    • addedOutput schema / properties / hotels / items / properties / sources / items / additionalProperties
      Added value: +false
    • addedOutput schema / properties / hotels / items / properties / sources / items / properties
      Added value: +{
      +  "amenities": {
      +    "description": "Amenities the source lists, in its own words.",
      +    "items": {
      +      "type": "string"
      +    },
      +    "type": "array"
      +  },
      +  "area": {
      +    "description": "Area or locality the source places it in.",
      +    "type": "string"
      +  },
      +  "cheapest_inr": {
      +    "description": "Lowest per_night_inr among this source's bookable offers (null if none).",
      +    "type": [
      +      "number",
      +      "null"
      +    ]
      +  },
      +  "check_in_time": {
      +    "description": "Check-in time the source states.",
      +    "type": "string"
      +  },
      +  "check_out_time": {
      +    "description": "Check-out time the source states.",
      +    "type": "string"
      +  },
      +  "details": {
      +    "additionalProperties": false,
      +    "description": "Further details from this source; get_hotel_details only.",
      +    "properties": {
      +      "address": {
      +        "description": "Street address.",
      +        "type": "string"
      +      },
      +      "category_scores": {
      +        "description": "Review scores by category.",
      +        "items": {
      +          "additionalProperties": false,
      +          "properties": {
      +            "name": {
      +              "description": "Category, e.g. Cleanliness.",
      +              "type": "string"
      +            },
      +            "score": {
      +              "description": "Score on the source's own scale.",
      +              "type": "number"
      +            }
      +          },
      +          "required": [
      +            "name",
      +            "score"
      +          ],
      +          "type": "object"
      +        },
      +        "type": "array"
      +      },
      +      "cons": {
      +        "description": "What reviews criticise, in the source's words.",
      +        "items": {
      +          "type": "string"
      +        },
      +        "type": "array"
      +      },
      +      "description": {
      +        "description": "The source's description of the property.",
      +        "type": "string"
      +      },
      +      "distance_to_centre": {
      +        "description": "Distance to the city centre as the source words it, e.g. \"6.0 km to City centre\".",
      +        "type": "string"
      +      },
      +      "excluded_amenities": {
      +        "description": "Amenities the source says the property does not have.",
      +        "items": {
      +          "type": "string"
      +        },
      +        "type": "array"
      +      },
      +      "images": {
      +        "description": "A few photo URLs.",
      +        "items": {
      +          "type": "string"
      +        },
      +        "type": "array"
      +      },
      +      "important_info": {
      +        "description": "Conditions guests must know, e.g. ID required.",
      +        "items": {
      +          "type": "string"
      +        },
      +        "type": "array"
      +      },
      +      "labels": {
      +        "description": "Badges the source shows.",
      +        "items": {
      +          "type": "string"
      +        },
      +        "type": "array"
      +      },
      +      "location_rating": {
      +        "description": "Location score on a 0–5 scale (Google).",
      +        "type": "number"
      +      },
      +      "nearby_places": {
      +        "description": "Nearby places the source lists.",
      +        "items": {
      +          "additionalProperties": false,
      +          "properties": {
      +            "name": {
      +              "description": "Place.",
      +              "type": "string"
      +            },
      +            "travel": {
      +              "description": "How to get there, e.g. \"Walking 1 min\".",
      +              "type": "string"
      +            }
      +          },
      +          "required": [
      +            "name"
      +          ],
      +          "type": "object"
      +        },
      +        "type": "array"
      +      },
      +      "phone": {
      +        "description": "Phone number.",
      +        "type": "string"
      +      },
      +      "pros": {
      +        "description": "What reviews praise, in the source's words.",
      +        "items": {
      +          "type": "string"
      +        },
      +        "type": "array"
      +      },
      +      "review_topics": {
      +        "description": "Review topics with how often and how they are mentioned.",
      +        "items": {
      +          "additionalProperties": false,
      +          "properties": {
      +            "mentions": {
      +              "description": "How many reviews mention it.",
      +              "type": "number"
      +            },
      +            "name": {
      +              "description": "Topic, e.g. Location or Public transit.",
      +              "type": "string"
      +            },
      +            "negative": {
      +              "description": "How many of those are negative.",
      +              "type": "number"
      +            },
      +            "positive": {
      +              "description": "How many of those are positive.",
      +              "type": "number"
      +            }
      +          },
      +          "required": [
      +            "name",
      +            "mentions"
      +          ],
      +          "type": "object"
      +        },
      +        "type": "array"
      +      },
      +      "website": {
      +        "description": "The property's own website.",
      +        "type": "string"
      +      }
      +    },
      +    "type": "object"
      +  },
      +  "fetched_at": {
      +    "description": "ISO time this source answered.",
      +    "type": "string"
      +  },
      +  "name": {
      +    "description": "Hotel name as this source gives it.",
      +    "type": "string"
      +  },
      +  "offers": {
      +    "description": "This source's offers for the stay and party, cheapest first.",
      +    "items": {
      +      "additionalProperties": false,
      +      "properties": {
      +        "available": {
      +          "description": "Whether the source reports it bookable for these dates (null when not stated).",
      +          "type": [
      +            "boolean",
      +            "null"
      +          ]
      +        },
      +        "currency": {
      +          "description": "ISO currency code of per_night and total, e.g. INR or EUR.",
      +          "type": "string"
      +        },
      +        "includes_taxes": {
      +          "description": "Whether the price includes taxes such as GST (null when the source does not say).",
      +          "type": [
      +            "boolean",
      +            "null"
      +          ]
      +        },
      +        "meal_plan": {
      +          "description": "Meals included as the source states them, e.g. Room Only.",
      +          "type": "string"
      +        },
      +        "per_night": {
      +          "description": "Per-night price in the source's currency.",
      +          "type": "number"
      +        },
      +        "per_night_inr": {
      +          "description": "Per-night price converted to INR (null if no exchange rate).",
      +          "type": [
      +            "number",
      +            "null"
      +          ]
      +        },
      +        "refundable": {
      +          "description": "Whether the rate is refundable (null when not stated).",
      +          "type": [
      +            "boolean",
      +            "null"
      +          ]
      +        },
      +        "room": {
      +          "description": "Room as the source names it (null when it does not say).",
      +          "type": [
      +            "string",
      +            "null"
      +          ]
      +        },
      +        "seller": {
      +          "description": "Booking site of the offer, e.g. Agoda (null when the source names none; then it sells the room itself).",
      +          "type": [
      +            "string",
      +            "null"
      +          ]
      +        },
      +        "total": {
      +          "description": "Price for the whole stay in that currency (null when not given).",
      +          "type": [
      +            "number",
      +            "null"
      +          ]
      +        },
      +        "url": {
      +          "description": "Link to the offer at the source, when given.",
      +          "type": [
      +            "string",
      +            "null"
      +          ]
      +        }
      +      },
      +      "required": [
      +        "seller",
      +        "per_night_inr",
      +        "per_night",
      +        "currency",
      +        "total",
      +        "includes_taxes",
      +        "refundable",
      +        "available",
      +        "room",
      +        "url"
      +      ],
      +      "type": "object"
      +    },
      +    "type": "array"
      +  },
      +  "offers_total": {
      +    "description": "How many offers the source returned (offers may list fewer).",
      +    "type": "number"
      +  },
      +  "property_type": {
      +    "description": "Kind of property as the source labels it, e.g. Hotel, Homestay.",
      +    "type": "string"
      +  },
      +  "rating_10": {
      +    "description": "This source's guest rating on a 0–10 scale (5-point scales doubled); null if unrated.",
      +    "type": [
      +      "number",
      +      "null"
      +    ]
      +  },
      +  "review_count": {
      +    "description": "Number of reviews behind rating_10 at this source.",
      +    "type": [
      +      "number",
      +      "null"
      +    ]
      +  },
      +  "source": {
      +    "description": "Data source id: trivago, hotelscasa, xotelo, serpapi (Google Hotels) or osm_lodging.",
      +    "type": "string"
      +  },
      +  "source_id": {
      +    "description": "The hotel's id at this source; source:source_id is one of the hotel's ids.",
      +    "type": "string"
      +  },
      +  "stars": {
      +    "description": "Hotel class this source gives, 1–5 stars (null if none).",
      +    "type": [
      +      "number",
      +      "null"
      +    ]
      +  },
      +  "typical_price": {
      +    "additionalProperties": false,
      +    "description": "The source's usual nightly price range for the property, independent of these dates.",
      +    "properties": {
      +      "currency": {
      +        "description": "Currency of min and max.",
      +        "type": "string"
      +      },
      +      "max": {
      +        "description": "High end of the usual nightly price.",
      +        "type": "number"
      +      },
      +      "min": {
      +        "description": "Low end of the usual nightly price.",
      +        "type": "number"
      +      }
      +    },
      +    "required": [
      +      "min",
      +      "max",
      +      "currency"
      +    ],
      +    "type": "object"
      +  },
      +  "url": {
      +    "description": "The hotel's page at this source, when given.",
      +    "type": [
      +      "string",
      +      "null"
      +    ]
      +  }
      +}
    • addedOutput schema / properties / hotels / items / properties / sources / items / required
      Added value: +[
      +  "source",
      +  "source_id",
      +  "name",
      +  "rating_10",
      +  "review_count",
      +  "stars",
      +  "url",
      +  "cheapest_inr",
      +  "offers",
      +  "offers_total",
      +  "fetched_at"
      +]
    • changedOutput schema / properties / hotels / items / properties / sources / items / type
      Previous value: -"string"New value: +"object"
    • addedOutput schema / properties / hotels / items / properties / stars / description
      Added value: +"Official hotel class, 1–5 stars (null if unknown)."
    • changedOutput schema / properties / hotels / items / required
      Previous value: -[
      -  "hotel_id",
      -  "also_ids",
      -  "name",
      -  "lat",
      -  "lng",
      -  "distance_km",
      -  "stars",
      -  "rating_10",
      -  "review_count",
      -  "cheapest",
      -  "price_count",
      -  "sources",
      -  "drive_minutes"
      -]New value: +[
      +  "hotel_id",
      +  "also_ids",
      +  "name",
      +  "lat",
      +  "lng",
      +  "distance_km",
      +  "stars",
      +  "rating_10",
      +  "review_count",
      +  "cheapest",
      +  "sources",
      +  "drive_minutes"
      +]
    • addedOutput schema / properties / notes / description
      Added value: +"Caveats about the results, sources and attribution."
    • addedOutput schema / properties / query / description
      Added value: +"The search as run."
    • addedOutput schema / properties / query / properties / adults / description
      Added value: +"Adults in the one room searched for."
    • addedOutput schema / properties / query / properties / check_in / description
      Added value: +"Check-in date, YYYY-MM-DD."
    • addedOutput schema / properties / query / properties / check_out / description
      Added value: +"Check-out date, YYYY-MM-DD."
    • addedOutput schema / properties / query / properties / children_ages
      Added value: +{
      +  "description": "Ages of children sharing that room.",
      +  "items": {
      +    "type": "number"
      +  },
      +  "type": "array"
      +}
    • addedOutput schema / properties / query / properties / radius_km / description
      Added value: +"Radius searched, km; widened when max_drive_minutes needs it."
    • changedOutput schema / properties / query / required
      Previous value: -[
      -  "radius_km",
      -  "check_in",
      -  "check_out",
      -  "adults"
      -]New value: +[
      +  "radius_km",
      +  "check_in",
      +  "check_out",
      +  "adults",
      +  "children_ages"
      +]
    • addedOutput schema / properties / showing / description
      Added value: +"Which slice of the results this page holds, e.g. 'Showing 1–10 of 42'."
    • addedOutput schema / properties / sources_failed / description
      Added value: +"Sources that did not answer, and why."
    • addedOutput schema / properties / sources_failed / items / properties / code / description
      Added value: +"Error code, e.g. UPSTREAM_UNAVAILABLE or RATE_LIMITED."
    • addedOutput schema / properties / sources_failed / items / properties / message / description
      Added value: +"What went wrong."
    • addedOutput schema / properties / sources_failed / items / properties / source / description
      Added value: +"Id of the source that failed."
    • addedOutput schema / properties / sources_ok / description
      Added value: +"Ids of the sources that answered."
    • addedOutput schema / properties / total / description
      Added value: +"Number of hotels matching all filters, across all pages."
    • changedOutput schema / required
      Previous value: -[
      -  "anchor",
      -  "query",
      -  "showing",
      -  "total",
      -  "hotels",
      -  "sources_ok",
      -  "sources_failed",
      -  "notes"
      -]New value: +[
      +  "anchor",
      +  "query",
      +  "showing",
      +  "total",
      +  "hotels",
      +  "sources_ok",
      +  "sources_failed",
      +  "coverage",
      +  "notes"
      +]
  2. First observedv0.1.0

TDQS

A4.3/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations cover safety (readOnly/idempotent/openWorld/non-destructive), and the description adds genuinely non-obvious behavior: per-hotel merging across sources, one room searched for the whole party, drive-time filtering via OpenStreetMap routing with a traffic allowance, pagination, and the key caveat that results are not exhaustive because sources return limited pages. It omits auth/rate-limit or latency expectations, so it stops short of a 5.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with what the tool does before constraints and routing, and every clause carries information. It is long (roughly eight sentences) and the sentence enumerating per-hotel fields largely restates the output schema, which is the only real waste.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For an 18-parameter, multi-source, paginated search with an output schema present, the description covers the aggregation model, sorting/filtering caveats, and non-exhaustiveness. It need not repeat return fields, and its doing so is harmless rather than required; nothing an agent needs to call it correctly appears missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so baseline is 3. The description adds interpretation the schema cannot: that adults/children_ages describe a single shared room, that each source quotes the offer it chooses, that max_drive_minutes injects a drive_minutes field, and that coverage explains which source limited the result. That is meaningful semantic value beyond per-field docs.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Starts with a specific verb+resource+scope ('Finds hotels around a place in India for given dates') and immediately states the value proposition: live prices merged per hotel from trivago, HotelsCasa, Google Hotels/SerpApi, Xotelo/TripAdvisor. It also distinguishes itself from siblings by naming where the detail lives (get_hotel_details) and what it does not do ('Does not book').

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly routes the agent: full per-source offers go to get_hotel_details, travel times to compare_hotels, and it states the tool never books. However, it gives no positioning against other siblings such as plan_stays, find_retiring_rooms, or resolve_place, and offers no explicit 'when not to use this' beyond the booking exclusion.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.