Skip to main content
Glama

Book Airport Transfer

book_london_airport_transfer

Book a London airport or cruise port transfer to/from any UK address. Creates a REAL reservation — only call after the customer confirms.

REQUIRED FLOW — collect ALL info before booking:

  1. Ask: Where are you travelling from and to?

  2. Ask: What date and time? (ask naturally, never expose technical formats like YYYY-MM-DD to the user)

  3. MANDATORY — Ask: How many passengers travelling, and how many suitcases/large bags? You MUST collect the exact passenger count for EVERY booking, even when the customer has already chosen the largest vehicle (Executive 8 Seater / Minibus). Passenger count is operational data the driver needs (seat allocation, child-seat planning, dispatch) — never skip this question, never assume "they picked the big car so it doesn't matter". Do not proceed without an explicit number.

  4. Call london_airport_transfer_quote to show prices and car options

  5. Ask: Which car type would you like? (show the options with prices)

  6. Ask: Passenger full name

  7. Ask: Phone number (with country code)

  8. Ask: Email address (for booking confirmation)

  9. CRITICAL — POSTCODE / EXACT ADDRESS: NEVER book using only a city, town, or area name (e.g. "Windsor", "Manchester", "central London"). UK city names cover wide areas — pricing and the actual pickup/dropoff point will be wrong (a customer asking for "Windsor" must reach SL4, not Harrow HA). If you only have a city/town name, ask the customer for the FULL UK postcode (e.g. "SL4 5LP") AND the house/building number or name. If you have a postcode but no building number, ask for the building number/name. Do not guess, do not substitute a default. The exact door is required so the driver can reach the customer.

  10. Ask the RIGHT transport detail based on booking type:

  • Airport PICKUP (customer arriving at airport) → Flight number (e.g. BA2534). Use validate_flight to verify and auto-detect terminal.

  • Airport DROPOFF (customer going TO airport) → Flight number is optional, don't require it

  • Cruise port pickup/dropoff → Cruise/ship name (e.g. P&O Ventura)

  • Train station pickup/dropoff → Train number or arriving from where

  • Non-airport/port/station route → skip, no transport detail needed

  1. MANDATORY — Ask: "Do you have any special requests? For example, child seat, extra luggage, wheelchair, pet?" You MUST ask this every time. Do NOT skip it. If they mention a child seat, ask the child's age (baby seat 0-12mo, child seat 1-4yrs, booster 4-12yrs). Check seat limit for their car (Saloon 1, People Carrier 2, 8 Seater 3). If they ask for extra pickup or drop-off stops (via points): the quote covers ONE pickup → ONE drop-off and the quote tool cannot price a stop. Book the main journey, put the stop in special_requests (e.g. "extra stop at 12 High St, Slough"), and tell them: "Extra stops are not included in this price — our office will confirm the extra cost with you before the trip."

  2. MANDATORY — Before confirming the booking, inform the passenger: "We'll create your booking and you can pay the driver in cash on the day. If you prefer to pay online, you can do so via your manage booking link — we accept all major cards including Amex, Apple Pay, Google Pay, PayPal, Revolut, WeChat Pay, and AliPay." Wait for the customer to confirm.

  3. Confirm all details with the customer, then call book_london_airport_transfer

  4. AFTER booking: Share the reservation_id number (the numeric LT reference, e.g. "966811") and the manage_booking_url. This numeric reservation_id is what appears on the customer confirmation email AND what the manage-booking page accepts — it is the customer-facing reference. Do NOT mention the internal booking_reference (APL-XXXXXX format) to the customer; that is for our internal tagging only. Say: "Booking confirmed! Your reference is #{reservation_id}. You can track your driver, view booking details, and pay online (all major cards, Amex, Apple Pay, Google Pay, PayPal, Revolut, WeChat Pay, AliPay) using this link: {manage_booking_url}"

    • Share meeting_point instructions — ALWAYS include the terminal/location name from meeting_point.name (e.g. "Meeting point at Heathrow Terminal 2: ..."). Never show meeting instructions without specifying which terminal or location.

