Skip to content

TransitRadar — UK trains and buses

by transitradar.co.uk · remote · no sign-in to list tools · v1.3.0 · published by uk.co.transitradar

Live UK rail boards, journey planning, train history, units, lifts, disruptions, punctuality.

Final · 4Changes · 7

15 tools: 4 do something that can't be undone, 7 change things and 4 only read.

Scanned Oct 21, 2026

4 checks matched something in the tool definitions. No finding is not a safety guarantee. How the checks work.

claude mcp add --transport http transitradar https://transitradar.co.uk/mcp

Findings

Matches of fixed checks, with the text they matched.

4 warn
  • The server marks "plan_journey" read-only (readOnlyHint: true), and its own name, description or input give the class "irreversible".

    Matched text

    annotations: {"readOnlyHint":true,"destructiveHint":false}; The input addresses people (input.to): what it sends cannot be taken back.

    What this check looks for
  • The server marks "bus_stop_departures" read-only (readOnlyHint: true), and its own name, description or input give the class "irreversible".

    Matched text

    annotations: {"readOnlyHint":true,"destructiveHint":false}; The name "bus_stop_departures" says "stop": a word for a change.

    What this check looks for
  • The server marks "station_departures" read-only (readOnlyHint: true), and its own name, description or input give the class "irreversible".

    Matched text

    annotations: {"readOnlyHint":true,"destructiveHint":false}; The input addresses people (input.to): what it sends cannot be taken back.

    What this check looks for
  • The server marks "plan_door_to_door" read-only (readOnlyHint: true), and its own name, description or input give the class "irreversible".

    Matched text

    annotations: {"readOnlyHint":true,"destructiveHint":false}; The input addresses people (input.to): what it sends cannot be taken back.

    What this check looks for

Tools

Open a tool for its reasons and full description. Descriptions are the publisher's own words, shown as they are.

15 tools

