HasData Booking.com MCP Server

Estadías en Booking.com por destino y fechas, además de detalles completos de la propiedad, como JSON estructurado.

Documentación

Servidor MCP de Booking.com

Un servidor de Protocolo de Contexto de Modelo (MCP) alojado que brinda a Claude, Cursor, Windsurf y cualquier otro cliente MCP dos herramientas de solo lectura de Booking.com. La búsqueda se realiza por destino y fechas con filtros enriquecidos, y lee una propiedad individual en su totalidad, todo como JSON estructurado, sin necesidad de alojar nada.

Lee páginas públicas de propiedades en Booking.com que un visitante sin sesión puede ver.

1,000 créditos gratuitos cada mes, sin necesidad de tarjeta, lo que equivale a 100 búsquedas en Booking.

https://mcp.hasdata.com/mcp?apis=booking

Glama score tool contract MCP Tools

Contenido

Lo que necesitas

Un cliente MCP y una clave de API de HasData desde el panel de control, gratuita de crear sin tarjeta, y el nivel gratuito cubre 100 llamadas al mes a la tarifa de 10 créditos. Este es un servidor remoto, por lo que la ruta más simple es una URL y un encabezado x-api-key, sin contenedor que ejecutar. Un cliente que solo habla stdio lo alcanza a través de un lanzador ligero, publicado como @hasdata/booking-mcp en npm y hasdata-booking-mcp en PyPI, como se muestra a continuación.

Inicio rápido

La URL del servidor es la misma para todos los clientes. Lo ejecutamos de forma práctica en Claude Code y Claude Desktop. Los demás bloques siguen el formato documentado de cada cliente para un servidor remoto.

CampoValor
URLhttps://mcp.hasdata.com/mcp?apis=booking
TransporteHTTP, transmisible
Encabezado de autenticaciónx-api-key: HASDATA_API_KEY

Los clientes con soporte OAuth pueden agregar la misma URL como conector e iniciar sesión sin poner una clave en un archivo de configuración.

Claude Code
claude mcp add --transport http booking "https://mcp.hasdata.com/mcp?apis=booking" \
  --header "x-api-key: HASDATA_API_KEY"
Claude Desktop

Configuración, luego Conectores, luego Agregar conector personalizado, luego pega https://mcp.hasdata.com/mcp?apis=booking e inicia sesión.

Para la ruta de archivo de configuración, Claude Desktop solo carga servidores locales (stdio), por lo que alcanza un servidor remoto a través de un lanzador stdio. El paquete @hasdata/booking-mcp es ese lanzador, y lee la clave del entorno. Agrega esto a claude_desktop_config.json:

{
  "mcpServers": {
    "booking": {
      "command": "npx",
      "args": ["-y", "@hasdata/booking-mcp"],
      "env": { "HASDATA_API_KEY": "YOUR_KEY" }
    }
  }
}

Para Python en lugar de Node, cambia el lanzador por el paquete de PyPI, que uvx ejecuta sin instalación manual:

{
  "mcpServers": {
    "booking": {
      "command": "uvx",
      "args": ["hasdata-booking-mcp"],
      "env": { "HASDATA_API_KEY": "YOUR_KEY" }
    }
  }
}
Cursor

~/.cursor/mcp.json para cada proyecto, o .cursor/mcp.json para uno solo:

{
  "mcpServers": {
    "booking": {
      "url": "https://mcp.hasdata.com/mcp?apis=booking",
      "headers": { "x-api-key": "HASDATA_API_KEY" }
    }
  }
}
Windsurf

~/.codeium/windsurf/mcp_config.json. Windsurf llama al campo serverUrl, no url:

{
  "mcpServers": {
    "booking": {
      "serverUrl": "https://mcp.hasdata.com/mcp?apis=booking",
      "headers": { "x-api-key": "HASDATA_API_KEY" }
    }
  }
}
VS Code

.vscode/mcp.json en el espacio de trabajo:

{
  "servers": {
    "booking": {
      "type": "http",
      "url": "https://mcp.hasdata.com/mcp?apis=booking",
      "headers": { "x-api-key": "HASDATA_API_KEY" }
    }
  }
}

Ejemplos de prompts

Prompts, no código. Pega uno y el agente elige la herramienta por sí mismo. Cada uno está anotado con las llamadas que realiza, porque cada llamada exitosa cuesta 10 créditos.

