Skip to main content
Glama
felipebasurto

viajante

Server Configuration

Describes the environment variables required to run the server.

NameRequiredDescriptionDefault

No arguments

Instructions

Guidance the server publishes about itself, which clients place ahead of the tool catalog so the model reads it before choosing anything.

This server publishes no instructions, or was last inspected before Glama recorded them.

Capabilities

Features and capabilities supported by this server

Protocol revision2025-11-25

CapabilityDetails
tools
{
  "listChanged": false
}
prompts
{
  "listChanged": false
}
resources
{
  "subscribe": false,
  "listChanged": false
}

Tools

Functions exposed to the LLM to take actions

NameDescription
get_runtime_infoA

Offline executing package, Python and hotel schema versions.

Check before searches; an npm MCP does not upgrade a separate uv tool installation. May run during a search. No network or personal paths.

search_flightsA

Google Flights search for named routes and dates. Each routes entry is ORIGIN-DEST:YYYY-MM-DD. Use search_dates for the cheapest week and search_flex for +/-N days. fetch=detail needs the browser extra and Chromium. Currency is currency, or inferred from a named origin's owned country; if unproven, ask. Viajante does not convert. Do not invent a bag fee. max_stops is 0, 1 or 2. Metro codes (LON, NYC) expand on one-way and rt routes. One-way searches send clock bounds, max_duration, max_layover, price_cap, less_emissions and hide_separate_tickets to the page, and check each one locally. exclude_basic_economy is refused. nearby_days (default 0, off) adds a ±N cheapest-fare grid on that search; round trips shift both dates and keep the trip length. The grid reuses the date calendar and does not change offers. A successful query carries price_insight when the page states a level (low, typical, or high) that matches its heading. That level is Google's label for the current price against its typical range, not a forecast. include_price_history adds the page's own price history and is off by default. A successful query may carry recommendation: evidence, not a verdict. Check relaxed_requirements before calling it a match. After a named hub or leisure trunk, search_hidden_city may run once with the same route and date, never when bags were named. Rules and wording: get_guide.

    deadline_seconds stops starting queries after that many seconds; unfinished
    queries are error code deadline (not loaded, not empty). See get_guide.
    
get_hotel_detailsA

Read a hotel offer this process returned. room_rates must be a boolean.

False returns the stored quote, does not search, and may run during another search. True asks Skiplagged for a separate USD room quote and takes the one-search lock. That quote is not the original stay when the city matches more than one place, the returned coordinates do not match the hotel, or the provider echoes different adults, rooms, or dates (occupancy_mismatch, dates_mismatch, property_mismatch). A missing echo is echo unknown. When the provider does not echo adults, rooms, and dates, a returned quote is partial. A read does not evict stored searches. Unknown or evicted ids send nothing.

search_datesA

Cheapest-per-day calendar for one named route, up to 31 days. route is ORIGIN-DEST; start and end are ISO dates. Use search_flex for +/-N around one date. This calendar is HTTP only and has no fetch mode. If it returns blocked, stop: do not switch to a browser or follow with search_flex or search_flights. Currency and country as in search_flights. Viajante does not convert.

    deadline_seconds stops starting queries after that many seconds; unfinished
    queries are error code deadline (not loaded, not empty). See get_guide.
    
search_flexA

Flex window of +/-N days around one date, then one shopping search on the cheapest day. route is ORIGIN-DEST; around is an ISO date. Use search_dates for a cheapest-week calendar; do not brute-force a date matrix. Currency and country as in search_flights. A markup_drift day is not no_results: do not invent a cheapest week. A named-date search_flights is allowed.

    deadline_seconds stops starting queries after that many seconds; unfinished
    queries are error code deadline (not loaded, not empty). See get_guide.
    
search_exploreB

Destinations from one origin, then a priced shortlist. Give start (ISO date) or month, not both. Needs the browser extra; one adult in economy only. Currency and country as in search_flights. Viajante does not convert. A destination without a price is not_loaded, not a usable row.

    deadline_seconds stops starting queries after that many seconds; unfinished
    queries are error code deadline (not loaded, not empty). See get_guide.
    
search_hotelsA

