“Which trucks are low on fuel?”
Reads fuelUnit before calling anything low — litres and percent are different facts — and lists units whose sensor is unreadable separately rather than counting them as empty.
FleetAI is an MCP server as well as a chat app. Connect Claude, ChatGPT, Codex, Cursor or VS Code to your Wialon account, sign in with Wialon once, and ask about it where you are already working. A skill ships with it, so the agent knows how Wialon behaves before it asks anything.
claude plugin marketplace add assettrackhq/wialon-mcp
claude plugin install wialon@wialon-mcpThen /mcp → fleetai → Authenticate, and sign in with Wialon.
One URL. The first time the client connects, it opens a page to sign in with Wialon — no token to copy, no account here. A token still works for scripts and clients without a browser; that is under configuration.
claude plugin marketplace add assettrackhq/wialon-mcp
claude plugin install wialon@wialon-mcpThen run /mcp, pick fleetai and choose Authenticate — a browser page opens to sign in with Wialon. The server alone, without the skill files, is claude mcp add --transport http fleetai https://ai.theassettrack.com/mcp.
Ask the agent how many vehicles are online. A number means it is connected; an agent that says it has no fleet tools is covered under when it goes wrong.
Sign-in is OAuth, the way MCP clients expect it. The server keeps no record of it: client ids, codes and tokens are sealed with a server secret, so nothing has to be stored to check them. What your client holds is the Wialon token, encrypted, and it sends it with each request.
The client opens a page of ours in your browser. Choose hosting.wialon.com, .eu or .us — wherever your account lives.
You land on Wialon’s own login page and sign in there. FleetAI never sees your password.
Online tracking and view access, nothing that modifies, valid for 30 days. It is listed in your Wialon user settings under Access tokens as “FleetAI MCP”.
Deleting that token in Wialon locks out every client holding it. After 30 days the client asks you to sign in again.
An agent with the tools can read your account. An agent with the skill knows what the numbers mean — which is the difference between an answer and a confident wrong answer. It is written from the things this account taught us, and it comes with the server.
The server hands the skill to the agent as its instructions when the client connects — which tool answers what, and the rules that decide whether an answer is right. A client that reconnects has the current version.
Agents that load skills on demand do better with it on disk. The Claude Code plugin installs it with the server; for any other agent:
npx skills add assettrackhq/wialon-mcpThe source, and the place for issues: github.com/assettrackhq/wialon-mcp.
Every vehicle carries how many minutes old its position is, and every sensor how old its value is. A speed of 13 km/h recorded in April is not a moving truck.
Unknown, never zero. An unreadable fuel sensor is not an empty tank, and the two are answered differently.
analyze_trips takes a named period. An agent that works out "last 7 days" itself reports today’s driving under yesterday’s name.
Wialon keeps one report result per session, so running and exporting as two steps would export whatever ran in between.
no_messages is "has never reported", no_actual_state is "no current data". Neither a raw status code nor an internal unit id is ever shown to a person.
What the account reaches is what can be answered. Out of reach is said plainly, never filled in with a plausible figure.
With OAuth there is nothing else to set. For a script, or a client with no browser to sign in through, send a Wialon access token yourself — in a header, never in the URL, which clients and proxies write into their logs far more readily.
The whole setup when you sign in. Streamable HTTP; the data centre is chosen on the sign-in page.
Instead of signing in: an access token you created in your Wialon user settings, sent with every request. The server acts as that token.
With a token only: the data centre your account is on, appended to the URL. Leave it off for hosting.wialon.com.
claude mcp add --transport http fleetai \
"https://ai.theassettrack.com/mcp?region=eu" \
--header "Authorization: Bearer <your token>"A token is minted at one data centre and is meaningless at the others — hosting.wialon.com, .eu and .us are three separate worlds. With a token, the region is the first thing to check when nothing authenticates. Signing in asks for it on the page instead.
Eighteen tools answer fleet questions directly. The nineteenth is one door to nineteen more Wialon operations, with a catalogue instead of nineteen schemas in every call. Each one is marked read-only to the client, so it does not ask you to confirm every call.
get_vehicle_info includes engine fault codes (DTC) when the unit reports them.
Call an operation with no arguments and it answers with its own schema, so an agent never has to guess what it takes.
In clients that support MCP Apps — Claude, ChatGPT and others — the location tools draw an interactive map inline in the conversation. A position more than an hour old is drawn greyed and dashed, so a stale one cannot pass for current. Other clients get the same answer as text.
These are in the skill, so the agent reaches for them without being told. They are here because they are also the clearest description of what the server can do.
“Which trucks are low on fuel?”
Reads fuelUnit before calling anything low — litres and percent are different facts — and lists units whose sensor is unreadable separately rather than counting them as empty.
“Has anyone drained fuel this week?”
Fills and suspected drains across the fleet, per vehicle. Ask about one truck and each event comes with its time, place and tank levels.
“Who drove worst last month?”
A score and violations per 100 km for every driver, ranked, from Wialon’s own eco-driving and speeding reports.
“Which truck is closest to Storgatan 1, Örebro?”
The address becomes a point, and every vehicle is ranked by straight-line distance from its last position — as the crow flies, not by road.
“Who was at the depot today and for how long?”
Each vehicle that entered the geofence, its first entry and last exit, and the time it spent inside.
“What changed since yesterday?”
Distance, fuel events, violations, units gone offline and service now overdue, against the day before — one call rather than five.
“How far did each vehicle drive last week?”
A named period, so the week is the week Wialon means. Totals come from the fleet-wide tool rather than ninety-six per-unit calls.
“Show me Friday's route for Van 023”
The unit id first, then the day, then the positions of the one drive in question — drawn on a map where the client can show one.
“Run my mileage report for last week as a PDF”
Your own saved template, run and exported in one call. The file Wialon itself rendered comes back inside the answer — the same document its Export button produces.
“Is the account set up properly?”
Geofences with no notification on them, units sending no fuel sensor, settings that quietly stopped making sense.
Most of them are the connection or the sign-in, and both are quick to check.
The client has not connected, or has not signed in. Check the config file is the one that client reads and restart it — most read their MCP config only at startup — then look for a sign-in or Authenticate step in its MCP settings.
The 30 days are up, or the “FleetAI MCP” token was deleted in Wialon. Sign in again and Wialon issues a new one.
Almost always the region. A token is minted at one data centre and is meaningless at the others, so add ?region=eu or ?region=us to the URL if your account is not on hosting.wialon.com. After that, check the header reads Bearer, a space, then the token. Signing in has no such step: the data centre is picked on the sign-in page.
Wialon error 1: the session is gone. Retrying the same call will not help — sign in again, or, with a token, check it is still valid and has not expired or been deleted.
An empty interval answers with zero rows and no file, on purpose, rather than handing over an empty document. Widen the dates or check the unit reported at all.
A fleet-week of raw messages is megabytes. Ask for one unit over a bounded interval, and prefer the current sensor values when the question is about now.
Signing in gives a server of ours a view-only key to your account. Here is exactly what that server can do with it.
Every tool reads, and says so to the client. The token Wialon issues at sign-in is view-only, so it could not change your account if anything asked it to.
Sign-in codes and tokens are sealed with a server secret rather than kept in a database. The Wialon session lives in memory for a few idle minutes, and no log line carries the token or the session.
Wialon names the session in some of its errors, so the credential is stripped out of every answer before it reaches the model.
A request that carries a browser Origin is refused, so a website you visit cannot call the server as you.
Delete “FleetAI MCP” under Access tokens in your Wialon user settings and every client holding it is locked out the same second.
The chat app is the same tools with a dashboard, a live map and somewhere to put the answer. Nothing to install.