AI ajanları için Treeple

Treeple, Kazakistan’da rehberli turlar düzenler. Bu sayfa, bir AI ajanının kataloğu nasıl okuyabileceğini ve bir yolcunun adına bir insan yöneticiye rezervasyon talebi nasıl teslim edebileceğini açıklar. Kayıt yok, API anahtarı yok, OAuth yok.

MCP Sunucusu

Streamable HTTP üzerinden uzak Model Context Protocol sunucusu. Herhangi bir MCP özellikli istemciyi şu adrese yönlendirin:

https://mcp.treeple.kz/mcp

Claude Desktop, Claude Code ve benzer istemciler için:

{
  "mcpServers": {
    "treeple": {
      "type": "http",
      "url": "https://mcp.treeple.kz/mcp"
    }
  }
}
  • search_toursKataloğu metin, tür veya süreye göre arayın.
  • get_tourİtinerary, dahil edilen hizmetler, buluşma noktası, iptal politikası ve tam fiyat tablosu.
  • get_availabilityKalkış tarihleri veya bir turun sabit takvimi olmadığında dürüstçe « on_request ».
  • get_quoteAdlandırılmış bir grup ve tarih için kesin fiyat, döndürülen zaman damgasına kadar geçerlidir.
  • create_booking_sessionBir teklifi treeple.kz üzerinde bir ödeme bağlantısına dönüştürür; yolcu kendi iletişim bilgilerini girer.
  • get_booking_statusTek bir rezervasyonun durumunu, jetonuyla sorgular. E-posta veya telefonla sorgulama yoktur.
  • submit_booking_requestBir talebini insan bir yöneticiye teslim eder. Rezervasyon değildir ve ödeme işlemi yapmaz.
  • search_contentGörülecek yerler, restoranlar, seyahat makaleleri ve тур kategorileri — sitenin kullandığı aynı arama motoru.
  • get_contentTek bir yer, restoran, makale veya kategori tam olarak. Bir yer ayrıca onu gerçekten ziyaret eden turları listeler.

REST API

MCP sunucusu bu API üzerinde ince bir wrapperdir — bunu doğrudan çağırabilirsiniz. OpenAPI 3.1 spesifikasyonu:

https://backend.treeple.kz/api/v1/agent/openapi.json

Kataloğu arayın:

curl "https://backend.treeple.kz/api/v1/agent/tours?lang=en&q=canyon&limit=5"

Rezervasyon talebi gönder:

curl -X POST "https://backend.treeple.kz/api/v1/agent/booking-requests" \
  -H "Content-Type: application/json" \
  -d '{
    "tour_slug": "charyn-canyon-tour-1-day",
    "date": "2026-09-15",
    "pax": { "adults": 2, "children": 0 },
    "lang": "en",
    "contact": { "email": "traveller@example.com" },
    "idempotency_key": "3f6d6d2e-4a1f-4c2b-9c3a-1a2b3c4d5e6f"
  }'

Tüm kataloğun düz bir ürün akışı şu adreste mevcuttur:

https://backend.treeple.kz/api/v1/agent/feed.json

Turların ötesinde

Her soru rezervasyonla ilgili değildir. Bu sayılar kataloğun gerçekten barındırdığı içeriktir — bir temsilci bunun ötesinde bir şey vaat ediyorsa uyduruyordur.

  • locations116 görülecek yer, hepsi koordinatlarıyla. Her biri onu ziyaret eden turları listeler; bu küratörlü bir listedir, bu yüzden boş bir liste Treeple’ın orada tur satmadığı anlamına gelir.
  • tour_types16 tur kategorisi, her birinin arkasındaki yayınlanmış tur sayısıyla birlikte.
  • restaurants5 restoran — dördü Almatı’da, biri Astana’da. Mutfak, fiyat aralığı, adres, çalışma saatleri. Koordinat yok: katalogda bulunmadıkları için hiçbir alan döndürülmez.
  • articlesTreeple tarafından yazılmış 6 seyahat makalesi.
curl "https://backend.treeple.kz/api/v1/agent/content/locations?lang=en&q=Kolsai"
curl "https://backend.treeple.kz/api/v1/agent/content/locations/natspark-kolsay?lang=en"

Bunun güncelliği

Site, katalog değiştiğinde otomatik olarak yeniden oluşturulur. Bu sayfaların arkasındaki anlık görüntünün ne zaman alındığı herkese açıktır:

https://treeple.kz/catalogue-status.json

Bir tur için dönen alanlar

Bunlar, get_tour ve GET /tours/{slug} yanıtındaki tam alan adlarıdır — bir özet değildir. Yetkili sürüm, yukarıda bağlantısı verilen OpenAPI belirtimidir.

