{"name":"io.rateranger/hotel-price-monitor","slug":"rateranger-hotel-price-monitor","title":"Rate Ranger","description":"Watch a hotel's price after your user booked it, and email them when it drops enough to rebook.","url":"https://mcp.market/server/rateranger-hotel-price-monitor","rating":null,"grade":"B","score":80,"certified":false,"status":"active","category":"email","tags":["email","maps"],"presence":{"score":23,"stars":0,"forks":0,"downloads_week":null,"last_push_at":"2026-09-03T06:32:02.000Z","license":null},"uptime":{"percent":100,"checks":8,"ok":8,"last_checked_at":"2026-09-21T12:00:41.574Z","last_ok_at":"2026-09-21T12:00:41.574Z","latency_ms":329},"claimed":false,"transport":"remote","callable_via_gateway":true,"default_price_micros":0,"repository":"https://github.com/halymich/rate-ranger-api","website":"https://www.rateranger.io/for-agents/","version":"1.0.0","remotes":[{"type":"streamable-http","url":"https://www.rateranger.io/api/mcp"}],"packages":[],"tools":[{"name":"check_hotel_booking","description":"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.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"token":{"type":"string","description":"The read_token from submit_hotel_booking."}},"required":["token"]}},{"name":"submit_hotel_booking","description":"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.\n\nIMPORTANT: 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.\n\nUse this only for a booking that already exists. It does not search for or make reservations.","write_action":true,"price_micros":0,"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"]}}],"scan":{"score":80,"grade":"B","scanned_at":"2026-09-20T16:19:00.108Z","report":{"scannerVersion":"0.1.9","scannedAt":"2026-09-20T16:19:00.209Z","components":{"code":{"score":-1,"max":25,"notes":["remote-only server, no package to scan"]},"reliability":{"score":20,"max":20,"notes":["remote reachable in 696ms"]},"poisoning":{"score":15,"max":15,"notes":["2 tool descriptions checked"]},"auth":{"score":3,"max":15,"notes":["open endpoint exposes 1 write-action tools with no auth"]},"maintenance":{"score":15,"max":15,"notes":["last push 17 days ago"]},"identity":{"score":7,"max":10,"notes":["namespace and repository owner differ","GitHub account older than a year","website matches verified namespace"]}},"findings":[{"id":"auth.open-write","severity":"high","component":"auth","title":"Write-action tools reachable without authentication"}],"inputs":{"probes":[{"url":"https://www.rateranger.io/api/mcp","reachable":true,"authRequired":false,"latencyMs":696,"serverInfo":{"name":"rate-ranger","version":"1.0.0"}}],"packages":[],"repo":{"found":true,"owner":"halymich","repo":"rate-ranger-api","archived":false,"pushedAt":"2026-09-03T06:32:02Z","stars":0,"forks":0,"openIssues":0,"ownerType":"User","ownerAvatarUrl":"https://avatars.githubusercontent.com/u/156526510?v=4","ownerCreatedAt":"2024-01-13T14:37:45Z"},"icon":{"url":"https://www.rateranger.io/apple-touch-icon.png","source":"site","width":180,"height":180},"presence":{"stars":0,"forks":0,"downloadsWeek":null,"license":null,"lastPushAt":"2026-09-03T06:32:02.000Z","score":23}}}},"grade_history":[],"reviews":[]}