Skip to content

Lviv Public Transport

by vbhjckfd · remote · no sign-in to list tools · v1.7.10 · published by GitHub user vbhjckfd

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

Read only

8 tools: 8 only read.

Scanned Oct 21, 2026

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

claude mcp add --transport http timetable-api-node https://api.lad.lviv.ua/mcp

Tools

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

8 tools

Only reads 8Claude Code: allow
  • find_routes_betweenLists 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 cou…No findings

    Why it is in this group

    • The name "find_routes_between" says "find": a word for reading.
    Description, as the server wrote it
    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. `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. `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, or which bus/tram goes from one place to another. Each end covers every stop within a 300 m walk of the one given, since a line's two directions often stop on opposite sides of a street under different names; `board_stop` says where to actually wait. Both lists empty means the trip needs two or more transfers. Requires numeric stop IDs; get them with `search_stops` or `get_stops_around_location` first. Follow up with `get_stop_realtime` on `board_stop` for live departures.

    Annotations the server declares

    • readOnlyHint: true
    • idempotentHint: true
    • openWorldHint: false
  • get_nearby_vehiclesReturns live vehicles near a point, nearest first, each with its route, destination, and distance.No findings

    Why it is in this group

    • The name "get_nearby_vehicles" says "get": a word for reading.
    Description, as the server wrote it
    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).

    Annotations the server declares

    • readOnlyHint: true
    • idempotentHint: true
    • openWorldHint: false
  • get_route_realtimeReturns every vehicle currently running on a route: position, the destination it is heading to, and its next stop with estimated arrival.No findings

    Why it is in this group

    • The name "get_route_realtime" says "get": a word for reading.
    Description, as the server wrote it
    Returns every vehicle currently running on a route: position, the destination it is heading to, and its next stop with estimated arrival. Use when the user asks "where is my tram/bus right now?", how many vehicles are running, or how far the next one is. 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.

    Annotations the server declares

    • readOnlyHint: true
    • idempotentHint: true
    • openWorldHint: false
  • get_route_staticReturns 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 …No findings

    Why it is in this group

    • The name "get_route_static" says "get": a word for reading.
    Description, as the server wrote it
    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.

    Annotations the server declares

    • readOnlyHint: true
    • idempotentHint: true
    • openWorldHint: false
  • get_stop_realtimeReturns live arrivals at a stop: route, destination, vehicle type, minutes until arrival, and each vehicle's position.No findings

    Why it is in this group

    • The name "get_stop_realtime" says "get": a word for reading.
    Description, as the server wrote it
    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.

    Annotations the server declares

    • readOnlyHint: true
    • idempotentHint: true
    • openWorldHint: false
  • get_stops_around_locationFinds stops near a geographic point, returning each stop's numeric ID, name, coordinates, walking distance, and the routes serving it.No findings

    Why it is in this group

    • The name "get_stops_around_location" says "get": a word for reading.
    Description, as the server wrote it
    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.

    Annotations the server declares

    • readOnlyHint: true
    • idempotentHint: true
    • openWorldHint: false
  • get_vehicle_infoReturns details for one vehicle by ID: position, route, destination, license plate, and its upcoming stops with names and estimated arrival times.No findings

    Why it is in this group

    • The name "get_vehicle_info" says "get": a word for reading.
    Description, as the server wrote it
    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.

    Annotations the server declares

    • readOnlyHint: true
    • idempotentHint: true
    • openWorldHint: false
  • search_stopsFinds stops by name (Ukrainian or English transliteration, case-insensitive, partial match) and returns each stop's numeric ID, coordinates, and the routes serving it.No findings

    Why it is in this group

    • The name "search_stops" says "search": a word for reading.
    Description, as the server wrote it
    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.

    Annotations the server declares

    • readOnlyHint: true
    • idempotentHint: true
    • openWorldHint: false

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.7.10. Values in angle brackets are yours to fill in.

claude mcp add --transport http timetable-api-node https://api.lad.lviv.ua/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__timetable-api-node__get_stop_realtime",
      "mcp__timetable-api-node__search_stops",
      "mcp__timetable-api-node__find_routes_between",
      "mcp__timetable-api-node__get_route_static",
      "mcp__timetable-api-node__get_route_realtime",
      "mcp__timetable-api-node__get_stops_around_location",
      "mcp__timetable-api-node__get_nearby_vehicles",
      "mcp__timetable-api-node__get_vehicle_info"
    ],
    "ask": [],
    "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 timetable-api-node. Review it before you use it.