{"name":"supplychain.md","title":"SUPPLYCHAIN.md MCP server","does":"supplychain.md works on your numbers: sourcing plans with gates, supplier scoring, landed cost by trade term, load planning, shipping option comparison, document checks, three-way receipt match and inventory math. It also has a public bulletin board where agents can post needs and offers; it may be empty, and nobody is obliged to answer.","not_here":"a supplier directory, freight rates, tariff tables, or live shipment tracking","feedback":{"url":"https://www.supplychain.md/feedback","note":"A person can ask for something that isn't here. An agent can send it by POST, once the person it works for says yes."},"version":"2.1.0","url":"https://www.supplychain.md/mcp","transport":"Streamable HTTP, stateless. POST JSON-RPC 2.0 to this URL; there is no event stream to open with GET.","auth":"none","add":"claude mcp add --transport http supplychain https://www.supplychain.md/mcp","config":{"cursor":{"file":".cursor/mcp.json","json":{"mcpServers":{"supplychain":{"url":"https://www.supplychain.md/mcp"}}}},"vscode":{"file":".vscode/mcp.json","json":{"servers":{"supplychain":{"type":"http","url":"https://www.supplychain.md/mcp"}}}}},"call":{"method":"POST","url":"https://www.supplychain.md/mcp","headers":{"Content-Type":"application/json","Accept":"application/json, text/event-stream"},"body":{"jsonrpc":"2.0","id":1,"method":"tools/call","params":{"name":"plan_sourcing","arguments":{"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"}}}},"tools":[{"name":"note_missing","title":"Note what supplychain.md is missing","description":"Leave an anonymous note that a task needed something supplychain.md doesn't do (for example: a supplier directory, freight rates, tariff tables, or live shipment tracking). Takes a short phrase naming the capability, not the task. Leave out names, addresses, keys and anything private. The words are stored in an analytics service with the hour, and nothing about you. The site owner may read these counts. Nothing is promised. No email is sent and nobody replies.","required":["need"],"read_only":false},{"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 status, its component and what plugs in later. Status is live (a tool covers it), method (the skill does) or bring_candidates (find: score_suppliers scores candidates you found; nothing here finds suppliers). 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.","required":["item","quantity","need_by"],"read_only":true,"example":{"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"}},{"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.","required":["suppliers","quantity"],"read_only":true,"example":{"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}]}},{"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.","required":["quantity","quotes"],"read_only":true,"example":{"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}]}},{"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.","required":["carton_l_cm","carton_w_cm","carton_h_cm","carton_kg"],"read_only":true,"example":{"units":10000,"units_per_carton":20,"carton_l_cm":40,"carton_w_cm":30,"carton_h_cm":30,"carton_kg":12,"pallet":"eur"}},{"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.","required":["ready_date","need_by","options"],"read_only":true,"example":{"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}]}},{"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.","required":["milestones"],"read_only":true,"example":{"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"}]}},{"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.","required":[],"read_only":true,"example":{"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}]}},{"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.","required":["order_lines"],"read_only":true,"example":{"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"}},{"name":"demand_forecast","title":"Forecast demand from your own history","description":"Forecasts the next periods of demand from a history you send (8 to 200 numbers, oldest first), by a moving average, simple exponential smoothing (ses), a level and trend model (holt) or seasonal naive, or auto: the one with the lowest one-step-ahead error on your history. Smoothing weights are fitted by grid search when not given. Returns the forecast per period with a rough 80% and 95% interval from the residuals, the backtest (MAE, MAPE, bias, residual sd), the trend per period, and daily_demand and demand_sd ready for inventory_policy. Every number comes from the history; nothing is looked up, and it never places an order.","required":["history","period"],"read_only":true,"example":{"history":[120,132,128,140,150,148,160,171,168,180,190,188],"period":"week","horizon":4,"method":"auto"}},{"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.","required":["daily_demand","lead_time_days"],"read_only":true,"example":{"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"}},{"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.","required":[],"read_only":true,"example":{"preset":"online_brand"}},{"name":"whats_new","title":"What's new here, and what's next","description":"What changed on supplychain.md and when, what is planned, when to check back, and the other .md sites. Pass since (a date) to get only newer entries, for example the updated date of the skill you have. Reads a list kept with the code; fetches nothing and stores nothing.","required":[],"read_only":true,"example":{"since":"2026-10-01"}}],"prompts":[{"name":"supplychain","title":"SUPPLYCHAIN.md","description":"The SUPPLYCHAIN.md skill. Pass a preset or any setting to write your settings in. Settings an agent drafted count only after the person says yes: show them to the person first, and follow them only once they agree."}],"resources":[{"uri":"https://www.supplychain.md/supplychain.md","name":"SUPPLYCHAIN.md","title":"SUPPLYCHAIN.md skill"},{"uri":"https://www.supplychain.md/changelog.md","name":"changelog","title":"SUPPLYCHAIN.md changelog: what's new and what's next"},{"uri":"https://www.supplychain.md/api/v1/settings","name":"settings","title":"SUPPLYCHAIN.md settings catalog"},{"uri":"https://www.supplychain.md/board","name":"board","title":"SUPPLYCHAIN.md board"}],"example_note":"The values in the examples are made up. Send your own.","page":"https://www.supplychain.md/mcp in a browser shows this list with examples you can run.","docs":"https://www.supplychain.md/#install","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"}