FMCSA Carrier Intelligence
US motor carrier safety, authority and identity-linkage checks from FMCSA data. Pay per call (x402).
我该使用它吗
质量与安全性
基于对工具定义和协议合规性的自动分析。
上下文开销
这是每次将服务器的工具加载到模型上下文窗口时所消耗的大致 token 数。数值越高,可用于其他任务的注意力就越少。
安装
一键安装
将以下内容添加到你的 `claude_desktop_config.json` 文件中:
{
"mcpServers": {
"fmcsa-carrier-intelligence": {
"url": "https://fmcsa-mcp-843680657471.us-central1.run.app/mcp"
}
}
}远程端点
https://fmcsa-mcp-843680657471.us-central1.run.app/mcpstreamable-http它能做什么
工具清单
工具(11)
🟢get_catalog
Free, unauthenticated dataset catalog. Describes every table this service sells, its fields, current pricing, and freshness. Read this before paying for anything.
输入模式
{
"type": "object",
"properties": {},
"title": "get_catalogArguments"
}🟢get_sample
Free, unauthenticated sample of carrier_profile rows. Lets a buying agent evaluate data quality before spending USDC on the paid tools.
输入模式
{
"type": "object",
"properties": {},
"title": "get_sampleArguments"
}🟢lookup_carrier(usdot_number, claimed_name, claimed_street, claimed_city, claimed_state, ...)
Look up a single carrier's current profile by USDOT number. Paid — you pay only when a call returns records; an exact-key miss is free. Returns every carrier_status (Active, Inactive, Pending) — check the carrier_status field, don't assume Active. Carries no contact information (legal_name, dba_name, addresses, phone, email — removed 2026-09-19, see schemas.CarrierProfile). The one legitimate use those fields served — confirming a carrier's claimed identity against records, e.g. to catch a carrier-identity-theft ("double brokering") attempt — is available instead via claimed_name (matched against legal_name OR dba_name) and claimed_street/ claimed_city/claimed_state/claimed_zip (matched against physical_address; supply any subset). Returns name_match/ physical_address_match as a boolean per claim actually supplied, `null` for a claim not supplied — never the value on file itself.
输入模式
{
"type": "object",
"properties": {
"usdot_number": {
"title": "Usdot Number",
"type": "integer"
},
"claimed_name": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Claimed Name"
},
"claimed_street": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Claimed Street"
},
"claimed_city": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Claimed City"
},
"claimed_state": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Claimed State"
},
"claimed_zip": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Claimed Zip"
}
},
"required": [
"usdot_number"
],
"title": "lookup_carrierArguments"
}🟢search_carriers(state, safety_tier, authority_status, cargo_type, include_inactive, ...)
Filtered carrier search. Paid — you pay only when a call returns records; a zero-row result is free, same as an exact-key miss. Defaults to Active carriers only — pass include_inactive=true to also see Inactive/Pending. Capped at 100 rows per response regardless of the requested limit; never a full-table dump. Carries no contact information (legal_name, dba_name, addresses, phone, email — removed 2026-09-19, see schemas.CarrierProfile) — a filterable, multi-result endpoint returning personal contact details for whoever matched a filter was the sharpest version of that risk in this product; use lookup_carrier's claimed_name/claimed_street/etc. if you need to confirm a specific carrier's claimed identity.
输入模式
{
"type": "object",
"properties": {
"state": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "State"
},
"safety_tier": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
],
"default": null,
"title": "Safety Tier"
},
"authority_status": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Authority Status"
},
"cargo_type": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Cargo Type"
},
"include_inactive": {
"default": false,
"title": "Include Inactive",
"type": "boolean"
},
"limit": {
"default": 20,
"title": "Limit",
"type": "integer"
}
},
"title": "search_carriersArguments"
}🟢get_safety_history(usdot_number, since_date)
Historical snapshots and changelog entries for a carrier. Paid — you pay only when a call returns records; an exact-key miss is free. changelog may legitimately be empty for a carrier without two distinct-date snapshots yet — a diff needs both. authority_types, oos_orders_active, insurance_bipd_on_file, insurance_cargo_on_file, insurance_bond_on_file, has_been_revoked, and last_revocation_date are null (not false/empty) on a history row recorded before 2026-09-02 — carrier_history wasn't tracking those fields yet, so null there means "not tracked on this date," not a negative answer. Likewise has_been_suspended/last_suspension_date are null before 2026-09-06, and has_authority_reinstated/last_reinstatement_date/ has_insurance_identity_mismatch are null before 2026-09-12. Carries no contact information (legal_name, dba_name, addresses, phone, email — removed 2026-09-19, see schemas.CarrierProfile); changelog excludes field_name in {legal_name, dba_name, phone, email} for the same reason — a changed value is still the value.
输入模式
{
"type": "object",
"properties": {
"usdot_number": {
"title": "Usdot Number",
"type": "integer"
},
"since_date": {
"anyOf": [
{
"format": "date",
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Since Date"
}
},
"required": [
"usdot_number"
],
"title": "get_safety_historyArguments"
}🟢screen_carrier_identity(usdot_number)
Free triage screen for a carrier: whether it's flagged under FMCSA's own chameleon-carrier methodology, how big its identity cluster is, and how many linked carriers carry a motive — with no member detail. Call check_carrier_identity (paid) for that. This is the entire discovery/sales motion in an agent-only channel, not a discount tier — free by design (Identity-API-Revision- 2026-09-06.md Section 1), so it never bills and never requires payment. By the same design, it withholds anything that identifies a linked carrier: no member USDOT number, no legal name, no link type, no identifier hash. A caller learns THAT there is something to look at here, not WHAT. confidence_caveat discloses the known ~6% artifact rate and that recall is not measurable in FMCSA's public data — read it, don't just check the flagged boolean. match_score_practical_ceiling is computed per carrier from which ARCHI terms were actually available for it, not a flat constant — most carriers cap out well below the theoretical 8.5. An unknown USDOT number returns a not_found error.
输入模式
{
"type": "object",
"properties": {
"usdot_number": {
"title": "Usdot Number",
"type": "integer"
}
},
"required": [
"usdot_number"
],
"title": "screen_carrier_identityArguments"
}🔴check_carrier_identity(usdot_number)
Full identity-linkage detail for a carrier: why it's flagged and how confident that is. Priced meaningfully above the free screen_carrier_identity — call that first if you only need the flag and a count. Never names or points at another carrier (redesigned 2026-09-18 — see schemas.IdentityAssessment's docstring): no linked USDOT number, legal name, or shared-identifier hash. A linked carrier's own identity was never this caller's to receive, and an unsalted hash of a low-entropy value like a phone number or address doesn't meaningfully withhold it from a determined party anyway (confirmed by reading Truckin's own hashing code). Every field here is either the subject carrier's own data or a derivative signal — a score, a match-term-type label (which *kind* of identifier matched, never the value), a count, a boolean. SSN and EIN matches carry weight 2.0 each in FMCSA's ARCHI methodology and are not present in public data; D&B is nominally weight 2.0 too but is only genuinely available for ~4% of carriers, and officer data (needed for the name x officer term) is missing for another ~15%. So score_provenance.match_score_ceiling is computed per carrier, not a flat 4.5 — most responses cap out at 2.5 or lower. It also states plainly that recall against FMCSA's own declared-predecessor label set is not measurable. flagged applies FMCSA's own ARCHI flag rule (match_score >= 1.5 AND a linked motive >= 1); it is not a fraud determination and must not be presented as one. Note flagged and match_score >= 1.5 are NOT the same condition — clustering requires 2+ independent identifier-type families to agree, so materially more carriers clear the score threshold than are ever flagged. Paid. A carrier with no linked carriers is a complete answer and bills; an unknown USDOT number is a free not_found.
输入模式
{
"type": "object",
"properties": {
"usdot_number": {
"title": "Usdot Number",
"type": "integer"
}
},
"required": [
"usdot_number"
],
"title": "check_carrier_identityArguments"
}🟢check_address_consistency(usdot_number)
How many distinct business addresses and phones this carrier reports across FMCSA's independent records of it (census registration, licensing and insurance filings, and its own self-reported crash records). Mailing addresses are excluded — differing from the physical address there is normal. Paid. Cheaper than either identity tool; one row, no graph.
输入模式
{
"type": "object",
"properties": {
"usdot_number": {
"title": "Usdot Number",
"type": "integer"
}
},
"required": [
"usdot_number"
],
"title": "check_address_consistencyArguments"
}🟢confirm_identity_link(usdot_number_a, usdot_number_b)
Confirms or denies that two carriers YOU ALREADY SUSPECT are linked in fact share an identity cluster — the lower-risk alternative to check_carrier_identity's removed linked_carriers field (see schemas.IdentityAssessment's docstring for why that was removed 2026-09-18). This never discloses a carrier's identity to a caller who didn't already have it: both usdot_number_a and usdot_number_b are supplied by you. It only ever answers "do these two specific carriers share a cluster?", never "who is linked to this carrier?" — call check_carrier_identity for that, which stops at a score and a count for exactly this reason. cluster_id is returned only when linked is true, and isn't new information even then — you could obtain the same value directly from either carrier's own check_carrier_identity or screen_carrier_identity response. usdot_number_a and usdot_number_b must differ (invalid_arguments, free — there is no comparison to make). Either number failing to resolve in carrier_identity_cluster is a free not_found, same as check_carrier_identity. Paid — pricier than check_carrier_identity, since it resolves two carriers' clusters per call, not one. A "not linked" result is a complete, valuable answer and bills the same as "linked", same reasoning as check_carrier_identity's cluster_size == 1.
输入模式
{
"type": "object",
"properties": {
"usdot_number_a": {
"title": "Usdot Number A",
"type": "integer"
},
"usdot_number_b": {
"title": "Usdot Number B",
"type": "integer"
}
},
"required": [
"usdot_number_a",
"usdot_number_b"
],
"title": "confirm_identity_linkArguments"
}🟢check_applicant_against_roster(usdot_number, roster_usdot_numbers)
Screens one applicant carrier against a roster of carriers you already do business with (or are vetting) — the batch generalization of confirm_identity_link, for the real-world case of catching a carrier that was previously cut from your network (revoked, suspended, or otherwise let go) trying to re-enter under a new USDOT number. usdot_number is the applicant; roster_usdot_numbers is your own list, supplied by you. Returns linked (true if the applicant shares an identity cluster with ANY roster member) and matched_roster_usdot_numbers (which ones, always a subset of what you supplied — never a carrier you didn't already name). roster_not_found lists any roster entries that simply don't resolve to a known carrier (still your own input, not a new disclosure). usdot_number's own cluster_id is always included, same as check_carrier_identity's convention — it's the applicant's own data, not something withheld pending a match. usdot_number must not also appear in roster_usdot_numbers, and roster_usdot_numbers must be a non-empty list of at most settings.roster_screen_max_size distinct entries (currently 100) — either violation is a free invalid_arguments; split a larger roster into multiple calls rather than expecting it to be truncated for you. An unresolved usdot_number (the applicant itself) is a free not_found, same as confirm_identity_link/check_carrier_identity. Paid, metered: price = price_check_applicant_against_roster_base + price_check_applicant_against_roster_per_entry * (the deduped roster size) — see get_catalog for current rates. A "not linked to anything on your roster" result is a complete, valuable answer and bills the same as a match, same reasoning as check_carrier_identity's cluster_size == 1.
输入模式
{
"type": "object",
"properties": {
"usdot_number": {
"title": "Usdot Number",
"type": "integer"
},
"roster_usdot_numbers": {
"items": {
"type": "integer"
},
"title": "Roster Usdot Numbers",
"type": "array"
}
},
"required": [
"usdot_number",
"roster_usdot_numbers"
],
"title": "check_applicant_against_rosterArguments"
}🟢get_identity_sample
Free, unauthenticated sample of identity/fraud responses, covering both screen_carrier_identity's free IdentityScreen shape and check_carrier_identity's paid IdentityAssessment shape. Lets a buying agent see the paid response shape and evaluate data quality before spending USDC on check_carrier_identity.
输入模式
{
"type": "object",
"properties": {},
"title": "get_identity_sampleArguments"
}社区
证据