# Query US Bill of Lading Records with an MCP Server or CLI

*Source: https://eximagent.ai/blog/query-bill-of-lading-records-mcp-cli · Published: October 27, 2026 · Category: Artificial Intelligence*

> Bill of lading data shows who shipped what, to whom and through which port. Most guides explain what it means. This one shows a real record, field by field, and how to pull records into your AI agent or a script with the EximAgent MCP…

Bill of lading data shows who shipped what, to whom and through which port. Most guides explain what it means. This one shows a real record, field by field, and how to pull records into your AI agent or a script with the EximAgent MCP server or CLI. It also shows how to tell when the data can't answer your question.

If you want the business side first, read [bill of lading data: what it reveals about buyers](https://eximagent.ai/blog/bill-of-lading-data-what-it-reveals-about-buyers) and [what customs data can and cannot tell you](https://eximagent.ai/blog/customs-data-limitations).

## Set up (2 minutes)

```bash
curl -fsSL https://cli.eximagent.ai/install | sh

irm https://cli.eximagent.ai/install.ps1 | iex

eximagent login
```

For an agent, add the MCP server (`https://mcp.eximagent.ai/mcp`):

```bash
claude mcp add --transport http eximagent https://mcp.eximagent.ai/mcp --scope user
```

Other clients are covered in the [MCP docs](https://eximagent.ai/docs/integrations/mcp). It's free to start, and you sign in with Google, so there's no key to paste.

## Pull records for a product and destination

```bash
eximagent shipments search --hs6 940511 --dest US
```

In an agent, ask: *"Show me recent US import records for HS 940511."*

## What one record contains

From a US CBP import record returned on 27 Oct 2026 (company names removed):

| Field | What it tells you | Watch out for |
| --- | --- | --- |
| `recordId` | Stable ID for fetching the full record later | — |
| `shipmentDate`, `arrivalDate` | When the goods left and when they arrived | Some records list a shipment date after the arrival date. Treat the dates as filed, not as checked. |
| `exporterName`, `importerName` | The parties on the document | The consignee may be a forwarder or distributor, not the end buyer |
| `origin`, `destination` | Country lane | — |
| `hsCode` | Code on the filing | Manifest codes can be wrong (see below) |
| `productDescription` | Free-text goods description | Often the most useful field for checking the code |
| `quantity`, `weightKg` | Size of the shipment | Units vary |
| `fobUsd`, `customsValueUsd` | Declared value | Usually empty on US manifest data |
| `transportMode`, `portOfLoading`, `portOfUnloading`, `vesselName` | Route and carrier | — |
| `billOfLading` | The B/L number | — |
| `normalizationConfidence` | How sure the cleanup step is about the normalised fields | 0.875 on this record |

To see more about a single record:

```bash
eximagent shipments get --id <recordId> --view detail
eximagent evidence show --id <recordId> --normalized
```

`--view` also accepts `logistics`, `financials`, `parties` and `evidence`. `evidence show --normalized` puts the English-normalised fields next to the raw source record.

## A real example of why you read the description

Code says one thing, description says another — always check the description against the HS code.

In the same pull, one record filed under 940511 (LED ceiling luminaires) described its goods as **"DRILL DRIVER"**. The HS code on a manifest is whatever the filer entered. Before you count a company as a buyer of your product, check the description against the code.

## Read the coverage envelope before you conclude anything

Coverage status scale: covered, partial, limited, unavailable.

Every shipment query returns a `coverage` block next to the rows. For this query it said:

- `status: partial`
- Period: June 2023 to August 2026
- A note that only 306 of 1,628 rows in scope declared a shipment value, because US CBP is a manifest feed

The `status` field means:

| Status | What you may conclude |
| --- | --- |
| `covered` | Strong evidence: the query saw the lane properly |
| `partial` | Directional only. Trends are usable, absolutes are not |
| `limited` | Directional, and weakly so |
| `unavailable` | Nothing usable for that query or period |

No rows doesn't mean no trade. It may mean the lane isn't visible. Report the coverage along with any finding. More detail is in [coverage and data sources](https://eximagent.ai/docs/concepts/coverage).

## Don't compute market metrics from raw rows

`shipments search` returns at most 1,000 rows per page. It's for browsing. For questions like "who buys repeatedly" or "is the price rising", use the signal commands, which aggregate over the full matching data on the server:

```bash
eximagent shipments buyer-recurrence --hs6 940511 --dest US
eximagent shipments market-signals --hs6 940511 --dest US
eximagent shipments price-trend --hs6 940511 --dest US
eximagent shipments route-signals --hs6 940511 --dest US
```

## From records to a shortlist

1. Pull records for your HS code and market.
2. Drop rows where the description doesn't match your product.
3. Use `buyer-recurrence` to find importers that buy repeatedly, not once.
4. Check each company's website and catalogue before contacting anyone.

If you want your AI team to do this end to end, EximAgent's Outbound teammate finds buyers and drafts the emails. Your own AI agent sends them from your own mailbox.

## FAQ

**Is US bill of lading data public?**
US CBP releases import manifest data used in these records (see [Electronic Vessel Manifest Confidentiality](https://www.cbp.gov/trade/automated/electronic-vessel-manifest-confidentiality) and [19 CFR 103.31](https://www.ecfr.gov/current/title-19/chapter-I/part-103/subpart-C/section-103.31); parties may request confidential treatment of names and addresses). That is why US records are often the most detailed. Coverage elsewhere varies, so check the envelope for every lane. More on reading the envelope is in [coverage and data sources](https://eximagent.ai/docs/concepts/coverage).

**Why are values missing?**
US manifest records usually don't declare a value. The coverage note shows how many rows do.

**Can my AI agent query this directly?**
Yes. Add the MCP server, or in a chat app add the [connector](https://eximagent.ai/connectors), and ask in plain words.
