适用于 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不止于线路
并非所有问题都与预订有关。这些数量是真实目录中的内容——如果客服声称更多,那就是在编造。
locations— 116 个景点,均带坐标。每个景点都列出会访问它的线路;这是经过筛选的列表,因此如果为空,说明 Treeple 没有销售到那里的线路。tour_types— 16 个线路分类,每个都附有其下已发布线路的数量。restaurants— 5家餐厅——阿拉木图4家,阿斯塔纳1家。菜系、价格范围、地址、营业时间。无坐标:目录中不包含这些信息,因此不返回该字段。articles— Treeple 撰写的 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 地址从不以明文形式写入日志或分析 — 只有盐渍哈希,用于合并重复请求。没有返回预订请求的端点,因此没有人可以枚举他人的查询。
发现
- https://treeple.kz/.well-known/mcp — MCP 服务器卡
- https://treeple.kz/llms.txt — 代理注释
- https://treeple.kz/llms-full.txt — 完整目录快照
有问题,或需要为合作伙伴集成提高速率限制?写信至 support@treeple.kz.