mcpbeat Sign in

Lviv Public Transport MCP Server

answering

Lviv Public Transport is answering right now. Last checked 5 min ago. It exposes 9 tools. Last commit 1 Nov 2026.

Lviv public transport MCP: stops, timetables, routes, and live vehicle positions. No API key.

Uptime history 91 days of history · worst day 94%
91 days agonow
100.0%
Uptime 24h
91 of 91 checks
9
Tools
read from the server
229 ms
Response time
average over 24h
3
Stars
last commit 1 Nov 2026

What changed 51

Every tool that appeared, vanished or quietly changed what it asks for. Recorded since 12 August 2026. No other catalogue keeps this.

2 Nov a tool changed version
1 Nov a tool changed version
29 Oct a tool changed version
26 Oct a tool changed version
25 Oct 4 tools changed the parameters they ask for find_routes_between, get_nearby_vehicles, get_route_realtime and 1 more
25 Oct 2 tool descriptions were rewritten find_routes_between, get_route_realtime
25 Oct a tool changed version
24 Oct a tool changed version3 times that day
24 Oct a tool appeared get_disruptions
24 Oct a tool disappeared get_disruptions
and 37 more, back to 12 August 2026

Lviv Public Transport missed one check this week

Everything else answered, so this is steady rather than shaky. We check every 15 minutes, which is how a one-off gets told apart from the start of a pattern, and how you hear about the next one within the hour instead of from your users.

Three servers free · no card

Connect this server

Endpoint below is the one we actually reach during checks — not the one copied from a README. Last verified 5 min ago.

run in your terminal
claude mcp add timetable-api-node --transport http https://api.lad.lviv.ua/mcp
Settings → Connectors → Add custom connector, then paste this address
https://api.lad.lviv.ua/mcp
~/.codex/config.toml
[mcp_servers.timetable-api-node]
url = "https://api.lad.lviv.ua/mcp"
.cursor/mcp.json
{
  "mcpServers": {
    "timetable-api-node": {
      "url": "https://api.lad.lviv.ua/mcp"
    }
  }
}
.vscode/mcp.json
{
  "servers": {
    "timetable-api-node": {
      "type": "http",
      "url": "https://api.lad.lviv.ua/mcp"
    }
  }
}

Available tools 9

Read directly from the server with tools/list, grouped by what they act on. If a tool disappears, we record the date.

