viajante
This server lets an AI assistant search flights, hotels, dates, and destinations via Google Flights, Google Hotels, Booking.com, and offline airport lookup.
search_flights: Search one-way, round-trip, or multi-city flights for named routes/dates with filters (stops, cabin, airlines, baggage, times, layovers, passengers).
search_dates: Compare cheapest fares per departure date across a window of up to 31 days for a route.
search_flex: Check dates within ±N days of a target date, then fetch flights for the cheapest day.
search_explore: Discover destinations from an origin airport and price a shortlist.
search_hotels: Find stays with total-stay prices, ratings, and cancellation details; currency required.
search_trip: Search flights and hotels together and sum compatible results into a trip total.
lookup_airports: Look up airport codes offline by city or code.
It does not convert currencies, book travel, or guarantee live prices/availability.
Searches Google Flights and Google Hotels for flight and hotel availability, prices, itinerary details, and links, including date comparison, flexible date, explore, and combined flight-plus-hotel searches.
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@viajanteFind cheap hotels in Tokyo for two adults next week."
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
Viajante
Flight and hotel search for the terminal, Python, and AI assistants.
Viajante searches Google Flights, Google Hotels, and Booking.com. Use it to compare flights, find cheaper travel dates, explore destinations, or look up places to stay. It runs on your computer and connects directly to the travel sites; no API keys are required.
You can run a search from the command line, call the Python library, or connect an AI assistant through the Model Context Protocol (MCP). Results include prices, itinerary details, source text, and links where available.
Usage guide · Contributing · Report an issue
Install
Requires Python 3.10 or later.
PyPI:
pip install viajantenpx (needs uv and Python 3.10+ on PATH):
npx -y -p @viajante/mcp viajante airports JFKNo install (same uv + Python 3.10+):
uvx --from viajante viajante airports JFKRelated MCP server: FlightTicketMCP
Quick start
Search for a one-way flight or a hotel stay:
viajante flights JFK-LHR:2026-11-15 --fetch sweep
viajante hotels London 2026-11-15 2026-11-20 --currency GBP --source googleUse future dates when trying the examples. JFK and LHR are airport codes;
viajante airports london lists airports for a city so you can choose one.
These searches use HTTP and do not need a browser. Booking.com and the browser mode for Google Flights require the optional browser setup.
Connect an AI assistant
Viajante provides a local MCP server over stdio. Requires
uv and Python 3.10+.
Add this entry to your assistant's MCP configuration:
{
"mcpServers": {
"viajante": {
"command": "npx",
"args": ["-y", "@viajante/mcp"]
}
}
}Native Python (no Node):
{
"mcpServers": {
"viajante": {
"command": "uvx",
"args": ["--from", "viajante[mcp]", "viajante-mcp"]
}
}
}This configuration supports Google Flights and Google Hotels without Chromium.
npx still needs uvx (and Python 3.10+) on PATH. If you use an existing
Python environment instead, install pip install 'viajante[mcp]' and configure
the client to run that environment's viajante-mcp executable.
Once connected, you can ask:
Find a seven-night round trip from BOS to LHR, departing between November 1 and November 30, 2026. Compare the departure dates.
Search for hotels in Tokyo from November 12 to November 16, 2026, for two adults. Use JPY and require free cancellation.
The server exposes seven tools:
Tool | Use it to |
| Search one-way, round-trip, or multi-city flights. |
| Compare the cheapest returned fare for each departure date in a window. |
| Check dates around a target departure, then fetch flights for the cheapest day. |
| Discover destinations from an origin airport and price a shortlist. |
| Find stays with total-stay prices and cancellation details where available. |
| Search flights and hotels together and sum compatible results. |
| Look up airport codes offline. |
Use the command line
Each search command accepts --save FILE to write a JSON report. Run
viajante <command> --help for its options.
Command | Purpose |
| Search specific routes and dates. |
| Compare departure dates across a window of up to 31 days. |
| Search a few days either side of a target date. |
| Find destinations from an origin airport. |
| Search Google Hotels or Booking.com. |
| Search flights and a hotel stay in one request. |
| Find airport codes by city or code. |
For example, compare dates for a seven-night round trip:
viajante dates BOS-LHR --from 2026-11-01 --to 2026-11-30 --nights 7See the usage guide for round trips, flexible dates, filters, hotel searches, and saved reports.
Use Python
get_flights accepts the same route format as the CLI and returns a typed
report:
from viajante import get_flights
report = get_flights("JFK-LHR:2026-11-15", fetch="sweep", top=5)
for result in report.queries:
if result.status == "ok":
for offer in result.offers:
print(offer.price, report.currency, offer.airline, offer.duration)
else:
print(result.error)The library also exports FlightQuery, HotelQuery, and the search_*
functions. The
Python examples
show how to build queries directly.
Optional browser support
For Booking.com or Google Flights with --fetch detail, install Playwright
and Chromium in the environment that runs Viajante:
pip install 'viajante[browser]'
playwright install chromiumFor the uvx MCP configuration, change --from to viajante[mcp,browser] and
install Chromium through that same environment:
uvx --from 'viajante[mcp,browser]' playwright install chromiumFlight searches default to --fetch auto: with Playwright installed, they use
the browser for one or two queries and HTTP for larger batches. Without
Playwright, they use HTTP. Hotel searches default to Booking.com in the CLI
and Google Hotels in MCP; use --source google for CLI hotel searches without
a browser.
Understanding the results
Currency: Flight searches use the origin airport's country to choose a currency when possible. You can set one explicitly with
--currency. Standalone hotel searches require a currency. Viajante does not convert between currencies.Baggage: Use
--bagsor--carry-onto request baggage pricing from Google Flights. An optional--baggage-bufferaffects ranking; it is a user-supplied amount, not a quoted bag fee, and defaults to zero.Hotels: Prices cover the requested stay. Free cancellation is required by default, but an applied search filter and a property's stated terms are recorded separately. Google ratings use a 0–5 scale; Booking.com uses 0–10.
Price comparisons: When present,
typicalis a median from the same route's date calendar. It is not a historical market average.Trip totals: A combined total is shown only when both searches return usable prices, their dates overlap, and their currencies match. It adds the flight fare and hotel stay; it does not create a package booking.
Missing information: Fields that cannot be determined remain unknown or are omitted. Source text is retained with offers to help you inspect the result.
Travel sites can change their pages, block requests, or return incomplete results. Prices and availability can also change after a search. Check the final fare, baggage allowance, hotel total, and cancellation terms on the provider's site before booking.
Contributing
Bug reports, documentation improvements, and code contributions are welcome. The contributor guide covers local setup and the offline test suite. For a bug report, include your version, command, and error message, with personal information removed.
License
Viajante is available under the MIT License. It is an independent project and is not affiliated with Google, Booking.com, or any airline. Use of those services is subject to their respective terms: Google and Booking.com.
Available Tools
7 toolslookup_airportsD
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| query | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Tool has no description.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Tool has no description.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Tool has no description.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Tool has no description.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Tool has no description.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Tool has no description.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_datesA
Cheapest-per-day calendar for a named route (up to 31 days).
Use this for the cheapest week. Use search_flex for ±N around one date. route is ORIGIN-DEST and start/end are ISO dates. This HTTP calendar has no fetch mode; if blocked, do not use a separate browser as MCP recovery or evidence. Stop that calendar; do not follow with flex or search_flights. Currency is currency or inferred from a named origin's owned country. If unknown, ask. Viajante does not convert. The calling agent may convert for the user. Optional country is Google gl (origin market); omit when unset. Unnamed baggage_buffer is 0.
| Name | Required | Description | Default |
|---|---|---|---|
| end | Yes | ||
| via | No | ||
| bags | No | ||
| sort | No | ||
| trip | No | one-way | |
| cabin | No | economy | |
| proxy | No | ||
| route | Yes | ||
| start | Yes | ||
| adults | No | ||
| nearby | No | ||
| nights | No | ||
| country | No | ||
| airlines | No | ||
| alliance | No | ||
| carry_on | No | ||
| children | No | ||
| currency | No | ||
| max_stops | No | ||
| price_cap | No | ||
| exclude_via | No | ||
| max_layover | No | ||
| min_layover | No | ||
| depart_after | No | ||
| max_duration | No | ||
| no_overnight | No | ||
| arrive_before | No | ||
| depart_window | No | ||
| baggage_buffer | No | ||
| infants_on_lap | No | ||
| infants_in_seat | No | ||
| exclude_airlines | No | ||
| exclude_airports | No | ||
| exclude_alliance | No | ||
| include_airports | No | ||
| require_overnight | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It reveals critical behavior: no fetch mode, no currency conversion (and allows the agent to convert), optional country as Google gl, and a default baggage_buffer of 0. It also warns about blocking and what not to do afterward. The main gap is absence of side-effect or error details, but it covers the key operational quirks well.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is several sentences long but each sentence adds value, covering purpose, usage, and key parameter details. It is front-loaded with the purpose and routing, and the structure separates concerns (usage, parameters, currency). It is not overly verbose given the 36 parameters, though it could be tightened by removing redundancies like 'currency is currency'.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With 36 parameters, no output schema, and no annotations, the description provides a solid foundation for the core use case (cheapest week) but omits many parameter semantics and does not describe the output format, pagination, or return behavior. It is complete enough for a basic call but not fully comprehensive for all configurable options.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate. It explains route, start/end, currency, country, and baggage_buffer, but the other 31 parameters (sort, trip, cabin, proxy, adults, nearby, nights, airlines, alliance, carry_on, max_stops, price_cap, etc.) receive no semantic explanation. This leaves many parameters ambiguous for an agent, especially without an output schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a clear purpose: 'Cheapest-per-day calendar for a named route (up to 31 days).' It uses a specific verb (search/calendar) and a resource (route), and explicitly contrasts with search_flex ('Use search_flex for ±N around one date'), making it distinguishable from siblings.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives explicit when-to-use guidance: 'Use this for the cheapest week. Use search_flex for ±N around one date.' It also provides strong negative guidance, telling the agent to stop after this tool and not follow with flex or search_flights, and warns against using a separate browser as MCP recovery. This is exemplary routing.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_exploreB
Destinations from one origin, then a priced shortlist.
Currency is currency or inferred from a named origin's owned country. If unknown, ask. Viajante does not convert. The calling agent may convert for the user. Unnamed baggage_buffer is 0. Optional country is Google gl (origin market); omit when unset.
| Name | Required | Description | Default |
|---|---|---|---|
| top | No | ||
| via | No | ||
| bags | No | ||
| days | No | ||
| sort | No | price | |
| cabin | No | economy | |
| month | No | ||
| proxy | No | ||
| start | No | ||
| adults | No | ||
| nearby | No | ||
| origin | Yes | ||
| country | No | ||
| airlines | No | ||
| alliance | No | ||
| carry_on | No | ||
| children | No | ||
| currency | No | ||
| max_stops | No | ||
| price_cap | No | ||
| exclude_via | No | ||
| max_layover | No | ||
| min_layover | No | ||
| depart_after | No | ||
| max_duration | No | ||
| no_overnight | No | ||
| arrive_before | No | ||
| depart_window | No | ||
| baggage_buffer | No | ||
| infants_on_lap | No | ||
| exclude_regions | No | ||
| infants_in_seat | No | ||
| exclude_airlines | No | ||
| exclude_airports | No | ||
| exclude_alliance | No | ||
| include_airports | No | ||
| require_overnight | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the behavioral burden. It discloses meaningful quirks: Viajante does not convert currency, baggage_buffer defaults to 0 when unnamed, and country acts as Google gl (origin market). However, it does not disclose broader behaviors such as result limits, error handling, or whether the operation is read-only, leaving important gaps.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact and front-loads the core purpose in the first sentence. The remaining lines are terse and mostly high-value, though the phrase 'Currency is currency' is awkward and slightly tautological.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity (37 parameters) and the absence of an output schema, the description is far from complete. It provides a high-level outcome and a few parameter notes, but omits return details, request semantics for most fields, and any guidance on failures or edge cases.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate, but it only clarifies a few parameters: currency inference, country as Google gl, and baggage_buffer default. The other 34 parameters, including subtle ones like no_overnight, require_overnight, and proxy, remain explained only by their titles and defaults.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The opening line, 'Destinations from one origin, then a priced shortlist,' clearly states the resource (destinations) and scope (one origin) with a distinct outcome. It differentiates from most siblings by implying exploration across destinations rather than point-to-point flights, though it does not name an alternative tool explicitly.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives useful situational instructions such as 'If unknown, ask' for currency and 'omit when unset' for country, but does not say when to choose search_explore over search_dates, search_flex, or search_trip. Usage context is implied by the purpose line, not explicitly contrasted with siblings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_flexA
Flex window (±N), then one shopping search on the cheapest day.
Use search_dates for a cheapest-week calendar. Do not brute-force a date matrix. Currency is currency or inferred from a named origin's owned country. If unknown, ask. Viajante does not convert. The calling agent may convert for the user. Unnamed baggage_buffer is 0. Optional country is Google gl (origin market); omit when unset. A flex calendar miss (error markup_drift, empty days) is not no_results: do not invent a cheapest week; a named-date search_flights is allowed.
| Name | Required | Description | Default |
|---|---|---|---|
| top | No | ||
| via | No | ||
| bags | No | ||
| flex | Yes | ||
| sort | No | ranked | |
| trip | No | one-way | |
| cabin | No | economy | |
| proxy | No | ||
| route | Yes | ||
| adults | No | ||
| around | Yes | ||
| nearby | No | ||
| nights | No | ||
| country | No | ||
| airlines | No | ||
| alliance | No | ||
| carry_on | No | ||
| children | No | ||
| currency | No | ||
| max_stops | No | ||
| price_cap | No | ||
| exclude_via | No | ||
| max_layover | No | ||
| min_layover | No | ||
| depart_after | No | ||
| max_duration | No | ||
| no_overnight | No | ||
| arrive_before | No | ||
| depart_window | No | ||
| baggage_buffer | No | ||
| infants_on_lap | No | ||
| infants_in_seat | No | ||
| exclude_airlines | No | ||
| exclude_airports | No | ||
| exclude_alliance | No | ||
| include_airports | No | ||
| require_overnight | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries full behavioral disclosure burden. It reveals that only one shopping search is performed, that Viajante does not convert currency, that an unnamed baggage_buffer defaults to 0, and that flex-calendar misses are not the same as no_results. This is unusually rich behavioral context for a search tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The core purpose is front-loaded in the first sentence, and every subsequent sentence adds a distinct behavior, default, or routing rule. The text is dense and efficient, though the final cluster of notes reads somewhat telegraphically.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 37-parameter tool with no annotations and no output schema, the description covers usage boundaries, defaults, currency inference, country semantics, and error-handling behavior. It does not describe the return shape or authentication requirements, but the operational guidance is strong enough for correct invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description compensates for the non-obvious parameters: flex is a ±N window, country is a Google gl origin market to omit when unset, baggage_buffer defaults to 0, and currency should be asked about if unknown. Many optional parameters remain undocumented, but their titles and defaults are largely self-explanatory.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The first sentence defines the operation precisely: flex window around a date, then one shopping search on the cheapest day. It also distinguishes this tool from search_dates and search_flights by name, so an agent can tell exactly what this tool does relative to its siblings.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly routes usage: use search_dates for a cheapest-week calendar, do not brute-force a date matrix, and fall back to a named-date search_flights when a flex calendar miss occurs. This is concrete, actionable guidance with named alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_flightsA
Search Google Flights for named routes and dates.
Use search_dates for the cheapest week and search_flex for ±N days. Each routes entry is ORIGIN-DEST:YYYY-MM-DD. fetch=detail requires the browser extra and Chromium in the MCP environment. Currency is currency or inferred from a named origin's owned country. If unknown, ask. Viajante does not convert. The calling agent may convert for the user. Unproven country, dest, or currency (city with several airports, Europe, unnamed origin, two currencies) must not be guessed. Optional country is Google gl (origin market); omit when unset. Unnamed baggage_buffer is 0. Prefer bags / carry_on on the shopping request. Do not invent a bag fee. max_stops is 0, 1, or 2.
| Name | Required | Description | Default |
|---|---|---|---|
| top | No | ||
| via | No | ||
| bags | No | ||
| sort | No | ranked | |
| trip | No | one-way | |
| cabin | No | economy | |
| fetch | No | auto | |
| proxy | No | ||
| adults | No | ||
| nearby | No | ||
| routes | Yes | ||
| country | No | ||
| airlines | No | ||
| alliance | No | ||
| carry_on | No | ||
| children | No | ||
| currency | No | ||
| max_stops | No | ||
| price_cap | No | ||
| exclude_via | No | ||
| max_layover | No | ||
| min_layover | No | ||
| depart_after | No | ||
| max_duration | No | ||
| no_overnight | No | ||
| arrive_before | No | ||
| depart_window | No | ||
| baggage_buffer | No | ||
| infants_on_lap | No | ||
| infants_in_seat | No | ||
| exclude_airlines | No | ||
| exclude_airports | No | ||
| exclude_alliance | No | ||
| include_airports | No | ||
| require_overnight | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full behavioral burden and does so thoroughly. It discloses inference rules ('Currency is currency or inferred from a named origin's owned country'), constraints ('must not be guessed'), defaults ('Unnamed baggage_buffer is 0'), and specific behaviors like 'Prefer bags / carry_on on the shopping request' and 'max_stops is 0, 1, or 2.' It also warns about environment requirements for fetch=detail. This goes well beyond a basic mutation hint.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a dense block of text but every sentence carries useful information. It front-loads the core purpose and alternative routing first, then dives into specifics. It is longer than ideal but not verbose – each clause adds a constraint or default an agent must know. The structure could be improved with bullet points, but it remains efficient and scannable.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity (35 parameters, no output schema, no annotations), the description covers many critical aspects: route format, currency/country inference, bag handling, max_stops, and environment prerequisites. It does not describe the return value structure, which is a gap since there is no output schema, and some optional parameters (e.g., 'proxy', 'depart_window') lack explanation. However, the coverage is strong for the most consequential fields, making it largely complete for correct invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate. It clarifies key parameters: 'routes' format (ORIGIN-DEST:YYYY-MM-DD), currency inference rules, country as Google gl, baggage_buffer default, and max_stops allowed values. However, many parameters like 'proxy', 'nearby', 'exclude_via', 'depart_window', etc. are left undefined; their titles are self-explanatory or not, and the description doesn't add meaning for them. Partial compensation for a 35-parameter schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb and resource: 'Search Google Flights for named routes and dates.' It immediately distinguishes itself from siblings by naming search_dates and search_flex as alternatives for different use cases, so an agent can tell which tool to pick without opening schemas.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly states when to use alternatives: 'Use search_dates for the cheapest week and search_flex for ±N days.' It also gives prerequisites (fetch=detail requires browser extra and Chromium) and instructs to ask when unsure about currency or country, so the agent knows exactly when to call this tool vs others.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_hotelsA
Hotel search. Currency is required (no origin airport).
Quotes are in the requested ISO 4217 currency as the provider returned them. Viajante does not convert. The calling agent may convert for the user. Do not invent ISO 4217 from vibe.
| Name | Required | Description | Default |
|---|---|---|---|
| top | No | ||
| rooms | No | ||
| adults | No | ||
| source | No | ||
| check_in | Yes | ||
| currency | No | ||
| location | Yes | ||
| check_out | Yes | ||
| min_rating | No | ||
| entire_home | No | ||
| free_cancellation | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries full responsibility. It discloses that the tool does not perform currency conversion and only returns quotes as provided by the provider, which is valuable behavioral insight. It also warns against inventing currency codes, addressing a potential misuse. It does not mention response format or pagination, but the critical behavioral notes are present.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact and front-loaded with the most critical information: 'Hotel search' first, then the currency requirement. Every sentence provides new information; there is no repetition or filler. It uses paragraphs effectively to separate key constraints from detailed behavior.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given 11 parameters, 3 required, 0% schema coverage, and no output schema, the description is quite complete for the core use case. It highlights the most critical constraint (currency) and warns against common errors. It does not explain each parameter or the return format, but the focus on the critical distinction from flight search is sufficient for an agent to call it correctly in most scenarios.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, so the description must clarify parameter meaning. The description emphasizes that 'currency' is required despite the schema listing it as optional (default null), which is a critical clarification. It also implicitly clarifies that 'location' is a hotel destination, not an airport. However, many parameters like 'top', 'rooms', 'adults' remain unexplained, but the essential parameter (currency) is well addressed.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description begins with 'Hotel search', a specific verb-resource pair that clearly distinguishes it from sibling tools like search_flights or search_trip. It further defines the scope by specifying currency requirements and its distinction from flight-related searches, making it immediately recognizable.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly states that currency is required and clarifies that no origin airport is involved, which helps distinguish from flight search tools. It does not explicitly name alternatives, but the key constraint (currency required, no origin) is clear enough to prevent misuse. There is no explicit 'when not to use' guidance, but the emphasis on currency and the absence of origin implies the tool is for hotel-only searches.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_tripB
Flights then hotel. Currency follows the flight origin or an explicit code.
If unknown, ask. Viajante does not convert. The calling agent may convert for the user. Unnamed baggage_buffer is 0. Prefer bags / carry_on on the shopping request. The same currency is passed to hotels. Optional country is Google gl (origin market); omit when unset.
| Name | Required | Description | Default |
|---|---|---|---|
| top | No | ||
| via | No | ||
| bags | No | ||
| sort | No | ranked | |
| trip | No | one-way | |
| cabin | No | economy | |
| fetch | No | auto | |
| rooms | No | ||
| adults | No | ||
| nearby | No | ||
| routes | Yes | ||
| source | No | ||
| country | No | ||
| airlines | No | ||
| alliance | No | ||
| carry_on | No | ||
| check_in | No | ||
| children | No | ||
| currency | No | ||
| location | Yes | ||
| check_out | No | ||
| max_stops | No | ||
| price_cap | No | ||
| min_rating | No | ||
| entire_home | No | ||
| exclude_via | No | ||
| depart_after | No | ||
| no_overnight | No | ||
| arrive_before | No | ||
| baggage_buffer | No | ||
| infants_on_lap | No | ||
| infants_in_seat | No | ||
| exclude_airlines | No | ||
| exclude_airports | No | ||
| exclude_alliance | No | ||
| include_airports | No | ||
| free_cancellation | No | ||
| require_overnight | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the burden of behavioral disclosure, and it adds meaningful context: currency follows flight origin or an explicit code, Viajante does not convert, the same currency is passed to hotels, and unnamed baggage_buffer defaults to 0. These are non-obvious behaviors beyond what the schema reveals, though it does not describe output shape or other side effects.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is short and mostly front-loaded with its core concept, but several phrases are cryptic and loosely connected: 'Flights then hotel,' 'Unnamed baggage_buffer is 0,' and 'Prefer bags / carry_on on the shopping request' are jargon-heavy and jump between topics without clear organization. Conciseness is achieved, but at some cost to readability.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with 38 parameters, no output schema, and no annotations, this description is far from complete. It covers currency, country, and baggage quirks, but leaves the overall search behavior, relationship between routes and location, result format, and most optional filters effectively undocumented. A higher score would require broader and clearer operational context.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate for 38 largely unexplained parameters. It does add value for currency, country, baggage_buffer, bags, and carry_on, but the majority of parameters—routes, location, top, sort, cabin, rooms, adults, source, and many filters—receive no semantic clarification beyond their names and defaults.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description begins with 'Flights then hotel,' which signals that this tool searches for bundled flight-and-hotel trip options. This distinguishes it from sibling tools like search_flights and search_hotels, though the phrasing is terse and could be more explicit about the tool's full purpose.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides situational rules: ask when currency is unknown, do not rely on Viajante to convert, prefer bags/carry_on params, and omit country when unset. However, it never explicitly says when to choose search_trip over alternatives such as search_flights, search_hotels, or search_explore, so the selection guidance is implied rather than stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
7 tool updates
v1.0.0- First observed
lookup_airports - First observed
search_dates - First observed
search_explore - First observed
search_flex - First observed
search_flights - First observed
search_hotels - First observed
search_trip
TDQS
Scored across 7 tools
Each tool targets a distinct search mode: flights, hotels, dates, flex, explore, or trip. search_dates and search_flex overlap somewhat in purpose, but the descriptions clearly differentiate calendar vs. flex-window behavior.
Most tools follow a consistent 'search_' prefix with a clear noun (hotels, flights, dates, flex, explore, trip). lookup_airports breaks the pattern slightly, but it is still a verb_noun structure and easy to predict.
Seven tools is well-scoped for a travel search server, covering flight search variants, hotels, trips, and airport lookup without unnecessary bloat or redundancy.
The surface covers the core travel-search workflows: airport lookup, hotel search, flight search, flexible date search, destination exploration, and combined trips. Minor gaps exist (e.g., no hotel-specific date/flex search), but agents can accomplish the main tasks.
Maintenance
Related MCP Connectors
Flight search MCP server providing search, pagination, and itinerary details for AI assistants.
Search and compare flight offers through a cache-aware Streamable HTTP MCP server for AI agents.
AI marketplace — flights, tours, activities, transport & more via MCP. No auth required.
Give AI assistants access to real-time data. Search the web, compare flights, find hotels, and more.
Related MCP Servers
- AlicenseNot gradedqualityNot gradedmaintenanceThis MCP server allows an AI assistants to search for flight information online using Google Flights. It can find flights for specific dates or search through a range of dates to find all options or just the cheapest ones available.27-
- AlicenseBqualityDmaintenanceEnables AI assistants to query flight routes, real-time flight tracking, weather, and transfer flights via standardized MCP tools.10MIT
- AlicenseNot gradedqualityCmaintenanceCoordinates flights, hotels, events, weather, currency, and traffic data through a single MCP server, enabling comprehensive trip planning via natural language prompts.MIT
- FlicenseNot gradedqualityAmaintenanceProvides real travel search for AI assistants, enabling flight, hotel, car rental, and ground transportation searches through a single MCP tool, with no API keys required.83-