Skip to main content
Glama

search_hotels

Read-onlyIdempotent

Searches hotels and other places to stay by city or country and check-in/check-out dates, with optional filters for brand, room type, maximum nightly rate, star rating and amenities. Results come from our hotel partners and hotels contracted directly with Autonomad, and include nightly and total rates, room options, the cancellation policy, a photo and whether each result can be booked. Every star level is included, ranked best first (guest score or star rating, then price); a hotel whose star rating is unknown has stars null. If the person wants only higher-rated hotels, pass min_star_rating (hotels with an unknown rating are then left out and counted in meta.unrated_excluded); if they want the cheapest first, pass flexible: true. Searching does not reserve anything or charge anyone. If the traveler gave no length, assume about 7 nights abroad (6 for Mexico, 4 for Canada from the US), 3 at home, and tell them it's an assumption.

Input Schema

NameRequiredDescriptionDefault
cityNoCity name (e.g., 'New York', 'Tokyo')
brandNoHotel brand name to filter by
placeNoThe exact place of this trip stop: the `place` an earlier search for the trip returned, or the candidate the person picked when a search asked which place they meant. Searches given the same place cover the same place.
regionNoState / region of the city (e.g. 'NV', 'Nevada', 'Maine'), when known.
countryNoISO 3166-1 alpha-2 country code (e.g., 'US', 'JP')
check_inYesCheck-in date (YYYY-MM-DD)
flexibleNotrue: order results cheapest first instead of best first.
latitudeNoLatitude of the destination, when known.
amenitiesNoRequired amenities (wifi, gym, pool, spa, restaurant, etc.)
check_outYesCheck-out date (YYYY-MM-DD)
longitudeNoLongitude of the destination, when known.
room_typeNo
max_rate_usdNoMaximum nightly rate in USD
min_star_ratingNoMinimum star rating (1-5). Hotels whose rating is unknown are left out and counted in meta.unrated_excluded.
destination_iataNoIATA code of the airport the traveler flies into (e.g. 'LAS'). Pass it whenever a flight is known: it decides which same-named city is meant (Las Vegas NV vs NM).

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed1 schema field changed
    • changedInput schema / properties / destination_iata / description
      Previous value: -"IATA code of the airport the traveller flies into (e.g. 'LAS'). Pass it whenever a flight is known: it decides which same-named city is meant (Las Vegas NV vs NM)."New value: +"IATA code of the airport the traveler flies into (e.g. 'LAS'). Pass it whenever a flight is known: it decides which same-named city is meant (Las Vegas NV vs NM)."
  2. Changed5 schema fields changed
    • addedInput schema / properties / place / properties / arrival_airports
      Added value: +{
      +  "description": "The airports to fly this place by, best first, as a search returned them. Pass them back unchanged.",
      +  "items": {
      +    "properties": {
      +      "iata": {
      +        "type": "string"
      +      }
      +    },
      +    "required": [
      +      "iata"
      +    ],
      +    "type": "object"
      +  },
      +  "type": "array"
      +}
    • addedInput schema / properties / place / properties / extent_km
      Added value: +{
      +  "description": "The size of a region or island, as a search returned it.",
      +  "type": "number"
      +}
    • addedInput schema / properties / place / properties / gateway_airport
      Added value: +{
      +  "description": "The one airport a wide search flies this place by, as a search returned it.",
      +  "type": "string"
      +}
    • addedInput schema / properties / place / properties / kind
      Added value: +{
      +  "description": "What the place is, as a search returned it. Pass it back unchanged: a town, region or island has its hotels searched around it.",
      +  "enum": [
      +    "city",
      +    "town",
      +    "region",
      +    "island"
      +  ],
      +  "type": "string"
      +}
    • addedInput schema / properties / place / properties / radius_km
      Added value: +{
      +  "description": "The hotel search radius for this place, as a search returned it.",
      +  "type": "number"
      +}
  3. Changed1 schema field changed
    • addedInput schema / properties / place
      Added value: +{
      +  "description": "The exact place of this trip stop: the `place` an earlier search for the trip returned, or the candidate the person picked when a search asked which place they meant. Searches given the same place cover the same place.",
      +  "properties": {
      +    "airports": {
      +      "description": "IATA codes of the airports serving the place.",
      +      "items": {
      +        "type": "string"
      +      },
      +      "type": "array"
      +    },
      +    "city": {
      +      "type": "string"
      +    },
      +    "country": {
      +      "description": "ISO 3166-1 alpha-2 code (territories use their own, e.g. PR).",
      +      "type": "string"
      +    },
      +    "label": {
      +      "description": "How to name the place to the person, e.g. 'Birmingham, GB'.",
      +      "type": "string"
      +    },
      +    "latitude": {
      +      "type": "number"
      +    },
      +    "longitude": {
      +      "type": "number"
      +    },
      +    "region": {
      +      "description": "State or region, or empty.",
      +      "type": "string"
      +    }
      +  },
      +  "required": [
      +    "country",
      +    "latitude",
      +    "longitude"
      +  ],
      +  "type": "object"
      +}
  4. Changed2 schema fields changed
    • addedInput schema / properties / flexible
      Added value: +{
      +  "description": "true: order results cheapest first instead of best first.",
      +  "type": "boolean"
      +}
    • changedInput schema / properties / min_star_rating / description
      Previous value: -"Minimum star rating (1-5)"New value: +"Minimum star rating (1-5). Hotels whose rating is unknown are left out and counted in meta.unrated_excluded."
  5. Changed4 schema fields changed
    • addedInput schema / properties / destination_iata
      Added value: +{
      +  "description": "IATA code of the airport the traveller flies into (e.g. 'LAS'). Pass it whenever a flight is known: it decides which same-named city is meant (Las Vegas NV vs NM).",
      +  "type": "string"
      +}
    • addedInput schema / properties / latitude
      Added value: +{
      +  "description": "Latitude of the destination, when known.",
      +  "type": "number"
      +}
    • addedInput schema / properties / longitude
      Added value: +{
      +  "description": "Longitude of the destination, when known.",
      +  "type": "number"
      +}
    • addedInput schema / properties / region
      Added value: +{
      +  "description": "State / region of the city (e.g. 'NV', 'Nevada', 'Maine'), when known.",
      +  "type": "string"
      +}
  6. First observed

