{"serverId":"mcp-registry/io.github.lxxmng/ocean-schedules","tools":[{"name":"compare_lanes","fixed":{"name":"compare_lanes","description":"Compare ocean carriers serving an origin→destination port pair, ranked by on-time reliability and transit time. Use this to decide which line to book. With Navo Tokens this costs 10 tokens per call; an empty answer is free.","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","required":["origin","destination"],"properties":{"origin":{"type":"string","description":"Origin port UN/LOCODE, e.g. CNSHA"},"destination":{"type":"string","description":"Destination port UN/LOCODE, e.g. NLRTM"}},"additionalProperties":false},"annotations":{"readOnlyHint":true}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":165,"tokensAfter":165},{"name":"find_best_sailings","fixed":{"name":"find_best_sailings","description":"Decision query: the best upcoming sailings on a lane, ONE per carrier (next bookable departure), ranked. Filter by date window, max transit days, min on-time reliability, cut-off still open, and direct-vs-transshipment. Use this to answer \"what should I book?\". etd, eta, cutoff.at and the from/to window are port-local times with no timezone offset (2026-10-01T13:00:00): quote the digits, do not convert; only retrieved_at is UTC. With Navo Tokens this costs 80 tokens for a new port pair and 10 fo","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","required":["origin","destination"],"properties":{"to":{"type":"string","description":"Latest departure date YYYY-MM-DD (default: +60 days)"},"from":{"type":"string","description":"Earliest departure date YYYY-MM-DD (default: today)"},"sort":{"enum":["recommended","reliability","fastest","soonest"],"type":"string","description":"Ranking (default recommended = reliability blended with transit)"},"cutoff":{"type":"string","const":"open","description":"Only sailings whose booking cut-off has not passed. Sailings where no cut-off is held are kept by default; each option carries cutoff_status saying which case it is."},"origin":{"type":"string","description":"Origin port UN/LOCODE or name resolves upstream, e.g. CNSHA"},"destination":{"type":"string","description":"Destination port UN/LOCODE, e.g. NLRTM"},"transshipment":{"type":"boolean","description":"true keeps only sailings that change ship, false only sailings proven direct. Omit it for both: a sailing whose routing we do not hold is returned by neither side, because we will not call a sailing direct without evidence."},"max_transit_days":{"type":"number","description":"Maximum transit time in days"},"reliability_floor":{"type":"number","description":"Minimum 90-day on-time %, 0-100"},"cutoff_include_unknown":{"type":"boolean","description":"Default true. false narrows to sailings where a deadline is actually held and still ahead."}},"additionalProperties":false},"annotations":{"readOnlyHint":true}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":575,"tokensAfter":575},{"name":"get_schedules","fixed":{"name":"get_schedules","description":"Published forward sailing schedules on an origin→destination lane: carrier, vessel, voyage, ETD/ETA, cut-offs and routing (leg count, transshipment ports, distance, CO2 per TEU and the port-by-port route_legs where the carrier publishes them; null where they do not), soonest first, from each carrier's own published schedules. Use this to find concrete upcoming departures to book. Every schedule time (published_departure, published_arrival, cut-offs, route_legs times, the from window) is the loca","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","required":["origin","destination"],"properties":{"from":{"type":"string","description":"Earliest departure date as YYYY-MM-DD, with no time and no timezone offset. Must be today or later. Sailings are returned from 00:00 of that date, read in each port's local time, onward. Omit for today."},"origin":{"type":"string","description":"Origin port UN/LOCODE, e.g. CNSHA"},"destination":{"type":"string","description":"Destination port UN/LOCODE, e.g. NLRTM"}},"additionalProperties":false},"annotations":{"readOnlyHint":true}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":310,"tokensAfter":310}],"toolsChanged":3,"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."}