Bota · Developers

Bota MCP server reference

A connector to rent a car directly from the car rental companies that use Bota: real availability and prices set by each company, and the booking created in the company's own reservation system.

Connection

Endpoint
https://mcp.bota-chat.com/mcp
Transport
Streamable HTTP, JSON-RPC 2.0 over POST, stateless
Authentication
None. No account or API key needed
Protocol versions
2025-06-18, 2025-03-26, 2024-11-05

Add it as a custom connector by URL:

  • Claude: Customize › Connectors › Add custom connector.
  • ChatGPT: turn on developer mode and create an app with this URL.
  • Mistral Le Chat: Connectors › Add Connector › Custom MCP Connector, with no authentication. On Team and Enterprise plans an admin adds it for the organization.

Or in any MCP client:

{
  "mcpServers": {
    "bota": { "url": "https://mcp.bota-chat.com/mcp" }
  }
}

Flow and server instructions

The server sends these instructions on initialize:

Bota lets you rent a car directly from the car rental companies that use Bota, at the price each company sets (the same as its own web chat), with the booking created in the company's own system. Flow: list_rental_companies → list_offices → search_availability → select_offer → select_extras (if offered) → provide_customer_details → confirm_booking. Ask the main driver's age before searching and the driver's phone number before submitting details; never invent them. Keep the session_id of each company and pass it back on every call. Only submit details once the customer accepted the company's terms, and only confirm a booking or a cancellation after the customer explicitly confirms the summary shown. For questions about requirements, deposit or insurance use ask_company. After booking, get_booking_status and cancel_booking take the booking reference and the customer's email. The demo company is for testing: its bookings are free and fictitious. Machine guide: https://www.bota-chat.com/api/public/provider-api-guide

Tools

Read tools change nothing. Write tools advance a booking session without reserving or charging. Sensitive write tools create or cancel a real reservation: the assistant must get the customer's explicit approval every time.

ToolClassInputsSide effectsReturns
list_rental_companies

Car rental companies that use Bota and rent directly through it. Returns id, name, website, active channels, whether bookings can be completed here (booking_via_agents) and whether it is the demo company.

ReadNoneNone.Companies with id, name, website, active channels, booking_via_agents and whether it is the demo company.
list_offices

Rental offices (pickup/return locations) of a company: name, city, address, opening hours, timezone, coordinates.

Read
  • company_id · string
  • language (optional) · string
None.Offices with name, city, address, opening hours, timezone and coordinates.
search_availability

Search available vehicles with real prices for a company, office and dates. Prices are identical to the company's own web chat (mandatory charges, one-way and time rules included). Returns numbered offers and the session_id of this booking session.

Read
  • company_id · string
  • session_id (optional) · string
  • pickup_office · string
  • return_office (optional) · string
  • pickup_date · string
  • pickup_time (optional) · string
  • return_date · string
  • return_time (optional) · string
  • driver_age · integer
  • promo_code (optional) · string
  • language (optional) · string
Opens a booking session in Bota. Nothing is reserved or charged.Numbered offers with vehicle, total price and currency, and the session_id to pass back.
ask_company

Ask the company a free-text question (requirements, deposit, insurance, documents, opening hours, pickup instructions…). Bota answers in the customer's language with the company's approved information. Read-only: it never starts, changes or completes a booking.

Read
  • company_id · string
  • question · string
  • language (optional) · string
None. Runs in its own session and never starts or changes a booking.The company's answer, in the customer's language, from its approved information.
select_offer

Selects one of the numbered offers of the booking session. Returns the extras available for it, or the driver details the company needs. Only for companies with booking_via_agents=true.

Write
  • company_id · string
  • session_id · string
  • offer_number · integer
  • language (optional) · string
Advances the booking session. Nothing is reserved or charged.The extras available for that offer, or the driver details the company needs.
select_extras

Adds optional extras (child seat, additional driver, coverage…) to the booking in progress by extra id; an empty list continues without extras. Only for companies with booking_via_agents=true.

Write
  • company_id · string
  • session_id · string
  • extras · array
  • language (optional) · string
Advances the booking session. Nothing is reserved or charged.The next step of the booking: the driver details the company needs.
provide_customer_details

Submits the driver's details for the booking in progress and returns the booking summary with its confirmation_token. terms_accepted records that the customer accepted the company's terms and must be true.

Write
  • company_id · string
  • session_id · string
  • first_name · string
  • last_name · string
  • email · string
  • phone (optional) · string
  • notes (optional) · string
  • flight_number (optional) · string
  • references (optional) · object
  • terms_accepted · boolean
  • language (optional) · string
Stores the driver's details in the booking session. Nothing is reserved or charged.The booking summary the customer must approve and its confirmation_token.
confirm_booking

Confirms the summarised booking with its confirmation_token, which proves the customer saw that exact summary. Creates the reservation in the company's reservation system and returns the confirmation code (and a payment link when the company requires prepayment). An on-request booking comes back pending the company's confirmation and without a code yet.

Sensitive write
  • company_id · string
  • session_id · string
  • confirmation_token · string
  • language (optional) · string
Creates the reservation in the rental company's reservation system. Not idempotent.Confirmed: the confirmation code. On-request: pending the company’s confirmation, without a code yet. Prepayment: also the company’s payment link.
get_booking_status

Look up a booking made through Bota: status (confirmed, cancelled…), vehicle, office, dates and total. Needs the booking reference and the email it was made with.

Read
  • company_id · string
  • booking_reference · string
  • email · string
  • language (optional) · string
