llms.txt Content
# Lviv Public Transport (lad.lviv.ua)
> Real-time bus, tram, and trolleybus tracker for Lviv, Ukraine. Stop arrivals, route maps, vehicle positions.
## Key Pages
- [Home](https://lad.lviv.ua/) — Search routes and stops
- [Stop detail](https://lad.lviv.ua/stops/707) — Live arrivals at a stop (replace 707 with the numeric ID from physical signage)
- [Route detail](https://lad.lviv.ua/route/T30) — Live vehicle map + stop list for a route (e.g. T30, 32A, 6)
- [Route schedule](https://lad.lviv.ua/route/T30/schedule) — Full weekday and weekend timetable for a route
- [Vehicle detail](https://lad.lviv.ua/vehicle/{vehicle_id}) — Track a specific vehicle
## Machine-Readable APIs
- **MCP server** (Streamable HTTP, no auth): https://api.lad.lviv.ua/mcp
- **MCP server card**: https://api.lad.lviv.ua/.well-known/mcp/server-card.json
- **Agent skills**: https://lad.lviv.ua/.well-known/agent-skills/index.json
- **API catalog**: https://lad.lviv.ua/.well-known/api-catalog
## Project
- **Source code**: https://github.com/vbhjckfd/timetable-frontend
- **Tech support**: vbhjckfd@gmail.com
- **Security contact**: https://lad.lviv.ua/.well-known/security.txt
## Markdown Negotiation
Any page returns Markdown when requested — useful for LLM ingestion:
- Query parameter: `https://lad.lviv.ua/stops/707?_md=1`
- Accept header: `Accept: text/markdown`
Response includes YAML front matter (title, description, og:image) followed by the page body as Markdown. The `X-Markdown-Tokens` response header gives an approximate token count.
## Data Notes
- Stop IDs are numeric codes printed on physical signage (e.g. 707). Never guess them from place names.
- Route names match vehicle/stop displays: `T1`–`T9` = trams, `Т1`–`Т9` = trolleybuses, plain numbers = buses (e.g. `32А`).
- Live positions and ETAs come from GTFS-RT feeds; occasional gaps are expected.
- Route schedules include a `schedule` field on the first stop of each direction with `workday` (Mon–Fri) and `weeke