Server definition
- Hash
- sha256:4cc95e0f8bb51e9d551a29d8056e7233de67b68aec169567bab150e9298d942f
- What it is
- What a remote MCP server returned when asked what it offers: 8 tools
The blob, as servednamed by its sha256
{
"instructions": "RailRoute plans intercity journeys in India across trains, flights and the combinations of them.\n\nAlways call find_place first: plan_journey takes place ids (slugs like \"mumbai\"), not station codes, and guessing a slug from a city name fails quietly.\n\nplan_journey answers in one call: direct trains, journeys with one change of train, flights, and mixed shapes. It does not need a follow-up call per option.\n\nTrain fares come back per travel class. If the traveller has named a class, pass `train_class` and everything is priced in it; if they have not, leave it out — every class we have evidence for is priced, and the answer carries the question to ask them.\n\nHow to read what comes back:\n- null means unknown. It never licenses a guess, and 'price unavailable' is a real answer.\n- `fares` is a map from travel class to rupees for one adult, estimated from the published tables. `classes_source: \"unknown\"` means we have never recorded that train, not that it has no classes.\n- A class missing from a train's `classes` was NOT priced on purpose. Do not fill the gap with a fare from another train or another class.\n- Every time is a SCHEDULED time. Nothing here predicts a delay.\n- RAC is a ticket, not a waitlist: it is issued, it carries a right to board, and it must never be described as unconfirmed or hidden away under a waitlist heading.\n- Fares are estimates or lowest-observed prices, never quotes. Say so when you repeat one.\n- A journey marked not offerable is still a real option that was considered; it carries the reason it was judged unusable.\n\nRailRoute does not sell tickets. Hand the traveller to IRCTC or the airline to book.\n\nAnswers carry a railroute.in link — `book_on_railroute` on a plan, `view_at` on a train or station. Share the relevant one in your reply: it opens the same search on the site with live seat availability, live running status and the booking hand-off, which are things this data cannot carry.",
"tools": [
{
"description": "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.",
"inputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"date": {
"pattern": "^\\d{4}-\\d{2}-\\d{2}$",
"type": "string"
},
"from": {
"description": "Station code the traveller boards at",
"maxLength": 12,
"minLength": 1,
"type": "string"
},
"include_rac": {
"default": true,
"description": "RAC is a ticket that carries a right to board, so it counts as bookable by default.",
"type": "boolean"
},
"quota": {
"default": "GN",
"enum": [
"GN",
"TQ",
"PT",
"LD",
"SS"
],
"type": "string"
},
"to": {
"description": "Station code the traveller alights at",
"maxLength": 12,
"minLength": 1,
"type": "string"
},
"train_number": {
"pattern": "^\\d{4,6}$",
"type": "string"
}
},
"required": [
"train_number",
"from",
"to",
"date"
],
"type": "object"
},
"name": "check_train_options",
"outputSchema": null
},
{
"description": "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.",
"inputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"limit": {
"default": 5,
"maximum": 10,
"minimum": 1,
"type": "integer"
},
"query": {
"description": "A city, station name or station code",
"maxLength": 80,
"minLength": 2,
"type": "string"
}
},
"required": [
"query"
],
"type": "object"
},
"name": "find_place",
"outputSchema": null
},
{
"description": "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.",
"inputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"days": {
"default": 30,
"maximum": 120,
"minimum": 1,
"type": "integer"
},
"from": {
"description": "Origin station code",
"maxLength": 12,
"minLength": 1,
"type": "string"
},
"start_date": {
"description": "First day of the span",
"pattern": "^\\d{4}-\\d{2}-\\d{2}$",
"type": "string"
},
"to": {
"description": "Destination station code",
"maxLength": 12,
"minLength": 1,
"type": "string"
}
},
"required": [
"from",
"to",
"start_date"
],
"type": "object"
},
"name": "journey_calendar",
"outputSchema": null
},
{
"description": "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.",
"inputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"limit": {
"default": 10,
"maximum": 40,
"minimum": 1,
"type": "integer"
},
"radius_km": {
"default": 40,
"maximum": 150,
"minimum": 1,
"type": "integer"
},
"station_code": {
"maxLength": 12,
"minLength": 1,
"type": "string"
}
},
"required": [
"station_code"
],
"type": "object"
},
"name": "nearby_stations",
"outputSchema": null
},
{
"description": "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.",
"inputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"date": {
"description": "The date to search forward FROM",
"pattern": "^\\d{4}-\\d{2}-\\d{2}$",
"type": "string"
},
"from": {
"description": "Origin station code",
"maxLength": 12,
"minLength": 1,
"type": "string"
},
"quota": {
"default": "GN",
"enum": [
"GN",
"TQ",
"PT",
"LD",
"SS"
],
"type": "string"
},
"to": {
"description": "Destination station code",
"maxLength": 12,
"minLength": 1,
"type": "string"
}
},
"required": [
"from",
"to",
"date"
],
"type": "object"
},
"name": "next_confirmed_date",
"outputSchema": null
},
{
"description": "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.\n\nUse 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.\n\nPass `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.",
"inputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"arrive_by": {
"default": false,
"description": "When true, `date` is the day they must ARRIVE, and journeys may depart the day before.",
"type": "boolean"
},
"ask_preferences": {
"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.",
"type": "boolean"
},
"date": {
"description": "Travel date in IST. Today is allowed; the past is refused.",
"pattern": "^\\d{4}-\\d{2}-\\d{2}$",
"type": "string"
},
"from": {
"description": "Place id from find_place",
"maxLength": 80,
"minLength": 2,
"type": "string"
},
"include_connections": {
"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.",
"enum": [
"auto",
"always",
"never"
],
"type": "string"
},
"limit": {
"default": 8,
"description": "How many of EACH kind to return. Raise it only if the traveller asks to see more.",
"maximum": 20,
"minimum": 1,
"type": "integer"
},
"modes": {
"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.",
"enum": [
"any",
"trains_only",
"flights_only"
],
"type": "string"
},
"quota": {
"default": "GN",
"enum": [
"GN",
"TQ",
"PT",
"LD",
"SS"
],
"type": "string"
},
"to": {
"description": "Place id from find_place",
"maxLength": 80,
"minLength": 2,
"type": "string"
},
"train_class": {
"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.",
"enum": [
"2S",
"SL",
"CC",
"3E",
"3A",
"2A",
"1A",
"EC"
],
"type": "string"
}
},
"required": [
"from",
"to",
"date"
],
"type": "object"
},
"name": "plan_journey",
"outputSchema": null
},
{
"description": "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.",
"inputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"after": {
"description": "Only departures at or after this IST clock time, HH:MM",
"pattern": "^\\d{2}:\\d{2}$",
"type": "string"
},
"limit": {
"default": 20,
"maximum": 50,
"minimum": 1,
"type": "integer"
},
"station_code": {
"description": "Station code, e.g. CNB",
"maxLength": 12,
"minLength": 1,
"type": "string"
}
},
"required": [
"station_code"
],
"type": "object"
},
"name": "station_departures",
"outputSchema": null
},
{
"description": "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.",
"inputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"train_number": {
"pattern": "^\\d{4,6}$",
"type": "string"
}
},
"required": [
"train_number"
],
"type": "object"
},
"name": "train_schedule",
"outputSchema": null
}
]
}Verify it yourself
curl -s https://api.teppi.xyz/v1/evidence/sha256:4cc95e0f8bb51e9d551a29d8056e7233de67b68aec169567bab150e9298d942f | sha256sum