{"ok":true,"site":{"host":"mydriverparis.com","url":"https://www.mydriverparis.com/","type":"live","category":"Travel & Events","desc":"MyDriverParis is a private chauffeur and limousine service in Paris, with airport and station transfers by luxury car, minivan or bus and VIP meet and greet.","tools":[{"name":"get_vehicles","kind":"answer","impl":"imperative","description":"List all available vehicles with capacity and base rates. Use this to help the customer choose the right vehicle for their trip.","annotations":{"readOnlyHint":true},"inputSchema":{"type":"object","properties":{}},"hasHandler":true,"hasExecute":true,"__source":"polyfill","executable":true,"handlerField":"execute"},{"name":"get_quote","kind":"answer","impl":"imperative","description":"Calculate the exact price for a private chauffeur transfer. Returns prices for all available vehicles AND a quote_id valid for 15 minutes. Always call this before book_ride and pass the quote_id to book_ride — it locks the price and prevents drift. IMPORTANT: pickup_date must be in dd/mm/yyyy format.","annotations":{"readOnlyHint":true},"inputSchema":{"type":"object","properties":{"pickup_address":{"type":"string","description":"Full pickup address (e.g. 'CDG Terminal 2E' or street address)"},"dropoff_address":{"type":"string","description":"Full drop-off address"},"pickup_date":{"type":"string","description":"Pickup date in dd/mm/yyyy format (e.g. '27/03/2026')"},"pickup_time":{"type":"string","description":"Pickup time in HH:MM format (e.g. '14:00')"},"form_type":{"type":"string","enum":["one_way","hourly","flat"],"default":"one_way","description":"Booking type"},"num_hours":{"type":"number","description":"Number of hours (required for hourly, min 3)"},"step_address":{"type":"string","description":"Intermediate stop address (optional)"},"channel":{"type":"string","description":"Caller channel identifier for observability: 'chatbot', 'whatsapp', 'claude-desktop', 'email-agent', or your agent name. Defaults to 'mcp-direct'."}},"required":["pickup_address","dropoff_address","pickup_date","pickup_time"],"additionalProperties":false},"hasHandler":true,"hasExecute":true,"__source":"polyfill","executable":true,"handlerField":"execute"},{"name":"book_ride","kind":"transact","impl":"imperative","description":"Create a secure payment link to book a private chauffeur transfer. The reservation is created automatically ONLY after the customer completes payment. REQUIRED: call get_quote first and pass the resulting quote_id + the chosen vehicle_id. The price is taken from the stored quote (not from any price field you pass). Pass idempotency_key to make retries safe: the same key returns the same payment link instead of creating a duplicate.","annotations":{"readOnlyHint":false},"inputSchema":{"type":"object","properties":{"quote_id":{"type":"string","description":"quote_id returned by get_quote. Must be passed. Expired quote (>15 min) requires a fresh get_quote."},"vehicle_id":{"type":"number","description":"Vehicle ID chosen from the get_quote results"},"passenger_name":{"type":"string","description":"Full name of the passenger"},"passenger_email":{"type":"string","description":"Passenger email for booking confirmation"},"passenger_phone":{"type":"string","description":"Passenger phone with country code (e.g. +33612345678)"},"passengers":{"type":"integer","minimum":1,"default":1,"description":"Number of passengers"},"bags":{"type":"integer","minimum":0,"default":1,"description":"Number of bags"},"flight_number":{"type":"string","description":"Flight number for airport pickups (e.g. AF123)"},"idempotency_key":{"type":"string","description":"Optional agent-generated key (e.g. UUID) to deduplicate retries. Same key + same params returns the same payment link for 24 h. Same key + different params returns an IDEMPOTENCY_CONFLICT error."},"channel":{"type":"string","description":"Caller channel identifier for observability. If omitted, the channel stored with the quote (from get_quote) is used."}},"required":["quote_id","vehicle_id","passenger_name","passenger_email","passenger_phone"],"additionalProperties":false},"hasHandler":true,"hasExecute":true,"__source":"polyfill","executable":true,"handlerField":"execute"},{"name":"book_meetgreet","kind":"transact","impl":"imperative","description":"Create a secure payment link for a VIP Meet & Greet booking, with optional transfer combo. M&G prices are FIXED (CDG/Orly 250€ base for 2 pax + 50€/extra, Gare du Nord 500€ per STARTED group of 2 pax (1-2=500€, 3-4=1000€, 5-6=1500€), Gare de Lyon 350€ + 75€/extra) — do NOT call get_quote for the M&G part. A connection (service_type='connection': arrival flight → connecting departure flight with fast-track between terminals) is billed as TWO M&G services = the location price ×2 (e.g. CDG 2 pax = 500€). For a combo with a transfer (e.g. CDG M&G + transfer to a hotel), call get_quote first for the transfer leg and pass the resulting quote_id + vehicle_id in `transfer`. If lead time is below the minimum (12h before pickup; 48h for Gare du Nord), returns LEAD_TIME_TOO_SHORT — the caller must fall back to manual notification instead of retrying. lead_time_override=true bypasses the 12h minimum ONLY after Sylvain has explicitly confirmed greeter availability for this exact request (WhatsApp admin approval 'mg ok'); never set it on your own initiative. Not available for Gare du Nord; a 90-minute floor always applies. If flight cannot be validated, returns FLIGHT_NOT_FOUND — ask the customer to re-confirm the flight number, or set flight_unverified=true with manual_airline + manual_origin to force-accept.","annotations":{"readOnlyHint":false},"inputSchema":{"type":"object","properties":{"location":{"type":"string","enum":["cdg","orly","gare_du_nord","gare_de_lyon"],"description":"M&G location. cdg/orly = airport, gare_du_nord/gare_de_lyon = train station."},"service_type":{"type":"string","enum":["arrival","departure","connection"],"default":"arrival","description":"arrival (pickup at airport/station), departure (drop-off + greeter for check-in), connection (transit: arrival flight → connecting departure flight; billed as 2 M&G services = location price ×2)."},"terminal":{"type":"string","description":"Terminal number (airports only, e.g. '2E', '3')."},"flight_number":{"type":"string","description":"Flight number for airports (AF1234) or train/Eurostar number for stations."},"pickup_date":{"type":"string","description":"YYYY-MM-DD format."},"pickup_time":{"type":"string","description":"HH:MM in Paris time. For arrivals this is the flight/train arrival time; for departures the time the greeter meets the client."},"adults":{"type":"integer","minimum":1,"description":"Number of adults (min 1)."},"children":{"type":"integer","minimum":0,"default":0,"description":"Number of children (in addition to adults)."},"bags":{"type":"integer","minimum":0,"default":0,"description":"Number of bags (used for vehicle sizing when combo transfer)."},"first_name":{"type":"string","description":"Client first name."},"last_name":{"type":"string","description":"Client last name."},"email":{"type":"string","format":"email","description":"Client email — used for booking confirmation and Stripe receipt."},"phone":{"type":"string","description":"Client phone with country code."},"additional_info":{"type":"string","description":"Free-text notes (special requests, tail number for private aviation, etc.)."},"train_pnr":{"type":"string","description":"Eurostar / TGV reservation reference (PNR). Required when location is gare_du_nord or gare_de_lyon."},"train_coach":{"type":"string","description":"Train coach number. Required for train stations."},"train_seat":{"type":"string","description":"Train seat number(s). Required for train stations."},"transfer":{"type":"object","properties":{"quote_id":{"type":"string","description":"quote_id from a prior get_quote call covering the transfer leg (e.g. CDG → Le Bristol)."},"vehicle_id":{"type":"number","description":"Vehicle ID chosen from that quote."},"transfer_pickup_time":{"type":"string","description":"HH:MM — time the chauffeur picks up the client AFTER the greeter has escorted them out. Usually 30-60min after the greeter_time (pickup_time)."}},"required":["quote_id","vehicle_id","transfer_pickup_time"],"additionalProperties":false,"description":"Optional combo: bundles a private transfer in the same Stripe Checkout session. Generates 2 line items + 2 Zeplan bookings (M&G + transfer)."},"flight_unverified":{"type":"boolean","description":"Set true only if the client confirmed the flight after AeroDataBox couldn't validate it. Requires manual_airline + manual_origin."},"manual_airline":{"type":"string","description":"Required if flight_unverified=true. The airline name as stated by the client."},"manual_origin":{"type":"string","description":"Required if flight_unverified=true. Departure city as stated by the client."},"manual_arrival_time":{"type":"string","description":"Optional. Local arrival time as stated by the client."},"idempotency_key":{"type":"string","description":"Optional UUID for safe retries. Same key returns the same payment_url for 24h."},"lead_time_override":{"type":"boolean","description":"Bypass the 12h minimum lead time. ONLY when Sylvain has explicitly approved this exact booking after manually confirming greeter availability ('mg ok' admin flow) — never on client insistence. Refused for gare_du_nord; hard 90-minute floor."},"channel":{"type":"string","description":"Caller channel identifier for observability (whatsapp, chatbot, mcp-direct, ...)."}},"required":["location","flight_number","pickup_date","pickup_time","adults","first_name","last_name","email","phone"],"additionalProperties":false},"hasHandler":true,"hasExecute":true,"__source":"polyfill","executable":true,"handlerField":"execute"},{"name":"resolve_location","kind":"answer","impl":"imperative","description":"Resolve a free-text location (city, airport, hotel, station, full address) to a canonical address + coordinates, using the same geocoder that Zeplan consumes for bookings. Use this BEFORE get_quote when the customer gives a fuzzy pickup/drop-off (e.g. 'CDG', 'Le Bristol', 'Gare du Nord', raw GPS). Returns up to 5 candidates with place_id, full address, type hint, and optionally coordinates.","annotations":{"readOnlyHint":true},"inputSchema":{"type":"object","properties":{"query":{"type":"string","description":"Free-text location. Examples: 'CDG', 'Charles de Gaulle Terminal 2E', 'Hotel Le Bristol Paris', 'Gare du Nord', '15 rue de la Paix Paris', '48.8566, 2.3522'."},"include_coords":{"type":"boolean","default":false,"description":"If true, also fetch GPS coords for the first result (extra API call). Defaults to false — request only when the agent has picked the right candidate."}},"required":["query"],"additionalProperties":false},"hasHandler":true,"hasExecute":true,"__source":"polyfill","executable":true,"handlerField":"execute"},{"name":"resolve_flight","kind":"answer","impl":"imperative","description":"Resolve a flight number to its airports, terminals, scheduled times, and status. Use BEFORE book_ride whenever the customer provides a flight number so that pickup time and terminal are correct. Input is tolerant: accepts 'AF007', 'AF 007', 'AF-007', 'af7', 'AFR007' — the tool normalizes internally. Returns an array of matching operations (usually 1 when direction is set).","annotations":{"readOnlyHint":true},"inputSchema":{"type":"object","properties":{"flight_number":{"type":"string","description":"Flight number in any format: 'AF007', 'AF 007', 'af-7', 'AFR007'. Server normalizes."},"date":{"type":"string","description":"Date in YYYY-MM-DD (NOT dd/mm/yyyy). This is the arrival date for pickups, departure date for dropoffs."},"direction":{"type":"string","enum":["arrival","departure"],"default":"arrival","description":"'arrival' (default) when picking the passenger up at an airport, 'departure' when dropping off for a flight."}},"required":["flight_number","date"],"additionalProperties":false},"hasHandler":true,"hasExecute":true,"__source":"polyfill","executable":true,"handlerField":"execute"},{"name":"resolve_train","kind":"answer","impl":"imperative","description":"Resolve a TRAIN NUMBER to its route, stations and scheduled times via the official SNCF API (covers TGV inOui/Ouigo, TER, Intercités, TGV Lyria, Eurostar and international TGVs — everything serving a French station). Use whenever a customer books a station pickup/drop-off or a station Meet & Greet and gives a train number, to verify the departure/arrival time. A train number is DIGITS ONLY (TGV 6503, Lyria 9211, Eurostar 9031); a 6-char code like 'JWVLHH' is a ticket PNR and a long ref like 'W209656898' is an agency booking reference — those cannot be looked up here: extract route + time from the customer's confirmation instead.","annotations":{"readOnlyHint":true},"inputSchema":{"type":"object","properties":{"train_number":{"type":"string","description":"Train number, digits only or with prefix: '9211', 'TGV 6503', 'Eurostar 9031'. Server normalizes."},"date":{"type":"string","description":"Travel date in YYYY-MM-DD."}},"required":["train_number","date"],"additionalProperties":false},"hasHandler":true,"hasExecute":true,"__source":"polyfill","executable":true,"handlerField":"execute"},{"name":"get_service_info","kind":"answer","impl":"imperative","description":"Get information about MyDriverParis services, coverage areas, airports served, and policies. Use this to answer customer questions.","annotations":{"readOnlyHint":true},"inputSchema":{"type":"object","properties":{}},"hasHandler":true,"hasExecute":true,"__source":"polyfill","executable":true,"handlerField":"execute"},{"name":"get_cancellation_policy","kind":"answer","impl":"imperative","description":"Get the full cancellation, refund and modification policy. Use this whenever a customer asks about cancelling, changing, or refunds — never guess the policy.","annotations":{"readOnlyHint":true},"inputSchema":{"type":"object","properties":{}},"hasHandler":true,"hasExecute":true,"__source":"polyfill","executable":true,"handlerField":"execute"}],"apiSurface":"polyfill","favicon":"/favicons/mydriverparis.com.png","toolCount":9}}