Treeple für KI-Agenten

Treeple führt geführte Touren in Kasachstan durch. Diese Seite beschreibt, wie ein KI-Agent den Katalog lesen und eine Buchungsanfrage im Namen eines Reisenden an einen Menschen weiterleiten kann. Keine Registrierung, kein API-Schlüssel, kein OAuth.

MCP-Server

Ein Remote-Model-Context-Protocol-Server über Streamable HTTP. Zeigen Sie jeden MCP-fähigen Client auf:

https://mcp.treeple.kz/mcp

Für Claude Desktop, Claude Code und ähnliche Clients:

{
  "mcpServers": {
    "treeple": {
      "type": "http",
      "url": "https://mcp.treeple.kz/mcp"
    }
  }
}
  • search_toursKatalog nach Text, Typ oder Dauer durchsuchen.
  • get_tourReiseroute, Leistungen, Treffpunkt, Stornierungsbedingungen und die vollständige Preistabelle.
  • get_availabilityAbfahrtsdaten oder ein ehrliches »on_request«, wenn eine Tour keinen festen Kalender hat.
  • get_quoteEin exakter Preis für eine benannte Gruppe und ein Datum, gültig bis zum zurückgegebenen Zeitstempel.
  • create_booking_sessionWandelt ein Angebot in einen Checkout-Link auf treeple.kz um, wo der Reisende seine eigenen Kontaktdaten eingibt.
  • get_booking_statusDer Status einer Buchung, abgerufen über ihr Token. Es gibt keine Suche per E-Mail oder Telefon.
  • submit_booking_requestLeitet eine Anfrage an einen menschlichen Manager weiter. Keine Reservierung und bearbeitet keine Zahlung.
  • search_contentSehenswürdigkeiten, Restaurants, Reiseartikel und Tourenkategorien — dieselbe Suchmaschine, die die Seite verwendet.
  • get_contentEin einzelner Ort, ein Restaurant, ein Artikel oder eine Kategorie vollständig. Ein Ort listet auch die Touren auf, die ihn tatsächlich besuchen.

REST API

Der MCP-Server ist ein dünner Wrapper über diese API — Sie können sie direkt aufrufen. OpenAPI 3.1-Spezifikation:

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

Katalog durchsuchen:

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

Buchungsanfrage einreichen:

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

Ein flacher Produktfeed des gesamten Katalogs ist verfügbar unter:

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

Mehr als Touren

Nicht jede Frage betrifft eine Buchung. Diese Zahlen zeigen, was der Katalog wirklich enthält — ein Agent, der mehr verspricht, erfindet es.

  • locations116 Sehenswürdigkeiten, alle mit Koordinaten. Jede listet die Touren auf, die sie besuchen; eine kuratierte Liste, also bedeutet eine leere, dass Treeple dort keine Tour verkauft.
  • tour_types16 Tourkategorien, jeweils mit der Anzahl der veröffentlichten Touren dahinter.
  • restaurants5 Restaurants — vier in Almaty, eines in Astana. Küche, Preisspanne, Adresse, Öffnungszeiten. Keine Koordinaten: Der Katalog enthält sie nicht, daher wird kein Feld zurückgegeben.
  • articles6 Reiseartikel von 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"

Wie aktuell das ist

Die Seite wird automatisch neu erstellt, wenn sich der Katalog ändert. Wann die Momentaufnahme hinter diesen Seiten aufgenommen wurde, ist öffentlich:

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

Felder, die für eine Tour zurückgegeben werden

Dies sind die exakten Feldnamen in der Antwort von get_tour und GET /tours/{slug} — keine Paraphrase. Die maßgebliche Version ist die oben verlinkte OpenAPI-Spezifikation.

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

Ein im Antwortobjekt fehlendes Feld bedeutet, dass Treeple dafür keine Daten hat. Es bedeutet nicht null, keines oder einen Standardwert — sagen Sie das ausdrücklich, statt etwas anzunehmen. Deshalb erscheint minimum_pax nur bei Touren, für die es wirklich eine Mindestteilnehmerzahl gibt, und deshalb gibt es überhaupt kein Feld payment_policy.

Es gibt zwei Sprachfelder, und sie bedeuten Unterschiedliches. guide_languages gibt an, was der Guide tatsächlich spricht; content_languages zeigt nur, in welchen Lokalen diese Webseite veröffentlicht ist. Beantworten Sie die Frage „Gibt es einen Guide, der X spricht?“ niemals anhand von content_languages.

Dinge, die dich sonst verwirren könnten

  • Preise sind pro Person und ändern sich mit der Gruppengröße. Jeder Preis hat eine by_group_size-Tabelle — zitieren Sie die Zeile, die der tatsächlichen Gruppe entspricht, nicht die »from«-Abbildung. Die »from«-Zahl gilt nur bei der Gruppengröße aus min_group_size_for_from: beim Charyn-Tagesausflug sind das $30 bei fünfzehn Reisenden, zu zweit zahlt jeder $155.
  • Tour-Slugs unterscheiden sich pro Sprache. canonical_slug ist der stabile Identifikator; übergeben Sie lang explizit.
  • »on_request« bedeutet, dass das Datum individuell vereinbart wird, nicht dass die Tour ausverkauft ist.
  • Buchungsanfragen können nicht zurückgelesen werden. Ein Manager kontaktiert den Reisenden direkt; es gibt keinen Status zum Abrufen. Dies ist beabsichtigt — es verhindert, dass jemand die Anfragen anderer Personen aufzählt.
  • Genau ein Kontaktkanal pro Anfrage: E-Mail, Telefon oder Telegram. Keine Namen, Dokumente oder Zahlungsdaten werden erfasst.
  • Jede Buchungsanfrage benötigt einen UUID-Idempotenzschlüssel. Wenn Sie ihn innerhalb von 24 Stunden wiederholen, wird die ursprüngliche Anfrage zurückgegeben, anstatt einen zweiten Lead zu erstellen, sodass ein erneuter Versuch nach einem Timeout immer sicher ist.

Rate Limits

  • 60 Leseanfragen pro Minute pro IP.
  • 5 Buchungsanfragen pro Minute und 20 pro Tag pro IP.
  • Über dem Limit erhalten Sie 429 mit einem Retry-After-Header. Beachte es.
  • Es ist kein API-Schlüssel erforderlich. Partner können einen X-Agent-Key für höhere Limits anfordern.

Datenschutz

Eine Buchungsanfrage enthält genau einen Kontaktkanal und sonst nichts. Kontaktwerte und IP-Adressen werden niemals im Klartext in Protokollen oder Analysen geschrieben — nur Salzhashes, die zur Zusammenführung doppelter Anfragen verwendet werden. Es gibt keinen Endpunkt, der eine Buchungsanfrage zurückgibt, sodass niemand die Anfragen anderer Personen aufzählen kann.

Entdeckung

Fragen oder benötigen Sie höhere Rate Limits für eine Partner-Integration? Schreiben Sie an support@treeple.kz.