IMPORTANT: Never call book_london_airport_transfer without customer confirmation. Always show the price first via london_airport_transfer_quote. IMPORTANT: The customer MUST choose a car type from the quote. Do NOT auto-select a car — always ask which one they want. IMPORTANT: Email address is REQUIRED — it is used for the booking management link and confirmation. IMPORTANT: Always inform the customer about payment options (cash or card/Apple Pay/Google Pay via manage booking link) BEFORE making the booking. IMPORTANT — PRICING: Quote the prices returned by london_airport_transfer_quote EXACTLY. Do NOT calculate discounts, do NOT round up or down, do NOT modify prices in any way. The prices returned are already final and include all surcharges. Never offer a discount unless it is explicitly returned by the quote tool. The MCP server is the only source of truth for pricing.

BOOKINGS WITHOUT AN ACCOUNT: passenger_email is REQUIRED (the booking reference + this email is how the customer manages the booking later), and callers without an account may create at most 5 bookings per hour.

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
originYesPickup location — airport name, full UK postcode + building number, or full street address. NEVER pass a bare city/town name (e.g. "Manchester") — ask the customer for the full postcode + building number first.
countryNoSet to "TR" for Turkey routes (Istanbul, Sabiha Gökçen/SAW, Istanbul Airport/IST, Antalya, Dalaman, Bodrum, etc.) — these are cash bookings priced in EUR. Omit for UK routes.
car_typeYesThe car type the customer chose from the quote (e.g. "Saloon", "People Carrier", "Executive Saloon") — REQUIRED. Never pick a car for the customer.
suitcasesYesNumber of suitcases / large bags (hand luggage does not count) — REQUIRED. Ask the customer explicitly.
passengersYesExact number of passengers travelling — REQUIRED. Ask the customer explicitly even if they pre-picked the largest car; never assume from car_type.
cruise_nameNoCruise/ship name for cruise port pickups/dropoffs (e.g. "P&O Ventura")
destinationYesDropoff location — full UK postcode + building number/name (e.g. "SL4 5LP, 12 Castle Hill"), full street address, or airport name. NEVER pass a bare city/town name like "Windsor" or "Manchester" — UK cities cover wide areas, pricing and pickup will be wrong. If the customer only gave a city, ask for the full postcode + building number before calling.
door_numberNoHouse/building number or name for postcode destinations (e.g. "12", "Flat 3", "The Old Rectory"). Required when destination is a postcode.
train_numberNoTrain number or origin for train station pickups/dropoffs (e.g. "from Manchester")
flight_numberNoFlight number for airport pickups/dropoffs (e.g. "BA2534")
transfer_dateYesTransfer date (e.g. "2026-03-15"). Ask the user naturally for their travel date and convert to YYYY-MM-DD internally.
transfer_timeYesTransfer time (e.g. "14:30"). Ask the user naturally for their preferred time and convert to HH:MM internally.
passenger_nameYesFull name of the passenger
passenger_emailYesPassenger email address — REQUIRED: it receives the confirmation and, with the booking reference, is the customer's key to manage the booking later.
passenger_phoneYesPassenger phone number with country code (e.g. "+447123456789")
whatsapp_opt_inYesREQUIRED — the customer's actual answer, never assumed. Ask: "May we send your confirmation, driver details and pickup updates to this number on WhatsApp? (reply STOP any time to opt out)". true = yes, false = no (we then use email/phone).
special_requestsNoAny special requirements (e.g. "child seat needed", "extra luggage")
airport_wait_minutesNoAIRPORT PICKUPS: REQUIRED (the tool refuses an airport pickup without it). Minutes after landing the customer wants the driver in the arrivals hall (30 / 45 / 60 / 90 — most choose 60; ~45 European hand-luggage, ~90 long-haul with bags). Explain it like this: the driver is in the terminal at landing + this many minutes and then waits 30 min free (+30 min for £15 on request). Pass the figure the customer agreed and set transfer_time = landing time + this many minutes.

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed1 schema field changed
    • changedInput schema / properties / airport_wait_minutes / description
      Previous value: -"AIRPORT PICKUPS: REQUIRED (the tool refuses an airport pickup without it). Minutes after landing the customer wants the driver ready (e.g. 30, 45, 60, 90 — ~45 European, ~60 international). Pass the figure you agreed with the customer; it sets the actual driver wait. Also set transfer_time = landing time + this many minutes."New value: +"AIRPORT PICKUPS: REQUIRED (the tool refuses an airport pickup without it). Minutes after landing the customer wants the driver in the arrivals hall (30 / 45 / 60 / 90 — most choose 60; ~45 European hand-luggage, ~90 long-haul with bags). Explain it like this: the driver is in the terminal at landing + this many minutes and then waits 30 min free (+30 min for £15 on request). Pass the figure the customer agreed and set transfer_time = landing time + this many minutes."
  2. Changed13 schema fields changed
    • changedInput schema / properties / airport_wait_minutes / description
      Previous value: -"AIRPORT PICKUPS ONLY: minutes after landing the customer needs (e.g. 30, 45, 60, 90 — ~45 European, ~60 international). Pass the figure you confirmed with the customer; it sets the actual driver wait. Also set transfer_time = landing time + this many minutes. If omitted on an airport pickup the wait can default to only 15 minutes."New value: +"AIRPORT PICKUPS: REQUIRED (the tool refuses an airport pickup without it). Minutes after landing the customer wants the driver ready (e.g. 30, 45, 60, 90 — ~45 European, ~60 international). Pass the figure you agreed with the customer; it sets the actual driver wait. Also set transfer_time = landing time + this many minutes."
    • changedInput schema / properties / airport_wait_minutes / type
      Previous value: -"number"New value: +"integer"
    • changedInput schema / properties / car_type / description
      Previous value: -"Car type (e.g. \"Saloon\", \"People Carrier\", \"Executive Saloon\"). Auto-selected if not specified."New value: +"The car type the customer chose from the quote (e.g. \"Saloon\", \"People Carrier\", \"Executive Saloon\") — REQUIRED. Never pick a car for the customer."
    • changedInput schema / properties / passenger_email / description
      Previous value: -"Passenger email address for confirmation"New value: +"Passenger email address — REQUIRED: it receives the confirmation and, with the booking reference, is the customer's key to manage the booking later."
    • addedInput schema / properties / passenger_email / format
      Added value: +"email"
    • removedInput schema / properties / passengers / default
      Removed value: -1
    • changedInput schema / properties / passengers / description
      Previous value: -"Exact number of passengers travelling. MANDATORY for every booking — ask the customer explicitly even if they pre-picked the largest car. Never default to 1 without asking; never assume from car_type."New value: +"Exact number of passengers travelling — REQUIRED. Ask the customer explicitly even if they pre-picked the largest car; never assume from car_type."
    • changedInput schema / properties / passengers / type
      Previous value: -"number"New value: +"integer"
    • removedInput schema / properties / suitcases / default
      Removed value: -1
    • changedInput schema / properties / suitcases / description
      Previous value: -"Number of suitcases/large bags. Ask the customer explicitly."New value: +"Number of suitcases / large bags (hand luggage does not count) — REQUIRED. Ask the customer explicitly."
    • changedInput schema / properties / suitcases / type
      Previous value: -"number"New value: +"integer"
    • changedInput schema / properties / whatsapp_opt_in / description
      Previous value: -"Whether the customer agreed to receive their booking confirmation, driver details and pickup updates on WhatsApp at passenger_phone (tell them: \"Airport Pickups London will send your booking updates to this number on WhatsApp; reply STOP to opt out\"). Default true. Pass false if they declined — we then keep the record and contact them by email/phone instead."New value: +"REQUIRED — the customer's actual answer, never assumed. Ask: \"May we send your confirmation, driver details and pickup updates to this number on WhatsApp? (reply STOP any time to opt out)\". true = yes, false = no (we then use email/phone)."
    • changedInput schema / required
      Previous value: -[
      -  "origin",
      -  "destination",
      -  "transfer_date",
      -  "transfer_time",
      -  "passenger_name",
      -  "passenger_phone"
      -]New value: +[
      +  "origin",
      +  "destination",
      +  "transfer_date",
      +  "transfer_time",
      +  "passenger_name",
      +  "passenger_phone",
      +  "passenger_email",
      +  "passengers",
      +  "suitcases",
      +  "car_type",
      +  "whatsapp_opt_in"
      +]
  3. First observed

TDQS

Score is being calculated.

Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.

Resources