HotelRunner MCP by usefulapi

Read HotelRunner reservations, rooms, channels; update availability and prices; confirm or cancel.

사용해야 할까요

품질 및 안전성

A
설명 품질
100%
스키마 완전성
73%
이름 품질
70%
오염 위험
100%
권한 일치
100%
프로토콜 준수
100%

발견 사항 (4)

  • LOWTool 'hotelrunner_list_connected_channels' name length outside 3-30 rangehotelrunner_list_connected_channels에서
  • LOWTool 'hotelrunner_get_transaction_details' name length outside 3-30 rangehotelrunner_get_transaction_details에서
  • LOWTool 'hotelrunner_update_room_calendar' name length outside 3-30 rangehotelrunner_update_room_calendar에서
  • LOWTool 'hotelrunner_update_reservation_state' name length outside 3-30 rangehotelrunner_update_reservation_state에서

도구 정의와 프로토콜 준수에 대한 자동 분석을 기반으로 합니다.

컨텍스트 비용

~2,369토큰 (도구 정의)
~1.6 KB일반적인 응답 크기
중간 정도의 주의 영향 (128k 컨텍스트의 1.85%)

이는 서버의 도구가 모델의 컨텍스트에 로드될 때마다 소비되는 대략적인 토큰 수입니다. 수치가 높을수록 다른 작업에 사용할 수 있는 주의가 줄어듭니다.

설치

원클릭 설치

`claude_desktop_config.json` 파일에 다음을 추가하세요:

{
  "mcpServers": {
    "hotelrunner": {
      "url": "https://hotelrunner.usefulapi.io/mcp"
    }
  }
}

원격 엔드포인트

https://hotelrunner.usefulapi.io/mcpstreamable-http

할 수 있는 일

도구 목록

도구 (8)

🟢 읽기 전용🟡 쓰기🔴 삭제⚪ 알 수 없음
🟢hotelrunner_list_rooms

List the property's room types and rates with their inv_code and rate_code, capacity, pricing type, sales currency, connected channel codes and whether availability, restrictions and prices can be updated through the API. Use the inv_code with hotelrunner_update_room_calendar. Counts as one of the property's 250 requests per day (5 per minute). GET /api/v2/apps/rooms.

입력 스키마

