NuVista Haven MCP server ("AI front desk")

MCP serverDev tools

Lets your agent check availability, rates, and booking links for NuVista Haven vacation rentals.

Then ask your AI: use NuVista Haven MCP server ("AI front desk") to search properties

Details

Available today. Use it as a step in a pipeline you build, or from your connected AI.

Add it as a step in a pipeline you build on Ahel, or connect Ahel to Claude, ChatGPT, Cursor, Claude Code or Codex and ask your AI to use it.

About this server

AI front desk for NuVista Haven vacation rentals: live availability, rates, booking links.

Install NuVista Haven MCP server ("AI front desk")

The server’s own address, for the clients that take one directly. Or connect Ahel once and every client you use reads it from one address, with the account kept on Ahel rather than in each client’s config.

  • Claude Code

    claude mcp add --transport http --scope user nuvista-haven-mcp-server-ai-fron 'https://nuvista-haven-mcp.onrender.com/mcp'

    Run it once in your project, then open /mcp to approve any sign-in the server asks for.

  • Claude Desktop

    https://nuvista-haven-mcp.onrender.com/mcp

    Add a custom connector in Settings, paste this address, and approve the sign-in.

  • Cursor

    cursor://anysphere.cursor-deeplink/mcp/install?name=nuvista-haven-mcp-server-ai-fron&config=eyJ1cmwiOiJodHRwczovL251dmlzdGEtaGF2ZW4tbWNwLm9ucmVuZGVyLmNvbS9tY3AifQ==

    Open the link and Cursor adds the server at that address.

  • ChatGPT

    https://nuvista-haven-mcp.onrender.com/mcp

    In Settings, enable Developer mode, create an MCP app, and paste this address. Your plan and workspace must allow custom apps.

  • Codex

    codex mcp add nuvista-haven-mcp-server-ai-fron --url 'https://nuvista-haven-mcp.onrender.com/mcp'

    Run it once, then sign in with codex mcp login nuvista-haven-mcp-server-ai-fron if the server asks for an account.

From the project's README

As published by cswarey16/nuvista-mcp in README.md.

Model Context Protocol server that lets AI assistants answer, from live data:

  • what NuVista Haven properties exist → search_properties
  • what's free on given dates → check_availability (Hospitable calendars)
  • what's the price → get_quote (nightly rates × nights + cleaning fee)
  • where to book direct → get_booking_link (nuvistahaven.com)

Security model

  • Read-only by construction. hospitable_client.py exposes exactly one HTTP verb (GET) against an allow-list of read paths (/user, /properties, /reservations). There are no POST/PUT/PATCH/DELETE methods anywhere — even though the token may carry write scopes, this code cannot mutate anything in Hospitable.
  • Token handling. The Hospitable Personal Access Token is read ONLY from the HOSPITABLE_API_TOKEN environment variable. It is never hardcoded, never logged, never written to disk.

Setup

cd ~/workspace/nuvista-mcp
python3 -m venv venv
./venv/bin/pip install -r requirements.txt

Run

# local testing (stdio)
HOSPITABLE_API_TOKEN=<token> ./venv/bin/python server.py

# public hosting (Streamable HTTP)
HOSPITABLE_API_TOKEN=<token> ./venv/bin/python server.py --http --port 8000

Tests (mocked, no token needed)

./venv/bin/python test_server.py

One-time: map Hospitable property IDs

properties.py holds the 12 canonical properties with best-effort Hospitable name guesses (7 strong, 5 guesses — see guess_confidence). With a live token, run the matcher and confirm each mapping by hand, then fill in hospitable_id per property:

HOSPITABLE_API_TOKEN=<token> ./venv/bin/python - <<'EOF'
import sys; sys.path.insert(0, '.')
from hospitable_client import HospitableClient
from logic import build_id_mapping
import json
print(json.dumps(build_id_mapping(HospitableClient()), indent=2))
EOF

Entries with "needs_human_confirm": true must be verified before use — check_availability/get_quote refuse to run for unmapped properties.

Known API gaps / assumptions (verify against live API)

  1. Calendar query params: get_calendar sends start_date/end_date (the Hospitable convention used by /reservations). If the endpoint ignores them, availability windows may be wrong — verify on first live run.
  2. Cleaning fee: not part of the calendar day object. get_quote probes the property record for common fee shapes; if absent, the total is explicitly marked total_is_partial_estimate: true — never silently zero.
  3. Booking-link date params: date pre-fill via query string on nuvistahaven.com is unverified, so get_booking_link returns the plain property URL (no fabricated params).
  4. Reservations cross-check: list_reservations is implemented but the calendar is the source of truth; reservations are not currently consulted.

Files

  • server.py — FastMCP server, 4 tools, stdio + Streamable HTTP
  • logic.py — tool logic (testable without MCP)
  • hospitable_client.py — GET-only Hospitable Public API v2 client
  • properties.py — canonical 12-property registry + Hospitable mapping
  • test_server.py — mock-based tests

Tools it offers (5)

What this server listed when Ahel dialed its public endpoint in Oct 2026, with no key and no account of yours. The names are the server’s own.

  • search_properties
  • check_availability
  • get_quote
  • get_property_details
  • get_booking_link

Signals

Last commit
Oct 2026
Advanced
Delivery
nuvista-haven MCP server → your Ahel connector (mcp.ahel.ai) → your AI.
Item type
mcp-server
Key
io-github-cswarey16-nuvista-haven
Source
github.com/cswarey16/nuvista-mcp
Hosted endpoint
https://nuvista-haven-mcp.onrender.com/mcp