What the assistant can do
Twenty-six tools. Twenty answer a question; six change something. They were chosen because operators ask for them, not by turning every function in the product into a tool — a model does better against a short, intent-shaped list than a long mechanical one.
Not connected yet?
Start at Connect an assistant. Ten minutes, once.
Fleet
| Ask | Tool |
|---|---|
| How big is the fleet, and how busy is it? | fleet_overview |
| What can I rent out next weekend? | search_vehicles |
| What needs servicing soon? | vehicles_due_for_service |
Give search_vehicles a date range and it says which cars are actually free for it. Without dates there is no availability answer, because “available” with no dates means nothing.
Bookings
| Ask | Tool |
|---|---|
| What's happening today? | todays_operations |
| How many rentals are running? | booking_overview |
| Tell me everything about this booking | get_booking |
| Who's collecting a car this week? | upcoming_pickups |
| What's coming back this week? | ending_rentals |
| How did July compare with June? | bookings_in_period |
| Has this customer actually paid? | booking_payments |
Customers
| Ask | Tool |
|---|---|
| Find this customer | search_customers |
| What have they rented from us before? | customer_history |
Customers reach the assistant as a name and a set of figures. Phone numbers, email addresses, Emirates ID, passport and licence numbers are removed before anything leaves the server — see below.
Money
| Ask | Tool |
|---|---|
| How are we doing? | finance_overview |
| Who owes us money, and how late? | who_owes_us |
| How much is out in invoices? | invoice_overview |
| Show me the overdue invoices | list_invoices |
| Do the books have anything unresolved? | money_health |
money_health reports the nightly integrity checks — cash recorded against a rental but not its invoice, a month billed twice, a deposit the books claim but cannot evidence. Zero means they found nothing. Null means they have not run for this workspace yet, which is not the same thing.
Catalogue
| Ask | Tool |
|---|---|
| What extras do we offer, at what price? | list_addons |
| What can we charge for on a return? | list_charge_catalog |
| What's our VAT rate and payment term? | get_invoice_settings |
What it can change
Only with a read-write key, and only reference data — the fleet and the price list. Say it in your own words; these are the tools behind it.
| Say | Tool |
|---|---|
| "Add the new Cayenne, plate M/12345, 1 800 a day" | add_vehicle |
| "Put the G63's monthly rate up to 22 000" | update_vehicle |
| "The Urus is going in for service" | set_vehicle_status |
| "Add a child seat at 50 a day" | upsert_addon |
| "We charge 150 for interior cleaning now" | upsert_charge_item |
| "Change our payment term to 14 days" | update_invoice_settings |
Amounts are in fils
AED × 100, everywhere except upsert_charge_item, whose suggestedAmountAed is whole dirhams — as its name says. A daily rate of AED 450 is 45000. Sending 450 would price the car at four and a half dirhams a day.
Moving a vehicle between states goes through the same rules the app uses and is written into its history. A car out on a live rental cannot be marked available, and there is no override argument to make that refusal go away — that is what it is for.
Where it stops, and why
It cannot issue an invoice, take a payment, or message a customer
Not with any key. A UAE tax invoice number is burned the moment it is allocated and the sequence has to stay gapless; a card charge and a WhatsApp message reach the outside world and cannot be recalled. Ask the assistant to work out what should be billed — then press the button yourself.
It cannot read identity documents
Emirates ID, passport and licence numbers are encrypted and are not reachable through any key. Contact details and identity fields are removed at the server boundary by naming the fields that may pass, rather than the ones that may not — so a column added to the database tomorrow is withheld by default, and a guard fails the build until somebody decides otherwise.
It cannot see another workspace
A key belongs to exactly one. Isolation is enforced by the database itself, on every table, so a query for another workspace’s data returns nothing rather than relying on application code to remember to filter.
Getting good answers
Install the skill next to the connection: npx skills add https://carfleet.ae. The tools say what can be called; the skill says what the answers mean — that money is in fils, that a booking’s day count is not the length of the rental, that a receipt header is a container and must never be added to its own rows. A tool description cannot carry those, and they are the difference between a right answer and a confident wrong one.
The same page in plain text, for an agent to read directly: /docs/mcp.md.