Endpoints: 28,729MCP servers: 18,413Payout addresses: 2,070Paid calls: 1,528Letters: 13Defects: 1,322counted 2 min ago
teppi

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 yourselfcurl -s https://api.teppi.xyz/v1/evidence/sha256:4cc95e0f8bb51e9d551a29d8056e7233de67b68aec169567bab150e9298d942f | sha256sum