Skip to main content
Glama
745,119 tools. Updated 2026-11-05 04:24

"Planning a Trip and Booking a Hotel" matching MCP tools:

  • Return one set of booking and shopping links covering a whole trip in a single call: flight search, hotel search, airport taxi, attractions and tours, car rental, travel eSIM, travel VPN and the travel gear section, all regionalized to the traveler. Accepts route IATA codes, a city and trip dates, so the flight and hotel links are prefilled. The "include" parameter selects which categories are returned, so a trip with no driving can leave out car rental. Useful when a user is planning a trip end to end and wants every option in one place. It returns search links only: no live prices, no availability and no booking. Affiliate links: VoyageHacks may earn a commission at no additional cost to the traveler, which should be disclosed when the links are presented.
    ConnectorNo auth
  • The watched-trip updates log filtered to entries AFTER `since`. The notification payload: everything logged for the trip strictly after the `since` ISO-8601 timestamp (the user's last-seen time), oldest-first. Returns {trip_id, since, new_update_count, updates}. Use this tool to fetch the stored update entries the user has not seen yet; for a live recomputed diff, use whats_changed instead. An empty `since` returns the whole log. Id is regex-validated (^trip-[a-z0-9-]+$); unknown id -> {"error": "not_found"}, malformed id -> {"error": "invalid_trip_id"}.
    ConnectorNo auth
  • Work out the fuel cost of a trip, and of regular driving, in New Zealand. Use this for ANY question about what fuel costs: a road trip, a commute, the running cost of a car, or comparing two vehicles. Common use cases: 'what does it cost to drive Auckland to Wellington', 'how much fuel money do I spend a year commuting', 'is a 6L/100km car worth it over an 9L/100km one', 'petrol cost for 400km'. IMPORTANT about consumption: this takes litres per 100 km, which is how New Zealand quotes fuel economy and what is printed on a vehicle's fuel economy label. A LOWER number is a more efficient car. If a user gives miles per gallon or kilometres per litre, convert it before calling this, or the answer will be confidently wrong. Args: distance_km: Trip distance in kilometres. consumption_l_per_100km: Fuel consumption in litres per 100 km. price_per_litre: Pump price in NZD per litre. Around 2.60 to 3.00 for petrol in 2026; ask the user rather than guessing if it matters. weekly_km: Kilometres driven in a typical week, for the running costs. Leave at 0 for a one-off trip, which returns zero for the weekly, monthly and annual figures rather than an error. Returns: Litres used, trip cost, cost per km, cost per 100 km, and weekly, monthly and annual running costs. cost_per_100km depends only on the vehicle and the pump price, so it is the figure to compare cars with. monthly_cost is a twelfth of the annual figure, not weekly x 4.33. Covers fuel only. Not road user charges, which diesel and electric vehicles pay by the kilometre, and not servicing, tyres, insurance or depreciation.
    ConnectorNo auth
  • Use this tool when a host is still EVALUATING whether HemmaBo fits; use hemmabo_get_host_onboarding_link only when the host has decided and wants to start. Never call both in the same turn — this tool's next_step already contains the same onboarding URL. Read-only fit check for a vacation-rental host evaluating HemmaBo for their own booking website or booking engine. Use when the user is a host or property owner, not a guest booking a stay; guests should use hemmabo_search_properties instead. Returns a fit verdict, what the host gets, the setup inputs to prepare, and a safe onboarding next step. Does not create an account, buy a domain, configure Stripe, store host data, or provision a website. When the host is ready to start, follow up with hemmabo_get_host_onboarding_link. Only five inputs sharpen the fit verdict: a domain (hasOwnDomain or domain), currentChannels, one location signal (city/region/country), and the wants* booleans, which count unless explicitly false — omitting them never lowers the verdict; propertyName and preferredLanguage only prefill the onboarding URL, and with no inputs the summary is generic. Booking and payment happen only on the host's own domain, at the signed direct_booking_url. The agent never books, pays, cancels or changes a booking.
    ConnectorNo auth
  • The quickest way to search: describe the trip in plain words and get bookable trips back in one call. travelType, one of: - ski: ski and snowboard holidays - golf: golf holidays - surf: surf camps and holidays - diving: diving holidays - hiking: hiking and walking holidays - charter: package holidays: sun and beach trips with flight and hotel - cycling: cycling holidays - football: football trips: a match ticket with travel and hotel - carrental: car rental - f1: Formula 1 race trips - running: running races abroad, marathons, running camps and trail tours - americanfootball: NFL game trips - yoga: yoga retreats - triathlon: triathlon races and training camps - cruise: cruises - coach: coach (bus) tours - holidayhome: holiday homes and cottages - roundtrip: round trips and guided tours through several places - citybreak: city breaks - dance: dance holidays - wellness: wellness, spa and retreat stays - safari: safaris - culture: culture trips: art, music, opera, history and theatre - sportsevent: trips to sports events other than football, F1 and NFL - camping: camping holidays: tents, mobile homes and campsite cabins - hunting: hunting trips - culinary: food and wine trips - fishing: fishing trips - language: language courses abroad - racket: padel and tennis trips - motorcycle: motorcycle tours - riding: horse riding holidays - birding: birdwatching trips - sailing: sailing holidays - concert: coach trips to concerts - umrah: Umrah and Hajj packages places: destinations, ski areas, regions or countries in plain words, English or Danish ("Ischgl", "Østrig", "Costa del Sol"). Leave it out for anywhere. When: startFrom/startTo (the window the trip starts in) or months. Party: adults and children, since prices depend on them. Optional: durationDays, maxPricePerPerson, sort (best, cheapest, soonest), limit. Response: { understood, ...{ total, accommodationCount, offset, results: [{ name, country, destination, stars, guestRating, tripsAvailable, trips: [{ start, end, durationDays, adults, children, price, pricePerPerson, currency, priceConfirmedHoursAgo, priceBeforeDiscount, transport, meals, unit, seller, bookingUrl }] }] } } - understood says how the request was read: the places searched, placesNotFound and placesAmbiguous. When a place was not found or is ambiguous, tell the user instead of presenting other trips as theirs. - price is the whole party's price; pricePerPerson divides it. Quote them as given, in currency — never convert or round them into a different claim. - priceConfirmedHoursAgo is how many hours ago the seller's own site last showed this price. Under 24: present the price as current. Older: say when it was last confirmed ("3 days ago") and that it may have changed since, the more likely the older it is. null: the age is unknown, so say the price may have changed. The seller's site, through bookingUrl, always shows the price that applies. - trips holds the first few dates in sort order; tripsAvailable says how many more exist. Page with offset (it counts accommodations). - seller is the travel agency that sells the trip. bookingUrl opens that trip on the seller's site — give it to the user as the way to book. It is null when the seller can only be compared, not booked, through Kompare. - start/end are the trip's own first and last day. When nothing matches, the response holds alternatives (counts with one filter removed) to suggest what to relax. When no place matched at all, it holds a message and nothing was searched. For a filter this tool lacks (meal plan, stars, transport, ski pass, distance to the lift, ...) use search_listings.
    ConnectorNo auth
  • Day-by-day overview of one Roadcut road trip: from, to, km and where to sleep each day, highlights, ferries, seasonal mountain passes on the way, a cost estimate, and links to the full plan and the interactive planner. A trip is identified by its slug.
    ConnectorNo auth

Matching MCP Servers

  • F
    license
    Not graded
    quality
    D
    maintenance
    A hotel booking assistant that exposes hotel search and booking tools via MCP, with a Streamlit chat client driving an agent loop using Claude.
    -

Matching MCP Connectors

  • Create a public booking request. Does NOT require an API key, but DOES require: (1) requester identity — fullName plus at least email or phone, (2) submission context — channel and whether an agent assisted, (3) authorization.humanIntentConfirmed must be true. The booking is created as pending_confirmation — use public_booking_confirm with the returned confirmationToken to confirm. A bookingToken is also returned for future lifecycle management (cancel, reschedule). Rate-limited per IP+org. All requests are audited with semantic decision codes. Use public_service_list → public_availability_get_slots → public_booking_create → public_booking_confirm as the complete public booking flow.
    ConnectorNo auth
  • Look up a reservation exclusively by the hotel confirmation number shown in the guest's confirmation email. Internal Stayker booking IDs are never accepted or disclosed by MCP. Returns full booking details including hotel, dates, guest info, rate, and status. Anonymous access requires a verification_token issued by lookup_booking and scoped to a single booking. Without a valid token, no booking data is returned. Developers authenticated with their own API key do not need a token; their access is scoped to their own bookings.
    ConnectorNo auth
  • Check available appointment slots for a specific service at a local business on a given date. This calls the business's configured availability provider live and fails closed when the provider fails. Returns time windows when the business is free and the service bookingStartPolicy permits the start. For services with maxParticipants > 1, provider-returned starts remain available until capacity is full. ONLY call this if the business has 'booking' in its enabledFeatures array. If the business doesn't support booking, share their contact info from get_business_info instead.
    ConnectorNo auth
  • Creates a short-lived link where the traveler reviews the full price and terms, signs in or creates an account, and books and pays on autonomad.ai. It creates no reservation and makes no charge: payment and identity checks happen on the website, and bookings are not made inside the chat. When to use it: after the person has chosen something specific, such as a flight, a hotel, or both for one trip. It is not needed for browsing. intent_type is one of 'flight', 'hotel' or 'trip' — there is no activity, event or experiences link. Activities, experiences and events are chosen as add-ons on autonomad.ai after the person opens a flight, hotel or trip link, so describe them in the reply rather than creating a link for them. intent_type (choose one): - 'flight': the person chose a flight only. offer_data is the flight from search_flights, unchanged, with the CHOSEN fare: when the person picked a fare other than the first in `fare_options`, set offer_id, price_usd, fare_brand and cabin_class to that fare option's values (the booking page opens exactly that fare). Plus a top-level `passengers` number (the TOTAL number of travelers the person asked for; flight offers do not include it). When children or lap infants travel, also add the same `adults`, `children_ages` and `infants_on_lap` used in search_flights, so the booking page asks for each traveler (every traveler's date of birth is entered on autonomad.ai, never here). - 'hotel': the person chose a hotel only. offer_data is the hotel offer from search_hotels plus top-level `check_in` and `check_out` as YYYY-MM-DD strings (the dates used in the search; hotel offers do not include them, and without them the booking page opens an empty form), and `adults` and `rooms` numbers. A hotel from find_hotels_on_route is different: offer_data is that hotel's `booking_offer` exactly as find_hotels_on_route returned it — copy it whole, never rebuild it from the hotel's name, address or price and never add or drop keys (it already carries check_in, check_out, adults and rooms, and the room to book). - 'trip': the person chose a flight and a hotel for the same trip. offer_data is { flight: { ...offer (with the chosen fare, as for 'flight'), passengers: <n> }, hotel: { ...offer, adults: <n>, rooms: <n>, check_in, check_out } }. One link covers both, so one intent per trip is enough; two separate links for one trip are confusing. Include the traveler count in offer_data: without it the booking page defaults to 2 travelers. Travelers can be any age, including children and babies; only the account holder who books and pays must be 18 or older. What the reply to the person should include: the `deep_link` as a clickable link, and when the link expires (about 30 minutes by default; a new one can be created if it lapses).
    ConnectorNo auth
  • Submit a booking REQUEST for a Norwegian gårdssalg (farm-sale) producer discovered via discover_gardssalg. Send inn en reservasjonsforespørsel for et gårdssalg-besøk. IMPORTANT: this NEVER creates a confirmed booking — it creates a PENDING request, exactly like the producer's own website form. The PRODUCER reviews the request and responds (confirms, proposes another time, or declines); guest_email only receives a read-only status link, never anything that can finalize the booking. No payment is involved (pickup/visit, pay on arrival, as today). Only producers with an active booking status (see discover_gardssalg's booking.live field) can be booked — a paused/not-yet-onboarded producer is rejected with a clear message, never a silent failure. VIKTIG: oppretter ALDRI en bekreftet booking — kun en avventende forespørsel; produsenten mottar forespørselen og svarer (bekrefter, foreslår nytt tidspunkt eller avslår). ONE-SENTENCE FLOW («book et møte hos X fredag 20. oktober kl. 10 for 4 personer»): call this ONCE with provider_query='X' (the producer's name — no discover_gardssalg round-trip needed), slot_at, party_size, guest_name, guest_email and requested_weekday='fredag'. The tool resolves X to exactly one producer (or returns candidates / not-found with NO booking created), checks that the date really is a Friday (or returns weekday_mismatch:true with the nearest Fridays, NO booking created), then submits the request and notifies the producer by email. guest_name and guest_email are the HUMAN guest's own — ask the guest for them if you do not have them; never invent or reuse someone else's. Required: provider_id OR provider_query, slot_at (requested date/time, 'YYYY-MM-DDTHH:MM' Europe/Oslo), party_size, guest_name, guest_email. Optional: requested_weekday, experience_id, guest_phone, notes, confirm_outside_hours. The requested slot_at is ALWAYS hard-rejected if it's in the past or too far ahead. If the producer has stated opening hours and slot_at falls outside them, this returns outside_hours:true (not an error) instead of creating the booking — retry once with confirm_outside_hours:true if the exact requested time should be kept anyway. On success the response carries the resolved producer (provider.navn) and slot_at_local (e.g. 'fredag 23. oktober 2026 kl. 10:00') — read both back to the guest. Example: provider_query 'Fjordgard Bryggeri', slot_at '2026-10-23T10:00', requested_weekday 'fredag', party_size 4, guest_name 'Kari Nordmann', guest_email 'kari@example.no'.
    Connector
    Destructive
    No auth
  • Searches live rental-car offers for a pickup location and rental period, optionally with a different dropoff location, pickup/dropoff times, driver age, currency, and language. Use this when the user wants to compare available rental cars, prices, vendors, categories, or booking links for a specific trip. Do not use it for flights, hotels, public transport, or general travel planning unless the user has car-rental intent. The tool queries external provider APIs in real time, returns price-ranked results grouped by SIPP/category, and may include affiliate booking links. It does not book cars, modify reservations, charge users, or store user data.
    ConnectorNo auth
  • Start monitoring one trip for disruption changes over time. Use this tool when the user wants ongoing monitoring of a trip rather than a one-off assessment (for a one-off answer, use assess_trip). Persists the trip as a monitored object and returns its initial assessment plus a random, unguessable trip_id AND a one-time `owner.owner_token`. Store BOTH: the trip_id is the (public, shareable) URL handle, the owner_token is the private key needed to change the trip's label or webhook later. There is no stop call: monitoring ends by itself the day after date_to. CREATE vs REFRESH: called with just destinations+dates it CREATES a new trip every time (it does NOT dedupe on identity — that is deliberate, so nobody can reach your trip by guessing your itinerary). To update an existing trip (change its label or webhook), call again passing BOTH its `trip_id` and `owner_token`; a missing/wrong token is rejected. Each pipeline run then re-evaluates the trip and appends an update ONLY when something materially changes (a new/cleared event, a severity/status shift, or a travel_status change) — never on a calm tick. Args: destinations — EU-27 ISO2 codes (Greece = "EL") plus the non-EU27 countries we monitor: Norway "NO" (Entur, live), United Kingdom "UK"/"GB" (TfL, live), Switzerland "CH" (SBB, key-pending → declared blind spot until keyed); date_from/date_to (YYYY-MM-DD); optional label. An unmonitored code is rejected with {"error": "unknown_country"} rather than a false all-clear. Returns {trip_id, assessment, created_at}; invalid inputs return an explicit {"error": ...}. Destinations also accept natural input: IATA airport codes (e.g. 'TSR', 'AMS', 'ZRH') and major city names (e.g. 'Timișoara', 'Amsterdam', 'Zürich', 'London'), resolved deterministically to a monitored country code. The initial assessment includes a 'resolved' list ([{input, country, kind}]) disclosing how each token was mapped (e.g. 'TSR -> RO via iata-airport'). A token that resolves to a country we do not monitor is rejected with {'error': 'unknown_country'}; a token we cannot resolve at all is rejected with {'error': 'unknown_destination', 'tokens': [...]} — we reject not guess. Pass `lang` (e.g. "de", "ro", "pl"; default English) to localise the initial assessment into the traveller's language: the returned assessment carries the same `localized` block as assess_trip (honest reassurance, AI-translated-and-LABELLED source text, and the localized caveats + blind_spots that are never dropped). Localization never becomes a false all-clear; the aviation handoff discloses the blind spot, not coverage. Pass `audience` ("tmc" | "hotel" | "ota" | "tour_operator") for role-specific operational actions — the initial assessment then carries the same `persona` block as assess_trip (audience + per-event role actions, projected from the audience-tagged recommendations). Built for the B2B travel-risk buyer. Pass `notify_webhook_url` (https only) to get PUSH delivery: on every MATERIAL change the radar POSTs the update record (summary, status transition, event report URLs) to your URL, signed HMAC-SHA256 over the raw body (header X-TravelTrends-Signature: sha256=<hex>). The response then includes `notify.secret` — shown ONLY once, never published; store it to verify signatures. To change or remove the webhook later, re-call with the trip_id + owner_token and the new notify_webhook_url (or "" to remove delivery). After 5 consecutive delivery failures the webhook is disabled with an honest notify_disabled entry in the trip's updates log. Non-https or private-network URLs are rejected with {"error": "invalid_webhook_url"}. Optional `legs` (same shape and semantics as in assess_trip) are persisted with the trip; legs[] appears in the assessment returned here. The 6-hourly radar check re-resolves the stored legs and their modes feed its decision lines; whats_changed reports the trip-level delta and does not carry a legs block.
    ConnectorNo auth
  • Report only what changed for a watched trip since a checkpoint. Use this tool when the user asks for news on a trip already registered with watch_trip; for the stored notification log rather than a live diff, use get_trip_updates_since. Recomputes the trip's current assessment and diffs it against the checkpoint at/just- before `since` (or the last evaluation when `since` is omitted). Returns {material, summary, added_events, removed_events, changed_events, previous_travel_status, travel_status, confidence_from, confidence_to}. `summary` is a plain-language line ('Since your last check: rail strike CONFIRMED (was: announced); a road closure cleared; confidence 63->71%'). A non-material tick returns material=False with a clearly-flagged 'No material change' summary — never invented churn. `since` is an optional ISO-8601 timestamp (e.g. the user's last-seen time). Id is regex-validated (^trip-[a-z0-9-]+$); unknown id -> {"error": "not_found"}, malformed id -> {"error": "invalid_trip_id"}. The response also forwards the presentation blocks from the current assessment so the LLM consumer has full context alongside the delta: presentation (affects_your_trip / doesnt_affect_your_trip / next_steps), track_record_ref (90-day counts + URL), and suggested_next_call (the suggested follow-up action). Forwarded in both material=True and material=False branches; absent if upstream did not compute them (legacy code paths) — never fabricated. `audience` (optional: tmc | hotel | ota | tour_operator) attaches the same `persona` block as assess_trip/watch_trip to the change alert — audience-tagged actions for the events currently affecting the trip, so the alert itself carries the operational next step. Unknown audience -> honest error listing valid_audiences.
    ConnectorNo auth
  • Find complete multi-day stopover itineraries between two cities: an outbound leg, 1 to 7 days in an intermediate hub city, then the onward leg, priced as one trip from live Google Flights data (GBP) with a booking link on every leg. One call evaluates dozens of hub cities and date splits. Runs as a background job: returns a jobId immediately; poll get_job_result every few seconds until status is done.
    ConnectorNo auth
  • Natural-language recommendation. Pass the user query verbatim (e.g. "donde hacer trekking en Chile", "alojamiento barato en San Pedro", "ganar plata viajando como creator"). Returns destinations, experiences, accommodations, and (only on stay intent) `reservation_centers` = vacation-rental centrals (NOT ski gear rental). Supports optional price_min/price_max in CLP. Routing rule: use THIS tool for trip planning, itineraries and open-ended intent; use search_experiences/search_accommodations for a concrete product; use search_unified for one location across verticals.
    ConnectorNo auth
  • Log one user-confirmed business trip; writes on call, no server preview. Saved mode selects rate-based expense or distance-only trip; trackingMode overrides. For routes, vehicle setup/readings, imports or review, open Mileage and travel via get_spreadsheet_url.
    ConnectorNo auth
  • DISCOVERY ONLY: search Roomza's hotel database by city, keyword, or natural language query when the user has NOT named a specific hotel. Understands hotel types (boutique, resort, luxury), vibes (romantic, trendy, quiet), traveler types (couples, families, solo), neighborhoods, and nearby landmarks. Example queries: 'boutique hotels in SoHo', 'romantic resort near the Eiffel Tower', 'pet-friendly hotel in Seattle'. Renders for the user as a full map with a multi-hotel list (so do not repeat the list in prose). NEVER use this when the user names one specific hotel (e.g. 'Wynn Las Vegas'): the map of many hotels is wrong for that. Call get_hotel with the hotel name instead, then get_hotel_rooms and show_rooms.
    ConnectorNo auth
  • Creates a free booking or returns PAYMENT_REQUIRED with a secure payment URL for paid meetings. Paid meetings are not booked until payment succeeds; show the link and never claim confirmation before that. Only call after the guest explicitly approves preview_booking. Copy the preview's booking fields and confirmationToken unchanged. Reuse requestId and token on network retries; never claim notifications are delivered until syncStatus is ready.
    Connector
    Destructive
    No auth
  • What kinds of accommodation one Floreal Holidays location offers — hotel rooms, studios, apartments, chalets, glamping, camping pitches — each with how many people it sleeps and an indicative "from" price. Use this for questions about what a location has ("does Blankenberge have hotel rooms?", "are there apartments in Nieuwpoort?"). A location can combine several kinds. Without a date it probes the next two months and every length of stay up to a week, so it also finds types that need a fixed number of nights. The prices are samples; ask get_stay_price for the guest's own dates.
    ConnectorNo auth
  • Show what one hotel (agoda_hotel_id from search_hotels) costs on Agoda for each check-in date in a window — the "what if I move my dates" view. Returns one price snapshot per date (with fetched_at), the cheapest date, and low/high bands for the hotel; dates with an active tracking are marked is_tracked with their track_page_url. This is a cross-section by date, not a time series: to keep watching a date, call track_hotel_price for it. Most dates are fetched in the background on the first call, so pending may be > 0 — call again with the same arguments after ~3 seconds to get the rest. Default window: 28 days from start_date (or today), 1 night, 2 adults.
    ConnectorNo auth