{"name":"moltline-shipping","description":"Shipping and landed-cost math over MCP. Free: dim_weight, parcel_fit, landed_cost, freight_class. Premium (license): rate_card, free_shipping_threshold. Arithmetic on your own inputs — no carrier account, no rate contract, no live quotes.","url":"https://mcp.moltlinestudio.com/shipping","transport":"streamable-http","homepage":"https://moltlinestudio.com/servers.html","serverInfo":{"name":"moltline-shipping","version":"1.1.0"},"toolCounts":{"total":6,"free":4,"premium":2},"protocolVersion":"2025-11-25","protocolVersions":["2024-11-05","2025-03-26","2025-06-18","2025-11-25"],"pricing":{"freeTier":{"tools":4,"price":"0","currency":"USD","description":"Free forever. No account, no registration and no credentials are required to call them."},"details":"https://moltlinestudio.com/.well-known/pricing","terms":"https://moltlinestudio.com/terms.html","agentPayment":{"protocol":"x402","resource":"https://moltlinestudio.com/api","network":"eip155:8453","asset":"USDC","amount":"19000000","discovery":"https://moltlinestudio.com/.well-known/x402","description":"GET or POST the resource to receive an HTTP 402 carrying a machine-readable payment demand; retry with the transaction hash in the X-PAYMENT header and the licence key is returned in the response."},"premium":{"tools":2,"plan":"All-Access","price":"19.00","currency":"USD","period":"month","description":"One licence key unlocks the premium tools on every Moltline server. Billed monthly, cancellable at any time.","purchaseUrl":"https://moltlinestudio.com/#allaccess"}},"authentication":{"required":false},"tools":[{"name":"dim_weight","description":"Work out whether a parcel bills on its size or its weight. FREE.\n\nCarriers charge the greater of actual weight and dimensional weight, so a\nlight bulky box costs more than the scale suggests. Typical input\n{\"length\": 18, \"width\": 12, \"height\": 10, \"actual_weight\": 6} returns\n{\"cubic\": 2160.0, \"dim_weight\": 15.54, \"actual_weight\": 6.0,\n\"billable_weight\": 15.54, \"billed_on\": \"dimensional\", \"overage\": 9.54,\n\"divisor_used\": 139.0, \"note\": \"...\"}.\n\nUse when deciding whether a smaller box is worth the packing effort, or\nwhy an invoice exceeded the scale weight. Not for choosing a box from a\nlist of candidates — that is parcel_fit. Errors: on invalid, missing, or malformed input this tool never raises a protocol error — it returns {\"error\": \"<what is wrong and how to fix it>\"} (for example {\"error\": \"custom_divisor must be greater than 0 when divisor is 'custom'\"}). Every call is read-only and idempotent, so after correcting the input it is always safe to retry.","tier":"free","inputSchema":{"additionalProperties":false,"properties":{"length":{"exclusiveMinimum":0,"type":"number","description":"Longest side of the packed parcel, in inches (or centimetres\nwhen using a metric divisor). Must be greater than 0."},"width":{"exclusiveMinimum":0,"type":"number","description":"Second side, same unit as length. Must be greater than 0."},"height":{"exclusiveMinimum":0,"type":"number","description":"Third side, same unit as length. Must be greater than 0."},"actual_weight":{"exclusiveMinimum":0,"type":"number","description":"Scale weight in pounds (or kilograms with a metric\ndivisor). Must be greater than 0."},"divisor":{"default":"ups_daily","enum":["ups_daily","ups_retail","fedex","usps","metric_5000","metric_6000","custom"],"type":"string","description":"Which published divisor to apply. \"ups_daily\" is 139 and\n\"ups_retail\" is 166 cubic inches per pound, as UPS states them;\n\"usps\" is 166; the metric options are cubic centimetres per\nkilogram. Use \"custom\" to supply a contracted divisor."},"custom_divisor":{"default":0,"type":"number","description":"Your contracted divisor, used only when divisor is\n\"custom\". Must be greater than 0 in that case."}},"required":["length","width","height","actual_weight"],"type":"object"}},{"name":"parcel_fit","description":"Pick the smallest box an item actually fits in, allowing for padding. FREE.\n\nTries every rotation of the item against every box, so an item that only\nfits diagonally-oriented is still found. Typical input {\"item_length\": 10,\n\"item_width\": 6, \"item_height\": 4, \"box_options\": [[12, 9, 4], [14, 10,\n6]]} returns {\"fits\": [{\"box\": [14, 10, 6], \"cubic\": 840.0, \"slack\": [2,\n2, 0]}], \"best\": [14, 10, 6], \"rejected\": [...]}.\n\nUse when choosing packaging from stock. Not for what the carrier will bill\nonce a box is chosen — that is dim_weight. Errors: on invalid, missing, or malformed input this tool never raises a protocol error — it returns {\"error\": \"<what is wrong and how to fix it>\"} (for example {\"error\": \"box_options must contain at least one [l, w, h] box\"}). Every call is read-only and idempotent, so after correcting the input it is always safe to retry.","tier":"free","inputSchema":{"additionalProperties":false,"properties":{"item_length":{"exclusiveMinimum":0,"type":"number","description":"Item's longest side, in inches. Must be greater than 0."},"item_width":{"exclusiveMinimum":0,"type":"number","description":"Item's second side, same unit. Must be greater than 0."},"item_height":{"exclusiveMinimum":0,"type":"number","description":"Item's third side, same unit. Must be greater than 0."},"box_options":{"items":{"items":{"type":"number"},"type":"array"},"type":"array","description":"Candidate inner box dimensions, each a list of exactly\nthree positive numbers, e.g. [[12, 9, 4], [14, 10, 6]]."},"padding":{"default":1.0,"minimum":0,"type":"number","description":"Cushioning allowance added to every item side before the\ncomparison, in the same unit. Default 1.0; use 0 for a bare fit."}},"required":["item_length","item_width","item_height","box_options"],"type":"object"}},{"name":"landed_cost","description":"Total what a unit really costs once freight, duty and fees are in. FREE.\n\nDuty is applied to goods value, tax to goods plus duty plus freight — the\ncommon import treatment — and the order is spelled out in the response so\nyou can check it against your own broker's method. Typical input\n{\"unit_cost\": 8.5, \"quantity\": 200, \"freight_total\": 640, \"duty_pct\": 6.5,\n\"tax_pct\": 0} returns {\"goods\": 1700.0, \"duty\": 110.5, \"freight\": 640.0,\n\"tax\": 0.0, \"total_landed\": 2450.5, \"landed_unit_cost\": 12.25, ...}.\n\nUse before setting a price on imported stock. Not for the margin that price\nleaves you — that is the dropship server's margin_check. Errors: on invalid, missing, or malformed input this tool never raises a protocol error — it returns {\"error\": \"<what is wrong and how to fix it>\"}. Every call is read-only and idempotent, so after correcting the input it is always safe to retry.","tier":"free","inputSchema":{"additionalProperties":false,"properties":{"unit_cost":{"exclusiveMinimum":0,"type":"number","description":"Ex-works cost of one unit in your currency. Must be\ngreater than 0."},"quantity":{"default":1,"minimum":1,"type":"integer","description":"Units in the shipment. Must be at least 1. Default 1."},"freight_total":{"default":0,"minimum":0,"type":"number","description":"Total freight and insurance for the whole shipment,\nnot per unit. Default 0."},"duty_pct":{"default":0,"minimum":0,"type":"number","description":"Import duty as a percentage of goods value, e.g. 6.5.\nDefault 0."},"tax_pct":{"default":0,"minimum":0,"type":"number","description":"Import VAT or GST as a percentage of goods plus duty plus\nfreight, e.g. 20. Default 0."},"other_fees":{"default":0,"minimum":0,"type":"number","description":"Brokerage, port and handling charges for the shipment.\nDefault 0."}},"required":["unit_cost"],"type":"object"}},{"name":"freight_class","description":"Derive a US LTL freight class from density. FREE.\n\nDensity in pounds per cubic foot maps to a class on the published NMFC\ndensity scale. Typical input {\"length\": 48, \"width\": 40, \"height\": 36,\n\"weight\": 400} returns {\"cubic_feet\": 40.0, \"density_pcf\": 10.0,\n\"density_class\": \"100\", \"caveat\": \"...\"}.\n\nUse for a first estimate before a carrier quote. Not as a final\nclassification: NMFC also weighs stowability, handling and liability, so a\ncarrier can and does reclassify. Errors: on invalid, missing, or malformed input this tool never raises a protocol error — it returns {\"error\": \"<what is wrong and how to fix it>\"} (for example {\"error\": \"dimensions produce zero volume\"}). Every call is read-only and idempotent, so after correcting the input it is always safe to retry.","tier":"free","inputSchema":{"additionalProperties":false,"properties":{"length":{"exclusiveMinimum":0,"type":"number","description":"Longest side of the palletised freight. Must be greater than 0."},"width":{"exclusiveMinimum":0,"type":"number","description":"Second side. Must be greater than 0."},"height":{"exclusiveMinimum":0,"type":"number","description":"Third side, including the pallet. Must be greater than 0."},"weight":{"exclusiveMinimum":0,"type":"number","description":"Gross weight including the pallet. Must be greater than 0."},"units":{"default":"in_lb","enum":["in_lb","cm_kg"],"type":"string","description":"\"in_lb\" for inches and pounds, or \"cm_kg\" for centimetres and\nkilograms. Default \"in_lb\"."}},"required":["length","width","height","weight"],"type":"object"}},{"name":"rate_card","description":"Turn a cost model into a customer-facing weight-banded price table. PREMIUM (license).\n\nPrices each band at its upper bound so you never under-charge inside a\nband, then rounds up to a tidy increment. Typical input {\"base_cost\": 4.2,\n\"cost_per_lb\": 0.65, \"bands_lb\": [1, 2, 5, 10], \"margin_pct\": 25} returns\n{\"bands\": [{\"up_to_lb\": 1, \"cost\": 4.85, \"price\": 6.5}, ...],\n\"over_top_band\": \"quote individually\"}.\n\nUse when publishing shipping prices customers pay. Not for the cut-off at\nwhich shipping becomes free — that is free_shipping_threshold. Errors: on invalid, missing, or malformed input this tool never raises a protocol error — it returns {\"error\": \"<what is wrong and how to fix it>\"} (for example {\"error\": \"bands_lb must contain at least one upper bound\"}). Every call is read-only and idempotent, so after correcting the input it is always safe to retry.","tier":"premium","inputSchema":{"additionalProperties":false,"properties":{"base_cost":{"exclusiveMinimum":0,"type":"number","description":"Fixed cost per shipment before weight, e.g. pick, pack and\nlabel. Must be greater than 0."},"cost_per_lb":{"minimum":0,"type":"number","description":"Marginal cost per pound. Use 0 for a flat rate card."},"bands_lb":{"items":{"type":"number"},"type":"array","description":"Upper weight bound of each band in ascending order, e.g.\n[1, 2, 5, 10]. At least one band, each greater than 0."},"margin_pct":{"default":0,"minimum":0,"type":"number","description":"Margin added on top of cost, e.g. 25 for 25%. Default 0."},"round_to":{"default":0.5,"exclusiveMinimum":0,"type":"number","description":"Increment to round each published price up to, e.g. 0.5 or\n1. Default 0.5."}},"required":["base_cost","cost_per_lb","bands_lb"],"type":"object"}},{"name":"free_shipping_threshold","description":"Find the order value at which free shipping stops costing you money. PREMIUM (license).\n\nBreak-even is where the gross margin on the order covers the shipping you\nabsorb. Typical input {\"gross_margin_pct\": 45, \"ship_cost\": 7.5,\n\"current_aov\": 38, \"target_uplift_pct\": 15} returns {\"break_even\": 16.67,\n\"suggested_threshold\": 43.7, \"above_current_aov_by\": 5.7, \"rationale\":\n\"...\"}.\n\nUse when setting or defending a free-shipping bar. Not for what shipping\nshould cost when it is not free — that is rate_card. Errors: on invalid, missing, or malformed input this tool never raises a protocol error — it returns {\"error\": \"<what is wrong and how to fix it>\"}. Every call is read-only and idempotent, so after correcting the input it is always safe to retry.","tier":"premium","inputSchema":{"additionalProperties":false,"properties":{"gross_margin_pct":{"exclusiveMinimum":0,"maximum":100,"type":"number","description":"Gross margin on a typical order, e.g. 45 for 45%.\nMust be above 0 and at most 100."},"ship_cost":{"exclusiveMinimum":0,"type":"number","description":"What one shipment actually costs you to send."},"current_aov":{"exclusiveMinimum":0,"type":"number","description":"Your current average order value."},"target_uplift_pct":{"default":0,"minimum":0,"type":"number","description":"How far above current AOV you want the threshold\nset, to pull baskets up. Default 0, which returns break-even."}},"required":["gross_margin_pct","ship_cost","current_aov"],"type":"object"}}],"resources":[],"prompts":[]}