Threshold

Search and book verified independent vacation rentals directly from hosts, with no guest fees.

Should I use this

Quality & Safety

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

Based on automated analysis of tool definitions and protocol compliance.

Context Cost

~1,737Tokens (tool definitions)
~883 BTypical response size
Moderate attention impact (1.36% 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": {
    "stays": {
      "url": "https://threshold.rentals/api/mcp"
    }
  }
}

Remote endpoints

https://threshold.rentals/api/mcpstreamable-http

What it can do

Tool inventory

Tools (10)

🟢 Read-only🟡 Write🔴 Delete⚪ Unknown
🟢search_stays(place, near_lat, near_lng, radius_km, check_in, ...)

Find verified independent vacation rentals. Filters are strict: every listed amenity must be present. With dates, results include a cached availability signal and an indicative all-in total (no guest service fee). Maps to GET /v1/search.

Input Schema

{
  "type": "object",
  "properties": {
    "place": {
      "type": "string",
      "description": "Town and state/country, e.g. 'Asheville, NC'. Use near_lat/near_lng instead when you have coordinates."
    },
    "near_lat": {
      "type": "number"
    },
    "near_lng": {
      "type": "number"
    },
    "radius_km": {
      "type": "number",
      "default": 25
    },
    "check_in": {
      "type": "string",
      "format": "date"
    },
    "check_out": {
      "type": "string",
      "format": "date"
    },
    "adults": {
      "type": "integer",
      "minimum": 1,
      "default": 2
    },
    "children": {
      "type": "integer",
      "minimum": 0
    },
    "infants": {
      "type": "integer",
      "minimum": 0
    },
    "pets": {
      "type": "integer",
      "minimum": 0
    },
    "min_bedrooms": {
      "type": "integer"
    },
    "amenities": {
      "type": "array",
      "items": {
        "type": "string"
      },
      "description": "Amenity codes, e.g. hot_tub, wifi, ev_charger, dedicated_workspace, pool, fireplace_wood."
    },
    "max_total_usd": {
      "type": "number",
      "description": "Maximum all-in total in dollars. Requires dates."
    },
    "instant_only": {
      "type": "boolean"
    },
    "step_free_entrance": {
      "type": "boolean"
    },
    "min_wifi_mbps": {
      "type": "number"
    },
    "limit": {
      "type": "integer",
      "maximum": 20,
      "default": 8
    }
  }
}
🟢get_property(property_id)

Full record for one property: beds by room, amenities with details, access and stairs, rules, host FAQ, policies, and verification status. Maps to GET /v1/properties/{id}.

Input Schema

{
  "type": "object",
  "properties": {
    "property_id": {
      "type": "string"
    }
  },
  "required": [
    "property_id"
  ]
}
🟢check_availability(property_id, from, to)

Day-by-day availability and indicative nightly prices for up to 180 days. Cached; use get_quote to confirm. Useful when the guest's dates are flexible. Maps to GET /v1/properties/{id}/availability.

Input Schema

{
  "type": "object",
  "properties": {
    "property_id": {
      "type": "string"
    },
    "from": {
      "type": "string",
      "format": "date"
    },
    "to": {
      "type": "string",
      "format": "date",
      "description": "Exclusive"
    }
  },
  "required": [
    "property_id",
    "from",
    "to"
  ]
}
🟢get_quote(property_id, check_in, check_out, adults, children, ...)

Itemized, binding price for exact dates and party, after re-checking the host's live calendars. Valid 10 minutes. Returns house rules and an exact refund schedule to show the guest. Does not reserve the dates. Maps to POST /v1/properties/{id}/quotes.

Input Schema

{
  "type": "object",
  "properties": {
    "property_id": {
      "type": "string"
    },
    "check_in": {
      "type": "string",
      "format": "date"
    },
    "check_out": {
      "type": "string",
      "format": "date"
    },
    "adults": {
      "type": "integer",
      "minimum": 1
    },
    "children": {
      "type": "integer",
      "minimum": 0,
      "default": 0
    },
    "infants": {
      "type": "integer",
      "minimum": 0,
      "default": 0
    },
    "pets": {
      "type": "integer",
      "minimum": 0,
      "default": 0
    }
  },
  "required": [
    "property_id",
    "check_in",
    "check_out",
    "adults"
  ]
}
🟢get_booking(booking_id)

