# Samuelz Chauffeur Booking

> Public chauffeur prices, policy and consent-led offers for travel bookers and AI assistants.

- name: io.github.samuelzcom/chauffeur-booking
- version: 1.0.0
- connection class: R0 (autonomous)
- trust: 79/100 flags: no-repository
- quality: 79/100 (good)
- owner: not claimed
- descriptor: https://api.protogrid.dev/v1/servers/io.github.samuelzcom%2Fchauffeur-booking
- tools: https://api.protogrid.dev/v1/servers/io.github.samuelzcom%2Fchauffeur-booking/tools

**An agent can connect right now, no human step.** Remote endpoint, no authentication, reachable on the last probe.

## Connection (mcpServers)

```json
{
  "mcpServers": {
    "chauffeur-booking": {
      "type": "http",
      "url": "https://platform-api.samuelz.com/api/v1/mcp/chauffeur/samuelz-chauffeur"
    }
  }
}
```


## Trust

- hygiene: 80
- liveness: 98
- freshness: 100
- provenance: 45
- drivers: +website +reachable +uptime-95% +updated-29d-ago -no-repository
- Derived from observable signals (official registry feed and our own credential-free probes); no code audit performed.

## Quality 79/100 (good)

### protocol: 88 (weight 25)

- pass `protocol.modern`: supports 2026-07-28 (server/discover)
- pass `protocol.stateless`: answers without a session
- pass `protocol.transport`: streamable HTTP
- warn `protocol.list_ttl`: tools/list declares ttlMs 0, so clients re-fetch it on every use

### authorization: n/a (weight 15)

- n/a `auth.prm`, `auth.as_metadata`, `auth.cimd`: no remote uses OAuth
- n/a `auth.secret_in_url`: no templated URL

### tool hygiene: 100 (weight 30)

- pass `tools.descriptions`: every tool has a description
- pass `tools.description_length`: descriptions are concise
- pass `tools.schemas`: every tool has an object input schema
- pass `tools.annotations`: 5 of 5 tools declare readOnlyHint or destructiveHint
- pass `tools.directory_hints`: every tool declares readOnlyHint, destructiveHint, idempotentHint and openWorldHint
- pass `tools.token_cost`: about 2,434 tokens to load every tool
- pass `tools.api_dump`: tools are not a one-to-one API dump

### stability: 25 (weight 15)

- warn `stability.changes`: 50 tool changes in 30 days
- fail `stability.rug_pull`: 22 tools kept their name but changed most of their description in 30 days; review before trusting them

### dependencies: n/a (weight 15)

- n/a `deps.known_vulns`, `deps.mcp_sdk_version`, `deps.resolvable`: no npm or PyPI package

