duraga_yaklasan_otobusleri_getirLABSCO SUMMARY
Built around the question people actually ask at the stop.
The separation between 'all buses on this line', 'all buses approaching this stop' and 'buses of this line approaching this stop' looks redundant until you are standing at a stop that four routes serve — the third one is the answer, and it is a distinct tool rather than a filter you have to construct. Coverage is honest about its edges: ESHOT is the live layer, the rail and tram tools are timetables and distances, and journey planning across modes is listed as future work rather than implied.
What it is
An MCP server over İzmir's open transport data. It connects to the ESHOT datasets on the city's open data portal and adds the rail and tram networks, so questions about a specific stop, line or journey are answered from live and published data rather than from a model's memory of a timetable.
What you get
- Every bus currently approaching a given stop id —
duraga_yaklasan_otobusleri_getir - Live positions of all buses on a line —
hattin_anlik_otobus_konumlarini_getir - Only the buses of one line approaching one stop, which is the question people actually ask —
hattin_duraga_yaklasan_otobuslerini_getir - Stops and lines found by name or by text in the route —
durak_ara,hat_ara,hat_detaylarini_ara - Bus timetables by line number, and the route's latitude and longitude geometry —
hat_sefer_saatlerini_ara,hat_guzergah_koordinatlarini_getir - The nearest stops or İZBAN stations to a coordinate, with the browser able to supply your own position —
en_yakin_duraklari_bul,konumumu_al - İZBAN: stations searched by name, departure times between two stations, and the fare under the distance-based pricing scheme —
izban_istasyon_ara,izban_sefer_saatlerini_getir,izban_tutar_hesapla - Metro: the full station list, all departure times, and the distance in metres between two stations —
metro_istasyonlarini_getir,metro_sefer_saatlerini_getir,metro_istasyonlari_arasi_mesafe_hesapla - Trams: lines, the stations on a line, its departures, and distances between stops on the Karşıyaka, Konak and Çiğli lines —
tramvay_hatlarini_getir,tramvay_istasyonlarini_getir,tramvay_seferlerini_getir,karsiyaka_tram_duraklar_arasi_mesafe_hesapla,konak_tram_1_duraklar_arasi_mesafe_hesapla,konak_tram_2_duraklar_arasi_mesafe_hesapla,cigli_tram_duraklar_arasi_mesafe_hesapla
Requirements
No account and no key — the data comes from the city's public open data portal. An npm package, izmir-ulasim-mcp (1.1.4), lets a client run it with npx, but it only starts the bundled Python script, so Python and the libraries listed next are needed either way. To run the Python source instead, Python 3.11+ with requests, mcp-cli, fastmcp, pandas, numpy, flask, pyarrow and fastparquet; uv sync or pip install -r requirements.txt, then point the client at izmir_ulasim_main.py. One tool reads your precise location through the browser, so grant that only when you want a nearest-stop answer.
Setup effort
Build from source — git clone https://github.com/ogulcanakca/izmir-ulasim-mcp.git
USE CASES
Deciding whether to run for the bus
Ask which vehicles on your line are approaching your stop right now, rather than reading a scheduled departure.
Finding the stop you should walk to
Get the nearest stops or stations to where you are, then check what is coming to them.
Planning a rail trip and its cost
Look up the two İZBAN stations, read the departure times between them and get the fare under the distance-based scheme.
Working out what a line actually covers
Search lines by a place name in the route, then read the operating hours and the route coordinates.
23 tools
Listed in project docs. Your client may show a different list.
hattin_anlik_otobus_konumlarini_getirhattin_duraga_yaklasan_otobuslerini_getirdurak_araizban_istasyon_araizban_sefer_saatlerini_getirizban_tutar_hesaplahat_arahat_sefer_saatlerini_arahat_guzergah_koordinatlarini_getirhat_detaylarini_araen_yakin_duraklari_bulkonumumu_almetro_istasyonlarini_getirmetro_sefer_saatlerini_getirmetro_istasyonlari_arasi_mesafe_hesaplatramvay_hatlarini_getirtramvay_istasyonlarini_getirtramvay_seferlerini_getirkarsiyaka_tram_duraklar_arasi_mesafe_hesaplakonak_tram_1_duraklar_arasi_mesafe_hesaplakonak_tram_2_duraklar_arasi_mesafe_hesaplacigli_tram_duraklar_arasi_mesafe_hesaplaBEFORE YOU INSTALL
What to know first
Tools you get
23 tools named in the project's documentation.
Requires
- python on PATH
- Python 3.11+
Where it runs
All 4 documented setups run the server on your machine.
INSTALLATION
Connect your client
This one is built from source rather than installed with a single command.
Server setup
git clone https://github.com/ogulcanakca/izmir-ulasim-mcp.git
cd izmir-ulasim-mcp
uv syncOr: pip install -r requirements.txt.
MCP Clients
Claude Desktop — Python, Cursor — Python
{
"mcpServers": {
"izmir_ulasim": {
"command": "python",
"args": [
"<YOUR_PATH_TO_IZMIR_ULASIM_MAIN>"
]
}
}
}<YOUR_PATH_TO_IZMIR_ULASIM_MAIN> is the absolute path to izmir_ulasim_main.py in your clone. The client starts plain python, which only has the libraries if you installed them with pip install -r requirements.txt. After uv sync they are in the clone's .venv, so set command to that environment's python instead (.venv\Scripts\python.exe on Windows, .venv/bin/python on macOS and Linux).
Claude Desktop — npx, Cursor — npx
{
"mcpServers": {
"izmir_ulasim_npm": {
"command": "npx",
"args": [
"-y",
"izmir-ulasim-mcp"
]
}
}
}The npm package only starts its bundled izmir_ulasim_main.py with the python on your PATH, so Python 3.11+ and the libraries under Requirements must already be installed there.