GAIA-431: add enroute tools and a precipitation geometry tool that returns GeoJSON
Adds enroute_register_route and enroute_get_route_weather for the BE-Enroute endpoints /v1/enroute/register and /v1/enroute/weather, with zod validation that matches the REST request (geometry needs an encodedPolyline or coordinates, routeId must be a UUID, timestamps are epoch milliseconds). Adds get_precipitation_geometry for POST /v1/precipitations/geometry. That endpoint answers with a protobuf PrecipitationFeatureCollection, which an AI client cannot read, so the response is decoded with protobufjs and returned as a GeoJSON FeatureCollection of MultiPolygons with intensity, radarTimestamp and forecast properties. The needed subset of geojson.proto is embedded as text in src/geojson-proto.ts because only dist is shipped in the release package; it must be kept in sync with BE-GeoCommons. client.ts gets apiPostBinary, which reads the body as bytes and logs only its length so binary responses are neither corrupted nor dumped into the HTTP log. README and package files are updated accordingly (60 tools in 10 categories).
This commit is contained in:
@@ -23,6 +23,7 @@
|
||||
- [📍 Nokta Alarmları / Point Alarms](#-nokta-alarmları--point-alarms)
|
||||
- [🗺️ Coğrafi Alarmlar / Geo Alarms](#️-coğrafi-alarmlar--geo-alarms)
|
||||
- [📅 Tahmin Alarmları / Forecast Alarms](#-tahmin-alarmları--forecast-alarms)
|
||||
- [🛣️ Güzergah / Enroute](#️-güzergah--enroute)
|
||||
- [🏗️ Mimari](#️-mimari)
|
||||
- [🔐 Kimlik Doğrulama ve Güvenlik](#-kimlik-doğrulama-ve-güvenlik)
|
||||
- [Dahili Auth Akışı](#dahili-auth-akışı)
|
||||
@@ -37,20 +38,21 @@
|
||||
|
||||
## 🌐 Genel Bakış
|
||||
|
||||
Bu MCP server, iklim.co REST API'sinin tüm yeteneklerini **57 araç** (tool) olarak sunar. Araçlar 9 kategoriye ayrılmıştır:
|
||||
Bu MCP server, iklim.co REST API'sinin tüm yeteneklerini **60 araç** (tool) olarak sunar. Araçlar 10 kategoriye ayrılmıştır:
|
||||
|
||||
| Kategori | Araç Sayısı | Kapsam |
|
||||
|----------|:-----------:|--------|
|
||||
| ⚡ Lightning | 2 | Yıldırım çarpma verileri |
|
||||
| 🌪️ Thunderstorm | 3 | Fırtına hücresi takibi |
|
||||
| 🌧️ Precipitation | 2 | Radar yağış verileri |
|
||||
| 🌧️ Precipitation | 3 | Radar yağış verileri |
|
||||
| 🌤️ Forecast | 3 | Saatlik / günlük / anlık tahmin |
|
||||
| 👤 Auth & User | 11 | Kimlik doğrulama, kullanıcı yönetimi |
|
||||
| 🏢 Account | 8 | Hesap ve abonelik yönetimi |
|
||||
| 📍 Point Alarms | 6 | Nokta tabanlı uyarı abonelikleri |
|
||||
| 🗺️ Geo Alarms | 12 | Coğrafi sınır bazlı uyarılar + il/ilçe/mahalle kataloğu |
|
||||
| 📅 Forecast Alarms | 10 | Eşik bazlı tahmin uyarıları + il/ilçe kataloğu |
|
||||
| **Toplam** | **57** | |
|
||||
| 🛣️ Enroute | 2 | Hava durumu farkındalıklı rota izleme |
|
||||
| **Toplam** | **60** | |
|
||||
|
||||
---
|
||||
|
||||
@@ -284,6 +286,18 @@ Dairesel alan içindeki radar yağış verilerini sorgular.
|
||||
#### `get_precipitations_page`
|
||||
Zaman aralığına göre yağış verilerini sayfalı getirir. `intensityThreshold` **zorunludur**.
|
||||
|
||||
#### `get_precipitation_geometry`
|
||||
Verilen yağış olaylarının (`get_precipitations_*` sonuçlarındaki `eventId`) poligon geometrisini **GeoJSON FeatureCollection** olarak döndürür. API protobuf yanıt verir; MCP bunu GeoJSON'a çevirir. Her feature bir `MultiPolygon`dur ve `intensity`, `radarTimestamp` (epoch ms), `forecast` özelliklerini taşır.
|
||||
|
||||
| Parametre | Tip | Açıklama |
|
||||
|-----------|-----|----------|
|
||||
| `eventIds` | string[] | Yağış olay ID'leri (1 – 10) |
|
||||
| `latitude` | number? | Kırpma dairesi merkez enlemi |
|
||||
| `longitude` | number? | Kırpma dairesi merkez boylamı |
|
||||
| `radius` | number? | Kırpma dairesi yarıçapı, metre |
|
||||
|
||||
`latitude`/`longitude` birlikte verilmelidir. Merkez ve yarıçap yalnızca power-user rolüne sahip hesaplarda atlanabilir.
|
||||
|
||||
---
|
||||
|
||||
### 🌤️ Hava Tahmini / Forecast
|
||||
@@ -450,7 +464,7 @@ Yeni coğrafi alarm oluşturur. Üç sınır tipi desteklenir:
|
||||
|
||||
```json
|
||||
// İdari sınır
|
||||
{ "type": "ADMINISTRATIVE", "cityId": 6, "districtId": 60 }
|
||||
{ "type": "ADMINISTRATIVE", "countryCode": "TUR", "cityId": 6, "districtId": 60 }
|
||||
|
||||
// Poligon
|
||||
{ "type": "POLYGON", "polygon": { "exterior": [{"lat": 39.9, "lng": 32.8}, ...] } }
|
||||
@@ -462,11 +476,13 @@ Yeni coğrafi alarm oluşturur. Üç sınır tipi desteklenir:
|
||||
#### `geo_alarm_update` / `geo_alarm_delete` / `geo_alarm_get_by_id` / `geo_alarm_get_by_recipient` / `geo_alarm_list`
|
||||
Nokta alarmlarıyla aynı imza.
|
||||
|
||||
İdari sınırda `countryCode` zorunludur: `TUR` (Türkiye) veya `CTR` (KKTC). İl, ilçe ve mahalle ID'leri ülkeye göre tanımlıdır, bu yüzden ilgili ülkenin katalog araçlarından alınmalıdır. `CTR` için mahalle düzeyi bucaktır.
|
||||
|
||||
#### 🏙️ Konum Kataloğu
|
||||
|
||||
| Araç | Açıklama |
|
||||
|------|----------|
|
||||
| `geo_alarm_list_cities` | Tüm illeri listeler |
|
||||
| `geo_alarm_list_cities` | Bir ülkenin illerini listeler (`countryCode`: `TUR` veya `CTR`) |
|
||||
| `geo_alarm_get_city` | `cityId` ile il detayı |
|
||||
| `geo_alarm_list_districts` | `cityId` ile ilçeleri listeler |
|
||||
| `geo_alarm_get_district` | `districtId` ile ilçe detayı |
|
||||
@@ -484,7 +500,7 @@ Yeni tahmin alarmı oluşturur.
|
||||
|
||||
**Sınır tipleri:**
|
||||
```json
|
||||
{ "type": "ADMINISTRATIVE", "cityId": 6, "districtId": 60 }
|
||||
{ "type": "ADMINISTRATIVE", "countryCode": "TUR", "cityId": 6, "districtId": 60 }
|
||||
{ "type": "POINT", "latitude": 39.92, "longitude": 32.85 }
|
||||
```
|
||||
|
||||
@@ -508,15 +524,40 @@ Yeni tahmin alarmı oluşturur.
|
||||
#### `forecast_alarm_update` / `forecast_alarm_delete` / `forecast_alarm_get_by_id` / `forecast_alarm_get_by_recipient` / `forecast_alarm_list`
|
||||
Nokta alarmlarıyla aynı imza.
|
||||
|
||||
İdari sınırda `countryCode` zorunludur: `TUR` (Türkiye) veya `CTR` (KKTC). İl ve ilçe ID'leri ülkeye göre tanımlıdır, bu yüzden ilgili ülkenin katalog araçlarından alınmalıdır.
|
||||
|
||||
#### 🏙️ Konum Kataloğu
|
||||
|
||||
| Araç | Açıklama |
|
||||
|------|----------|
|
||||
| `forecast_alarm_list_cities` | Tüm illeri listeler |
|
||||
| `forecast_alarm_list_cities` | Bir ülkenin illerini listeler (`countryCode`: `TUR` veya `CTR`) |
|
||||
| `forecast_alarm_get_city` | `cityId` ile il detayı |
|
||||
| `forecast_alarm_list_districts` | `cityId` ile ilçeleri listeler |
|
||||
| `forecast_alarm_get_district` | `districtId` ile ilçe detayı |
|
||||
|
||||
### 🛣️ Güzergah / Enroute
|
||||
|
||||
#### `enroute_register_route`
|
||||
Rotayı kaydeder; rota H3 segmentlerine bölünür ve her segment için ETA hesaplanır. `routeId`, mevcut segment (nowcast + tahmin) ve gelecek segmentler (tahmin) döner. Tüm zamanlar epoch ms'dir.
|
||||
|
||||
| Parametre | Tip | Açıklama |
|
||||
|-----------|-----|----------|
|
||||
| `origin` | {lat, lng} | Başlangıç noktası |
|
||||
| `destination` | {lat, lng} | Varış noktası |
|
||||
| `departureTime` | number | Kalkış zamanı, epoch ms |
|
||||
| `distanceMeters` | number | Toplam mesafe, metre |
|
||||
| `durationSeconds` | number | Toplam süre, saniye |
|
||||
| `geometry` | object | `encodedPolyline` veya `coordinates` (en az biri); `polylinePrecision` 5 (varsayılan) veya 6 |
|
||||
| `waypoints` | {lat, lng}[]? | Ara duraklar |
|
||||
|
||||
#### `enroute_get_route_weather`
|
||||
Kayıtlı rota için güncel hava durumunu döndürür. `currentLocation` verilirse mevcut segment yeniden değerlendirilir ve sürücü programın dışındaysa ETA'lar yeniden hesaplanır.
|
||||
|
||||
| Parametre | Tip | Açıklama |
|
||||
|-----------|-----|----------|
|
||||
| `routeId` | string (UUID) | `enroute_register_route` yanıtındaki rota ID'si |
|
||||
| `currentLocation` | {lat, lng}? | Sürücünün mevcut konumu |
|
||||
|
||||
---
|
||||
|
||||
## 🏗️ Mimari
|
||||
@@ -528,6 +569,7 @@ src/
|
||||
├── auth.ts # JWT token yönetimi (otomatik yenileme)
|
||||
├── client.ts # HTTP API istemcisi (HMAC imzalama)
|
||||
├── security.ts # HMAC-SHA256, nonce, idempotency key
|
||||
├── geojson-proto.ts # Yağış geometrisi protobuf → GeoJSON çözücü
|
||||
└── tools/
|
||||
├── lightnings.ts
|
||||
├── thunderstorms.ts
|
||||
@@ -537,7 +579,8 @@ src/
|
||||
├── accounts.ts
|
||||
├── point-alarms.ts
|
||||
├── geo-alarms.ts
|
||||
└── forecast-alarms.ts
|
||||
├── forecast-alarms.ts
|
||||
└── enroute.ts
|
||||
```
|
||||
|
||||
**İstek akışı:**
|
||||
|
||||
Reference in New Issue
Block a user