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
Contenido
- Lo que necesitas
- Inicio rápido
- Ejemplos de indicaciones
- Herramientas
- Errores y rutas de fallo
- Precios, nivel gratuito y límites
- Selección de herramientas
- Cómo se compara
- Preguntas frecuentes
- Enlaces de HasData
- Desarrollo
- Contribuciones
- Licencia
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.
| Campo | Valor |
|---|---|
| URL | https://mcp.hasdata.com/api/mcp?apis=google_travel_hotels |
| Transporte | HTTP, transmisible |
| Encabezado de autenticación | x-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
| Herramienta | Qué devuelve |
|---|---|
hasdata_google_travel_hotels_getGoogleHotels | Propiedades 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ámetro | Tipo | Requerido | Notas |
|---|---|---|---|
q | string | sí | Destino, vecindario o nombre de hotel. Frasealo como hotels in Barcelona en lugar de Barcelona, o fija el país con gl |
checkInDate | string | sí | YYYY-MM-DD |
checkOutDate | string | sí | YYYY-MM-DD |
adults / children | number | Mezcla de huéspedes, 1 a 6 adultos y hasta 5 niños, 6 huéspedes en total | |
childrenAges | string | Edades separadas por comas, una por niño, como 5,8 | |
sortBy | string | lowestPrice, highestRating o mostReviewed. El orden propio de Google cuando está ausente | |
minPrice / maxPrice | number | Por noche, en la moneda seleccionada | |
rating | string | threePointFivePlus, fourPlus o fourPointFivePlus | |
hotelClass | string | Clases de estrellas a mantener, separadas por comas, como 4,5 | |
propertyType__ | array | Tipos de propiedad como hotelResort, con prefijo hotel* para hoteles y vacation* para alquileres | |
amenity__ | array | Servicios como hotelFreeWifi o hotelPool, misma regla de prefijo | |
brands | string | IDs de marcas a mantener. La respuesta de búsqueda lleva todo el árbol de marcas con sus IDs | |
freeCancellation / specialOffers / ecoCertified | boolean | Limitar a propiedades que tengan esa marca | |
vacationRentals | boolean | Buscar alquileres en lugar de hoteles | |
bedrooms / bathrooms | number | Mínimos, solo alquileres | |
currency / gl / hl | string | Moneda, y el país e idioma de la búsqueda | |
nextPageToken | string | Siguiente página, tomada de pagination | |
propertyToken | string | Cambia 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.
lowestincluye impuestos y cargos,beforeTaxesFeesno, 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 Google | Este servidor | |
|---|---|---|
| Tarifas para una estancia | No se ofrece | Por noche y total, por propiedad |
| Lo que cobran otros sitios | No se ofrece | prices con la fuente y su tarifa |
| Reseñas | Cinco fragmentos de reseñas | Conteos, un histograma de estrellas y un desglose por tema |
| Alquileres vacacionales | No cubierto | La misma herramienta con una bandera |
| Configuración | Proyecto de Google Cloud, facturación, cuota | Una clave y una URL |
| Costo | Por solicitud, después del límite gratuito | De 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 solicitudes | API de Google Hotels |
| Documentación del servidor | Documentación del servidor MCP |
| Todas las herramientas de HasData en un servidor | HasData/hasdata-mcp |
| Tutoriales para clientes | Clientes e integraciones MCP |
| Todo lo demás que extraemos | Todas las APIs de HasData |
| Planes y costos de créditos | Planes y costos de créditos |
| Claves y uso | Panel de HasData |
| Lanzador de Node en npm | @hasdata/google-hotels-mcp |
| Lanzador de Python en PyPI | hasdata-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.