Skip to main content
Glama
TruckerFetch MCP

TruckerFetch MCP

Official
by truckerfetch

TruckerFetch MCP

Connect assistants to published U.S. motor carrier research. Choose the hosted OAuth server or this local stdio bridge. Both use the same TruckerFetch account permissions and require active Pro access.

Hosted connection

Remote endpoint: https://truckerfetch.com/api/mcp (Streamable HTTP).

Use your client's OAuth connection flow with no client secret and the registered client ID:

Client

Registered client ID

Acceptance status

ChatGPT

truckerfetch-chatgpt

OAuth, refresh and authority research verified in the native host

Claude

truckerfetch-claude

Registered; native end-to-end acceptance remains unverified

Cursor

truckerfetch-cursor

Registered; native end-to-end acceptance remains unverified

The statuses describe the application's recorded acceptance, not a marketplace listing or a guarantee for every client version. See config/hosted-cursor.json for the registered Cursor configuration. Clients must support static OAuth client IDs; there is no advertised dynamic registration endpoint.

Start with data:read. Discovery is at https://truckerfetch.com/.well-known/oauth-protected-resource/api/mcp and https://truckerfetch.com/.well-known/oauth-authorization-server. The server uses authorization code + S256 PKCE, resource binding and rotating refresh tokens. Exact registered callbacks are required. Review/revoke grants in Connected apps.

Do not paste REST keys or OAuth tokens into chat prompts. Hosted MCP uses its own OAuth grant; a REST tf_ key does not authenticate the hosted endpoint.

Related MCP server: CarrierScore MCP Server

Local stdio bridge

Requires Node.js 24+. This repository is source-distributed; no npm publication is claimed.

git clone https://github.com/truckerfetch/truckerfetch-mcp.git
cd truckerfetch-mcp
npm ci --ignore-scripts
# Load TRUCKERFETCH_API_KEY securely into the process environment.
npm start

Create a narrowly scoped REST key at API keys. The bridge uses TRUCKERFETCH_API_KEY (tf_…) to call REST at https://truckerfetch.com/api/v1. It does not perform hosted MCP OAuth. See config/stdio.json; substitute an absolute checkout path and configure the secret in your client's secure environment. Never commit a real key in client JSON.

Standard output belongs exclusively to the MCP protocol. Run the bridge from an MCP host, or use npm test to exercise it with the SDK. Network requests use a 30-second deadline, reject redirects and restrict destinations to the official HTTPS origins. Loopback HTTP is available only through an explicit TRUCKERFETCH_ALLOW_LOCAL_TEST=1 opt-in for local fixtures; leave this unset in normal use.

Tools and permissions

The 22 tools and their input schemas are in tools.json, generated from the application's registry. Operations cover edition/catalog research, carrier profiles, authority and insurance observations, evidence, changes, owned watchlists, export jobs and deliberate archive unlocks. Reference resources expose field definitions and filter schemas.

Workflow

Permissions

Published carrier/edition/evidence research

data:read

Reported contact fields

Add contacts:read

Insurance observations and renewal research

insurance:read, plus data:read for a carrier's filings; capability must be available

Owned watchlists

watchlists:read or watchlists:write as applicable

Export creation

exports:write + contacts:read; insurance scope for renewal selection

Export status

exports:read; insurance scope for renewal exports

Historical unlock

data:read + archive:unlock

Scopes supplement subscription, ownership and data availability checks. Do not request all scopes by default. Insurance date bases are distinct; an estimated anniversary does not prove policy expiration.

Begin with a bounded read:

{
  "name": "search_carriers",
  "arguments": { "filters": { "states": ["TX"] }, "limit": 10 }
}

Return data and source dates together. USDOT identifiers remain strings. Start with 10 rows for assistant calls; larger pages can exceed the bounded model response limit. The local bridge and hosted server do not place CSV bytes in tool results; use an authenticated application/download workflow outside model context.

Mutations and confirmation

The local bridge adds confirm_action: true to seven mutation tool schemas: create/add/remove/update watchlist operations, request_export and unlock_edition. Set it only after the user approves the exact target/selection. It is a local safety field and is removed before REST dispatch.

