AIエージェント向けTreeple

Treepleはカザフスタンでガイドツアーを実施しています。このページでは、AIエージェントがカタログを読み、旅行者に代わって人間に予約リクエストを提出する方法を説明しています。登録なし、APIキーなし、OAuthなし。

MCPサーバー

Streamable HTTP上のリモートモデルコンテキストプロトコルサーバー。任意のMCP対応クライアントを以下に指定します:

https://mcp.treeple.kz/mcp

Claude Desktop、Claude Code、および同様のクライアント向け:

{
  "mcpServers": {
    "treeple": {
      "type": "http",
      "url": "https://mcp.treeple.kz/mcp"
    }
  }
}
  • search_toursテキスト、タイプ、期間でカタログを検索します。
  • get_tour行程、含まれるもの、集合地点、キャンセルポリシー、および完全な料金表。
  • get_availability出発日、またはツアーが固定カレンダーを持たない場合は正直に「on_request」。
  • get_quote指定されたグループと日付の正確な料金。返されたタイムスタンプまで有効です。
  • create_booking_sessiontreeple.kz の予約リンクに見積もりを変換します。旅行者はそこで自分の連絡先情報を入力します。
  • get_booking_statusトークンで照会された 1 件の予約の状態です。メールや電話番号での検索はありません。
  • submit_booking_requestリクエストを人間マネージャーに提出します。予約ではなく、支払いを処理しません。
  • search_content見どころ、レストラン、旅行記事、ツアーカテゴリ。サイトが使うのと同じ検索エンジンです。
  • get_content1 つの見どころ、レストラン、記事、またはカテゴリの全文です。見どころには、実際にそこを訪れるツアーも表示されます。

REST API

MCPサーバーはこのAPI上の薄いラッパーです — 直接呼び出せます。OpenAPI 3.1仕様:

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

カタログを検索する:

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

予約リクエストを提出する:

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

カタログ全体のフラット製品フィードは以下で利用できます:

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

ツアー以外

すべての質問が予約に関するものとは限りません。これらの件数は、カタログに実際に含まれている数です。これ以上を約束する担当者は、事実をでっち上げています。

  • locations116 件の見どころ。すべて座標付きです。各項目には、そこを訪れるツアーが表示されます。厳選リストのため、空欄なら Treeple はその場所のツアーを販売していません。
  • tour_types16 のツアーカテゴリ。それぞれに公開済みツアー数が付いています。
  • restaurantsレストラン5件 — アルマトイに4件、アスタナに1件。料理、価格帯、住所、営業時間。座標なし:カタログに登録されていないため、項目は返されません。
  • articlesTreeple が執筆した旅行記事 6 件。
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"

最新性について

カタログが更新されると、サイトは自動的に再構築されます。これらのページの元になったスナップショットの取得時刻は公開されています:

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

ツアーに返される項目

これらは get_tour と GET /tours/{slug} の応答に含まれる正確なフィールド名です。要約ではありません。信頼できる版は、上記リンク先の OpenAPI 仕様です。

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

応答に存在しないフィールドは、その項目のデータが Treeple にないことを意味します。ゼロ、なし、または既定値を意味するわけではありません。そのように決めつけずに説明してください。そのため minimum_pax は、実際に最少出発人数ルールがあるツアーにだけ表示され、payment_policy フィールドはそもそも存在しません。

言語フィールドは 2 つあり、意味が異なります。guide_languages はガイドが実際に話せる言語で、content_languages はこの Web ページがどのロケールで公開されているかを示すだけです。content_languages から「X を話せるガイドがいるか」を答えてはいけません。

あなたを混乱させるかもしれないこと

  • 価格は1人あたりであり、グループサイズに応じて変わります。各価格はby_group_sizeテーブルを示しています — 「from」の数字ではなく、実際のグループに対応する行を引用してください。 「from」の数字は min_group_size_for_from のグループ人数でのみ成立します。チャリンの日帰りツアーでは15人で1人30ドル、2人なら1人155ドルです。
  • ツアースラッグは言語によって異なります。canonical_slugは安定した識別子です。langを明示的に渡してください。
  • 「on_request」は、ツアーが売り切れていることではなく、日付が個別に手配されることを意味します。
  • 予約リクエストは読み直すことができません。マネージャーが直接旅行者に連絡します。ポーリング対象の状態はありません。これは意図的です — これは誰かが他の人のリクエストをリストアップするのを防ぐものです。
  • リクエストごとに正確に1つの連絡先チャネル:メール、電話、またはTelegram。名前、書類、または支払いの詳細は収集されません。
  • 各予約リクエストにはUUID idempotencyキーが必要です。24時間以内に繰り返すと、2番目のリードを作成する代わりに元のリクエストが返されます。したがって、タイムアウト後の再試行は常に安全です。

レート制限

  • IP あたり 1 分間に 60 回の読み取りリクエスト。
  • IP あたり 1 分間に 5 件の予約リクエスト、1 日に 20 件。
  • 制限を超えると、Retry-After ヘッダー付きで 429 が返されます。これを尊重してください。
  • APIキーは不要です。パートナーはより高い制限のためにX-Agent-Keyをリクエストできます。

プライバシー

予約リクエストは正確に1つの連絡先チャネル以上何ものもありません。連絡先の値とIPアドレスはログまたは分析に平文で書き込まれることはありません — 重複したリクエストをマージするために使用される塩辛いハッシュのみです。予約リクエストを返すエンドポイントはないため、他の人のクエリをリストアップできません。

発見

質問がある場合、またはパートナー統合のためのより高いレート制限が必要な場合は、以下に書いてください support@treeple.kz.