# Threshold (remote · threshold.rentals)

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

- Trust score: 75/100 (medium)
- Change this week: +3
- Registry status: active
- Liveness: live
- Owner verified: no
- Last scored: 2026-10-24

## Components

- remote · `threshold.rentals`: 75/100 (this document), [markdown](https://verifymcp.io/servers/rentals-threshold-stays/api-mcp.md), [page](https://verifymcp.io/servers/rentals-threshold-stays/api-mcp)

## Channel facts

- Endpoint: `https://threshold.rentals/api/mcp`
- Transports: `streamable-http`
- Auth: `none`
- Version: `0.1.0`

## Trust breakdown

How this component scores in each security and reliability category. Every signal is checked automatically against the live server, and we only credit what we can confirm. Scores are 0–100 per category. Scoring method: https://verifymcp.io/docs/scoring (what has changed: https://verifymcp.io/docs/scoring/changelog)

Scored 2026-10-24.

- **Endpoint Security**: 63/100
  - The endpoint's TLS certificate is valid, in date, and uses a strong key.
  - Authorisation check failed: no authorisation is required to call this server, and it exposes a tool marked destructive (cancel_booking).
  - HTTPS is enforced; there's no plaintext access path.
  - The HSTS (Strict-Transport-Security) header is present.
  - DNSSEC check failed: this domain isn't protected by DNSSEC.
- **Transport & Reachability**: 100/100
  - Verified streamable-http transport via a live MCP handshake.
- **Schema Quality & AI Usability**: 65/100
  - AI-judged instruction clarity (excellent).
  - Context-footprint check failed: tool/resource definitions use about 2281 tokens (~228/item across 10 items; 10 tools + 0 resources), over budget; trim descriptions and params.
  - Usage-examples check failed: none of the tools include examples.
- **Stability & Change Management**: 73/100
  - Stability observed for 22 of 30 days with no destabilising changes; credit accrues until the full window elapses.
- **Tool Coverage**: 100/100
  - 100% of tools have a non-trivial description (not blank, and not just the tool's name).
  - 100% of tool parameters carry a description.
  - Structured output schemas are declared (100% of tools); any adoption earns full credit.
- **Tool Safety**: 100/100
  - No prompt-injection markers were found in the server instructions, tool names or descriptions we captured.
  - All 1 tool(s) whose name or description implies an irreversible operation declare an MCP destructiveHint annotation.
  - An AI judge read all 11 captured unit(s) of tool text and found none that tries to manipulate the model reading it.
- **Capabilities**: 100/100
  - Implements a supported MCP spec version (2025-11-25); the latest is 2026-07-28.

## Install

### How do I install the Threshold MCP server?

Threshold is a hosted endpoint at https://threshold.rentals/api/mcp, so there is nothing to install locally. Ready-made configuration for Claude, Cursor, VS Code, Codex and 5 more is on this page, copied from each client's own documentation.

### Claude

```bash
claude mcp add --transport http rentals-threshold-stays 'https://threshold.rentals/api/mcp'
```

### Cursor

```json
{
  "mcpServers": {
    "rentals-threshold-stays": {
      "url": "https://threshold.rentals/api/mcp"
    }
  }
}
```

### VS Code

```json
{
  "servers": {
    "rentals-threshold-stays": {
      "type": "http",
      "url": "https://threshold.rentals/api/mcp"
    }
  }
}
```

### Codex

```toml
[mcp_servers.rentals-threshold-stays]
url = "https://threshold.rentals/api/mcp"
```

### opencode

```json
{
  "$schema": "https://opencode.ai/config.json",
  "mcp": {
    "rentals-threshold-stays": {
      "type": "remote",
      "url": "https://threshold.rentals/api/mcp",
      "enabled": true
    }
  }
}
```

### OpenClaw

```bash
openclaw mcp add rentals-threshold-stays --url 'https://threshold.rentals/api/mcp' --transport streamable-http
```

### Hermes

```yaml
mcp_servers:
  rentals-threshold-stays:
    url: "https://threshold.rentals/api/mcp"
```

### Netclaw

```json
{
  "McpServers": {
    "rentals-threshold-stays": {
      "Transport": "http",
      "Url": "https://threshold.rentals/api/mcp"
    }
  }
}
```

### Vellum

```bash
assistant mcp add rentals-threshold-stays -t streamable-http -u 'https://threshold.rentals/api/mcp'
```

### Other

```json
{
  "mcpServers": {
    "rentals-threshold-stays": {
      "type": "http",
      "url": "https://threshold.rentals/api/mcp"
    }
  }
}
```

The mcpServers block is a cross-client convention. Remote transports vary, so check your client's docs.

## Changelog

Every change recorded for this component, newest first. Days that predate change tracking, or that we cannot explain, say so: "we were watching and nothing happened" and "we were not watching" are different claims.

### 2026-10-24 (score 75, 0)

- [security] Tool “get_booking” rewrote its description, which is the text the model reads
- [cosmetic] “get_booking” added an optional parameter “guest_email”

### 2026-10-23 (score 75, +1)

No change was recorded against any check on this day. Stability & Change Management went from 67 to 70. That category is still filling its 30-day observation window: 20 days of observed history at the previous scan, 21 at this one. The score rises as the window fills, whether or not the server changes.

### 2026-10-21 (score 74, +1)

- [security] The server rewrote its instructions, which are the text every model session reads

### 2026-10-19 (score 73, +1)

No change was recorded against any check on this day. Stability & Change Management went from 53 to 57. That category is still filling its 30-day observation window: 16 days of observed history at the previous scan, 17 at this one. The score rises as the window fills, whether or not the server changes.

### 2026-10-17 (score 72, +1)

No change was recorded against any check on this day. Stability & Change Management went from 47 to 50. That category is still filling its 30-day observation window: 14 days of observed history at the previous scan, 15 at this one. The score rises as the window fills, whether or not the server changes.

### 2026-10-15 (score 71, +3)

- [functional regression] Schema quality: 174 → 227
- [functional improvement] Tool coverage: 11% → 100%
- [functional improvement] Tool “ask_host” now declares an output schema
- [functional improvement] Tool “cancel_booking” now declares an output schema
- [functional improvement] Tool “check_availability” now declares an output schema
- [functional improvement] Tool “get_booking” now declares an output schema
- [functional improvement] Tool “get_messages” now declares an output schema
- [functional improvement] Tool “get_property” now declares an output schema
- [functional improvement] Tool “get_quote” now declares an output schema
- [functional improvement] Tool “request_booking” now declares an output schema
- [functional improvement] Tool “search_stays” now declares an output schema
- [functional improvement] Tool “send_message” now declares an output schema
- [functional] First check of Tool coverage: 100
- [functional] Schema quality: good → excellent
- [cosmetic] “ask_host” reworded the description of “property_id”
- [cosmetic] “ask_host” reworded the description of “question”
- [cosmetic] “cancel_booking” reworded the description of “booking_id”
- [cosmetic] “cancel_booking” reworded the description of “confirm”
- [cosmetic] “cancel_booking” reworded the description of “guest_email”
- [cosmetic] “check_availability” reworded the description of “from”
- [cosmetic] “check_availability” reworded the description of “property_id”
- [cosmetic] “get_booking” reworded the description of “booking_id”
- [cosmetic] “get_messages” reworded the description of “booking_id”
- [cosmetic] “get_messages” reworded the description of “guest_email”
- [cosmetic] “get_property” reworded the description of “property_id”
- [cosmetic] “get_quote” reworded the description of “adults”
- [cosmetic] “get_quote” reworded the description of “check_in”
- [cosmetic] “get_quote” reworded the description of “check_out”
- [cosmetic] “get_quote” reworded the description of “children”
- [cosmetic] “get_quote” reworded the description of “infants”
- [cosmetic] “get_quote” reworded the description of “pets”
- [cosmetic] “get_quote” reworded the description of “property_id”
- [cosmetic] “request_booking” reworded the description of “email”
- [cosmetic] “request_booking” reworded the description of “first_name”
- [cosmetic] “request_booking” reworded the description of “house_rules_accepted”
- [cosmetic] “request_booking” reworded the description of “last_name”
- [cosmetic] “request_booking” reworded the description of “phone”
- [cosmetic] “request_booking” reworded the description of “quote_id”
- [cosmetic] “request_booking” reworded the description of “special_requests”
- [cosmetic] “search_stays” reworded the description of “adults”
- [cosmetic] “search_stays” reworded the description of “check_in”
- [cosmetic] “search_stays” reworded the description of “check_out”
- [cosmetic] “search_stays” reworded the description of “children”
- [cosmetic] “search_stays” reworded the description of “infants”
- [cosmetic] “search_stays” reworded the description of “instant_only”
- [cosmetic] “search_stays” reworded the description of “limit”
- [cosmetic] “search_stays” reworded the description of “min_bedrooms”
- [cosmetic] “search_stays” reworded the description of “min_wifi_mbps”
- [cosmetic] “search_stays” reworded the description of “near_lat”
- [cosmetic] “search_stays” reworded the description of “near_lng”
- [cosmetic] “search_stays” reworded the description of “pets”
- [cosmetic] “search_stays” reworded the description of “radius_km”
- [cosmetic] “search_stays” reworded the description of “step_free_entrance”
- [cosmetic] “send_message” reworded the description of “body”
- [cosmetic] “send_message” reworded the description of “booking_id”
- [cosmetic] “send_message” reworded the description of “guest_email”

### 2026-10-14 (score 68, +1)

No change was recorded against any check on this day. Stability & Change Management went from 37 to 40. That category is still filling its 30-day observation window: 11 days of observed history at the previous scan, 12 at this one. The score rises as the window fills, whether or not the server changes.

### 2026-10-12 (score 67, +1)

- [security] The server rewrote its instructions, which are the text every model session reads
- [security] Tool “get_property” rewrote its description, which is the text the model reads

## MCP tools (10)

### `search_stays` (~439 tokens)

Search vacation rentals

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 parameters:

- `adults` (integer): Number of adults. Default 2.
- `amenities` (array): Amenity codes, e.g. hot_tub, wifi, ev_charger, dedicated_workspace, pool, fireplace_wood.
- `check_in` (string): Arrival date, YYYY-MM-DD. With check_out, only places free for the whole stay are returned, with an indicative total.
- `check_out` (string): Departure date, YYYY-MM-DD (the morning the guests leave).
- `children` (integer): Number of children aged 2 to 12.
- `infants` (integer): Number of infants under 2.
- `instant_only` (boolean): True to return only places that confirm instantly, without waiting for the host.
- `limit` (integer): Most results to return, 1 to 50. Default 8.
- `max_total_usd` (number): Maximum all-in total in dollars. Requires dates.
- `min_bedrooms` (integer): Fewest bedrooms the place must have.
- `min_wifi_mbps` (number): Lowest Wi-Fi download speed needed, in megabits per second.
- `near_lat` (number): Latitude to search around, with near_lng. Use instead of place when you have coordinates.
- `near_lng` (number): Longitude to search around, with near_lat.
- `pets` (integer): Number of pets. Only places that allow that many are returned. Service animals don't count as pets.
- `place` (string): Town and state/country, e.g. 'Asheville, NC'. Use near_lat/near_lng instead when you have coordinates.
- `radius_km` (number): How far from near_lat/near_lng to search, in kilometres. Default 30.
- `step_free_entrance` (boolean): True to return only places with a step-free way in.

Output parameters:

- `next_cursor` (string|null)
- `results` (array)

### `get_property` (~115 tokens)

Get property details

Full record for one property: beds by room, amenities with details, access and stairs, rules, host FAQ, policies, and verification status. The location is approximate on purpose: the exact address and the host's direct contact details are not in the record and are sent to the guest after a confirmed booking, so if asked, say that rather than that they are missing. Maps to GET /v1/properties/{id}.

Input parameters:

- `property_id` (string, required): The property's id, from search_stays (starts with prop_).

Output parameters:

- `amenities` (array)
- `capacity` (object)
- `faq` (array)
- `id` (string)
- `listing` (object)
- `location` (object)
- `policies` (object)
- `rules` (object)

### `check_availability` (~93 tokens)

Check a property's calendar

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 parameters:

- `from` (string, required): First night to check, YYYY-MM-DD.
- `property_id` (string, required): The property's id, from search_stays.
- `to` (string, required): Exclusive

Output parameters:

- `days` (array)
- `property_id` (string)
- `timezone` (string)

### `get_quote` (~181 tokens)

Get a binding price

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 parameters:

- `adults` (integer, required): Number of adults (at least 1).
- `check_in` (string, required): Arrival date, YYYY-MM-DD.
- `check_out` (string, required): Departure date, YYYY-MM-DD.
- `children` (integer): Number of children aged 2 to 12. Default 0.
- `infants` (integer): Number of infants under 2. Default 0.
- `pets` (integer): Number of pets. Default 0. Service animals don't count.
- `property_id` (string, required): The property's id, from search_stays.

Output parameters:

- `booking_mode` (string)
- `check_in` (string)
- `check_out` (string)
- `expires_at` (string)
- `house_rules` (array)
- `id` (string)
- `line_items` (array)
- `nights` (integer)
- `payment` (object)
- `property_id` (string)
- `refund_schedule` (array)
- `total` (object): An amount in cents with its currency.

### `get_booking` (~105 tokens)

Get booking status

Status, amounts, refund schedule, guest ID verification link, and when arrival details will be sent. Maps to GET /v1/bookings/{id}. Pass guest_email (the email the booking was made with) unless you connect with an agent token.

Input parameters:

- `booking_id` (string, required): The booking's id, from request_booking (starts with bkg_).
- `guest_email` (string): The email the booking was made with. Needed unless you connect with an agent token.

Output parameters:

- `check_in` (string)
- `check_out` (string)
- `id` (string)
- `property_id` (string)
- `status` (string): e.g. awaiting_payment, pending_host_confirmation, confirmed, declined, cancelled.
- `total` (object): An amount in cents with its currency.

### `ask_host` (~100 tokens)

Ask the host a 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 parameters:

- `property_id` (string, required): The property the question is about.
- `question` (string, required): The guest's question, in plain words, up to 500 characters. The host's answer may be added to the listing's FAQ.

Output parameters:

- `answer` (string|null)
- `status` (string)

### `get_messages` (~116 tokens)

Read messages with the host

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 parameters:

- `booking_id` (string, required): The booking's id, from request_booking (starts with bkg_).
- `guest_email` (string): The email the booking was made with. Needed unless you connect with an agent token.

Output parameters:

- `messages` (array)

### `send_message` (~129 tokens)

Message the host

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 parameters:

- `body` (string, required): The message to the host, in the guest's words, up to 2,000 characters.
- `booking_id` (string, required): The booking the message is about.
- `guest_email` (string): The email the booking was made with. Needed unless you connect with an agent token.

Output parameters:

- `message` (object): The message.

### `cancel_booking` (~193 tokens)

Cancel a booking or request

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 parameters:

- `booking_id` (string, required): The booking or request to cancel.
- `confirm` (boolean, required): False to preview the refund without changing anything; true to cancel.
- `expected_refund_cents` (integer): Required when confirm is true: refund.amount from the confirm=false call.
- `guest_email` (string): The email the booking was made with. Needed unless you connect with an agent token.

Output parameters:

- `booking` (object)
- `refund` (object): An amount in cents with its currency.

### `request_booking` (~279 tokens)

Request to book

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 parameters:

- `email` (string, required): The guest's email: confirmations, the payment link and the host's messages go there.
- `first_name` (string, required): The guest's first name.
- `house_rules_accepted` (boolean, required): True only after the guest has seen and agreed to the quote's house_rules.
- `last_name` (string, required): The guest's last name.
- `phone` (string): The guest's phone number in international format, e.g. +15551234567. Optional.
- `quote_id` (string, required): The quote being booked, from get_quote (starts with quo_).
- `special_requests` (string): Anything the guest wants the host to know, in their words (arrival time, a question). Optional, up to 500 characters.

Output parameters:

- `booking` (object): The booking.
- `payment_url` (string): When present, the guest opens this to add a card; the request reaches the host only after that.

## Diagnostics

Captured diagnostic sections: TLS, DNSSEC, Authorisation, Transports. The full working is on the page: https://verifymcp.io/servers/rentals-threshold-stays/api-mcp#diagnostics

## Score history

- 2026-10-24: 75
- 2026-10-23: 75
- 2026-10-22: 74
- 2026-10-21: 74
- 2026-10-20: 73
- 2026-10-19: 73
- 2026-10-18: 72
- 2026-10-17: 72
- 2026-10-16: 71
- 2026-10-15: 71
- 2026-10-14: 68
- 2026-10-13: 67
- 2026-10-12: 67
- 2026-10-10: 66
- 2026-10-07: 65
- 2026-10-04: 64
- 2026-10-03: 63
- 2026-10-02: 63

## Common questions

### What is the Threshold MCP server?

Threshold is an MCP server listed in the public MCP registry as rentals.threshold/stays. Search and book verified independent vacation rentals directly from hosts, with no guest fees. This page covers its hosted endpoint (https://threshold.rentals/api/mcp).

### Is the Threshold MCP server safe to use?

Threshold scores 75 out of 100 on VerifyMCP. That is a record of what we were able to check automatically, not an endorsement. The category breakdown on this page shows every signal behind the number, including the ones we could not confirm.

### What tools does the Threshold MCP server expose?

Threshold exposes 10 tools: search_stays, get_property, check_availability, get_quote, get_booking, and 5 more. Their descriptions and schemas cost roughly 1,750 tokens of context every time the server is loaded.

### Does the Threshold MCP server require authentication?

No. We connected to Threshold without credentials and it answered, so anything it exposes is reachable by anyone who knows the address.

### Is the Threshold MCP server still maintained?

Threshold is still listed as active in the MCP registry. We last reached this channel on 24 October 2026. Those dates come from our own scans of the registry and the channel itself, not from anything the publisher announced.

## Links

- Remote endpoint: https://threshold.rentals/api/mcp
- Website: https://threshold.rentals/for-agents
- Changelog RSS feed: https://verifymcp.io/servers/rentals-threshold-stays/api-mcp.xml
- Changelog JSON feed: https://verifymcp.io/servers/rentals-threshold-stays/api-mcp.json
- HTML version of this page: https://verifymcp.io/servers/rentals-threshold-stays/api-mcp