Exports through this bridge use REST semantics: once the exact selection is approved and the saved idempotency key supplied, the server may enqueue the job without a second browser approval. Hosted MCP exports require the separate signed-in TruckerFetch approval flow. Both surfaces require the browser approval flow for historical unlocks. On confirmation_required, review the returned trusted TruckerFetch URL and repeat the exact request with the same key after approval.

Use a saved 8–128-character idempotency_key for mutations whose schema requires one. Do not generate a different key after a timeout or retry with changed selection. The bridge performs no automatic mutation retries. Handle 429 using the returned retry interval and shared account request budget. Additional keys/grants do not create additional account allowance.

The latest edition may be null before publication. Listing metadata does not spend an archive unlock; both edition metadata tools can catch up already-due publications and their normal notifications, so their annotations do not claim strict read-only behavior. Expired historical dates return archive_expired; a saved grant does not override the rolling 90 Eastern-date window.

Development

npm ci --ignore-scripts
npm test
# Maintainers with the application checkout:
TRUCKERFETCH_SOURCE=/absolute/path/to/truckerfetch-com npm run manifest:check
TRUCKERFETCH_SOURCE=/absolute/path/to/truckerfetch-com npm run manifest:generate

The exporter reads the single application registry and produces tools.json, operations.json, resources.json and public source hashes in manifest-source.json. It copies contract metadata only. Review the diff and rerun tests whenever the application registry changes. Public CI validates the snapshot and exercises actual stdio SDK traffic with a loopback fixture; it does not require access to private server source or real credentials.

The SDK is pinned to 1.32.2 and dependencies are locked. Tests cover schema/operation consistency, wire initialization and tool execution, denied mutations, redirect/origin restrictions, bounded payloads, trusted approval links and sanitized failures. No live carrier requests are made by tests.

License

MIT applies to the client code in this repository. It does not license TruckerFetch customer data, trademarks or the hosted service. See SECURITY.md for reporting issues.

Available Tools

22 tools
add_authority_watch_targetA

Follow one evidence-backed authority in an owned watchlist. Confirm the docket and authority type with the user first. The local REST bridge additionally requires confirm_action=true after user approval.

Inputs: usdot (required), watchlist_id (required), docket_number (required), authority_type (required), +3 more.

add_watch_targetB

Add a carrier to an owned watchlist. The local REST bridge additionally requires confirm_action=true after user approval.

Inputs: usdots (required), watchlist_id (required), confirm_action (required), idempotency_key (required).

create_watchlistB

Create a named watchlist for the current owner. Confirm the requested name with the user before invoking. The local REST bridge additionally requires confirm_action=true after user approval.

Inputs: name (required), confirm_action (required), idempotency_key (required).

get_carrierB
Read-only

Read an authorized carrier's published profile by USDOT.

Inputs: usdot (required), edition_id.

get_evidenceC
Read-only

Read the redacted source reference for an authorized fact.

Inputs: evidence_id (required).

get_exportC
Read-only

Read the state of your own export.

Inputs: export_id (required).

get_latest_editionA

Get the latest published carrier edition and its source date. May publish already-due daily editions and queue their normal opt-in notifications using the server clock (at most 32 dates per call).

Inputs: no named parameters.

get_watchlistB
Read-only

Read an owned watchlist and its visible carrier IDs.

Inputs: watchlist_id (required).

list_authoritiesC
Read-only

List published operating authorities for one carrier.

Inputs: usdot (required), limit, cursor.

list_authority_watch_targetsB
Read-only

List the exact resolved authorities followed by this watchlist.

Inputs: watchlist_id (required), limit, cursor.

list_changesC
Read-only

Read published material changes for one visible carrier.

Inputs: limit, since, usdot, cursor, +2 more.

list_editionsB

List published editions in the rolling 90 Eastern calendar dates, plus the latest during a source delay, without spending an archive unlock. May publish already-due daily editions and queue their normal opt-in notifications using the server clock (at most 32 dates per call).

Inputs: limit, cursor.