Hotel search. Quotes are total-stay prices, not per person. Currency is required (no origin airport), except source skiplagged, whose quotes are USD. Quotes come back in the requested currency as the provider returned them. Viajante does not convert and never invents ISO 4217. location is one named place: ask when it is a typo, a region, or several candidate towns. The request carries adults and rooms only; do not state a room split. Google offers are in price order, not advice: weigh location, latitude and longitude, and review_count yourself. stays batches up to 8 location/check_in/check_out objects in one call. property_matrix lists each property's total per stay, null where it was not returned (not proof of unavailability), sorted by name. near is a point you name, {lat, lng}; max_distance_km needs it. entire_home=true asks for a house or villa; those offers carry sleeps, bedrooms and beds. lodging_evidence_conflict marks contradictory room or unit labels. Full rules: get_guide.

    deadline_seconds stops starting queries after that many seconds; unfinished
    queries are error code deadline (not loaded, not empty). See get_guide.
    
search_hotel_roomsA

Room rates for one Skiplagged hotel, for 1-3 finalists. Name it by hotel_id (the provider_id of a skiplagged search_hotels offer) or by hotel_name plus city. A name must match exactly (case, accents and punctuation ignored); no match or several matches is no_results, never a guess. Use the name form for a Google finalist: a Google hostel price can be a dorm bed, and these rates say what the room is. Rates are USD, not converted, in provider order. total_price is the whole stay for the party and rooms searched. occupancy_limit is per room type and is not proof that a party fits across rooms. Skiplagged only: do not mix these rows with Google or Booking prices.

search_tripB

Flights then one hotel stay, under one lock. Currency follows the flight origin or an explicit code; if unproven, ask. Viajante does not convert. The same currency goes to the hotel. Stay dates default to the flights' window. Unnamed baggage_buffer is 0. A positive carry_on is verified on the page; named bags are refused. Flight queries carry the same recommendation block as search_flights. trip_total is omitted if either side missed.

    deadline_seconds stops starting queries after that many seconds; unfinished
    queries are error code deadline (not loaded, not empty). See get_guide.
    
search_split_ticketsA

Opt-in separately ticketed itineraries built from real one-way quotes. route is ORIGIN-DEST:DATE (one-way: self-transfer via a hub) or, with trip="rt", ORIGIN-DEST:OUT:BACK (cheapest outbound plus cheapest return one-way). It runs the packaged search first (packaged_report), then up to max_hubs hubs (default 3, at most 5): 2 queries per hub, 3 with allow_overnight. via lists up to 5 connection airports; unnamed, hubs are the packaged layover airports. It stops at a recorded rate limit: do not retry. Currency as in search_flights. Every itinerary says split_ticket true and connection_protected false. A missed connection between tickets is not rebooked, and bags may need re-checking. Each ticket is confirmed on its own google_flights_url. Clock, duration, layover, via, overnight, and airport filters apply to the itinerary: via and exclude_via name hubs. min_connection_hours (default 3) is a planning default, not provider evidence. total is null unless every part shares one currency. Not for multi-city. Full rules: get_guide.

lookup_airportsD–
search_hidden_cityA

Skiplagged search for a named route. Opt-in; never mixed with Google Flights. Run it once after search_flights on a named common route and date. Skip it for named bags, explore, dates, flex, multi-city and unproven destinations. Hidden-city tickets can violate airline contracts. Lead with hidden_city true rows and confirm on booking_url; Viajante does not book. currency is an optional keep of the card currency: Skiplagged cards are USD, so omit it or pass USD. A keep that matches no card is currency_mismatch. Nothing is converted.

compare_awardsA

Compare a named award offer to cash locally. Does not invent seats.

offer must include origin, destination, departure_date, program, points, and evidence. confirmed evidence needs a named source. Unnamed cash_price omits cpp_cents. Do not treat estimated or user_supplied as live inventory.

lookup_transfersC

Local card-to-program transfer table. Not live award availability.

validate_itineraryA

Validate selected v2 flight offers locally, without fetching. Pass legs in travel order, each with its exact query and one selected offer. The result is tri-state: unknown evidence never becomes pass. arrival_deadline is an ISO date and time: an explicit offset is compared in UTC, a naive time is local at the arrival airport. chronological checks owned segment instants. min_stay_days and max_stay_days use owned journey dates.

