Google Flights Deals MCP Server
Transforme uma ideia de viagem em linguagem simples em ofertas de voos com datas a partir de um único ponto de origem, com tarifas, preços típicos, companhias aéreas e links de reserva, em JSON estruturado.
Documentação
Google Flights Deals MCP Server
Um servidor de Model Context Protocol (MCP) hospedado que oferece ao Claude, Cursor, Windsurf e qualquer outro cliente MCP uma ferramenta de ofertas do Google Flights. Descreva uma viagem em linguagem natural, como "flor de cerejeira no Japão" ou "escapada de praia", e receba tarifas com datas a partir de um aeroporto de origem, com o preço típico ao lado, a companhia aérea, as escalas e um link de reserva, como JSON estruturado.
1.000 créditos grátis todo mês, sem necessidade de cartão, o que equivale a cerca de 66 buscas.
https://mcp.hasdata.com/mcp?apis=google_travel_flights_deals
Conteúdo
- O que você precisa
- Início rápido
- Exemplos de prompts
- Ferramentas
- Erros e caminhos de falha
- Preços, plano gratuito e limites
- Como se compara
- FAQ
- Links da HasData
- Desenvolvimento
- Contribuição
- Licença
O que você precisa
Um cliente MCP e uma chave de API da HasData do painel de controle, gratuita para criar sem cartão, e o plano gratuito cobre cerca de 66 chamadas por mês na taxa de 15 créditos. Este é um servidor remoto, então o caminho mais simples é uma URL e um cabeçalho x-api-key, sem contêiner para executar e sem conta do Google em nenhum lugar do fluxo. Um cliente que só fala stdio o acessa por meio de um lançador leve, publicado como @hasdata/google-flights-deals-mcp no npm e hasdata-google-flights-deals-mcp no PyPI, mostrado abaixo.
Início rápido
A URL do servidor é a mesma para todos os clientes. Nós o executamos na prática no Claude Code e no Claude Desktop. Os outros blocos seguem o formato documentado de cada cliente para um servidor remoto.
| Campo | Valor |
|---|---|
| URL | https://mcp.hasdata.com/mcp?apis=google_travel_flights_deals |
| Transporte | HTTP, transmissível |
| Cabeçalho de autenticação | x-api-key: HASDATA_API_KEY |
Clientes com suporte a OAuth podem adicionar a mesma URL como conector e entrar sem colocar uma chave em um arquivo de configuração.
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" }
}
}
}
Exemplos de prompts
Prompts, não código. Cole um e o agente escolhe a ferramenta sozinho. Cada um é anotado com as chamadas que faz, porque cada chamada bem-sucedida custa 15 créditos.
Quero ver flor de cerejeira no Japão, saindo de LAX. Quais são as datas mais baratas?
Uma chamada, 15 créditos. O Google escolhe os destinos e o intervalo de datas a partir da descrição.
Escapada de praia saindo de Londres em fevereiro, nada acima de 600 libras, somente voos diretos.
Uma chamada, 15 créditos. O teto de preço e o filtro de escalas exigem um destino fixado com arrivalId, então o agente precisa nomear um ou remover os filtros.
Mesma viagem, mas para Tóquio especificamente, dez dias, classe executiva.
Uma chamada, 15 créditos. Com arrivalId definido, a duração da viagem e a cabine ficam disponíveis.
Compare a ideia de flor de cerejeira saindo de LAX e de JFK.
Duas chamadas, 30 créditos. Uma origem por chamada.
Ferramentas
| Ferramenta | O que retorna |
|---|---|
hasdata_google_travel_flights_deals_getGoogleFlightsDeals | Ofertas com datas, tarifa, preço típico da rota, duração do voo, duração da viagem, escalas, companhia aérea operadora, aeroportos e link de reserva do Google Flights, além dos destinos e intervalo de datas que o Google derivou da consulta. 15 créditos por chamada |
Uma ferramenta, 15 créditos por chamada bem-sucedida.
Encontrar ofertas de voos
hasdata_google_travel_flights_deals_getGoogleFlightsDeals
| Parâmetro | Tipo | Obrigatório | Observações |
|---|---|---|---|
q | string | sim | Descrição da viagem em texto livre, de um nome de lugar simples a uma frase completa |
departureId | string | sim | Origem como código IATA de três letras em maiúsculas, por exemplo LAX |
arrivalId | string | Fixa o destino em vez de deixar o Google escolher. Todos os filtros abaixo precisam dele | |
type | string | roundTrip (padrão) ou oneWay | |
travelClass | string | economy, premiumEconomy, business ou first | |
outboundDate | string | Uma data exata, ou um intervalo como 2026-12-01,2026-12-10 | |
returnDate | string | Mesma grafia de outboundDate, e obrigatório junto com ele | |
travelDuration | string | Duração predefinida, week, weekend ou twoWeeks | |
tripLength | string | Duração em dias, em vez de returnDate ou travelDuration | |
stops | string | nonStop, oneStopOrFewer ou twoStopsOrFewer | |
maxDuration | number | Teto por voo em minutos | |
maxPrice | number | Teto na moeda da solicitação | |
includeAirlines / excludeAirlines | string | Um ou outro, nunca ambos |
Os filtros são o ponto mais importante para acertar. Todos exigem arrivalId. Um prompt que pede voos diretos abaixo de um teto de preço enquanto deixa o Google escolher o destino está pedindo duas coisas que não podem ser combinadas, e a API responde com um 422 nomeando o par problemático. Fixe um destino ou remova os filtros.
searchInformation informa o que o Google entendeu da consulta: o aeroporto departure completo com cidade e coordenadas, o dateRange que ele definiu, o priceRange que encontrou e o airlines envolvido.
{
"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 e recursos
O servidor expõe 7 recursos, um para cada parâmetro cujos valores aceitos são uma lista fixa. Ler um é mais barato do que aprender o vocabulário com uma chamada rejeitada, e não custa créditos. Cada URI é hasdata://google_travel_flights_deals/<parameter>.
| Parâmetro | Valores | O que seleciona |
|---|---|---|
type | 4 | Tipo de voo. Exige arrivalId. - 1 / roundTrip — ida e volta (padrão) - 2 / oneWay — somente ida Uma oferta de somente ida não traz returnDate nem tripLengthDays. |
travelClass | 8 | Classe de viagem. Exige arrivalId. - 1 / economy — econômica (padrão) - 2 / premiumEconomy — econômica premium - 3 / business — executiva - 4 / first — primeira As tarifas sobem acentuadamente: na rota LAX-NRT, a mesma busca custou $730 na econômica contra $2882 na executiva. |
travelDuration | 6 | Duração predefinida da viagem. Exige arrivalId. Não pode ser combinada com returnDate ou tripLength. - 1 / week — cerca de uma semana (6-8 dias) - 2 / weekend — um fim de semana (2-3 dias) - 3 / twoWeeks — cerca de duas semanas (13-15 dias) Combina com outboundDate para limitar o período de partida. Ignorada quando type é oneWay. |
stops | 6 | Número máximo de escalas. Exige arrivalId. Se omitido, qualquer número é permitido. - 1 / nonStop — somente voos diretos - 2 / oneStopOrFewer — no máximo uma conexão - 3 / twoStopsOrFewer — no máximo duas conexões Uma rota sem nada nesse nível retorna um array flightDeals vazio, não um erro — nonStop em uma rota sem voo direto é uma resposta válida e vazia. |
gl | 245 | O código de país de duas letras para o país ao qual você quer limitar a busca. |
hl | 159 | O código de idioma de duas letras para o idioma que você quer usar na busca. |
currency | 71 | O parâmetro define a moeda dos preços retornados |
A lista é servida sem chave de API, então um cliente pode lê-la antes de o usuário se cadastrar.
Erros e caminhos de falha
Seu cliente quase nunca vê um código de erro HTTP de uma chamada de ferramenta. A camada MCP responde com 200 e coloca a falha dentro do resultado, com isError definido como true e o motivo como texto.
discountPercent é a exceção, não a regra. Em 351 ofertas medidas em 2026-10-05, ele estava presente em 109 delas. Onde aparece, corresponde à diferença entre price e typicalPrice dentro de uma etapa de arredondamento, e onde está ausente, essa diferença variou de 4% a 15%, então o Google parece publicar o campo apenas acima de um limite próprio. typicalPrice estava em todas as ofertas, então calcule a comparação você mesmo em vez de informar "sem desconto" porque a chave está ausente.
airline e airlineCode desaparecem juntos. Na mesma amostra, 269 ofertas nomearam uma companhia aérea e 82 não, e a divisão é exatamente o sinalizador multipleAirlines: toda oferta que o definiu como true omitiu ambos os campos, toda oferta que não o definiu trouxe ambos. Leia o sinalizador antes de informar uma companhia aérea e diga "várias companhias aéreas" em vez de deixar o campo em branco.
Um filtro sem arrivalId é rejeitado antes de ser executado. A API responde com 422 e rule: "requiredIfExists" nomeando tanto arrivalId quanto o filtro que o acionou, e nada é cobrado. Todos os onze filtros se comportam assim, então a falha é clara e barata, não silenciosa.
As datas são as que o Google escolheu, a menos que você as fixe. searchInformation.dateRange é o intervalo que ele buscou, que pode estar a meses de distância de hoje. Cite-o ao apresentar preços, porque uma tarifa para março do ano que vem não é uma tarifa para o próximo mês.
Cada chamada bem-sucedida gasta créditos da conta conectada. Nem um 422 de validação nem um 400 do upstream são cobrados, medido pela leitura do saldo antes e depois de uma chamada.
Preços, plano gratuito e limites
A ferramenta de ofertas do Google Flights custa 15 créditos por chamada bem-sucedida, o mesmo que a API do Google Flights. O número de ofertas retornadas não altera o preço.
O plano gratuito é 1.000 créditos todo mês sem cartão, o que equivale a cerca de 66 buscas.
Os planos pagos começam em US$ 59 por mês para 200.000 créditos, o que equivale a cerca de 13.000 buscas. O preço unitário cai em planos maiores. Os números atuais estão na página de planos.
Como se compara
| API do Google Flights | Este servidor | |
|---|---|---|
| Entrada | Uma origem, um destino e datas | Uma frase, com o destino opcional |
| Quem escolhe o destino | Você | O Google, a partir da descrição |
| Quem escolhe as datas | Você | O Google, a menos que você as fixe |
| Melhor para | Uma viagem que alguém já decidiu | Uma viagem que alguém ainda está imaginando |
Os dois ficam lado a lado em vez de competir. Use este para descobrir onde e quando, e depois a API do Google Flights para precificar o itinerário quando a viagem estiver decidida.
FAQ
Preciso de uma conta do Google?
Não. A única credencial envolvida é a sua chave da HasData.
Por que meus filtros foram ignorados?
Eles quase certamente saíram sem arrivalId. Todo filtro desta ferramenta precisa de um destino fixado, e uma solicitação que o omita ainda é bem-sucedida.
Posso buscar de várias origens ao mesmo tempo?
Não. departureId aceita um aeroporto, então comparar origens significa uma chamada para cada.
Com quanta antecedência ele busca?
Até onde o Google decidir a partir da consulta. Leia searchInformation.dateRange em vez de presumir as próximas semanas.
A HasData é afiliada ao Google?
Não. A HasData é um provedor independente de dados da web e não é afiliada, endossada ou patrocinada pelo Google. Todas as marcas registradas pertencem aos seus proprietários.
Conformidade e dados pessoais
O servidor lê a interface pública de ofertas do Google Flights. Ele não carrega dados de passageiros e não reserva nada.
Links da HasData
| Página do produto e construtor de solicitações | Google Flights API |
| Documentação do endpoint | Google Flights Deals API docs |
| Documentação do servidor | MCP server docs |
| Todas as ferramentas em um único servidor | HasData/hasdata-mcp |
| Tutoriais para clientes | MCP clients and integrations |
| Planos e custos de créditos | Plans and credit costs |
Desenvolvimento
npm install
npm test
Os testes em test/ verificam o contrato da ferramenta, a parte que pode quebrar sem um commit aqui. Eles verificam que ?apis=google_travel_flights_deals retorna a única ferramenta esperada, que seu nome e parâmetros obrigatórios não mudaram, que ela possui uma descrição e que uma busca real ainda retorna flightDeals com os campos documentados.
Contribuindo
A tabela de parâmetros e o exemplo acima foram lidos do esquema ao vivo e de uma chamada real, em vez de documentação. Uma correção é bem-vinda quando um campo ou um modo de falha mudou. Abra uma issue com a resposta que você viu.
Licença
MIT