uktrains
Provides UK train journey search, fare comparison, and pre-filled booking links to National Rail Enquiries.
Click on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@uktrainsfind trains from London to Manchester departing after 9am tomorrow"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
uktrains
An agent-first UK train journey CLI and stdio MCP server. It's built for a personal LLM agent to search journeys, compare fares, and hand the human a pre-filled booking link — the tool never takes payment and never claims a booking was made. Fulfilment means one thing: a correct, pre-filled retailer checkout link the human taps to pay.
JSON is the default output everywhere (CLI and MCP alike); pass --pretty
on the CLI for a human-readable table.
What it does today
Resolves UK station names/aliases to CRS codes, including group stations ("Manchester", "London").
Builds a journey intent from
--from/--toplus--depart-afteror--arrive-by(and the return-leg equivalents), and produces pre-filled booking links (National Rail Enquiries journey planner, plus Trainline where a verified station mapping exists).At Tier 1, fetches BR Fares flow-level fares (railcard-aware) and ranks options by cheapest/fastest/balanced, including return-vs-two-singles comparison.
doctorreports which tier is active and validates configured keys.setupwalks an agent (or a human) through the two optional signups.
live (CLI) and live_status (MCP) exist as structured stubs today — they
return a TIER_UNAVAILABLE error with a setup pointer rather than pretending
to have live data. Live departures/delays and richer in-tool journey planning
land in a later plan (Tier 2).
Related MCP server: hafasmcp
Capability tiers
No free API combines journey planning with fares, and Darwin live data requires a Rail Data Marketplace account with human approval — so the tool degrades gracefully instead of demanding setup upfront.
Tier | Requires | Unlocks |
0 | Nothing (bundled station data) | Station resolution, journey intent construction, pre-filled NRE + Trainline booking links. The core "get me a train" flow works the moment you build it — the human sees times and fares on the retail page. |
1 | BR Fares API key (free, non-commercial, ~minutes to register, 100 calls/day) | In-tool fare quotes with railcard discounts — rank cheapest vs. fastest, compare return vs. two singles, before handing over a link. |
2 | RDM account + "LDBWS – Public" subscription (free, 1–3 day approval) | Live departures, delays, platforms, cancellations; real in-tool journey planning with a realtime overlay. Not implemented yet — arrives in the next plan. |
Run uktrains doctor at any time to see the active tier and exactly what's
missing to reach the next one.
Install
For agents
If you are an LLM agent: read AGENTS.md — it is written for you and covers install, MCP registration, setup shepherding, and how to present options to your human.
git clone https://github.com/aaryan-gulia/uktrains.git
cd uktrains
npm install
npm run buildThe built CLI is at dist/cli/index.js and runnable directly:
node dist/cli/index.js search --from KGX --to YRK --depart-after 2026-08-01T09:00:00+01:00Or invoke it via npx once linked/published, or point an MCP client at the
built entry point (below) — no global install required.
For humans
Same steps, then optionally npm link (or install globally once published)
so the uktrains command is on PATH.
Requires Node.js 20+.
MCP client config
If uktrains is on PATH (e.g. via npm link):
{
"command": "uktrains",
"args": ["mcp"]
}From a source checkout, without installing globally:
{
"command": "node",
"args": ["/absolute/path/to/uktrains/dist/cli/index.js", "mcp"]
}The server exposes four tools: search_journeys, get_booking_link,
live_status (Tier 2 stub), and lookup_station. Tool descriptions are
normative — they tell the calling agent, for example, that arriveBy is a
station arrival time and that the agent is responsible for adding transit
and buffer time to the actual appointment.
CLI examples
# Search a journey (JSON by default; --pretty for a human-readable table)
uktrains search --from KGX --to YRK --depart-after 2026-08-01T09:00:00+01:00 --pretty
# Same, but restrict fares to a railcard and rank by cheapest
uktrains search --from "London" --to "Manchester" \
--depart-after 2026-08-01T09:00:00+01:00 \
--railcard 16-25 --rank-by cheapest
# Booking links only, no fare lookup
uktrains link --from KGX --to YRK --depart-after 2026-08-01T09:00:00+01:00
# Resolve a station name or CRS code
uktrains stations york
# Agent-drivable setup: machine-readable next steps for both signups
uktrains setup --json
# Store a key once the human has completed a signup
uktrains setup --set brfares=<key>
# Check active tier and validate configured keys
uktrains doctorAll time flags (--depart-after, --arrive-by, --return-depart-after,
--return-arrive-by) take ISO-8601 timestamps and require an explicit
timezone offset (e.g. 2026-08-01T09:00:00+01:00 or Z). Offset-less
times are rejected with a structured INVALID_INPUT error — silently
guessing a timezone produces silently wrong booking links.
Setup walkthrough
uktrains setup --json (the default) prints machine-readable steps so an
agent can shepherd the human through both signups in the background, while
Tier 0 already delivers working booking links:
BR Fares (Tier 1) — open
https://www.brfares.com/api/login.html, register a free non-commercial account, obtain an API key, then runuktrains setup --set brfares=<key>.Rail Data Marketplace (Tier 2, live data — not yet consumed by this build) — open
https://raildata.org.uk, create an individual account (approval typically takes 1–3 working days), subscribe to the free "LDBWS – Public" product, then runuktrains setup --set rdm=<key>.
Config is stored at ~/.config/uktrains/config.json and holds only
rail-domain state: API keys, railcards, and ranking preferences. No home
station, no calendar integration — the calling agent already knows that.
Attribution and licensing notes
Output carries "Powered by National Rail Enquiries" per NRE's OGL terms.
Each user brings their own API keys. RDM and BR Fares agreements are per-account — this tool never shares keys or redistributes upstream data.
The BR Fares free tier is registered for non-commercial use only.
Fares are flow-level (origin→destination, railcard-adjusted), not per-train, and are stamped indicative and time-stamped at quote time. Advance fares are additionally flagged subject to availability, since Advance quota lives in the closed National Reservation Service that no open source exposes. Re-search before presenting a fare older than ~15 minutes.
The tool never takes payment and never states or implies that a booking was completed — only that a booking link was produced.
Further reading
Design spec:
docs/superpowers/specs/2026-07-31-uktrains-design.mdImplementation plan:
docs/superpowers/plans/2026-07-31-uktrains-core-tier0-1.mdAgent guide:
AGENTS.md
This server cannot be installed
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Servers
- AlicenseAqualityCmaintenanceAn MCP server that enables AI assistants to interact with the Netherlands Railways (NS) API for route planning, pricing, and real-time departure information. It provides tools for searching stations, planning trips with connections, and viewing real-time departure boards.Last updated31MIT
- Flicense-qualityDmaintenanceMCP server for real-time German public transport data (HAFAS/VBN network). Enables querying departures, arrivals, journeys, and nearby stops using natural language.Last updated
- Flicense-qualityDmaintenanceMCP server for querying French railway services (SNCF) via the Navitia API, enabling station search, journey planning, and departure board retrieval.Last updated
- Flicense-qualityDmaintenanceMCP server for querying Belgian railway data (SNCB/NMBS) via the iRail API, enabling station search, liveboard, and journey planning.Last updated
Related MCP Connectors
Geo-based flight search MCP server. Find more flights between any two places on earth
Hotel booking MCP server. Search, book, and manage reservations across 250K+ properties worldwide.
MCP server for generating rough-draft project plans from natural-language prompts.
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/aaryan-gulia/uktrains'
If you have feedback or need assistance with the MCP directory API, please join our Discord server