recheck_offerA

Re-check an earlier flight offer with one fresh Google Flights search (never the replay cache). offer is a prior search_flights offer, or a {query, offer} row, or enough of one: price plus every segment's flight_number, origin, destination and departure clock. query defaults to the offer's evidence query and is replayed (cabin, stops, bags, airline filters). A price_cap is not sent; a break is reported in filter_violations. Read the outcome: check_failed means the check did not run, never that the offer is gone. Confirm the price on the provider's page; this is not a booking guarantee. Full rules: get_guide.

plan_stay_blocksA

Local: group consecutive nights with the same people into blocks.

roster maps each night (YYYY-MM-DD, the night that starts that day) to the names sleeping. Nights must be consecutive. Each block gives check_in, check_out, nights, headcount and people, so one search_hotels stay per block can use headcount as adults. Never decides where anyone sleeps.

split_stay_costsA

Local: split each stay's total among the people who sleep there.

stays are {name, check_in, check_out, total}; roster is as for plan_stay_blocks. A stay's rate is its total over the person-nights the roster puts inside it, so someone who never sleeps there pays nothing toward it. currency is named by the caller and never converted. fee_per_person_night is a per-night charge the caller names (a city tax) added per person. Cents are allocated so each stay sums exactly. Nights no stay covers come back as unallocated_nights. Arithmetic only: it does not price or recommend a stay.

verify_answerA

Check a draft reply against this process's recent search payloads.

Call before sending a reply that quotes fares, stays, dates, airport codes, or links. Lists each amount, currency, IATA code, ISO date, and URL in the draft that no recorded search returned. Drop or re-search every unowned row; do not quote it as found. Sums you computed are unowned unless a payload carries them (e.g. trip_total). Local; may run during a search.

price_historyA

Local read of prices this machine observed (opt-in: VIAJANTE_PRICE_HISTORY=1 in the server environment). One exact query in one currency is a series: first_seen, last_seen, lowest, highest, and the change since the previous observation. One observation reports no trend. Currencies are never merged or converted, and nothing is forecast. route is ORIGIN-DEST; date matches a departure, return, check-in or check-out; location names a hotel stay. An unreadable log gives read_error and series null: unknown, not empty. May run during a search.

watch_priceA

Re-run a saved flight or hotel search and report the change. With no arguments, list saved watches (watches null and status failed when the file cannot be read). With name, kind (flight or hotel) and params (the search_flights or search_hotels arguments): validate, save, then run. Saving under an existing name replaces that watch. With only name, run the saved search. The run records an observation even when the history opt-in is off. A cached or rate-limited run records nothing. No scheduler and no notification: do not call it in a loop.

get_guideA

The long operational guide (markdown); the same text as the viajante://guide resource.

For clients that do not read MCP resources. Returns {"guide": markdown}. Local; may run during a search.

Prompts

Interactive templates invoked by user choice

NameDescription

No prompts

Resources

Contextual data attached and managed by the client

NameDescription
guideLong operational rules for the viajante tools: evidence, currency, rate limits, hotels and stays.

TDQS

B3/5.0

Scored across 22 tools

Disambiguation4/5

The many search_* tools have clearly distinct scopes (dates vs flex vs explore vs hidden city vs split tickets), but some overlap remains: get_hotel_details with room_rates=true and search_hotel_rooms both fetch room quotes, and price_history/watch_price both track price changes. Descriptions help, so mostly distinct but not perfect.

Naming Consistency4/5

All names are lowercase snake_case, mostly verb_noun, but price_history is noun-only and the set mixes search_, lookup_, get_, watch_ verbs without a single uniform convention. Still readable and predictable overall.

Tool Count3/5

22 tools is on the heavy side for a travel search server. While most tools have a clear role, the breadth of flight-search modes and overlapping hotel/price utilities makes the set feel borderline overloaded.

Completeness4/5

The surface covers flight/hotel search, validation, rechecking, price history, watching, awards, transfers, and local planning. Booking is explicitly out of scope, but there is no dedicated multi-city search or ground transport coverage, leaving minor gaps.

Maintenance

ActivityActive
ResponsivenessResponsive