İzmir Açık Veri MCP
# İzmir Açık Veri MCP
İzmir'in açık verisini (ulaşım, nöbetçi eczane, hava kalitesi, duyurular) MCP üzerinden Claude'a bağlayan sunucu.
Yaşar Üniversitesi Gen-AI / Mekatronik Lab, Proje 09.
## Durum (1. hafta)
| Araç | Ne yapar | Kaynak |
|---|---|---|
| `merhaba` | Bağlantı testi | - |
| `otobus_konumlari` | Bir ESHOT hattındaki otobüslerin canlı konumu | `openapi.izmir.bel.tr/api/iztek/hatotobuskonumlari/{hatNo}` |
## Kurulum
Gereken: Node.js 20+
```bash
npm install
npm run build
```
Claude olmadan test etmek için (MCP Inspector):
```bash
npm run inspect
```
## Claude Desktop'a bağlama
Ayar dosyasını açmanın en kolay yolu: Claude Desktop → **Ayarlar → Developer → Edit Config**. Elle açmak isterseniz:
| Sistem | Ayar dosyası |
|---|---|
| Windows | `%APPDATA%\Claude\claude_desktop_config.json` |
| macOS | `~/Library/Application Support/Claude/claude_desktop_config.json` |
Dosyaya şunu ekleyin (dosyada başka ayarlar varsa sadece `mcpServers` kısmını ekleyin) ve yolu kendi klasörünüze göre değiştirin:
```json
{
"mcpServers": {
"izmir-acik-veri": {
"command": "node",
"args": ["C:\\yol\\izmir-mcp\\build\\index.js"]
}
}
}
```
macOS'ta yol şöyle olur: `"/Users/kullanici/izmir-mcp/build/index.js"`
Sonra Claude Desktop'ı tamamen kapatıp açın (Windows'ta sistem tepsisinden, macOS'ta Cmd+Q ile).
### macOS notları (Claude Desktop yeni sürüm)
- Ayarlarda **Developer → Edit Config** yoksa dosyayı Terminal'den oluşturun. Önce `which node` ile Node'un tam yolunu öğrenin (örn. `/usr/local/bin/node`), sonra `"command"` alanına `"node"` yerine bu tam yolu yazın.
- Dosya yoksa klasörü ve dosyayı şöyle oluşturabilirsiniz: `mkdir -p ~/Library/Application\ Support/Claude`, sonra `open -e` ile açıp JSON'u yapıştırın.
- Bağlantı çalışıyorsa sunucu **Ayarlar → Customize → Connectors** altında `izmir-acik-veri` olarak görünür.
## Claude Code'a bağlama
`izmir-mcp` klasörünün içinde:
```bash
claude mcp add izmir-acik-veri --scope user -- node "$(pwd)/build/index.js"
```
Windows PowerShell'de `$(pwd)/build/index.js` yerine tam yolu yazın. Kontrol için Claude Code'da `/mcp` yazın.
## Deneme soruları
- "merhaba aracını Batu için çalıştır"
- "35 numaralı hatta şu an kaç otobüs var?"
## API notları (1. hafta testi)
- **Canlı otobüs konumu çalışıyor.** Dikkat: `KoorX` = enlem, `KoorY` = boylam, ondalık ayracı virgül (`"38,42"`).
- **Nöbetçi eczaneler** (`/api/ibb/nobetcieczaneler`) 200 dönüyor; 2. haftanın kaynak adayı.
- **API kararsız:** aynı uç nokta bazen zaman aşımına düşüyor, bazen 0,5 sn'de dönüyor. `acikveriwapi.izmir.bel.tr` (durak/hat listeleri) testte 40 sn içinde cevap vermedi. Bu yüzden önbellek (Redis) ve yeniden deneme şart.
- Veri kataloğu: https://acikveri.bizizmir.com (CKAN API: `/api/3/action/package_search?q=eshot`)
## Sonraki adımlar
- 2. hafta: kalan iki kaynağın testi (eczane, hava kalitesi), durak bazlı "durağa yaklaşan otobüsler"
- Önbellek + yeniden deneme, uzak (HTTP) sürüm + API anahtarı, Docker
## Lisans
[MIT](LICENSE)
TDQS
Scored across 2 tools
The two tools are clearly distinct: 'merhaba' is a trivial connectivity/greeting test, while 'otobus_konumlari' retrieves live bus positions for a specified route. There is no realistic overlap or risk of an agent confusing them.
Both names are lowercase Turkish and use underscores for multiword concepts ('otobus_konumlari'), which is reasonably consistent. However, neither follows an action-oriented verb_noun convention, and 'merhaba' is a single-word outlier.
Only two tools exist, and one is a non-domain smoke-test greeting. The single real data tool makes the surface feel thin for a server branded as an İzmir open-data source.
The server exposes only live vehicle positions for one transit mode, with no tools for listing lines, stops, schedules, or other İzmir open datasets implied by the server name. This leaves major gaps for an 'open data' MCP surface.