{"id":515776,"recorded_at":"2026-10-27T16:57:28.128425Z","observed_at":"2026-10-27T16:57:28.128306Z","subject_kind":"endpoint","subject":"a12ac041-9e33-4693-8da8-637a1cd74dae","kind":"mcp.tools","method":"probe.mcp/1","body":{"count":11,"tools":[{"description":"Modify an existing booking: passenger name or phone, date or time, flight number, passenger count or special requests. Identity is the booking reference plus the email address used on the booking (the same login as the website manage-booking page); the API rejects a mismatch. The email on a booking cannot be changed by this tool: it is the customer's key to the booking. A change request goes to info@aplcars.com from the original address, quoting the booking reference.","inputSchema":{"$schema":"http://json-schema.org/draft-07/schema#","additionalProperties":false,"properties":{"booking_ref":{"description":"Booking reference — the numeric reservation ID shown on the confirmation email and the manage-booking page (e.g. \"1013869\").","maxLength":20,"type":"string"},"changes":{"additionalProperties":false,"description":"Object containing the fields to change","properties":{"flight_number":{"description":"New flight number","maxLength":20,"type":"string"},"passenger_name":{"description":"New passenger full name","maxLength":100,"type":"string"},"passenger_phone":{"description":"New phone number with country code","maxLength":30,"type":"string"},"passengers":{"description":"Updated number of passengers","maximum":50,"minimum":1,"type":"number"},"special_requests":{"description":"Updated special requests","maxLength":500,"type":"string"},"transfer_date":{"description":"New transfer date (YYYY-MM-DD)","type":"string"},"transfer_time":{"description":"New transfer time (HH:MM)","type":"string"}},"type":"object"},"email":{"description":"Passenger email on the booking — required, must match exactly","format":"email","maxLength":100,"type":"string"}},"required":["booking_ref","email","changes"],"type":"object"},"name":"amend_booking"},{"description":"Create a reservation for a London airport or cruise-port transfer to or from any UK address. This creates a REAL booking in the APL dispatch system.\n\nRequired inputs: pickup and drop-off (airport name with terminal, full UK postcode with building number or name, or full street address; a bare city, town or area name such as \"Windsor\", \"Manchester\" or \"central London\" is not a valid location because the driver needs the exact door), transfer date and time, the exact passenger and suitcase counts (operational data for seat allocation, child seats and dispatch, whatever the car size), the car type chosen from the quote, passenger full name, phone with country code, email (with the booking reference it is the customer's key to manage the booking later) and the WhatsApp opt-in answer.\n\nTransport detail by route: airport pickup = flight number plus airport_wait_minutes (the tool refuses an airport pickup without the wait time); airport drop-off = flight number optional; cruise port = cruise or ship name; train station = train number or origin; other routes need none.\n\nSpecial requests (child seats with the child's age: baby seat 0-12 months, child seat 1-4 years, booster 4-12 years, limits Saloon 1 / People Carrier 2 / 8 Seater 3; extra luggage; wheelchair; pet; an extra stop) go in special_requests. An extra stop is not in the quoted price: the booking covers one pickup to one drop-off and the office confirms the cost of a stop before the trip.\n\nPayment: the booking is created as cash to the driver; online payment (all major cards including Amex, Apple Pay, Google Pay, PayPal, Revolut, WeChat Pay, AliPay) is available through the manage-booking link. Prices are the final prices returned by the quote; no discounts exist.\n\nReturns: reservation_id (the numeric customer-facing reference that appears on the confirmation email and that the manage-booking page accepts), manage_booking_url with manage_booking_label (\"Manage and pay: pay online, track your driver, see car details\" — the wording to show for the link), the price, and meeting_point with the terminal or location name. booking_reference carries the same plain number.\n\nBOOKINGS 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.","inputSchema":{"$schema":"http://json-schema.org/draft-07/schema#","additionalProperties":false,"properties":{"airport_wait_minutes":{"description":"Airport pickups only, and required for them (the tool refuses an airport pickup without it): minutes after landing at which the driver is in the arrivals hall — 15, 30, 45, 60 or 90. Defaults by flight type, as validate_flight returns in pickup_suggestion: international (non-EU) 60, EU 45, UK domestic 15; a smaller value is the customer's choice. Parking and the first 30 minutes of waiting are included; the pickup follows the actual landing time.","maximum":180,"minimum":0,"type":"integer"},"car_type":{"description":"The car type chosen from the quote (e.g. \"Saloon\", \"People Carrier\", \"Executive Saloon\"), required.","maxLength":50,"type":"string"},"country":{"description":"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.","maxLength":4,"type":"string"},"cruise_name":{"description":"Cruise/ship name for cruise port pickups/dropoffs (e.g. \"P&O Ventura\")","maxLength":100,"type":"string"},"destination":{"description":"Drop-off location: full UK postcode with building number or name (e.g. \"SL4 5LP, 12 Castle Hill\"), full street address, or airport name. A bare city or town name (\"Windsor\", \"Manchester\") is not a valid value: UK towns cover wide areas and the price and drop-off point would be wrong.","maxLength":200,"type":"string"},"door_number":{"description":"House/building number or name for postcode destinations (e.g. \"12\", \"Flat 3\", \"The Old Rectory\"). Required when destination is a postcode.","maxLength":100,"type":"string"},"flight_number":{"description":"Flight number for airport pickups/dropoffs (e.g. \"BA2534\")","maxLength":20,"type":"string"},"origin":{"description":"Pickup location: airport name with terminal for an airport pickup (e.g. \"Heathrow Terminal 2\"), full UK postcode with building number or name, or full street address. A bare city or town name (e.g. \"Manchester\") is not a valid value.","maxLength":200,"type":"string"},"passenger_email":{"description":"Passenger email address — REQUIRED: it receives the confirmation and, with the booking reference, is the customer's key to manage the booking later.","format":"email","maxLength":100,"type":"string"},"passenger_name":{"description":"Full name of the passenger","maxLength":100,"type":"string"},"passenger_phone":{"description":"Passenger phone number with country code (e.g. \"+447123456789\")","maxLength":30,"type":"string"},"passengers":{"description":"Exact number of passengers travelling (required; operational data for seat allocation, child seats and dispatch, whatever the car size).","maximum":50,"minimum":1,"type":"integer"},"special_requests":{"description":"Any special requirements (e.g. \"child seat needed\", \"extra luggage\")","maxLength":500,"type":"string"},"suitcases":{"description":"Number of suitcases or large bags, hand luggage not counted (required).","maximum":50,"minimum":0,"type":"integer"},"train_number":{"description":"Train number or origin for train station pickups/dropoffs (e.g. \"from Manchester\")","maxLength":50,"type":"string"},"transfer_date":{"description":"Transfer date as YYYY-MM-DD (e.g. \"2026-03-15\").","type":"string"},"transfer_time":{"description":"Pickup time as HH:MM, 24-hour, Europe/London (e.g. \"14:30\").","type":"string"},"whatsapp_opt_in":{"description":"Whether the customer agreed to receive the confirmation, driver details and pickup updates on WhatsApp at passenger_phone (true = yes, false = no, in which case email and phone are used). Required; customers can opt out any time by replying STOP.","type":"boolean"}},"required":["origin","destination","transfer_date","transfer_time","passenger_name","passenger_phone","passenger_email","passengers","suitcases","car_type","whatsapp_opt_in"],"type":"object"},"name":"book_london_airport_transfer"},{"description":"Cancel an existing 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 before pickup this tool cannot cancel; the office handles it by phone. Identity is the booking reference plus the email address used on the booking (the same login as the website manage-booking page); the API rejects a mismatch. The tool refuses without customer_confirmed: true.","inputSchema":{"$schema":"http://json-schema.org/draft-07/schema#","additionalProperties":false,"properties":{"booking_ref":{"description":"Booking reference — the numeric reservation ID shown on the confirmation email and the manage-booking page (e.g. \"1013869\").","maxLength":20,"type":"string"},"customer_confirmed":{"description":"Must be true: the customer has approved cancelling this specific booking (reference, date, route) after being told the cancellation terms. The tool refuses without it.","type":"boolean"},"email":{"description":"Passenger email on the booking — required, must match exactly","format":"email","maxLength":100,"type":"string"},"reason":{"description":"Reason for cancellation","maxLength":500,"type":"string"}},"required":["booking_ref","email","customer_confirmed"],"type":"object"},"name":"cancel_booking"},{"description":"Fixed prices for a European / cross-Channel transfer from London or the UK to a continental city (e.g. Ghent, Bruges, Paris, Brussels, Amsterdam, Cologne, Milan, Barcelona), i.e. for destinations outside the UK. Returns per-car-type prices, fixed per vehicle and final, including the Eurotunnel crossing. If the city is not configured, the result has found:false and lists the available EU destinations; the office confirms a price for other cities on request.","inputSchema":{"$schema":"http://json-schema.org/draft-07/schema#","additionalProperties":false,"properties":{"car_type":{"description":"Optional single EU car type (Standard, Electric, People Carrier, Executive, Large PPL, Executive PPL, Minibus, Luxury). Omit for all car types.","maxLength":40,"type":"string"},"destination":{"description":"European city name (e.g. \"Ghent\", \"Paris\", \"Brussels\")","maxLength":120,"type":"string"},"hub_code":{"description":"Nearest UK departure hub for the UK leg: LHR, LGW, STN, LTN, LCY, SOU. For a London pickup use LHR.","maxLength":8,"type":"string"}},"required":["destination"],"type":"object"},"name":"eu_transfer_quote"},{"description":"Live availability of APL cars near a location, from fleet GPS. The target is an airport or cruise-port code (LHR, LGW, STN, LTN, LCY, EDI, SOU, BHX, MAN), a UK postcode, or lat+lng. Returns the free cars (online, not on a job) grouped by car class with a drive ETA rounded to 5 minutes; on hosts with UI the result renders as the 'Cars near you' card. With `destination` the result also carries the final fixed fare of every car class for that trip (same pricing engine as the quote; pickup = now plus the nearest car's ETA unless transfer_date / transfer_time are given; the fare is the final fixed price for that pickup time) and the card shows a Book button per car. min_pax limits the result to vehicles of at least that size. Customer and partner callers receive an availability view only: car class (Saloon / People Carrier / 8 Seater, executive flag), seats and ETA for up to 5 cars, never a driver name, vehicle, plate, position, distance or fleet size (driver details are shared after a booking is confirmed). Staff callers see full detail and can include busy drivers.","inputSchema":{"$schema":"http://json-schema.org/draft-07/schema#","additionalProperties":false,"properties":{"airport":{"description":"Airport/hub code, e.g. \"LHR\", \"LGW\".","maxLength":4,"type":"string"},"destination":{"description":"Optional drop-off (full postcode, address, London landmark, station or uniquely named hotel; airports are fine). When given, the result also carries the fixed fares from the target to this destination for every car class, and the card shows Book buttons.","maxLength":200,"type":"string"},"include_on_job":{"description":"Also include drivers currently on a job (default false = available only).","type":"boolean"},"lat":{"description":"Target latitude (use with lng).","type":"number"},"limit":{"description":"How many drivers to return (default 5).","maximum":25,"minimum":1,"type":"integer"},"lng":{"description":"Target longitude (use with lat).","type":"number"},"min_pax":{"description":"Only vehicles seating at least this many passengers.","maximum":16,"minimum":1,"type":"integer"},"passengers":{"description":"With destination: passenger count if the customer said it (marks the recommended car).","maximum":50,"minimum":1,"type":"integer"},"postcode":{"description":"UK postcode, e.g. \"SW1A 1AA\", or just the district, e.g. \"SL4\".","maxLength":10,"type":"string"},"transfer_date":{"description":"With destination: travel date YYYY-MM-DD for a LATER trip. Default = today (Europe/London).","type":"string"},"transfer_time":{"description":"With destination: pickup time HH:MM (Europe/London) for a later trip. Default = now plus the nearest car's ETA, rounded up to 5 minutes — an ASAP pickup; the fare returned is the final fixed price for that pickup time.","type":"string"}},"type":"object"},"name":"find_nearest_drivers"},{"description":"The driver's recorded GPS route (breadcrumb trail) for a booking's trip: the path actually driven, with a distance and duration summary, for route playback or attendance checks. The trail is recorded only while the driver is on the job and kept for 30 days. Identity is the booking reference plus the passenger email; staff callers may use the numeric reservation ID alone.","inputSchema":{"$schema":"http://json-schema.org/draft-07/schema#","additionalProperties":false,"properties":{"booking_ref":{"description":"Booking reference — \"APL-<LT reservation id>\" (e.g. \"APL-1013869\") or the numeric LT reservation ID.","maxLength":20,"type":"string"},"email":{"description":"Passenger email on the booking (required for partner/customer lookups; optional for internal staff using a numeric reservation ID).","format":"email","maxLength":100,"type":"string"}},"required":["booking_ref"],"type":"object"},"name":"get_driver_route"},{"description":"Information about Airport Pickups London services and policies: vehicles, pricing rules, cancellation, payment, child seats, pets, accessibility, meet and greet, airport waiting, cruise ports, corporate accounts and other frequently asked questions, answered from the APL knowledge base (the same source as the website).","inputSchema":{"$schema":"http://json-schema.org/draft-07/schema#","additionalProperties":false,"properties":{"question":{"description":"The customer question or topic (e.g. \"cancellation policy\", \"child seats\", \"payment methods\", \"meet and greet\")","maxLength":500,"type":"string"}},"required":["question"],"type":"object"},"name":"get_service_info"},{"description":"Fixed prices for a transfer between a UK airport or cruise port and any UK address or postcode: all London airports (Heathrow, Gatwick, Stansted, Luton, City Airport), Edinburgh Airport, the cruise ports Southampton, Dover and Portsmouth, and any UK postcode nationwide. Returns every car type with its final price (GBP, per vehicle), passenger and suitcase capacity and 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). When passenger and suitcase counts are supplied, the result also marks which cars fit and which one is recommended (capacity_assessed). Every price includes Meet & Greet in the arrivals hall (driver with a name board; at Heathrow Terminal 4 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: APL offers no discounts and nothing is added beyond what is returned. The price depends on the travel date (seasonal and peak-date pricing). Prices are fixed per route for bookings made 3 or more hours before pickup; bookings under 3 hours are ASAP jobs and are quoted at a higher live price, because drivers are dispatched at short notice — always quote the final price only, never described as a surcharge. The result states the price basis. Accepted locations: airport and cruise-port names, full UK postcodes, street addresses, London neighbourhoods, landmarks, stations and uniquely identifiable hotels (Mayfair, Canary Wharf, Kings Cross, The Shard, Hilton Paddington). A bare city or town name (\"Windsor\", \"Manchester\", \"central London\") is not a valid location, because UK place names cover wide areas and the price and pickup point depend on the exact place. One pickup to one drop-off; extra stops are not priced.","inputSchema":{"$schema":"http://json-schema.org/draft-07/schema#","additionalProperties":false,"properties":{"destination":{"description":"Drop-off location: full UK postcode (e.g. \"SL4 5LP\"), full street address, a London neighbourhood, landmark or station (Mayfair, The Shard, Kings Cross), or a uniquely identifiable hotel or airport name. A bare city or town name (\"Windsor\", \"Manchester\") is not a valid value: UK towns cover wide areas and the price and pickup point would be wrong.","maxLength":200,"type":"string"},"origin":{"description":"Pickup location: airport or cruise-port name (e.g. \"Heathrow\", \"Gatwick\", \"Southampton Cruise Port\"), full UK postcode (e.g. \"SW1A 1AA\"), or full street address. A bare city or town name is not a valid value.","maxLength":200,"type":"string"},"passengers":{"description":"Number of passengers, when known. Without it the result has capacity_assessed:false, no \"fits\" flags and no recommended car.","maximum":50,"minimum":1,"type":"integer"},"suitcases":{"description":"Number of suitcases or large bags (medium suitcases; hand luggage does not count), when known.","maximum":50,"minimum":0,"type":"integer"},"transfer_date":{"description":"Travel date as YYYY-MM-DD (required). The price depends on the date (seasonal and peak-date pricing).","type":"string"},"transfer_time":{"description":"Pickup time as HH:MM (Europe/London), optional but needed for a same-day pickup: the price depends on the time of day and on how far ahead the pickup is; the result states the price basis.","type":"string"}},"required":["origin","destination","transfer_date"],"type":"object"},"name":"london_airport_transfer_quote"},{"description":"Details of an existing booking: status, route, pickup time, price, payment, driver information once assigned, and the manage-booking URL. Identity is the booking reference plus the email address used on the booking (the same login as the website manage-booking page); the API rejects a mismatch. The booking reference is the numeric reservation ID from the confirmation email.","inputSchema":{"$schema":"http://json-schema.org/draft-07/schema#","additionalProperties":false,"properties":{"booking_ref":{"description":"Booking reference — the numeric reservation ID shown on the confirmation email and the manage-booking page (e.g. \"1013869\").","maxLength":20,"type":"string"},"email":{"description":"Passenger email on the booking — required, must match exactly","format":"email","maxLength":100,"type":"string"}},"required":["booking_ref","email"],"type":"object"},"name":"lookup_booking"},{"description":"Live status of the driver on an existing booking: assignment state (no driver yet / assigned without GPS / live position), the driver's position, vehicle details, photo and ETA, and the journey (pickup, drop-off, pickup time). On hosts with UI the result renders as a tracking card that keeps updating on its own. GPS updates every 2 minutes with tunnel interpolation. Identity is the booking reference plus the email address used on the booking (the same login as the website manage-booking page); the API rejects a mismatch.","inputSchema":{"$schema":"http://json-schema.org/draft-07/schema#","additionalProperties":false,"properties":{"booking_ref":{"description":"Booking reference — the numeric reservation ID shown on the confirmation email and the manage-booking page (e.g. \"1013869\").","maxLength":20,"type":"string"},"email":{"description":"Passenger email on the booking — required, must match exactly","format":"email","maxLength":100,"type":"string"}},"required":["booking_ref","email"],"type":"object"},"name":"track_driver"},{"description":"Flight details for a flight number and date from the airline schedule: airline name, arrival airport, terminal, scheduled arrival time and status. verified:false means the flight was not found in the schedule for that date. Works for future scheduled flights; confirms a flight and its arrival terminal for an airport pickup.","inputSchema":{"$schema":"http://json-schema.org/draft-07/schema#","additionalProperties":false,"properties":{"date":{"description":"Flight date in YYYY-MM-DD format","type":"string"},"flight_number":{"description":"Flight number (e.g. \"BA2534\", \"EK007\", \"FR1234\")","maxLength":10,"type":"string"}},"required":["flight_number","date"],"type":"object"},"name":"validate_flight"}]},"body_sha256":"e9395b823ed2c254993923dde45f6fb4152ba4b0b9dbfe5966c5452122acd00d","prev_id":null,"leaf":"0x2d75031bf9eebd8b98df7dfb4fed29f00dbeb47a25830bbf6cf89fc28c4c81ce","leaf_text":"{\"body\":\"e9395b823ed2c254993923dde45f6fb4152ba4b0b9dbfe5966c5452122acd00d\",\"id\":515776,\"kind\":\"mcp.tools\",\"method\":\"probe.mcp/1\",\"observed_us\":1793120248128306,\"prev\":null,\"subject\":\"a12ac041-9e33-4693-8da8-637a1cd74dae\",\"subject_kind\":\"endpoint\"}","day":{"day":"2026-10-27","leaves":273461,"root":"0xdd77e5e99da32c3f154180d63e3c3e6fe11e896a2c6896412ef6b5c4bcf7e795","chained":"0x23bb4dfd09f55c15ac3962f53578e02c6114d5bfd9bb451cf8794fb6e2817ef4","anchor_chain":"eip155:5042002","anchor_tx":"0xb2ebd83aafeb765a0ce66e76aefb133ed06606c98038fd56191e2bcd1dcb77b4","anchor_block":69414147},"proof":["0x2d75e08730ebc9933a7a3f1e65fa52b17e98f87cd3795ad62ed3c9ac8c8d1979","0xc5da8921c2845c8c28696f16660bcef6e14a2480f8b5dc76654bf852f03f5712","0x3ff86f7a7e3f74fc5a90d4cd5424de291dc28f6fec1cbb732a69279efc00b150","0xe78078c7faf83f0afa9bee97586c511c5ca20c423b1e2a4d02f27ca3795a4baa","0x45d178621a4c548b90a6b5d78d49ebd4b87628be2c9101b50932c31afc573769","0x63ea81ef3625fcbe9246e8ce1e47053ad00d7d04f6622b58f5096394dc2fa29e","0x98c733ac2ec75e5624468bb3c2cd712e5e4829099cd30186d106978c12214cfc","0x69ea2cc5a3c48bec915cfed8214641844df522ae1cee3b881816bb4485d6db39","0x6507250beda223d2ff44b68af52955dc8fba7a24c120840bb50bb35def0d114a","0xef0be44ded6305b2033091a1b577c49f6768a048039212c84021ae88853e7b6d","0x565e5d1bdde53cb504eca7d80d5086f778250d6d1d5f559fca69ef359e9343cf","0xbba37928cada6ab17c662e87851d940dd07cc2323bc089da77c1f353a0c5e936","0xf9e544d10b80657275e1e196da89ba5336a7cc49eaa0d6d801fb5d632cf5deec","0x8ff18b1523f9fbdd16a5796cbe184b46854c06256508af8de5509b598370c725","0xa383a1cfe9b3f6af67eb4c7642564b9424d46d7fca90e7ba175d549f8b67dd0c","0x52efa60e0c3d8525486d2310eb3b6b566c9677c64fd1f819edb072cf101bcbdb","0x22c1fb9487ee0b9732fa017a0cc321eb27a60c08450d112f755089796e12cb1c","0xa20d48798a34aba12eb9c7297722982d910f06c148f5e27ac59307422964a585","0x9fc354c0ea3efc3f1b6548bb77ea902a50f2c9647647ea61592efce2bd795699"]}