Dutch rail travel helper for NS Reisinformatie via the ovNlGateway MCP tool. Use this for stations, departures, arrivals, trips, journey details, and disruptions.
Use ovNlGateway first for Dutch railway and NS questions.
ovNlGateway for anything that can change minute-to-minute: departures, delays, cancellations, platforms, disruptions, or best current trip options.ovNlGateway can answer it.ovNlGateway was used in this turn.trips.search first and then trips.detail with the selected trip's ctxRecon.trips.detail is available.journey.detail for a specific train or journeyDetailRef, not for describing a whole itinerary. When passing a journeyDetailRef, map it to args.id.The tool expects:
{ "action": "<action>", "args": { /* action-specific */ } }
Supported actions:
stations.search -> { query, limit?, countryCodes?, intent? }stations.nearest -> { latitude/longitude or lat/lng, limit?, intent? }departures.list -> { station? | stationCode? | uicCode?, dateTime?, maxJourneys?, lang?, intent? }departures.window -> { station? | stationCode? | uicCode?, fromDateTime+toDateTime OR date+fromTime+toTime, maxJourneys?, lang?, intent? }arrivals.list -> { station? | stationCode? | uicCode?, dateTime?, maxJourneys?, lang?, intent? }trips.search -> { from, to, via?, dateTime?, searchForArrival?, limit?, lang?, intent? }trips.detail -> { ctxRecon, date?, lang? }journey.detail -> { id? | train?, dateTime?, departureUicCode?, transferUicCode?, arrivalUicCode?, omitCrowdForecast? }disruptions.list -> { type?, isActive?, lang?, intent? }disruptions.by_station -> { station, intent? }disruptions.detail -> { type, id }Use args.intent.hard for strict constraints:
directOnlymaxTransfersmaxDurationMinutesdepartureAfterdepartureBeforearrivalAfterarrivalBeforeincludeModesexcludeModesincludeOperatorsexcludeOperatorsincludeTrainCategoriesexcludeTrainCategoriesavoidStationsexcludeCancelledrequireRealtimeplatformEqualsdisruptionTypesactiveOnlyUse args.intent.soft.rankBy as a list for preferences, for example { "rankBy": ["fastest"] }:
fastestfewest_transfersearliest_departureearliest_arrivalrealtime_firstleast_walkingUse hard constraints for wording like must, only, without, geen, alleen, zonder, or niet.
Use soft ranking for wording like prefer, liefst, best, or bij voorkeur.
The tool normally returns a matching kind, for example trips.search or departures.list.
Special cases:
kind: "disambiguation" means the tool could not uniquely resolve a station.
kind: "error" means the request failed or no valid result exists.
departures.listdepartures.windowarrivals.listtrips.searchtrips.detailtrips.search, then trips.detail with the chosen ctxReconjourney.detaildisruptions.listdisruptions.by_station