{
  "type": "object",
  "properties": {},
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
🟢hotelrunner_list_reservations(from_date, from_last_update_date, booked, modified, page, ...)

List reservations of the property (new, modified, canceled), newest data first as HotelRunner returns them, 1-50 per page. By default ALL reservations created in the window are returned (this tool sets undelivered=false, so reading does not depend on a PMS having fetched them). from_date is the creation date (HotelRunner keeps at most 30 days back; default 10 days); from_last_update_date finds reservations changed since a date. detail 'summary' (default) gives guest, dates, rooms, totals, payment state and contact; 'full' returns the whole vendor record including billing address, national id, daily prices and extras. Reply: items, count, page, pages, next_page. Counts as one of the property's 250 requests per day (5 per minute). GET /api/v2/apps/reservations.

입력 스키마

{
  "type": "object",
  "properties": {
    "from_date": {
      "description": "Only reservations created on/after this date, yyyy-mm-dd (max 30 days back; default 10 days back).",
      "type": "string",
      "pattern": "^(\\d{4})-(\\d{2})-(\\d{2})$"
    },
    "from_last_update_date": {
      "description": "Only reservations updated on/after this date, yyyy-mm-dd.",
      "type": "string",
      "pattern": "^(\\d{4})-(\\d{2})-(\\d{2})$"
    },
    "booked": {
      "description": "true = only new (not modified) bookings.",
      "type": "boolean"
    },
    "modified": {
      "description": "true = only modified reservations.",
      "type": "boolean"
    },
    "page": {
      "description": "Page number, from 1 (default 1). Pass the previous reply's next_page.",
      "type": "integer",
      "exclusiveMinimum": 0,
      "maximum": 10000
    },
    "per_page": {
      "description": "Reservations per page, 1-50 (default 10).",
      "type": "integer",
      "exclusiveMinimum": 0,
      "maximum": 50
    },
    "detail": {
      "description": "'summary' (default) or 'full' vendor records (large).",
      "type": "string",
      "enum": [
        "summary",
        "full"
      ]
    }
  },
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
🟢hotelrunner_get_reservation(reservation_number, from_date)

One reservation by its HotelRunner code (hr_number, e.g. R377873409) or the sales channel's own reservation code, with the full vendor record (rooms, daily prices, extras, payments, guest and billing details, next_states). If the reservation is older than HotelRunner's lookup window, pass from_date. Counts as one of the property's 250 requests per day (5 per minute). GET /api/v2/apps/reservations?reservation_number=.

입력 스키마

{
  "type": "object",
  "properties": {
    "reservation_number": {
      "type": "string",
      "pattern": "^[A-Za-z0-9._:\\- ]{1,64}$",
      "description": "HotelRunner reservation code (hr_number, e.g. R377873409) or the sales channel's reservation code."
    },
    "from_date": {
      "description": "Creation-date window start, yyyy-mm-dd (HotelRunner keeps at most 30 days back).",
      "type": "string",
      "pattern": "^(\\d{4})-(\\d{2})-(\\d{2})$"
    }
  },
  "required": [
    "reservation_number"
  ],
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
🟢hotelrunner_list_channels

All sales channels HotelRunner supports (name and code, e.g. bookingcom, expedia, hrs, online). The code is what hotelrunner_update_room_calendar takes in channel_codes. Counts as one of the property's 250 requests per day (5 per minute). GET /api/v2/apps/infos/channels.

입력 스키마

{
  "type": "object",
  "properties": {},
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
🟢hotelrunner_list_connected_channels

The channels this property is connected to, each with counts of calendar update processes in progress, succeeded and failed. Counts as one of the property's 250 requests per day (5 per minute). GET /api/v2/apps/infos/connected_channels.

입력 스키마

{
  "type": "object",
  "properties": {},
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
🟢hotelrunner_get_transaction_details(transaction_id)

Per-channel status of a calendar update: pass the transaction_id returned by hotelrunner_update_room_calendar. Shows succeeded / failed / in-progress counts and each channel's state and error message. Counts as one of the property's 250 requests per day (5 per minute). GET /api/v2/apps/infos/transaction_details.

입력 스키마

{
  "type": "object",
  "properties": {
    "transaction_id": {
      "type": "string",
      "pattern": "^[A-Za-z0-9_-]{1,64}$",
      "description": "transaction_id from an update reply."
    }
  },
  "required": [
    "transaction_id"
  ],
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
🔴hotelrunner_update_room_calendar(inv_code, start_date, end_date, availability, price, ...)

WRITE: change availability, price, minimum/maximum stay, stop-sale, closed-to-arrival (cta) or closed-to-departure (ctd) for ONE room type (inv_code) over a date range of at most 90 days, optionally only on some weekdays and only on some channels. Only the fields you pass are changed. This is LIVE inventory: HotelRunner pushes it to every connected channel (Booking.com, Expedia, your own booking engine, ...) and it changes what guests can book and pay. The price is the base-rate price in the property's sales currency; guest-based prices derive from it. Only rooms whose availability_update / restrictions_update / price_update flag is true (hotelrunner_list_rooms) accept that kind of change. HotelRunner answers asynchronously: the reply has a transaction_id; check per-channel results with hotelrunner_get_transaction_details. Send one change per call, not a full refresh. Counts as one of the property's 250 requests per day (5 per minute). PUT /api/v2/apps/rooms/daily.

입력 스키마

{
  "type": "object",
  "properties": {
    "inv_code": {
      "type": "string",
      "pattern": "^[A-Za-z0-9:_.-]{1,64}$",
      "description": "An inventory code from hotelrunner_list_rooms, e.g. HR:1903."
    },
    "start_date": {
      "type": "string",
      "pattern": "^(\\d{4})-(\\d{2})-(\\d{2})$",
      "description": "First date to change, yyyy-mm-dd."
    },
    "end_date": {
      "type": "string",
      "pattern": "^(\\d{4})-(\\d{2})-(\\d{2})$",
      "description": "Last date to change (inclusive), yyyy-mm-dd."
    },
    "availability": {
      "description": "Rooms available to sell.",
      "type": "integer",
      "minimum": 0,
      "maximum": 100000
    },
    "price": {
      "description": "Base nightly price in the property's sales currency.",
      "type": "number",
      "exclusiveMinimum": 0,
      "maximum": 10000000
    },
    "min_stay": {
      "description": "Minimum nights.",
      "type": "integer",
      "minimum": 1,
      "maximum": 365
    },
    "max_stay": {
      "description": "Maximum nights.",
      "type": "integer",
      "minimum": 1,
      "maximum": 365
    },
    "stop_sale": {
      "description": "true = close the room for sale on these dates, false = reopen.",
      "type": "boolean"
    },
    "cta": {
      "description": "Closed to arrival.",
      "type": "boolean"
    },
    "ctd": {
      "description": "Closed to departure.",
      "type": "boolean"
    },
    "days": {
      "description": "Only these weekdays, 0 = Sunday ... 6 = Saturday (default: every day).",
      "maxItems": 7,
      "type": "array",
      "items": {
        "type": "integer",
        "minimum": 0,
        "maximum": 6
      }
    },
    "channel_codes": {
      "description": "Only these channels (codes from hotelrunner_list_connected_channels); default: all connected channels of the room.",
      "maxItems": 60,
      "type": "array",
      "items": {
        "type": "string",
        "pattern": "^[A-Za-z0-9_.-]{1,40}$"
      }
    }
  },
  "required": [
    "inv_code",
    "start_date",
    "end_date"
  ],
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
🔴hotelrunner_update_reservation_state(hr_number, event, cancel_reason, confirm)

WRITE: move ONE reservation to the next state: event 'confirm' (hotelier accepts it) or 'cancel' (cancels it; cancel_reason is required: customer, no_room, no_show or invalid_price). Cancel is not reversible through this API and releases the room; HotelRunner may notify the guest or the sales channel (Booking.com, Expedia, ...), so only cancel when the user clearly asked for it, and pass confirm=true for a cancel. Only possible when the reservation's requires_response is true and the event is in its next_states (see hotelrunner_get_reservation); otherwise HotelRunner answers state_change_is_not_available. Counts as one of the property's 250 requests per day (5 per minute). PUT /api/v2/apps/reservations/fire.

입력 스키마

{
  "type": "object",
  "properties": {
    "hr_number": {
      "type": "string",
      "pattern": "^[A-Za-z0-9._:-]{1,64}$",
      "description": "HotelRunner reservation code (hr_number)."
    },
    "event": {
      "type": "string",
      "enum": [
        "confirm",
        "cancel"
      ],
      "description": "'confirm' or 'cancel'."
    },
    "cancel_reason": {
      "description": "Required for cancel: customer, no_room, no_show or invalid_price.",
      "type": "string",
      "enum": [
        "customer",
        "no_room",
        "no_show",
        "invalid_price"
      ]
    },
    "confirm": {
      "description": "Required true for event 'cancel': the user explicitly approved cancelling this reservation (not reversible).",
      "type": "boolean"
    }
  },
  "required": [
    "hr_number",
    "event"
  ],
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}

커뮤니티

이 서버 평가하기

증거

최근 관측

검증됨버전이 기록되지 않음도구 8개