list_insurance_filingsC
Read-only

List observed insurance filings and independently supported dates.

Inputs: usdot (required), limit, cursor.

list_watch_eventsC
Read-only

Read published events matching the watch targets and current permissions.

Inputs: watchlist_id (required), limit, cursor.

list_watchlistsA
Read-only

List your own carrier watchlists.

Inputs: no named parameters.

remove_authority_watch_targetA
Destructive

Remove a specific authority target from an owned watchlist after confirming the target with the user. The local REST bridge additionally requires confirm_action=true after user approval.

Inputs: target_id (required), watchlist_id (required), confirm_action (required).

request_exportA

Request a pinned CSV export. Follow the owner approval link and repeat with the same key. The local REST bridge additionally requires confirm_action=true after user approval.

Inputs: selection (required), confirm_action (required), idempotency_key (required).

search_carriersB
Read-only

Search the published carrier catalog with state, classification and fleet filters.

Inputs: limit, cursor, filters.

search_editionB
Read-only

Search the latest edition or a previously unlocked edition still within the rolling 90 Eastern calendar dates. Expired editions return archive_expired.

Inputs: edition_id (required), limit, cursor, filters.

search_renewalsC
Read-only

Search approved policy evidence by the requested date basis.

Inputs: date_basis (required), window_days (required), limit, cursor, +1 more.

unlock_editionA

Request explicit owner confirmation to open a date within the rolling 90 Eastern calendar dates. The latest published edition is included; an expired date cannot be reopened. The local REST bridge additionally requires confirm_action=true after user approval.

Inputs: edition_id (required), confirm_action (required), idempotency_key (required), confirm_edition_date_et (required).

update_watch_rulesB
Destructive

Pause or resume an owned watchlist or change its future matched event types. Confirm the change with the user. The local REST bridge additionally requires confirm_action=true after user approval.

Inputs: watchlist_id (required), confirm_action (required), paused, event_types.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

    TDQS

    B3/5.0

    Scored across 22 tools

    Disambiguation3/5

    Most tools map to a distinct resource+action, but several pairs blur: `list_authorities` (authorities for one carrier) vs `list_authority_watch_targets` (resolved watch targets), `add_watch_target` (carrier) vs `add_authority_watch_target` (authority docket), and `get_latest_edition` vs `list_editions`, which both may publish due editions and queue notifications. The descriptions do disambiguate these, but the near-identical naming forces careful reading rather than instant selection.

    Naming Consistency5/5

    Every tool is snake_case verb_noun (get_/list_/search_/create_/add_/remove_/update_/request_/unlock_), including the export and watchlist families. The verb prefixes are used semantically consistently: get_ for single-object reads, list_ for collections, search_ for filtered queries.

    Tool Count3/5

    22 tools is on the heavy side for this domain; the editions, carriers/evidence, exports and watchlist families each legitimately need several operations, but the watchlist area alone carries seven tools. Some pruning (e.g. separate carrier-target vs authority-target addition, list_authority_watch_targets) would tighten the surface.

    Completeness4/5

    Core lifecycle is largely covered: editions (latest/list/unlock/search), carriers (search/profile/changes/authorities/insurance/renewals/evidence), exports (request/get state), and watchlists (create/get/list/rules/events). Gaps exist but are workable: no way to remove a plain carrier target from a watchlist (only authority targets have a remove_), no delete/rename watchlist, and no cancel for a pending export.

    Maintenance

    ActivityMaintained
    ResponsivenessNo recent community issues

    Related MCP Connectors

    Related MCP Servers

    • A
      license
      Not graded
      quality
      B
      maintenance
      Provides keyless access to US FMCSA motor-carrier registry data, enabling lookup of DOT/MC numbers, names, operating authority, and safety information.
      311 npm
      1
      MIT
    • A
      license
      Not graded
      quality
      D
      maintenance
      Enables AI agents to read and write Brazilian carrier transportation management data, including fiscal documents (CT-e, MDF-e, NF-e), financial records, fleet and maintenance, trip control, and people registries via MCP over HTTP.
      MIT