Can't be undone 4Claude Code: ask
  • bus_stop_departuresNext buses from a bus stop anywhere in Great Britain.1 finding

    Why it is in this group

    • The name "bus_stop_departures" says "stop": a word for a change.
    • The input addresses people (input.to): what it sends cannot be taken back.
    • The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.

    Findings

    • Warn

      The server marks "bus_stop_departures" read-only (readOnlyHint: true), and its own name, description or input give the class "irreversible".

      Matched text

      annotations: {"readOnlyHint":true,"destructiveHint":false}; The name "bus_stop_departures" says "stop": a word for a change.

      What this check looks for
    Description, as the server wrote it
    Next buses from a bus stop anywhere in Great Britain. Takes a stop name with its town or area; many stops share a name across the country, so 'Trafalgar Square' alone can land in Greater Manchester while 'Trafalgar Square London' finds Charing Cross. A stop letter can follow, e.g. 'Trafalgar Square London stop X'. A stop's ATCO/NaPTAN code also works. Live predictions in London (TfL); elsewhere the timetable, so a 'scheduled' time is not a live estimate. With 'to', only buses that go on to that stop are listed, each with its scheduled time there: the answer to 'next bus from Trafalgar Square to Brixton Station'. Those boards always come from the timetable, with the live bus and its delay where it can be identified. Other matching stops are returned alongside.

    Annotations the server declares

    • title: Next buses from a stop
    • destructiveHint: false
    • readOnlyHint: true
  • plan_door_to_doorPlan a GB journey that may combine trains, buses and short walks, between railway stations, bus stops or coordinates, from the timetables.1 finding

    Why it is in this group

    • The input addresses people (input.to): what it sends cannot be taken back.
    • The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.

    Findings

    • Warn

      The server marks "plan_door_to_door" read-only (readOnlyHint: true), and its own name, description or input give the class "irreversible".

      Matched text

      annotations: {"readOnlyHint":true,"destructiveHint":false}; The input addresses people (input.to): what it sends cannot be taken back.

      What this check looks for
    Description, as the server wrote it
    Plan a GB journey that may combine trains, buses and short walks, between railway stations, bus stops or coordinates, from the timetables. Each place can be a station name or CRS code, a bus stop with its town (e.g. 'Briggate Leeds'), a stop code, or 'lat,lon'. Returns the next few ways after a time with every leg: mode, line or train, where to board and alight, and times. Timetabled, not live. For rail only, plan_journey is simpler.

    Annotations the server declares

    • title: Plan a journey by train and bus
    • destructiveHint: false
    • readOnlyHint: true
  • plan_journeyPlan a GB rail journey between two stations from the timetable, including changes: the next few ways to get there after a time, each with departure, arrival, number of changes and …1 finding

    Why it is in this group

    • The input addresses people (input.to): what it sends cannot be taken back.
    • The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.

    Findings

    • Warn

      The server marks "plan_journey" read-only (readOnlyHint: true), and its own name, description or input give the class "irreversible".

      Matched text

      annotations: {"readOnlyHint":true,"destructiveHint":false}; The input addresses people (input.to): what it sends cannot be taken back.

      What this check looks for
    Description, as the server wrote it
    Plan a GB rail journey between two stations from the timetable, including changes: the next few ways to get there after a time, each with departure, arrival, number of changes and every train to catch with where to board and alight. This is the timetable, not live running; for live times on a direct train use station_departures with 'to', and for one train's progress use get_train with its planning ID.

    Annotations the server declares

    • title: Plan a rail journey
    • destructiveHint: false
    • readOnlyHint: true
  • station_departuresLive departure or arrival board for a GB railway station, from National Rail's Darwin feed: booked time, expected time, actual time once reported, platform, operator and any delay …1 finding

    Why it is in this group

    • The input addresses people (input.to): what it sends cannot be taken back.
    • The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.

    Findings

    • Warn

      The server marks "station_departures" read-only (readOnlyHint: true), and its own name, description or input give the class "irreversible".

      Matched text

      annotations: {"readOnlyHint":true,"destructiveHint":false}; The input addresses people (input.to): what it sends cannot be taken back.

      What this check looks for
    Description, as the server wrote it
    Live departure or arrival board for a GB railway station, from National Rail's Darwin feed: booked time, expected time, actual time once reported, platform, operator and any delay or cancellation reason. With 'to', only trains that also call at that station are listed, each with its booked, expected and actual time there: the live answer to 'next train from Bolton to Darwen'. On an arrivals board, 'to' is where the train came from. An expected time equal to the booked one means no revision has been published, which usually means running to plan. A missing expected time is not a statement that the train is on time. Reasons are National Rail's own wording.

    Annotations the server declares

    • title: Live departures or arrivals
    • destructiveHint: false
    • readOnlyHint: true