route
get_route_realtime
Returns every vehicle currently running on a route: position, the destination it is heading to, and its next stop with estimated arrival. `headways` sums up each direction: how many vehicles run, the live gaps between consecutive vehicles in minutes (front to back), and how often the timetable says it should run right now. Use when the user asks "where is my tram/bus right now?", how many vehicles are running, how far the next one is, or how often a route runs. Pass `direction` (0 or 1, as in `get_route_static`'s `stops`) to get only one way. Prefer `get_stop_realtime` when the user is at a stop and wants arrival times there. Requires a route short name (e.g. "T30", "32A") or numeric external ID.
get_route_static
Returns static route data: name, long name, vehicle type, colour, the ordered stop list for both directions, and the timetable of departures from the first stop (workday, Saturday and Sunday). Use when the user asks which stops a route serves, where it goes, or its scheduled departure times. Set `include_shapes` only when you will draw the route on a map — the polylines are large and carry nothing a text answer needs. Do NOT use this for live vehicle positions — use `get_route_realtime` instead. Requires a route short name (e.g. "T30", "32A") or numeric external ID.
stops
get_stops_around_location
Finds stops near a geographic point, returning each stop's numeric ID, name, coordinates, walking distance, and the routes serving it. Use this as the **first step** when the user gives an address or coordinates and you need stop IDs for `get_stop_realtime` or `find_routes_between`. Use `search_stops` instead when the user gives a stop name. Default radius is 1 000 m; narrow it (e.g. 300 m) for dense urban areas or widen it (up to 3 000 m) for rural locations.
search_stops
Finds stops by name (Ukrainian or English transliteration, case-insensitive, partial match) and returns each stop's numeric ID, coordinates, and the routes serving it. Use this as the **first step** when the user names a stop or landmark stop (e.g. "Опера", "Rynok", "Головний вокзал") and you need a stop ID for `get_stop_realtime` or `find_routes_between`. One name usually covers both sides of the street under different IDs; each is returned, and the `routes` list tells them apart. Use `get_stops_around_location` instead when you have coordinates rather than a name.
disruptions
get_disruptions
Lists closures, detours and moved stops the city announced that are in force today: affected routes, the streets a detour uses, routes to take instead of a suspended one, reason, dates and source. The GTFS stop lists and timetables do not reflect any of this. Use when the user asks about road works, closures, detours, or why a route is not running or a vehicle is off its usual path. Pass `route` and/or `stop_id` to get only the entries touching them; omit both for the whole city.
nearby
get_nearby_vehicles
Returns live vehicles near a point, nearest first, each with its route, destination, and distance. Use when the user asks "what transport is near me right now?" or wants a live map around a location. Narrow with `route` when the user cares about one line; prefer `get_route_realtime` for a whole route and `get_stop_realtime` for arrival times at a stop. Requires decimal latitude and longitude (WGS84).
routes
find_routes_between
Lists the routes from one place to another: which stop to board, where to get off, the direction's destination, stops in between, and the walk at each end — best first, walking counted. Each end is a stop ID (`from_stop_id`) or coordinates (`from_lat` + `from_lng`), e.g. an address the user gave; a point covers every stop within a 600 m walk of it. `options` are direct routes. `transfer_options` have exactly one interchange (never more): ride `legs[0]`, walk `transfer_walk_meters` (within a 300 m stop cluster, 0 when it is the same stop) to `legs[1].board_stop`, ride `legs[1]`. They are listed when there is no direct route or when they beat the best direct one. Every option carries `schedule`: by the timetable, when to leave, when each leg boards and alights, when you arrive, and `total_minutes` door to door. Plan for now by default, or pass `depart_at` or `arrive_by` ("HH:MM" Lviv time today, or ISO 8601). When planning for now, options also carry `next_departures`: the live next departures of the first leg from its boarding stop, so no separate `get_stop_realtime` call is needed. `map_stops` holds the best trip's stops in riding order, each with a `role` (board, transfer — or transfer_alight + transfer_board when the interchange is a walk — and alight). Use when the user asks how to get from A to B, which bus/tram goes from one place to another, how long it takes, or when to leave to be somewhere on time. A stop end covers every stop within a 300 m walk of it, since a line's two directions often stop on opposite sides of a street under different names; `board_stop` says where to actually wait. Routes the city has suspended, and stops a detour skips, are left out. `walk_meters` is set when the two ends are within a 300 m walk of each other: no ride is searched then, so tell the user to walk. Otherwise both lists empty means the trip needs two or more transfers. Get stop IDs with `search_stops` or `get_stops_around_location`.
stop
get_stop_realtime
Returns live arrivals at a stop: route, destination, vehicle type, minutes until arrival, and each vehicle's position. Use this as the **default tool** when the user asks about arrivals, departures, or the next bus/tram at a specific stop. Requires a numeric stop ID (shown on stop signage); use `search_stops` when you have a stop name, or `get_stops_around_location` when you have coordinates.
vehicle
get_vehicle_info
Returns details for one vehicle by ID: position, route, destination, license plate, and its upcoming stops with names and estimated arrival times. Use when the user wants to follow a particular vehicle, e.g. "where does this tram go next?" or "when will it reach X?". Vehicle IDs come from `get_route_realtime`, `get_nearby_vehicles`, or `get_stop_realtime` results. Do NOT use this to get all vehicles on a route — use `get_route_realtime` instead.

Tools removed

Tools this server used to expose. Anything built against them stopped working on the day they went.

get_stop_geometry
removed 23 Sep 2026

Endpoints

URLTransportStateLatencyChecked
https://api.lad.lviv.ua/mcp streamable-http answering 147 ms 5 min ago

Alternatives to Lviv Public Transport

same job, measured the same way
Onebusaway MCP Server
by cyanheads

Real-time transit stops, routes, arrivals, vehicle positions, and schedules via OneBusAway APIs.

436 installs/wk 16 tools answering
Trimet
by pipeworx-io

TriMet MCP — live arrivals, stop lookup, vehicle positions and service alerts for Portland…

188 installs/wk 48 tools answering
SF Muni Real-Time Transit
by srivastsh

Real-time SF Muni departures, routes, alerts, vehicle positions, and schedules.

11 tools answering
Espn
by pipeworx-io

ESPN MCP — keyless multi-sport live scores, teams, and news via ESPN's public site API.

483 installs/wk 50 tools answering
PTV MCP by UnClick
by malamutemayhem

Melbourne / Victoria public transport timetables, departures, and disruptions (PTV). By UnClick.

44 installs/wk local only
511 Sf Bay
by pipeworx-io

511 SF Bay Transit MCP — live departures, vehicle positions and service alerts for every transit…

268 installs/wk 48 tools answering
Septa MCP
by mrfentmen

SEPTA transit arrivals and vehicle positions.

60 installs/wk local only
Z
Zoopit
by zoopit

Read-only access to a Zoopit account: orders, routes, fleet and live vehicle positions.

answering

Lviv Public Transport — questions

Answers built from our own checks of this server.

What can Lviv Public Transport do?
It exposes 9 tools, read directly from the server on our last check. Among them: find_routes_between, get_disruptions, get_nearby_vehicles, get_route_realtime, get_route_static, get_stop_realtime and 3 more. The full list with descriptions is on this page — we take it from the server itself via tools/list, not from a README. How MCP servers expose tools in the first place →
What is Lviv Public Transport mostly used for?
Its tools cluster around route and stops. That is what this server is built to work with — the grouping comes from the actual tool names, not from a category we assigned.
Is Lviv Public Transport working right now?
We send a real MCP handshake every 15 minutes. Over the last 24 hours 91 of 91 checks got a reply (100.0%), average response time 229 ms. The bar chart above shows every period we have measured.
Did Lviv Public Transport ever remove tools?
Yes. get_stop_geometry is no longer exposed — we recorded the date each one disappeared. A tool vanishing usually means a breaking change for anything that depended on it.
How do I connect Lviv Public Transport?
Copy the ready config from this page. We generate it for Claude Code, Claude Desktop, Codex, Cursor and VS Code, each in the form that client actually reads. It is a remote server, so there is nothing to install — the client connects to the address.
Does Lviv Public Transport need an API key?
No. Lviv Public Transport completed a full MCP handshake with us as an anonymous client and listed its tools without asking for anything. All 9 of them are readable on this page. This is what we observed, not what the docs claim.
How fast is Lviv Public Transport?
It answers our handshake in 229 ms on average, which is faster than 63% of all working MCP servers we measure. The comparison comes from our own checks across the whole registry, every 15 minutes.
Is Lviv Public Transport open source?
No, and the distinction matters: its licence is declared as WTFPL. That makes it source-available — you can read the code, but the terms are the author's own, not one of the recognised open-source licences. Read them before you build on it.