HotelRunner MCP by usefulapi

io.usefulapiPublished by usefulapi.ioOfficial publisherv1.15.4Updated Nov 7, 2026

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

The publisher's own server: Ably MCP by usefulapi

VerifiedStreamable HTTPWeb executableProductivity & WorkflowBusiness & Commerce

Overview

AI-generated overview

Connects an assistant to a HotelRunner property: read reservations, rooms and sales channels, and update availability, prices and reservation states.

What you can do
  • List room types and rates with their inv_code and rate_code, capacity, currency and channel codes
  • List and fetch reservations with rooms, daily prices, extras, payments and guest details
  • List all HotelRunner sales channels and the channels this property is connected to, with update counts
  • Check per-channel status of a calendar update by transaction_id
  • Update availability, price, min/max stay, stop-sale, CTA/CTD for one room type over up to 90 days, optionally by weekday and channel
  • Confirm or cancel a single reservation with a required cancel reason
When to use it
Useful for hoteliers or property managers who want to ask an assistant about recent bookings and channel performance, look up a specific reservation, or push rate and availability changes to connected sales channels without opening the HotelRunner panel.
Requirements
Remote MCP endpoint reached over streamable HTTP; no local runtime. Sign-in is via OAuth, and the login page asks for the HR_ID and TOKEN of a HotelRunner app created in the property panel. No API key or Authorization header goes in the client config. A free plan allows 50 tool calls per month; paid plans are available.
Before you install
Two tools write live data: calendar updates change availability and prices on connected channels, and reservation cancel is not reversible and releases the room, possibly notifying the guest or channel. Confirm before any write. The server asks for HotelRunner app credentials (HR_ID, TOKEN) at login. Paid plans are billed through a Stripe checkout link returned by a tool, and cancellation gives no refund for the current period. Requests are limited to 250 per property per day (5 per minute).

Installation

In SourceWeft

  1. Open HotelRunner MCP by usefulapi in the dashboard and add it to a workspace.
  2. Enable the server for the chats that should use its tools.

Web executable via Streamable HTTP. Remote servers run from the web runtime once configured in a workspace.

Use with an agent

Paste this prompt into Claude Code, Codex, Cursor or another agent — or into SourceWeft chat. The agent reads this server's install guide, shows you its publisher, endpoint and sign-in, and adds it to your client once you agree. Keys never go into a command.

Read https://sourceweft.com/mcp/io.usefulapi%2Fhotelrunner/install.md and connect the MCP server it describes to my client. Before changing any config, show me its publisher, endpoint and sign-in method and wait for my OK. Never put an API key in a command or in a file I would commit; ask me where it should come from.

Read the install guide the agent follows

Other MCP clients

Add this to your client's mcpServers config.

{
  "mcpServers": {
    "hotelrunner-by-usefulapi": {
      "type": "http",
      "url": "https://hotelrunner.usefulapi.io/mcp"
    }
  }
}

README

HotelRunner MCP by usefulapi

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

Live endpoint: https://hotelrunner.usefulapi.io/mcp · Homepage: https://usefulapi.io/hotelrunner

Connect

  • Claude (claude.ai, Desktop): open Customize → Connectors, click + Add → Add custom connector, and paste https://hotelrunner.usefulapi.io/mcp.
  • Claude Code: claude mcp add --transport http hotelrunner https://hotelrunner.usefulapi.io/mcp, then run /mcp to log in.
  • VS Code: Add to VS Code.
  • Cursor and other clients: add the URL as a remote MCP server:
json
{  "mcpServers": {    "hotelrunner": {      "url": "https://hotelrunner.usefulapi.io/mcp"    }  }}

Add only the URL. Do not add an Authorization header or an API key to the client config: the server signs you in with OAuth, and the login page asks for your HotelRunner credentials.

Step-by-step setup, where to find your credentials, and FAQ: https://usefulapi.io/hotelrunner/

