适用于 AI 代理的 Treeple

Treeple 在哈萨克斯坦举办导游旅游。此页面描述 AI 代理如何读取目录并代表旅客向人类提交预订请求。无需注册、无需 API 密钥、无需 OAuth。

MCP 服务器

通过 Streamable HTTP 的远程 Model Context Protocol 服务器。将任何支持 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_session将报价转换为 treeple.kz 上的结账链接,旅行者可在其中填写自己的联系方式。
  • get_booking_status通过其令牌查询的单个预订状态。不支持按邮箱或电话查询。
  • submit_booking_request向人类经理提交请求。不是预订,不处理付款。
  • search_content景点、餐厅、旅游文章和线路分类——与网站使用的相同搜索引擎。
  • get_content完整的单个景点、餐厅、文章或分类。景点还会列出实际访问它的线路。

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 个线路分类,每个都附有其下已发布线路的数量。
  • restaurants5家餐厅——阿拉木图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 没有该字段的数据。不要将其视为 0、无或默认值——请明确说明,而不是自行推断。这就是 minimum_pax 只出现在确实有最低出发人数规则的行程中,以及为什么根本没有 payment_policy 字段的原因。

有两个语言字段,它们的含义不同。guide_languages 表示导游实际会说的语言;content_languages 仅表示此网页发布了哪些语言版本。不要用 content_languages 来回答“是否有会说 X 的导游”。

可能会让你困惑的事情

  • 价格按人员计算,随团队规模变化。每个价格都有一个 by_group_size 表 — 引用与实际团队相匹配的行,而不是「from」数字。 「from」数字只在 min_group_size_for_from 所示的团队规模下成立:恰伦一日游在十五人时为每人 30 美元,两人同行则为每人 155 美元。
  • 旅游 slug 因语言而异。canonical_slug 是稳定标识符;明确传递 lang。
  • 「on_request」意味着日期是单独安排的,而不是旅游已售罄。
  • 预订请求无法读回。经理直接联系旅客;没有状态可以轮询。这是故意的 — 这是防止任何人枚举他人请求的原因。
  • 每个请求恰好有一个联系渠道:电子邮件、电话或 Telegram。不收集姓名、文件或付款详情。
  • 每个预订请求都需要一个 UUID 幂等性密钥。在 24 小时内重复它会返回原始请求,而不是创建第二个销售线索,因此在超时后重试始终是安全的。

速率限制

  • 每个 IP 每分钟 60 个读取请求。
  • 每个 IP 每分钟 5 个预订请求和每天 20 个。
  • 超过限制,您会收到带有 Retry-After 标头的 429。尊重它。
  • 不需要 API 密钥。合作伙伴可以请求 X-Agent-Key 以获得更高的限制。

隐私

预订请求恰好携带一个联系渠道,别无其他。联系值和 IP 地址从不以明文形式写入日志或分析 — 只有盐渍哈希,用于合并重复请求。没有返回预订请求的端点,因此没有人可以枚举他人的查询。

发现

有问题,或需要为合作伙伴集成提高速率限制?写信至 support@treeple.kz.