FleetCollect API & AI Agents
FleetCollect runs a Model Context Protocol (MCP) server at https://app.fleetcollect.net/mcp. An AI assistant connected to it can read your account's IFTA mileage, DQF compliance, dispatch loads and drug-testing counts, and look up public FMCSA carrier records. The tools on this page are read-only. Connect with OAuth 2.1 (recommended) or an API key.
Access requirements
- A FleetCollect account with a subscription whose status is active or trialing. Credentials stop working on the next request if the subscription is no longer active or trialing.
- Included with your subscription. There is no extra charge and no per-call charge for the connector.
- Every call is scoped on the server to the account that authorized the connection. The account is taken from the credential and is never a tool parameter.
- Carrier tools read United States FMCSA data (USDOT and MC numbers only).
Setup: OAuth 2.1 (recommended)
Most MCP clients only need the server URL. Add https://app.fleetcollect.net/mcp as a custom connector; the client discovers the authorization server, registers itself and sends you to FleetCollect to sign in and approve access.
- An unauthenticated request to
/mcpreturns401withWWW-Authenticate: Bearer resource_metadata="https://app.fleetcollect.net/.well-known/oauth-protected-resource". - The protected-resource metadata names the resource
https://app.fleetcollect.net/mcpand the authorization serverhttps://app.fleetcollect.net. - The client reads
/.well-known/oauth-authorization-serverand registers at/oauth/register(dynamic client registration, no initial access token). - The client sends the user to
/oauth/authorize. The user signs in to FleetCollect and approves the connection on a consent screen. - The client exchanges the code at
/oauth/tokenand calls/mcpwithAuthorization: Bearer <access_token>.
| Authorization server metadata | GET https://app.fleetcollect.net/.well-known/oauth-authorization-server |
| Protected resource metadata | GET https://app.fleetcollect.net/.well-known/oauth-protected-resource |
| Authorization endpoint | https://app.fleetcollect.net/oauth/authorize |
| Token endpoint | POST https://app.fleetcollect.net/oauth/token |
| Registration endpoint | POST https://app.fleetcollect.net/oauth/register |
| Revocation endpoint | POST https://app.fleetcollect.net/oauth/revoke (RFC 7009). Send token (access or refresh) and client_id, plus client_secret for client_secret_post clients. Always returns 200; a valid token revokes the whole grant (access and refresh). |
| Grant types | authorization_code, refresh_token |
| PKCE | Required for every client, public and confidential. code_challenge_method must be S256; a request without a challenge, or with any other method, is refused, and the token request must include code_verifier. |
| Client authentication | none (public clients) or client_secret_post. A client secret is returned at registration only for client_secret_post. |
| Redirect URIs | Required at registration. https, or http on localhost / 127.0.0.1 / ::1 only. Must match exactly at authorize. |
| Scope | read |
| Resource (RFC 8707) | Optional at /oauth/authorize and /oauth/token. If sent it must be https://app.fleetcollect.net/mcp; any other value is refused with error invalid_target. Every token is issued for https://app.fleetcollect.net/mcp, and access tokens are accepted only at /mcp. |
| Access token | Opaque, valid 1 hour. |
| Refresh token | Valid 60 days. Rotated on every refresh: the response carries a new refresh token and the old access and refresh tokens stop working. If a refresh token that was already rotated out is presented again, every token from that authorization is revoked and the user must reconnect. |
| Authorization code | Valid 5 minutes, single use. |
| Storage | FleetCollect stores only SHA-256 hashes of codes, tokens and client secrets. |
Setup: API key (alternative)
- Sign in at app.fleetcollect.net.
- Open Settings → Integrations → API access & AI agents and click Generate API key.
- Copy the key (
fc_live_…). It is shown once; FleetCollect stores only its SHA-256 hash. API keys do not expire; revoke them when no longer needed.
POST https://app.fleetcollect.net/mcp
Authorization: Bearer fc_live_your_key_here
Content-Type: application/jsonFor clients that accept custom headers, for example Claude Desktop:
{
"mcpServers": {
"fleetcollect": {
"url": "https://app.fleetcollect.net/mcp",
"headers": { "Authorization": "Bearer fc_live_your_key_here" }
}
}
}Protocol
- JSON-RPC 2.0 over HTTP
POSTtohttps://app.fleetcollect.net/mcp. Batches are accepted; notifications return202with no body.GET /mcpreturns405. - Methods:
initialize,ping,tools/list,tools/call,prompts/list,prompts/get. Resources are not supported. - Server info: name
fleetcollect, version1.0.0. Protocol version: the server echoes the client's requested version (default2025-06-18). - A
tools/callresult is{"content":[{"type":"text","text":"<JSON>"}],"isError":<bool>}. The text is a JSON document; there is nostructuredContentoroutputSchema.
curl -X POST https://app.fleetcollect.net/mcp \
-H "Authorization: Bearer <access_token or fc_live_ key>" \
-H "Content-Type: application/json" \
-d '{"jsonrpc":"2.0","id":1,"method":"tools/call","params":{"name":"get_ifta_summary","arguments":{"year":2026,"quarter":3}}}'Permissions and revocation
- Scope:
readgrants the tools on this page. Every tool is classified Read, setsreadOnlyHint: trueanddestructiveHint: false, and does not change data in your account. - Who approves: the person approving an OAuth connection signs in to FleetCollect and confirms on a consent screen. A connection reads the data of the whole FleetCollect account it was approved for.
- Revoking an API key: Settings → Integrations → API access & AI agents → revoke. The key is rejected from the next request; there is no caching of credentials.
- Revoking an OAuth connection: Settings → Integrations → API access & AI agents → Connected AI apps → Revoke. Every access and refresh token that app holds on the account is rejected from the next request. Assistants that support token revocation can revoke their own tokens at
/oauth/revoke. - Automatic cut-off: every request re-checks the credential. API keys and OAuth tokens are rejected immediately when the subscription is no longer active or trialing, or when the team member who created them is removed.
Tools (19)
All 19 tools are classified Read and carry readOnlyHint: true and destructiveHint: false. No tool takes an account id; the account comes from the credential. Tools that call FMCSA set openWorldHint: true as shown on each card.
1. get_drivers_list
List the account's DQF drivers with their compliance percentage.
- Inputs
status_filter(string, Optional) — active (default) | inactive | all. Any other value returns all drivers.
- Output
- drivers[]: id, name, active, compliance ("done/total (pct%)" over required items); count. Up to 50 drivers.
- Data exposed
- Driver names and DQF compliance status. Scope: Your account only.
- Classification
- Read
- Sensitive
- No
- Side effects
- None
- Annotations
- readOnlyHint: true · destructiveHint: false · openWorldHint: false
2. get_driver_compliance
Detailed DQF checklist for a driver, matched by partial name.
- Inputs
driver_name(string, Required) — Case-insensitive partial match; up to 5 matching drivers are returned.
- Output
- drivers[]: driver_id, name, active, hire_date, checklist_items[] (item_id, item, category, status, expiration, required).
- Data exposed
- Driver names, hire date, checklist item names, statuses and expiration dates. Scope: Your account only.
- Classification
- Read
- Sensitive
- No
- Side effects
- None
- Annotations
- readOnlyHint: true · destructiveHint: false · openWorldHint: false
3. get_expiring_documents
Checklist documents that are expired or expire within the look-ahead window, for active drivers.
- Inputs
days_ahead(integer, Optional) — Default 90. Already-expired documents are always included.
- Output
- documents[]: driver, document, expiration, expired, status; count. Up to 50, soonest first.
- Data exposed
- Driver names, document names, expiration dates and statuses. Scope: Your account only.
- Classification
- Read
- Sensitive
- No
- Side effects
- None
- Annotations
- readOnlyHint: true · destructiveHint: false · openWorldHint: false
4. get_ifta_summary
IFTA trip and mileage summary for a quarter.
- Inputs
year(integer, Optional) — Default: current year.quarter(integer, Optional) — 1–4. Default: current quarter. A value outside 1–4 returns an error.
- Output
- quarter ("Q<n> <year>"), trips, total_miles, states[] (state, miles), fuel_gallons, fuel_cost. Miles count completed/confirmed trips.
- Data exposed
- Trip counts, miles by state and fuel totals. Scope: Your account only.
- Classification
- Read
- Sensitive
- No
- Side effects
- None
- Annotations
- readOnlyHint: true · destructiveHint: false · openWorldHint: false
5. quarterly_ifta_report
Per-jurisdiction miles, fuel and tax for an IFTA quarter (the report breakdown).
- Inputs
year(integer, Optional) — Default: current year.quarter(integer, Optional) — 1–4. Default: current quarter. Values outside 1–4 are clamped to the nearest quarter.
- Output
- year, quarter, period_start, period_end, due_date, jurisdictions[] (state, miles, gallons, fuel_cost, gallons_consumed, net_gallons, tax_rate, surcharge_rate, tax_amount), fuel_purchased_no_miles_driven[] (state, gallons, fuel_cost, tax_rate, tax_amount), total_miles, total_gallons, fleet_mpg, net_tax, trip_count, note.
- Data exposed
- Aggregated miles, fuel and tax figures by jurisdiction. No driver names. Scope: Your account only.
- Classification
- Read
- Sensitive
- No
- Side effects
- None
- Annotations
- readOnlyHint: true · destructiveHint: false · openWorldHint: false
6. get_ifta_drivers
IFTA (mobile app) drivers with their trip activity over the last 90 days.
- Inputs
- None
- Output
- drivers[]: name, active, trips_last_90_days, miles_last_90_days; count. Up to 50.
- Data exposed
- Driver names and activity counts. No phone numbers or login data. Scope: Your account only.
- Classification
- Read
- Sensitive
- No
- Side effects
- None
- Annotations
- readOnlyHint: true · destructiveHint: false · openWorldHint: false
7. list_loads
List dispatch loads with rate, miles and status.
- Inputs
status(string, Optional) — Exact match on load status, e.g. new, dispatched, en_route_pickup, at_pickup, loaded, en_route_delivery, at_delivery, delivered, pod_received, invoiced, paid, cancelled, tonu, on_hold, refused, in_dispute.limit(integer, Optional) — 1–100. Default 20 (values outside the range are clamped).
- Output
- loads[]: id, status, commodity, equipment, rate_total, loaded_miles, deadhead_miles, revenue_per_mile; count. Newest first.
- Data exposed
- Load rates, miles, commodity and status. No shipper, consignee or broker names or contact details. Scope: Your account only.
- Classification
- Read
- Sensitive
- No
- Side effects
- None
- Annotations
- readOnlyHint: true · destructiveHint: false · openWorldHint: false
8. dispatch_stats
Dispatch revenue and load-volume totals grouped by status.
- Inputs
- None
- Output
- by_status[] (status, loads, revenue, loaded_miles), total_loads, total_revenue.
- Data exposed
- Aggregated load counts, revenue and miles. Scope: Your account only.
- Classification
- Read
- Sensitive
- No
- Side effects
- None
- Annotations
- readOnlyHint: true · destructiveHint: false · openWorldHint: false
9. testing_summary
Drug/alcohol testing order counts by status.
- Inputs
- None
- Output
- by_status[] (status, count), total.
- Data exposed
- Order counts only. No driver names and no test results. Scope: Your account only.
- Classification
- Read
- Sensitive
- No
- Side effects
- None
- Annotations
- readOnlyHint: true · destructiveHint: false · openWorldHint: false
10. get_subscription_info
The account's subscription plan, billing status and driver limits.
- Inputs
- None
- Output
- plan, plan_id, status, billing_cycle, price_per_unit, total_price, driver_limit, driver_min, active_drivers, paid_slots, trial_end.
- Data exposed
- Plan and billing status. No payment card or Stripe identifiers. Scope: Your account only.
- Classification
- Read
- Sensitive
- No
- Side effects
- None
- Annotations
- readOnlyHint: true · destructiveHint: false · openWorldHint: false
11. carrier_lookup
FMCSA identity record for a motor carrier.
- Inputs
dot(string, One of dot or mc) — USDOT number. Non-digits are removed. Used if both are given.mc(string, One of dot or mc) — MC (docket) number. Non-digits are removed.
- Output
- dot_number, legal_name, dba_name, operating_status, allowed_to_operate, out_of_service_date, power_units, drivers, phy_state, safety_rating, bipd_insurance_required, bipd_insurance_on_file.
- Data exposed
- Public FMCSA carrier record. Scope: Public FMCSA data (not account-scoped).
- Classification
- Read
- Sensitive
- No
- Side effects
- None on your account. Queries public FMCSA services.
- Annotations
- readOnlyHint: true · destructiveHint: false · openWorldHint: true
12. carrier_safety
FMCSA CSA BASIC safety measures for a carrier.
- Inputs
dot(string, Required by the tool (not marked required in the schema)) — USDOT number. MC numbers are not accepted by this tool.
- Output
- dot_number, basics[] (basic, measure, percentile, serious_violation).
- Data exposed
- Public FMCSA safety data. Scope: Public FMCSA data (not account-scoped).
- Classification
- Read
- Sensitive
- No
- Side effects
- None on your account. Queries public FMCSA services.
- Annotations
- readOnlyHint: true · destructiveHint: false · openWorldHint: true
13. verify_carrier
A combined assessment of a carrier from FMCSA authority, insurance, safety and registration data: verdict, score and the flags behind it.
- Inputs
dot(string, One of dot or mc) — USDOT number.mc(string, One of dot or mc) — MC (docket) number.
- Output
- schema_version, query, verdict (trusted | caution | do_not_load | insufficient_data), trust_score (0–100), confidence, coverage, headline, as_of, components (identity, authority, insurance, safety, fraud), flags[] (code, severity, source, message), recommended_actions (always empty), sources[], disclaimer.
- Data exposed
- Public FMCSA carrier data and FleetCollect’s scoring of it. Scope: Public FMCSA data (not account-scoped).
- Classification
- Read
- Sensitive
- No
- Side effects
- None on your account. Queries public FMCSA services; FleetCollect caches the public carrier responses (see Data exposure).
- Annotations
- readOnlyHint: true · destructiveHint: false · openWorldHint: true
14. carrier_record
The FMCSA public record for a carrier in one response: identity, MCS-150 status, authority, insurance, fleet size, safety rating, crashes, out-of-service rates and CSA BASICs.
- Inputs
dot(string, One of dot or mc) — USDOT number.mc(string, One of dot or mc) — MC (docket) number; resolved to a USDOT number.
- Output
- dot_number, legal_name, dba_name, identity{}, authority{}, insurance{}, fleet{power_units, drivers}, safety{}, basics[], note.
- Data exposed
- Public FMCSA carrier record. Scope: Public FMCSA data (not account-scoped).
- Classification
- Read
- Sensitive
- No
- Side effects
- None on your account. Queries public FMCSA services; FleetCollect caches the public carrier responses (see Data exposure).
- Annotations
- readOnlyHint: true · destructiveHint: false · openWorldHint: true
15. carrier_insurance
A carrier's FMCSA insurance filings: insurer, policy number, BIPD/cargo/bond amounts against the required minimums, and cancellation history.
- Inputs
dot(string, One of dot or mc) — USDOT number.mc(string, One of dot or mc) — MC (docket) number.
- Output
- dot_number, legal_name, insurer, policy_no, bipd_on_file, bipd_amount_thousands, bipd_required_thousands, cargo_on_file, cargo_required, cargo_amount_thousands, bond_on_file, cancelled, cancelled_date, source, as_of, note.
- Data exposed
- Public FMCSA insurance filings. Scope: Public FMCSA data (not account-scoped).
- Classification
- Read
- Sensitive
- No
- Side effects
- None on your account. Queries public FMCSA services; FleetCollect caches the public carrier responses (see Data exposure).
- Annotations
- readOnlyHint: true · destructiveHint: false · openWorldHint: true
16. search
Keyword search across the account's DQF drivers, IFTA drivers and loads. Returns ids for fetch.
- Inputs
query(string, Required) — Case-insensitive substring match on names. Loads match only an exact numeric load id.
- Output
- results[] (id, title, type), count. id is driver:<n>, ifta_driver:<n> or load:<n>. Up to 10 drivers, 10 IFTA drivers and 1 load.
- Data exposed
- Driver names and load numbers/statuses. Scope: Your account only.
- Classification
- Read
- Sensitive
- No
- Side effects
- None
- Annotations
- readOnlyHint: true · destructiveHint: false · openWorldHint: false
17. fetch
Detail for an id returned by search, or for a review record.
- Inputs
id(string, Required) — driver:<n>, ifta_driver:<n>, load:<n>, or (plan-dependent) item:<n>, form:<n>, application:<n>, inbox:<n>.
- Output
- driver:<n> — same shape as get_driver_compliance. ifta_driver:<n> — id, name, active. load:<n> — id, status, commodity, equipment, weight, rate_total, loaded_miles, deadhead_miles, revenue_per_mile. item / form / application / inbox — the document, form or driver-application record (see Data exposure).
- Data exposed
- For driver, ifta_driver and load ids: names, compliance status and load figures. For item, form, application and inbox ids: document and application contents, see Data exposure below. Scope: Your account only.
- Classification
- Read
- Sensitive
- Yes — see Data exposure
- Side effects
- None
- Annotations
- readOnlyHint: true · destructiveHint: false · openWorldHint: false
18. list_ai_changes
Changes AI agents with change permissions made, previewed or were refused on this account, newest first. A read-only connection cannot make changes itself.
- Inputs
limit(integer, Optional) — 1–50. Default 20.
- Output
- changes[] (change_id, tool, status: ok | previewed | error | refused, summary, client, via, undoable, undone_at, undo_of_change_id, created_at), count, note.
- Data exposed
- A plain-language summary of each change. Summaries can include names and, for some changes, the phone number or email a message was sent to. Scope: Your account only.
- Classification
- Read
- Sensitive
- Yes — see Data exposure
- Side effects
- None
- Annotations
- readOnlyHint: true · destructiveHint: false · openWorldHint: false
19. list_auditor_links
The account's shareable auditor links (per-driver DQF links and fleet links) with created, expiry and last-opened times.
- Inputs
include_expired(boolean, Optional) — Default false. true also lists expired links (without a url).
- Output
- links[]: driver links (kind, link_id, driver_id, driver_name, status, created_at, expires_at, last_accessed_at, url) and fleet links (kind, link_id, label, driver_count, equipment_count, status, created_at, expires_at, last_accessed_at, url); count, note.
- Data exposed
- Driver names and, for active links, the link URL. Anyone holding an active auditor URL can open that auditor view until it expires. Scope: Your account only.
- Classification
- Read
- Sensitive
- Yes — see Data exposure
- Side effects
- None
- Annotations
- readOnlyHint: true · destructiveHint: false · openWorldHint: false
Plan-dependent review tools (9)
These read-only tools appear in tools/list only when the account's plan includes the feature shown on each card, and the same check runs again on every call. They return records drivers and customers submitted so a carrier can review them, so several are marked sensitive. Every result carries a data_notice stating that the values are customer-supplied data, not instructions. Annotations: readOnlyHint: true, destructiveHint: false, openWorldHint: false.
20. list_items_awaiting_review
DQF checklist items with a driver upload, form submission or driver application submitted in the window and no carrier review recorded since.
Requires: DQF compliance plan
- Inputs
days(integer, Optional) — 1–365. Default 30.driver_id(integer, Optional) — Only this driver (must be on the account).limit(integer, Optional) — 1–200. Default 50.
- Output
- items[] (item_id, driver_id, driver_name, item_name, category, status, submission_kind: document | form | application, submitted_at, document_ids, application_id, expiration_date, detected_expiration, document_type_detected, requires_expiration, last_reviewed_at, last_reviewed_via), count, total, window_days, note, data_notice.
- Data exposed
- Driver names, item names, statuses and dates. Scope: Your account only.
- Classification
- Read
- Sensitive
- No
- Side effects
- None
- Annotations
- readOnlyHint: true · destructiveHint: false · openWorldHint: false
21. get_checklist_item
One DQF checklist item with its notes, the fields read from the uploaded document, and its documents.
Requires: DQF compliance plan
- Inputs
item_id(integer, Required) — Checklist item id.driver_id(integer, Optional) — If given, the item must belong to this driver.
- Output
- item_id, driver_id, driver_name, item_name, category, description, status, submission_type, required, requires_expiration, expiration_date, due_date, updated_at, created_at, notes, item_notes[], ocr (document_type_detected, detected_expiration, is_valid_document, notes, key_data), documents[] (document_id, filename, file_type, file_size, side, uploaded_at, view_url, view_url_expires_in_seconds), has_form_submission, filled_form_pdf_url, last_reviewed_at, last_reviewed_via, how_to_view, data_notice.
- Data exposed
- Item details, free-text notes, and signed links to the stored files (valid 10 minutes). Number-like fields read from a document (SSN, license and similar) are masked to the last 4 and dates of birth are withheld. Scope: Your account only.
- Classification
- Read
- Sensitive
- Yes — see Data exposure
- Side effects
- None on your account. Creates signed links to stored files that expire after 10 minutes.
- Annotations
- readOnlyHint: true · destructiveHint: false · openWorldHint: false
22. get_form_submission
A driver's submitted Application for Employment, or a standard/custom form's questions and answers.
Requires: DQF compliance plan
- Inputs
item_id(integer, One of item_id or driver_id) — The form checklist item.driver_id(integer, One of item_id or driver_id) — That driver's application.
- Output
- Application: form_type "driver_application", driver_id, driver_name, item_id, application_id, status, submitted_at, updated_at, signature{signed, signature_text, signature_date, fmcsr_authorization_agreed}, answers{every application field and history}, masking. Form: form_type "checklist_form", driver_id, driver_name, item_id, item_name, status, submitted_at, submission_count, answers[] (question, answer), filled_form_pdf_url, masking.
- Data exposed
- The applicant's name, address, phone, email, employment, address, accident and violation history and answers. SSNs are returned as the last 4 digits only; license numbers are masked to the last 4 and dates of birth are withheld. On custom forms only SSN-labelled answers are masked. Scope: Your account only.
- Classification
- Read
- Sensitive
- Yes — see Data exposure
- Side effects
- None on your account. Creates signed links to stored files that expire after 10 minutes.
- Annotations
- readOnlyHint: true · destructiveHint: false · openWorldHint: false
23. list_forms_awaiting_review
Submitted driver applications and driver-filled forms with no carrier review recorded since submission.
Requires: DQF compliance plan
- Inputs
days(integer, Optional) — 1–365. Default 30.driver_id(integer, Optional) — Only this driver.limit(integer, Optional) — 1–200. Default 50.
- Output
- forms[] (form_type, item_id, driver_id, driver_name, item_name, status, submitted_at, application_id, last_reviewed_at), count, total, window_days, note, data_notice.
- Data exposed
- Driver names, form names, statuses and dates. Scope: Your account only.
- Classification
- Read
- Sensitive
- No
- Side effects
- None
- Annotations
- readOnlyHint: true · destructiveHint: false · openWorldHint: false
24. list_inbox_documents
Documents in the document inbox with the detected type, the suggested driver and checklist item, the extracted expiration date and why each needs review.
Requires: Document inbox (enabled per account)
- Inputs
status(string, Optional) — review (default) | filed | all. Other values are treated as review.driver_id(integer, Optional) — Suggested or filed driver.limit(integer, Optional) — 1–200. Default 50.
- Output
- documents[] (inbox_item_id, status, target_kind, document_type, type_confidence, pages, source_filename, suggested_driver_id, suggested_driver_name, driver_confidence, suggested_item_id, suggested_item_name, suggested_action, addable_item_name, suggested_equipment_id, extracted_driver_name, expiration_date, review_reasons, filed_driver_id, filed_item_id, created_at), count, status, note, data_notice.
- Data exposed
- Driver names, file names, document types and dates. Scope: Your account only.
- Classification
- Read
- Sensitive
- No
- Side effects
- None
- Annotations
- readOnlyHint: true · destructiveHint: false · openWorldHint: false
25. get_inbox_document
One document-inbox item with everything extracted from it, the suggested match, the sender and a link to the file.
Requires: Document inbox (enabled per account)
- Inputs
inbox_item_id(integer, Required) — Inbox item id.
- Output
- The list_inbox_documents fields plus extracted{driver_name, license_number, date_of_birth, expiration_date, issue_date, document_side, vin, unit_number, plate, plate_state, service_date, vehicle}, match_method, sender{source, submitted_by, received_at}, filed_at, undone_at, content_type, view_url, view_url_expires_in_seconds, masking, data_notice.
- Data exposed
- Extracted document fields, the sender (for example the email address a document was forwarded from), vehicle identifiers and a signed link to the file (valid 10 minutes). License numbers are masked to the last 4 and dates of birth are withheld. Scope: Your account only.
- Classification
- Read
- Sensitive
- Yes — see Data exposure
- Side effects
- None on your account. Creates signed links to stored files that expire after 10 minutes.
- Annotations
- readOnlyHint: true · destructiveHint: false · openWorldHint: false
26. list_test_orders
The account's Quest drug/alcohol test orders and DOT physicals with status, lab stage and dates.
Requires: Drug and alcohol testing (C/TPA consortium or Testing Only)
- Inputs
status(string, Optional) — Exact order status (case-insensitive).driver_id(integer, Optional) — Only this driver.limit(integer, Optional) — 1–200. Default 50.
- Output
- orders[] (order_id, kind: drug | physical, driver_id, driver_name, test_category, test_type, reason, status, stage, created_at, collected_date, completed_date, der_sign_off_needed, error_message), count, note, data_notice.
- Data exposed
- Driver names and order details. Test results are never returned, but der_sign_off_needed is true only for an order whose result was flagged for Medical Review Officer review (a non-negative result). Scope: Your account only.
- Classification
- Read
- Sensitive
- Yes — see Data exposure
- Side effects
- None
- Annotations
- readOnlyHint: true · destructiveHint: false · openWorldHint: false
27. list_open_random_selections
Open random drug/alcohol selections already released to the carrier.
Requires: C/TPA consortium
- Inputs
- None
- Output
- selections[] (selection_id, driver_id, driver_name, test_type, period, status, due_date, order_id, order_status, driver_notified), count, note, data_notice.
- Data exposed
- Driver names and selection details. Selections are never shown before their release time. Scope: Your account only.
- Classification
- Read
- Sensitive
- No
- Side effects
- None
- Annotations
- readOnlyHint: true · destructiveHint: false · openWorldHint: false
28. list_pending_der_signoffs
Test orders flagged for Medical Review Officer review with no Designated Employer Representative sign-off recorded yet.
Requires: Drug and alcohol testing (C/TPA consortium or Testing Only)
- Inputs
- None
- Output
- pending[] (order_id, driver_id, driver_name, test_category, ordered_at, mro_verified_at), count, note, data_notice.
- Data exposed
- Driver names and dates. The result is not returned, but an order appears here only when its result was flagged for MRO review (a non-negative result). Scope: Your account only.
- Classification
- Read
- Sensitive
- Yes — see Data exposure
- Side effects
- None
- Annotations
- readOnlyHint: true · destructiveHint: false · openWorldHint: false
Data exposure
- Driver tools (get_drivers_list, get_driver_compliance, get_expiring_documents, and fetch with
driver:ids) return driver names, hire dates and compliance status. They do not return Social Security numbers, license numbers, email addresses, phone numbers or drug/alcohol test results. - Loads (list_loads, dispatch_stats, fetch with
load:ids) return rates, miles, commodity and status, with no shipper, consignee or broker names or contact details. - Drug testing (testing_summary) returns order counts by status only. For accounts with drug and alcohol testing, list_test_orders and list_pending_der_signoffs return orders by driver. They never return test results, but an order marked as needing a DER sign-off, or listed as pending sign-off, is one whose result was flagged for Medical Review Officer review.
- Carrier tools (carrier_lookup, carrier_safety, verify_carrier, carrier_record, carrier_insurance) use public FMCSA data. Only the USDOT or MC number is sent to FMCSA; no account data is. verify_carrier, carrier_record and carrier_insurance cache public carrier responses on FleetCollect servers (used for 6 hours, deleted after at most 7 days).
- fetch with review ids (
item:,form:,application:,inbox:) returns uploaded-document details and form answers for accounts whose plan includes DQF review. A driver application includes the applicant's address, phone, email, employment, address and accident history and answers to the application questions. Social Security numbers are reduced to the last 4 digits, license numbers are masked to the last 4 and dates of birth are withheld. Document view links expire after 10 minutes. - list_auditor_links returns the URL of each active auditor link. Anyone with an active URL can open that auditor view until the link expires.
- list_ai_changes returns summaries of changes that can name drivers and, for messages, the phone number or email a message was sent to.
Errors and status handling
Tool failures return a normal MCP result with isError: true and a JSON text body {"error": "<plain-English message>"}. Authentication and protocol problems use HTTP status codes and JSON-RPC error objects.
| Case | Response |
|---|---|
| No Authorization header | HTTP 401, JSON-RPC error -32001 "Missing Bearer token", with WWW-Authenticate: Bearer resource_metadata="https://app.fleetcollect.net/.well-known/oauth-protected-resource" |
| Unknown, revoked or expired token or API key; subscription not active or trialing; or the team seat that created the credential was removed | HTTP 401, JSON-RPC error -32001 "Invalid token or inactive subscription", same WWW-Authenticate header. Refresh the OAuth token or reconnect. |
| Rate limit exceeded | HTTP 429 with a Retry-After header. On /mcp the body is JSON-RPC error -32029 "Rate limit exceeded: 120 requests per minute for this credential. Retry after <n> seconds." with data.retry_after; on OAuth endpoints {"error": "rate_limited", "error_description": ...}. |
| Body is not valid JSON | HTTP 400, JSON-RPC error -32700 "Parse error" |
| Malformed JSON-RPC request | JSON-RPC error -32600 "Invalid JSON-RPC 2.0 request" |
| Unknown method | JSON-RPC error -32601 "Method not found: <method>" |
| tools/call without a tool name | JSON-RPC error -32602 "Missing tool name" |
| Unknown tool name | Tool result, isError true: "Unknown tool: <name>" |
| Missing required argument | Tool result, isError true: "Invalid arguments for <tool>" |
| Driver, load or id not found | Tool result, isError true, e.g. "No driver found matching <name>", "Driver not found", "IFTA driver not found", "Load not found", "Invalid id. Use an id from search results.", "Unknown id kind. Use an id from search results." |
| Invalid or missing DOT/MC | Tool result, isError true: "Provide a valid USDOT (dot) or MC number (mc)" (carrier_safety: "Provide a valid USDOT number (dot)"). verify_carrier instead returns verdict "insufficient_data" with that headline and isError false. |
| Carrier not on file | "Carrier not found" (carrier_lookup, carrier_record); "No FMCSA record found for USDOT <n>." (carrier_insurance; verify_carrier returns it as an insufficient_data headline). |
| FMCSA unavailable | Tool result, isError true: "FMCSA request timed out" (8-second timeout), "FMCSA request failed", or "FMCSA returned <status>" (carrier_lookup, carrier_safety). carrier_record and verify_carrier may report the carrier as not found when FMCSA is unreachable and nothing is cached. |
| Feature not on the plan (fetch review ids) | Tool result, isError true, e.g. "This requires the dqf feature on the account's plan." |
| Any other failure inside a tool | Tool result, isError true, with a short message such as "Failed to retrieve loads" or "<tool> failed"; unexpected crashes return JSON-RPC error -32603 "Tool <name> failed". |
Rate limits
| Endpoint | Limit | Counted per |
|---|---|---|
| POST /mcp | 120 requests per minute | Credential (each API key and each OAuth access token has its own counter); requests without a credential are counted per IP address |
| POST /oauth/token | 120 per hour | IP address |
| /oauth/authorize | 60 per hour | IP address |
| POST /oauth/revoke | 120 per hour | IP address |
| POST /oauth/register | 20 per hour | IP address |
| GET /.well-known/oauth-* | 500 per hour and 5,000 per day | IP address |
Limits use fixed windows (the minute, hour or day) and one shared counter across all FleetCollect servers. A limited request receives HTTP 429 Too Many Requests with a Retry-After header giving the seconds until the window resets. On /mcp the body is a JSON-RPC error (code -32029) with data.retry_after; on the OAuth endpoints it is {"error": "rate_limited", "error_description": "…"}.
Questions: info@fleetcollect.net. Privacy: AI assistants and connectors.