Google Flights Deals MCP Server
Convierte una idea de viaje en lenguaje natural en ofertas de vuelos con fechas desde un origen, con tarifas, precios típicos, aerolíneas y enlaces de reserva, como JSON estructurado.
Documentación
Servidor MCP de Google Flights Deals
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 Flights Deals. Describe un viaje en lenguaje natural, como "floración de cerezos en Japón" o "escapada a la playa", y obtén tarifas con fechas desde un aeropuerto de origen con el precio típico al lado, la aerolínea, las escalas y un enlace de reserva, como JSON estructurado.
1,000 créditos gratis cada mes, sin necesidad de tarjeta, lo que equivale a unas 66 búsquedas.
https://mcp.hasdata.com/mcp?apis=google_travel_flights_deals
Contenido
- Lo que necesitas
- Inicio rápido
- Ejemplos de prompts
- Herramientas
- Errores y rutas de fallo
- Precios, nivel gratuito y límites
- 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 de control, gratis de crear sin tarjeta, y el nivel gratuito cubre unas 66 llamadas al mes a la tarifa de 15 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 y sin cuenta de Google en ningún paso del proceso. Un cliente que solo hable stdio lo alcanza a través de un lanzador ligero, publicado como @hasdata/google-flights-deals-mcp en npm y hasdata-google-flights-deals-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/mcp?apis=google_travel_flights_deals |
| Transporte | HTTP, transmisible |
| Encabezado de autenticación | x-api-key: HASDATA_API_KEY |
Los clientes con soporte OAuth pueden añadir 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-flights-deals "https://mcp.hasdata.com/mcp?apis=google_travel_flights_deals" \
--header "x-api-key: HASDATA_API_KEY"
Claude Desktop
{
"mcpServers": {
"google-flights-deals": {
"type": "http",
"url": "https://mcp.hasdata.com/mcp?apis=google_travel_flights_deals",
"headers": { "x-api-key": "HASDATA_API_KEY" }
}
}
}
Cursor
{
"mcpServers": {
"google-flights-deals": {
"type": "streamable-http",
"url": "https://mcp.hasdata.com/mcp?apis=google_travel_flights_deals",
"headers": { "x-api-key": "HASDATA_API_KEY" }
}
}
}
VS Code
{
"servers": {
"google-flights-deals": {
"type": "http",
"url": "https://mcp.hasdata.com/mcp?apis=google_travel_flights_deals",
"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 requiere, porque cada llamada exitosa cuesta 15 créditos.
Quiero ver la floración de cerezos en Japón, volando desde LAX. ¿Cuáles son las fechas más baratas?
Una llamada, 15 créditos. Google elige los destinos y el rango de fechas a partir de la descripción.
Escapada a la playa desde Londres en febrero, nada por encima de 600 libras, solo vuelos directos.
Una llamada, 15 créditos. El límite de precio y el filtro de escalas necesitan un destino fijado con arrivalId, por lo que el agente tiene que nombrar uno o eliminar los filtros.
El mismo viaje pero a Tokio específicamente, diez días, clase business.
Una llamada, 15 créditos. Con arrivalId establecido, la duración del viaje y la cabina están disponibles.
Compara la idea de la floración de cerezos desde LAX y desde JFK.
Dos llamadas, 30 créditos. Un origen por llamada.
Herramientas
| Herramienta | Qué devuelve |
|---|---|
hasdata_google_travel_flights_deals_getGoogleFlightsDeals | Ofertas con fechas que incluyen la tarifa, el precio típico de la ruta, la duración del vuelo, la duración del viaje, las escalas, la aerolínea operadora, los aeropuertos y un enlace de reserva de Google Flights, además de los destinos y el rango de fechas que Google derivó de la consulta. 15 créditos por llamada |
Una herramienta, 15 créditos por llamada exitosa.
Encontrar ofertas de vuelos
hasdata_google_travel_flights_deals_getGoogleFlightsDeals
| Parámetro | Tipo | Obligatorio | Notas |
|---|---|---|---|
q | string | sí | Descripción del viaje en texto libre, desde un nombre de lugar simple hasta una frase completa |
departureId | string | sí | Origen como código IATA de tres letras en mayúsculas, por ejemplo LAX |
arrivalId | string | Fija el destino en lugar de dejar que Google elija. Cada filtro de abajo lo necesita | |
type | string | roundTrip (predeterminado) o oneWay | |
travelClass | string | economy, premiumEconomy, business o first | |
outboundDate | string | Una fecha exacta, o una ventana como 2026-12-01,2026-12-10 | |
returnDate | string | Misma ortografía que outboundDate, y obligatorio junto a ella | |
travelDuration | string | Duración predefinida, week, weekend o twoWeeks | |
tripLength | string | Duración en días, en lugar de returnDate o travelDuration | |
stops | string | nonStop, oneStopOrFewer o twoStopsOrFewer | |
maxDuration | number | Límite por vuelo en minutos | |
maxPrice | number | Límite en la moneda de la solicitud | |
includeAirlines / excludeAirlines | string | Uno u otro, nunca ambos |
Los filtros son lo que hay que acertar. Todos requieren arrivalId. Un prompt que pida vuelos directos bajo un límite de precio mientras deja que Google elija el destino está pidiendo dos cosas que no se pueden combinar, y la API lo dice con un 422 que nombra el par problemático. Fija un destino o elimina los filtros.
searchInformation informa de lo que Google hizo con la consulta: el aeropuerto departure completo con su ciudad y coordenadas, el dateRange en el que se decidió, el priceRange que encontró y el airlines involucrado.
{
"searchInformation": {
"query": "cherry blossom in Japan",
"departure": { "airport": "LAX", "city": "Los Angeles", "country": "United States" },
"dateRange": { "from": "2027-03-01", "to": "2027-04-30" }
},
"flightDeals": [
{
"outboundDate": "2027-03-01",
"returnDate": "2027-03-08",
"price": { "value": 960, "currency": "USD" },
"typicalPrice": { "value": 1335, "currency": "USD" },
"discountPercent": 28,
"durationMinutes": 1320,
"tripLengthDays": 7,
"stops": 1,
"airlineCode": "CX",
"airline": "Cathay Pacific",
"multipleAirlines": false,
"departureAirport": "LAX",
"arrivalAirport": "HIJ",
"destination": { "city": "Hiroshima", "country": "Japan", "highlight": "Peace Park Memorial & Shukkei-en garden" },
"bookingLink": "https://www.google.com/travel/flights?tfs=…"
}
]
}
Prompts y recursos
El servidor expone 7 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://google_travel_flights_deals/<parameter>.
| Parámetro | Valores | Qué selecciona |
|---|---|---|
type | 4 | Tipo de vuelo. Requiere arrivalId. - 1 / roundTrip — ida y vuelta (predeterminado) - 2 / oneWay — solo ida Una oferta de solo ida no lleva returnDate ni tripLengthDays. |
travelClass | 8 | Clase de viaje. Requiere arrivalId. - 1 / economy — económica (predeterminada) - 2 / premiumEconomy — económica premium - 3 / business — business - 4 / first — primera Las tarifas suben bruscamente: en LAX-NRT la misma búsqueda costó $730 en económica frente a $2882 en business. |
travelDuration | 6 | Duración predefinida del viaje. Requiere arrivalId. No se puede combinar con returnDate o tripLength. - 1 / week — alrededor de una semana (6-8 días) - 2 / weekend — un fin de semana (2-3 días) - 3 / twoWeeks — alrededor de dos semanas (13-15 días) Se combina con outboundDate para limitar el período de salida. Se ignora cuando type es oneWay. |
stops | 6 | Número máximo de escalas. Requiere arrivalId. Si se omite, se permite cualquier número. - 1 / nonStop — solo vuelos directos - 2 / oneStopOrFewer — como máximo una conexión - 3 / twoStopsOrFewer — como máximo dos conexiones Una ruta sin nada a esa profundidad devuelve un array flightDeals vacío, no un error — nonStop en una ruta sin vuelo directo es una respuesta válida y vacía. |
gl | 245 | El código de país de dos letras para el país al que quieres limitar la búsqueda. |
hl | 159 | El código de idioma de dos letras para el idioma que quieres usar en la búsqueda. |
currency | 71 | El parámetro define la moneda de los precios devueltos |
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 pone el fallo dentro del resultado, con isError establecido en true y el motivo como texto.
discountPercent es la excepción, no la regla. En 351 ofertas medidas el 2026-10-05 estaba presente en 109 de ellas. Donde aparece, coincide con la diferencia entre price y typicalPrice dentro de un paso de redondeo, y donde está ausente esa diferencia iba del 4% al 15%, por lo que Google parece publicar el campo solo por encima de un umbral propio. typicalPrice estaba en todas las ofertas, así que calcula la comparación tú mismo en lugar de informar "sin descuento" porque falta la clave.
airline y airlineCode desaparecen juntos. En esa misma muestra, 269 ofertas nombraban una aerolínea y 82 no, y la división es exactamente el indicador multipleAirlines: cada oferta que lo establecía en true omitía ambos campos, cada oferta que no lo hacía llevaba ambos. Lee el indicador antes de informar de una aerolínea y di "varias aerolíneas" en lugar de dejar el campo en blanco.
Un filtro sin arrivalId se rechaza antes de ejecutarse. La API responde 422 con rule: "requiredIfExists" nombrando tanto arrivalId como el filtro que lo provocó, y no se cobra nada. Los once filtros se comportan así, por lo que el fallo es ruidoso y barato en lugar de silencioso.
Las fechas son las que Google eligió a menos que las fijes. searchInformation.dateRange es el rango que buscó, que puede estar a meses de hoy. Cítalo al presentar los precios, porque una tarifa para marzo próximo no es una tarifa para el mes que viene.
Cada llamada exitosa gasta créditos de la cuenta conectada. Ni un 422 de validación ni un 400 del proveedor se cobran, medido leyendo el saldo a ambos lados de una llamada.
Precios, nivel gratuito y límites
La herramienta de Google Flights Deals cuesta 15 créditos por llamada exitosa, igual que la API de Google Flights. El número de ofertas devueltas no cambia el precio.
El nivel gratuito es 1,000 créditos cada mes sin tarjeta, lo que equivale a unas 66 búsquedas.
Los planes de pago comienzan en $59 al mes por 200,000 créditos, lo que equivale a unas 13,000 búsquedas. El precio unitario baja en planes más grandes. Los números actuales están en la página de planes.
Cómo se compara
| API de Google Flights | Este servidor | |
|---|---|---|
| Entrada | Un origen, un destino y fechas | Una frase, con el destino opcional |
| Quién elige el destino | Tú | Google, a partir de la descripción |
| Quién elige las fechas | Tú | Google, a menos que las fijes |
| Mejor para | Un viaje que alguien ya ha decidido | Un viaje que alguien todavía está imaginando |
Ambos se complementan en lugar de competir. Usa este para encontrar dónde y cuándo, y luego la API de Google Flights para calcular el precio del itinerario una vez que el viaje esté decidido.
Preguntas frecuentes
¿Necesito una cuenta de Google?
No. La única credencial involucrada es tu clave de HasData.
¿Por qué se ignoraron mis filtros?
Casi con seguridad salieron sin arrivalId. Cada filtro de esta herramienta necesita un destino fijado, y una solicitud que lo omita aún así tiene éxito.
¿Puedo buscar desde varios orígenes a la vez?
No. departureId toma un solo aeropuerto, por lo que comparar orígenes significa una llamada por cada uno.
¿Con cuánta antelación busca?
Hasta donde Google decida a partir de la consulta. Lee searchInformation.dateRange en lugar de asumir las próximas semanas.
¿Está HasData afiliada a Google?
No. HasData es un proveedor independiente de datos web y no está afiliada, respaldada ni patrocinada por Google. Todas las marcas comerciales pertenecen a sus propietarios.
Cumplimiento y datos personales
El servidor lee la interfaz pública de ofertas de Google Flights. No lleva datos de pasajeros y no reserva nada.
Enlaces de HasData
| Página del producto y constructor de solicitudes | API de Google Flights |
| Documentación del endpoint | Documentación de la API de Google Flights Deals |
| Documentación del servidor | Documentación del servidor MCP |
| Todas las herramientas en un solo servidor | HasData/hasdata-mcp |
| Tutoriales para clientes | Clientes MCP e integraciones |
| Planes y costos de créditos | Planes y costos de créditos |
Desarrollo
npm install
npm test
Las pruebas en test/ verifican el contrato de la herramienta, la parte que puede romperse sin un commit aquí. Comprueban que ?apis=google_travel_flights_deals devuelve la única herramienta esperada, que su nombre y parámetros requeridos no han cambiado, que incluye una descripción, y que una búsqueda real aún devuelve flightDeals con los campos documentados.
Contribuciones
La tabla de parámetros y el ejemplo anterior se leyeron del esquema en vivo y de una llamada real, no de la documentación. Se agradece una corrección cuando un campo o un modo de fallo ha cambiado. Abre un issue con la respuesta que viste.
Licencia
MIT