MCP server and skill

Your fleet, in the editoryou already have open.

FleetAI is an MCP server as well as a chat app. Point Claude Code, Codex or Cursor at your Wialon account 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.

  • Thirteen tools over thirty-one operations, all read-only
  • Your token is used in memory for each call, never stored or logged
  • A report comes back inside the answer, as the file Wialon renders
claude mcp add --transport http fleetai \
  https://ai.theassettrack.com/mcp \
  --header "Authorization: Bearer <your token>"

The token comes from your own Wialon user settings.

Install

Wherever your agent lives

One URL and your token — no account here, and nothing to install beyond the bridge Claude Desktop needs. You need a Wialon access token first: in Wialon, under your user settings, create one and copy it — it is 72 characters, and you choose what it may reach and how long it lives.

claude mcp add --transport http fleetai \
  https://ai.theassettrack.com/mcp \
  --header "Authorization: Bearer <your token>"

Run it in the project you want the fleet available in, or add --scope user for every project.

Check it took

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.

The skill

Tools are reach. A skill is judgement.

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.

Nothing to install

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. There are no files to copy into a project and none to keep up to date: a client that reconnects has the current version.

What it tells the agent
  • A reading is only current if the position behind it is

    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.

  • null means nobody measured it

    Unknown, never zero. An unreadable fuel sensor is not an empty tank, and the two are answered differently.

  • Relative dates belong to the tool

    analyze_trips takes a named period. An agent that works out "last 7 days" itself reports today’s driving under yesterday’s name.

  • A report runs and exports in one call

    Wialon keeps one report result per session, so running and exporting as two steps would export whatever ran in between.

  • Machine statuses translate

    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.

  • Say what is missing

    What the token reaches is what can be answered. Out of reach is said plainly, never filled in with a plausible figure.

Configuration

Two settings, and only one is required

The token goes in a header and never in the URL, which clients and proxies write into their logs far more readily. The region has a default that is right for most accounts.

Authorization: Bearer <token>header

The access token from your Wialon user settings. The identity the server acts as, sent with every request.

?region=eu | ?region=usquery

The data centre your account is on, appended to the URL. Leave it off for com.

A token is minted at one data centre and is meaningless at the others — hst-api.wialon.com, .eu and .us are three separate worlds. The region is the first thing to check when nothing authenticates.

What it exposes

Thirteen tools, thirty-one answers

Twelve tools answer fleet questions directly. The thirteenth is one door to nineteen more Wialon operations, with a catalogue instead of nineteen schemas in every call.

Direct
  • get_fleet_statusCounts, and every unit with its freshness
  • get_vehicle_locationWhere one vehicle is, and when it said so
  • get_all_vehicle_locationsThe whole fleet on one set of coordinates
  • check_fuel_levelsWho is low, and whose sensor cannot be read
  • get_driversDrivers and the vehicles they are bound to
  • get_vehicle_infoOne unit in full — profile, sensors, service
  • analyze_tripsTrips over a named period, never a computed one
  • get_trip_summaryDistance, engine hours, idling, per unit
  • get_trip_trackThe positions of one drive, for a map
  • get_fleet_analyticsFleet-wide numbers over a period
  • get_maintenance_statusService intervals and what is overdue
  • get_utilizationHow hard the fleet is actually worked
wialon_api19 operations
  • The account
    check_connection · search_units · list_groups · list_resources · get_account_snapshot
  • One unit
    get_unit_briefing · get_sensors_now · get_last_messages · get_messages_interval
  • Geofences
    list_geofences · list_notifications
  • Reports
    list_saved_reports · run_saved_report · run_temporary_report · get_report_catalog · fetch_more_report_rows · export_report
  • Audits
    audit_notifications · audit_unit_settings

Call an operation with no arguments and it answers with its own schema, so an agent never has to guess what it takes.

Recipes

What a question turns into

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?”

check_fuel_levels

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.

“How far did each vehicle drive last week?”

analyze_trips · get_fleet_analytics

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”

wialon_search_units → analyze_trips → get_trip_track

The unit id first, then the day, then the positions of the one drive in question.

“Run my mileage report for last week as a PDF”

wialon_list_saved_reports → wialon_export_report

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?”

wialon_audit_notifications · wialon_audit_unit_settings

Geofences with no notification on them, units sending no fuel sensor, settings that quietly stopped making sense.

When it goes wrong

The five failures worth knowing

Four of them are the same two mistakes, and both are quick to check.

The agent says it has no fleet tools

The client has not connected to the server. Check the config file is the one that client reads, and restart it — most read their MCP config only at startup.

Every call fails immediately with an authentication error

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.

"The connection to Wialon dropped"

Wialon error 1: the session is gone. Retrying the same call will not help — check the token is still valid and has not expired or been deleted.

The exported report is missing

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 question about raw messages takes forever

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.

What it cannot do

An agent with read access

You are handing a token to a server of ours. Here is exactly what that server can do with it.

Read-only

Every tool reads. Nothing in the set creates, edits or deletes anything in your Wialon account.

Never kept

The token travels in the header of each request to our Worker, which holds it in memory only to call Wialon. It is never stored and never logged.

Never echoed

Wialon names the session in some of its errors, so the credential is stripped out of every answer before it reaches the model.

Delete the token in Wialon and every agent holding it is locked out the same second.

Would rather just ask?

The chat app is the same tools with a map, a dashboard and somewhere to put the answer. Same token, nothing to install.

Open the app