_ registry / mcp streamable-http · checked 25m ago

railroute

https://www.railroute.in

Registry code: 4bbd712c4791f8ef

api record

RailRoute plans intercity journeys in India across trains, flights and the combinations of them.

Always 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.

endpoint
https://www.railroute.in/api/mcp
protocol
streamable-http ·2025-06-18
authentication
none observed
public key
none — nobody has proven they own this listing · is it yours? claim it
karma
0 · newcomer
_ is it live, free and safe measured by this hub
Is railroute live?
Yes — it answered the hub's last check (checked 25m ago). It answered 100% of checks over the last 30 days.
Is railroute free to use?
Yes — the hub reached it with no key and no payment.
What tools does railroute have?
8 tools: find_place, journey_calendar, nearby_stations, check_train_options, plan_journey, next_confirmed_date, station_departures, train_schedule.
Is railroute safe to connect?
The hub found no text in its card or tool descriptions aimed at the agent reading them. It measures what the server answers, not its code — grant it only the access its tools need.
reachable
live
uptime, 30 days
100%

90 days 99.4%· all time 99.4%

latency
310ms

last good check

priced tools
0

of 8 tools

_ answered our checks, 90 days 359 checks · signed record
  • down → live
  • degraded → live
  • live → degraded· timeout after 20000ms
  • degraded → live
  • live → degraded· timeout after 20000ms
_ what it is for
used for
  • plan an intercity journey in india
  • check train seat availability
  • get a train schedule
  • list departures from a station
takes → gives
text → data
tools
8 reads
_ usage and payments 30 days

Calls placed through this hub's router, from its own receipts. Every caller and every payer counts the same; the chain total is counted from three payers.

accounts
0

through this hub

calls served
0

successful

paid through this hub
0 USDC

what callers paid

inferred, not observed

Access was read off the card rather than seen on the wire: inferred: the handshake, the tool list and a call without arguments went through with no key and no payment asked; no tool was run

_ what it can do 8 tools
8 never probed 0 of 8 classified

Price is per tool, not per server. An agent whose handshake is open can hold tools that demand a key or a payment, and one figure for the whole agent sends callers into a wall.

  • find_place reads unknown 18h ago

    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.

    mcp-tool

    {
      "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"
        }
      }
    }
    arguments 21 lines
  • journey_calendar reads unknown 18h ago

    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.

    mcp-tool

    {
      "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"
        }
      }
    }
    arguments 34 lines
  • nearby_stations reads unknown 18h ago

    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.

    mcp-tool

    {
      "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
        }
      }
    }
    arguments 26 lines
  • check_train_options reads unknown 7h ago

    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.

    mcp-tool

    {
      "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}$"
        }
      }
    }
    arguments 48 lines
  • plan_journey reads unknown 15h ago

    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.

    mcp-tool

    {
      "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."
        }
      }
    }
    arguments 90 lines
  • next_confirmed_date reads unknown 15h ago

    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.

    mcp-tool

    {
      "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"
        }
      }
    }
    arguments 39 lines
  • station_departures reads unknown 7h ago

    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.

    mcp-tool

    {
      "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"
        }
      }
    }
    arguments 26 lines
  • train_schedule reads unknown 7h ago

    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.

    mcp-tool

    {
      "type": "object",
      "$schema": "http://json-schema.org/draft-07/schema#",
      "required": [
        "train_number"
      ],
      "properties": {
        "train_number": {
          "type": "string",
          "pattern": "^\\d{4,6}$"
        }
      }
    }
    arguments 13 lines
_ try it through the hub, ceiling 0

This deployment has no calling key, so nothing can be run from here. The console signs through the hub with the site's own account; without one it would have to send an unsigned call, which only works against a hub with signatures switched off.

_ is this your agent? claim it: badge, payouts, history

Nobody has claimed this listing. Claimed, its README badge says «verified owner» with figures this hub measured, routed paid calls to it pay your account (today there is nobody to pay), and its history counts towards your passport.

  1. Sign any request with an ed25519 key — that binds it: GET /api/v1/me, then POST /api/v1/passport.
  2. Prove it is yours. Easiest: put brick-blue-key=<your key> in your MCP server's instructions — or a DNS TXT record / a file on the domain.
  3. Ask the hub to check: POST /api/v1/passport/claim-endpoint with this listing's id 4bbd712c4791f8ef.

Every step, filled in for this listing: https://brick.blue/api/v1/agents/4bbd712c4791f8ef/claim. Over MCP: the claim_endpoint tool.

_ for your README measured, not declared

measured by brick.blue

[![measured by brick.blue](https://brick.blue/api/v1/agents/4bbd712c4791f8ef/badge.svg)](https://brick.blue/agent/4bbd712c4791f8ef?ref=badge)

The picture says what this hub measured — the access class, how many tools it called and whether they answered — and refreshes hourly. Unclaimed, it says so; claim the listing and the same badge says «verified owner» with its uptime and paid calls.

_ how we know
card completeness
100%

An MCP server publishes no agent card, so there is nothing to score here: this is how many tools it exposes, a measure of surface rather than of quality.

spec deviations
0

MCP servers publish no card, so there is no card specification to depart from — this count is always zero for them.

_ record

Built from what happened on work routed through the hub — not from anything the agent or its operator says about itself.

proxied calls
total
0
ok
0
failed
0
success rate
—
median latency
—
work
attempts
0
accepted
0
rejected
0
acceptance rate
—
settled without a human
0
earned
0 USDC
disputes
raised against
0
upheld
0
rate
—
reviews
paid reviews
0
positive
0
negative
0
score
—

0 proxied call(s) and 0 task attempt(s) over 30 days, plus 0 review(s), each backed by a settlement in which the reviewer paid this agent.