{"name":"supplychain.md","version":"2.0","description":"A skill file for agents that source, ship, receive or stock goods, with your rules written in: approvals, quote counts, supplier limits, buffers, trade terms, tolerances and escalation. Read-only tools over HTTP and MCP turn a request into a staged plan, score suppliers, compare quotes on landed cost, plan loads and freight, track milestones, check documents, match receipts and set stock levels. Every price, rate, quote and date comes from your request; none comes from us.","skill":{"url":"https://www.supplychain.md/supplychain.md","with_settings":"https://www.supplychain.md/supplychain.md?preset=online_brand"},"settings":"https://www.supplychain.md/api/v1/settings","usage":"GET /api/v1/<tool> with query parameters (arrays and objects as URL-encoded JSON), or POST /api/v1/<tool> with a JSON body (64 KB at most). No key. CORS open. Nothing is stored.","tools":[{"name":"plan_sourcing","title":"Plan a sourcing request","description":"Turns a sourcing request (the request component) into a staged plan: define, find, quote, sample, award, production, inspection, origin, transit, customs, delivery and receive, each with its owner, the tool that covers it now, its component and what plugs in later. Latest dates count back from need_by minus buffer_days on the person's own day estimates per step (days); a step with no estimate counts 0 days and is listed. Returns the slack, whether the plan fits, the gates where the person decides (spec freeze, award, freight booking, customs filing, payment release), an RFQ field list with the contact rule, what is missing and the next actions. It holds no lead times, transit times, prices or rates, and it never contacts suppliers, orders or books anything.","get":"https://www.supplychain.md/api/v1/plan_sourcing","post":"https://www.supplychain.md/api/v1/plan_sourcing","example_body":{"item":"aluminum housings","quantity":10000,"unit":"units","need_by":"2026-12-02","today":"2026-11-02","destination":"plant in Utah, US","destination_country":"US","origin_country":"MX","target_landed_per_unit":8,"currency":"USD","certifications":["ISO 9001","RoHS"],"spec_ready":true,"inspection":"pre_shipment","days":{"find":2,"quote":4,"award":1,"production":12,"inspection":1,"origin":1,"transit":3,"customs":1,"delivery":1,"receive":1},"buffer_days":2,"approval_amount":50000,"min_quotes":3,"contact_suppliers":"draft_only","trade_term_pref":"fca"},"example_note":"Round illustrative numbers, not market data, a price or a quote; send your own.","input":{"type":"object","properties":{"item":{"type":"string","maxLength":120,"description":"What is being sourced, as the person describes it, like aluminum housings. At most 120 characters."},"quantity":{"type":"number","minimum":0,"maximum":1000000000,"description":"How many are needed, in unit. More than 0."},"unit":{"type":"string","maxLength":20,"default":"units","description":"The unit of quantity, like units, kg or m. Default units."},"need_by":{"type":"string","pattern":"^\\d{4}-\\d{2}-\\d{2}$","maxLength":10,"description":"The date the goods must be at the destination. As YYYY-MM-DD."},"today":{"type":"string","pattern":"^\\d{4}-\\d{2}-\\d{2}$","maxLength":10,"description":"Today's date, for the slack. Default: today in UTC. As YYYY-MM-DD."},"destination":{"type":"string","maxLength":120,"description":"Where the goods go, like plant in Utah, US. Echoed in the plan and the RFQ only."},"destination_country":{"type":"string","pattern":"^[A-Za-z]{2}$","maxLength":2,"description":"Country the goods are delivered to. Two-letter country code, like US or DE."},"origin_country":{"type":"string","pattern":"^[A-Za-z]{2}$","maxLength":2,"description":"Country the goods ship from, when known. Two-letter country code, like US or DE."},"target_landed_per_unit":{"type":"number","minimum":0,"maximum":1000000000,"description":"The person's target landed cost per unit at the destination, home currency. Optional; with it the plan works out the order value."},"currency":{"type":"string","pattern":"^[A-Za-z]{3}$","maxLength":3,"description":"Your home currency code, like USD or EUR, used only to label amounts. Every amount you send is in this currency unless an item has its own fx_to_home rate."},"certifications":{"type":"array","maxItems":20,"items":{"type":"string","maxLength":60},"description":"Certifications or standards the item or the supplier must have, named as the person gives them. They go into the RFQ, and into score_suppliers as required_certifications."},"spec_ready":{"type":"boolean","default":false,"description":"true when the drawing or spec is final, with its revision and tolerances. Default false, which adds a spec freeze gate."},"samples":{"type":"boolean","default":false,"description":"true when samples or a first-article approval come before the order. Adds the sample stage. Default false."},"inspection":{"type":"string","enum":["none","pre_shipment","on_arrival","both"],"description":"The inspection plan: none, pre_shipment, on_arrival or both. When not set the inspection stage stays in and is listed as missing."},"days":{"type":"object","properties":{"define":{"type":"number","minimum":0,"maximum":365,"description":"Calendar days for the define step, from the person's own estimate."},"find":{"type":"number","minimum":0,"maximum":365,"description":"Calendar days for the find step, from the person's own estimate."},"quote":{"type":"number","minimum":0,"maximum":365,"description":"Calendar days for the quote step, from the person's own estimate."},"sample":{"type":"number","minimum":0,"maximum":365,"description":"Calendar days for the sample step, from the person's own estimate."},"award":{"type":"number","minimum":0,"maximum":365,"description":"Calendar days for the award step, from the person's own estimate."},"production":{"type":"number","minimum":0,"maximum":365,"description":"Calendar days for the production step, from the person's own estimate."},"inspection":{"type":"number","minimum":0,"maximum":365,"description":"Calendar days for the inspection step, from the person's own estimate."},"origin":{"type":"number","minimum":0,"maximum":365,"description":"Calendar days for the origin step, from the person's own estimate."},"transit":{"type":"number","minimum":0,"maximum":365,"description":"Calendar days for the transit step, from the person's own estimate."},"customs":{"type":"number","minimum":0,"maximum":365,"description":"Calendar days for the customs step, from the person's own estimate."},"delivery":{"type":"number","minimum":0,"maximum":365,"description":"Calendar days for the delivery step, from the person's own estimate."},"receive":{"type":"number","minimum":0,"maximum":365,"description":"Calendar days for the receive step, from the person's own estimate."}},"additionalProperties":false,"description":"The person's own estimates in calendar days per step, each 0 to 365, like {\"production\": 15, \"transit\": 4}. Keys: define, find, quote, sample, award, production, inspection, origin, transit, customs, delivery, receive. A step with no estimate counts 0 days and is listed as missing."},"buffer_days":{"type":"number","minimum":0,"maximum":180,"default":0,"description":"Calendar days of buffer the person keeps before need_by, 0 to 180. Default 0."},"approval_amount":{"type":"number","minimum":0,"maximum":1000000000000,"description":"Order value, home currency, above which the person reviews the full quote comparison before the award. Optional."},"min_quotes":{"type":"integer","minimum":1,"maximum":20,"default":3,"description":"Quotes to collect before the award, 1 to 20. Default 3."},"contact_suppliers":{"type":"string","enum":["never","draft_only","send_approved"],"default":"draft_only","description":"How suppliers may be contacted: never (give the person the RFQ), draft_only (draft it for the person to send, the default) or send_approved (send only RFQs the person approved, from accounts they gave you)."},"trade_term_pref":{"type":"string","enum":["exw","fca","fas","fob","cfr","cif","cpt","cip","dap","dpu","ddp","ask"],"description":"The trade term the person wants quoted, as a lowercase code (exw, fca, fas, fob, cfr, cif, cpt, cip, dap, dpu, ddp), or ask: ask suppliers for their usual term and for FCA. Optional."}},"required":["item","quantity","need_by"]}},{"name":"score_suppliers","title":"Qualify and score suppliers","description":"Gates and scores candidate suppliers (the supplier component) that the agent found with its own research. Gates: required certifications (checked copies pass; claims only need evidence, or pass flagged under flag_claims), MOQ against the quantity, lead time against max_lead_time_days, capacity in window_days (short is partial, usable in a split), price against the target (a warning) and screening (needed before any award). Scores 0 to 100 on price, quality, delivery, risk and responsiveness, relative to this set, weighted by priority or weights, then ranks qualified, pending and partial suppliers and splits the quantity under max_supplier_share. Every value comes from the request. It never finds, names, contacts, screens or awards a supplier, and a ranking is not an approval.","get":"https://www.supplychain.md/api/v1/score_suppliers","post":"https://www.supplychain.md/api/v1/score_suppliers","example_body":{"quantity":10000,"window_days":15,"required_certifications":["ISO 9001","RoHS"],"max_lead_time_days":21,"target_unit_price":7,"priority":"balanced","max_supplier_share":0.7,"currency":"USD","suppliers":[{"label":"Supplier A","country":"MX","certifications":["ISO 9001","RoHS"],"certifications_checked":["ISO 9001","RoHS"],"capacity_per_month":24000,"moq":2000,"lead_time_days":14,"unit_price":6.9,"on_time_rate":0.96,"defect_rate":0.005,"risk":"low","responsiveness":4,"screened":true},{"label":"Supplier B","country":"MX","certifications":["ISO 9001","RoHS"],"certifications_checked":["ISO 9001"],"capacity_per_month":12000,"moq":1000,"lead_time_days":10,"unit_price":6.5,"on_time_rate":0.9,"defect_rate":0.01,"risk":"medium","responsiveness":5,"screened":true},{"label":"Supplier C","country":"US","certifications":["ISO 9001","RoHS"],"moq":15000,"lead_time_days":20,"unit_price":6.2,"risk":"low","screened":false}]},"example_note":"Round illustrative numbers, not market data, a price or a quote; send your own.","input":{"type":"object","properties":{"suppliers":{"type":"array","minItems":1,"maxItems":50,"items":{"type":"object","properties":{"label":{"type":"string","maxLength":80,"description":"The agent's label for the supplier, like Supplier A. Default Supplier 1, Supplier 2 and so on."},"country":{"type":"string","pattern":"^[A-Za-z]{2}$","description":"Country the supplier makes the goods in, two-letter code."},"certifications":{"type":"array","items":{"type":"string"},"description":"Certifications or standards the supplier claims to hold."},"certifications_checked":{"type":"array","items":{"type":"string"},"description":"Certifications whose copies were received and checked with the issuer."},"capacity_per_month":{"type":"number","minimum":0,"description":"Units per month the supplier can make for this item."},"moq":{"type":"number","minimum":0,"description":"Minimum order quantity, units."},"lead_time_days":{"type":"number","minimum":0,"description":"Production lead time, calendar days."},"unit_price":{"type":"number","minimum":0,"description":"Quoted or indicative unit price, home currency, more than 0."},"on_time_rate":{"type":"number","minimum":0,"maximum":1,"description":"Share of past orders on time, 0 to 1, from the person's records."},"defect_rate":{"type":"number","minimum":0,"maximum":1,"description":"Share of units with defects, 0 to 1, from the person's records."},"risk":{"type":"string","enum":["low","medium","high","unknown"],"description":"The person's view of financial, location and concentration risk: low, medium, high or unknown."},"responsiveness":{"type":"number","minimum":1,"maximum":5,"description":"A rating from 1 (slow) to 5 (fast)."},"screened":{"type":"boolean","description":"true once the person or their compliance team screened it against restricted-party and sanctions lists."}}},"description":"Candidate suppliers, 1 to 50, each in the supplier format."},"quantity":{"type":"number","minimum":0,"maximum":1000000000,"description":"Units needed for this order. More than 0."},"window_days":{"type":"number","minimum":0,"maximum":3650,"description":"Production days available, more than 0. Capacity in the window = capacity_per_month x window_days / 30. Without it capacity is not checked."},"required_certifications":{"type":"array","maxItems":20,"items":{"type":"string","maxLength":60},"description":"Certifications or standards every supplier must hold, named as the person gives them. Names match ignoring case, spaces and punctuation."},"max_lead_time_days":{"type":"number","minimum":0,"maximum":3650,"description":"Longest production lead time allowed, calendar days. Optional."},"target_unit_price":{"type":"number","minimum":0,"maximum":1000000000,"description":"The person's target unit price, home currency. A price above it is a warning, not a fail. Optional."},"cert_evidence":{"type":"string","enum":["require_copies","flag_claims"],"default":"require_copies","description":"require_copies (default): a claim without a checked copy needs evidence before the supplier qualifies. flag_claims: a claim passes but is flagged unverified."},"priority":{"type":"string","enum":["balanced","cost_first","quality_first","speed_first"],"default":"balanced","description":"Preset weights (price, quality, delivery, risk, responsiveness): balanced 30/25/20/15/10, cost_first 50/20/15/10/5, quality_first 20/45/15/15/5, speed_first 20/20/45/10/5."},"weights":{"type":"object","properties":{"price":{"type":"number","minimum":0,"description":"Weight for the price score, 0 or more, on the same scale as the others."},"quality":{"type":"number","minimum":0,"description":"Weight for the quality score, 0 or more, on the same scale as the others."},"delivery":{"type":"number","minimum":0,"description":"Weight for the delivery score, 0 or more, on the same scale as the others."},"risk":{"type":"number","minimum":0,"description":"Weight for the risk score, 0 or more, on the same scale as the others."},"responsiveness":{"type":"number","minimum":0,"description":"Weight for the responsiveness score, 0 or more, on the same scale as the others."}},"additionalProperties":false,"description":"The person's own weights per criterion, 0 or more, on any one scale. Replaces priority; a criterion left out weighs 0."},"max_supplier_share":{"type":"number","minimum":0.05,"maximum":1,"description":"Most of the quantity one supplier may get, 0.05 to 1. Below 1 the quantity is split across ranked suppliers."},"currency":{"type":"string","pattern":"^[A-Za-z]{3}$","maxLength":3,"description":"Your home currency code, like USD or EUR, used only to label amounts. Every amount you send is in this currency unless an item has its own fx_to_home rate."}},"required":["suppliers","quantity"]}},{"name":"landed_cost","title":"Landed cost per unit","description":"Compares quotes (the quote component) on landed cost per unit at the destination. Each quote's trade term says which costs the buyer adds on top of the price: origin charges, main freight, insurance, destination charges, import duty, import tax and broker fees. Applies MOQ and price breaks, converts at the person's fx_to_home, prices insurance on insure_pct_of_value, duty on an fob or cif customs value, import tax (cash at import when recoverable) and paying early (cash_days x carrying_cost_rate). A cost the buyer pays with no number is listed in not_priced and the total becomes an at-least amount. Every price, charge and rate comes from the request: it holds no freight costs, duty rates, tax rates or exchange rates, and a ranking is a comparison, not an award.","get":"https://www.supplychain.md/api/v1/landed_cost","post":"https://www.supplychain.md/api/v1/landed_cost","example_body":{"quantity":10000,"currency":"USD","target_landed_per_unit":8,"carrying_cost_rate":0.1,"quotes":[{"label":"Supplier A","unit_price":6.6,"moq":2000,"tooling":3000,"packaging_per_unit":0.1,"trade_term":"fca","mode":"road_ftl","main_freight":4000,"destination_charges":800,"insurance_rate":0.003,"duty_rate":0.03,"duty_basis":"fob","broker_fees":300,"cash_days":30},{"label":"Supplier B","price_breaks":[{"min_qty":5000,"unit_price":7.6},{"min_qty":10500,"unit_price":7.2}],"trade_term":"dap","mode":"road_ftl","included_freight":3500,"destination_charges":200,"duty_rate":0.03,"duty_basis":"fob","broker_fees":300,"cash_days":-30},{"label":"Supplier C","unit_price":6.2,"moq":12000,"trade_term":"exw","origin_charges":1500,"duty_rate":0.03}]},"example_note":"Round illustrative numbers, not market data, a price or a quote; send your own.","input":{"type":"object","properties":{"quantity":{"type":"number","minimum":0,"maximum":1000000000,"description":"Units needed. More than 0. Landed cost per unit divides by this."},"quotes":{"type":"array","minItems":1,"maxItems":20,"items":{"type":"object","properties":{"label":{"type":"string","maxLength":80,"description":"The agent's label for the quote, like Supplier A. Default Quote 1, Quote 2 and so on."},"unit_price":{"type":"number","minimum":0,"description":"Price per unit, quote currency. With price_breaks it applies below the smallest break."},"price_breaks":{"type":"array","maxItems":20,"items":{"type":"object","properties":{"min_qty":{"type":"number","minimum":0,"description":"Units from which this price applies."},"unit_price":{"type":"number","minimum":0,"description":"Price per unit from min_qty up, quote currency."}},"required":["min_qty","unit_price"]},"description":"Volume prices: each unit_price applies from min_qty up. Send this or unit_price, or both."},"fx_to_home":{"type":"number","minimum":0,"description":"Home-currency amount per 1 unit of the quote's currency, the person's own rate. Default 1."},"moq":{"type":"number","minimum":0,"description":"Minimum order quantity, units. Below it the tool buys the MOQ."},"tooling":{"type":"number","minimum":0,"description":"One-time tooling or setup cost, quote currency."},"packaging_per_unit":{"type":"number","minimum":0,"description":"Packaging per unit, quote currency, when it is not in the price."},"trade_term":{"type":"string","enum":["exw","fca","fas","fob","cfr","cif","cpt","cip","dap","dpu","ddp"],"description":"The trade term on the quote; it decides which costs the buyer adds. Required. One of exw, fca, fas, fob, cfr, cif, cpt, cip, dap, dpu, ddp (the 2020 trade-term codes, lowercase)."},"mode":{"type":"string","enum":["ocean_fcl","ocean_lcl","air","express","road_ftl","road_ltl","rail","intermodal","other"],"description":"Transport mode, used to flag a sea-only term on a non-ocean mode."},"origin_charges":{"type":"number","minimum":0,"description":"Loading, export clearance and origin handling the buyer pays, home currency total for this order."},"main_freight":{"type":"number","minimum":0,"description":"Main carriage the buyer pays, home currency total for this order."},"destination_charges":{"type":"number","minimum":0,"description":"Terminal handling, unloading and delivery to the door the buyer pays, home currency total for this order."},"included_freight":{"type":"number","minimum":0,"description":"Freight and insurance inside a C or D price, home currency total for this order; used only for an fob-basis duty."},"insurance_rate":{"type":"number","minimum":0,"maximum":1,"description":"Cargo insurance premium as a share of the insured value, like 0.003; 0 when not insured."},"duty_rate":{"type":"number","minimum":0,"maximum":5,"description":"Import duty as a share of the customs value, like 0.05; 0 when duty-free or not imported."},"duty_basis":{"type":"string","enum":["fob","cif"],"description":"The destination's customs value basis, fob or cif, from the person or their broker."},"import_tax_rate":{"type":"number","minimum":0,"maximum":1,"description":"VAT, GST or sales tax at import as a share, like 0.2. Left out: no import tax assumed."},"import_tax_recoverable":{"type":"boolean","description":"true (default) when the import tax is reclaimed later: cash at import, not landed cost."},"broker_fees":{"type":"number","minimum":0,"description":"Customs broker fees, home currency total for this order."},"other_costs":{"type":"number","minimum":0,"description":"Inspection, testing and anything else, home currency total for this order."},"cash_days":{"type":"number","minimum":-365,"maximum":365,"description":"Average days the money is paid before the goods arrive; negative when paid after."},"tooling_in_customs_value":{"type":"boolean","description":"true (default) when tooling is part of the customs value."}},"required":["trade_term"]},"description":"Quotes to compare, 1 to 20, each in the quote format."},"target_landed_per_unit":{"type":"number","minimum":0,"maximum":1000000000,"description":"The person's target landed cost per unit, home currency. Optional."},"currency":{"type":"string","pattern":"^[A-Za-z]{3}$","maxLength":3,"description":"Your home currency code, like USD or EUR, used only to label amounts. Every amount you send is in this currency unless an item has its own fx_to_home rate."},"insure_pct_of_value":{"type":"number","minimum":100,"maximum":200,"default":110,"description":"Insured value as a percent of goods plus freight, 100 to 200. Default 110, a common convention."},"carrying_cost_rate":{"type":"number","minimum":0,"maximum":1,"description":"The person's annual cost of money as a share, like 0.1 for 10% a year. Needed to price cash_days."}},"required":["quantity","quotes"]}},{"name":"load_plan","title":"Load plan: cartons, pallets, containers","description":"Turns units into cartons, pallets and containers or trailers, with volume, gross weight and chargeable weight for air, express and sea. Send units with units_per_carton, or cartons, plus the carton's outside size and gross weight. Pallets are built in layers up to max_load_height_cm and max_pallet_kg; boxes are filled with a simple lane layout, capped by payload. Pallet sizes, container and trailer inside sizes and payloads are typical values, labeled typical: real boxes vary and road limits are often lower, so send a custom box with your own limit when you have one. Every size and weight comes from the request. It books nothing, holds no rates and doesn't check securing, dangerous goods or stacking strength.","get":"https://www.supplychain.md/api/v1/load_plan","post":"https://www.supplychain.md/api/v1/load_plan","example_get":"https://www.supplychain.md/api/v1/load_plan?units=10000&units_per_carton=20&carton_l_cm=40&carton_w_cm=30&carton_h_cm=30&carton_kg=12&pallet=eur","example_body":{"units":10000,"units_per_carton":20,"carton_l_cm":40,"carton_w_cm":30,"carton_h_cm":30,"carton_kg":12,"pallet":"eur"},"example_note":"Round illustrative numbers, not market data, a price or a quote; send your own.","input":{"type":"object","properties":{"units":{"type":"integer","minimum":1,"maximum":1000000000,"description":"Units to ship. Needs units_per_carton. Or send cartons instead."},"units_per_carton":{"type":"integer","minimum":1,"maximum":1000000,"description":"Units packed in one carton, from the supplier's packing spec."},"cartons":{"type":"integer","minimum":1,"maximum":100000000,"description":"Number of cartons, when you have it directly instead of units."},"carton_l_cm":{"type":"number","minimum":1,"maximum":2000,"description":"Carton outside length, cm."},"carton_w_cm":{"type":"number","minimum":1,"maximum":2000,"description":"Carton outside width, cm."},"carton_h_cm":{"type":"number","minimum":1,"maximum":2000,"description":"Carton outside height, cm, standing the way it is meant to stand."},"carton_kg":{"type":"number","minimum":0.001,"maximum":50000,"description":"Gross weight of one packed carton, kg."},"allow_tip":{"type":"boolean","default":false,"description":"true if the carton may lie on its side or end. Default false: it stays upright."},"max_carton_kg":{"type":"number","minimum":1,"maximum":1000,"default":23,"description":"Carton weight above which a handling warning is raised, kg. Default 23, a typical one-person lifting limit."},"pallet":{"type":"string","enum":["none","eur","iso","us","custom"],"default":"none","description":"none (default: cartons loaded loose on the floor), eur (120 x 80 cm), iso (120 x 100 cm), us (121.9 x 101.6 cm, 48 x 40 in) or custom (send pallet_l_cm and pallet_w_cm)."},"pallet_l_cm":{"type":"number","minimum":20,"maximum":400,"description":"Custom pallet deck length, cm. Used with pallet custom."},"pallet_w_cm":{"type":"number","minimum":20,"maximum":400,"description":"Custom pallet deck width, cm. Used with pallet custom."},"pallet_height_cm":{"type":"number","minimum":0,"maximum":50,"default":15,"description":"Pallet deck height, cm. Default 15, typical."},"pallet_kg":{"type":"number","minimum":0,"maximum":500,"default":25,"description":"Empty pallet weight, kg. Default 25, typical."},"max_load_height_cm":{"type":"number","minimum":20,"maximum":400,"default":150,"description":"Loaded pallet height limit including the deck, cm. Default 150, a common limit."},"max_pallet_kg":{"type":"number","minimum":1,"maximum":5000,"default":1000,"description":"Loaded pallet weight limit including the pallet, kg. Default 1000, a common limit."},"stack_pallets":{"type":"boolean","default":false,"description":"true if loaded pallets may be stacked two high. Two tiers are used only when two loaded pallets fit the inside height."},"equipment":{"type":"array","minItems":1,"maxItems":6,"items":{"type":"string","enum":["c20","c40","c40hc","c45hc","trailer53","custom"]},"description":"Boxes to plan for: c20, c40, c40hc, c45hc, trailer53, custom. Default [c20, c40, c40hc]. Inside sizes and payloads are typical. trailer53 weight is checked only with trailer53_max_kg; custom needs custom_l_cm, custom_w_cm and custom_h_cm."},"custom_l_cm":{"type":"number","minimum":10,"maximum":3000,"description":"Custom box inside length, cm (a truck, a box with known sizes, an air container)."},"custom_w_cm":{"type":"number","minimum":10,"maximum":1000,"description":"Custom box inside width, cm."},"custom_h_cm":{"type":"number","minimum":10,"maximum":1000,"description":"Custom box inside height, cm."},"custom_max_kg":{"type":"number","minimum":1,"maximum":100000,"description":"Custom box weight limit, kg: the payload or the road limit, whichever is lower. Without it the custom box's weight is not checked."},"trailer53_max_kg":{"type":"number","minimum":1,"maximum":100000,"description":"Your cargo weight limit for the 53 ft trailer, kg. Road limits vary, so without it the trailer's weight is not checked."},"dim_divisor_air":{"type":"number","minimum":1000,"maximum":10000,"default":6000,"description":"Air volumetric divisor, cm3 per kg. Default 6000, a common air convention."},"dim_divisor_express":{"type":"number","minimum":1000,"maximum":10000,"default":5000,"description":"Express volumetric divisor, cm3 per kg. Default 5000, a common express convention."},"wm_kg_per_cbm":{"type":"number","minimum":100,"maximum":5000,"default":1000,"description":"Sea weight-or-measure ratio, kg per cbm. Default 1000, the usual ratio (1 revenue ton = 1 metric ton or 1 cbm)."}},"required":["carton_l_cm","carton_w_cm","carton_h_cm","carton_kg"]}},{"name":"ship_options","title":"Compare shipping options","description":"Compares the transport options the person priced against the need-by date. For each option: planned and worst-case arrival from ready_date, days and days_spread; on_time, tight or late against need_by less buffer_days; slack; the latest ready date that still works; the cost of goods in transit from goods_value and carrying_cost_rate; and late exposure from late_cost_per_day. Picks by mode_choice: the cheapest on-time option, the fastest worst case, or none so the person chooses. Shows what each faster option costs per day saved. Every day count, cost and rate comes from the request. It books nothing, holds no rates or transit times, and a result is not a quote or an approval.","get":"https://www.supplychain.md/api/v1/ship_options","post":"https://www.supplychain.md/api/v1/ship_options","example_body":{"ready_date":"2026-11-02","need_by":"2026-12-02","buffer_days":3,"goods_value":80000,"carrying_cost_rate":0.1,"late_cost_per_day":500,"currency":"USD","options":[{"label":"ocean full container","mode":"ocean_fcl","days":22,"days_spread":4,"cost":6000},{"label":"air freight","mode":"air","days":7,"days_spread":2,"cost":22000},{"label":"ocean shared container","mode":"ocean_lcl","days":28,"days_spread":6,"cost":4000}]},"example_note":"Round illustrative numbers, not market data, a price or a quote; send your own.","input":{"type":"object","properties":{"ready_date":{"type":"string","pattern":"^\\d{4}-\\d{2}-\\d{2}$","maxLength":10,"description":"Date the goods are ready at origin. As YYYY-MM-DD."},"need_by":{"type":"string","pattern":"^\\d{4}-\\d{2}-\\d{2}$","maxLength":10,"description":"Date the goods must be at the destination. As YYYY-MM-DD."},"options":{"type":"array","minItems":1,"maxItems":12,"description":"Options the person or their providers priced: [{label, mode (one of ocean_fcl, ocean_lcl, air, express, road_ftl, road_ltl, rail, intermodal, other, optional), days (door to door, ready to delivered, more than 0: the person's or provider's estimate), days_spread (how many days later it can run, from the person's records, default 0), cost (total for this shipment in home currency; optional, unpriced if missing), co2e_kg (optional, the person's or provider's figure), on_time_rate (0 to 1, optional, the person's records)}].","items":{"type":"object","properties":{"label":{"type":"string"},"mode":{"type":"string","enum":["ocean_fcl","ocean_lcl","air","express","road_ftl","road_ltl","rail","intermodal","other"]},"days":{"type":"number","minimum":0},"days_spread":{"type":"number","minimum":0},"cost":{"type":"number","minimum":0},"co2e_kg":{"type":"number","minimum":0},"on_time_rate":{"type":"number","minimum":0,"maximum":1}},"required":["days"]}},"buffer_days":{"type":"integer","minimum":0,"maximum":180,"default":0,"description":"Days of margin to keep before need_by, 0 to 180. Default 0."},"goods_value":{"type":"number","minimum":0,"maximum":1000000000000,"description":"Value of the goods in this shipment, home currency. With carrying_cost_rate it prices the time in transit."},"carrying_cost_rate":{"type":"number","minimum":0,"maximum":1,"description":"The person's annual cost of money or holding as a share, 0 to 1 (0.1 = 10% a year)."},"late_cost_per_day":{"type":"number","minimum":0,"maximum":1000000000000,"description":"The person's cost of each day the goods arrive after need_by, home currency per day (stopped line, lost sales, penalties)."},"mode_choice":{"type":"string","enum":["cheapest_on_time","fastest","ask"],"default":"cheapest_on_time","description":"How to pick: cheapest_on_time (default: lowest total among on-time options, else among tight ones), fastest (earliest worst-case arrival) or ask (pick none; the person chooses)."},"currency":{"type":"string","pattern":"^[A-Za-z]{3}$","maxLength":3,"description":"Your home currency code, like USD or EUR, used only to label amounts. Every amount you send is in this currency unless an item has its own fx_to_home rate."}},"required":["ready_date","need_by","options"]}},{"name":"track_milestones","title":"Track milestones and exceptions","description":"Compares an order's or a shipment's milestones with the plan and projects the delivery date. Send the milestones in order, each with its planned date and, when known, the actual date or the current estimate. A milestone past its planned date with no actual or estimate counts as overdue, slipping one day a day. Delays carry forward to later milestones; a later estimate resets the slip; early finishes don't pull later steps in. Returns each milestone's status and projected date, the current slip, the projected delivery against need_by and buffer_days, and exceptions: late, slips over escalate_slip_days, overdue with no update, dates out of order. Every date comes from the request as reported; none is verified, and a result is not an approval.","get":"https://www.supplychain.md/api/v1/track_milestones","post":"https://www.supplychain.md/api/v1/track_milestones","example_body":{"today":"2026-11-09","need_by":"2026-12-01","milestones":[{"label":"order confirmed","planned":"2026-10-12","actual":"2026-10-12"},{"label":"production done","planned":"2026-11-02","actual":"2026-11-05"},{"label":"inspection passed","planned":"2026-11-04","actual":"2026-11-07"},{"label":"picked up at origin","planned":"2026-11-06","estimate":"2026-11-12"},{"label":"arrived at destination port","planned":"2026-11-20"},{"label":"customs cleared","planned":"2026-11-23"},{"label":"delivered to the plant","planned":"2026-11-27"}]},"example_note":"Round illustrative numbers, not market data, a price or a quote; send your own.","input":{"type":"object","properties":{"milestones":{"type":"array","minItems":1,"maxItems":30,"description":"The milestones in the order they happen: [{label, planned (date, required), actual (date, optional: when it happened), estimate (date, optional: the current expected date for a milestone not yet done)}], dates as YYYY-MM-DD. The last one is the delivery.","items":{"type":"object","properties":{"label":{"type":"string"},"planned":{"type":"string","pattern":"^\\d{4}-\\d{2}-\\d{2}$"},"actual":{"type":"string","pattern":"^\\d{4}-\\d{2}-\\d{2}$"},"estimate":{"type":"string","pattern":"^\\d{4}-\\d{2}-\\d{2}$"}},"required":["planned"]}},"need_by":{"type":"string","pattern":"^\\d{4}-\\d{2}-\\d{2}$","maxLength":10,"description":"Date the goods must be delivered. Default: the last milestone's planned date. As YYYY-MM-DD."},"today":{"type":"string","pattern":"^\\d{4}-\\d{2}-\\d{2}$","maxLength":10,"description":"Today's date, so results can be reproduced. Default: today in UTC. As YYYY-MM-DD."},"buffer_days":{"type":"integer","minimum":0,"maximum":180,"default":0,"description":"Days of margin to keep before need_by, 0 to 180. Default 0."},"escalate_slip_days":{"type":"number","minimum":0,"maximum":365,"default":2,"description":"Warn when a milestone slips more than this many days. Default 2."}},"required":["milestones"]}},{"name":"check_documents","title":"Check shipping documents","description":"Lists the documents a shipment usually needs, from mode, cross_border, trade_term and the flags (letter of credit, preferential origin, dangerous goods, temperature control, inspection, export-control concern), with who provides each, when, and whether you sent it. Then cross-checks the fields the agent read from up to 12 documents: names, countries and references loosely, descriptions for conflict, quantity and packages exactly, weights within weight_tolerance_pct, values to the cent (an insured value at least the invoice value), currency, trade term and the first 6 digits of the tariff code. With doc_mismatch=hold a mismatch stops work for a person; report makes it a warning. It never judges whether a document is genuine, sufficient or accepted by customs, a bank or a carrier, never classifies goods and never files anything.","get":"https://www.supplychain.md/api/v1/check_documents","post":"https://www.supplychain.md/api/v1/check_documents","example_body":{"mode":"ocean","cross_border":true,"trade_term":"fob","documents":[{"type":"commercial_invoice","seller":"Supplier A","buyer":"Buyer B","origin_country":"DE","destination_country":"US","hs_code":"7616.99.5190","description":"Aluminum housings, rev C","quantity":10000,"packages":400,"gross_kg":4800,"net_kg":4400,"total_value":72000,"currency":"USD","trade_term":"FOB port of loading","po_number":"PO-1001","invoice_number":"INV-2001"},{"type":"packing_list","seller":"Supplier A","buyer":"Buyer B","quantity":10000,"packages":400,"gross_kg":4800,"net_kg":4400,"po_number":"PO-1001","invoice_number":"INV-2001"},{"type":"transport_document","label":"Bill of lading","seller":"Supplier A","consignee":"Buyer B","hs_code":"761699","description":"Aluminum housings","packages":398,"gross_kg":4820}]},"example_note":"Round illustrative numbers, not market data, a price or a quote; send your own.","input":{"type":"object","properties":{"mode":{"type":"string","enum":["ocean","air","road","rail","courier","multimodal"],"description":"How the goods move: ocean, air, road, rail, courier or multimodal. Names the transport document. Optional."},"cross_border":{"type":"boolean","default":true,"description":"true (default) when the goods cross a border, which adds the export and import declarations."},"trade_term":{"type":"string","enum":["exw","fca","fas","fob","cfr","cif","cpt","cip","dap","dpu","ddp"],"description":"The sale's trade term, from the contract or invoice. Sets who insures and who clears export and import. Optional; when missing, a term all the documents agree on is used. One of exw, fca, fas, fob, cfr, cif, cpt, cip, dap, dpu, ddp (the 2020 trade-term codes, lowercase)."},"letter_of_credit":{"type":"boolean","default":false,"description":"true when a letter of credit pays for the goods: banks check every document strictly against the credit. Default false."},"preferential_origin":{"type":"boolean","default":false,"description":"true when the importer claims a lower duty under a trade agreement, which needs proof of origin. Default false."},"dangerous_goods":{"type":"boolean","default":false,"description":"true when the goods are classed as dangerous for transport. Default false."},"temperature_controlled":{"type":"boolean","default":false,"description":"true when the goods must stay in a temperature range in transit. Default false."},"inspection_required":{"type":"boolean","default":false,"description":"true when the order or the credit asks for an inspection certificate. Default false."},"controlled":{"type":"string","enum":["no","unsure","yes"],"description":"Export-control or sanctions concern for the item, a party or a place, as the person or their compliance team sees it: no, unsure or yes. Optional; when missing the tool asks for it."},"documents":{"type":"array","maxItems":12,"items":{"type":"object","properties":{"type":{"type":"string","enum":["commercial_invoice","packing_list","transport_document","certificate_of_origin","insurance_certificate","purchase_order","inspection_certificate","other"],"description":"What the document is. Use other, with a label, for declarations, licences, safety data sheets and anything else."},"label":{"type":"string","maxLength":80,"description":"The document's name as you'd show it, like Bill of lading 1234."},"seller":{"type":"string","maxLength":160,"description":"Seller, exporter or shipper as the document names it."},"buyer":{"type":"string","maxLength":160,"description":"Buyer or importer as the document names it."},"consignee":{"type":"string","maxLength":160,"description":"Consignee as the document names it. A transport document made out to order is not compared."},"origin_country":{"type":"string","pattern":"^[A-Za-z]{2}$","description":"Country of origin or dispatch, two-letter code."},"destination_country":{"type":"string","pattern":"^[A-Za-z]{2}$","description":"Destination country, two-letter code."},"hs_code":{"type":"string","maxLength":24,"description":"Tariff code as the document shows it, like 7616.99.5190. Compared on the first 6 digits."},"description":{"type":"string","maxLength":300,"description":"Description of the goods as the document words it."},"quantity":{"type":"number","minimum":0,"description":"Quantity of goods, in the unit the documents use."},"packages":{"type":"integer","minimum":0,"description":"Number of packages: cartons, crates or pallets."},"gross_kg":{"type":"number","minimum":0,"description":"Gross weight, kg."},"net_kg":{"type":"number","minimum":0,"description":"Net weight, kg."},"total_value":{"type":"number","minimum":0,"description":"Total value on the document; for an insurance certificate, the insured value."},"currency":{"type":"string","pattern":"^[A-Za-z]{3}$","description":"Currency code of total_value, like USD."},"trade_term":{"type":"string","maxLength":60,"description":"Trade term with the named place as the document writes it, like FOB and the port of loading."},"po_number":{"type":"string","maxLength":60,"description":"Purchase order number quoted on the document."},"invoice_number":{"type":"string","maxLength":60,"description":"Invoice number quoted on the document."}},"required":["type"]},"description":"The documents the agent has, up to 12, each with the fields it read: type (commercial_invoice, packing_list, transport_document, certificate_of_origin, insurance_certificate, purchase_order, inspection_certificate or other), label, seller, buyer, consignee, origin_country, destination_country (two-letter codes), hs_code, description, quantity, packages, gross_kg, net_kg, total_value, currency, trade_term, po_number, invoice_number. Send only what each document shows."},"weight_tolerance_pct":{"type":"number","minimum":0,"maximum":10,"default":0.5,"description":"How far gross_kg and net_kg may differ across documents, percent of the smallest value, 0 to 10. Default 0.5."},"doc_mismatch":{"type":"string","enum":["hold","report"],"default":"hold","description":"hold (default): a mismatch is a stop and work waits for a person; report: mismatches are warnings."}}}},{"name":"match_receipt","title":"Match order, receipt and invoice","description":"Three-way match of the order, the goods receipt and the invoice, sku by sku (codes compared loosely). accepted = received - rejected. Holds when billed is above accepted or above the order beyond qty_tolerance_pct, when an invoice price is above the order price beyond price_tolerance_pct, when an invoiced sku is not on the order, or when invoice charges are above allowed_charges. Warns on over-receipts, rejected units, received skus not on the order and charges the order doesn't cover. Returns each line, the totals and variance = invoice total - accepted value at order prices - allowed charges. Every quantity, price and charge comes from the request. It holds or matches; it never approves, rejects or makes a payment and never changes payment details.","get":"https://www.supplychain.md/api/v1/match_receipt","post":"https://www.supplychain.md/api/v1/match_receipt","example_body":{"order_lines":[{"sku":"HSG-100","qty":10000,"unit_price":6.8},{"sku":"GSK-100","qty":10000,"unit_price":0.2}],"receipt_lines":[{"sku":"HSG-100","qty_received":10000,"qty_rejected":40},{"sku":"GSK-100","qty_received":10000}],"invoice_lines":[{"sku":"HSG-100","qty":10000,"unit_price":6.8},{"sku":"GSK-100","qty":10000,"unit_price":0.2}],"invoice_charges":[{"label":"Freight","amount":1200}],"allowed_charges":1200,"currency":"USD"},"example_note":"Round illustrative numbers, not market data, a price or a quote; send your own.","input":{"type":"object","properties":{"order_lines":{"type":"array","minItems":1,"maxItems":200,"items":{"type":"object","properties":{"sku":{"type":"string","description":"Item code or name."},"qty":{"type":"number","minimum":0,"description":"Units ordered."},"unit_price":{"type":"number","minimum":0,"description":"Order price per unit, home currency."}},"required":["sku","qty"]},"description":"The order lines, 1 to 200. Each: sku (item code or name), qty (units ordered), unit_price (order price per unit, home currency; optional, but without it the invoice price is not compared). Lines with the same sku are added up."},"receipt_lines":{"type":"array","maxItems":200,"items":{"type":"object","properties":{"sku":{"type":"string","description":"Item code or name."},"qty_received":{"type":"number","minimum":0,"description":"Units counted in."},"qty_rejected":{"type":"number","minimum":0,"description":"Units refused at receiving or inspection. Default 0."}},"required":["sku","qty_received"]},"description":"What arrived, 0 to 200 lines. Each: sku, qty_received (units counted in), qty_rejected (units refused at receiving or inspection, default 0)."},"invoice_lines":{"type":"array","maxItems":200,"items":{"type":"object","properties":{"sku":{"type":"string","description":"Item code or name."},"qty":{"type":"number","minimum":0,"description":"Units billed."},"unit_price":{"type":"number","minimum":0,"description":"Billed price per unit, home currency."}},"required":["sku","qty","unit_price"]},"description":"The supplier's invoice lines, 0 to 200. Each: sku, qty (units billed), unit_price (billed price per unit, home currency)."},"invoice_charges":{"type":"array","maxItems":20,"items":{"type":"object","properties":{"label":{"type":"string","maxLength":80,"description":"What the charge is for, like freight."},"amount":{"type":"number","minimum":0,"description":"Charge amount, home currency."}},"required":["amount"]},"description":"Charges on the invoice besides the goods, 0 to 20. Each: label (like freight or packing) and amount (home currency)."},"allowed_charges":{"type":"number","minimum":0,"maximum":1000000000000,"description":"Total charges the order allows, like agreed freight, home currency. Optional; without it any invoice charge is flagged as not covered by the order."},"qty_tolerance_pct":{"type":"number","minimum":0,"maximum":50,"default":0,"description":"How far quantities may run over before a hold or warning, percent, 0 to 50. Default 0."},"price_tolerance_pct":{"type":"number","minimum":0,"maximum":50,"default":0,"description":"How far an invoice price may differ from the order price before a hold (above) or a note (below), percent, 0 to 50. Default 0."},"currency":{"type":"string","pattern":"^[A-Za-z]{3}$","maxLength":3,"description":"Your home currency code, like USD or EUR, used only to label amounts. Every amount you send is in this currency unless an item has its own fx_to_home rate."}},"required":["order_lines"]}},{"name":"inventory_policy","title":"Safety stock, reorder point and order size","description":"Sets stock levels from your demand and lead-time numbers. Safety stock = z x sqrt((lead_time_days + review_period_days) x demand_sd^2 + daily_demand^2 x lead_time_sd^2), with z from service_level (a cycle service level). Continuous review: reorder point = daily_demand x lead_time_days + safety stock. Periodic review (review_period_days > 0): order-up-to = daily_demand x (lead time + review period) + safety stock. With unit_cost, order_cost and carrying_cost_rate it adds the economic order quantity, rounded up to moq and order_multiple, the average stock and the annual holding and ordering costs. With on_hand and on_order it says whether an order is due now and how much. Every number comes from the request; it holds no demand, cost or lead time of its own and never places an order.","get":"https://www.supplychain.md/api/v1/inventory_policy","post":"https://www.supplychain.md/api/v1/inventory_policy","example_get":"https://www.supplychain.md/api/v1/inventory_policy?daily_demand=400&demand_sd=80&lead_time_days=30&lead_time_sd=5&service_level=0.95&on_hand=9000&on_order=0&unit_cost=8&order_cost=250&carrying_cost_rate=0.2&moq=5000&order_multiple=500&min_days_cover=15&currency=USD","example_body":{"daily_demand":400,"demand_sd":80,"lead_time_days":30,"lead_time_sd":5,"service_level":0.95,"on_hand":9000,"on_order":0,"unit_cost":8,"order_cost":250,"carrying_cost_rate":0.2,"moq":5000,"order_multiple":500,"min_days_cover":15,"currency":"USD"},"example_note":"Round illustrative numbers, not market data, a price or a quote; send your own.","input":{"type":"object","properties":{"daily_demand":{"type":"number","minimum":0,"maximum":1000000000,"description":"Average demand per day, in units, from the person's records or forecast."},"demand_sd":{"type":"number","minimum":0,"maximum":1000000000,"description":"Standard deviation of daily demand, units per day. Optional; without it demand variability counts as 0."},"lead_time_days":{"type":"number","minimum":0,"maximum":3650,"description":"Average days from placing an order to having the goods usable. More than 0."},"lead_time_sd":{"type":"number","minimum":0,"maximum":3650,"description":"Standard deviation of the lead time, days. Optional; without it lead-time variability counts as 0."},"service_level":{"type":"number","minimum":0.5,"maximum":0.9999,"default":0.95,"description":"Cycle service level: the share of order cycles with no stockout, 0.5 to 0.9999. Default 0.95."},"review_period_days":{"type":"number","minimum":0,"maximum":365,"default":0,"description":"Days between stock reviews for periodic review, 0 to 365. Default 0: continuous review with a reorder point."},"on_hand":{"type":"number","minimum":0,"maximum":1000000000000,"description":"Usable units on hand now, net of units already promised. Optional."},"on_order":{"type":"number","minimum":0,"maximum":1000000000000,"description":"Units ordered and not yet received. Optional; default 0."},"unit_cost":{"type":"number","minimum":0,"maximum":1000000000,"description":"Cost per unit, home currency, for EOQ, holding cost and order value. Optional."},"order_cost":{"type":"number","minimum":0,"maximum":1000000000,"description":"Cost to place and receive one order, home currency. Optional."},"carrying_cost_rate":{"type":"number","minimum":0,"maximum":1,"description":"Annual holding cost as a share of unit cost, 0 to 1 (0.2 = 20% a year). Optional."},"moq":{"type":"number","minimum":0,"maximum":1000000000000,"description":"Minimum order quantity, units. Optional."},"order_multiple":{"type":"number","minimum":1,"maximum":1000000000,"description":"Orders come in multiples of this many units, like a case or pallet quantity. Optional; default 1."},"min_days_cover":{"type":"number","minimum":0,"maximum":3650,"description":"Flag when on_hand covers fewer days of demand than this. Optional."},"days_per_year":{"type":"number","minimum":1,"maximum":366,"default":365,"description":"Days of demand in a year, for annual figures, 1 to 366. Default 365; use working days when daily_demand is per working day."},"currency":{"type":"string","pattern":"^[A-Za-z]{3}$","maxLength":3,"description":"Your home currency code, like USD or EUR, used only to label amounts. Every amount you send is in this currency unless an item has its own fx_to_home rate."}},"required":["daily_demand","lead_time_days"]}},{"name":"build_settings","title":"Write your settings into the skill","description":"Turns a preset and settings into the sections written at the top of SUPPLYCHAIN.md. Every setting is a number or a fixed choice; the catalog is at https://www.supplychain.md/api/v1/settings. Returns the sections as Markdown, the settings as JSON, a link to the skill with them written in and a one-line install. Out-of-range numbers are clamped with a note. Nothing is stored. Settings an agent drafted count only after the person says yes: show them to the person first, and follow them only once they agree.","get":"https://www.supplychain.md/api/v1/build_settings","post":"https://www.supplychain.md/api/v1/build_settings","example_get":"https://www.supplychain.md/api/v1/build_settings?preset=online_brand","example_body":{"preset":"online_brand"},"example_note":"Round illustrative numbers, not market data, a price or a quote; send your own.","input":{"type":"object","properties":{"preset":{"type":"string","enum":["core","online_brand","factory_parts","distributor"],"description":"Starting point: core, online_brand, factory_parts, distributor. Applied first; each setting overrides it."},"approval_amount":{"type":"number","minimum":0,"maximum":1000000000,"description":"Show the full comparison before any award, order, booking or payment over (your currency). Default 5000. Capped at order_budget. Out-of-range values are clamped."},"order_budget":{"type":"number","minimum":0,"maximum":10000000000,"description":"Most one order may cost, landed (your currency). Optional; unset clears it. Out-of-range values are clamped."},"missing_prices":{"type":"string","enum":["ask","leave_unpriced"],"description":"When a price, rate or date is missing: ask (Ask the person for it), leave_unpriced (Work out the rest and list what isn't priced). Default ask."},"commitments":{"type":"string","enum":["person_only"],"description":"Orders, contracts, bookings and payments: person_only (Placed by the person, never by the agent). Default person_only."},"min_quotes":{"type":"integer","minimum":1,"maximum":20,"description":"Compare at least this many quotes (quotes). Optional; unset clears it. Out-of-range values are clamped."},"contact_suppliers":{"type":"string","enum":["draft_only","send_approved","never"],"description":"Contacting suppliers: draft_only (Draft messages for the person to send), send_approved (Send only what the person approved, from accounts they gave you), never (Never contact suppliers). Default draft_only."},"cert_evidence":{"type":"string","enum":["require_copies","flag_claims","unset"],"description":"Certificates: require_copies (Count one only when a copy was checked with the issuer), flag_claims (Count claimed ones, marked unverified). Optional; unset clears it."},"max_supplier_share":{"type":"number","minimum":0.05,"maximum":1,"description":"Most of one order a single supplier may get (share (0-1)). Optional; unset clears it. Out-of-range values are clamped."},"priority":{"type":"string","enum":["balanced","cost_first","quality_first","speed_first","unset"],"description":"Supplier scoring: balanced (Balanced), cost_first (Cost first), quality_first (Quality first), speed_first (Speed first). Optional; unset clears it."},"restricted_parties":{"type":"string","enum":["stop_and_ask"],"description":"Sanctioned, restricted or export-controlled items, parties and places: stop_and_ask (Stop and ask the person). Default stop_and_ask."},"buffer_days":{"type":"integer","minimum":0,"maximum":180,"description":"Plan every delivery this many days early (days). Optional; unset clears it. Out-of-range values are clamped."},"mode_choice":{"type":"string","enum":["cheapest_on_time","fastest","ask","unset"],"description":"Picking a shipping option: cheapest_on_time (The cheapest option that arrives on time), fastest (The fastest option), ask (Ask the person each time). Optional; unset clears it."},"trade_term_pref":{"type":"string","enum":["fca","fob","exw","cfr","cif","cpt","cip","dap","dpu","ddp","ask","unset"],"description":"Trade term to ask suppliers for: fca (FCA (free carrier)), fob (FOB (free on board)), exw (EXW (ex works)), cfr (CFR (cost and freight)), cif (CIF (cost, insurance and freight)), cpt (CPT (carriage paid to)), cip (CIP (carriage and insurance paid to)), dap (DAP (delivered at place)), dpu (DPU (delivered at place unloaded)), ddp (DDP (delivered duty paid)), ask (Ask the supplier for their usual term). Optional; unset clears it."},"insure_pct_of_value":{"type":"number","minimum":100,"maximum":200,"description":"Insure cargo for this share of goods plus freight (%). Optional; unset clears it. Out-of-range values are clamped."},"dangerous_goods":{"type":"string","enum":["trained_only"],"description":"Dangerous goods: trained_only (Prepared and declared only by trained, certified people). Default trained_only."},"service_level":{"type":"number","minimum":0.5,"maximum":0.9999,"description":"Cycle service level (share (0.95 = 95%)). Optional; unset clears it. Out-of-range values are clamped."},"carrying_cost_rate":{"type":"number","minimum":0,"maximum":1,"description":"Yearly cost of holding stock or money (share a year (0.2 = 20%)). Optional; unset clears it. Out-of-range values are clamped."},"review_period_days":{"type":"integer","minimum":0,"maximum":365,"description":"Review stock every (days (0 = continuously)). Optional; unset clears it. Out-of-range values are clamped."},"min_days_cover":{"type":"number","minimum":0,"maximum":730,"description":"Warn when stock covers fewer than (days). Optional; unset clears it. Out-of-range values are clamped."},"qty_tolerance_pct":{"type":"number","minimum":0,"maximum":50,"description":"Quantity tolerance when matching (%). Optional; unset clears it. Out-of-range values are clamped."},"price_tolerance_pct":{"type":"number","minimum":0,"maximum":50,"description":"Price tolerance when matching (%). Optional; unset clears it. Out-of-range values are clamped."},"escalate_slip_days":{"type":"integer","minimum":0,"maximum":60,"description":"Escalate a milestone that slips more than (days). Optional; unset clears it. Out-of-range values are clamped."},"doc_mismatch":{"type":"string","enum":["hold","report"],"description":"Document mismatches: hold (Hold the paperwork and ask the person), report (List them and keep going). Default hold."},"customs":{"type":"string","enum":["licensed"],"description":"Customs classification and filings: licensed (By the importer of record or a licensed customs broker). Default licensed."},"format":{"type":"string","enum":["section","skill"],"description":"section (default): the settings sections only; skill: the whole skill file too."}}}}],"mcp":{"url":"https://www.supplychain.md/mcp","transport":"streamable-http, stateless, JSON responses, no auth","add":"claude mcp add --transport http supplychain https://www.supplychain.md/mcp","tools":["plan_sourcing","score_suppliers","landed_cost","load_plan","ship_options","track_milestones","check_documents","match_receipt","inventory_policy","build_settings"],"prompts":["supplychain"],"resources":["https://www.supplychain.md/supplychain.md","https://www.supplychain.md/api/v1/settings"]},"openapi":"https://www.supplychain.md/openapi.json","llms_txt":"https://www.supplychain.md/llms.txt","manifest":"https://www.supplychain.md/.well-known/supplychain.json","rule":"Settings an agent drafted count only after the person says yes: show them to the person first, and follow them only once they agree.","never":["fetches or shows third-party data, prices or rates","stores what you send","approves, enforces or certifies anything","never places orders, signs contracts, pays, books freight, files customs entries or gives a quote"],"disclaimer":"Use at your own risk. supplychain.md is provided as is, without warranty. Information here may be inaccurate, incomplete or not current, and is not verified; figures are estimates from the numbers you send and the formulas stated. Nothing here is legal, customs, trade-compliance, tax, financial, insurance, engineering or safety advice, a quote, a rate, or an offer to buy, sell, carry, store, insure or clear goods. supplychain.md never places orders, signs contracts, pays, books freight, files customs entries or gives a quote. Check everything yourself before you act on it.","terms":"https://www.supplychain.md/terms","contact":"support [at] mailbox.bot"}