Skip to main content
Glama

tourradar_vertex-tour-search

[tourradar] Use this when the user describes what they want in natural language and you need AI-powered semantic search to understand their intent.

Before use this tool, please READ all possible filters. PLESE USE FILTERS, when can be used, to make search faster and much more precise. Please use start_city, end_city, cities, countries, start_country, end_country filters if possible. You can use multiple of them.

AI-powered semantic search for tours using natural language queries combined with optional filters. Uses Google Vertex AI to understand intent and find relevant tours based on descriptions, themes, or specific requests.

Use vertex-tour-search when:

  • The user describes what they want in natural language

  • You need semantic/AI-powered search to understand intent

  • Combining natural language with filters for refined results

Examples:

  • "Family-friendly safari with kids under 12"

  • "Romantic honeymoon trip with beach and mountains"

  • "Adventure tour with hiking and camping for beginners"

  • "Cultural immersion experience with local homestays"

  • "Wine tasting tour through European countryside"

Input

Required

  • textSearch: Natural language description of what the user is looking for

  • display_mode: How to display results — "listing" (default, carousel of tour cards) or "map" (interactive map view)

Optional Filters

Location Filters

Filter

Type

Description

start_country

string[]

Country where tour BEGINS (ISO 3166-1 alpha-2 codes). OR logic.

end_country

string[]

Country where tour ENDS (ISO 3166-1 alpha-2 codes). OR logic.

start_city

number[]

City IDs where tour starts. Use b2b-cities-search to find IDs. OR logic.

end_city

number[]

City IDs where tour ends. Use b2b-cities-search to find IDs. OR logic.

countries

object

Countries visited DURING the itinerary. Supports AND/OR operator.

cities

object

Cities visited on the itinerary. Supports AND/OR operator.

Range Filters

Filter

Type

Description

duration

{ min, max }

Tour length in days

max_group_size

{ min, max }

Maximum group size range

min_group_size

{ min, max }

Minimum group size range

min_age

{ min, max }

Minimum age requirement range. E.g., { min: 1, max: 12 } finds family-friendly tours

max_age

{ min, max }

Maximum age limit range. E.g., { min: 18, max: 39 } finds youth-specific tours

price

{ min, max, currency }

Price range (currency: "EUR")

AND/OR Filters

These filters support both AND and OR operators:

Filter

Values

Description

departures

YYYY-MM strings

Filter by departure months

countries

ISO 3166-1 alpha-2 codes

Countries visited during itinerary

cities

City IDs

Cities visited on itinerary

Structure: { values: [...], operator: "AND" | "OR" }

  • OR (default): Tour matches ANY of the specified values

  • AND: Tour must match ALL specified values

Examples

{ "textSearch": "family adventure with wildlife" }

With location filters

{
  "textSearch": "hiking adventure",
  "start_country": ["DE", "AT"],
  "countries": { "values": ["IT", "CH"], "operator": "AND" }
}

With range filters

{
  "textSearch": "luxury beach vacation",
  "duration": { "min": 7, "max": 14 },
  "price": { "min": 2000, "max": 5000, "currency": "EUR" },
  "max_group_size": { "min": 1, "max": 16 }
}

With age filters

{
  "textSearch": "family safari with young children",
  "min_age": { "min": 1, "max": 6 },
  "duration": { "min": 7, "max": 14 }
}

With departure dates

{
  "textSearch": "northern lights tour",
  "departures": { "values": ["2026-01", "2026-02", "2026-03"], "operator": "OR" }
}

Map display mode

{
  "textSearch": "hiking tours in the Alps",
  "display_mode": "map",
  "countries": { "values": ["AT", "CH"], "operator": "OR" }
}

Response

