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, US domestic, 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": "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 two tools: get_parcel_quote prices a shipment, create_checkout_link hands the person a prefilled checkout to pay for the label. Inches and pounds on the way in, because that is how people describe boxes. Listed in the official MCP registry as com.smklog/parcel-quotes.
{"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 65 inch TV from 07102 to 90011?” The assistant calls get_parcel_quote and reads back USPS, UPS and FedEx 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 domestic only
Both ZIPs must be US. International and freight requests come 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, and carrier_amount states the carrier cost beneath it. Quote both to your user. 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.