NuVista Haven MCP Server

Recepción con IA para los alquileres vacacionales de NuVista Haven: busca 12 cabañas y casas, consulta disponibilidad en tiempo real, obtén cotizaciones de tarifas por noche y recupera enlaces de reserva directa. Datos en vivo a través de Hospitable.

Servidor MCP alojado

npx add-mcp 'https://nuvista-haven-mcp.onrender.com/mcp'

Se instala en Claude Code, Codex, Cursor y más

Documentación

Servidor MCP de NuVista Haven ("recepcionista de IA")

Servidor del Protocolo de Contexto de Modelo que permite a los asistentes de IA responder, a partir de datos en vivo:

  • qué propiedades de NuVista Haven existen → search_properties
  • qué está disponible en fechas determinadas → check_availability (calendarios de Hospitable)
  • cuál es el precio → get_quote (tarifas nocturnas × noches + tarifa de limpieza)
  • dónde reservar directamente → get_booking_link (nuvistahaven.com)

Modelo de seguridad

  • Solo lectura por diseño. hospitable_client.py expone exactamente un verbo HTTP (GET) contra una lista de permitidos de rutas de lectura (/user, /properties, /reservations). No hay métodos POST/PUT/PATCH/DELETE en ningún lugar — incluso si el token puede tener alcances de escritura, este código no puede mutar nada en Hospitable.
  • Manejo del token. El Token de Acceso Personal de Hospitable se lee SOLO de la variable de entorno HOSPITABLE_API_TOKEN. Nunca está codificado, nunca se registra, nunca se escribe en disco.

Configuración

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

Ejecución

# 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

Pruebas (simuladas, sin necesidad de token)

./venv/bin/python test_server.py

Una sola vez: mapear los IDs de propiedades de Hospitable

properties.py contiene las 12 propiedades canónicas con suposiciones de nombres de Hospitable de mejor esfuerzo (7 sólidas, 5 suposiciones — ver guess_confidence). Con un token en vivo, ejecuta el emparejador y confirma cada mapeo a mano, luego completa hospitable_id por propiedad:

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

Las entradas con "needs_human_confirm": true deben verificarse antes de su uso — check_availability/get_quote se niegan a ejecutarse para propiedades no mapeadas.

Brechas / suposiciones conocidas de la API (verificar contra la API en vivo)

  1. Parámetros de consulta del calendario: get_calendar envía start_date/end_date (la convención de Hospitable utilizada por /reservations). Si el endpoint los ignora, las ventanas de disponibilidad pueden ser incorrectas — verificar en la primera ejecución en vivo.
  2. Tarifa de limpieza: no es parte del objeto de día del calendario. get_quote sondea el registro de la propiedad en busca de formas comunes de tarifas; si está ausente, el total se marca explícitamente como total_is_partial_estimate: true — nunca se pone en cero silenciosamente.
  3. Parámetros de fecha del enlace de reserva: el precargado de fechas mediante cadena de consulta en nuvistahaven.com no está verificado, por lo que get_booking_link devuelve la URL simple de la propiedad (sin parámetros inventados).
  4. Verificación cruzada de reservas: list_reservations está implementado, pero el calendario es la fuente de verdad; las reservas no se consultan actualmente.

Archivos

  • server.py — servidor FastMCP, 4 herramientas, stdio + Streamable HTTP
  • logic.py — lógica de herramientas (probable sin MCP)
  • hospitable_client.py — cliente de API pública v2 de Hospitable solo GET
  • properties.py — registro canónico de 12 propiedades + mapeo de Hospitable
  • test_server.py — pruebas basadas en simulaciones