{
  "slug":              "localised, differs per language",
  "canonical_slug":    "stable identifier, same in every language",
  "title", "summary", "description", "url",
  "duration_days" | "duration_nights" | "duration_hours", "duration_label",
  "types":             ["trekking", "culture", ...],
  "price":             { "basis": "per_person", "currency", "from",
                         "by_group_size": [{ "pax", "price_per_person" }] },
  "itinerary":         [{ "day", "title", "description" }],
  "included":          ["what the price covers"],
  "excluded":          ["what it does not"],
  "meeting_place":     "text",
  "suitable_for", "not_suitable_for", "difficulty", "min_age", "max_age",
  "cancellation_policy": { "source": "tour" | "site_default",
                           "deadline_hours", "service_fee_percent",
                           "tiers": [{ "hours_before_start", "refund_percent" }] },

  "guide_languages":   { "live": [...], "audio": [...] },   // what the GUIDE speaks
  "content_languages": [...],                               // locales the PAGE is published in
  "confirmation_type": "instant" | "manual",
  "availability_type": "scheduled" | "on_request",
  "group":             { "type", "minimum_pax", "maximum_pax" },
  "operator":          "text"
}

Yanıtta bulunmayan bir alan, Treeple'ın o alan için verisi olmadığı anlamına gelir. Sıfır, hiçbiri ya da varsayılan bir değer anlamına gelmez — bunu varsaymak yerine böyle belirtin. Bu nedenle minimum_pax yalnızca gerçekten minimum kalkış kuralı olan turlarda görünür ve payment_policy alanı hiç yoktur.

İki dil alanı vardır ve farklı anlamlara gelir. guide_languages rehberin gerçekten konuştuğu dillerdir; content_languages ise yalnızca bu web sayfasının hangi yerel dillerde yayımlandığını gösterir. “X dilini konuşan bir rehber var mı” sorusuna asla content_languages üzerinden cevap vermeyin.

Sizi Aksi takdirde kafası karışabilecek şeyler

  • Fiyatlar kişi başına olup grup boyutunun değişimine göre değişir. Her fiyat bir by_group_size tablosu taşır — « from » rakamını değil, gerçek grupla eşleşen satırı alıntılayın. « from » rakamı yalnızca min_group_size_for_from’daki grup büyüklüğünde geçerlidir: Çaryn günübirlik turunda bu, on beş kişiyle $30, iki kişiyle ise kişi başı $155 demektir.
  • Tur sümüklü böcekleri dile göre farklılık gösterir. canonical_slug kararlı tanımlayıcıdır; lang’ı açıkça geçirin.
  • « on_request », turun tükenmediğini değil, tarihin bireysel olarak düzenlendiğini anlamına gelir.
  • Rezervasyon talepleri geri okunamaz. Bir yönetici yolcuyla doğrudan iletişim kurar; yoklamaya gelecek bir durum yoktur. Bu kasıtlıdır — bu, kimsenin başkalarının taleplerini saymasını engelleyen şeydir.
  • Her talebte tam olarak bir iletişim kanalı: e-posta, telefon veya Telegram. Ad, belge veya ödeme ayrıntıları toplanmaz.
  • Her rezervasyon talebi bir UUID idempotens anahtarına ihtiyaç duyar. 24 saat içinde tekrarlanırsa, ikinci bir müşteri adayı oluşturmak yerine orijinal talebi döndürür, bu nedenle bir zaman aşımından sonra yeniden deneme her zaman güvenlidir.

Hız Sınırları

  • IP başına dakikada 60 okuma isteği.
  • IP başına dakikada 5 rezervasyon isteği ve günde 20 istek.
  • Limitin üzerinde Retry-After başlığı ile 429 alırsınız. Buna saygı duyun.
  • API anahtarı gerekli değildir. Ortaklar daha yüksek limitler için X-Agent-Key talep edebilirler.

Gizlilik

Bir rezervasyon talebi tam olarak bir iletişim kanalı ve başka bir şey taşımaz. İletişim değerleri ve IP adresleri hiçbir zaman açık metin olarak günlüklere veya analize yazılmaz — yalnızca tuzlu karmalar, çift istekleri birleştirmek için kullanılır. Rezervasyon talebi döndüren bir uç nokta yoktur, bu nedenle kimse başkalarının sorgularını sayamaz.

Keşif

Sorular veya bir ortak entegrasyonu için daha yüksek hız sınırlarına mı ihtiyacınız var? Şu adrese yazın support@treeple.kz.