Google Hotels MCP Server

Búsqueda de estancias en Google Hotels: tarifas, calificaciones, comodidades y lo que cobra cada sitio de reserva, como JSON estructurado.

Documentación

Servidor MCP de Google Hotels

Un servidor de Protocolo de Contexto de Modelo (MCP) alojado que brinda a Claude, Cursor, Windsurf y cualquier otro cliente MCP una herramienta de Google Hotels. Busca hoteles y alquileres vacacionales para un destino y un par de fechas, luego abre cualquier propiedad en detalle con la tarifa que cobra cada sitio de reservas, calificaciones, desglose de reseñas por tema, servicios, fotos y coordenadas, todo como JSON estructurado, sin cuenta de Google ni cuota de Places API.

1,000 créditos gratis cada mes, sin necesidad de tarjeta, lo que equivale a unas 100 búsquedas de hoteles.

https://mcp.hasdata.com/api/mcp?apis=google_travel_hotels

Glama score tool contract MCP Tools npm PyPI License

Contenido

Lo que necesitas

Un cliente MCP y una clave de API de HasData desde el panel, gratis de crear sin tarjeta, y el nivel gratuito cubre unas 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 ni proyecto de Google Cloud en ningún punto del flujo. Un cliente que solo habla stdio lo alcanza a través de un lanzador ligero, publicado como @hasdata/google-hotels-mcp en npm y hasdata-google-hotels-mcp en PyPI, que 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/api/mcp?apis=google_travel_hotels
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 google-hotels "https://mcp.hasdata.com/api/mcp?apis=google_travel_hotels" \
  --header "x-api-key: HASDATA_API_KEY"
Claude Desktop

Configuración, luego Conectores, luego Agregar conector personalizado, luego pega https://mcp.hasdata.com/api/mcp?apis=google_travel_hotels 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/google-hotels-mcp es ese lanzador, y lee la clave del entorno. Agrega esto a claude_desktop_config.json:

