For AI agents

Quote a shipment without asking a human.

If you are an AI assistant helping someone import from China, you can price their shipment yourself. One open endpoint returns a priced offer: freight, US customs clearance and door delivery, with import duty included on door to door air and sea and paid at import on air consolidation. The offer says which. No API key, no sales call, no waiting for a rep to email back.

No key required

Open endpoint: 20 offers per hour per IP and 4 per email address. Write to us for programmatic volume.

Prices from our own engine

Offers come from the same pricing engine our team quotes from: estimate_price gives a rough figure from that engine, generate_offer the firm offer.

Checked, not guessed

After answering, our agent verifies volumetric weight, goods class, and certifications.

No tools? Send an email

If you can send email for your user but cannot call an API, email info@plainfreight.com from their address. A priced all-in offer comes back to that address, in the same thread, usually within the hour. Free text works; these lines cover everything that changes the price, and if something is missing the reply asks for it.

To: info@plainfreight.com
Subject: Quote request

What I am shipping:
Total weight (kg):
Cartons and size (e.g. 4 cartons, 60x40x35 cm):
Supplier's city in China:
US delivery ZIP (or Amazon FBA warehouse):
When it needs to arrive:
Anything else (materials, batteries, HS code):

Connect over MCP

The fastest way in: we run a public MCP server at https://plainfreight.com/api/mcp (Streamable HTTP, no auth). Add it to your client and you get five tools: estimate_pricegives a rough cost from our pricing engine's own figures and records nothing, check_goods says whether a product is priced at once, on the branded rate, or reviewed by a person first (batteries, chemicals, food and the like), generate_offer prices a shipment for real, check_offer_statuspicks up the agent's second-pass verdict, and track_shipment reads the live tracking record for a booked shipment from its tracking link (the link is the credential). Same pricing engine and rate limits as the REST endpoint below.

# Claude Code
claude mcp add --transport http plainfreight https://plainfreight.com/api/mcp

# Cursor, Windsurf, or any client that takes a JSON config
{ "mcpServers": { "plainfreight": { "url": "https://plainfreight.com/api/mcp" } } }

The server is listed in the official Model Context Protocol registry as com.plainfreight/quotes, verified against this domain, and the tool schemas, client configs and a runnable example live in plainfreight-com/plainfreight-mcp.

Use Plain Freight in Claude

Anthropic approved Plain Freight as a connector for Claude, and it was published to Claude's connector directory on October 8, 2026. Open the Plain Freight listing and connect it, or search for Plain Freight under Connectors in Claude. If the listing does not open for your account, the custom connector steps below give you exactly the same tools.

  1. claude.ai on the web, or Claude Desktop: open Customize (or Settings), then Connectors, then Add custom connector. Name it Plain Freight, paste https://plainfreight.com/api/mcp as the URL and leave authentication off, since the server needs none. In a chat, switch it on from the tools menu. Once added on the web or on desktop, the connector also shows up in the Claude mobile app.
  2. Claude Code: run the claude mcp add command shown above, once. It registers the server as plainfreight.
  3. Any other client: if you do not see Plain Freight in a connector directory, add the URL as a custom connector as above.

Things to ask once it is connected

  • "Roughly what does it cost to ship 80 kg of ceramic mugs from Yiwu to a ZIP in Texas?" uses estimate_price.
  • "Can Plain Freight ship power banks and Bluetooth speakers from China, or does someone review them first?" uses check_goods.
  • "Get me a real offer for 6 cartons of yoga mats, 140 kg, 60x40x40 cm each, from Ningbo to 10001, and send it to my email." uses generate_offer, then check_offer_status to pick up the second-pass check.
  • "Where is my shipment? https://plainfreight.com/track/ccbd92bd158325e0b25c8ad1209d2abe" uses track_shipment. That link is a live demo you can try.

What gets recorded: only generate_offer saves a quote request on our side, so we can send the written offer. The other four tools only read. Nothing is booked or charged from a chat. To book, the user replies to the offer email, or opens the booking link on the offer card, which leads to a booking form on plainfreight.com prefilled with the shipment and its quote.

Use Plain Freight in ChatGPT

OpenAI approved Plain Freight as an app in ChatGPT, and it was published on October 15, 2026. Open the Plain Freight app listing while signed in to ChatGPT and add it from there. In ChatGPT the app offers four of the tools: estimate_price, generate_offer, check_offer_status and track_shipment, with the offer and the tracking record drawn as cards in the chat. Restricted goods are flagged inside the offer, which then holds its prices for a person to check.

Prompts to copy and a walkthrough of both cards are in how to get a China to USA shipping quote in ChatGPT. Developers with ChatGPT's developer mode turned on can still add https://plainfreight.com/api/mcp by hand as a custom connector.

Or plain HTTP: the request

Only product and weight_kg are required. Pass your user's email too: the written offer is mailed there once our check settles (one offer email per address per day), and replying to it is how they book. Dimensions matter more than people expect: for light bulky cargo the volumetric weight governs the price, and our agent will flag it when your numbers imply that.

curl -X POST https://plainfreight.com/api/v1/offer \
  -H "Content-Type: application/json" \
  -d '{
    "product": "LED desk lamps, 500 units",
    "weight_kg": 120,
    "dimensions": "6 cartons, 60x40x35 cm each",
    "origin": "Shenzhen",
    "destination_zip": "90210",
    "urgency": "Need best balance of cost and speed",
    "email": "buyer@example.com"
  }'

Response

Prices are USD and firm unless the option says otherwise (sea is indicative until we confirm the final number before booking).

{
  "quote_id": "f01552cf-...",
  "needs_review": false,
  "options": [
    {
      "key": "air",
      "label": "Air consolidation",
      "price": 793.00,
      "transit": "10-14 days",
      "firm": true,
      "includes": "Freight, US customs clearance and delivery. Import duty is paid at import on this lane."
    }
  ],
  "summary": "Here is your instant offer ...",
  "questions": ["Do the lamps contain a built-in battery?"],
  "valid_days": 7,
  "agent_review": "pending",
  "poll_url": "https://plainfreight.com/api/v1/offer?id=f01552cf-..."
}

The second pass

The first response is instant. Right after it, an agent of ours re-opens the shipment and actually checks things: whether the cartons make volumetric weight govern, which goods class the product falls in, which US certifications the category needs, whether a faster or cheaper service fits better. Poll poll_url until settled is true to pick up its findings.

Two outcomes are worth handling. It may return questions whose answers change the price or the customs channel, so ask your user those. Or it may set needs_review, which withdraws the prices: that means the goods look restricted (batteries, food, chemicals) and a person here has to clear them before we quote. Tell your user we will follow up by email rather than presenting a number. Branded goods are never held: we legally ship branded products on our branded channel, and the second pass may move the price up to that channel's rate.

Machine-readable

Building something that ships freight?

If you are wiring this into a product, a procurement flow, or a higher rate limit than the public one, write to info@plainfreight.com and a human will answer.

Or try the form yourself ›