booking
Server Details
Book a private driver in Paris: live quotes, airport transfers, tours, VIP Meet & Greet. No auth.
- Status
- Healthy
- Uptime
- 100.0% over 45 days
- Last Tested
- Transport
- Streamable HTTP · MCP 2025-11-25
- URL
TDQS
Scored across 10 tools
Tools target distinct steps (resolve_*, get_quote, book_ride, book_meetgreet) and the workflow is clear. However, get_service_info and get_cancellation_policy overlap on policy content, and book_meetgreet's optional transfer-combo path could momentarily blur with book_ride. Descriptions mostly resolve these, so misselection is unlikely but possible.
All tools follow a consistent snake_case verb_noun pattern: book_*, get_*, resolve_*, send_*. The only minor deviation is book_meetgreet as a compound noun, but it still adheres to the book_* prefix convention. Naming is predictable and readable.
10 tools is well within the ideal range and each maps to a distinct capability in the booking workflow (information, resolution, quoting, booking, notification). No redundant or filler tools are present.
The surface covers pre-booking info, quoting, and booking creation, but lacks tools to retrieve, modify, or cancel an existing booking despite having a cancellation-policy tool. These post-booking lifecycle gaps are notable, though agents can escalate or use external booking systems.
Available Tools
10 toolsbook_meetgreetAInspect
Create a secure payment link for a VIP Meet & Greet booking, with optional transfer combo. Available locations: CDG, Orly, Gare de Lyon — Meet & Greet is NO LONGER offered at Gare du Nord (do not quote or book it there). M&G prices are FIXED (CDG/Orly 250€ base for 2 pax + 50€/extra, Gare de Lyon 350€ + 75€/extra) — do NOT call get_quote for the M&G part. Some event dates carry a supplement (e.g. Paris Air Show): the mg_price returned here is the amount actually charged for pickup_date. 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), 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. 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.
| Name | Required | Description | Default |
|---|---|---|---|
| bags | No | Number of bags (used for vehicle sizing when combo transfer). | |
| Yes | Client email — used for booking confirmation and Stripe receipt. | ||
| phone | Yes | Client phone with country code. | |
| adults | Yes | Number of adults (min 1). | |
| channel | No | Caller channel identifier for observability (whatsapp, chatbot, mcp-direct, ...). | |
| children | No | Number of children (in addition to adults). | |
| location | Yes | M&G location. cdg/orly = airport, gare_de_lyon = train station. Gare du Nord is no longer available. | |
| terminal | No | Terminal number (airports only, e.g. '2E', '3'). | |
| transfer | No | Optional combo: bundles a private transfer in the same Stripe Checkout session. Generates 2 line items + 2 Zeplan bookings (M&G + transfer). | |
| last_name | Yes | Client last name. | |
| train_pnr | No | TGV reservation reference (PNR). Required when location is gare_de_lyon. | |
| first_name | Yes | Client first name. | |
| train_seat | No | Train seat number(s). Required for train stations. | |
| pickup_date | Yes | YYYY-MM-DD format. | |
| pickup_time | Yes | HH:MM in Paris time. For arrivals this is the flight/train arrival time; for departures the time the greeter meets the client. | |
| train_coach | No | Train coach number. Required for train stations. | |
| service_type | No | 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). | arrival |
| flight_number | Yes | Flight number for airports (AF1234) or train/Eurostar number for stations. | |
| manual_origin | No | Required if flight_unverified=true. Departure city as stated by the client. | |
| manual_airline | No | Required if flight_unverified=true. The airline name as stated by the client. | |
| additional_info | No | Free-text notes (special requests, tail number for private aviation, etc.). | |
| idempotency_key | No | Optional UUID for safe retries. Same key returns the same payment_url for 24h. | |
| flight_unverified | No | Set true only if the client confirmed the flight after AeroDataBox couldn't validate it. Requires manual_airline + manual_origin. | |
| lead_time_override | No | 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. Hard 90-minute floor. | |
| manual_arrival_time | No | Optional. Local arrival time as stated by the client. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Goes well beyond annotations by disclosing fixed pricing tiers, event-date supplements, connection billing (×2), the 12h minimum with a hard 90-minute floor, the LEAD_TIME_TOO_SHORT and FLIGHT_NOT_FOUND error behaviors, and the admin-approval gate on lead_time_override. Annotations only cover the safety profile, so this added operational context is genuinely valuable.
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?
Dense single paragraph, front-loaded with purpose and pricing before routing and error handling. Every sentence carries operational information — no filler or restated field names.
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 25-parameter mutation tool with nested objects and no output schema, the description covers pricing, location exclusions, error codes, fallbacks, retry/idempotency implications, and override governance. Nothing an agent needs to call it correctly is missing.
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 the baseline is 3, but the description adds real meaning beyond the schema: the connection service_type is billed as two services, the transfer object requires a prior get_quote quote_id/vehicle_id, and lead_time_override's precondition is spelled out. Only the pickup_time arrival/departure distinction is already fully covered by 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?
States a specific verb+resource+artifact: 'Create a secure payment link for a VIP Meet & Greet booking, with optional transfer combo.' It distinguishes itself from siblings by explicitly telling the agent not to call get_quote for the M&G leg, only for the transfer leg.
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?
Rich routing guidance: when to use get_quote (transfer combo only), which locations are valid vs forbidden (Gare du Nord no longer offered), when lead_time_override is permissible, and the exact fallback when the 12h minimum is unmet. Alternatives and preconditions are stated explicitly.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
book_rideAInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| bags | No | Number of bags | |
| channel | No | Caller channel identifier for observability. If omitted, the channel stored with the quote (from get_quote) is used. | |
| quote_id | Yes | quote_id returned by get_quote. Must be passed. Expired quote (>15 min) requires a fresh get_quote. | |
| passengers | No | Number of passengers | |
| vehicle_id | Yes | Vehicle ID chosen from the get_quote results | |
| flight_number | No | Flight number for airport pickups (e.g. AF123) | |
| passenger_name | Yes | Full name of the passenger | |
| idempotency_key | No | 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. | |
| passenger_email | Yes | Passenger email for booking confirmation | |
| passenger_phone | Yes | Passenger phone with country code (e.g. +33612345678) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description discloses critical behavioral details beyond annotations: reservation is gated on payment completion, price is taken from the stored quote rather than passed value, and same idempotency_key returns the same payment link to prevent duplicates. These are not visible in the readOnlyHint/openWorldHint/idempotentHint annotations.
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?
The description is three sentences, each earning its place: purpose, prerequisite workflow, and idempotency guidance. It is front-loaded with the core action and avoids redundancy with the schema.
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 complex tool with 10 parameters and no output schema, the description covers the essential workflow, payment semantics, and idempotency. It does not describe the return value format, but since no output schema exists and the description otherwise covers decision-relevant behavior, it is sufficiently complete.
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 baseline is 3. The description adds meaningful context by explaining that quote_id must come from a prior get_quote call, vehicle_id is chosen from quote results, and price is derived from the quote. It also clarifies idempotency_key behavior beyond the schema's already detailed description.
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 begins with a specific verb and resource: 'Create a secure payment link to book a private chauffeur transfer.' This clearly distinguishes it from sibling tools like get_quote, get_vehicles, and book_meetgreet.
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 an explicit required workflow: 'REQUIRED: call get_quote first and pass the resulting quote_id + the chosen vehicle_id.' It also explains that the reservation is created only after payment, and mentions idempotency for retries. However, it does not explicitly state when NOT to use this tool or mention alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_cancellation_policyARead-onlyInspect
Get the full cancellation, refund and modification policy. Use this whenever a customer asks about cancelling, changing, or refunds — never guess the policy.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, and the description adds useful context by emphasizing the policy is 'full' and instructing to 'never guess', which signals authoritative data. It doesn't mention side effects, but none are expected for a read-only policy fetch.
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?
The description is two short sentences, front-loaded with 'Get' and the resource. Every word adds value—'full' qualifies the scope and 'never guess' provides an actionable guardrail.
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 zero parameters and no output schema, the description fully covers what the tool does and when to use it. The policy content is specified (cancellation, refund, modification), making the tool's purpose unambiguous.
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?
The tool has zero parameters, so the baseline is 4. The description needs to and does not explain any parameters, which is appropriate. All schema properties are covered (none exist).
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 uses a specific verb (Get) and identifies the exact resource (full cancellation, refund and modification policy). It clearly distinguishes this from sibling tools like book_ride or get_quote by targeting a policy lookup only.
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?
Explicitly states when to use the tool: 'Use this whenever a customer asks about cancelling, changing, or refunds.' It also provides a clear directive not to guess the policy, giving the agent a rule for when to rely on this tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_quoteARead-onlyInspect
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. COVERAGE GATE: on customer-facing channels a trip where NEITHER the pickup NOR the drop-off is in the Paris region (Paris, Île-de-France, CDG / Orly / Beauvais airports, Disneyland, Versailles) is refused with OUTSIDE_PARIS_REGION — such trips are priced by the team only: give no price, collect the details and escalate.
| Name | Required | Description | Default |
|---|---|---|---|
| channel | No | Caller channel identifier for observability: 'chatbot', 'whatsapp', 'claude-desktop', 'email-agent', or your agent name. Defaults to 'mcp-direct'. | |
| form_type | No | Booking type | one_way |
| num_hours | No | Number of hours (required for hourly, min 3) | |
| pickup_date | Yes | Pickup date in dd/mm/yyyy format (e.g. '27/03/2026') | |
| pickup_time | Yes | Pickup time in HH:MM format (e.g. '14:00') | |
| step_address | No | Intermediate stop address (optional) | |
| pickup_address | Yes | Full pickup address (e.g. 'CDG Terminal 2E' or street address) | |
| dropoff_address | Yes | Full drop-off address |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Goes well beyond the readOnlyHint/openWorldHint annotations by disclosing the 15-minute quote_id validity, the price-locking behavior, and the OUTSIDE_PARIS_REGION refusal with the prescribed escalation fallback. These are non-obvious operational traits an agent must know before invoking.
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-loads what the tool does and returns, then the sequencing rule, then the gate — a logical order with each sentence earning its place. It is dense (the IMPORTANT/COVERAGE GATE blocks read as policy text) but no sentence is filler.
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 still tells the agent what comes back (all-vehicle prices plus a quote_id). Combined with the ordering requirement and the out-of-coverage refusal path, 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 the baseline is 3. The description reinforces the dd/mm/yyyy format for pickup_date and hints at channel-dependent behavior via the coverage gate, but adds little parameter meaning the schema does not already provide.
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 ('Calculate the exact price for a private chauffeur transfer') and immediately clarifies the output: prices for all vehicles plus a quote_id. This distinguishes it cleanly from siblings like book_ride and get_vehicles.
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?
Explicit sequencing rule ('Always call this before book_ride and pass the quote_id to book_ride'), plus an explicit when-not case: trips outside the Paris region must not be priced and should be escalated instead. Both the happy path and the exclusion are stated with no inference required.
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 MyDriverParis services, coverage areas, airports served, and policies. Use this to answer customer questions.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, and the description aligns by saying 'Get information.' It adds useful context about the specific domains covered (coverage areas, airports, policies), going beyond the annotation. It does not describe response structure or limitations, but the readOnly hint lowers the burden.
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 concise sentences with front-loaded action and resource. The second sentence adds practical usage guidance without redundancy. Every word serves a purpose.
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?
The tool is simple (no parameters, no output schema) and the description covers its purpose, content domains, and intended use case. Combined with clear annotations, it is fully adequate for an agent to select and invoke it.
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?
The tool has zero parameters, so the schema already fully describes them (baseline 4). The description adds no parameter-level detail, but none is needed.
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 uses a specific verb ('Get information') with a clear resource ('MyDriverParis services, coverage areas, airports served, and policies'). It distinctly separates this from sibling tools like book_ride or get_quote by focusing on general service facts.
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 explicitly states when to use the tool ('Use this to answer customer questions'), providing clear context. However, it does not mention when not to use it or name alternative tools, stopping short of full exclusion guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_vehiclesARead-onlyInspect
List all available vehicles with capacity and base rates. Use this to help the customer choose the right vehicle for their trip.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and openWorldHint=false, establishing this as a safe read operation. The description adds useful context by noting it returns capacity and base rates, which goes beyond the annotation. No contradiction exists.
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?
The description is just two sentences, front-loaded with the action and resource. Every word earns its place, with no redundant information or filler.
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?
Given the tool's simplicity (0 parameters, read-only, clear annotations), the description is largely complete. It conveys the main purpose, usage context, and the key data returned (capacity, base rates). Minor omissions like ordering or availability semantics are not critical at this complexity level.
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?
The tool has zero parameters, so the description does not need to explain parameter syntax or meaning. The baseline of 4 applies per the rubric for parameterless tools, and no parameter-related gaps exist.
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 clearly states it 'List all available vehicles with capacity and base rates.' The verb 'List' plus the resource 'vehicles' and specific attributes clearly distinguish it from sibling tools like book_ride, get_quote, and resolve_flight.
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?
The description explicitly says 'Use this to help the customer choose the right vehicle for their trip,' providing clear when-to-use context. It does not explicitly mention alternatives to avoid, but the sibling tools are all different operations, making the intended use unambiguous.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
resolve_flightARead-onlyInspect
Resolve a flight number to its airports, terminals, scheduled times, and status. Codeshares are resolved automatically (e.g. DL8742 → operated by Air France as AF9): the response then carries codeshare:true, marketing_flight and operating_flight — record/track the OPERATING flight. 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).
| Name | Required | Description | Default |
|---|---|---|---|
| date | Yes | Date in YYYY-MM-DD (NOT dd/mm/yyyy). This is the arrival date for pickups, departure date for dropoffs. | |
| direction | No | 'arrival' (default) when picking the passenger up at an airport, 'departure' when dropping off for a flight. | arrival |
| flight_number | Yes | Flight number in any format: 'AF007', 'AF 007', 'af-7', 'AFR007'. Server normalizes. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the readOnlyHint/openWorldHint annotations, the description discloses substantial behavior not visible in structured data: automatic codeshare resolution with the marketing_flight/operating_flight distinction and the instruction to track the OPERATING flight, tolerant input normalization with concrete examples, and the array return shape with cardinality behavior ('usually 1 when direction is set'). No contradiction with the annotations exists; 'resolve' is consistent with readOnlyHint=true.
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?
The description is dense — roughly five distinct pieces of information across four sentences — but every sentence earns its place: purpose, codeshare behavior, usage routing, input tolerance, return shape. It is front-loaded with the core function before edge-case behaviors, though the codeshare segment could arguably be trimmed for brevity.
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 present, the description correctly takes on the burden of explaining the return value: array of matching operations, the codeshare:true shape, and the operating_flight field. It also covers date/direction semantics relevant for correct pickups and dropoffs. For a read-only resolver with three well-documented params, nothing an agent needs to call it correctly is missing.
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 flight_number format tolerance, the YYYY-MM-DD date requirement with its dd/mm/yyyy warning, and the direction enum/default. The description adds contextual rationale (pickup/dropoff semantics for date and direction) but does not reveal anything about the parameters themselves beyond what the schema provides, so the baseline of 3 is appropriate.
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 first sentence names a specific verb and resource ('Resolve a flight number') and lists the concrete outputs (airports, terminals, scheduled times, status). It clearly differentiates from sibling resolvers like resolve_train and resolve_location while sharing the resolve_* naming pattern.
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?
Explicitly states when to invoke it: 'Use BEFORE book_ride whenever the customer provides a flight number', naming the downstream sibling and the motivating reason (correct pickup time and terminal). The airline/airport domain context is unambiguous, leaving no ambiguity about when this prevents errors.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
resolve_locationARead-onlyInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| query | Yes | 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 | No | 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. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and openWorldHint=true, so the safety profile is covered. The description adds valuable context: it returns up to 5 candidates, includes place_id/address/type hint, and calls out that include_coords triggers an extra API call only when needed. This goes beyond the annotations without contradicting them.
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?
The description is a single dense paragraph that front-loads the purpose and includes concrete examples ('CDG', 'Le Bristol', 'Gare du Nord'), while covering usage guidance, output shape, and option behavior without wasted words.
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 adequately explains return values (up to 5 candidates with place_id, address, type hint, optional coordinates) and the optional coords behavior. It lacks edge-case handling like no-match results, but for this tool's scope it is substantially complete.
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 the parameters are fully documented in the schema with examples and default behavior. The description reinforces the query format and the extra-API-call implication of include_coords, but it does not add substantial new parameter-level meaning beyond what the schema already 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?
The description uses a specific verb ('Resolve') and resource ('free-text location... to a canonical address + coordinates'), and clearly differentiates from sibling tools like resolve_flight and resolve_train by focusing on geocoding for bookings. It explicitly lists concrete inputs (city, airport, hotel, station, full address) and outputs, making its purpose unambiguous.
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 explicitly advises 'Use this BEFORE get_quote when the customer gives a fuzzy pickup/drop-off', which provides clear situational guidance. It does not explicitly contrast with resolve_flight/resolve_train, but the tool names and context make those distinctions implicit, so it falls just short of a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
resolve_trainARead-onlyInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| date | Yes | Travel date in YYYY-MM-DD. | |
| train_number | Yes | Train number, digits only or with prefix: '9211', 'TGV 6503', 'Eurostar 9031'. Server normalizes. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already set readOnlyHint=true and openWorldHint=true, lowering the burden. The description adds useful behavioral context: it uses the official SNCF API, covers a wide range of train types, and explicitly states what cannot be looked up (PNRs, agency refs). This goes beyond the annotations without contradicting them.
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?
Three sentences, front-loaded with the core function. The content is dense and informative, with no filler. Slightly verbose due to the detailed train coverage and exclusions, but every sentence earns its place.
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?
Given no output schema, the description adequately notes it returns 'route, stations and scheduled times'. It covers usage scenarios, exclusions, coverage, and what not to do, making it fully self-contained for an agent to decide when and how to invoke the tool.
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% for both parameters, so baseline is 3. The description adds meaningful semantics by explaining train number formats with examples, emphasizing digits-only with optional prefixes, and clarifying that 6-char codes and long refs are not valid inputs — enriching the schema description.
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 clearly states the verb+resource: 'Resolve a TRAIN NUMBER to its route, stations and scheduled times'. It is specific to train numbers and distinguishes itself from siblings like resolve_flight and resolve_location by covering rail travel and explicitly enumerating train operators.
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 explicit usage context: use when a customer books a station pickup/drop-off or Meet & Greet and gives a train number to verify times. It also gives clear exclusions by identifying PNR and agency booking references as invalid, directing the agent to extract info from the customer's confirmation instead.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
send_driver_contactAInspect
Email the booking's client their assigned driver's first name + phone. Pass email if you already have the client's address (e.g. from Zeplan get-booking); otherwise WP looks it up on the booking post. Returns { sent, to (masked), client_phone }. Voice agent use.
| Name | Required | Description | Default |
|---|---|---|---|
| lang | No | Email language. | en |
| No | Client email to send to. If omitted, WP looks it up on the booking post. | ||
| channel | No | Caller channel for observability. | |
| booking_id | Yes | Booking / reservation ID (= the WP payment post ID). | |
| driver_phone | Yes | Driver's phone number. | |
| driver_first_name | Yes | Driver's FIRST NAME only (never last name/company). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate readOnlyHint=false and destructiveHint=false. The description adds valuable behavioral context: that this is a side-effectful email send, the email lookup fallback to WP, and the return shape { sent, to (masked), client_phone }. This goes beyond what annotations provide.
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?
Three compact sentences, front-loaded with the main purpose, followed by conditional usage, return value, and audience. No wasted words; each sentence earns its place.
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?
The description is complete for a moderate-complexity tool with 6 params and no output schema. It explains the action, the email fallback, the return format, and the intended voice-agent context. It relies on schema for individual param details, which is acceptable.
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 each parameter has a description. The tool description adds meaning especially for `email`, explaining when to supply it and when it is auto-looked-up. It also clarifies that `driver_first_name` should be first name only (echoed from schema). This is useful beyond 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 explicitly states 'Email the booking's client their assigned driver's first name + phone', which is a specific verb+resource+scope. It distinguishes this tool from sibling tools (none of which send emails) and adds a clear use-case note ('Voice agent use').
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 provides clear conditional guidance: pass `email` if you already have the client's address (e.g., from Zeplan get-booking), otherwise WP looks it up on the booking post. It doesn't explicitly state when not to use the tool, but the context and sibling list make the usage scenario clear.
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
book_meetgreet1 field changed- changed
Input schema / properties / transfer / properties / transfer_pickup_time / descriptionPrevious value: -"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)."New value: +"HH:MM — for an ARRIVAL: the scheduled landing time, same as the greeter time (pickup_time); the chauffeur waits for the greeter to bring the client out (waiting included). For a DEPARTURE: the car pickup time at the client's address, before the greeter time at the airport."
1 tool update
- Changed
book_meetgreet4 fields changed- changed
Input schema / properties / lead_time_override / descriptionPrevious value: -"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."New value: +"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. Hard 90-minute floor." - changed
Input schema / properties / location / descriptionPrevious value: -"M&G location. cdg/orly = airport, gare_du_nord/gare_de_lyon = train station."New value: +"M&G location. cdg/orly = airport, gare_de_lyon = train station. Gare du Nord is no longer available." - changed
Input schema / properties / location / enumPrevious value: -[ - "cdg", - "orly", - "gare_du_nord", - "gare_de_lyon" -]New value: +[ + "cdg", + "orly", + "gare_de_lyon" +] - changed
Input schema / properties / train_pnr / descriptionPrevious value: -"Eurostar / TGV reservation reference (PNR). Required when location is gare_du_nord or gare_de_lyon."New value: +"TGV reservation reference (PNR). Required when location is gare_de_lyon."
1 tool update
- Changed
book_meetgreet1 field changed- added
Input schema / properties / lead_time_overrideAdded value: +{ + "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.", + "type": "boolean" +}
1 tool update
- Added
resolve_train
1 tool update
- Added
get_cancellation_policy
1 tool update
- Changed
send_driver_contact1 field changed- added
Input schema / properties / emailAdded value: +{ + "description": "Client email to send to. If omitted, WP looks it up on the booking post.", + "type": "string" +}
1 tool update
- Added
send_driver_contact
1 tool update
- Changed
book_meetgreet1 field changed- changed
Input schema / properties / service_type / descriptionPrevious value: -"arrival (pickup at airport/station), departure (drop-off + greeter for check-in), connection (transit)."New value: +"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)."
1 tool update
- Added
book_meetgreet
6 tool updates
- First observed
book_ride - First observed
get_quote - First observed
get_service_info - First observed
get_vehicles - First observed
resolve_flight - First observed
resolve_location
Related MCP Connectors
Private chauffeured transport in Los Angeles. Price any trip at a fixed all-in rate, no account.
Public chauffeur prices, policy and consent-led offers for travel bookers and AI assistants.
Book trip logistics in chat: cars, transfers, eSIM, luggage storage, tours & flight compensation.
- resadockOAuthcom.resadock
Search and book local services in France: real availability, quotes, consented one-tap bookings.
Related MCP Servers
- AlicenseAqualityDmaintenanceEnables 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
- 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
- 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 gradedqualityDmaintenanceProvides real-time access to Paris public transport data (métro, RER, bus, tram, Transilien) including live departure times and traffic disruptions through the IDFM PRIM API.2MIT
Glama MCP Gateway
Add one secure layer between your agents and this server.