Skip to main content
Glama

Jet Cab AMS: Amsterdam & Schiphol chauffeur

Send a booking request

request_booking
DestructiveIdempotent

Books the quoted ride. Call ONLY after the customer has seen the quoted total and deposit and has explicitly approved it and accepted the Terms (https://www.jetcabams.nl/terms.html). Send exactly the same ride fields as the get_quote call plus its unchanged quoteToken and the customer's real contact details. Fixed rides: the customer first gets an email with a Confirm link (valid 24 hours); after the click the driver confirms by email, payment in the car. Tours and custom rides: returns checkoutUrl, a payment link for the 25% prepayment (it opens the SumUp payment page), which the customer must open and pay. Repeating the identical call does not create a second booking.

Tool call template

Replace each placeholder with a value matching the input schema. Only required parameters are included; add optional parameters as needed.

{
  "id": 1,
  "jsonrpc": "2.0",
  "method": "tools/call",
  "params": {
    "arguments": {
      "type": "<type>",
      "car": "<car>",
      "date": "<date>",
      "time": "<time>",
      "passengers": "<passengers>",
      "quoteToken": "<quoteToken>",
      "name": "<name>",
      "email": "<email>",
      "phone": "<phone>",
      "acceptedTerms": "<acceptedTerms>"
    },
    "name": "request_booking"
  }
}

Input Schema

NameRequiredDescriptionDefault
carYesE-Class max 4, S-Class max 2, V-Class max 7 passengers.
dateYesLocal date in Europe/Amsterdam.
langNo
nameYes
timeYesLocal time in Europe/Amsterdam, between 04:00 and 20:00.
typeYes
emailYes
notesNo
phoneYesCustomer's phone number, with country code (for example +31 6 1234 5678).
flightNo
pickupNoRequired for custom rides and tours: agreed pickup address or hotel, preserved in review and confirmations.
addressNoFixed routes only: the non-airport pickup/drop-off address. The fare follows the route zone of the address (postcode first, then town name). An address whose Dutch postcode is in no fixed-route zone is refused with error code address_zone; book it as a custom ride.
dropoffNoRequired for custom rides: drop-off address.
routeIdNoFixed routes only; ids from /data/rates.json. The server reprices to the route the address belongs to.
tourIdsNoTours only; ids from /data/tours.json.
directionNoFixed routes only: to or from Schiphol.
meetGreetNoOptional €25 arrivals-area name card; only for direction=from.
driverNameNo
passengersYes
quoteTokenYesSigned token returned by POST /api/quote. Send unchanged only after the customer approves that quote's total and deposit. It binds the normalized journey, vehicle, passengers, options, fare, rules version and 15-minute expiry. HTTP 409 reviewRequired=true means obtain a new quote and renewed customer approval before retrying. Never supply your own price.
returnTripNoFixed rides only. Books the return leg as well: the opposite direction between the same address and Schiphol, with the same vehicle, passengers and luggage. It is priced as a second ride (plus the name-card fee when meetGreet is set on a return that starts at Schiphol). It must be at least one hour after the first ride, between 04:00 and 20:00, and not on a blocked date. Error codes: retour_type, retour, retour_datetime, retour_hours, retour_date_blocked, retour_order. The booking is stored as two linked bookings: the request id and `<id>-ret`.
luggageLargeNoLarge check-in suitcases. E-Class and S-Class take at most 2; more needs the V-Class (error code luggage).
luggageSmallNoPieces of hand luggage. E-Class and S-Class take at most 2; more needs the V-Class (error code luggage).
acceptedTermsYesMust be an explicit act by the customer after reading the Terms & Conditions. Agents must not set this on a customer's behalf without their consent.
ticketServiceNoTours only: attraction ticket purchase assistance, requires 28 days' notice.
additionalRidesNoOptional: more rides in the same request (up to 5 in total), each with its own ride fields and the quoteToken of its own get_quote call. Tours and custom rides in the request share one 25% prepayment link; fixed rides stay pay-in-car requests.

Schema Changelog

Changes observed during successful MCP inspections.

  1. First observed

TDQS

A4.6/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations only declare that this is destructive, open-world and idempotent; the description adds the actual post-call behavior: a 24-hour confirmation email plus driver confirmation for fixed rides with payment in the car, versus a checkoutUrl SumUp 25% prepayment link for tours and custom rides. That is exactly the kind of consequence disclosure a write tool needs and cannot be inferred from the hints.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The single most important constraint (do not call before explicit approval of the total and deposit) is front-loaded in the second sentence, followed by the field-reuse rule and then the two type-specific flows. Every sentence carries a distinct operational fact with no restatement of the name or annotations.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 26-parameter mutation with no output schema, the description covers the gating, the input-reuse contract, both booking flows, the returned checkoutUrl, and idempotency. It doesn't describe what comes back for the fixed-ride path (request id / email-sent confirmation), which is the one gap an agent might stumble on.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

With 26 parameters and 69% schema coverage, the schema already documents most fields, so the description correctly adds only the cross-cutting rules the schema can't: send the ride fields unchanged from get_quote, keep the quoteToken unchanged, and supply the customer's real contact details. It says nothing about luggage, returnTrip, or additionalRides semantics, but those are well covered in the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

"Books the quoted ride" names a specific verb and resource, and the description immediately ties it to the get_quote sibling ("Send exactly the same ride fields as the get_quote call"), so an agent knows this is the commit step that follows a quote rather than a new lookup.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

"Call ONLY after the customer has seen the quoted total and deposit and has explicitly approved it and accepted the Terms" is an explicit, unambiguous precondition, and the get_quote dependency is stated. It stops short of naming when to use change_booking or cancel_booking instead of re-requesting, so the alternatives side is only partially covered.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.

Resources