- tools: 5, about 2,434 tokens to load them all
- tool set hash: 2d35ab14d109b9c563ff35aa40a92976
- tools last changed: 2026-10-17T23:43:09.773Z
- badge: [![protogrid quality](https://protogrid.dev/badge/io.github.samuelzcom/chauffeur-booking.svg)](https://protogrid.dev/servers/io.github.samuelzcom/chauffeur-booking)
- Checks run on what our credential-free, read-only probes observe; tools are never called and no code audit is performed.

### Tool changes

- 2026-10-17 `get_offer_status` changed (description, inputSchema, outputSchema) **meaning changed**
  - before: Recover the stored outcome of exactly one prepare_offer submission. Choose this for “did my original offer submission finish?” or recovery after checkout, using its original submissionId/resumeToken. It cannot quote a new ride, create another offer, read policy/capabilities, or resume an amendment. get_booking_status uses separate OAuth selection to read an existing booking. Both values belong to one original intake; mixing submissions cannot recover an intent. The pair is neither supplier offerKey nor a login grant. Unchanged retries preserve language and extend neither the 24-hour proof lifetime nor the separate offer expiry. prepared returns private checkout/review links; available returns booking identifiers and recorded outcome. Wait retryAfterSeconds on pending. Inspect ambiguous/conflict before retrying preparation. not_found denies proof access; unavailable leaves recovery unverified and says nothing about vehicle availability. No booking action occurs.
  - after: Read the stored result of one prepare_offer submission for Samuelz Chauffeur using its original submissionId and resumeToken. It cannot price a new request. Wait on pending. not_found denies the proof. No booking action occurs.
- 2026-10-17 `prepare_offer` changed (title, description, inputSchema, outputSchema) **meaning changed**
  - before: Create one unpaid reservation and binding offer for an explicitly requested new ride. Price-only questions use quote_ride; amendments use prepare_booking_change. Preparation needs no account; private booking access requires separate authorization. Keep one intent: - Generate submissionId/resumeToken once and retain the pair with the original ride, contact, locale, offerKey and supplied partner capability. - A different recipient or language conflicts with the intent; it does not update the offer. Contact identifies a reachable recipient, not a private booking grant. Complete or recover: - prepared: open the private checkoutUrl. The customer reviews amount, expiry and full terms, then explicitly confirms and pays there; this call neither charges nor confirms. - pending/rate_limited: wait retryAfterSeconds, then recover with get_offer_status and the original pair. - ambiguous/conflict: inspect the original submission; never replace its pair to bypass it. - available: use returned booking IDs/reference only within the separately authorized booking lifecycle. get_offer_status reads this submission's subsequent recorded outcome. The resume proof lasts 24 hours from first claimed intake; retries extend neither it nor offer.expiresAt. Keep links and proof private.
  - after: Create one unpaid offer for Samuelz Chauffeur only after the customer explicitly asks and offerRequested is true. Call get_service_options for the current service areas. Use quote_ride for a price question and get_offer_status to recover this submission. Keep one submissionId and resumeToken. This call does not charge or confirm.
- 2026-10-17 `quote_ride` changed (title, description, inputSchema, outputSchema) **meaning changed**
  - before: Preview price for complete ride facts without contact details. Choose this for “what would this new ride cost?”, prepare_offer for “create the requested new offer”, and prepare_booking_change for review of an existing booking's amendment. get_offer_status only recovers an already submitted intent and cannot calculate a new price. Use the same offerKey and its get_service_options timeZone. Return service needs a later return pickup; hourly service needs one_way plus duration. Vehicle preference and specialRequests share a 500-character combined note limit including label/separator: separately valid values can exceed it together. Preserve volunteered requirements; ask rather than truncate. quoted returns price, tax and inclusions by leg without reserving capacity. Route/pricing reads consume quote admission; prices may change. Revalidate before preparation. Wait retryAfterSeconds on rate_limited; follow review_required guidance. No offer, reservation, charge or message is created.
  - after: Preview the price for a complete request inside a published service area for Samuelz Chauffeur. Call get_service_options for the current service areas. Use after get_service_options. Related tools: get_service_options or get_customer_policy or prepare_offer or get_offer_status. outside_service_area means the request is not served and has no price. quoted is a preview, not a reservation. No contact is required.
- 2026-10-17 `get_customer_policy` changed (description, inputSchema, outputSchema) **meaning changed**
  - before: Read current account/guest eligibility and pickup lead-time rules for a new offer. Call after get_service_options and before quote_ride or prepare_offer. This tool answers purchase eligibility, not price, capacity, or authority to amend/cancel an existing booking. Selection and timing: - Retain the selected offerKey across the workflow; locale changes language without changing location. A different offerKey requires a fresh policy read. - Interpret intended pickup in returned timeZone; compare the interval from now with terms.minimumLeadTimeMinutes. A fictional 120-minute minimum excludes pickup 90 minutes away without implying vehicle unavailability. available returns account requirements, guest-booking rules, lead-time terms, timeZone and observedAt. observedAt dates this policy read, not an expiry or capacity hold. Revalidate before preparation; unavailable leaves eligibility unverified. The customer reviews bound offer terms and confirms in checkout; confirmation requires provider-confirmed full payment. Reading policy creates no booking.
  - after: Read published lead time and booking terms for Samuelz Chauffeur. Call get_service_options for the current service areas. Call after get_service_options, then use get_service_options or quote_ride or prepare_offer or get_offer_status. Interpret times in the returned time zone. This read creates no booking.
- 2026-10-17 `get_service_options` changed (title, description, inputSchema, outputSchema) **meaning changed**
  - before: Read supported ride services, required facts and the selected service location's timeZone. Call before collecting a new ride; follow with get_customer_policy for eligibility, quote_ride for price, then prepare_offer only for an explicitly requested offer. Omitting offerKey selects the published default. Otherwise retain the same known published key across policy, pricing and preparation; a key must still match the current publication/catalog. locale selects translated labels and links independently: changing de to en keeps the location, whereas changing offerKey requires rereading timeZone before interpreting a clock time. available reports capabilities and collection requirements, not vehicle inventory or held capacity. This uncached read consumes no quote admission; reread before quoting. Correct invalid_request facts; unavailable leaves service scope unverified.
  - after: Read published services, service areas, time zones and languages for Samuelz Chauffeur. Call get_service_options for the current service areas. Then use get_customer_policy or quote_ride or prepare_offer or get_offer_status. It confirms neither price nor availability. Pass locale when a published language needs it.
- 2026-10-09 `get_offer_status` changed (description)
  - before: Resume exactly one prepare_offer submission using its original submissionId and private resumeToken. Use this while the submission is pending or after the customer reviews checkout; get_booking_status reads an already selected OAuth booking instead. The pair identifies the original intent, not a supplier offerKey or a customer login. Do not combine credentials from different submissions. Unchanged retries preserve the original language and do not renew the 24-hour resume-proof lifetime or offer expiry. prepared supplies review links; available supplies that booking's identifiers and recorded outcome. Wait retryAfterSeconds for pending. On ambiguous or conflict inspect the original intent before retrying preparation. not_found denies proof access; unavailable is not vehicle-availability evidence. No booking action occurs.
  - after: Recover the stored outcome of exactly one prepare_offer submission. Choose this for “did my original offer submission finish?” or recovery after checkout, using its original submissionId/resumeToken. It cannot quote a new ride, create another offer, read policy/capabilities, or resume an amendment. get_booking_status uses separate OAuth selection to read an existing booking. Both values belong to one original intake; mixing submissions cannot recover an intent. The pair is neither supplier offerKey nor a login grant. Unchanged retries preserve language and extend neither the 24-hour proof lifetime nor the separate offer expiry. prepared returns private checkout/review links; available returns booking identifiers and recorded outcome. Wait retryAfterSeconds on pending. Inspect ambiguous/conflict before retrying preparation. not_found denies proof access; unavailable leaves recovery unverified and says nothing about vehicle availability. No booking action occurs.
- 2026-10-09 `prepare_offer` changed (description, inputSchema)
  - before: Prepare one unpaid reservation and binding offer for an eligible new ride only after the customer explicitly requests it. Use quote_ride for price alone, or prepare_booking_change for an existing booking. Public offer preparation needs no account; private booking access remains separately authorized. Pair caller-generated submissionId and private resumeToken with one unchanged ride, contact, locale, service selection and supplied partner capability. Changing language or recipient conflicts; it does not edit the original offer. Keep that pair for retries and get_offer_status; never create another pair merely to escape pending, ambiguous or conflict. Contact supplies a reachable recipient, not booking-access authority. Review and explicitly confirm the bound offer via checkoutUrl, then use get_offer_status with the original pair to read the outcome. Wait retryAfterSeconds when pending or rate_limited. The resume proof lasts 24 hours from first claimed intake; offer expiry is separate. prepared returns review links; available supplies this booking's identifiers for its customer-authorized lifecycle. This call does not charge or confirm a booking.
  - after: Create one unpaid reservation and binding offer for an explicitly requested new ride. Price-only questions use quote_ride; amendments use prepare_booking_change. Preparation needs no account; private booking access requires separate authorization. Keep one intent: - Generate submissionId/resumeToken once and retain the pair with the original ride, contact, locale, offerKey and supplied partner capability. - A different recipient or language conflicts with the intent; it does not update the offer. Contact identifies a reachable recipient, not a private booking grant. Complete or recover: - prepared: open the private checkoutUrl. The customer reviews amount, expiry and full terms, then explicitly confirms and pays there; this call neither charges nor confirms. - pending/rate_limited: wait retryAfterSeconds, then recover with get_offer_status and the original pair. - ambiguous/conflict: inspect the original submission; never replace its pair to bypass it. - available: use returned booking IDs/reference only within the separately authorized booking lifecycle. get_offer_status reads this submission's subsequent recorded outcome. The resume proof lasts 24 hours from first claimed intake; retries extend neither it nor offer.expiresAt. Keep links and proof private.
- 2026-10-09 `quote_ride` changed (description, inputSchema)
  - before: Calculate a price preview for complete ride facts without contact details. Use for pricing; prepare_offer creates an explicitly requested new offer, while prepare_booking_change reviews an existing booking's amendment. Keep ride times in the timeZone returned for the same offerKey. Return service needs its later return pickup; hourly service needs one_way and duration. Vehicle preference and specialRequests share a 500-character combined note limit, including the preference label and separator: individually valid fields can together exceed it. Keep volunteered requirements intact; ask for clarification rather than silently truncate them. quoted returns a price/tax/inclusion breakdown by leg, not reserved capacity. Route/pricing reads consume quote admission and repeated calls may differ. Revalidate before an offer. Wait retryAfterSeconds on rate_limited; follow review_required guidance. No offer, reservation, charge or message is created.
  - after: Preview price for complete ride facts without contact details. Choose this for “what would this new ride cost?”, prepare_offer for “create the requested new offer”, and prepare_booking_change for review of an existing booking's amendment. get_offer_status only recovers an already submitted intent and cannot calculate a new price. Use the same offerKey and its get_service_options timeZone. Return service needs a later return pickup; hourly service needs one_way plus duration. Vehicle preference and specialRequests share a 500-character combined note limit including label/separator: separately valid values can exceed it together. Preserve volunteered requirements; ask rather than truncate. quoted returns price, tax and inclusions by leg without reserving capacity. Route/pricing reads consume quote admission; prices may change. Revalidate before preparation. Wait retryAfterSeconds on rate_limited; follow review_required guidance. No offer, reservation, charge or message is created.
- 2026-10-09 `get_customer_policy` changed (description) **meaning changed**
  - before: Read current account, guest-booking and pickup-lead-time rules before a new offer. Use get_service_options for service scope or quote_ride for pricing; this policy cannot authorize booking changes or cancellation. Keep offerKey tied to the intended service location. Locale changes language, not geography: changing locale retains that location; changing offerKey requires reading its rules again. Evaluate local pickup against minimumLeadTimeMinutes using the returned timeZone. observedAt records the current policy observation, not expiry or reserved capacity. Revalidate before prepare_offer. On unavailable, stop eligibility assumptions; the customer reviews complete bound terms on the resulting offer page before confirmation.
  - after: Read current account/guest eligibility and pickup lead-time rules for a new offer. Call after get_service_options and before quote_ride or prepare_offer. This tool answers purchase eligibility, not price, capacity, or authority to amend/cancel an existing booking. Selection and timing: - Retain the selected offerKey across the workflow; locale changes language without changing location. A different offerKey requires a fresh policy read. - Interpret intended pickup in returned timeZone; compare the interval from now with terms.minimumLeadTimeMinutes. A fictional 120-minute minimum excludes pickup 90 minutes away without implying vehicle unavailability. available returns account requirements, guest-booking rules, lead-time terms, timeZone and observedAt. observedAt dates this policy read, not an expiry or capacity hold. Revalidate before preparation; unavailable leaves eligibility unverified. The customer reviews bound offer terms and confirms in checkout; confirmation requires provider-confirmed full payment. Reading policy creates no booking.
- 2026-10-09 `get_service_options` changed (description) **meaning changed**
  - before: Read supported services, required ride facts and the service-location time zone before collecting a new ride. Use get_customer_policy for purchase rules, quote_ride for price, or prepare_offer for an explicitly requested offer. Language and location are independent: locale=de does not select Germany, and locale=en does not move the service elsewhere. Omit offerKey for the published default; otherwise use a known published selection and keep it across policy, quote and offer. Changing location requires reading its timeZone before interpreting pickup times. This uncached read consumes no quote admission. available describes supported requests, not reserved vehicles; re-read before quoting. Correct invalid_request facts. unavailable leaves service scope unverified.
  - after: Read supported ride services, required facts and the selected service location's timeZone. Call before collecting a new ride; follow with get_customer_policy for eligibility, quote_ride for price, then prepare_offer only for an explicitly requested offer. Omitting offerKey selects the published default. Otherwise retain the same known published key across policy, pricing and preparation; a key must still match the current publication/catalog. locale selects translated labels and links independently: changing de to en keeps the location, whereas changing offerKey requires rereading timeZone before interpreting a clock time. available reports capabilities and collection requirements, not vehicle inventory or held capacity. This uncached read consumes no quote admission; reread before quoting. Correct invalid_request facts; unavailable leaves service scope unverified.

Full history: https://api.protogrid.dev/v1/servers/io.github.samuelzcom%2Fchauffeur-booking/changes

## Remotes

- https://platform-api.samuelz.com/api/v1/mcp/chauffeur/samuelz-chauffeur (streamable-http, auth none, reachable true, uptime30d 0.95454544)

## Packages

_none_

## Tools (5)

- `get_customer_policy`: Read published lead time and booking terms for Samuelz Chauffeur. Call get_service_options for the current service areas. Call after get_service_options, then use get_service_options or quote_ride or prepare_offer or get_offer_status. Interpret times in the returned time zone. This read creates no booking.
- `get_offer_status`: Read the stored result of one prepare_offer submission for Samuelz Chauffeur using its original submissionId and resumeToken. It cannot price a new request. Wait on pending. not_found denies the proof. No booking action occurs.
- `get_service_options`: Read published services, service areas, time zones and languages for Samuelz Chauffeur. Call get_service_options for the current service areas. Then use get_customer_policy or quote_ride or prepare_offer or get_offer_status. It confirms neither price nor availability. Pass locale when a published language needs it.
- `prepare_offer`: Create one unpaid offer for Samuelz Chauffeur only after the customer explicitly asks and offerRequested is true. Call get_service_options for the current service areas. Use quote_ride for a price question and get_offer_status to recover this submission. Keep one submissionId and resumeToken. This call does not charge or confirm.
- `quote_ride`: Preview the price for a complete request inside a published service area for Samuelz Chauffeur. Call get_service_options for the current service areas. Use after get_service_options. Related tools: get_service_options or get_customer_policy or prepare_offer or get_offer_status. outside_service_area means the request is not served and has no price. quoted is a preview, not a reservation. No contact is required.