None.Status (confirmed, pending, cancelled…), vehicle, pickup and return office and time, and total.
cancel_booking

Cancels a booking made through Bota. Without confirm it only returns the booking and whether it can be cancelled; with confirm=true it cancels it. Cancellation fees, if any, follow the company's terms.

Sensitive write
  • company_id · string
  • booking_reference · string
  • email · string
  • confirm (optional) · boolean
  • language (optional) · string
Without confirm: none, it previews the booking and whether it can be cancelled. With confirm=true: cancels the booking in the company's system; fees, if any, follow the company's terms.The preview, or the cancelled booking.

Booking states and payment

  • Quoted: offers from search_availability. Nothing is held.
  • Summarised: provide_customer_details returns the summary and a confirmation_token tied to it. Show it to the customer and confirm only after they approve it.
  • Confirmed (with a confirmation code) or pending (on request, until the company confirms): from confirm_booking. Check it later with get_booking_status.
  • Cancelled: cancel_booking with confirm=true, after showing the preview.
  • Failed: any result with isError: true (see errors). confirm_booking is not idempotent: after an unclear result, do not repeat it blindly.
  • Payment is made to the rental company, at the counter or, when the company requires prepayment, through the payment link returned by confirm_booking. This server never receives card details.

Errors

Tool errors come back as a normal result with isError: true and a JSON body { "error": "<code>", "message": "…" }, sometimes with the company's website. Requests over the per-minute limit get HTTP 429.

CodeMeaning
invalid_argumentsAn argument does not match the input schema. The message names the field; fix it and call again.
invalid_company_idcompany_id is not an id returned by list_rental_companies.
company_not_foundNo company with that id is available through this server.
office_not_foundNo office matches. The error lists the valid office names; use one.
booking_not_enabledThe company quotes but does not take bookings from assistants yet. Share the quote and its website.
terms_not_acceptedterms_accepted was not true. Ask the customer to accept the company's terms first.
booking_not_foundNo booking matches that reference and email. Ask the customer to check both; do not guess.
booking_unavailableThe company's system could not return the booking. Refer the customer to the company.
not_cancellableThe booking cannot be cancelled here; the message says why. Refer the customer to the company.
cancel_failedThe company's system did not accept the cancellation; the booking may still be active.
confirmation_expiredThe confirmation_token is unknown, expired (30 minutes) or from another booking session. Call provide_customer_details again for a fresh summary and token.
confirmation_supersededA newer step of the same session replaced that summary. Confirm only with the latest confirmation_token, once the customer agrees to that summary.
agreement_changedOnly with login: the person's negotiated agreement with this company changed after the quote, so its prices no longer apply. Call search_availability again for current prices.
session_conflictOnly with login: that session_id already belongs to another person of the same company. Start a new session.
references_requiredOnly with login: the company asks for a booking reference (claim or file number, cost center or purchase order, agency reference) that is missing. The message names it; ask the customer and call provide_customer_details again with references.
references_not_requestedOnly with login: references were sent for a company that does not ask this person for any. Omit references.
unknown_referenceOnly with login: a reference the company does not ask for. The message lists the ones it does.
invalid_referencesOnly with login: a reference is not a single line of up to 60 characters.
turn_rejectedBota rejected the request. The message says why.
turn_failedThe step failed on the company or Bota side. Retry once.
daily_quota_exceededThis client, conversation or assistant platform used its daily turns. Do not retry today.
company_quota_exceededThe company used its daily assistant turns. Do not retry today; share its website.
internal_errorUnexpected failure on Bota’s side, not caused by the arguments. Retry once.

Rate limits

  • 60 requests per minute per IP; assistant platforms with published egress IPs share 1,200 per minute per platform.
  • Tools that run a booking step ( search_availability, ask_company, select_offer, select_extras, provide_customer_details, confirm_booking) count as turns: 400 per day per IP, or 200 per conversation and 50,000 per platform for assistant platforms, and 1,000 per day per rental company.

Testing

The company "Demo Bota" is always listed: its bookings run the full flow, are fictitious and are never charged. Do not test with real companies.

Privacy for people using the connector

  • To book, the assistant sends the driver's name, email, phone and, optionally, notes and flight number. Lookups and cancellations use the booking reference and the email it was made with.
  • That data goes to the rental company that makes the booking, which is its controller. Zentia Labs LLC, which operates Bota, processes it on the company's behalf, as for any other Bota channel. The AI assistant processes its user's data on its own account and under its own terms.
  • Bota keeps the conversation of each booking for 90 days from its last message, or the period the rental company sets, and then deletes it. It never receives card details.
  • To access, correct or delete your data, contact the rental company first. You can also write to info@bota-chat.com and we will pass your request to the company and help resolve it.
  • Full details: Bota privacy policy, sub-processors and data deletion.

Terms of use of the connector

  • The rental contract is between you and the rental company, under its own terms and conditions. The assistant must show them and get your acceptance before confirming a booking.
  • Vehicles, availability, prices, deposits and cancellation rules are set by each rental company, and are the same as on its own channels.
  • Bota only passes your request to the rental company and does not charge you anything: you pay the rental company, at the counter or through its payment link. Bota is paid by the rental companies that use it.
  • A booking or cancellation only happens after you approve it. Use the booking reference to check it later.
  • The connector is offered as is, with no guarantee that it will always be available or list every company. Usage limits apply (see rate limits).
  • Support: info@bota-chat.com. Bota's terms of service govern its relationship with the rental companies.

Support: info@bota-chat.com · Machine guide