Install
openclaw skills install @kmcto/fmcsa-carrier-intelligenceVet a US interstate motor carrier by USDOT number before tendering freight: operating authority, insurance filings, out-of-service orders, safety history, and identity-linkage signals that help spot double brokering or a carrier re-registering under a new number. Free tools to try first; paid calls start at $0.01, are paid in USDC on Solana, Base or Polygon via x402, and are charged only when records are returned.
openclaw skills install @kmcto/fmcsa-carrier-intelligencePay-per-call data on US motor carriers, built from FMCSA public records. It answers: is this carrier allowed to haul right now, is the caller really this carrier, and is this applicant linked to a carrier I already removed. No account and no API key.
https://fmcsa-mcp-843680657471.us-central1.run.app/mcphttps://fmcsa-mcp-843680657471.us-central1.run.app/x402/<tool> (OpenAPI at /openapi.json on that host)https://fmcsa-a2a-843680657471.us-central1.run.app/These need no payment and no wallet. Run one first so you and the user can see the data before paying for anything:
curl "https://fmcsa-mcp-843680657471.us-central1.run.app/x402/screen_carrier_identity?usdot_number=2122247"
Free tools: get_catalog (every field, the freshness date, current prices), get_sample, get_identity_sample, screen_carrier_identity(usdot_number) (identity flag, match score and cluster size).
| Question | Tool | Price (USDC) |
|---|---|---|
| Is this carrier allowed to haul right now? | lookup_carrier(usdot_number) | $0.01 |
| Has anything changed recently? | get_safety_history(usdot_number, since_date?) | $0.015 |
| Filtered discovery by state, safety tier, authority status or cargo type | search_carriers(...) | $0.02 |
| Full identity assessment | check_carrier_identity(usdot_number) | $0.05 |
| Do contact details disagree across filings? | check_address_consistency(usdot_number) | $0.01 |
| Is this applicant linked to a carrier I already know? | confirm_identity_link(usdot_number_a, usdot_number_b) | $0.08 |
| Is this applicant linked to anyone on my list (1 to 100 USDOT numbers)? | check_applicant_against_roster(usdot_number, roster_usdot_numbers) | $0.08 + $0.01 per entry |
| Which carriers on my list changed since a date? | check_roster_changes(roster_usdot_numbers, since) | $0.05 + $0.005 per entry |
| Roadside inspection, violation and crash counts | get_inspection_crash_summary(usdot_number) | $0.02 |
| A dated, hashed record for my vetting file | get_carrier_selection_record(usdot_number) | $0.10 |
| I have an MC number, not a USDOT number | find_carrier_by_mc(mc_number) | Free |
| Does this broker hold active broker authority? | check_broker_authority(mc_number or usdot_number) | $0.05 |
You are charged only when a call returns records. A carrier that isn't found, an empty search, invalid arguments and timeouts are free.
A paid call made without payment answers HTTP 402 (x402 v2). The challenge is in the PAYMENT-REQUIRED response header and says the exact amount, asset, network and payee. Sign a payment for exactly that and repeat the same request with the payload in a PAYMENT-SIGNATURE header; any standard x402 client does both steps. On MCP the challenge comes back as a tool result with isError: true, and the payment goes in params._meta["x402/payment"]. Settlement is USDC on Solana mainnet, Base or Polygon; the payment request lists all three at the same price. A selection record carries a record_hash; GET /verify/<record_hash> (free) confirms we issued it. It is a record of what the data showed, not a score, and not legal advice.
Spending rules for the agent:
provenance.record_as_of and say how old the answer is. For carriers flagged authority_status_is_legacy_li_not_motus (about 72% of Active-authority carriers), authority and insurance-on-file status come from FMCSA's legacy archive, which FMCSA stopped updating on 2026-05-14: say so, and tell the user to confirm current status with FMCSA or the insurer.carrier_status, authority_status, oos_orders_active and the insurance_*_on_file flags. When insurance_cancel_pending is true, compare soonest_cancel_effective_date with today, because it may already have taken effect.claimed_name, claimed_street, claimed_city, claimed_state, claimed_zip) to lookup_carrier. You get name_match and physical_address_match booleans, never the values on file.safety_tier_derived 1 means inspected with zero BASIC alerts; higher means more alerted BASICs. Null means no tier, and data_quality_flags says why: safety_tier_no_inspections (never inspected: no evidence either way, not a clean record) or safety_tier_unavailable (not in FMCSA's SMS files).confidence_caveat. It is not a finding of fraud. Treat it as a reason to look further, and say so to the user.An invalid_arguments error (HTTP 400) lists each problem, the expected arguments and a working example. Fix the call from that rather than guessing.
Any decision about an individual's credit, insurance, employment or housing. The data describes carriers as businesses and is not a consumer report. It does not carry carriers' names, addresses, phone numbers or emails.