For agents and developers

Live parcel rates, one POST away

The same engine that prices orders on this site answers plain HTTP. Describe an item in ordinary words and the packed box size and weight are estimated for you; give exact dimensions to skip the estimate. USPS, UPS and FedEx everywhere, DHL Express to Germany and Australia; no account, no key. Assistants can call it natively over MCP.

One request

POST https://quote-api.smklog.com/quote
Content-Type: application/json

{"product": "Yamaha FG800 acoustic guitar in a hard case",
 "quantity": 1,
 "from_postal_code": "07102",
 "to_postal_code": "30303"}

The answer carries up to five purchasable services. Each rate states three figures separately: amount is the checkout total a customer pays, carrier_amount is the negotiated carrier cost beneath it, and service_fee is the SMKlog fee between the two. Where a carrier publishes a retail counter price, retail_amount carries it. We would rather hand you all three numbers than have you discover the middle one later.

Exact dimensions skip the estimate: send length_cm, width_cm, height_cm, weight_kg and package_source: "manual". The full contract lives in the OpenAPI 3.1 description.

MCP for assistants

Streamable HTTP endpoint at https://quote-api.smklog.com/mcp with five tools. Inches and pounds on the way in, because that is how people describe boxes. Listed in the public MCP registry as com.smklog/parcel-shipping-rates.

get_parcel_quote

Live rates for one parcel

Describe the item in plain words and the packed box size and weight are estimated for you — or give exact dimensions to skip the estimate. Up to five purchasable USPS, UPS, FedEx and DHL Express services come back, each a complete checkout total with the carrier cost beside it.

Takes product, from_zip, to_zip; optional dimensions and weight. Returns live rates.

create_checkout_link

Checkout, handed to a person

Prices the shipment live and returns a link that opens the calculator prefilled. The person confirms the shipping consents and pays on the hosted checkout page — an assistant never pays on its own, and this tool never charges anything.

Takes product, from_zip, to_zip; optional service. Returns the amount, a checkout URL and a session_id.

get_checkout_status

How the handoff ended

Where a checkout session stands: link made, checkout opened, paid, label bought with the tracking number, delivered. Read from the order record, so it costs no carrier call and never carries names, addresses or emails. Sessions answer for 30 days.

Takes session_id. Returns the status and, once the label exists, the tracking number.

track_parcel

Follow a shipment bought here

Current delivery status, the latest scan events and the estimated delivery date when the carrier reports one — straight from the shipment record, with no detour to a carrier site. Works for labels bought on SMKlog, not as a universal tracker.

Takes tracking_number. Returns the status and scan timeline.

get_price_index

Monthly shipping price index

The SMKlog parcel shipping price index as data: six everyday boxes priced to five US cities through the same live pipeline that prices real shipments. Reference numbers for “what does shipping cost right now” — reading them spends no quote allowance.

Takes optional month (YYYY-MM). Returns the cheapest service per box and lane, every rate behind it, and the basket average.

{"jsonrpc": "2.0", "id": 1, "method": "tools/call",
 "params": {"name": "get_parcel_quote",
            "arguments": {"product": "65 inch flat screen TV in original box",
                          "from_zip": "07102", "to_zip": "90011"}}}

Discovery: server card, API catalog (RFC 9727), agent skills index. In browsers with WebMCP support the same tools register on this site’s pages via navigator.modelContext, so an in-browser agent can price and track without leaving the page. A shipment past parcel limits comes back as mode: "freight_manager" with no rates; the honest next step is the freight review form, where a person prices it.

Connect your assistant

Nothing to install and no key to request. Point any MCP-capable assistant at the endpoint below and ask it what a box costs to ship.

Claude Code

One command in your terminal:

claude mcp add --transport http smklog \
  https://quote-api.smklog.com/mcp

Claude Desktop

Settings → Connectors → Add custom connector, then paste the endpoint URL:

https://quote-api.smklog.com/mcp

Cursor, VS Code, Windsurf

Add the server to mcp.json (~/.cursor/mcp.json for Cursor, .vscode/mcp.json for VS Code):

{"mcpServers": {
  "smklog": {
    "type": "http",
    "url": "https://quote-api.smklog.com/mcp"
  }
}}

ChatGPT and other clients

Add a custom MCP connector with the same URL. No authentication: leave the token field blank.

https://quote-api.smklog.com/mcp

Then just ask, in plain words: “What does it cost to ship a Samsung 65-inch Crystal UHD TV from 07102 to 90011?” The assistant calls get_parcel_quote and reads back USPS, UPS, FedEx and DHL side by side. Ask it to buy the label and it calls create_checkout_link, which returns a checkout page for you to confirm and pay — an agent never pays on its own. Building your own client instead? The plain HTTP endpoint above needs no MCP at all.

The rules, plainly

Rate limits are real

Hourly, per client, and shared between /quote and /mcp, so switching protocol does not add capacity. Every quote hits live carrier rating and costs us money: one call per shipment, cache on your side, never poll.

US origin, five destinations

The origin ZIP must be US. Destinations are the US, Canada, the UK, Germany and Australia; anything else, and any freight request, comes back unpriced by design, routed to a human review instead of a wrong number.

Pricing, not purchase

The API answers what a parcel costs. Buying the label, address validation and restricted-item screening happen at the calculator.

Questions

Do I need an account or a key?

No for normal use: quoting and payment sessions are open, rate limited per client. Credentials exist for one case — an agent whose legitimate traffic outgrows the public limits gets its own hourly bucket via OAuth client_credentials. Registration is manual for now: see smklog.com/auth.md.

What does a call cost me?

Nothing. It costs us, though: every quote hits live carrier rating, so call once per shipment, cache the answer, and never poll.

Is the price the customer's final price?

The amount field is the complete checkout total with the SMKlog fee inside; the fee is itemized only on the checkout receipt. Where the carrier publishes a counter price for the same parcel, retail_amount states it beside the total, so you can show your user what they save. Prices move with carrier tariffs, so a quote is a snapshot, not a contract.

Can an agent buy the label too?

Not autonomously. The create_checkout_link tool (MPP intent "session") prices the shipment and returns a handoff URL that opens the checkout prefilled; the human confirms the shipping consents there and pays on Stripe hosted checkout. The agent prepares, the person pays.

What happens with a pallet or a crate?

The response comes back with mode freight_manager and no rates. That is deliberate: freight is priced by a person, and the right next step is the form at smklog.com/quote.