On first connect you'll enter the HR_ID and TOKEN of a HotelRunner app (in the HotelRunner property panel open My Property and create an app key; the page shows both).

Tools

ToolTypeWhat it does
hotelrunner_list_roomsreadList rooms and rates
hotelrunner_list_reservationsreadList reservations
hotelrunner_get_reservationreadGet reservation
hotelrunner_list_channelsreadList sales channels
hotelrunner_list_connected_channelsreadList connected channels
hotelrunner_get_transaction_detailsreadGet calendar update status
hotelrunner_update_room_calendarwriteUpdate room availability, prices and restrictions
hotelrunner_update_reservation_statewriteConfirm or cancel a reservation
hotelrunner_usage_statusmetaUsage status (free-tier meter)
hotelrunner_request_featuremetaRequest a missing feature
hotelrunner_upgrademetaUpgrade to Pro or Pro+
hotelrunner_cancel_subscriptionmetaCancel the Pro subscription

read tools are read-only; write tools mutate data (clients should confirm them); meta tools report usage, manage your subscription or send a feature request.

Pricing

PlanPriceLimit
Free$050 tool calls / month
Pro (per user)$9/mo or $90/yr (2 months free)Unlimited*

*Pro has a fair use limit of 10,000 tool calls a month on this server. For more, write to [email protected].

Pro covers this server only. Subscribe with hotelrunner_upgrade (it returns a Stripe Checkout link). Cancel any time with hotelrunner_cancel_subscription: Pro continues to the end of the paid period, with no refund for the current period, and running hotelrunner_upgrade before then undoes the cancel. Or write to [email protected].

License

MIT © usefulapi. Not affiliated with or endorsed by HotelRunner.

Source: servers/hotelrunner/README.md at commit 4046075

Tools

8

hotelrunner_list_rooms

List rooms and rates

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.

Takes no parameters.

hotelrunner_list_reservations

List reservations

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.

Parameterspagebookeddetailmodifiedper_pagefrom_datefrom_last_update_date

hotelrunner_get_reservation

Get reservation

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=.

Parametersfrom_datereservation_numberrequired

hotelrunner_list_channels

List sales 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.

Takes no parameters.

hotelrunner_list_connected_channels

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.

Takes no parameters.

hotelrunner_get_transaction_details

Get calendar update status

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.

Parameterstransaction_idrequired

hotelrunner_update_room_calendar

Update room availability, prices and restrictions

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.

Parametersctactddayspriceend_daterequiredinv_coderequiredmax_staymin_staystop_salestart_daterequiredavailabilitychannel_codes

hotelrunner_update_reservation_state

Confirm or cancel a reservation

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.

Parameterseventrequiredconfirmhr_numberrequiredcancel_reason

Version history

14
  1. v1.15.4LatestNov 7, 2026
  2. v1.14.3Nov 5, 2026
  3. v1.14.2Nov 5, 2026
  4. v1.14.1Nov 4, 2026
  5. v1.14.0Nov 3, 2026
  6. v1.13.1Nov 3, 2026
  7. v1.12.0Nov 1, 2026
  8. v1.10.0Oct 31, 2026
  9. v1.9.0Oct 31, 2026
  10. v1.8.2Oct 30, 2026
  11. v1.8.0Oct 30, 2026
  12. v1.3.0Oct 26, 2026
  13. v1.0.3Oct 25, 2026
  14. v1.0.0Oct 25, 2026

Score

100% of the applicable checks met

How complete this listing is, computed from the registry entry, the endpoint and public sources. Not a rating of the server and not a statement that it is safe or working today: reachability is a dated check, and no installs or reviews go into the score.

  • Reached in the last 30 daysRequired25 pts
  • Auth declaredRequired10 pts
  • Tools listedRequired15 pts
  • DescriptionRequired15 pts
  • Logo10 pts
  • Documentation15 pts
  • License10 pts

Other Usefulapi integrations