Airport Pickups London
Server Details
Get date-specific quotes and book private UK airport and cruise-port transfers through your AI assistant. Compare vehicle options, validate flights, retrieve bookings, amend details and cancel with customer confirmation. No registration required to start, subject to service limits; optional API-key and OAuth access for registered integrations. Transfer fares are payable separately and cancellation conditions apply.
Live demo and connection instructions: https://ai.airport-pickups-london.com/ Technical documentation: https://mcp.airport-pickups-london.com/docs
- Status
- Healthy
- Uptime
- 25.7% over 59 days
- OAuth
- Works in Glama
- Last Tested
- Transport
- Streamable HTTP · MCP 2025-11-25
- URL
TDQS
Scored across 11 tools
Each tool has a clearly distinct purpose: quote vs book vs amend vs cancel, UK vs EU quotes, live tracking vs recorded route vs nearest driver availability, flight validation, and service info. The descriptions explicitly guide when to use which tool, leaving little room for confusion.
Nine of eleven tools follow a verb-first pattern (amend_booking, book_london_airport_transfer, cancel_booking, find_nearest_drivers, get_driver_route, get_service_info, lookup_booking, track_driver, validate_flight). The two quote tools (london_airport_transfer_quote, eu_transfer_quote) are noun-first, a minor deviation but still readable and predictable.
11 tools is well within the ideal 3–15 range for this domain. Every tool serves a distinct operational need: quoting, booking lifecycle, driver tracking, flight validation, and service information.
The surface covers the full booking lifecycle (quote, book, amend, cancel, lookup), driver tracking (live, route, nearest availability), flight validation, EU transfers, and service info. No obvious gaps in the customer-facing transfer workflow.
Available Tools
11 toolsamend_bookingInspect
Modify booking details like passenger name/phone, date/time, flight number, passenger count or special requests. Ask the customer for BOTH their booking reference AND the email address used at booking — same as our website manage-booking login. Do not call this tool without both values. The EMAIL on a booking cannot be changed here — it is the customer's key to the booking. If they need a new email on the booking, tell them to email info@aplcars.com from the original address, quoting the booking reference.
| Name | Required | Description | Default |
|---|---|---|---|
| Yes | Passenger email on the booking — required, must match exactly | ||
| changes | Yes | Object containing the fields to change | |
| booking_ref | Yes | Booking reference — either "APL-<LT reservation id>" (e.g. "APL-1013869", as on the confirmation email) or the numeric LT reservation ID (e.g. "966244"). Both formats accepted. |
book_london_airport_transferBook Airport TransferInspect
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:
Ask: Where are you travelling from and to?
Ask: What date and time? (ask naturally, never expose technical formats like YYYY-MM-DD to the user)
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.
Call london_airport_transfer_quote to show prices and car options
Ask: Which car type would you like? (show the options with prices)
Ask: Passenger full name
Ask: Phone number (with country code)
Ask: Email address (for booking confirmation)
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.
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
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."
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.
Confirm all details with the customer, then call book_london_airport_transfer
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.
| Name | Required | Description | Default |
|---|---|---|---|
| origin | Yes | Pickup 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. | |
| country | No | Set 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_type | Yes | The car type the customer chose from the quote (e.g. "Saloon", "People Carrier", "Executive Saloon") — REQUIRED. Never pick a car for the customer. | |
| suitcases | Yes | Number of suitcases / large bags (hand luggage does not count) — REQUIRED. Ask the customer explicitly. | |
| passengers | Yes | Exact number of passengers travelling — REQUIRED. Ask the customer explicitly even if they pre-picked the largest car; never assume from car_type. | |
| cruise_name | No | Cruise/ship name for cruise port pickups/dropoffs (e.g. "P&O Ventura") | |
| destination | Yes | Dropoff 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_number | No | House/building number or name for postcode destinations (e.g. "12", "Flat 3", "The Old Rectory"). Required when destination is a postcode. | |
| train_number | No | Train number or origin for train station pickups/dropoffs (e.g. "from Manchester") | |
| flight_number | No | Flight number for airport pickups/dropoffs (e.g. "BA2534") | |
| transfer_date | Yes | Transfer date (e.g. "2026-03-15"). Ask the user naturally for their travel date and convert to YYYY-MM-DD internally. | |
| transfer_time | Yes | Transfer time (e.g. "14:30"). Ask the user naturally for their preferred time and convert to HH:MM internally. | |
| passenger_name | Yes | Full name of the passenger | |
| passenger_email | Yes | Passenger email address — REQUIRED: it receives the confirmation and, with the booking reference, is the customer's key to manage the booking later. | |
| passenger_phone | Yes | Passenger phone number with country code (e.g. "+447123456789") | |
| whatsapp_opt_in | Yes | 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). | |
| special_requests | No | Any special requirements (e.g. "child seat needed", "extra luggage") | |
| airport_wait_minutes | No | 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. |
cancel_bookingDestructiveIdempotentInspect
Cancel a booking. Free cancellation 12+ hours before pickup — no fee, full refund. Under 12 hours the booking cannot be cancelled online: call +44 20 8688 7744 (6–12 hours before pickup 50% of the fare is charged, under 6 hours there is no refund). Under 12 hours this tool cannot cancel — the customer must call the office. Ask the customer for BOTH their booking reference AND the email address used at booking — same as our website manage-booking login. Do not call this tool without both values.
| Name | Required | Description | Default |
|---|---|---|---|
| Yes | Passenger email on the booking — required, must match exactly | ||
| reason | No | Reason for cancellation | |
| booking_ref | Yes | Booking reference — either "APL-<LT reservation id>" (e.g. "APL-1013869", as on the confirmation email) or the numeric LT reservation ID (e.g. "966244"). Both formats accepted. | |
| customer_confirmed | Yes | REQUIRED — must be true. Set it only AFTER you have told the customer exactly which booking (reference, date, route) will be cancelled and that it is free (12+ hours before pickup), and they answered yes. The tool refuses without it. |
eu_transfer_quoteGet European Transfer QuoteARead-onlyInspect
Get prices for a EUROPEAN / cross-Channel transfer from London/UK to a continental destination (e.g. Ghent, Bruges, Paris, Brussels, Amsterdam, Cologne, Milan, Barcelona). Use this — NOT london_airport_transfer_quote — whenever the destination is OUTSIDE the UK / on the European continent. Returns per-car-type prices, fixed per vehicle, including the Eurotunnel crossing. Prices are FINAL — quote them exactly, no discounts. If the city is not configured the tool returns the list of available EU destinations; in that case tell the customer the team will confirm a price for it.
| Name | Required | Description | Default |
|---|---|---|---|
| car_type | No | Optional single EU car type (Standard, Electric, People Carrier, Executive, Large PPL, Executive PPL, Minibus, Luxury). Omit for all car types. | |
| hub_code | No | Nearest UK departure hub for the UK leg: LHR, LGW, STN, LTN, LCY, SOU. For a London pickup use LHR. | |
| destination | Yes | European city name (e.g. "Ghent", "Paris", "Brussels") |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, destructiveHint=false and openWorldHint=false, so the safety profile is covered. The description adds meaningful behavior beyond that: per-car-type fixed pricing, inclusion of the Eurotunnel crossing, a no-discount pricing rule, and the fallback return (list of available EU destinations) when a city is unconfigured.
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?
Front-loaded with the core purpose, then routing rule, then return/pricing behavior and the fallback path. Dense and mostly waste-free, though the capitalized emphasis and multiple clauses make it longer than strictly necessary.
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 no output schema, the description carries the burden of describing returns and does so (per-car-type prices, fixed per vehicle, Eurotunnel included, final prices). It also covers the failure mode and the correct customer-facing response, leaving no obvious gap 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 100%, so the schema already documents car_type, hub_code and destination with their constraints and examples. The description adds only the domain scope for destination (continental city); baseline 3 is appropriate since the schema does the heavy lifting.
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?
States a specific verb (get prices) and resource (European/cross-Channel transfer from London/UK to a continental destination), with example cities. It explicitly distinguishes itself from the sibling london_airport_transfer_quote, so an agent can route correctly without opening either schema.
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?
Provides an explicit use condition ('whenever the destination is OUTSIDE the UK / on the European continent') and names the alternative tool to avoid by name. It even covers the edge case of an unconfigured city and what to tell the customer.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
find_nearest_driversFind Nearest DriversARead-onlyInspect
Find the closest available drivers to a location using live fleet GPS. Give a target as an airport code (LHR, LGW, STN, LTN, LCY, EDI, SOU, BHX, MAN), a UK postcode, or lat+lng. Returns the nearest available cars (online, not on a job) with straight-line distance and a rough drive ETA. Set min_pax to require a vehicle size. Customers and partner agents get an availability view only — car type (Saloon / People Carrier / 8 Seater, executive flag), seats and a rough ETA rounded to 5 minutes for up to 5 cars, plus a per-car-type summary; NO driver name, vehicle, plate, position, distance or fleet size (driver details are shared only after a booking is confirmed). Staff see the full detail and can include busy drivers.
| Name | Required | Description | Default |
|---|---|---|---|
| lat | No | Target latitude (use with lng). | |
| lng | No | Target longitude (use with lat). | |
| limit | No | How many drivers to return (default 5). | |
| airport | No | Airport/hub code, e.g. "LHR", "LGW". | |
| min_pax | No | Only vehicles seating at least this many passengers. | |
| postcode | No | UK postcode, e.g. "SW1A 1AA", or just the district, e.g. "SL4". | |
| include_on_job | No | Also include drivers currently on a job (default false = available only). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the annotations (readOnly/openWorld/non-destructive), it discloses substantial behavior: role-based visibility (customers/agents get availability-only, staff get full detail), the exact fields suppressed (driver name, vehicle, plate, position, distance, fleet size), an ETA rounded to 5 minutes, a 5-car cap, and the rule that driver details are released only after a booking is confirmed. This is exactly the kind of context structured fields cannot carry.
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?
Front-loaded with the core action and target formats, then the return/visibility rules; it is a dense paragraph rather than a bloated one, and each clause carries information. It runs slightly long, but no sentence is pure padding.
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 no output schema, the description carries the return-value burden and does so fully: what the response contains (car type, seats, rounded ETA, per-car-type summary), what it omits, and how it differs by caller role. An agent has enough to call and interpret the tool correctly.
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 100%, so 3 is the baseline, but the description adds real meaning the schema lacks: the enumerable set of airport codes, that min_pax enforces a vehicle size tier, that include_on_job is for staff seeking busy drivers, and a customer-facing result cap of 5 cars even though the schema's limit allows 25. That role/limit interaction is important context above the 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 precise verb+resource ('Find the closest available drivers to a location using live fleet GPS') and scopes it to availability, which implicitly separates it from route/tracking siblings like track_driver and get_driver_route. It never names a sibling explicitly, so an agent gets clarity but not direct routing guidance.
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?
It lists the accepted target formats (airport code, postcode, lat+lng) and role-dependent behavior, which implies usage, but gives no explicit when-to-use/when-not or alternatives ('use this instead of X when...'). The agent must infer that this is the pre-booking availability lookup.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_driver_routeGet Driver RouteARead-onlyInspect
Get the driver's recorded GPS route (breadcrumb trail) for a booking's trip — the path the driver actually drove, with a distance/duration summary. Use for route playback or to verify a driver attended. Trail is recorded only while the driver is on the job and kept for 30 days. Needs the booking reference (and the passenger email unless you're internal staff using the numeric reservation ID).
| Name | Required | Description | Default |
|---|---|---|---|
| No | Passenger email on the booking (required for partner/customer lookups; optional for internal staff using a numeric reservation ID). | ||
| booking_ref | Yes | Booking reference — "APL-<LT reservation id>" (e.g. "APL-1013869") or the numeric LT reservation ID. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover the safety profile (readOnly, non-destructive, openWorld), yet the description still adds real behavioral context beyond them: the trail is recorded only while the driver is on the job, is retained for 30 days, and access depends on whether the caller is internal staff or a partner/customer. Retention window and recording conditions are exactly the kind of operational detail annotations cannot express.
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?
Two sentences, front-loaded with what the tool returns and immediately followed by when to use it and the access constraint. The parenthetical gloss on 'breadcrumb trail' earns its place by disambiguating jargon; nothing is padding.
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 no output schema, the description carries the return shape itself (the driven path plus a distance/duration summary) and adds retention and authorization constraints. For a two-parameter read tool with annotations, an agent has everything needed to call it correctly.
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 100%, so both parameters are already documented, and the description's restatement of the email-vs-numeric-ID rule largely mirrors the schema text. It confirms rather than extends parameter meaning, which is the baseline-3 case when the schema does the heavy lifting.
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?
States a specific verb and resource with unusual precision: the driver's recorded GPS route as a breadcrumb trail for a booking's trip, plus a distance/duration summary. The word 'recorded' implicitly separates it from the live sibling track_driver, but no sibling is named explicitly, so it stops short of the top score.
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?
Gives two concrete use cases ('route playback', 'verify a driver attended'), which is clear context for when to reach for it. It offers no when-not guidance and does not name track_driver as the alternative for live position, so an agent must infer the boundary itself.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_service_infoARead-onlyInspect
Get information about Airport Pickups London services, policies, vehicles, pricing rules, cancellation, payment, child seats, pets, accessibility, meet and greet, cruise ports, corporate accounts, and any other frequently asked questions. Use this when customers ask about how the service works.
| Name | Required | Description | Default |
|---|---|---|---|
| question | Yes | The customer question or topic (e.g. "cancellation policy", "child seats", "payment methods", "meet and greet") |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, destructiveHint=false, and openWorldHint=false, so safety and lookup scope are covered structurally. The description adds that this surfaces FAQ/policy content, but says nothing about whether the answer is a static knowledge base versus synthesized, nor about truncation or confidence.
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?
Purpose is front-loaded in the first clause and the usage note follows. The long topic list is helpful for retrieval cueing but borders on padding, with "and any other frequently asked questions" adding no information.
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 one-parameter read-only lookup with no output schema, the description supplies enough for an agent to call it correctly. Return format is unmentioned but not strictly required given the simple contract.
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?
Single parameter with 100% schema description coverage, so the schema already documents the 'question' field and its examples. The topic enumeration in the description loosely mirrors those examples, adding little beyond what the schema provides.
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?
Specific verb (get information) plus a concrete, enumerated resource (Airport Pickups London services, policies, vehicles, pricing, cancellation, etc.). The topic list makes it unmistakably distinct from the booking-management siblings like amend_booking and cancel_booking.
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?
"Use this when customers ask about how the service works" gives a clear triggering context. It does not explicitly name alternatives or state when NOT to use it, but the sibling set makes the FAQ role obvious by contrast.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
london_airport_transfer_quoteGet Airport Transfer QuoteRead-onlyInspect
Get London airport transfer prices between a UK airport or cruise port and any UK address or postcode. Covers all London airports (Heathrow, Gatwick, Stansted, Luton, City Airport), Edinburgh Airport, and all major UK cruise ports (Southampton, Dover, Portsmouth); transfers to and from any UK postcode nationwide. Returns every car type with its fixed price (GBP, per vehicle, final), passenger and suitcase capacity, a photo (photo_url = full-size HTTPS image; car_photos at the end of the result = small inline images by car type, for clients that cannot load external images), and — only when passenger and suitcase counts were given — which cars fit and which one is recommended (capacity_assessed tells you). WHAT IS INCLUDED in every price: Meet & Greet in the arrivals hall (driver with a name board; exception Heathrow Terminal 4, where the driver meets the customer OUTSIDE at Zone 1 during the car-park works), flight monitoring, waiting time, airport parking and tolls. PRICES ARE FINAL: quote them exactly as returned — no discounts, no rounding, no "price after discount"; APL offers no ad-hoc discounts. POSTCODE RULE: if the customer gives only a city or town ("Windsor", "Manchester") or just "London" / "central London", ask for the full postcode or a precise address BEFORE calling — UK place names cover wide areas and the price and pickup point would be wrong. London neighbourhoods, landmarks, stations and uniquely identifiable hotel names ARE fine for a quote (Mayfair, Canary Wharf, Kings Cross, The Shard, Hilton Paddington). transfer_date is REQUIRED (the price depends on the date) — ask for it, never guess it. Passengers and suitcases are optional: if you do not know them, leave them out and the result says what is missing. One pickup → one drop-off only; extra stops are not priced here (see the server instructions).
| Name | Required | Description | Default |
|---|---|---|---|
| origin | Yes | Pickup location — airport name (e.g. "Heathrow", "Gatwick"), full UK postcode (e.g. "SW1A 1AA"), or full street address. Do NOT pass a bare city/town name — ask the customer for the postcode first. | |
| suitcases | No | Number of suitcases / large bags (medium suitcases; hand luggage does not count), ONLY if the customer has told you. Same rule as passengers. | |
| passengers | No | Number of passengers, ONLY if the customer has told you. Do not guess or default: without it the result has capacity_assessed:false, no "fits" flags and no recommended car. | |
| destination | Yes | Dropoff location — full UK postcode (e.g. "SL4 5LP" for Windsor), full street address, a London neighbourhood/landmark/station (Mayfair, The Shard, Kings Cross), or a uniquely identifiable hotel/airport name. Do NOT pass a bare city/town name like "Windsor" or "Manchester" — UK cities cover wide areas and the price and pickup point will be wrong. If the customer gave only a city name, ask them for the full postcode before calling this tool. | |
| transfer_date | Yes | REQUIRED — the customer's travel date as YYYY-MM-DD. You MUST ask the customer for their travel date and have their answer BEFORE calling this tool: the price depends on the date (seasonal / peak-date pricing), so never assume today or guess. Convert their reply (e.g. "25 December", "next Friday") to YYYY-MM-DD. | |
| transfer_time | No | Pickup time as HH:MM (Europe/London). Optional for a quote, but pass it whenever you know it: rush-hour rules and the last-minute surcharge (under 3 hours before pickup) depend on it — so always pass it for same-day requests. It is never assumed; the result states the price basis. |
lookup_bookingLook Up BookingRead-onlyInspect
Look up booking details including status, price, payment, driver info, and manage booking URL. For "where is my driver" use track_driver alone (it already includes the journey and the driver) — do not call both for one question. Ask the customer for BOTH their booking reference AND the email address used at booking — same as our website manage-booking login. Do not call this tool without both values. Booking reference can be either the APL-XXXXXX format from the customer's confirmation email, or the numeric LT reservation ID — both work.
| Name | Required | Description | Default |
|---|---|---|---|
| Yes | Passenger email on the booking — required, must match exactly | ||
| booking_ref | Yes | Booking reference — either "APL-<LT reservation id>" (e.g. "APL-1013869", as on the confirmation email) or the numeric LT reservation ID (e.g. "966244"). Both formats accepted. |
track_driverTrack DriverRead-onlyInspect
Get the assigned driver's live GPS position, vehicle details, photo, ETA and the journey (pickup → drop-off, pickup time). This is the COMPLETE answer to 'where is my driver' / 'show me the driver' — call it once and answer from its result; do NOT also call lookup_booking unless the customer asks about the booking itself (price, payment, changes). The card it renders keeps updating by itself, so never call it again just to refresh. GPS updates every 2 minutes with tunnel interpolation. Ask the customer for BOTH their booking reference AND the email address used at booking — same as our website manage-booking login. Do not call this tool without both values.
| Name | Required | Description | Default |
|---|---|---|---|
| Yes | Passenger email on the booking — required, must match exactly | ||
| booking_ref | Yes | Booking reference — either "APL-<LT reservation id>" (e.g. "APL-1013869", as on the confirmation email) or the numeric LT reservation ID (e.g. "966244"). Both formats accepted. |
validate_flightValidate Flight NumberARead-onlyInspect
Validate a flight number and get flight details including airline name, arrival airport, terminal, and arrival time. Use this to verify a customer's flight number before booking and auto-detect the correct terminal. Works with future scheduled flights.
| Name | Required | Description | Default |
|---|---|---|---|
| date | Yes | Flight date in YYYY-MM-DD format | |
| flight_number | Yes | Flight number (e.g. "BA2534", "EK007", "FR1234") |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover the safety profile (readOnlyHint, destructiveHint false, openWorldHint). The description adds a real behavioral limit not in the annotations: it only works with future scheduled flights, which tells the agent when validation will fail. Return payload contents are also previewed.
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?
Two front-loaded sentences: the first delivers purpose and return fields, the second delivers usage context and the scheduling constraint. No redundant or filler text.
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 no output schema, the description usefully enumerates the returned fields (airline name, airport, terminal, arrival time), and the date parameter is fully specified in the schema. Only minor gaps remain, such as error behavior for invalid or past flight numbers.
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 100%, with both flight_number and date fully documented including format examples, so the schema carries the parameter semantics. The description adds no format or constraint detail beyond what the schema provides; baseline 3 applies.
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 specific verb and resource (validate a flight number) and enumerates the resulting data (airline, arrival airport, terminal, arrival time). This is unmistakably distinct from the surrounding booking-management siblings without needing to name them.
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?
It gives a concrete use case (verify a customer's flight number before booking, auto-detect the terminal) and a scope constraint (works with future scheduled flights). It does not name an alternative tool, but no sibling overlaps this function, so the guidance is effectively complete.
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.
1 tool update
- Changed
london_airport_transfer_quote2 fields changed- changed
Input schema / properties / destination / descriptionPrevious value: -"Dropoff location — full UK postcode (e.g. \"SL4 5LP\" for Windsor), full street address, or a uniquely identifiable hotel/airport name. Do NOT pass a bare city/town/area name like \"Windsor\" or \"Manchester\" — UK cities cover wide areas and the price and pickup point will be wrong. If the customer gave only a city name, ask them for the full postcode before calling this tool."New value: +"Dropoff location — full UK postcode (e.g. \"SL4 5LP\" for Windsor), full street address, a London neighbourhood/landmark/station (Mayfair, The Shard, Kings Cross), or a uniquely identifiable hotel/airport name. Do NOT pass a bare city/town name like \"Windsor\" or \"Manchester\" — UK cities cover wide areas and the price and pickup point will be wrong. If the customer gave only a city name, ask them for the full postcode before calling this tool." - changed
Input schema / properties / transfer_time / descriptionPrevious value: -"Pickup time as HH:MM (Europe/London). Optional for a quote: the time of day does not change the price, but transfers less than 6 hours ahead carry a last-minute surcharge — so pass it for same-day requests. It is never assumed; the result states the price basis."New value: +"Pickup time as HH:MM (Europe/London). Optional for a quote, but pass it whenever you know it: rush-hour rules and the last-minute surcharge (under 3 hours before pickup) depend on it — so always pass it for same-day requests. It is never assumed; the result states the price basis."
1 tool update
- Changed
book_london_airport_transfer1 field changed- changed
Input schema / properties / airport_wait_minutes / descriptionPrevious 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."
4 tool updates
- Changed
amend_booking1 field changed- removed
Input schema / properties / changes / properties / passenger_emailRemoved value: -{ - "description": "New email address", - "maxLength": 100, - "type": "string" -}
- Changed
book_london_airport_transfer13 fields changed- changed
Input schema / properties / airport_wait_minutes / descriptionPrevious 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." - changed
Input schema / properties / airport_wait_minutes / typePrevious value: -"number"New value: +"integer" - changed
Input schema / properties / car_type / descriptionPrevious 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." - changed
Input schema / properties / passenger_email / descriptionPrevious 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." - added
Input schema / properties / passenger_email / formatAdded value: +"email" - removed
Input schema / properties / passengers / defaultRemoved value: -1 - changed
Input schema / properties / passengers / descriptionPrevious 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." - changed
Input schema / properties / passengers / typePrevious value: -"number"New value: +"integer" - removed
Input schema / properties / suitcases / defaultRemoved value: -1 - changed
Input schema / properties / suitcases / descriptionPrevious 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." - changed
Input schema / properties / suitcases / typePrevious value: -"number"New value: +"integer" - changed
Input schema / properties / whatsapp_opt_in / descriptionPrevious 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)." - changed
Input schema / requiredPrevious 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" +]
- Changed
cancel_booking2 fields changed- added
Input schema / properties / customer_confirmedAdded value: +{ + "description": "REQUIRED — must be true. Set it only AFTER you have told the customer exactly which booking (reference, date, route) will be cancelled and that it is free (12+ hours before pickup), and they answered yes. The tool refuses without it.", + "type": "boolean" +} - changed
Input schema / requiredPrevious value: -[ - "booking_ref", - "email" -]New value: +[ + "booking_ref", + "email", + "customer_confirmed" +]
- Changed
london_airport_transfer_quote7 fields changed- removed
Input schema / properties / passengers / defaultRemoved value: -1 - changed
Input schema / properties / passengers / descriptionPrevious value: -"Number of passengers (determines recommended car type)"New value: +"Number of passengers, ONLY if the customer has told you. Do not guess or default: without it the result has capacity_assessed:false, no \"fits\" flags and no recommended car." - changed
Input schema / properties / passengers / typePrevious value: -"number"New value: +"integer" - removed
Input schema / properties / suitcases / defaultRemoved value: -1 - changed
Input schema / properties / suitcases / descriptionPrevious value: -"Number of suitcases/large bags (helps recommend the right car)"New value: +"Number of suitcases / large bags (medium suitcases; hand luggage does not count), ONLY if the customer has told you. Same rule as passengers." - changed
Input schema / properties / suitcases / typePrevious value: -"number"New value: +"integer" - changed
Input schema / properties / transfer_time / descriptionPrevious value: -"Transfer time (e.g. \"14:30\"). Ask the user naturally for their preferred time and convert to HH:MM. Defaults to now."New value: +"Pickup time as HH:MM (Europe/London). Optional for a quote: the time of day does not change the price, but transfers less than 6 hours ahead carry a last-minute surcharge — so pass it for same-day requests. It is never assumed; the result states the price basis."
1 tool update
- Changed
find_nearest_drivers1 field changed- changed
Input schema / properties / postcode / descriptionPrevious value: -"UK postcode, e.g. \"SW1A 1AA\"."New value: +"UK postcode, e.g. \"SW1A 1AA\", or just the district, e.g. \"SL4\"."
11 tool updates
- First observed
amend_booking - First observed
book_london_airport_transfer - First observed
cancel_booking - First observed
eu_transfer_quote - First observed
find_nearest_drivers - First observed
get_driver_route - First observed
get_service_info - First observed
london_airport_transfer_quote - First observed
lookup_booking - First observed
track_driver - First observed
validate_flight
Publisher details
- Operator
- Airport Pickups London · Publisher source
- Operator website
- https://www.airport-pickups-london.com/ · Publisher source
- Vendor relationship
- First-party · Publisher source
- Documentation
- https://mcp.airport-pickups-london.com/docs · Publisher source
- Trust center
- Unknown
- Restrictions
- Public MCP access requires no registration, subject to service limits. Optional API-key and OAuth access is available. Transfer fares are payable separately. Booking management requires the booking reference and passenger email; cancellation conditions apply. · Publisher source
Related MCP Connectors
AI marketplace — flights, tours, activities, transport & more via MCP. No auth required.
Public chauffeur prices, policy and consent-led offers for travel bookers and AI assistants.
Connect any AI agent to 1,000+ apps and 27,000+ actions through one remote MCP server (OAuth).
Automate 1,000+ services from any MCP-compatible AI agent: build Applets, run actions and queries.
Related MCP Servers
- FlicenseNot gradedqualityDmaintenanceEnables AI agents to get fixed-price quotes and book London airport transfers, with flight validation and inter-agent communication via A2A protocol.-
- AlicenseNot gradedqualityDmaintenanceFixed London chauffeur prices for AI agents: Heathrow/Gatwick/Stansted/Luton and cruise-port transfers, hourly and full-day hire, private day trips, Heathrow VIP meet & greet, plus pre-filled booking links. Public remote endpoint, no API key.MIT
- AlicenseAqualityFmaintenanceEnables booking premium private chauffeur transfers in Paris and across Europe directly from AI agents. Provides tools to list vehicles, get quotes, book rides, and retrieve service information.4MIT
- AlicenseBqualityAmaintenanceEnables AI assistants to search flights and hotels, compare travel dates, explore destinations, and look up airport codes via a local MCP server, with results including prices and links.16690 PyPI11MIT
Glama MCP Gateway
Add one secure layer between your agents and this server.