Returns a list of tours matching the query, each containing:

  • Tour ID, name, and URL

  • Operator information

  • Brief description matching the query context

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
priceNoFilter by tour price in the selected currency. E.g., { min: 500, max: 2000, currency: 'EUR' } finds tours priced between €500 and €2000. Min and max value cannot be this same.
citiesNoFilter tours by cities visited on the itinerary. City IDs can be obtained from the b2b-cities-search tool
max_ageNoFilter by tour's maximum age limit. E.g., { min: 18, max: 39 } finds tours limited to young adults. Use to find age-restricted tours like youth or senior-specific trips. Min and max value cannot be this same.
min_ageNoFilter by tour's minimum age requirement. E.g., { min: 1, max: 12 } finds tours that accept children under 12. Use to find family-friendly tours or tours with low age requirements. Min and max value cannot be this same.
tourIdsNoFilter by specific tour IDs. Use this to narrow search results to known tours.
currencyNoCurrency to return prices in. Use this only when the user explicitly asks for a specific currency. Otherwise the user's default (based on location) is used.
discountNoFilter tours by discount percentage. E.g., { min: 10, max: 50 } finds tours with 10% to 50% off. Min and max value cannot be the same.
durationNoFilter tours by duration in days. Example: set min: 5 , max: 8 to find duration between those days. Include this filter when is needed
end_cityNoCity IDs where the tour ends (e.g., [1234, 5678]). Use b2b-cities-search to find city IDs. If passing multiple values, will find tours ending in any of the given cities
countriesNoFilter by countries visited DURING the tour itinerary. Use 'start_country'/'end_country' for departure/destination countries.
departuresNoFilter tours by available departure months
start_cityNoCity IDs where the tour starts (e.g., [1234, 5678]). Use b2b-cities-search to find city IDs. If passing multiple values, will find tours starting in any of the given cities
textSearchYes
end_countryNoFilter by the country where the tour ENDS (final destination). ISO 3166-1 alpha-2 codes (e.g., ['IT', 'FR']). Multiple values = OR logic. Use 'countries' filter for countries visited during the itinerary.
display_modeNoHow to display the search results. 'listing' shows a carousel of tour cards. 'map' shows tours on an interactive map.listing
operator_idsNoFilter tours by specific operator ids. You can add multiple operator ids, then OR operator will be used. For lookup for partner by name, please use algolia-operator-search tool.
start_countryNoFilter by the country where the tour BEGINS (departure point). ISO 3166-1 alpha-2 codes (e.g., ['DE', 'AT']). Multiple values = OR logic. Use 'countries' filter for countries visited during the itinerary.
max_group_sizeNoFilter by tour's maximum group size. E.g., { min: 1, max: 20 } finds small group tours with max 20 participants. Min and max value cannot be this same.
min_group_sizeNoFilter by tour's minimum group size. E.g., { min: 1, max: 1 } finds tours that accept solo travelers. Min and max value cannot be this same.

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed2 schema fields changed
    • addedInput schema / properties / currency
      Added value: +{
      +  "description": "Currency to return prices in. Use this only when the user explicitly asks for a specific currency. Otherwise the user's default (based on location) is used.",
      +  "enum": [
      +    "USD",
      +    "EUR",
      +    "GBP",
      +    "AUD",
      +    "NZD",
      +    "CAD"
      +  ],
      +  "type": "string"
      +}
    • addedInput schema / properties / discount
      Added value: +{
      +  "description": "Filter tours by discount percentage. E.g., { min: 10, max: 50 } finds tours with 10% to 50% off. Min and max value cannot be the same.",
      +  "properties": {
      +    "max": {
      +      "description": "Maximum discount percentage (0-100)",
      +      "maximum": 100,
      +      "minimum": 0,
      +      "type": "number"
      +    },
      +    "min": {
      +      "description": "Minimum discount percentage (0-100)",
      +      "maximum": 100,
      +      "minimum": 0,
      +      "type": "number"
      +    }
      +  },
      +  "required": [
      +    "min",
      +    "max"
      +  ],
      +  "type": "object"
      +}
  2. Changed32 schema fields changed
    • removedInput schema / additionalProperties
      Removed value: -false
    • removedInput schema / properties / cities / additionalProperties
      Removed value: -false
    • addedInput schema / properties / cities / properties / values / items / maximum
      Added value: +9007199254740991
    • removedInput schema / properties / countries / additionalProperties
      Removed value: -false
    • removedInput schema / properties / departures / additionalProperties
      Removed value: -false
    • removedInput schema / properties / duration / additionalProperties
      Removed value: -false
    • addedInput schema / properties / duration / properties / max / maximum
      Added value: +9007199254740991
    • addedInput schema / properties / duration / properties / max / minimum
      Added value: +-9007199254740991
    • addedInput schema / properties / duration / properties / min / maximum
      Added value: +9007199254740991
    • addedInput schema / properties / end_city / items / maximum
      Added value: +9007199254740991
    • removedInput schema / properties / max_age / additionalProperties
      Removed value: -false
    • addedInput schema / properties / max_age / properties / max / maximum
      Added value: +9007199254740991
    • addedInput schema / properties / max_age / properties / max / minimum
      Added value: +-9007199254740991
    • addedInput schema / properties / max_age / properties / min / maximum
      Added value: +9007199254740991
    • removedInput schema / properties / max_group_size / additionalProperties
      Removed value: -false
    • addedInput schema / properties / max_group_size / properties / max / maximum
      Added value: +9007199254740991
    • addedInput schema / properties / max_group_size / properties / max / minimum
      Added value: +-9007199254740991
    • addedInput schema / properties / max_group_size / properties / min / maximum
      Added value: +9007199254740991
    • removedInput schema / properties / min_age / additionalProperties
      Removed value: -false
    • addedInput schema / properties / min_age / properties / max / maximum
      Added value: +9007199254740991
    • addedInput schema / properties / min_age / properties / max / minimum
      Added value: +-9007199254740991
    • addedInput schema / properties / min_age / properties / min / maximum
      Added value: +9007199254740991
    • removedInput schema / properties / min_group_size / additionalProperties
      Removed value: -false
    • addedInput schema / properties / min_group_size / properties / max / maximum
      Added value: +9007199254740991
    • addedInput schema / properties / min_group_size / properties / max / minimum
      Added value: +-9007199254740991
    • addedInput schema / properties / min_group_size / properties / min / maximum
      Added value: +9007199254740991
    • removedInput schema / properties / price / additionalProperties
      Removed value: -false
    • changedInput schema / properties / price / description
      Previous value: -"Filter by tour price. E.g., { min: 500, max: 2000, currency: 'EUR' } finds tours priced between €500 and €2000. Min and max value cannot be this same."New value: +"Filter by tour price in the selected currency. E.g., { min: 500, max: 2000, currency: 'EUR' } finds tours priced between €500 and €2000. Min and max value cannot be this same."
    • changedInput schema / properties / price / properties / currency / description
      Previous value: -"Currency for price values"New value: +"Currency for price values."
    • changedInput schema / properties / price / properties / currency / enum
      Previous value: -[
      -  "EUR"
      -]New value: +[
      +  "USD",
      +  "EUR",
      +  "GBP",
      +  "AUD",
      +  "NZD",
      +  "CAD"
      +]
    • addedInput schema / properties / start_city / items / maximum
      Added value: +9007199254740991
    • addedInput schema / properties / tourIds / items / maximum
      Added value: +9007199254740991
  3. Changed3 schema fields changed
    • addedInput schema / properties / max_age
      Added value: +{
      +  "additionalProperties": false,
      +  "description": "Filter by tour's maximum age limit. E.g., { min: 18, max: 39 } finds tours limited to young adults. Use to find age-restricted tours like youth or senior-specific trips. Min and max value cannot be this same.",
      +  "properties": {
      +    "max": {
      +      "description": "Maximum value for max age",
      +      "type": "integer"
      +    },
      +    "min": {
      +      "description": "Minimum value for max age",
      +      "minimum": 0,
      +      "type": "integer"
      +    }
      +  },
      +  "required": [
      +    "min",
      +    "max"
      +  ],
      +  "type": "object"
      +}
    • addedInput schema / properties / min_age
      Added value: +{
      +  "additionalProperties": false,
      +  "description": "Filter by tour's minimum age requirement. E.g., { min: 1, max: 12 } finds tours that accept children under 12. Use to find family-friendly tours or tours with low age requirements. Min and max value cannot be this same.",
      +  "properties": {
      +    "max": {
      +      "description": "Maximum value for min age",
      +      "type": "integer"
      +    },
      +    "min": {
      +      "description": "Minimum value for min age",
      +      "minimum": 1,
      +      "type": "integer"
      +    }
      +  },
      +  "required": [
      +    "min",
      +    "max"
      +  ],
      +  "type": "object"
      +}
    • addedInput schema / properties / tourIds
      Added value: +{
      +  "description": "Filter by specific tour IDs. Use this to narrow search results to known tours.",
      +  "items": {
      +    "exclusiveMinimum": 0,
      +    "type": "integer"
      +  },
      +  "type": "array"
      +}
  4. First observed