Busca en Booking.com hoteles en París del 15 al 18 de septiembre para dos adultos, y dame los diez mejor valorados por menos de $700 por la estancia.

Una llamada, 10 créditos. El precio, la puntuación de reseñas y la ubicación vienen en el resultado de búsqueda.

Toma el primer resultado y extrae su detalle completo: instalaciones, reglas de la casa, las opciones de habitación y las valoraciones por categoría.

Una llamada, 10 créditos. Esos datos viven en la página de la propiedad, que la herramienta de detalles lee por URL y fechas.

Encuentra hoteles de cuatro estrellas en París con cancelación gratuita cerca del centro, y lista precio y puntuación de reseñas.

Una llamada, 10 créditos. La calificación de estrellas, la política de cancelación y la distancia son filtros en una sola solicitud.

Compara la estancia más barata en París contra Roma para las mismas fechas.

Dos llamadas, 20 créditos, una búsqueda por ciudad.

La herramienta de propiedades necesita las mismas fechas y cantidades de huéspedes que la búsqueda, porque la disponibilidad y el precio dependen del período. Una búsqueda para preseleccionar más una llamada de detalle en tres propiedades es una búsqueda y tres llamadas de propiedad.

Herramientas

HerramientaQué devuelve
hasdata_booking_place_getBookingPlaceDetailsLa identidad de la propiedad (hotelId, título, dirección, coordenadas), políticas (cancelación gratuita, sin pago anticipado, estancias con niños/mascotas), precio, valoración y resumen de reseñas, fotos, y…. 10 créditos por llamada
hasdata_booking_search_getBookingSearchResultsEl hotelId de cada hotel, título y URL de Booking, información de ubicación (ciudad, dirección, coordenadas, distancia al centro / playa más cercana), políticas (cancelación gratuita, no…. 10 créditos por llamada

Dos herramientas, de solo lectura. Las muestras a continuación están recortadas de llamadas reales, y los precios cambian constantemente. Léelas como formas. Cada nombre de herramienta enlaza a su referencia de endpoint, que contiene la lista completa de campos.

Las muestras son el payload, no la respuesta completa. Un resultado tools/call lleva un bloque de texto, y ese texto es en sí mismo JSON que contiene url, status, text y json, con los datos extraídos bajo json. Desde una respuesta JSON-RPC cruda, la ruta es result.content[0].text, analizada, luego .json. Un cliente de chat desenvuelve eso por ti, y el código que habla directamente con el endpoint no lo hace.

Obtener resultados de búsqueda de Booking.com

hasdata_booking_search_getBookingSearchResults

Una página de estancias por destino y fechas.

ParámetroTipoObligatorioNotas
keywordstringsíDestino, como Paris o un nombre de propiedad específico
checkInDate / checkOutDatestringsíYYYY-MM-DD, check-in en el futuro y antes del check-out
rooms / adults / childrennumbersíComposición de huéspedes. Pasa children: 0 cuando no haya ninguno
childrenAgesstringEdades separadas por comas, obligatorio cuando children > 0
sortstringpriceLowestFirst, ratingHighToLow, bestReviewedAndLowestPrice, distanceFromDowntown y más
propertyType__ / rating__ / reviewScore__arrayTipo de propiedad, calificación de estrellas y rangos de puntuación de huéspedes
facilities__ / roomFacilities__ / reservationPolicy__arrayFiltros de instalaciones, en la habitación y cancelación
price_min_ / price_max_numberRango de precio total de la estancia
pagenumberAproximadamente 25 resultados por página, 2 para la siguiente página

La referencia documenta el conjunto completo de filtros, incluidos distancia, comidas, accesibilidad, preferencia de cama y grupo de viaje.

Devuelve searchInformation, un array results, y pagination con page, totalResults y totalPages. Cada resultado lleva hotelId, title, url, el room y bedTypes ofrecidos, un objeto location, un objeto policies, un objeto price, el rating de estrellas, un objeto reviews con score, count y una etiqueta de texto, y un photo.

El par de descuentos en price es discountRaw y discountParsed. Versiones anteriores lo escribían mal como dicsountRaw y dicsountParsed, y esa ortografía ya no existe, por lo que el código escrito para ella no lee nada. También ten en cuenta que rating es la calificación oficial de estrellas mientras que reviews.score es la puntuación de huéspedes sobre 10, dos números diferentes.

{
  "hotelId": 50724,
  "title": "Hôtel du Jardin des Plantes",
  "url": "https://www.booking.com/hotel/fr/timjardindesplantes.html",
  "room": "Comfort Double Room",
  "location": { "city": "Paris", "address": "5 rue Linné", "mainDistance": "0.9 miles from downtown", "centrallyLocated": true },
  "policies": { "freeCancellation": true, "noPrepayment": true },
  "price": { "pricePerStayParsed": 451.36, "priceBeforeDiscountParsed": 885.03, "discountParsed": 433.66, "currency": "USD" },
  "rating": 3,
  "reviews": { "score": 7.5, "count": 1721, "text": "Good" }
}

Obtener detalles de propiedad de Booking.com

hasdata_booking_place_getBookingPlaceDetails

Una propiedad completa, por su URL y el período de estancia.

ParámetroTipoObligatorioNotas
urlstringsíUna URL de propiedad de Booking.com, el campo url de un resultado de búsqueda
checkInDate / checkOutDatestringsíYYYY-MM-DD, el período para calcular precio y verificar disponibilidad
rooms / adults / childrennumbersíComposición de huéspedes, mismo significado que la herramienta de búsqueda
childrenAgesstringEdades separadas por comas, obligatorio cuando children > 0

Devuelve la página como secciones en lugar de un solo objeto plano: overview (id, title, propertyType, un address estructurado, un description, highlights, mostPopularFacilities y photos), bookingDetails (el período y la moneda que reflejan los precios), un array rooms de las suites disponibles, cada una con name, beds, facilities y variants con precio, una lista facilities, houseRules, un array ratings de puntuaciones por categoría, reviews y questionsAndAnswers.

{
  "overview": {
    "id": "50724",
    "title": "Hôtel du Jardin des Plantes",
    "propertyType": "HOTEL",
    "address": { "country": "France", "zipcode": "75005" },
    "mostPopularFacilities": ["Non-smoking rooms", "Free Wifi", "24-hour front desk"]
  },
  "bookingDetails": { "checkIn": "2026-09-15", "checkOut": "2026-09-18", "adults": 2, "rooms": 1, "currency": "USD" },
  "ratings": [
    { "label": "Average", "value": 7.5, "votes": 1721 },
    { "label": "Cleanliness", "value": 7.8 }
  ]
}

Prompts y recursos

El servidor expone 16 recursos, uno por parámetro cuyos valores aceptados son una lista fija. Leer uno es más barato que aprender el vocabulario de una llamada rechazada, y no cuesta créditos. Cada URI es hasdata://booking/<parameter>.

ParámetroValoresQué selecciona
language45Idioma de la interfaz de Booking.com y campos localizados en la respuesta.
currency52Moneda de los precios devueltos en la respuesta. Usa hotelCurrency para mantener la moneda nativa de cada propiedad.
sort10Orden de clasificación aplicado por Booking.com a la página de resultados.
propertyType__8Filtrar por tipo de propiedad. Los múltiples valores se combinan con OR.
rating__5Filtrar por calificación oficial de estrellas. Los múltiples valores se combinan con OR.
reviewScore__4Filtrar por rango mínimo de puntuación de reseñas de huéspedes. Los múltiples valores se combinan con OR.
distanceFromCenter__3Filtrar por distancia desde el centro del destino. Los múltiples valores se combinan con OR.
propertyAccessibility__7Filtrar por características de accesibilidad a nivel de propiedad. Los múltiples valores se combinan con OR.
meals__2Filtrar por planes de comidas disponibles. Los múltiples valores se combinan con OR.
facilities__13Filtrar por instalaciones a nivel de propiedad. Los múltiples valores se combinan con OR.
roomFacilities__25Filtrar por instalaciones en la habitación. Los múltiples valores se combinan con OR.
roomAccessibility__11Filtrar por características de accesibilidad en la habitación. Los múltiples valores se combinan con OR.
bedPreference__2Filtrar por configuración de cama. Los múltiples valores se combinan con OR.
reservationPolicy__2Filtrar por flexibilidad de reserva. Los múltiples valores se combinan con OR.
onlinePayment__1Filtrar por opciones de pago en línea.
travelGroup__2Filtrar por opciones de estancia orientadas a grupos de viaje. Los múltiples valores se combinan con OR.

La lista se sirve sin clave de API, por lo que un cliente puede leerla antes de que un usuario se haya registrado.

Errores y rutas de fallo

Tu cliente casi nunca ve un código de error HTTP de una llamada de herramienta. La capa MCP responde 200 y coloca el fallo dentro del resultado, con isError establecido en true y el motivo como texto. El agente lee un mensaje donde podrías esperar una línea de estado.

Una clave incorrecta aparece como salida de herramienta, no como una conexión fallida. tools/list acepta cualquier clave no vacía y devuelve ambas herramientas, por lo que el cliente completa su handshake y muestra verde. La primera llamada de herramienta luego regresa con isError: true y el texto HasData API error: 401 Unauthorized. Vigila esa cadena, porque nada antes en el flujo informa el problema. Una clave faltante es el único error HTTP real. La autorización se ejecuta antes que cualquier herramienta, y la conexión en sí falla con 401. Las cabeceras CORS están presentes, y un cliente de navegador lee el estado y no un fallo de red opaco.

Un argumento que rompe el esquema de una herramienta se rechaza antes de convertirse en un scraping. El servidor responde con isError: true y el texto MCP error -32602: Input validation error, nombrando el campo infractor. Un recuento de children sin el childrenAges correspondiente, o una fecha de salida igual o anterior a la de entrada, se detecta aquí.

Una búsqueda sin disponibilidad devuelve un resultado exitoso con un array results vacío, no un error. Un destino y un rango de fechas sin nada disponible sigue devolviendo requestMetadata.status establecido en ok. Comprueba la longitud del array antes de iterar.

Una URL de propiedad que ya no resuelve devuelve 400 con requestMetadata.status establecido en error.

Los resultados que contienen datos también incluyen un requestMetadata.id que vale la pena citar en el soporte.

Precios, plan gratuito y límites

Cada herramienta de Booking.com cuesta 10 créditos por llamada exitosa. El tamaño de la respuesta no cambia el precio. Una página de búsqueda con 25 estancias cuesta lo mismo que una con dos.

El plan gratuito es de 1,000 créditos cada mes sin tarjeta, lo que equivale a 100 llamadas a Booking.com. Se renueva con el ciclo de facturación, por lo que un agente de bajo volumen funciona con el plan gratuito indefinidamente.

Los planes de pago comienzan en $59 al mes por 200,000 créditos, lo que equivale a 20,000 llamadas. El precio unitario baja con el volumen, desde $2.95 por cada 1,000 llamadas en el plan inicial hasta $1.19 en Basic y $0.83 en los niveles Growth. Las cifras actuales están en la página de precios.

Tu plan también establece la concurrencia. El plan gratuito permite 1 solicitud a la vez, Startup 5, Basic 15, y los niveles Growth van de 50 a 500. Maneja el caso de desbordamiento de forma defensiva en cualquier proceso desatendido.

Una solicitud que devuelve un estado distinto de 200 no se factura. Una llamada exitosa que no encuentra nada sigue siendo una llamada.

Selección de herramientas

El parámetro de consulta apis decide qué herramientas ve tu agente. Menos herramientas significa menos contexto gastado en definiciones de herramientas y menos posibilidades de que el modelo elija la incorrecta.

?apis=booking                    the two tools in this repo
?apis=booking,airbnb             add Airbnb stays
?apis=booking,google_travel      add Google Hotels and Flights

El parámetro acepta nombres de proveedores como booking y nombres de API individuales como booking_search. Los nombres mal escritos se ignoran. Si todos los nombres son incorrectos, la solicitud falla con 400 y el cuerpo enumera tanto lo que no reconoció como todos los valores válidos. Si omites el parámetro, el mismo endpoint expone las 57 herramientas de HasData.

Cómo se compara

Los programas propios de Booking.com, la Demand API y la red de socios afiliados, están destinados a socios aprobados que envían reservas y ganan comisiones, no son una forma autoservicio de leer el mercado público. Para buscar estancias y leer propiedades arbitrarias, el scraping de las páginas públicas es la vía, y este servidor lo hace detrás de un esquema estable.

Programas de socios de Booking.comEste servidor
PropósitoEnviar reservas como afiliado aprobadoLeer el mercado público
AccesoAprobación de socioUna clave y una URL
Búsqueda en el mercadoDentro de los términos del socioSí, con filtros enriquecidos
ConfiguraciónIncorporación empresarialNinguna
SalidaFeeds de sociosJSON estructurado, precio y puntuación preprocesados

Lo que este servidor no hace. Sin reservas, sin pagos, sin comisiones de socio, sin datos de cuenta. Lee lo que un visitante sin sesión puede ver en Booking.com.

Preguntas frecuentes

¿Existe un servidor MCP oficial de Booking.com?

Booking.com no publica uno. Este está mantenido por HasData y lee páginas públicas de Booking.com.

¿Qué es un servidor MCP de Booking.com?

Un servidor que expone datos de Booking.com como herramientas que un cliente de IA puede llamar. El cliente envía una llamada de herramienta a través del Model Context Protocol, el servidor obtiene los datos y devuelve JSON estructurado, y el modelo trabaja con el resultado. Este expone dos herramientas y se ejecuta de forma remota.

¿Necesito una cuenta de Booking.com o aprobación de socio?

No. La única credencial es tu clave de HasData. No hay incorporación de socios, porque las herramientas leen páginas públicas de Booking.com.

¿Por qué la herramienta de propiedades necesita fechas?

Porque la disponibilidad, las opciones de habitación y el precio dependen del rango de la estancia. Pasa los mismos checkInDate, checkOutDate y recuentos de huéspedes con los que buscaste, y el detalle reflejará ese rango.

¿Cuál es la diferencia entre calificación y puntuación de reseñas?

rating es la calificación oficial por estrellas de la propiedad. reviews.score es la puntuación de reseñas de huéspedes sobre 10. Un hotel de tres estrellas puede tener una puntuación de huéspedes de 9.0, así que lee la que necesites.

¿Puedo usar esto junto con otras APIs de HasData?

Sí. El parámetro apis acepta una lista, y ?apis=booking,airbnb le da a tu agente Booking.com más Airbnb. Elimina el parámetro y obtienes todo.

¿HasData está afiliado a Booking.com?

No. HasData es un servicio independiente y no está afiliado, respaldado ni patrocinado por Booking.com. Booking.com es una marca comercial de su respectivo propietario.

Cumplimiento y datos personales

HasData accede únicamente a datos disponibles públicamente. Los términos de una plataforma pueden restringir el acceso automatizado, y tú eres responsable de tu propio cumplimiento. Cuando los datos que recopilas incluyan información personal, asegúrate de tener una base legal según el GDPR, CCPA o las normas equivalentes en tu jurisdicción.

Enlaces de HasData

Página de producto y constructor de solicitudesAPI de scraping de Booking.com
Documentación del servidorDocumentación del servidor MCP
Las 57 herramientas en un solo servidorHasData/hasdata-mcp
Guías de clientesClientes e integraciones MCP
Todo lo demás que scrapeamosAPI de scraping de Booking.com y 54 más
Planes y costos de créditosPlanes y costos de créditos
Claves y usoPanel de HasData
Lanzador Node en npm@hasdata/booking-mcp
Lanzador Python en PyPIhasdata-booking-mcp

Desarrollo

Este repositorio es configuración y documentación para un servidor remoto. No hay paso de compilación ni nada que contenerizar.

Las pruebas en test/ verifican el contrato de las herramientas, la parte que puede romperse sin un commit aquí. Comprueban que ?apis=booking devuelve exactamente dos herramientas, que cada herramienta sigue declarando sus parámetros obligatorios, que ningún nombre ha cambiado y que la clave en uso es realmente aceptada. Esa última comprobación llama a una herramienta de verdad y cuesta 10 créditos, que es el precio de un canario que puede fallar por la razón correcta.

# macOS and Linux
HASDATA_API_KEY=your_key_here npm test

# Windows PowerShell
$env:HASDATA_API_KEY="your_key_here"; npm test

La misma suite se ejecuta en CI en cada push y una vez a la semana de forma programada, porque la lista de herramientas upstream puede cambiar sin que nadie toque este repositorio. Un fallo significa que la lista de herramientas se movió, la clave dejó de funcionar o el endpoint no era accesible, y el mensaje de la aserción indica cuál.

Contribuciones

Las correcciones a las tablas de herramientas y a los ejemplos de respuesta son la contribución más útil, porque son las partes que se desactualizan. Incluye la llamada que hiciste y la respuesta que obtuviste. Las solicitudes de extracción desde forks ejecutan la suite sin clave, y las comprobaciones en vivo se omiten en lugar de ponerse en rojo.

Licencia

MIT. Consulta LICENCIA.