Status, amounts, refund schedule, guest ID verification link, and when arrival details will be sent. Maps to GET /v1/bookings/{id}.

Input Schema

{
  "type": "object",
  "properties": {
    "booking_id": {
      "type": "string"
    }
  },
  "required": [
    "booking_id"
  ]
}
🟡ask_host(property_id, question)

Send a question the property record and FAQ don't answer. The answer arrives later; tell the guest you'll follow up. Don't include the guest's contact details. Maps to POST /v1/properties/{id}/questions.

Input Schema

{
  "type": "object",
  "properties": {
    "property_id": {
      "type": "string"
    },
    "question": {
      "type": "string",
      "maxLength": 500
    }
  },
  "required": [
    "property_id",
    "question"
  ]
}
🟢get_messages(booking_id, guest_email)

The conversation between the guest and the host about a booking, oldest first (including the guest's note with the request and the host's note when accepting or declining). Use it to relay the host's replies. Pass guest_email (the email the booking was made with) unless you connect with an agent token.

Input Schema

{
  "type": "object",
  "properties": {
    "booking_id": {
      "type": "string"
    },
    "guest_email": {
      "type": "string",
      "format": "email"
    }
  },
  "required": [
    "booking_id"
  ]
}
🟡send_message(booking_id, body, guest_email)

Send a message to the host on the guest's behalf, e.g. a question about check-in or a late arrival. Only send what the guest asked you to say. The host is emailed and replies appear in get_messages. Open from the request until two weeks after check-out.

Input Schema

{
  "type": "object",
  "properties": {
    "booking_id": {
      "type": "string"
    },
    "body": {
      "type": "string",
      "maxLength": 2000
    },
    "guest_email": {
      "type": "string",
      "format": "email"
    }
  },
  "required": [
    "booking_id",
    "body"
  ]
}
🔴cancel_booking(booking_id, confirm, expected_refund_cents, guest_email)

Two-step. First call with confirm=false to see what the guest gets back if they cancel now (nothing changes). Tell the guest that refund and get their go-ahead, then call again with confirm=true and expected_refund_cents set to the refund amount from the first call. If the refund changed in between, the call fails with refund_changed instead of cancelling. Refunds go to the guest's card automatically. Pass guest_email (the email the booking was made with) unless you connect with an agent token.

Input Schema

{
  "type": "object",
  "properties": {
    "booking_id": {
      "type": "string"
    },
    "confirm": {
      "type": "boolean"
    },
    "expected_refund_cents": {
      "type": "integer",
      "description": "Required when confirm is true: refund.amount from the confirm=false call."
    },
    "guest_email": {
      "type": "string",
      "format": "email"
    }
  },
  "required": [
    "booking_id",
    "confirm"
  ]
}
🟡request_booking(quote_id, first_name, last_name, email, phone, ...)

Request a stay from a quote. Set house_rules_accepted only after the guest has seen and agreed to the quote's house_rules. If the quote's payment.collected_by is "threshold", the booking starts as awaiting_payment and the response includes payment_url: the guest must open payment_url and add a card within 60 minutes, after which the host gets the request (status pending_host_confirmation). Otherwise the request goes to the host immediately and the host arranges payment after accepting. Returns the booking and a status link to give the guest; poll get_booking for changes.

Input Schema

{
  "type": "object",
  "properties": {
    "quote_id": {
      "type": "string"
    },
    "first_name": {
      "type": "string"
    },
    "last_name": {
      "type": "string"
    },
    "email": {
      "type": "string",
      "format": "email"
    },
    "phone": {
      "type": "string"
    },
    "house_rules_accepted": {
      "type": "boolean"
    },
    "special_requests": {
      "type": "string",
      "maxLength": 500
    }
  },
  "required": [
    "quote_id",
    "first_name",
    "last_name",
    "email",
    "house_rules_accepted"
  ]
}

Community

Rate this Server

Evidence

Recent observations

verifiedversion not recorded10 tools