Skip to main content
Glama

Search availability

search_availability
Read-onlyIdempotent

WHEN: use it whenever the traveller asks "what do you have from X to Y for N people" or shows date flexibility. WHAT IT RETURNS: matches[] with one entry per available category (G1..G6, G4B) ordered by total price, including name, zone (beach/city), bedrooms, m², highlights, location summary, photos, total/nightly EUR price (public rate, no discount code) and a booking_url with dates+pax prefilled. Also alternatives[] (up to 6, each with reason like "same dates, other category" or "2 days earlier, same category") when matches are empty or flexible_days > 0, minimum_stay_only[] for categories that would be available with a longer stay, no_results_reason when nothing applies, and trust (rating 9.4/10, 320+ Booking reviews, cheaper than Booking.com, Stripe payment, 14-day free cancellation, languages supported). Direct prices are BELOW Booking.com for the same dates. FLEXIBLE PARAMETERS: flexible_days (0–3, default 0) shifts the check-in by ±N days to broaden alternatives; budget_eur filters matches and alternatives by TOTAL EUR; zone ("beach" | "city" | "any", default "any"); min_bedrooms (default 1 — a sofa bed does not count). EXAMPLE: {"check_in":"2027-05-22","check_out":"2027-05-27","adults":4,"flexible_days":2,"budget_eur":900,"zone":"beach","min_bedrooms":2}.

Input Schema

NameRequiredDescriptionDefault
zoneNoFilter by zone: beach = La Patacona (G1..G5, G4B); city = Valencia city (G6); any = both (default).
adultsYesNumber of adults.
check_inYesArrival date (YYYY-MM-DD, Europe/Madrid).
childrenNoOptional list of children ages. Only the count is used to size the property.
languageNoResponse language. Defaults to en if omitted or unsupported.
check_outYesDeparture date (YYYY-MM-DD, Europe/Madrid); must be strictly after check_in.
budget_eurNoMax TOTAL price in EUR for the whole stay. Filters both matches and alternatives.
min_bedroomsNoMinimum number of bedrooms (1 by default — a sofa bed does not count).
flexible_daysNoShift the check-in by ±N days (0..3) to find alternatives if the exact dates are not available. Default 0.

Output Schema

