{"serverId":"mcp-registry/io.github.baneado98/freight-pulse","tools":[{"name":"booking_strategy","fixed":{"name":"booking_strategy","description":"When and how to RESERVE space so your box isn't rolled and your cargo isn't stranded on the dock. Give the lane + ship date + criticality, and it reads the demand PRESSURE (composing the seasonality calendar — CNY / Golden Week / transpacific peak — with the equipment-crunch signal) into a band (slack → acute), then returns: the optimal BOOKING WINDOW (lead days, plus a criticality buffer, and the date to book by), the SPOT vs CONTRACT rollover probability and roll-delay days, and the GUARANTEED","inputSchema":{"type":"object","required":["origin_port","dest_port"],"properties":{"dest_port":{"type":"string","description":"Destination port."},"ship_date":{"type":"string","description":"Ship date (YYYY-MM-DD) — selects the seasonal/equipment pressure. Optional; default today."},"criticality":{"type":"string","description":"'low' / 'normal' / 'high' / 'critical' — how badly a rollover delay hurts. Optional; default normal."},"origin_port":{"type":"string","description":"Origin port (city name, UN/LOCODE, or 'City, Country')."},"container_type":{"type":"string","description":"Container '20ft'/'40ft'/'40HC'. Optional; default '40ft'."},"annual_containers":{"type":"number","description":"Annual committed volume on this lane (containers/yr) — triggers the named-account allocation call. Optional."},"base_freight_per_container_usd":{"type":"number","description":"Base ocean freight per container (USD) to price the premium & delay cost. Optional — derived if omitted."}}},"annotations":{"readOnlyHint":false,"destructiveHint":false,"idempotentHint":false}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: false, destructiveHint: false, idempotentHint: false (inferred from the name).","verify":true}],"tokensBefore":425,"tokensAfter":425},{"name":"check_lc_documents","fixed":{"name":"check_lc_documents","description":"Will your letter-of-credit documents GET PAID? Banks reject roughly 60-70% of first-presentation documentary-credit submissions over DOCUMENTARY DISCREPANCIES. Give the fields of the credit + the presented documents (commercial invoice, bill of lading, insurance, packing list) and it applies the UCP 600 rules a trade-finance checker uses, returning the DISCREPANCIES that would make an examining bank reject the presentation — each tied to its UCP article with a remedy: invoice amount over the cre","inputSchema":{"type":"object","required":[],"properties":{"blClean":{"type":"boolean","description":"Is the B/L clean (no defect clause)?"},"incoterm":{"type":"string","description":"Credit incoterm (CIF/CIP trigger the insurance check)."},"expiryDate":{"type":"string","description":"Credit expiry date (YYYY-MM-DD)."},"beneficiary":{"type":"string","description":"Credit beneficiary (the seller)."},"creditAmount":{"type":"number","description":"The credit (LC) amount."},"shipmentDate":{"type":"string","description":"On-board / shipment date on the B/L (YYYY-MM-DD)."},"insuranceDate":{"type":"string","description":"Insurance document date (YYYY-MM-DD)."},"insuredAmount":{"type":"number","description":"Insured amount on the insurance document."},"invoiceAmount":{"type":"number","description":"Commercial invoice amount."},"portOfLoading":{"type":"string","description":"Credit's required port of loading."},"creditCurrency":{"type":"string","description":"Credit currency (e.g. USD)."},"amountTolerance":{"type":"number","description":"Amount tolerance fraction (e.g. 0.05 = ±5%). Default 0."},"blPortOfLoading":{"type":"string","description":"Port of loading on the B/L."},"insuredCurrency":{"type":"string","description":"Insurance currency."},"invoiceCurrency":{"type":"string","description":"Invoice currency."},"portOfDischarge":{"type":"string","description":"Credit's required port of discharge."},"presentationDate":{"type":"string","description":"Date documents are presented to the bank (YYYY-MM-DD)."},"blPortOfDischarge":{"type":"string","description":"Port of discharge on the B/L."},"insuranceRequired":{"type":"boolean","description":"Does the credit require an insurance document?"},"invoiceBeneficiary":{"type":"string","description":"Who issued the invoice."},"latestShipmentDate":{"type":"string","description":"Latest shipment date (YYYY-MM-DD)."},"creditGoodsDescription":{"type":"string","description":"Goods description as written in the credit."},"presentationPeriodDays":{"type":"number","description":"Presentation period in days (UCP default 21)."},"invoiceGoodsDescription":{"type":"string","description":"Goods description on the invoice."},"packingListGoodsDescription":{"type":"string","description":"Goods description on the packing list."}}},"annotations":{"readOnlyHint":true}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":787,"tokensAfter":787},{"name":"check_watches","fixed":{"name":"check_watches","description":"Evaluate the lane watches you registered with create_watch against the LIVE modeled market and return the alerts that FIRED. For each watch it gathers the current cross-validated spot + direction, the modeled lane reliability, any active disruptions, and (when a watch needs it) the forecast/timing book call + expected move, then checks every threshold and reports which ones tripped — with the observed value, the reason and a severity. Pass a watch_id to check just one, or omit it to evaluate the","inputSchema":{"type":"object","required":[],"properties":{"watch_id":{"type":"string","description":"Evaluate only this watch id. Optional — omit to evaluate all your watches."}}},"annotations":{"readOnlyHint":true}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":201,"tokensAfter":201},{"name":"compare_modes","fixed":{"name":"compare_modes","description":"Decide the TRANSPORT MODE for a shipment — OCEAN vs AIR vs SEA-AIR — on TOTAL economic cost, not just freight. The other tools price the ocean move; this one answers the importer's prior question: should these goods even go by sea? It costs all three modes and recommends the economically optimal one. Air is priced correctly on the IATA CHARGEABLE WEIGHT = max(actual gross weight, volumetric weight at 167 kg/m³) with an air fuel (FSC) + security (SSC) + handling stack — so bulky-but-light cargo i","inputSchema":{"type":"object","required":["origin_port","dest_port","value"],"properties":{"band":{"type":"string","description":"Air/sea-air rate band to use: 'low', 'typical' or 'high'. Optional; default 'typical'."},"value":{"type":"number","description":"Merchandise value in USD — REQUIRED. It is the capital tied up in transit and the basis of the whole mode trade-off."},"deadline":{"type":"string","description":"Optional hard arrival deadline (ISO 'YYYY-MM-DD'). If given, the engine adds an expected-stockout cost from each mode's probability of arriving late."},"dest_port":{"type":"string","description":"Destination port (city name, UN/LOCODE, or 'City, Country')."},"free_days":{"type":"number","description":"Carrier free days before D&D on the ocean leg (default 5 if a dwell is given). Optional."},"ship_date":{"type":"string","description":"Intended ship date (ISO). Drives the ocean seasonal surcharges & transit window. Optional; defaults to today."},"volume_m3":{"type":"number","description":"Shipment volume in cubic metres. Drives the IATA volumetric weight (m³ × 167 kg). Provide this and/or weight_kg."},"weight_kg":{"type":"number","description":"Shipment gross weight in kg. Provide this and/or volume_m3 — air is billed on the chargeable weight (max of actual and volumetric)."},"fuel_proxy":{"type":"number","description":"Optional VLSFO $/tonne for the ocean BAF model. Optional."},"overweight":{"type":"boolean","description":"Flag an overweight ocean load (freight surcharge). Optional."},"origin_port":{"type":"string","description":"Origin port (city name, UN/LOCODE, or 'City, Country'). Same resolution as get_spot_rate."},"container_type":{"type":"string","description":"Container size '20ft'/'40ft'/'40HC' for the ocean leg. Optional; defaults to '40ft'."},"jet_fuel_proxy":{"type":"number","description":"Optional jet-fuel proxy to drive the air FSC. Omit for a modeled reference level."},"stockout_penalty":{"type":"number","description":"USD penalty if the goods miss the deadline (lost sale / line-down / expedite). Defaults to the goods' value when a deadline is given without one. Optional."},"estimated_days_at_port":{"type":"number","description":"Days the box dwells at destination (adds D&D to the ocean freight leg). Optional."},"annual_capital_rate_pct":{"type":"number","description":"Annual cost-of-capital as a fraction (e.g. 0.12 = 12%/yr) for goods in transit. Optional; default 0.12."},"annual_holding_rate_pct":{"type":"number","description":"Annual inventory holding/carrying rate as a fraction (e.g. 0.25 = 25%/yr) for the p90 safety-stock buffer. Optional; default 0.25."}}},"annotations":{"readOnlyHint":true}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":883,"tokensAfter":883},{"name":"create_watch","fixed":{"name":"create_watch","description":"Register a standing WATCH on a lane so freight-pulse alerts you when something changes — the feature that makes it a recurring daily tool, not a one-shot lookup. Give a lane + one or more THRESHOLDS and it persists the watch SERVER-SIDE (in our own store, per your key): 'spot-below' / 'spot-above' a USD level (buying window / cost ceiling), 'reliability-below' a score (rollover/delay risk), 'disruption' (any active disruption appears on the corridor/ports), 'book-now' (the forecast/timing engine","inputSchema":{"type":"object","required":["origin_port","dest_port","thresholds"],"properties":{"label":{"type":"string","description":"Optional name for the watch."},"dest_port":{"type":"string","description":"Destination port to watch."},"thresholds":{"type":"array","items":{"type":"object"},"description":"Conditions to fire on. Each: { metric, value? }. metric ∈ spot-below | spot-above | reliability-below | disruption | book-now | forecast-rising | forecast-falling. value: USD for spot-*, 0-100 for reliability-below, % for forecast-*. e.g. [{ metric:'spot-below', value:2800 }, { metric:'disruption' }]."},"origin_port":{"type":"string","description":"Origin port to watch."},"container_type":{"type":"string","description":"Container '20ft'/'40ft'/'40HC'. Optional; default '40ft'."}}},"annotations":{"readOnlyHint":false,"destructiveHint":false,"idempotentHint":false}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: false, destructiveHint: false, idempotentHint: false (inferred from the name).","verify":true}],"tokensBefore":372,"tokensAfter":372},{"name":"export_compliance","fixed":{"name":"export_compliance","description":"Check whether it is LEGAL to EXPORT a given product to a destination, and whether it needs an export LICENCE — the goods-side trade-compliance question (NOT denied-party / sanctioned-person screening, which is a separate regulated process this tool does NOT perform). Pass a product description (reusing the same HS classifier as get_landed_cost) or an HS code + the lane. It classifies the goods against the DUAL-USE control lists (a modeled ECCN / EU Annex-I dual-use category: advanced electronics","inputSchema":{"type":"object","required":["origin_port","dest_port"],"properties":{"hs_code":{"type":"string","description":"Explicit HS code (6+ digits). Provide this OR product."},"product":{"type":"string","description":"Product description to classify, e.g. 'thermal imaging camera', 'encryption appliance', 'cotton t-shirts'. Provide this OR hs_code."},"dest_port":{"type":"string","description":"Destination port — its COUNTRY drives the embargo / licence-required check."},"origin_port":{"type":"string","description":"Origin port — its COUNTRY is the exporter jurisdiction."},"container_type":{"type":"string","description":"Container size '20ft'/'40ft'/'40HC' (informational). Optional."}}},"annotations":{"readOnlyHint":true}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":347,"tokensAfter":347},{"name":"get_all_in_rate","fixed":{"name":"get_all_in_rate","description":"Get the ALL-IN ocean freight cost for a lane — the TRUE landed cost of the move, not just the base spot rate. get_spot_rate returns the index-blended BASE; this returns base + every applicable carrier SURCHARGE & accessorial, which routinely inflates the real cost by +30-60%. Models the opaque thicket importers actually pay: Terminal Handling (origin+destination), BAF/LSS bunker fuel (modeled from a marine-fuel proxy and the corridor's burn), CAF currency adjustment, Peak-Season Surcharge (only ","inputSchema":{"type":"object","required":["origin_port","dest_port"],"properties":{"dest_port":{"type":"string","description":"Destination port (city name, UN/LOCODE, or 'City, Country')."},"free_days":{"type":"number","description":"Carrier free days at destination before Demurrage & Detention accrues (default 5 when an estimated dwell is supplied)."},"ship_date":{"type":"string","description":"Intended shipment date (ISO 'YYYY-MM-DD'). Drives Peak-Season Surcharge & GRI applicability. Optional; defaults to today."},"fuel_proxy":{"type":"number","description":"Optional live VLSFO marine-fuel price ($/tonne) to drive the BAF model. Omit to use a recent representative level (~$600/t, tagged modeled)."},"overweight":{"type":"boolean","description":"Flag an overweight load to include the overweight surcharge. Optional; default false."},"origin_port":{"type":"string","description":"Origin port (city name, UN/LOCODE, or 'City, Country'). Same resolution as get_spot_rate."},"container_type":{"type":"string","description":"Container size: '20ft', '40ft' or '40HC'. Optional; defaults to '40ft'."},"estimated_days_at_port":{"type":"number","description":"Total days you expect the box to sit at the destination terminal. If it exceeds free_days, the engine adds the expected (tiered, escalating) Demurrage & Detention. Omit to skip D&D."}}},"annotations":{"readOnlyHint":true}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":526,"tokensAfter":526},{"name":"get_landed_cost","fixed":{"name":"get_landed_cost","description":"Get the full LANDED COST (cost puesto en destino) of an import — the number the importer's margin actually depends on, not just the freight. Returns merchandise value (FOB) + all-in ocean freight (base + every surcharge) + insurance (CIF) + CUSTOMS DUTY + import VAT/consumption tax, as a line-item breakdown, plus the % of landed cost that is freight vs duties vs taxes. Includes an HS-CODE CLASSIFIER: pass a product description ('bluetooth earbuds', 'office chairs', 'cotton t-shirts') and it prop","inputSchema":{"type":"object","required":["origin_port","dest_port","fob_value"],"properties":{"hs_code":{"type":"string","description":"Explicit HS code (6+ digits, e.g. '851830'). Overrides the text classifier. Provide this OR product."},"product":{"type":"string","description":"Product description to classify, e.g. 'bluetooth earbuds', 'office chairs', 'cotton t-shirts', 'car tyres'. The classifier maps it to an HS6 heading. Provide this OR hs_code."},"dest_port":{"type":"string","description":"Destination port (city name, UN/LOCODE). The destination COUNTRY drives the duty bloc (US/EU/UK/CA/AU/JP) and import VAT."},"fob_value":{"type":"number","description":"Merchandise value (FOB) in USD — the goods value at origin. REQUIRED: duties & taxes are computed on this (via CIF)."},"free_days":{"type":"number","description":"Carrier free days before D&D (default 5 if a dwell is given)."},"ship_date":{"type":"string","description":"Intended ship date (ISO). Drives seasonal freight surcharges. Optional; defaults to today."},"fuel_proxy":{"type":"number","description":"Optional VLSFO $/tonne for the BAF model. Optional."},"overweight":{"type":"boolean","description":"Flag an overweight load (freight surcharge). Optional."},"origin_port":{"type":"string","description":"Origin port (city name, UN/LOCODE, or 'City, Country'). The origin COUNTRY drives Section 301 / FTA / antidumping."},"container_type":{"type":"string","description":"Container size '20ft'/'40ft'/'40HC' for the freight leg. Optional; defaults to '40ft'."},"insurance_rate_pct":{"type":"number","description":"Marine insurance as a fraction of FOB+freight for the CIF model (default 0.005 = 0.5%). Optional."},"estimated_days_at_port":{"type":"number","description":"Days the box will dwell at destination (adds Demurrage & Detention to the freight leg). Optional."}}},"annotations":{"readOnlyHint":true}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":665,"tokensAfter":665},{"name":"get_lane_trend","fixed":{"name":"get_lane_trend","description":"Forecast the ocean spot rate for a lane (origin → destination) and get a grounded BOOK-NOW-OR-WAIT call for a given ship date. Returns: a weeks-long cross-validated time series; a STATISTICAL FORECAST several weeks ahead (Holt-Winters / ETS triple exponential smoothing) with prediction intervals that widen with the horizon, plus naïve/drift/seasonal-naïve baselines and an honest BACKTEST (MAPE/RMSE/MASE) of the forecast's accuracy; the ocean-freight SEASONALITY CALENDAR overlaid on your ship dat","inputSchema":{"type":"object","required":["origin_port","dest_port"],"properties":{"weeks":{"type":"number","description":"How many weeks of history to analyze (2–52, default 8). The window is capped by how much history we've accumulated for the lane."},"dest_port":{"type":"string","description":"Destination port (city name, UN/LOCODE, or 'City, Country')."},"ship_date":{"type":"string","description":"The intended shipment date (ISO 'YYYY-MM-DD' or any parseable date). The seasonality calendar (CNY, peak season, GRIs, blank sailings) is evaluated for THIS date. Optional; defaults to today."},"origin_port":{"type":"string","description":"Origin port (city name, UN/LOCODE, or 'City, Country'). Same resolution as get_spot_rate."},"forecast_weeks":{"type":"number","description":"How many weeks ahead to forecast the rate (1–26, default 6). Prediction intervals widen with the horizon."}}},"annotations":{"readOnlyHint":true}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":400,"tokensAfter":400},{"name":"get_port_intel","fixed":{"name":"get_port_intel","description":"Get the PORT-CONGESTION & DISRUPTION intelligence for a lane — the OPERATIONAL state of the origin and destination ports and the live disruption events that move your transit time and your price. The rate tools tell you what a move costs; this tells you whether the PORTS can actually clear it on schedule. Returns a 0-100 CONGESTION INDEX for both the origin and destination ports on your ship date (structural berth/anchorage pressure + seasonal peak + active disruptions), the extra WAITING DAYS t","inputSchema":{"type":"object","required":["origin_port","dest_port"],"properties":{"dest_port":{"type":"string","description":"Destination port (city name, UN/LOCODE, or 'City, Country')."},"ship_date":{"type":"string","description":"Intended ship date (ISO 'YYYY-MM-DD'). The congestion peak windows and dated disruptions (Panama drought, ILA strike, typhoon/hurricane season, Red-Sea diversion) are evaluated for THIS date. Optional; defaults to today."},"origin_port":{"type":"string","description":"Origin port (city name, UN/LOCODE, or 'City, Country'). Same resolution as get_spot_rate."},"container_type":{"type":"string","description":"Container size '20ft'/'40ft'/'40HC' (informational for the lane label). Optional; defaults to '40ft'."}}},"annotations":{"readOnlyHint":true}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":360,"tokensAfter":360},{"name":"get_scorecard","fixed":{"name":"get_scorecard","description":"Read your accumulating supplier/carrier/lane SCORECARD — the KPIs you've fed with record_performance. Returns, per subject, on-time %, average delay, damage/discrepancy/rollover rates, a 0-100 reliability score and an improving/declining/stable TREND, ranked best-OTP-first, with the best & worst performer. Omit 'subject' for the whole network or pass one to drill in. The standing performance history that turns freight-pulse into a recurring decision tool (who do I award next year's volume to?). ","inputSchema":{"type":"object","required":[],"properties":{"subject":{"type":"string","description":"Drill into one carrier/supplier/lane. Optional — omit for the whole scorecard."},"subject_type":{"type":"string","description":"'carrier' (default), 'supplier' or 'lane' — disambiguates the subject."}}},"annotations":{"readOnlyHint":true}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":235,"tokensAfter":235},{"name":"get_spot_rate","fixed":{"name":"get_spot_rate","description":"Get the CURRENT ocean container spot rate for a lane (origin port → destination port) so you can answer 'should I book this shipment now or wait?'. Returns ONE normalized USD figure for the requested container size, a CONFIDENCE SCORE, and the MARKET DIRECTION (rising / falling / stable). Unlike calling a single freight API, this CROSS-VALIDATES multiple live indices — Drewry's World Container Index (WCI) and the Freightos Baltic Index (FBX), read server-side, plus your own SeaRates key if you s","inputSchema":{"type":"object","required":["origin_port","dest_port"],"properties":{"dest_port":{"type":"string","description":"Destination port: a city name ('Los Angeles', 'New York', 'Hamburg'), a UN/LOCODE ('USLAX'), or 'City, Country'."},"origin_port":{"type":"string","description":"Origin port: a city name ('Shanghai', 'Ningbo', 'Rotterdam'), a UN/LOCODE ('CNSHA', 'NLRTM') or 'City, Country'."},"container_type":{"type":"string","description":"Container size: '20ft', '40ft' or '40HC' (high-cube). Optional; defaults to '40ft' (the size the public indices quote). Synonyms like TEU/FEU/40HQ are accepted."}}},"annotations":{"readOnlyHint":true}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":322,"tokensAfter":322},{"name":"payment_terms","fixed":{"name":"payment_terms","description":"Recommend the TRADE-FINANCE / PAYMENT TERMS for an import deal — the other half of the transaction the freight tools ignore. Give the lane (→ exporter country at origin, importer country at destination), the invoice value and the counterparty RELATIONSHIP, and it scores the payment-instrument spectrum — CASH-IN-ADVANCE / LETTER OF CREDIT (irrevocable, possibly CONFIRMED) / DOCUMENTARY COLLECTION D/P (documents against payment) / D/A (documents against acceptance) / OPEN ACCOUNT — on its RISK ALL","inputSchema":{"type":"object","required":["origin_port","dest_port","invoice_value"],"properties":{"incoterm":{"type":"string","description":"Optional Incoterms 2020 rule (CIF, FOB, CIP…) for the document-set tie-in note."},"confirmed":{"type":"boolean","description":"Force the LC pricing confirmed/unconfirmed. Optional; default = auto by importer-country risk."},"dest_port":{"type":"string","description":"Destination port — its COUNTRY is taken as the importer/buyer country (drives the country-risk band)."},"origin_port":{"type":"string","description":"Origin port — its COUNTRY is taken as the exporter/seller country."},"relationship":{"type":"string","description":"Counterparty relationship strength: 'new', 'developing' (default), 'established' or 'long-term'. The single biggest driver of the recommendation."},"invoice_value":{"type":"number","description":"Commercial invoice value in USD. REQUIRED — finance costs are priced on it."},"container_type":{"type":"string","description":"Container size '20ft'/'40ft'/'40HC'. Optional; defaults to '40ft'."},"exporter_country":{"type":"string","description":"Override the exporter ISO-2 country (else taken from the origin port)."},"importer_country":{"type":"string","description":"Override the importer ISO-2 country (else taken from the destination port)."}}},"annotations":{"readOnlyHint":false,"destructiveHint":false,"idempotentHint":false}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: false, destructiveHint: false, idempotentHint: false (inferred from the name).","verify":true}],"tokensBefore":519,"tokensAfter":519}],"toolsChanged":13,"tokensSaved":0,"todo":[],"note":"Deterministic fixes. Changes marked verify need a human look before shipping (renames, inferred annotations, inferred types, removed text). Parameter descriptions in `todo` need to be written by someone who knows the API."}