İzmir Open Data MCP
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@İzmir Open Data MCP Bornova Metro durağına sıradaki otobüsler ne zaman gelir?"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
İzmir Open Data MCP
İzmir Büyükşehir Belediyesi açık verisini (ESHOT, Metro, İZBAN, İZDENİZ, eczaneler) Claude gibi yapay zekâ asistanlarına MCP araçları olarak sunan sunucu. Yaşar Üniversitesi, Güz 2026 dönem projesi (Proje 09). Ekip: Sude Naz Çakır, Bahar Dokur.
"Bornova Metro durağına sıradaki otobüs ne zaman?"
"Buca'da nöbetçi eczane hangisi?"
Araçlar
Araç | Ne yapar | Kaynak |
| Durağa yaklaşan otobüsler ve tahmini varış dakikası. | ESHOT canlı, İBB CBS yakın duraklar |
| İlçedeki nöbetçi (ya da tüm) eczaneler, ilçe merkezine uzaklığa göre sıralı. | İzmir Eczacı Odası / İBB |
Her araç aynı zarfı döndürür: veri + meta (kaynak, zaman, önbellek, notlar) + kaynak çökerse error
(source_unavailable, timeout, not_found, invalid_input, bad_response). Araçlar hata durumunda
istisna fırlatmaz, açıklamalı bir hata nesnesi döndürür; böylece Claude "kaynak şu an cevap vermiyor" diyebilir.
Varış süresi nasıl hesaplanıyor? ESHOT dakika vermiyor, sadece kalan durak sayısı ve otobüsün konumunu
veriyor. Tahmin = (kalan durak × 1,5 dk + otobüsün durağa yol mesafesi ÷ 18 km/sa) / 2. Katsayılar
.env içinden ayarlanabilir.
Durak adı nasıl bulunuyor? Önce veritabanındaki stops tablosuna bakılır. Tablo boşsa ya da
veritabanı yoksa, addaki metro/İZBAN istasyonu, iskele ya da ilçe adının koordinatı bulunur ve o noktaya
yakın duraklar arasından ada göre seçilir. Bornova Metro gibi aktarma merkezlerinde aynı adlı 10 perona
birden bakılır.
Related MCP server: transport12 MCP Server
Kurulum
Gereken: Python 3.11+ ve uv.
git clone https://github.com/sudenazcakir/izmir-mcp.git
cd izmir-mcp
uv sync --extra dev
cp .env.example .env # DATABASE_URL'yi doldur (isteğe bağlı)
uv run pytest # çevrimdışı testler
uv run pytest -m live # gerçek İzmir API'sine karşı duman testiVeritabanı olmadan da iki araç çalışır; veritabanı durak adı aramasını hızlandırır ve 3. haftadaki API anahtarları ile kullanım kayıtları için gerekir.
Veritabanı (Supabase)
Supabase projesinde Connect > Direct (Connection string) > Session pooler adresini kopyala, şifreyi yerleştir,
.enviçineDATABASE_URL=olarak yaz. (Direct connection yalnız IPv6, Render'dan bağlanamaz.)Şemayı kur: Supabase SQL Editor'e
supabase/migrations/0001_init.sqldosyasını yapıştırıp çalıştır, ya dapsql "$DATABASE_URL" -f supabase/migrations/0001_init.sql. Dosya tekrar çalıştırılabilir.Statik verileri yükle:
uv run python jobs/ingest_static.py --dry-run # önce yazmadan dene
uv run python jobs/ingest_static.py # districts, stations, piers, pharmacies, stops, linesTablolar: districts (30 ilçe), stops, bus_lines, stations (metro + İZBAN), piers, pharmacies,
api_keys, usage_logs. Tüm tablolarda RLS açık ve politika yok: Supabase'in herkese açık REST ucundan
okunamazlar, sunucu doğrudan Postgres bağlantısıyla erişir.
MCP Inspector ile deneme
npx @modelcontextprotocol/inspector uv run izmir-mcpTarayıcıda açılan arayüzde Connect > Tools > List Tools, sonra find_pharmacies için district=Buca.
Arayüzsüz:
npx @modelcontextprotocol/inspector --cli uv run izmir-mcp --method tools/call \
--tool-name get_stop_arrivals --tool-arg "stop=Bornova Metro"Claude Desktop'a bağlama (stdio)
Claude Desktop > Settings > Developer > Edit Config ile claude_desktop_config.json dosyasını aç ve
şunu ekle (yolu kendi bilgisayarına göre değiştir):
macOS:
{
"mcpServers": {
"izmir": {
"command": "/Users/KULLANICI/.local/bin/uv",
"args": ["--directory", "/Users/KULLANICI/izmir-mcp", "run", "izmir-mcp"]
}
}
}Windows:
{
"mcpServers": {
"izmir": {
"command": "C:\\Users\\KULLANICI\\.local\\bin\\uv.exe",
"args": ["--directory", "C:\\Users\\KULLANICI\\izmir-mcp", "run", "izmir-mcp"]
}
}
}uv'nin tam yolunu which uv (macOS) ya da where uv (Windows) ile bulabilirsin; Claude Desktop
terminalin PATH'ini görmediği için tam yol gerekiyor. Kaydedip Claude Desktop'ı tamamen kapatıp yeniden
aç. Sohbet kutusundaki araç simgesinde izmir görünmeli. Sorun olursa log: macOS
~/Library/Logs/Claude/mcp-server-izmir.log, Windows %APPDATA%\Claude\logs\mcp-server-izmir.log.
Uzak sunucu (3. hafta)
uv run izmir-mcp --http Streamable HTTP ile /mcp yolunda çalışır (PORT ortam değişkeni). Render'a
Docker ile kurulum ve API anahtarı doğrulaması 3. haftada eklenecek.
Klasör yapısı
src/izmir_mcp/
server.py MCP sunucusu, araç tanımları
tools.py araçların iş mantığı
models.py ortak Pydantic modelleri (Arrival, Pharmacy, AirReading, Meta, SourceError…)
http.py, cache.py zaman aşımı + tekrar deneme, TTL önbellek + son iyi değer (2. haftada Redis)
sources/ kaynak başına adaptör (eshot, pharmacy, transit_static)
districts.py 30 ilçe ve merkez koordinatı
ingest.py gece yükleme işinin mantığı
data/ API çökerse kullanılacak istasyon/iskele anlık görüntüsü
jobs/ingest_static.py gece yükleme işi
supabase/migrations/ veritabanı şeması
docs/sources.md denenmiş veri kaynakları ve uç noktalar
tests/ çevrimdışı testler (+ `-m live` ile canlı testler)Bilinen sınırlar
Varış süreleri tahmindir, ESHOT'un resmî dakikası değildir.
Nöbet bölgeleri (ör.
BUCA 1,ŞİRİNYER) ilçe sınırıyla birebir örtüşmez; ilçe adıyla eşleşenler ve ilçe merkezine 5 km'den yakın olanlar birlikte gösterilir.ESHOT durak ve hat listesi
acikveriwapi.izmir.bel.trüzerinden geliyor; alan adları belgelerde net olmadığı için yükleyici birkaç olası yazımı dener. İlk gerçek çalıştırmadastopsvelinesadımlarının sonucunu kontrol edin.pharmacies.district_iden yakın ilçe merkezine göre atanır (yaklaşık).
Lisans
MIT
Available Tools
2 toolsfind_pharmaciesEczane bulARead-onlyIdempotent
İzmir'de bir ilçedeki (ör. 'Buca', 'Bornova') eczaneleri ilçe merkezine yakınlığa göre listeler. Varsayılan olarak bugünün NÖBETÇİ eczanelerini döndürür (on_duty=false: tüm eczaneler). İlçe yerine lat/lon verilirse o noktaya en yakınları döndürür.
Inputs: lat, lon, limit, on_duty, +1 more. Returns: meta, error, on_duty, district, +1 more
get_stop_arrivalsDurağa yaklaşan otobüslerARead-onlyIdempotent
Bir ESHOT otobüs durağına yaklaşan otobüsleri ve tahmini varış süresini (dakika) verir. stop durak numarası (ör. '40010') ya da durak adı olabilir (ör. 'Bornova Metro', 'Konak İskele'). Aynı adlı birden çok peron varsa hepsine bakar. Süreler kalan durak sayısı ve otobüs konumundan tahmindir.
Inputs: stop (required), limit. Returns: meta, error, query, stops, +1 more
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
Loading tool schema changelog…
TDQS
Scored across 2 tools
The two tools target completely different resources and actions: bus stop arrival predictions versus pharmacy lookup. There is no plausible scenario where an agent would confuse one for the other.
Both names follow a readable verb_noun pattern (get_stop_arrivals, find_pharmacies), but the verbs differ (get vs find) for otherwise similar retrieval operations. Minor inconsistency, not confusing.
Two tools is very thin for a server branded as an 'İzmir Open Data MCP,' which implies a broader data platform. It feels like a narrow slice rather than a well-scoped toolset.
The surface covers only two specific datasets (stop arrivals and pharmacies). There is no stop search/listing, no route or line information, and no other open-data operations, leaving significant gaps for an open data server.
Maintenance
Related MCP Connectors
Geocoding, routing, isochrones, traffic, weather, and place search for AI agents. 19 MCP tools.
Pay-per-use tool marketplace for AI agents. Search, price-check, and call APIs via MCP.
Read-only search of 2,189 AI agent tools (MCP servers, x402 APIs) with daily automated trust scores.
Mobility, geocoding and nearby urban services for AI agents.
Related MCP Servers
- AlicenseNot gradedqualityCmaintenanceMCP server exposing Montevideo public transportation data (STM) as tools for AI assistants, enabling natural language queries about routes, stops, arrivals, and trip planning.20 npm1MIT
- AlicenseBqualityDmaintenanceMCP server that integrates with the transport12 API to provide tools for searching stops, routes, arrivals, and vehicle forecasts, enabling natural language interaction with public transport data.1712 npmMIT
- AlicenseNot gradedqualityCmaintenanceEnables AI agents to access real-time public transport data for Moscow and the Moscow region, aggregating and reconciling information from multiple sources. Provides tools for finding stops, live arrival boards, vehicle tracking, route details, and ETA calculations.MIT
- AlicenseAqualityCmaintenanceEnables AI assistants to access real-time and scheduled public transit data, including routes, stops, departures, and service alerts, across multiple US metropolitan areas.5MIT