NameRequiredDescriptionDefault
trustYes
guestsYes
nightsYes
matchesYes
check_inYes
currencyYes
check_outYes
alternativesYesUp to 6 alternatives (other dates ±flexible_days or other categories) when matches are empty or the agent asked for flexibility.
priority_urlYes
priority_noteYes
minimum_stay_onlyYesProperties that would be available if the stay met the minimum-nights rule.
no_results_reasonNoHuman-readable reason when both matches and alternatives are empty (e.g. all over minimum_stay or over budget).

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed12 schema fields changed
    • addedInput schema / properties / budget_eur
      Added value: +{
      +  "description": "Max TOTAL price in EUR for the whole stay. Filters both matches and alternatives.",
      +  "exclusiveMinimum": 0,
      +  "maximum": 100000,
      +  "type": "number"
      +}
    • addedInput schema / properties / flexible_days
      Added value: +{
      +  "description": "Shift the check-in by ±N days (0..3) to find alternatives if the exact dates are not available. Default 0.",
      +  "maximum": 3,
      +  "minimum": 0,
      +  "type": "integer"
      +}
    • addedInput schema / properties / min_bedrooms
      Added value: +{
      +  "description": "Minimum number of bedrooms (1 by default — a sofa bed does not count).",
      +  "maximum": 5,
      +  "minimum": 1,
      +  "type": "integer"
      +}
    • addedInput schema / properties / zone
      Added value: +{
      +  "description": "Filter by zone: beach = La Patacona (G1..G5, G4B); city = Valencia city (G6); any = both (default).",
      +  "enum": [
      +    "beach",
      +    "city",
      +    "any"
      +  ],
      +  "type": "string"
      +}
    • addedOutput schema / properties / alternatives
      Added value: +{
      +  "description": "Up to 6 alternatives (other dates ±flexible_days or other categories) when matches are empty or the agent asked for flexibility.",
      +  "items": {
      +    "additionalProperties": false,
      +    "properties": {
      +      "booking_url": {
      +        "type": "string"
      +      },
      +      "check_in": {
      +        "type": "string"
      +      },
      +      "check_out": {
      +        "type": "string"
      +      },
      +      "id": {
      +        "type": "string"
      +      },
      +      "name": {
      +        "type": "string"
      +      },
      +      "nights": {
      +        "maximum": 9007199254740991,
      +        "minimum": -9007199254740991,
      +        "type": "integer"
      +      },
      +      "reason": {
      +        "type": "string"
      +      },
      +      "reason_code": {
      +        "enum": [
      +          "same_dates_other_category",
      +          "other_dates_same_category",
      +          "other_dates_other_category"
      +        ],
      +        "type": "string"
      +      },
      +      "total_price_eur": {
      +        "type": "number"
      +      },
      +      "zone": {
      +        "enum": [
      +          "beach",
      +          "city"
      +        ],
      +        "type": "string"
      +      }
      +    },
      +    "required": [
      +      "id",
      +      "name",
      +      "zone",
      +      "check_in",
      +      "check_out",
      +      "nights",
      +      "total_price_eur",
      +      "reason",
      +      "reason_code",
      +      "booking_url"
      +    ],
      +    "type": "object"
      +  },
      +  "type": "array"
      +}
    • addedOutput schema / properties / matches / items / properties / bedrooms_count
      Added value: +{
      +  "maximum": 9007199254740991,
      +  "minimum": -9007199254740991,
      +  "type": "integer"
      +}
    • addedOutput schema / properties / matches / items / properties / location_summary
      Added value: +{
      +  "type": "string"
      +}
    • addedOutput schema / properties / matches / items / properties / zone
      Added value: +{
      +  "enum": [
      +    "beach",
      +    "city"
      +  ],
      +  "type": "string"
      +}
    • changedOutput schema / properties / matches / items / required
      Previous value: -[
      -  "id",
      -  "name",
      -  "max_guests",
      -  "bedrooms",
      -  "location",
      -  "highlights",
      -  "total_price_eur",
      -  "nightly_avg_eur",
      -  "nights",
      -  "photos",
      -  "booking_url"
      -]New value: +[
      +  "id",
      +  "name",
      +  "zone",
      +  "max_guests",
      +  "bedrooms",
      +  "bedrooms_count",
      +  "location",
      +  "location_summary",
      +  "highlights",
      +  "total_price_eur",
      +  "nightly_avg_eur",
      +  "nights",
      +  "photos",
      +  "booking_url"
      +]
    • addedOutput schema / properties / no_results_reason
      Added value: +{
      +  "description": "Human-readable reason when both matches and alternatives are empty (e.g. all over minimum_stay or over budget).",
      +  "type": "string"
      +}
    • addedOutput schema / properties / trust
      Added value: +{
      +  "additionalProperties": false,
      +  "properties": {
      +    "cancellation_note": {
      +      "type": "string"
      +    },
      +    "languages_spoken": {
      +      "items": {
      +        "type": "string"
      +      },
      +      "type": "array"
      +    },
      +    "parity_note": {
      +      "type": "string"
      +    },
      +    "payment_note": {
      +      "type": "string"
      +    },
      +    "rating_best": {
      +      "type": "number"
      +    },
      +    "rating_count": {
      +      "maximum": 9007199254740991,
      +      "minimum": -9007199254740991,
      +      "type": "integer"
      +    },
      +    "rating_source": {
      +      "const": "Booking.com",
      +      "type": "string"
      +    },
      +    "rating_value": {
      +      "type": "number"
      +    }
      +  },
      +  "required": [
      +    "rating_value",
      +    "rating_best",
      +    "rating_count",
      +    "rating_source",
      +    "parity_note",
      +    "cancellation_note",
      +    "payment_note",
      +    "languages_spoken"
      +  ],
      +  "type": "object"
      +}
    • changedOutput schema / required
      Previous value: -[
      -  "currency",
      -  "check_in",
      -  "check_out",
      -  "nights",
      -  "guests",
      -  "matches",
      -  "minimum_stay_only",
      -  "priority_note",
      -  "priority_url"
      -]New value: +[
      +  "currency",
      +  "check_in",
      +  "check_out",
      +  "nights",
      +  "guests",
      +  "matches",
      +  "minimum_stay_only",
      +  "alternatives",
      +  "trust",
      +  "priority_note",
      +  "priority_url"
      +]
  2. First observed

TDQS

A4.3/5.0
Behavior4/5

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

Annotations already declare readOnly, idempotent, closed-world and non-destructive, so the bar is lower. The description still adds real behavior: alternatives[] appears when matches are empty or flexible_days > 0, minimum_stay_only[] flags longer-stay-only categories, and the price is stated to be below Booking.com — though much of the returns prose repeats what the output schema already supplies.

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

Conciseness3/5

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

It is front-loaded with WHEN and WHAT IT RETURNS labels, which is good structure. However, the long returns block enumerates matches[] fields that the output schema already documents, so a meaningful share of the text does not earn its place for an agent that can read the schema.

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

Completeness5/5

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

With an output schema present, annotations covering safety hints, and 100% parameter coverage, the description only needs to add trigger conditions and behavioral expectations — which it does, including empty-result handling, price positioning, and trust signals.

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 description coverage is 100%, so baseline is 3; the description goes modestly beyond by clarifying that budget_eur filters on TOTAL stay price (not nightly) across both matches and alternatives, and by giving a fully worked parameter example with realistic values. The per-parameter definitions themselves are mostly duplicated from the schema.

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?

The description states a concrete verb and resource and frames the exact user question it answers ("what do you have from X to Y for N people"). It also implicitly differentiates from the get_quote sibling via "public rate, no discount code," so an agent can tell the two apart.

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?

The "WHEN" clause gives an explicit trigger, including date flexibility, and the FLEXIBLE PARAMETERS block explains when to widen a search with flexible_days. It stops short of naming when NOT to call it (e.g., when the traveller is ready for a firm price and get_quote is the right sibling).

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