Connect an AI assistant
Ten minutes, once. After this you can ask your workspace questions in plain language — what's going out today, who owes us money, what can I rent out next weekend — and, with a read-write key, keep the fleet and price list up to date by saying so.
First, get a key
Open Settings → API & MCP in CarFleet
You need to be an owner or admin of the workspace. The screen is at /settings/api.
Choose what the key may do
Read only lets an assistant answer questions and change nothing. Read and write also lets it add and correct vehicles, add-ons, charge types and invoice settings. Neither kind can issue an invoice, take a payment or message a customer.
Start with read only. You can mint a second key later; the choice cannot be widened.
Copy the key immediately
It is shown once and cannot be recovered afterwards — not by you and not by us. If you lose it, revoke it and make another. It looks like cf_live_sk_…
Treat it like a password
Anyone holding this key can read your workspace. Do not paste it into a chat, an email, a screenshot or a public repository. Give it an expiry date if the integration is temporary, and revoke it the moment you suspect it has travelled somewhere it should not have.
Two facts, then pick your assistant
Every client below is the same two things typed into a different box:
Server address
https://carfleet.ae/api/mcp
Authentication
Authorization: Bearer cf_live_sk_…
The transport is Streamable HTTP. There is no OAuth flow — the key IS the credential, which is why every set of instructions below is about getting that one header sent.
Set it up
Two routes — try the first, fall back to the second
Claude can send a fixed header from its own connector dialog, but that field is still being rolled out and may not be in your account yet. If you cannot find it, the config-file route below works today and does not depend on it.
Route A — the connector dialog
Open Settings → Connectors and choose Add custom connector. Paste the server address. If the dialog offers a Request headers section, add one named Authorization with the value Bearer cf_live_sk_… — including the space after Bearer. Claude stores it and will not show it again.
No such section? Nothing is wrong with your key. Use route B.
Route B — the configuration file
Claude Desktop reads claude_desktop_config.json, reachable from Settings → Developer → Edit config. Add the block below, replacing the key, then quit and reopen Claude completely — a window reload is not enough.
{
"mcpServers": {
"carfleet": {
"command": "npx",
"args": [
"-y",
"mcp-remote",
"https://carfleet.ae/api/mcp",
"--header",
"Authorization: Bearer cf_live_sk_YOUR_KEY_HERE"
]
}
}
}This runs mcp-remote, a small bridge that speaks to a remote server and attaches your header. It needs Node.js on the machine; npx fetches it on first use.
Check it took
Start a new conversation and ask “using CarFleet, how many vehicles do we have?”. Claude should ask to use a CarFleet tool and come back with a real count.
Add the server
Run this in your project directory:
claude mcp add --transport http carfleet https://carfleet.ae/api/mcp \
--header "Authorization: Bearer cf_live_sk_YOUR_KEY_HERE"Confirm
claude mcp list should show carfleet as connected. Then just ask — “what’s going out today?”
Custom connectors need developer mode
They are available on Plus and Pro, and on Business, Enterprise and Edu accounts where an admin has allowed them.
Turn on developer mode
Settings → Apps → Advanced settings → switch on Developer mode.
Create the connector
Settings → Connectors → Create. Name it CarFleet, paste the server address, and choose API key as the authentication method — not OAuth. Paste the key itself as the value.
Picking the wrong authentication mode is the usual reason a connector keeps asking you to sign in after it looked like it worked.
Check it took
Start a chat, enable the CarFleet connector, and ask what is happening today.
Add it to your MCP config
Create .cursor/mcp.json in the project (or the global one under your home directory) with:
{
"mcpServers": {
"carfleet": {
"command": "npx",
"args": [
"-y",
"mcp-remote",
"https://carfleet.ae/api/mcp",
"--header",
"Authorization: Bearer cf_live_sk_YOUR_KEY_HERE"
]
}
}
}Reload
Cursor picks the server up on restart; its MCP settings panel should list CarFleet with its tools.
Point it at the address
Streamable HTTP, POST https://carfleet.ae/api/mcp, with Authorization: Bearer <your key> on every request. No session handshake is required and no OAuth flow exists.
If the client cannot send a header
Put mcp-remote in front of it — the same block shown under Claude works for any client that launches a local command.
If it does not work
Check the key by itself first, outside any assistant:
curl https://carfleet.ae/api/v1/me \
-H "Authorization: Bearer cf_live_sk_YOUR_KEY_HERE"A healthy key answers with your workspace slug and the role it acts with. It reads none of your data, which is what makes it the safe first call. Then work down this list:
- 401 Unauthorized — the key is mistyped, revoked or expired. Mint a fresh one; keys are cheap.
- 403 Forbidden on a change — the key is read only. That is the system working. Mint a read-write key if you actually want the assistant changing things.
- The assistant says it has no CarFleet tools — it did not load the server. Quit the app completely and reopen it; a reload often is not enough. Check for a typo in the config file, which is silent when it is malformed.
- “npx: command not found” — install Node.js, then reopen the client.
Make the answers better
Install the CarFleet skill alongside the connection. The tools tell an assistant WHAT it can call; the skill tells it 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. Those are the things a tool description cannot carry, and the difference between a right answer and a confident wrong one.
npx skills add https://carfleet.aeNext
- What it can do — every question it answers, everything it can change, and where that stops.
- Quickstart — if you are writing code against the API rather than connecting an assistant.