Lviv Public Transport
What this MCP does
Provides Lviv public-transit stop searches, routes, schedules, live arrivals, vehicle positions, and nearby-vehicle information.
Tools
Input schema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['from_stop_id', 'to_stop_id'], 'properties': {'to_stop_id': {'type': 'integer', 'maximum': 9007199254740991, 'description': 'Stop ID where the trip ends.', 'exclusiveMinimum': 0}, 'from_stop_id': {'type': 'integer', 'maximum': 9007199254740991, 'description': 'Stop ID where the trip starts.', 'exclusiveMinimum': 0}}}
Output schema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['view', 'data', 'ui_blocks'], 'properties': {'data': {'type': 'object', 'required': ['from', 'to', 'options', 'updated_at'], 'properties': {'to': {'type': 'object', 'required': ['id', 'name', 'stop_ids'], 'properties': {'id': {'type': 'string'}, 'name': {'type': ['string', 'null']}, 'stop_ids': {'type': 'array', 'items': {'type': 'string'}}}, 'additionalProperties': False}, 'from': {'type': 'object', 'required': ['id', 'name', 'stop_ids'], 'properties': {'id': {'type': 'string'}, 'name': {'type': ['string', 'null']}, 'stop_ids': {'type': 'array', 'items': {'type': 'string'}}}, 'additionalProperties': False}, 'options': {'type': 'array', 'items': {'type': 'object', 'required': ['route', 'vehicle_type', 'direction', 'destination', 'board_stop', 'alight_stop', 'stops_count', 'walk_to_board_meters', 'walk_from_alight_meters'], 'properties': {'route': {'type': 'string'}, 'direction': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': -9007199254740991}, 'board_stop': {'type': 'object', 'required': ['id', 'name', 'lat', 'lng'], 'properties': {'id': {'type': 'string'}, 'lat': {'type': ['number', 'null']}, 'lng': {'type': ['number', 'null']}, 'name': {'type': ['string', 'null']}}, 'additionalProperties': False}, 'alight_stop': {'type': 'object', 'required': ['id', 'name', 'lat', 'lng'], 'properties': {'id': {'type': 'string'}, 'lat': {'type': ['number', 'null']}, 'lng': {'type': ['number', 'null']}, 'name': {'type': ['string', 'null']}}, 'additionalProperties': False}, 'destination': {'type': ['string', 'null']}, 'stops_count': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': -9007199254740991}, 'vehicle_type': {'type': 'string'}, 'walk_to_board_meters': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': -9007199254740991}, 'walk_from_alight_meters': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': -9007199254740991}}, 'additionalProperties': False}}, 'updated_at': {'type': 'string'}}, 'additionalProperties': False}, 'view': {'type': 'string', 'const': 'transit_realtime'}, 'ui_blocks': {'type': 'array', 'items': {'type': 'object', 'required': ['type', 'data'], 'properties': {'data': {'type': 'object', 'required': ['center', 'zoom', 'layers'], 'properties': {'zoom': {'type': 'number'}, 'center': {'type': 'array', 'items': [{'type': ['number', 'null']}, {'type': ['number', 'null']}], 'maxItems': 2, 'minItems': 2, 'additionalItems': False}, 'layers': {'type': 'object', 'properties': {'stops': {'type': 'string'}, 'vehicles': {'type': 'string'}, 'polylines': {'type': 'string'}}, 'additionalProperties': False}}, 'additionalProperties': False}, 'type': {'type': 'string', 'const': 'map'}}, 'additionalProperties': False}}}, 'additionalProperties': False}
Input schema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['latitude', 'longitude'], 'properties': {'limit': {'type': 'integer', 'maximum': 50, 'minimum': 1, 'description': 'Maximum vehicles to return, nearest first (1â\x80\x9350, default 15). `total` reports how many were in range.'}, 'route': {'type': 'string', 'minLength': 1, 'description': 'Only vehicles on this route, by short name (e.g. "Т30", "Ð\x901"). Omit for all routes.'}, 'latitude': {'type': 'number', 'maximum': 90, 'minimum': -90, 'description': 'Decimal latitude of the centre point, WGS84 (e.g. 49.842 for central Lviv).'}, 'longitude': {'type': 'number', 'maximum': 180, 'minimum': -180, 'description': 'Decimal longitude of the centre point, WGS84 (e.g. 24.031 for central Lviv).'}, 'radius_meters': {'type': 'integer', 'maximum': 1000, 'minimum': 100, 'description': 'Search radius in metres (100â\x80\x931000, default 500).'}}}
Output schema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['view', 'data', 'ui_blocks'], 'properties': {'data': {'type': 'object', 'required': ['center_lat', 'center_lng', 'radius_meters', 'total', 'vehicles', 'updated_at'], 'properties': {'total': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': -9007199254740991}, 'vehicles': {'type': 'array', 'items': {'type': 'object', 'required': ['id', 'route', 'vehicle_type', 'direction', 'destination', 'lat', 'lng', 'bearing', 'lowfloor', 'distance_meters'], 'properties': {'id': {'type': ['string', 'null']}, 'lat': {'type': ['number', 'null']}, 'lng': {'type': ['number', 'null']}, 'route': {'type': ['string', 'null']}, 'bearing': {'type': ['number', 'null']}, 'lowfloor': {'type': ['boolean', 'null']}, 'direction': {'anyOf': [{'type': 'integer', 'maximum': 9007199254740991, 'minimum': -9007199254740991}, {'type': 'null'}]}, 'destination': {'type': ['string', 'null']}, 'vehicle_type': {'type': ['string', 'null']}, 'distance_meters': {'type': ['number', 'null']}}, 'additionalProperties': False}}, 'center_lat': {'type': ['number', 'null']}, 'center_lng': {'type': ['number', 'null']}, 'updated_at': {'type': 'string'}, 'radius_meters': {'type': 'number'}}, 'additionalProperties': False}, 'view': {'type': 'string', 'const': 'transit_realtime'}, 'ui_blocks': {'type': 'array', 'items': {'type': 'object', 'required': ['type', 'data'], 'properties': {'data': {'type': 'object', 'required': ['center', 'zoom', 'layers'], 'properties': {'zoom': {'type': 'number'}, 'center': {'type': 'array', 'items': [{'type': ['number', 'null']}, {'type': ['number', 'null']}], 'maxItems': 2, 'minItems': 2, 'additionalItems': False}, 'layers': {'type': 'object', 'properties': {'stops': {'type': 'string'}, 'vehicles': {'type': 'string'}, 'polylines': {'type': 'string'}}, 'additionalProperties': False}}, 'additionalProperties': False}, 'type': {'type': 'string', 'const': 'map'}}, 'additionalProperties': False}}}, 'additionalProperties': False}
Input schema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['route_name'], 'properties': {'route_name': {'type': 'string', 'minLength': 1, 'description': 'Route short name (e.g. "T30", "32A") or numeric external ID.'}}}
Output schema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['view', 'data', 'ui_blocks'], 'properties': {'data': {'type': 'object', 'required': ['route_name', 'destinations', 'vehicles', 'updated_at'], 'properties': {'vehicles': {'type': 'array', 'items': {'type': 'object', 'required': ['id', 'direction', 'destination', 'next_stop', 'lat', 'lng', 'bearing', 'lowfloor'], 'properties': {'id': {'type': 'string'}, 'lat': {'type': ['number', 'null']}, 'lng': {'type': ['number', 'null']}, 'bearing': {'type': ['number', 'null']}, 'lowfloor': {'type': ['boolean', 'null']}, 'direction': {'anyOf': [{'type': 'integer', 'maximum': 9007199254740991, 'minimum': -9007199254740991}, {'type': 'null'}]}, 'next_stop': {'anyOf': [{'type': 'object', 'required': ['id', 'name', 'arrival'], 'properties': {'id': {'type': 'string'}, 'name': {'type': ['string', 'null']}, 'arrival': {'type': 'string'}}, 'additionalProperties': False}, {'type': 'null'}]}, 'destination': {'type': ['string', 'null']}}, 'additionalProperties': False}}, 'route_name': {'type': 'string'}, 'updated_at': {'type': 'string'}, 'destinations': {'type': 'array', 'items': {'type': ['string', 'null']}}}, 'additionalProperties': False}, 'view': {'type': 'string', 'const': 'transit_realtime'}, 'ui_blocks': {'type': 'array', 'items': {'type': 'object', 'required': ['type', 'data'], 'properties': {'data': {'type': 'object', 'required': ['center', 'zoom', 'layers'], 'properties': {'zoom': {'type': 'number'}, 'center': {'type': 'array', 'items': [{'type': ['number', 'null']}, {'type': ['number', 'null']}], 'maxItems': 2, 'minItems': 2, 'additionalItems': False}, 'layers': {'type': 'object', 'properties': {'stops': {'type': 'string'}, 'vehicles': {'type': 'string'}, 'polylines': {'type': 'string'}}, 'additionalProperties': False}}, 'additionalProperties': False}, 'type': {'type': 'string', 'const': 'map'}}, 'additionalProperties': False}}}, 'additionalProperties': False}
Input schema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['route_name'], 'properties': {'route_name': {'type': 'string', 'minLength': 1, 'description': 'Route short name (e.g. "T30", "32A") or numeric external ID.'}, 'include_shapes': {'type': 'boolean', 'description': 'Include route polylines ([lat, lng] points per direction) for map drawing. Default false.'}}}
Output schema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['view', 'data', 'ui_blocks'], 'properties': {'data': {'type': 'object', 'required': ['route', 'stops', 'updated_at'], 'properties': {'route': {'type': 'object', 'required': ['name', 'long_name', 'color', 'type'], 'properties': {'name': {'type': ['string', 'null']}, 'type': {'type': ['string', 'null']}, 'color': {'type': ['string', 'null']}, 'long_name': {'type': ['string', 'null']}}, 'additionalProperties': False}, 'stops': {'type': 'array', 'items': {'type': 'array', 'items': {'type': 'object', 'required': ['id', 'name', 'lat', 'lng', 'departures'], 'properties': {'id': {'type': 'string'}, 'lat': {'type': ['number', 'null']}, 'lng': {'type': ['number', 'null']}, 'name': {'type': ['string', 'null']}, 'schedule': {'type': 'object', 'required': ['workday', 'weekend'], 'properties': {'weekend': {'type': 'array', 'items': {'type': 'string'}}, 'workday': {'type': 'array', 'items': {'type': 'string'}}}, 'additionalProperties': False}, 'departures': {'type': 'array', 'items': {'type': 'string'}}}, 'additionalProperties': False}}}, 'shapes': {'type': 'array', 'items': {'type': 'array', 'items': {'type': 'array', 'items': {'type': 'number'}}}}, 'updated_at': {'type': 'string'}}, 'additionalProperties': False}, 'view': {'type': 'string', 'const': 'transit_realtime'}, 'ui_blocks': {'type': 'array', 'items': {'type': 'object', 'required': ['type', 'data'], 'properties': {'data': {'type': 'object', 'required': ['center', 'zoom', 'layers'], 'properties': {'zoom': {'type': 'number'}, 'center': {'type': 'array', 'items': [{'type': ['number', 'null']}, {'type': ['number', 'null']}], 'maxItems': 2, 'minItems': 2, 'additionalItems': False}, 'layers': {'type': 'object', 'properties': {'stops': {'type': 'string'}, 'vehicles': {'type': 'string'}, 'polylines': {'type': 'string'}}, 'additionalProperties': False}}, 'additionalProperties': False}, 'type': {'type': 'string', 'const': 'map'}}, 'additionalProperties': False}}}, 'additionalProperties': False}
Input schema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['stop_id'], 'properties': {'stop_id': {'type': 'integer', 'maximum': 9007199254740991, 'description': 'Municipal stop code shown on stop signage (e.g. 707). Accepts a positive integer or an equivalent digit-only string.', 'exclusiveMinimum': 0}}}
Output schema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['view', 'data', 'ui_blocks'], 'properties': {'data': {'type': 'object', 'required': ['stop', 'arrivals', 'updated_at'], 'properties': {'stop': {'type': 'object', 'required': ['id', 'name', 'lat', 'lng'], 'properties': {'id': {'type': 'string'}, 'lat': {'type': ['number', 'null']}, 'lng': {'type': ['number', 'null']}, 'name': {'type': ['string', 'null']}}, 'additionalProperties': False}, 'arrivals': {'type': 'array', 'items': {'type': 'object', 'required': ['route', 'direction', 'vehicle_type', 'arrival_minutes', 'vehicle_id', 'lat', 'lng', 'bearing'], 'properties': {'lat': {'type': ['number', 'null']}, 'lng': {'type': ['number', 'null']}, 'route': {'type': ['string', 'null']}, 'bearing': {'type': ['number', 'null']}, 'direction': {'type': ['string', 'null']}, 'vehicle_id': {'type': ['string', 'null']}, 'vehicle_type': {'type': ['string', 'null']}, 'arrival_minutes': {'anyOf': [{'type': 'integer', 'maximum': 9007199254740991, 'minimum': -9007199254740991}, {'type': 'null'}]}}, 'additionalProperties': False}}, 'updated_at': {'type': 'string'}}, 'additionalProperties': False}, 'view': {'type': 'string', 'const': 'transit_realtime'}, 'ui_blocks': {'type': 'array', 'items': {'oneOf': [{'type': 'object', 'required': ['type', 'data'], 'properties': {'data': {'type': 'object', 'required': ['center', 'zoom', 'layers'], 'properties': {'zoom': {'type': 'number'}, 'center': {'type': 'array', 'items': [{'type': ['number', 'null']}, {'type': ['number', 'null']}], 'maxItems': 2, 'minItems': 2, 'additionalItems': False}, 'layers': {'type': 'object', 'properties': {'stops': {'type': 'string'}, 'vehicles': {'type': 'string'}, 'polylines': {'type': 'string'}}, 'additionalProperties': False}}, 'additionalProperties': False}, 'type': {'type': 'string', 'const': 'map'}}, 'additionalProperties': False}, {'type': 'object', 'required': ['type', 'data'], 'properties': {'data': {'type': 'object', 'required': ['source'], 'properties': {'source': {'type': 'string'}}, 'additionalProperties': False}, 'type': {'type': 'string', 'const': 'arrival_list'}}, 'additionalProperties': False}]}}}, 'additionalProperties': False}
Input schema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['latitude', 'longitude'], 'properties': {'latitude': {'type': 'number', 'maximum': 90, 'minimum': -90, 'description': 'Decimal latitude of the search centre, WGS84 (e.g. 49.842 for central Lviv).'}, 'longitude': {'type': 'number', 'maximum': 180, 'minimum': -180, 'description': 'Decimal longitude of the search centre, WGS84 (e.g. 24.031 for central Lviv).'}, 'radius_meters': {'type': 'integer', 'maximum': 3000, 'minimum': 50, 'description': 'Search radius in metres (50â\x80\x933000, default 1000). Use ~300 for dense urban intersections, up to 3000 for suburban or rural areas.'}}}
Output schema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['view', 'data', 'ui_blocks'], 'properties': {'data': {'type': 'object', 'required': ['center_lat', 'center_lng', 'radius_meters', 'stops', 'updated_at'], 'properties': {'stops': {'type': 'array', 'items': {'type': 'object', 'required': ['id', 'name', 'lat', 'lng', 'routes', 'distance_meters'], 'properties': {'id': {'type': 'string'}, 'lat': {'type': ['number', 'null']}, 'lng': {'type': ['number', 'null']}, 'name': {'type': ['string', 'null']}, 'routes': {'type': 'array', 'items': {'type': 'string'}}, 'distance_meters': {'type': ['number', 'null']}}, 'additionalProperties': False}}, 'center_lat': {'type': ['number', 'null']}, 'center_lng': {'type': ['number', 'null']}, 'updated_at': {'type': 'string'}, 'radius_meters': {'type': 'number'}}, 'additionalProperties': False}, 'view': {'type': 'string', 'const': 'transit_realtime'}, 'ui_blocks': {'type': 'array', 'items': {'type': 'object', 'required': ['type', 'data'], 'properties': {'data': {'type': 'object', 'required': ['center', 'zoom', 'layers'], 'properties': {'zoom': {'type': 'number'}, 'center': {'type': 'array', 'items': [{'type': ['number', 'null']}, {'type': ['number', 'null']}], 'maxItems': 2, 'minItems': 2, 'additionalItems': False}, 'layers': {'type': 'object', 'properties': {'stops': {'type': 'string'}, 'vehicles': {'type': 'string'}, 'polylines': {'type': 'string'}}, 'additionalProperties': False}}, 'additionalProperties': False}, 'type': {'type': 'string', 'const': 'map'}}, 'additionalProperties': False}}}, 'additionalProperties': False}
Input schema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['vehicle_id'], 'properties': {'vehicle_id': {'type': 'string', 'minLength': 1, 'description': 'Vehicle ID as returned by get_route_realtime, get_nearby_vehicles, or get_stop_realtime.'}}}
Output schema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['view', 'data', 'ui_blocks'], 'properties': {'data': {'type': 'object', 'required': ['vehicle_id', 'route', 'license_plate', 'lat', 'lng', 'bearing', 'direction', 'destination', 'upcoming_stops', 'updated_at'], 'properties': {'lat': {'type': ['number', 'null']}, 'lng': {'type': ['number', 'null']}, 'route': {'type': ['string', 'null']}, 'bearing': {'type': ['number', 'null']}, 'direction': {'anyOf': [{'type': 'integer', 'maximum': 9007199254740991, 'minimum': -9007199254740991}, {'type': 'null'}]}, 'updated_at': {'type': 'string'}, 'vehicle_id': {'type': 'string'}, 'destination': {'type': ['string', 'null']}, 'license_plate': {'type': ['string', 'null']}, 'upcoming_stops': {'type': 'array', 'items': {'type': 'object', 'required': ['id', 'name', 'arrival', 'departure'], 'properties': {'id': {'type': 'string'}, 'name': {'type': ['string', 'null']}, 'arrival': {'type': ['string', 'null']}, 'departure': {'type': ['string', 'null']}}, 'additionalProperties': False}}}, 'additionalProperties': False}, 'view': {'type': 'string', 'const': 'transit_realtime'}, 'ui_blocks': {'type': 'array', 'items': {'type': 'object', 'required': ['type', 'data'], 'properties': {'data': {'type': 'object', 'required': ['center', 'zoom', 'layers'], 'properties': {'zoom': {'type': 'number'}, 'center': {'type': 'array', 'items': [{'type': ['number', 'null']}, {'type': ['number', 'null']}], 'maxItems': 2, 'minItems': 2, 'additionalItems': False}, 'layers': {'type': 'object', 'properties': {'stops': {'type': 'string'}, 'vehicles': {'type': 'string'}, 'polylines': {'type': 'string'}}, 'additionalProperties': False}}, 'additionalProperties': False}, 'type': {'type': 'string', 'const': 'map'}}, 'additionalProperties': False}}}, 'additionalProperties': False}
Input schema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['query'], 'properties': {'limit': {'type': 'integer', 'maximum': 25, 'minimum': 1, 'description': 'Maximum stops to return (1â\x80\x9325, default 10).'}, 'query': {'type': 'string', 'minLength': 2, 'description': 'Stop name or part of it, e.g. "Ð\xa0инок", "opera", "СÑ\x82Ñ\x80ийÑ\x81Ñ\x8cка".'}}}
Output schema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['view', 'data', 'ui_blocks'], 'properties': {'data': {'type': 'object', 'required': ['query', 'stops', 'updated_at'], 'properties': {'query': {'type': 'string'}, 'stops': {'type': 'array', 'items': {'type': 'object', 'required': ['id', 'name', 'lat', 'lng', 'routes', 'eng_name'], 'properties': {'id': {'type': 'string'}, 'lat': {'type': ['number', 'null']}, 'lng': {'type': ['number', 'null']}, 'name': {'type': ['string', 'null']}, 'routes': {'type': 'array', 'items': {'type': 'string'}}, 'eng_name': {'type': ['string', 'null']}}, 'additionalProperties': False}}, 'updated_at': {'type': 'string'}}, 'additionalProperties': False}, 'view': {'type': 'string', 'const': 'transit_realtime'}, 'ui_blocks': {'type': 'array', 'items': {'type': 'object', 'required': ['type', 'data'], 'properties': {'data': {'type': 'object', 'required': ['center', 'zoom', 'layers'], 'properties': {'zoom': {'type': 'number'}, 'center': {'type': 'array', 'items': [{'type': ['number', 'null']}, {'type': ['number', 'null']}], 'maxItems': 2, 'minItems': 2, 'additionalItems': False}, 'layers': {'type': 'object', 'properties': {'stops': {'type': 'string'}, 'vehicles': {'type': 'string'}, 'polylines': {'type': 'string'}}, 'additionalProperties': False}}, 'additionalProperties': False}, 'type': {'type': 'string', 'const': 'map'}}, 'additionalProperties': False}}}, 'additionalProperties': False}
Recent tool changes
Similar MCP servers
SupplyGraph.AI Data
Provides China-focused location, surrounding-area, company, industry-chain, property, population, retail, and regional business i…
Microburbs Australian Property Data
Provides Australian property, suburb, valuation, sales, rental, zoning, school, risk, geospatial, and census statistics.
gisgp
Provides GIS geocoding, routing, spatial transformations, ArcGIS layer inspection and export, and location due diligence for haza…
ikeytz Einsatzgebiet-Karten
Provides public map and service-area data, geographic search, proximity calculations, area boundaries, business contact details, …
Namaste America
Helps users find Indian-American restaurants, temples, events, businesses, professionals, services, movies, offers, and community…
MolTravel
Searches and provides details for flights, hotels, rental cars, ferries, airports, travel experiences, destinations, country info…
EasyTerritory MCP
Builds, balances, analyzes, and edits sales or service territories, with geocoding, routing, scheduling, map visualization, and G…
MapMap
Provides mapping tools for routing, truck and ADR routing, geocoding, distance matrices, and isochrones.