TDQS

A4.6/5.0
Behavior5/5

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

Annotations already declare readOnly, idempotent, open-world, and non-destructive behavior, and the description adds meaningful context beyond them: results come from hotel partners/direct contracts, include bookability and cancellation policy, rank best-first by default, and leave unknown star ratings as null. It also explicitly states that searching does not reserve or charge anyone.

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

Conciseness5/5

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

The purpose and scope are front-loaded, followed by filtering behavior, result ordering, booking safety, and default trip-length assumptions. Despite its length, nearly every sentence provides actionable information for calling or interpreting the tool.

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?

The tool is complex with 15 parameters and a nested place object, and there is no output schema. The description compensates well by explaining result contents, ordering, unrated-hotel handling, and booking safety, though it does not mention pagination or result limits.

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 very high (93%), so the schema carries most parameter documentation. The description still adds useful semantics beyond the schema, especially that min_star_rating excludes unrated hotels and counts them in meta.unrated_excluded, and that flexible changes ordering to cheapest-first.

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?

States a specific verb and resource: searches hotels and other places to stay by city/country and dates, with optional filters. This clearly distinguishes it from sibling search tools like search_flights, search_activities, search_dining, and search_events.

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?

Gives clear conditions for key parameters: use min_star_rating when only higher-rated hotels are wanted, and flexible: true when cheapest-first ordering is desired. It also clarifies that searching does not reserve or charge, but it does not explicitly name sibling tools such as create_booking_intent or confirm_route_hotel as next steps.

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

Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.

Resources