MCP-Server

RailRoute journey planner

in.railroute/journey-planner
Reisen & Hospitality Öffentlich und erreichbar MCP 2025-11-25

Was dieses MCP kann

Plans intercity travel in India using trains, flights, mixed itineraries, and government buses, with schedules, fares, availability, and booking alternatives.

check_train_options
Check seats and booking options for a train
Live seat availability per class for one train on one date, plus every other way to book it when the through ticket will not confirm: a split at an intermediate station, boarding earlier, alighting later. This is the tool that rescues a waitlisted train. It spends a metered upstream call, so ask it about trains the traveller is actually considering rather than sweeping a list.
Nur Lesen Externer Zugriff
Eingabeschema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['train_number', 'from', 'to', 'date'], 'properties': {'to': {'type': 'string', 'maxLength': 12, 'minLength': 1, 'description': 'Station code the traveller alights at'}, 'date': {'type': 'string', 'pattern': '^\\d{4}-\\d{2}-\\d{2}$'}, 'from': {'type': 'string', 'maxLength': 12, 'minLength': 1, 'description': 'Station code the traveller boards at'}, 'quota': {'enum': ['GN', 'TQ', 'PT', 'LD', 'SS'], 'type': 'string', 'default': 'GN'}, 'include_rac': {'type': 'boolean', 'default': True, 'description': 'RAC is a ticket that carries a right to board, so it counts as bookable by default.'}, 'train_number': {'type': 'string', 'pattern': '^\\d{4,6}$'}}}
find_place
Find a place
Turn what somebody typed into RailRoute place ids. ALWAYS call this before plan_journey. A place is a city with all of its stations and airports — Mumbai covers CSMT, LTT, Dadar, Bandra Terminus and the airport — so the planner can choose the right terminal rather than making the traveller do it. Typing a station code ("CSMT") finds the city and says which terminal matched.
Nur Lesen Idempotent
Eingabeschema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['query'], 'properties': {'limit': {'type': 'integer', 'default': 5, 'maximum': 10, 'minimum': 1}, 'query': {'type': 'string', 'maxLength': 80, 'minLength': 2, 'description': 'A city, station name or station code'}}}
journey_calendar
Which days a route runs
Day-by-day service over a span of dates for a station pair: which days have a direct train and which have none, plus the weekly pattern. Use this when somebody is flexible about when they travel, or asks 'does it run on Sundays'. Timetable only — it says nothing about seats.
Nur Lesen Idempotent
Eingabeschema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['from', 'to', 'start_date'], 'properties': {'to': {'type': 'string', 'maxLength': 12, 'minLength': 1, 'description': 'Destination station code'}, 'days': {'type': 'integer', 'default': 30, 'maximum': 120, 'minimum': 1}, 'from': {'type': 'string', 'maxLength': 12, 'minLength': 1, 'description': 'Origin station code'}, 'start_date': {'type': 'string', 'pattern': '^\\d{4}-\\d{2}-\\d{2}$', 'description': 'First day of the span'}}}
nearby_stations
Stations near a station
Other railway stations within a radius of one station, nearest first. Useful when a place has no service of its own and the traveller needs to know what is reachable — the planner already does this internally, so reach for it only when somebody asks the question directly.
Nur Lesen Idempotent
Eingabeschema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['station_code'], 'properties': {'limit': {'type': 'integer', 'default': 10, 'maximum': 40, 'minimum': 1}, 'radius_km': {'type': 'integer', 'default': 40, 'maximum': 150, 'minimum': 1}, 'station_code': {'type': 'string', 'maxLength': 12, 'minLength': 1}}}
next_confirmed_date
The next date with a confirmed seat
Search forward up to a month for the first date this route can actually be travelled with a confirmed berth — direct trains and one-change journeys together. Use it when a traveller is flexible about WHEN and the date they asked for is waitlisted. EXPENSIVE: it checks seats across dozens of trains and dates, so it is limited to a few calls an hour; for a single date use check_train_options instead.
Nur Lesen Externer Zugriff
Eingabeschema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['from', 'to', 'date'], 'properties': {'to': {'type': 'string', 'maxLength': 12, 'minLength': 1, 'description': 'Destination station code'}, 'date': {'type': 'string', 'pattern': '^\\d{4}-\\d{2}-\\d{2}$', 'description': 'The date to search forward FROM'}, 'from': {'type': 'string', 'maxLength': 12, 'minLength': 1, 'description': 'Origin station code'}, 'quota': {'enum': ['GN', 'TQ', 'PT', 'LD', 'SS'], 'type': 'string', 'default': 'GN'}}}
plan_journey
Plan a journey
Every practical way to get from one place to another: direct trains with their fares per class, journeys with one change of train, flights, mixed train-and-flight itineraries, and GOVERNMENT BUSES from the state road transport corporations, priced from their own reservation systems. This is the whole answer in one call. Place ids come from find_place. Use it for bus questions too. On a large share of the corridors these corporations serve there is no through train at all — Mysuru to Mangaluru runs twenty-five buses a day and not one direct train — so a journey this tool answers with a bus is often the only through service that exists, not a second-best. Pass `train_class` when the traveller has named one ("3A", "sleeper") and every train is priced in it; leave it out and each train is priced in every class we have evidence it carries. Pass `modes: "trains_only"` when they have said train — do not ask them to choose otherwise, because the point of this planner is that they do not have to. Pass `arrive_by: true` when they named a time they must BE somewhere rather than a time they want to leave.
Nur Lesen Idempotent
Eingabeschema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['from', 'to', 'date'], 'properties': {'to': {'type': 'string', 'maxLength': 80, 'minLength': 2, 'description': 'Place id from find_place'}, 'date': {'type': 'string', 'pattern': '^\\d{4}-\\d{2}-\\d{2}$', 'description': 'Travel date in IST. Today is allowed; the past is refused.'}, 'from': {'type': 'string', 'maxLength': 80, 'minLength': 2, 'description': 'Place id from find_place'}, 'limit': {'type': 'integer', 'default': 8, 'maximum': 20, 'minimum': 1, 'description': 'How many of EACH kind to return. Raise it only if the traveller asks to see more.'}, 'modes': {'enum': ['any', 'trains_only', 'flights_only'], 'type': 'string', 'default': 'any', 'description': "Restrict the answer. Default 'any' ranks trains, flights and government buses together — leave it out unless the traveller has actually named a mode. 'trains_only' and 'flights_only' both drop the buses."}, 'quota': {'enum': ['GN', 'TQ', 'PT', 'LD', 'SS'], 'type': 'string', 'default': 'GN'}, 'arrive_by': {'type': 'boolean', 'default': False, 'description': 'When true, `date` is the day they must ARRIVE, and journeys may depart the day before.'}, 'train_class': {'enum': ['2S', 'SL', 'CC', '3E', '3A', '2A', '1A', 'EC'], 'type': 'string', 'description': 'Price every train in this class: 2S Second Sitting, SL Sleeper, CC AC Chair Car, 3E AC 3 Economy, 3A AC 3 Tier, 2A AC 2 Tier, 1A First AC, EC Executive Chair Car. Omit to price each train in every class we know it carries.'}, 'ask_preferences': {'type': 'boolean', 'default': True, 'description': 'Whether to ask the traveller for a travel class when they have not named one. Set false for automated or bulk use.'}, 'include_connections': {'enum': ['auto', 'always', 'never'], 'type': 'string', 'default': 'auto', 'description': "Journeys with one change of train. 'auto' searches for them when direct trains are thin, which is when they matter; 'always' searches regardless and costs a few more seconds."}}}
station_departures
Departures from a station
Every train scheduled to call at a station, in departure order — the enquiry board, not a journey plan. Use plan_journey when somebody wants to get somewhere; use this when they are asking what leaves from here. Scheduled times only.
Nur Lesen Idempotent
Eingabeschema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['station_code'], 'properties': {'after': {'type': 'string', 'pattern': '^\\d{2}:\\d{2}$', 'description': 'Only departures at or after this IST clock time, HH:MM'}, 'limit': {'type': 'integer', 'default': 20, 'maximum': 50, 'minimum': 1}, 'station_code': {'type': 'string', 'maxLength': 12, 'minLength': 1, 'description': 'Station code, e.g. CNB'}}}
train_schedule
Train timetable
Every stop of one train with its scheduled arrival and departure, in order. Scheduled times only — this says nothing about where the train is today.
Nur Lesen Idempotent
Eingabeschema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['train_number'], 'properties': {'train_number': {'type': 'string', 'pattern': '^\\d{4,6}$'}}}
Hinzugefügt
next_confirmed_date
29. September 2026 02:40
Hinzugefügt
nearby_stations
29. September 2026 02:40
Hinzugefügt
journey_calendar
29. September 2026 02:40
Hinzugefügt
station_departures
29. September 2026 02:40
Hinzugefügt
train_schedule
29. September 2026 02:40
Hinzugefügt
check_train_options
29. September 2026 02:40
Hinzugefügt
plan_journey
29. September 2026 02:40
Hinzugefügt
find_place
29. September 2026 02:40