Skip to main content
Glama

TransCAPI MCP server

Lets AI assistants such as Claude answer questions about public transport in Great Britain and Ireland with live data: "When's the next train from Leeds to York, and is it on time?", "Where's the 52 bus?", "Is anything disrupting my route home?"

It connects an assistant to TransCAPI, which covers England, Scotland, Wales and the island of Ireland (plus the Netherlands and Belgium): stops and places, bus and rail departures with live running, live bus positions, journey planning with rail fares, disruptions matched to a route, and measured bus punctuality.

Setup

  1. Get a free API key at https://www.transcapi.com/signup (200 requests a day, every endpoint).

  2. Add the server to your MCP client. For Claude Desktop, in claude_desktop_config.json:

    {
      "mcpServers": {
        "transcapi": {
          "command": "uvx",
          "args": ["transcapi-mcp"],
          "env": { "TRANSCAPI_API_KEY": "your-key" }
        }
      }
    }

    For Claude Code:

    claude mcp add transcapi --env TRANSCAPI_API_KEY=your-key -- uvx transcapi-mcp

    Or install it yourself with pip install transcapi-mcp and run transcapi-mcp.

Related MCP server: mcp-tfl-journey

Tools

Tool

What it answers

search_places

Find a town, village, postcode or stop by name

nearby_stops

Bus, tram and rail stops near a point, with which way the buses go

nearby_stations

Rail stations near a point

bus_departures

What's leaving (or arriving at) a bus stop, with live times for tracked buses

rail_departures

Live trains at a station: expected times, platforms, cancellations, delay reasons

train_service

Every station one train calls at, live for today

bus_service

Every stop one bus journey calls at, and where the bus is now

live_buses

Buses on the road near a point, with delays where tracked

disruptions

Planned works, incidents and line status, by area, line or a journey's route

plan_journey

Public transport journeys between two points (South and West Yorkshire and West Sussex for now)

All tools are read-only.

Configuration

Variable

TRANSCAPI_API_KEY

Required. Your TransCAPI key.

TRANSCAPI_BASE_URL

Optional. Defaults to https://api.transcapi.com.

Attribution

TransCAPI is built on official open data. If you show its data to other people, credit the sources as described at https://www.transcapi.com/docs/data-sources.

Licence

MIT.

Available Tools

10 tools
bus_departuresB
Read-onlyIdempotent

What is leaving (or, with board="arrivals" or "both", arriving at) a bus stop. Tracked buses have an expected time and delay_seconds; others show the timetabled time with source gtfs_scheduled.

Inputs: atcocode (required), board, limit, minutes_ahead. Returns: result

bus_serviceA
Read-onlyIdempotent

Every stop one bus journey calls at, the days it runs, and where the bus is now if it is running. Take trip_id from bus_departures or live_buses.

Inputs: trip_id (required). Returns: result

disruptionsA
Read-onlyIdempotent

Planned works, incidents and line status: bus and tram across Great Britain, plus Tube, DLR, Overground, Elizabeth line and London Trams. Filter by area (lat/lon/radius), mode, operator or line. To ask what affects a particular journey, pass its route as path (an encoded polyline, e.g. a leg's leg_geometry from plan_journey): line numbers repeat across towns, so this is more reliable than line.

Inputs: lat, lon, line, mode, +5 more. Returns: result

live_busesA
Read-onlyIdempotent

Buses on the road within radius metres (up to 10000) of a point, nearest first, each linked to the journey it is working (trip_id) and with delay_seconds where tracked. Filter by line (e.g. "52") or operator.

Inputs: lat (required), lon (required), line, radius, +1 more. Returns: result

nearby_stationsA
Read-onlyIdempotent

Rail stations within radius metres of a point, with their CRS codes for rail_departures.

Inputs: lat (required), lon (required), limit, radius. Returns: result

nearby_stopsB
Read-onlyIdempotent

Bus, tram and rail stops within radius metres of a point, nearest first. Each has an atcocode for bus_departures and towards saying which way its buses go.

Inputs: lat (required), lon (required), limit, radius. Returns: result

plan_journeyA
Read-onlyIdempotent

Public transport journeys between two points, with walking, fares and live positions of buses already running. datetime is ISO 8601 (default now); arrive_by treats it as the latest arrival. Currently covers South and West Yorkshire and West Sussex: elsewhere it returns 422 outside_coverage, which means not covered rather than no route.

Inputs: to_lat (required), to_lon (required), from_lat (required), from_lon (required), +4 more. Returns: result

rail_departuresA
Read-onlyIdempotent

Live trains leaving (or arriving at, with board="arrivals" or "both") a station: expected times, platforms, cancellations and delay reasons from National Rail, plus station messages. crs_code is the 3-letter code, e.g. LDS for Leeds.

Inputs: crs_code (required), board, limit, minutes_ahead. Returns: result

search_placesA
Read-onlyIdempotent

Find towns, villages, postcodes (full or partial, e.g. "S1") and stops by name. Places sharing a name are ranked by size. Give lat/lon to sort by distance from there.

Inputs: query (required), lat, lon, limit. Returns: result

train_serviceA
Read-onlyIdempotent

Every station one train calls at. For a train running today, each call has live status, expected and actual times, and the platform at its next station. Take trip_id from rail_departures.

Inputs: trip_id (required). Returns: result

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

Loading tool schema changelog…

    TDQS

    A3.9/5.0

    Scored across 10 tools

    Disambiguation5/5

    Each tool targets a clearly distinct query type: place search, nearby stops/stations, mode-specific departures, live buses, disruptions, journey/service details, and journey planning. The only potential overlaps (nearby_stops vs nearby_stations, bus_departures vs live_buses) are resolved by explicit output identifiers and descriptions.

    Naming Consistency4/5

    All names use snake_case and are readable, with mostly noun-based resource names. Two tools use verb-led names (search_places, plan_journey), which is a minor deviation from the dominant noun-phrase pattern.

    Tool Count5/5

    Ten tools is well-scoped for a public transport API, covering distinct query categories without redundancy. Each tool has a clear purpose and earns its place.

    Completeness4/5

    The surface covers search, nearby stops/stations, departures, live vehicles, disruptions, service details, and journey planning. Minor gaps exist, such as direct lookup by stop/station identifier and dedicated tram live departures, but most workflows are supported.

    Maintenance

    ActivityMaintained
    ResponsivenessNo recent community issues

    Related MCP Connectors

    Related MCP Servers