AI 에이전트를 위한 Treeple
Treeple은 카자흐스탄에서 가이드 투어를 운영합니다. 이 페이지에서는 AI 에이전트가 카탈로그를 읽고 여행자를 대신하여 인간에게 예약 요청을 제출하는 방법을 설명합니다. 등록 없음, API 키 없음, OAuth 없음.
MCP 서버
Streamable HTTP를 통한 원격 모델 컨텍스트 프로토콜 서버입니다. MCP 지원 클라이언트를 다음으로 지정합니다:
https://mcp.treeple.kz/mcpClaude 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를 구사하는 가이드가 있나요”라고 답하지 마세요.
그렇지 않으면 당신을 혼동시킬 것들
- 가격은 1인당이며 그룹 크기에 따라 변합니다. 각 가격은 by_group_size 테이블을 포함합니다 — « from » 수치가 아닌 실제 그룹과 일치하는 행을 인용하십시오. « from » 수치는 min_group_size_for_from의 그룹 규모에서만 유효합니다. 차린 당일 투어는 15명일 때 1인 30달러, 2명일 때는 1인 155달러입니다.
- 투어 슬러그는 언어에 따라 다릅니다. canonical_slug는 안정적인 식별자입니다. lang을 명시적으로 전달하세요.
- « on_request »는 투어가 매진된 것이 아니라 날짜가 개별적으로 정렬됨을 의미합니다.
- 예약 요청을 다시 읽을 수 없습니다. 관리자가 여행자에게 직접 연락합니다. 폴링할 상태가 없습니다. 이것은 의도적입니다 — 이것이 누군가 다른 사람의 요청을 열거하는 것을 방지합니다.
- 요청당 정확히 하나의 연락처 채널: 이메일, 전화 또는 Telegram. 이름, 문서 또는 결제 세부 정보가 수집되지 않습니다.
- 각 예약 요청에는 UUID idempotency 키가 필요합니다. 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.