TDQS

A4/5.0
Behavior4/5

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

With no annotations, the description must carry the full transparency burden. It discloses that the tool uses Google Vertex AI to understand intent, supports semantic search, and returns a list of tours with ID, name, URL, operator, and description. It also mentions performance characteristics ('to make search faster') and covers display modes. However, it does not mention edge cases like empty results or error behavior, which slightly lowers the score from 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.

Conciseness3/5

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

The description is well-structured with headings, tables, and examples, and it is front-loaded with usage guidance. However, it is quite long and repetitive, with filter details duplicated from the schema and multiple examples that could be condensed. Every sentence does not earn its place, so it is not a model of conciseness.

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?

Given the tool's high complexity (19 parameters, nested objects, no output schema), the description is thorough: it covers the required `textSearch`, optional filters across location, range, and AND/OR categories, provides comprehensive examples, and describes the response format. It references auxiliary tools like `b2b-cities-search` for IDs and explains the display modes. Minor gaps (e.g., no mention of pagination or result limits) prevent a 5.

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

Parameters3/5

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

Schema coverage is 95%, so the schema already provides rich descriptions for most parameters, earning a baseline of 3. The description adds a consolidated filter table and examples that clarify usage (e.g., age range examples for family-friendly tours), but much of this duplicates schema text. It does not add substantial new semantics beyond the schema, so a 3 is appropriate.

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 clearly states the tool performs AI-powered semantic search for tours using natural language queries with optional filters. It explicitly names the tool (`vertex-tour-search`) and distinguishes it from sibling tools like `tourradar_vertex-tour-title-search` and `tourradar_vertex-review-search` by focusing on natural-language intent understanding. The phrase 'Use `vertex-tour-search` when...' further reinforces its specific purpose.

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 description provides explicit when-to-use guidance with bullet points ('Use `vertex-tour-search` when: the user describes what they want in natural language', etc.) and strongly encourages filter usage to improve speed and precision. It lacks explicit when-not-to-use or alternative tool references, but the context is clear enough for an agent to distinguish this from other search tools.

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.