Rate Ranger

Watch a hotel's price after your user booked it, and email them when it drops enough to rebook.

Should I use this

Quality & Safety

A
Description quality
100%
Schema completeness
100%
Naming quality
100%
Poisoning risk
100%
Permission match
100%
Protocol compliance
100%

Based on automated analysis of tool definitions and protocol compliance.

Context Cost

~670Tokens (tool definitions)
~2.8 KBTypical response size
Moderate attention impact (0.52% of 128k context)

This is the approximate number of tokens consumed each time the server's tools are loaded into a model's context. Higher counts reduce the attention available for other tasks.

Install

One-Click Install

Add this to your `claude_desktop_config.json` file:

{
  "mcpServers": {
    "hotel-price-monitor": {
      "url": "https://www.rateranger.io/api/mcp"
    }
  }
}

Remote endpoints

https://www.rateranger.io/api/mcpstreamable-http

What it can do

Tool inventory

Tools (2)

🟢 Read-only🟡 Write🔴 Delete⚪ Unknown
🟡submit_hotel_booking(email, bookings, agent)

Enrol a hotel booking the traveller has ALREADY made into free price monitoring. Rate Ranger watches what the hotel charges for the same dates and emails them if it drops far enough to be worth rebooking. IMPORTANT: this monitors nothing on its own. The traveller is emailed one confirmation link, and no price is checked until they click it. Tell your user to expect that email. Do not tell them the booking is being tracked until check_hotel_booking says it is. Unconfirmed bookings are deleted after 7 days. Use this only for a booking that already exists. It does not search for or make reservations.

Input Schema

{
  "type": "object",
  "properties": {
    "email": {
      "type": "string",
      "description": "The traveller's own email address. One per call. The confirmation and any later price alerts go here, so it must be an address they actually read."
    },
    "bookings": {
      "type": "array",
      "minItems": 1,
      "maxItems": 10,
      "items": {
        "type": "object",
        "required": [
          "hotel_name",
          "city",
          "country",
          "check_in_date",
          "check_out_date",
          "total_price"
        ],
        "properties": {
          "hotel_name": {
            "type": "string",
            "description": "The property as it is normally listed. Closer to the official name is better; it is matched against live hotel data."
          },
          "city": {
            "type": "string",
            "description": "City, not district or area."
          },
          "country": {
            "type": "string",
            "description": "ISO 3166-1 alpha-2, for example JP or ID. Required, and it matters more than it looks: it decides which rate source can find the hotel at all."
          },
          "check_in_date": {
            "type": "string",
            "description": "YYYY-MM-DD, in the future."
          },
          "check_out_date": {
            "type": "string",
            "description": "YYYY-MM-DD, after check-in."
          },
          "total_price": {
            "type": "number",
            "description": "The whole cost of the stay, not a nightly rate. Decimals are fine here; only the web form restricts them."
          },
          "currency": {
            "type": "string",
            "description": "ISO 4217. Defaults to USD."
          },
          "room_type": {
            "type": "string",
            "description": "Free text. Optional."
          },
          "num_guests": {
            "type": "integer",
            "description": "Defaults to 2."
          },
          "num_rooms": {
            "type": "integer",
            "description": "Defaults to 1."
          },
          "booking_platform": {
            "type": "string",
            "description": "Where they booked: booking.com, expedia, hotels.com, agoda, trip.com, priceline, direct, or other."
          }
        }
      },
      "description": "One to ten bookings for that traveller."
    },
    "agent": {
      "type": "string",
      "description": "Optional name for you, such as my-assistant/1.0. Logged for debugging only."
    }
  },
  "required": [
    "email",
    "bookings"
  ]
}
🟢check_hotel_booking(token)

Check one booking you submitted, using the read token returned at submission. Use it to find out whether the traveller has confirmed yet: `confirmed` is false until they click the emailed link, and while it is false nothing is being monitored. Check here before telling your user their booking is being tracked.

Input Schema

{
  "type": "object",
  "properties": {
    "token": {
      "type": "string",
      "description": "The read_token from submit_hotel_booking."
    }
  },
  "required": [
    "token"
  ]
}

Community

Rate this Server

Evidence

Recent observations

verifiedversion not recorded2 tools
verifiedversion not recorded2 tools