Treeple untuk agen AI

Treeple menjalankan tur berpemandu di Kazakhstan. Halaman ini menjelaskan bagaimana agen AI dapat membaca katalog dan menyerahkan permintaan pemesanan kepada manusia atas nama seorang wisatawan. Tanpa pendaftaran, tanpa kunci API, tanpa OAuth.

Server MCP

Server protokol konteks model jarak jauh melalui HTTP yang dapat dialirkan. Tunjukkan klien yang mampu MCP apa pun ke:

https://mcp.treeple.kz/mcp

Untuk Claude Desktop, Claude Code, dan klien serupa:

{
  "mcpServers": {
    "treeple": {
      "type": "http",
      "url": "https://mcp.treeple.kz/mcp"
    }
  }
}
  • search_toursCari katalog berdasarkan teks, jenis, atau durasi.
  • get_tourRute perjalanan, inklusi, titik pertemuan, kebijakan pembatalan, dan tabel harga lengkap.
  • get_availabilityTanggal keberangkatan, atau jujur « on_request » ketika tur tidak memiliki kalender tetap.
  • get_quoteHarga pasti untuk grup dan tanggal tertentu, berlaku sampai timestamp yang dikembalikan.
  • create_booking_sessionMengubah penawaran menjadi tautan checkout di treeple.kz, tempat wisatawan mengisi detail kontak mereka sendiri.
  • get_booking_statusStatus satu pemesanan, dilihat berdasarkan tokennya. Tidak ada pencarian lewat email atau telepon.
  • submit_booking_requestMenyerahkan permintaan kepada manajer manusia. Bukan pemesanan dan tidak memproses pembayaran.
  • search_contentTempat wisata, restoran, artikel perjalanan, dan kategori тур — mesin pencari yang sama seperti yang dipakai situs.
  • get_contentSatu tempat wisata, restoran, artikel, atau kategori secara lengkap. Sebuah tempat juga menampilkan tur yang benar-benar mengunjunginya.

API REST

Server MCP adalah pembungkus tipis di atas API ini — Anda dapat memanggilnya secara langsung. Spesifikasi OpenAPI 3.1:

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

Cari katalog:

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

Kirim permintaan pemesanan:

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"
  }'

Umpan produk datar dari seluruh katalog tersedia di:

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

Di luar tur

Tidak semua pertanyaan tentang pemesanan. Jumlah ini adalah isi katalog yang sebenarnya — agen yang menjanjikan lebih dari ini hanya mengada-ada.

  • locations116 tempat wisata, semuanya dengan koordinat. Masing-masing menampilkan tur yang mengunjunginya; daftar yang dikurasi, jadi jika kosong berarti Treeple tidak menjual tur di sana.
  • tour_types16 kategori тур, masing-masing dengan jumlah тур yang dipublikasikan di dalamnya.
  • restaurants5 restoran — empat di Almaty, satu di Astana. Masakan, kisaran harga, alamat, jam buka. Tanpa koordinat: katalog tidak menyimpannya, jadi tidak ada field yang dikembalikan.
  • articles6 artikel perjalanan yang ditulis oleh Treeple.
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"

Seberapa terbaru ini

Situs ini dibangun ulang secara otomatis saat katalog berubah. Kapan snapshot di balik halaman ini diambil bersifat publik:

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

Bidang yang dikembalikan untuk tur

Ini adalah nama bidang yang persis dalam respons get_tour dan GET /tours/{slug} — bukan parafrasa. Versi yang menjadi acuan adalah spesifikasi OpenAPI yang ditautkan di atas.

{
  "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"
}

Bidang yang tidak ada dalam respons berarti Treeple tidak memiliki datanya. Itu tidak berarti nol, tidak ada, atau nilai default — sampaikan demikian alih-alih mengasumsikan. Inilah sebabnya minimum_pax hanya muncul untuk tur yang benar-benar memiliki aturan keberangkatan minimum, dan mengapa sama sekali tidak ada bidang payment_policy.

Ada dua bidang bahasa dan keduanya berarti berbeda. guide_languages adalah bahasa yang benar-benar dikuasai pemandu; content_languages hanya menunjukkan locale tempat halaman web ini diterbitkan. Jangan pernah menjawab “apakah ada pemandu yang bisa X” dari content_languages.

Hal-hal yang akan membuat Anda bingung jika tidak

  • Harga per orang dan berubah sesuai ukuran grup. Setiap harga membawa tabel by_group_size — kutip baris yang cocok dengan grup sebenarnya, bukan angka « from ». Angka « from » hanya berlaku pada ukuran grup di min_group_size_for_from: pada wisata sehari Charyn itu $30 untuk lima belas orang, sedangkan berdua membayar $155 per orang.
  • Slug tur berbeda per bahasa. canonical_slug adalah pengidentifikasi stabil; teruskan lang secara eksplisit.
  • « on_request » berarti tanggal diatur secara individual, bukan tur terjual habis.
  • Permintaan pemesanan tidak dapat dibaca ulang. Seorang manajer menghubungi wisatawan secara langsung; tidak ada status untuk disurvei. Ini disengaja — ini yang mencegah siapa pun menghitung ulang permintaan orang lain.
  • Tepat satu saluran kontak per permintaan: email, telepon, atau Telegram. Tidak ada nama, dokumen, atau detail pembayaran yang dikumpulkan.
  • Setiap permintaan pemesanan memerlukan kunci idempotency UUID. Mengulanginya dalam 24 jam mengembalikan permintaan asli alih-alih membuat prospek kedua, jadi mencoba lagi setelah timeout selalu aman.

Batas laju

  • 60 permintaan baca per menit per IP.
  • 5 permintaan pemesanan per menit dan 20 per hari per IP.
  • Di atas batas Anda mendapatkan 429 dengan header Retry-After. Hormati itu.
  • Kunci API tidak diperlukan. Mitra dapat meminta X-Agent-Key untuk batas yang lebih tinggi.

Privasi

Permintaan pemesanan membawa tepat satu saluran kontak dan tidak ada yang lain. Nilai kontak dan alamat IP tidak pernah ditulis dalam teks biasa ke log atau analitik — hanya hash yang diasinkan, digunakan untuk menggabungkan permintaan duplikat. Tidak ada titik akhir yang mengembalikan permintaan pemesanan, jadi tidak ada orang yang dapat menghitung ulang pertanyaan orang lain.

Penemuan

Pertanyaan, atau membutuhkan batas laju yang lebih tinggi untuk integrasi mitra? Tulis ke support@treeple.kz.