Changes things 7Claude Code: ask
  • bus_disruptionsCurrent and planned bus disruptions in Great Britain from the Bus Open Data Service (SIRI-SX): diversions, closed stops, roadworks and events, each with the operators and lines aff…No findings

    Why it is in this group

    • Nothing in its name or description says what it does, so it is counted as a write.
    • The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.
    Description, as the server wrote it
    Current and planned bus disruptions in Great Britain from the Bus Open Data Service (SIRI-SX): diversions, closed stops, roadworks and events, each with the operators and lines affected and the stops named. Filter by operator code (NOC) or by a word matched against the text, e.g. a town, road or line. Rail incidents are the separate 'disruptions' tool.

    Annotations the server declares

    • title: Bus disruptions
    • destructiveHint: false
    • readOnlyHint: true
  • bus_performanceToday's bus punctuality estimate for Great Britain, nationally and by operator: journeys counted, the share on time, early and late, and the average delay.No findings

    Why it is in this group

    • Nothing in its name or description says what it does, so it is counted as a write.
    • The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.
    Description, as the server wrote it
    Today's bus punctuality estimate for Great Britain, nationally and by operator: journeys counted, the share on time, early and late, and the average delay. Each bus journey is counted once, judged on arrival near its last stop, and only in the roughly 25 urban areas we sample, so it is an ESTIMATE of how buses are running, not an official figure. 'On time' follows the GB bus standard: up to 1 minute early or 5 minutes 59 late; running early counts against it.

    Annotations the server declares

    • title: How buses are running today
    • destructiveHint: false
    • readOnlyHint: true
  • daily_performanceTransitRadar's own record of one completed day on GB passenger rail: how many trains ran, how many were cancelled, the share of recorded arrivals within five minutes at their desti…No findings

    Why it is in this group

    • Nothing in its name or description says what it does, so it is counted as a write.
    • The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.
    Description, as the server wrote it
    TransitRadar's own record of one completed day on GB passenger rail: how many trains ran, how many were cancelled, the share of recorded arrivals within five minutes at their destination, the same share counting each cancellation as a failure, per-operator figures, and the commonest delay and cancellation reasons. Measured at the destination, so it is stricter than, and not comparable with, the industry's published PPM. Available from 2026-08-06 up to yesterday; where fewer than half of arrivals were recorded, no punctuality figure is given.

    Annotations the server declares

    • title: How the railway did on a day
    • destructiveHint: false
    • idempotentHint: true
    • readOnlyHint: true
  • direct_destinationsEvery station reachable from a GB railway station WITHOUT CHANGING TRAINS on a date, after a time, each with the train that gets there soonest (a later but faster train beats an ea…No findings

    Why it is in this group

    • Nothing in its name or description says what it does, so it is counted as a write.
    • The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.
    Description, as the server wrote it
    Every station reachable from a GB railway station WITHOUT CHANGING TRAINS on a date, after a time, each with the train that gets there soonest (a later but faster train beats an earlier slow one), sorted by arrival. Includes places reached by staying aboard a train that divides or joins another en route: those rows carry an 'association' naming where, and the passenger must be in the right portion. Timetabled times, not live. Use plan_journey when a change of train is acceptable or a destination is already known.

    Annotations the server declares

    • title: Where can I go without changing
    • destructiveHint: false
    • readOnlyHint: true
  • disruptionsCurrent GB rail incidents and planned engineering work from National Rail's KnowledgeBase: what is affected, the operators, the dates and a link to National Rail's notice.No findings

    Why it is in this group

    • Nothing in its name or description says what it does, so it is counted as a write.
    • The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.
    Description, as the server wrote it
    Current GB rail incidents and planned engineering work from National Rail's KnowledgeBase: what is affected, the operators, the dates and a link to National Rail's notice. Optionally filter by operator (name or two-letter code) or by any text, such as a station, line or reason.

    Annotations the server declares

    • title: Rail disruptions
    • destructiveHint: false
    • readOnlyHint: true
  • station_infoDetails of a GB railway station: address, managing operator, facilities, step-free access, industry codes (CRS, TIPLOC, STANOX, NLC) and, where Network Rail publishes it, the live …No findings

    Why it is in this group

    • Nothing in its name or description says what it does, so it is counted as a write.
    • The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.
    Description, as the server wrote it
    Details of a GB railway station: address, managing operator, facilities, step-free access, industry codes (CRS, TIPLOC, STANOX, NLC) and, where Network Rail publishes it, the live status of each public lift. Lift status is 'In service', 'Out of service' or 'Data not available'; the last means the status is not known, and Network Rail's wording for it advises checking before travel. A station with no lifts listed is not necessarily a station without lifts; it may not report live status yet.

    Annotations the server declares

    • title: Station details and lift status
    • destructiveHint: false
    • readOnlyHint: true
  • train_historyHow one timetabled train has actually run over recent days, by its planning ID (from find_train, station_departures or get_train): each day's delay at its final destination, cancel…No findings

    Why it is in this group

    • Nothing in its name or description says what it does, so it is counted as a write.
    • The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.
    Description, as the server wrote it
    How one timetabled train has actually run over recent days, by its planning ID (from find_train, station_departures or get_train): each day's delay at its final destination, cancellations and any reason given, plus the share on time. Delay is measured where the train ends, not at any station along the way. History follows the planning ID, which changes when the timetable changes, so a newly timetabled train has little history; days the train did not run are simply absent.

    Annotations the server declares

    • title: How a train has run recently
    • destructiveHint: false
    • idempotentHint: true
    • readOnlyHint: true
Only reads 4Claude Code: allow
  • find_trainSearch the GB rail timetable for specific trains.No findings

    Why it is in this group

    • The name "find_train" says "find": a word for reading.
    Description, as the server wrote it
    Search the GB rail timetable for specific trains. The query combines terms: an operator and a headcode ('LNER 1S09', 'EMR 1H26'), a time and a station ('12:19 from Corby' — matched within about ten minutes either side), two stations ('Corby to St Pancras', which also finds trains calling at both), or a planning ID / UID ('C12345', or its first few characters). A headcode alone is not unique: the same four characters run in several parts of the country at once, so results for one headcode can be different trains, told apart by origin and destination. Returns planning IDs to pass to get_train.

    Annotations the server declares

    • title: Find a train
    • destructiveHint: false
    • readOnlyHint: true
  • find_unitLook up a GB passenger train unit or carriage by the five- or six-digit number painted on it (e.g.No findings

    Why it is in this group

    • The name "find_unit" says "find": a word for reading.
    Description, as the server wrote it
    Look up a GB passenger train unit or carriage by the five- or six-digit number painted on it (e.g. '360107'): which service it is working now, the other services it is booked to work today, and the last calling point it was reported at. This comes from the operator's rolling-stock allocation, which is a plan and may be wrong during disruption. The position is the last calling point reported, not a live GPS fix — the train is somewhere beyond it.

    Annotations the server declares

    • title: Where is a train unit
    • destructiveHint: false
    • readOnlyHint: true
  • get_trainFull details of one train by its planning ID (UID, e.g.No findings

    Why it is in this group

    • The name "get_train" says "get": a word for reading.
    Description, as the server wrote it
    Full details of one train by its planning ID (UID, e.g. 'C04207'): every public calling point with booked, expected and actual times, platforms and per-stop cancellations, plus — for today's trains — where it was last reported and how late. A cancellation can apply to only some stops. 'lastReport' is the last place signalling or movement data placed the train, not a GPS position. Reasons are National Rail's own words.

    Annotations the server declares

    • title: Train details and live running
    • destructiveHint: false
    • readOnlyHint: true
  • search_stationsFind GB railway stations by name or code.No findings

    Why it is in this group

    • The name "search_stations" says "search": a word for reading.
    Description, as the server wrote it
    Find GB railway stations by name or code. Returns each station's three-letter CRS code (e.g. KGX), its TIPLOC and whether it has step-free access. The CRS code is what the other station tools accept.

    Annotations the server declares

    • title: Search stations
    • destructiveHint: false
    • idempotentHint: true
    • readOnlyHint: true

This is not a safety rating, and no finding is not a safety guarantee. The groups and findings come from fixed checks of the tool definitions the server returned on the date shown, not from its code or what it does when called. How the checks work.

Install

Pinned to version 1.3.0. Values in angle brackets are yours to fill in.

claude mcp add --transport http transitradar https://transitradar.co.uk/mcp

Run in a terminal.

Claude Code permissions

Allow the reads, ask before a change, deny the deletes. Paste into .claude/settings.json.

.claude/settings.json
{
  "permissions": {
    "allow": [
      "mcp__transitradar__get_train",
      "mcp__transitradar__find_train",
      "mcp__transitradar__find_unit",
      "mcp__transitradar__search_stations"
    ],
    "ask": [
      "mcp__transitradar__plan_journey",
      "mcp__transitradar__bus_performance",
      "mcp__transitradar__disruptions",
      "mcp__transitradar__train_history",
      "mcp__transitradar__bus_stop_departures",
      "mcp__transitradar__station_info",
      "mcp__transitradar__station_departures",
      "mcp__transitradar__daily_performance",
      "mcp__transitradar__bus_disruptions",
      "mcp__transitradar__plan_door_to_door",
      "mcp__transitradar__direct_destinations"
    ],
    "deny": []
  }
}

Tools that only read are allowed, tools that change things ask first, tools that delete or cancel are denied. It assumes the server is installed as transitradar. Review it before you use it.