{
  "mcpServers": {
    "google-hotels": {
      "command": "npx",
      "args": ["-y", "@hasdata/google-hotels-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": {
    "google-hotels": {
      "command": "uvx",
      "args": ["hasdata-google-hotels-mcp"],
      "env": { "HASDATA_API_KEY": "YOUR_KEY" }
    }
  }
}
Cursor

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

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

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

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

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

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

Ejemplos de indicaciones

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

Encuentra hoteles en Barcelona para las noches del 12 al 15 de noviembre, dos adultos, y lista los cinco más baratos con tarifa por noche, calificación y clase.

Una llamada, 10 créditos. Las tarifas, calificaciones y servicios vienen todos juntos.

Misma estancia, cuatro estrellas o más, solo cancelación gratuita, ordenado por calificación.

Una llamada, 10 créditos. La clase, la cancelación y el orden de clasificación son filtros en una sola solicitud.

Toma el primer resultado y muestra cuánto cobra cada sitio de reservas por esa propiedad, y si es un buen precio.

Dos llamadas, 20 créditos. La búsqueda devuelve un propertyToken por propiedad, y pasarlo abre esa propiedad con cada fuente que Google compara, un rango de precios típico y el propio veredicto de Google sobre la oferta.

Alquileres vacacionales en Lisboa esa semana con al menos dos dormitorios y piscina.

Una llamada, 10 créditos, con vacationRentals activado, bedrooms en 2 y la piscina en amenity__.

Nombra el destino como lo dirías en voz alta. Un Barcelona simple se interpreta según donde Google cree que se ejecuta la búsqueda, por lo que un servidor en California responde con hoteles californianos. Escribe hotels in Barcelona o establece gl a es, y la ciudad queda fijada.

Herramientas

HerramientaQué devuelve
hasdata_google_travel_hotels_getGoogleHotelsPropiedades con tarifa por noche y total, clase, calificación, recuentos de reseñas y un desglose por tema, servicios, imágenes, coordenadas y transporte cercano, junto con paginación y el árbol de marcas. Dado un propertyToken devuelve esa única propiedad con la tarifa en cada fuente que Google compara, dirección, teléfono y un rango de precios típico. 10 créditos por llamada

Una herramienta, de solo lectura, que cubre ambas mitades del sitio. Sin un propertyToken busca. Con uno abre una sola propiedad.

Las muestras a continuación están recortadas de llamadas reales, y las tarifas de hoteles cambian a diario. Léelas como una forma.

Una muestra es el payload, no la respuesta completa. Un resultado de 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 lo desenvuelve por ti, y el código que habla directamente con el endpoint no lo hace.

Buscar hoteles y alquileres vacacionales

hasdata_google_travel_hotels_getGoogleHotels

Propiedades para un destino y una estancia, con tarifas, calificaciones, servicios e imágenes.

ParámetroTipoRequeridoNotas
qstringDestino, vecindario o nombre de hotel. Frasealo como hotels in Barcelona en lugar de Barcelona, o fija el país con gl
checkInDatestringYYYY-MM-DD
checkOutDatestringYYYY-MM-DD
adults / childrennumberMezcla de huéspedes, 1 a 6 adultos y hasta 5 niños, 6 huéspedes en total
childrenAgesstringEdades separadas por comas, una por niño, como 5,8
sortBystringlowestPrice, highestRating o mostReviewed. El orden propio de Google cuando está ausente
minPrice / maxPricenumberPor noche, en la moneda seleccionada
ratingstringthreePointFivePlus, fourPlus o fourPointFivePlus
hotelClassstringClases de estrellas a mantener, separadas por comas, como 4,5
propertyType__arrayTipos de propiedad como hotelResort, con prefijo hotel* para hoteles y vacation* para alquileres
amenity__arrayServicios como hotelFreeWifi o hotelPool, misma regla de prefijo
brandsstringIDs de marcas a mantener. La respuesta de búsqueda lleva todo el árbol de marcas con sus IDs
freeCancellation / specialOffers / ecoCertifiedbooleanLimitar a propiedades que tengan esa marca
vacationRentalsbooleanBuscar alquileres en lugar de hoteles
bedrooms / bathroomsnumberMínimos, solo alquileres
currency / gl / hlstringMoneda, y el país e idioma de la búsqueda
nextPageTokenstringSiguiente página, tomada de pagination
propertyTokenstringCambia la llamada de una búsqueda a una propiedad en detalle

Los resultados llegan bajo properties, aproximadamente veinte por página. Cada propiedad lleva name, type, description, link, gpsCoordinates, ratePerNight y totalRate (cada uno con la cadena cruda y un número extracted*), hotelClass con extractedHotelClass, overallRating, reviews, locationRating, un histograma ratings, reviewsBreakdown con menciones positivas y negativas por tema, amenities, images y nearbyPlaces con tiempos a pie y en transporte. searchInformation.totalResults informa cuántos tiene Google, pagination lleva nextPageToken, y brands lista el árbol de marcas con los IDs que toma el filtro brands.

Las tarifas se cotizan de dos maneras. lowest incluye impuestos y cargos, beforeTaxesFees no, y una propiedad puede llevar solo una de ellas. Compara cosas similares antes de clasificar.

{
  "name": "Casa Gràcia",
  "propertyToken": "ChcI0r6-2uyF7rIuGgsvZy8xdmo2bnNxZhAB",
  "type": "hotel",
  "description": "Cozy quarters in a hip lodging with dining & a lively bar, plus a kitchen, a library & free Wi-Fi.",
  "link": "https://room00hostel.com/barcelona/casa-gracia-hostel/",
  "gpsCoordinates": { "latitude": 41.3974523, "longitude": 2.1593339 },
  "ratePerNight": { "beforeTaxesFees": "US$61", "extractedBeforeTaxesFees": 61 },
  "totalRate": { "beforeTaxesFees": "US$182", "extractedBeforeTaxesFees": 182 },
  "hotelClass": "4-star hotel",
  "extractedHotelClass": 4,
  "overallRating": 3.9,
  "reviews": 3811,
  "locationRating": "4.6",
  "amenities": ["Breakfast", "Air conditioning", "Airport shuttle", "Kid-friendly"],
  "nearbyPlaces": [
    { "name": "La Pedrera - Casa Milà", "transportations": [{ "type": "Walking", "duration": "5 min" }] }
  ]
}

Una propiedad en detalle

Pasa propertyToken de cualquier resultado de búsqueda de vuelta a la misma herramienta, manteniendo las fechas, y la respuesta es esa propiedad sola. Además de los campos de búsqueda, agrega prices, la tarifa en cada fuente que Google compara, featuredPrices para las patrocinadas, typicalPriceRange para la estancia, deal y dealDescription cuando Google marca el precio como bueno, address, phone, directions, amenitiesDetailed agrupados por categoría, excludedAmenities y otherReviews de Tripadvisor y el resto.

{
  "prices": [
    {
      "source": "Booking.com",
      "numGuests": 2,
      "ratePerNight": { "lowest": "$61", "beforeTaxesFees": "$39", "extractedLowest": 61 }
    }
  ],
  "typicalPriceRange": { "lowest": "$51", "highest": "$68", "extractedLowest": 51, "extractedHighest": 68 },
  "deal": "34% less than usual",
  "dealDescription": "Great Deal",
  "address": "Pg. de Gràcia, 116Bis, Gràcia, 08008 Barcelona, Spain",
  "phone": "+34 931 74 05 28"
}

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 pone el fallo dentro del resultado, con isError establecido a true y la razón 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 conexión fallida. tools/list acepta cualquier clave no vacía y devuelve la herramienta, por lo que el cliente completa su protocolo de enlace 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 de cualquier herramienta, y la conexión misma falla con 401. Los encabezados CORS están presentes, y un cliente de navegador lee el estado y no un fallo de red opaco.

Una fecha faltante se rechaza antes de convertirse en búsqueda. Elimina checkOutDate y la llamada falla la validación con 422, nombrando el campo.

El fallo peligroso es silencioso y geográfico. Un destino que Google no puede ubicar, y un nombre de ciudad simple leído del país equivocado, ambos devuelven 200 con una página completa de propiedades en otro lugar por completo. Buscamos Qwertyville y obtuvimos dieciocho hoteles reales cerca del centro de datos desde donde salió la solicitud. Verifica gpsCoordinates en el primer resultado, o pasa gl, antes de confiar en una lista.

Las fechas que no tienen sentido se reparan silenciosamente en lugar de rechazarse. Una salida antes de la entrada, o una estancia en 2020, aún responde 200 con propiedades, porque Google normaliza el rango en lugar de dar error. Valida las fechas por tu lado si vienen de un modelo.

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

Precios, nivel gratuito y límites

Cada llamada de Google Hotels cuesta 10 créditos por llamada exitosa. El tamaño de la respuesta no cambia el precio, y abrir una propiedad cuesta lo mismo que una búsqueda.

El nivel gratuito es 1,000 créditos cada mes sin tarjeta, lo que equivale a unas 100 búsquedas. Se renueva con el ciclo de facturación, por lo que un agente de bajo volumen funciona en el nivel gratuito indefinidamente. Los planes de pago comienzan en $59 al mes por 200,000 créditos, lo que equivale a 20,000 búsquedas, o $2.95 por cada 1,000 búsquedas. El precio unitario baja con el volumen hasta $0.83 por cada 1,000 en el plan más grande, y la facturación anual toma diez meses de la tarifa mensual por doce. Las cifras actuales están en la página de precios.

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

Una solicitud que devuelve un código distinto de 200 no se factura. Abrir una propiedad después de una búsqueda es una segunda llamada, así que presupuesta para ello.

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 probabilidades de que el modelo use la incorrecta.

?apis=google_travel_hotels           the one tool in this repo
?apis=google_travel                  add Google Flights
?apis=google_travel_hotels,airbnb    hotels plus Airbnb stays
?apis=google_travel_hotels,booking   hotels plus Booking.com

El parámetro acepta nombres de proveedores como google_travel y nombres de API individuales como google_travel_hotels. 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. Omite el parámetro y el mismo endpoint expone todas las herramientas de HasData.

Cómo se compara

Google nunca ha abierto una API pública de Hoteles. Hotel Center es para propietarios de propiedades que introducen tarifas, y la API de Places devuelve un registro de negocio con fotos y reseñas, pero sin tarifa para un rango de fechas. Las alternativas son APIs de afiliados de sitios de reserva individuales, cada una cubriendo su propio inventario y cada una detrás de un proceso de aprobación.

API de Places de GoogleEste servidor
Tarifas para una estanciaNo se ofrecePor noche y total, por propiedad
Lo que cobran otros sitiosNo se ofreceprices con la fuente y su tarifa
ReseñasCinco fragmentos de reseñasConteos, un histograma de estrellas y un desglose por tema
Alquileres vacacionalesNo cubiertoLa misma herramienta con una bandera
ConfiguraciónProyecto de Google Cloud, facturación, cuotaUna clave y una URL
CostoPor solicitud, después del límite gratuitoDe pago después del nivel gratuito, 10 créditos por llamada

Lo que este servidor no hace. No hay reservas ni pagos. Lee tarifas, disponibilidad para las fechas que preguntas y los enlaces a los que Google apunta, y te devuelve el paso de la reserva.

Preguntas frecuentes

¿Existe una API oficial de Google Hotels?

No. Google opera Hotel Center para hoteleros que publican sus propias tarifas, y la API de Places para registros de negocios, ninguna de las cuales devuelve lo que cuesta una estancia. Este servidor lee los resultados públicos y los devuelve como JSON estructurado.

¿Qué es un servidor MCP de Google Hotels?

Un servidor que expone Google Hotels como una herramienta que un cliente de IA puede llamar. El cliente envía una llamada de herramienta a través del Protocolo de Contexto de Modelo, el servidor obtiene las propiedades y devuelve JSON estructurado, y el modelo trabaja con el resultado. Este expone una sola herramienta y se ejecuta de forma remota.

¿Por qué mi búsqueda devolvió hoteles en otro país?

Porque un nombre de lugar simple se resuelve según la propia idea de Google de dónde se ejecuta la búsqueda, que es el centro de datos desde el que sale la solicitud. Escribe hotels in Barcelona en lugar de Barcelona, o establece gl al código de país, y el destino se mantiene.

¿Cómo veo lo que cobra cada sitio de reserva?

Busca primero, luego llama a la herramienta de nuevo con el propertyToken de la propiedad que te interesa. La respuesta incluye prices con una entrada por fuente, typicalPriceRange para la estancia y el veredicto de deal de Google cuando la tarifa es inusualmente baja.

¿Puedo buscar alquileres vacacionales?

Sí. Activa vacationRentals y la misma herramienta busca alquileres, donde bedrooms y bathrooms se convierten en filtros útiles.

¿Puedo usar esto junto con otras APIs de HasData?

Sí. El parámetro apis acepta una lista, y ?apis=google_travel añade Google Flights junto a los hoteles. Omite el parámetro y obtienes todo.

Cumplimiento y datos personales

HasData accede solo a datos disponibles públicamente. Los términos de una plataforma pueden restringir el acceso automatizado, y tú eres responsable de tu propio cumplimiento.

Enlaces de HasData

Página de producto y constructor de solicitudesAPI de Google Hotels
Documentación del servidorDocumentación del servidor MCP
Todas las herramientas de HasData en un servidorHasData/hasdata-mcp
Tutoriales para clientesClientes e integraciones MCP
Todo lo demás que extraemosTodas las APIs de HasData
Planes y costos de créditosPlanes y costos de créditos
Claves y usoPanel de HasData
Lanzador de Node en npm@hasdata/google-hotels-mcp
Lanzador de Python en PyPIhasdata-google-hotels-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 la herramienta, la parte que puede romperse sin un commit aquí. Comprueban que ?apis=google_travel_hotels devuelve exactamente una herramienta, que aún declara sus parámetros requeridos, que el nombre no ha cambiado y que la clave en uso es realmente aceptada. Esa última comprobación llama a la 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 era inalcanzable, y el mensaje de aserción indica cuál.

Contribuciones

Las correcciones a la tabla de parámetros y a la muestra de respuesta son la contribución más útil, porque son las partes que se desvían. Incluye la llamada que hiciste y la respuesta que obtuviste. Las solicitudes de extracción de forks ejecutan la suite sin clave, y las comprobaciones en vivo se omiten en lugar de ponerse en rojo.

Licencia

MIT. Consulta LICENCIA.