mcp
Book hotels over MCP. Pay over x402. 3M+ properties in 200+ countries, USDC on Base.
사용해야 할까요
품질 및 안전성
도구 정의와 프로토콜 준수에 대한 자동 분석을 기반으로 합니다.
컨텍스트 비용
이는 서버의 도구가 모델의 컨텍스트에 로드될 때마다 소비되는 대략적인 토큰 수입니다. 수치가 높을수록 다른 작업에 사용할 수 있는 주의가 줄어듭니다.
설치
원클릭 설치
`claude_desktop_config.json` 파일에 다음을 추가하세요:
{
"mcpServers": {
"mcp": {
"url": "https://trip1.com/api/mcp"
}
}
}원격 엔드포인트
https://trip1.com/api/mcpstreamable-http할 수 있는 일
도구 목록
도구 (5)
🟢search_hotels(destination, check_in, check_out, sort_by, sort_order, ...)
Search for available hotels by destination and dates. Returns a list of matching hotels with pricing, images, and booking links. Occupancy is fixed at 2 adults in one room and cannot be set. If the user asked for a different party size, tell them these prices are for 2 adults rather than presenting them as a quote for their group. Always include the hotel name, booking link, and image for each hotel in your response.
입력 스키마
{
"type": "object",
"properties": {
"destination": {
"type": "string",
"description": "Destination name (e.g., 'London', 'Paris, France', 'Vilnius')"
},
"check_in": {
"type": "string",
"description": "Check-in date in YYYY-MM-DD format. Must be today or later in the destination's own timezone. Do not assume the current year — the server instructions state today's date; a past date is rejected, and the rejection tells you the destination's today."
},
"check_out": {
"type": "string",
"description": "Check-out date in YYYY-MM-DD format. Must be after check_in."
},
"sort_by": {
"type": "string",
"description": "Sort results by: price, rating, distance, or relevance (default)",
"enum": [
"relevance",
"price",
"rating",
"distance"
]
},
"sort_order": {
"type": "string",
"description": "Sort order: asc (default) or desc",
"enum": [
"asc",
"desc"
]
},
"context": {
"type": "string",
"maxLength": 200,
"description": "Why are you calling this tool? Describe the user's underlying goal in one short sentence — not the tool name. Never include names, emails, phones, or prices. Always pass this. Used for analytics only; never shown to the user."
}
},
"required": [
"destination",
"check_in",
"check_out"
],
"$schema": "https://json-schema.org/draft/2020-12/schema",
"additionalProperties": false
}출력 스키마
{
"type": "object",
"properties": {
"total_results": {
"type": "integer"
},
"hotels": {
"type": "array",
"items": {
"type": "object",
"properties": {
"id": {
"type": "string",
"description": "Hotel id to pass to get_hotel_details"
},
"name": {
"type": "string"
},
"star_rating": {
"type": "integer"
},
"image_url": {
"type": [
"string",
"null"
]
},
"price": {
"type": "number",
"description": "Cheapest total stay price for 2 adults"
},
"currency": {
"type": "string"
},
"booking_link": {
"type": "string"
}
},
"required": [
"id",
"name",
"star_rating",
"image_url",
"price",
"currency",
"booking_link"
]
}
}
},
"required": [
"total_results",
"hotels"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢get_hotel_details(id, context)
Get rooms and rates for a hotel. Pass the hotel id from search_hotels results. Returns rate IDs needed for purchase_hotel. Each rate states its refundability and, when refundable, the cancellation deadline — quote these rather than inferring refund terms. When prices_changed is true, the price search_hotels quoted for this hotel is no longer the one on offer — tell the user prices changed rather than presenting these rates as the same quote.
입력 스키마
{
"type": "object",
"properties": {
"id": {
"type": "string",
"description": "The hotel id from search_hotels results"
},
"context": {
"type": "string",
"maxLength": 200,
"description": "Why are you calling this tool? Describe the user's underlying goal in one short sentence — not the tool name. Never include names, emails, phones, or prices. Always pass this. Used for analytics only; never shown to the user."
}
},
"required": [
"id"
],
"$schema": "https://json-schema.org/draft/2020-12/schema",
"additionalProperties": false
}출력 스키마
{
"type": "object",
"properties": {
"name": {
"type": "string"
},
"star_rating": {
"type": "integer"
},
"address": {
"type": [
"string",
"null"
]
},
"check_in": {
"type": "string",
"description": "Earliest check-in time, HH:MM"
},
"check_out": {
"type": "string",
"description": "Latest check-out time, HH:MM"
},
"rooms": {
"type": "array",
"items": {
"type": "object",
"properties": {
"name": {
"type": [
"string",
"null"
]
},
"rates": {
"type": "array",
"items": {
"type": "object",
"properties": {
"id": {
"type": "string",
"description": "Rate id to pass to purchase_hotel"
},
"board_type": {
"type": "string"
},
"price": {
"type": "number"
},
"currency": {
"type": "string"
},
"refundability": {
"type": "string",
"enum": [
"fully_refundable",
"partially_refundable",
"non_refundable"
]
},
"cancellation_deadline": {
"type": [
"string",
"null"
],
"description": "Free cancellation until this time for fully_refundable rates, partial refund until it for partially_refundable; null for non_refundable"
}
},
"required": [
"id",
"board_type",
"price",
"currency",
"refundability",
"cancellation_deadline"
]
}
}
},
"required": [
"name",
"rates"
]
}
},
"prices_changed": {
"type": [
"boolean",
"null"
],
"description": "true when these rates come from a different provider than the search_hotels quote; null when the search recorded no winner"
}
},
"required": [
"name",
"star_rating",
"address",
"check_in",
"check_out",
"rooms",
"prices_changed"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢ask_about_hotel(id, question, context)
Answer a yes-or-no question about a hotel from what its guests said, such as "is it quiet at night?" or "is the breakfast good?". Ask one thing per call, and turn an open question into a yes-or-no one ("what is the breakfast like?" becomes "is the breakfast good?"). Pass the hotel id from search_hotels results. Returns how many guest review summaries say yes, no or mixed, with a few of them. Report it as what guests found, with the counts. When enough_evidence is false, say few guests mentioned it rather than drawing a conclusion. It knows only what guests reported, not the hotel's facilities or policies.
입력 스키마
{
"type": "object",
"properties": {
"id": {
"type": "string",
"description": "The hotel id from search_hotels results"
},
"question": {
"type": "string",
"maxLength": 200,
"pattern": "\\S",
"description": "One yes-or-no question about the hotel, such as \"is it quiet at night?\""
},
"context": {
"type": "string",
"maxLength": 200,
"description": "Why are you calling this tool? Describe the user's underlying goal in one short sentence — not the tool name. Never include names, emails, phones, or prices. Always pass this. Used for analytics only; never shown to the user."
}
},
"required": [
"id",
"question"
],
"$schema": "https://json-schema.org/draft/2020-12/schema",
"additionalProperties": false
}출력 스키마
{
"type": "object",
"properties": {
"name": {
"type": "string"
},
"question": {
"type": "string"
},
"summaries_read": {
"type": "integer",
"description": "Guest review summaries read to answer"
},
"yes": {
"type": "object",
"properties": {
"count": {
"type": "integer"
},
"sentiments": {
"type": "array",
"items": {
"type": "string"
},
"maxItems": 5
}
},
"required": [
"count",
"sentiments"
]
},
"no": {
"type": "object",
"properties": {
"count": {
"type": "integer"
},
"sentiments": {
"type": "array",
"items": {
"type": "string"
},
"maxItems": 5
}
},
"required": [
"count",
"sentiments"
]
},
"mixed": {
"type": "object",
"properties": {
"count": {
"type": "integer"
},
"sentiments": {
"type": "array",
"items": {
"type": "string"
},
"maxItems": 5
}
},
"required": [
"count",
"sentiments"
]
},
"enough_evidence": {
"type": "boolean",
"description": "false when too few guests mentioned it to draw a conclusion"
}
},
"required": [
"name",
"question",
"summaries_read",
"yes",
"no",
"mixed",
"enough_evidence"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🔴purchase_hotel(rate_id, first_name, last_name, email, phone, ...)
Book a hotel room by providing guest details and a rate ID from get_hotel_details. Creates a guest profile, adds the room to a cart, and initiates checkout. Returns a payment_url and an x402 payment challenge by default (USDC on Base). Set payment_service to 'coingate' to return a browser-based crypto payment URL instead. The booking is confirmed once payment settles; poll get_order_details to check status.
입력 스키마
{
"type": "object",
"properties": {
"rate_id": {
"type": "string",
"description": "Signed rate ID from get_hotel_details response"
},
"first_name": {
"type": "string",
"description": "Guest's first name"
},
"last_name": {
"type": "string",
"description": "Guest's last name"
},
"email": {
"type": "string",
"description": "Guest's email address"
},
"phone": {
"type": "string",
"description": "Guest's phone number (e.g., +44123456789)"
},
"nationality": {
"type": "string",
"description": "Guest's nationality as ISO 3166-1 alpha-2 code (default: GB)"
},
"title": {
"type": "string",
"description": "Guest's title: MR, MRS, MS, or MISS (default: MR)",
"enum": [
"MR",
"MRS",
"MS",
"MISS"
]
},
"price_currency": {
"type": "string",
"description": "Payment currency (default: USD for x402, EUR for coingate). Supported: EUR, USD, GBP, PLN, CZK, HUF, SEK, NOK, DKK"
},
"payment_service": {
"type": "string",
"description": "Payment method: x402 (USDC on Base, default) or coingate (browser-based crypto)",
"enum": [
"x402",
"coingate"
]
},
"context": {
"type": "string",
"maxLength": 200,
"description": "Why are you calling this tool? Describe the user's underlying goal in one short sentence — not the tool name. Never include names, emails, phones, or prices. Always pass this. Used for analytics only; never shown to the user."
}
},
"required": [
"rate_id",
"first_name",
"last_name",
"email",
"phone"
],
"$schema": "https://json-schema.org/draft/2020-12/schema",
"additionalProperties": false
}출력 스키마
{
"type": "object",
"properties": {
"cart_id": {
"type": "string",
"description": "Pass to get_order_details to poll the booking"
},
"booking_reference": {
"type": [
"string",
"null"
]
},
"payment_url": {
"type": [
"string",
"null"
]
},
"message": {
"type": "string",
"description": "How to complete payment for the chosen payment_service"
}
},
"required": [
"cart_id",
"booking_reference",
"payment_url",
"message"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢get_order_details(cart_id, context)
Get the current state of an order. Returns payment status, booking state, and item details. Poll until ready is true to confirm the booking is complete.
입력 스키마
{
"type": "object",
"properties": {
"cart_id": {
"type": "string",
"description": "The cart_id from purchase_hotel response"
},
"context": {
"type": "string",
"maxLength": 200,
"description": "Why are you calling this tool? Describe the user's underlying goal in one short sentence — not the tool name. Never include names, emails, phones, or prices. Always pass this. Used for analytics only; never shown to the user."
}
},
"required": [
"cart_id"
],
"$schema": "https://json-schema.org/draft/2020-12/schema",
"additionalProperties": false
}출력 스키마
{
"type": "object",
"properties": {
"ready": {
"type": "boolean",
"description": "true once payment settled and the booking is purchased — stop polling"
},
"cart_url": {
"type": "string"
},
"payment": {
"type": [
"object",
"null"
],
"properties": {
"state": {
"type": "string"
},
"service": {
"type": "string"
},
"amount": {
"type": "number"
},
"currency": {
"type": "string"
},
"transaction_hash": {
"type": "string"
}
},
"required": [
"state",
"service",
"amount"
]
},
"booking": {
"type": [
"object",
"null"
],
"properties": {
"state": {
"type": "string"
},
"booking_reference": {
"type": [
"string",
"null"
]
},
"contact": {
"type": [
"object",
"null"
],
"properties": {
"first_name": {
"type": "string"
},
"last_name": {
"type": "string"
},
"email": {
"type": "string"
}
},
"required": [
"first_name",
"last_name",
"email"
]
},
"items": {
"type": "array",
"items": {
"type": "object",
"properties": {
"state": {
"type": "string"
},
"hotel_name": {
"type": "string"
},
"room_name": {
"type": "string"
},
"price": {
"type": "number"
},
"currency": {
"type": "string"
},
"provider_reference": {
"type": "string"
}
},
"required": [
"state",
"price"
]
}
}
},
"required": [
"state",
"booking_reference",
"contact",
"items"
]
}
},
"required": [
"ready",
"cart_url",
"payment",
"booking"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}커뮤니티
증거