HasData Google Flights MCP Server

Itinerários do Google Flights com tarifas, trechos, emissões de carbono e histórico de preços, em JSON.

Documentação

Servidor MCP do Google Flights

Um servidor de Model Context Protocol (MCP) hospedado que dá ao Claude, Cursor, Windsurf e qualquer outro cliente MCP uma ferramenta do Google Flights. Pesquise itinerários de ida, ida e volta e multi-cidades com tarifas, trechos de voo, emissões de carbono e histórico de preços, tudo como JSON estruturado, sem conta Google e sem API de viagens descontinuada para contornar.

1.000 créditos grátis todo mês, sem necessidade de cartão, o que equivale a cerca de 66 pesquisas de voos.

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

Glama score tool contract MCP Tools

Conteúdo

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 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-mcp no npm e hasdata-google-flights-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.

CampoValor
URLhttps://mcp.hasdata.com/mcp?apis=google_travel_flights
TransporteHTTP, transmissível
Cabeçalho de autenticaçãox-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 "https://mcp.hasdata.com/mcp?apis=google_travel_flights" \
  --header "x-api-key: HASDATA_API_KEY"
Claude Desktop

Configurações, depois Conectores, depois Adicionar conector personalizado, depois cole https://mcp.hasdata.com/mcp?apis=google_travel_flights e entre.

Para o caminho do arquivo de configuração, o Claude Desktop carrega apenas servidores locais (stdio), então ele acessa um servidor remoto por meio de um lançador stdio. O pacote @hasdata/google-flights-mcp é esse lançador, e ele lê a chave do ambiente. Adicione isto a claude_desktop_config.json:

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

Para Python em vez de Node, troque o lançador pelo pacote PyPI, que uvx executa sem instalação manual:

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

~/.cursor/mcp.json para cada projeto, ou .cursor/mcp.json para um único:

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

~/.codeium/windsurf/mcp_config.json. O Windsurf chama o campo de serverUrl, não de url:

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

.vscode/mcp.json no espaço de trabalho:

{
  "servers": {
    "google-flights": {
      "type": "http",
      "url": "https://mcp.hasdata.com/mcp?apis=google_travel_flights",
      "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 toda chamada bem-sucedida custa 15 créditos.

Encontre voos de ida de JFK para Londres Heathrow em 15 de setembro, ordenados por preço, e me dê os três mais baratos com companhia aérea e estimativa de carbono.

Uma chamada, 15 créditos. Tarifas, trechos e emissões vêm todos juntos.

Mesma rota, mas somente sem escalas, na classe executiva, e me diga qual opção tem as menores emissões.

Uma chamada, 15 créditos. Cabine e paradas são filtros na única solicitação.

US$ 295 é um bom preço para JFK para LHR agora, considerando o histórico de preços?

Uma chamada, 15 créditos. A resposta traz priceInsights com uma faixa típica e um nível de preço.

Ida e volta JFK para LHR, ida em 15 de setembro e volta em 22 de setembro, tarifa mais barata.

Duas chamadas, 30 créditos. O Google retorna primeiro as opções de ida, depois o trecho de volta é uma segunda chamada baseada na opção que você escolher.

Uma viagem de ida e volta são duas chamadas por design. A primeira retorna itinerários de ida, cada um com um departureToken, e você passa esse token de volta para obter os voos de volta correspondentes. Ida e a verificação de preço são uma chamada única cada.

Ferramentas

FerramentaO que retorna
hasdata_google_travel_flights_getGoogleFlightsPreço por itinerário, moeda, duração total, paradas, trechos de voo com companhia aérea, número do voo, aeronave, aeroportos e horários de partida/chegada, emissões de CO2, além de…. 15 créditos por chamada

Uma ferramenta, somente leitura. O exemplo abaixo é reduzido de uma chamada real, e as tarifas mudam constantemente. Leia-o como uma estrutura. O nome da ferramenta leva à referência do endpoint, que traz a lista completa de parâmetros.

O exemplo é o payload, não a resposta inteira. Um resultado tools/call carrega um bloco de texto, e esse texto é ele próprio JSON contendo url, status, text e json, com os dados extraídos sob json. De uma resposta JSON-RPC bruta, o caminho é result.content[0].text, analisado, depois .json. Um cliente de chat desembrulha isso para você, e código que fala diretamente com o endpoint não faz.

Obter resultados do Google Flights

hasdata_google_travel_flights_getGoogleFlights

Itinerários para uma rota e data, com tarifas, trechos, emissões e histórico de preços.

ParâmetroTipoObrigatórioObservações
departureIdstringsimCódigo IATA como JFK, ou um kgmid de local como /m/02_286. Separe vários aeroportos por vírgula
arrivalIdstringsimMesmo formato que departureId
outboundDatestringsimYYYY-MM-DD
typestringroundTrip por padrão, oneWay, ou multiCity com multiCityJson
returnDatestringObrigatório quando type é roundTrip
travelClassstringeconomy, premiumEconomy, business ou first
stopsstringnonStop, oneStopOrFewer ou twoStopsOrFewer
sortBystringtopFlights padrão, além de price, duration, emissions, departureTime, arrivalTime
adults / children / infantsInSeat / infantsOnLapnumberComposição de passageiros
maxPrice / maxDuration / bagsnumberLimites e quantidade de bagagem de mão
includeAirlines / excludeAirlinesstringCódigos IATA de companhias aéreas separados por vírgula, um ou outro, não ambos
departureTokenstringSelecione uma opção de ida e busque a volta ou o próximo trecho
bookingTokenstringBusque opções de reserva para um itinerário escolhido
currency / gl / hlstringMoeda e o país e idioma da pesquisa
deepSearchbooleanCorresponder ao que o Google mostra em um navegador, mais lento para retornar

A referência também documenta includeConnections, excludeConnections, layoverDuration, outboundTimes, returnTimes, showHidden, lessEmissions e multiCityJson.

Os resultados são divididos em bestFlights e otherFlights. Cada itinerário carrega price, type, totalDuration em minutos, um array flights de trechos, um objeto carbonEmissions e um bookingToken. Cada trecho contém o departureAirport e o arrivalAirport (cada um com id, name e time local), duration, airline, flightNumber, airplane, legroom, travelClass, um array extensions e oftenDelayedByOver30Min em trechos que o Google sinaliza. Um itinerário sem escalas tem um trecho, uma conexão tem vários.

carbonEmissions está em gramas, não em quilogramas. thisFlight: 433000 é 433 kg. differencePercent compara com typicalForThisRoute, então um número negativo é um voo mais verde que a média.

{
  "price": 295,
  "type": "One way",
  "totalDuration": 415,
  "flights": [
    {
      "departureAirport": { "id": "JFK", "name": "John F. Kennedy International Airport", "time": "2026-09-15 8:15" },
      "arrivalAirport": { "id": "LHR", "name": "Heathrow Airport", "time": "2026-09-15 20:10" },
      "duration": 415,
      "airline": "Virgin Atlantic",
      "flightNumber": "VS 26",
      "airplane": "Boeing 787",
      "travelClass": "Economy"
    }
  ],
  "carbonEmissions": { "thisFlight": 367000, "typicalForThisRoute": 419000, "differencePercent": -12 },
  "bookingToken": "W1t7..."
}

priceInsights fica ao lado dos itinerários com lowestPrice, um typicalPriceRange, um priceLevel como typical e um priceHistory de pontos [timestamp, price]. airports ecoa os aeroportos de partida e chegada resolvidos, com cidade e país.

Prompts e recursos

O servidor traz um prompt, um fluxo de trabalho pronto que um cliente pode oferecer em vez de fazer o usuário compor uma chamada de ferramenta.

PromptO que faz
google_flightsComparar opções de voo entre dois aeroportos.

Junto a eles, o servidor expõe 7 recursos, um por 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/<parameter>.

ParâmetroValoresO que seleciona
type3Especifica o tipo de voo. Opções: - roundTrip (padrão) - oneWay - multiCity (requer multiCityJson para detalhes do voo) Para ida e volta, recupere os detalhes do voo de volta com uma solicitação separada usando departureToken.
gl245O código de país de duas letras do país ao qual você quer limitar a pesquisa.
hl159O código de idioma de duas letras do idioma que você quer usar na pesquisa.
currency71O parâmetro define a moeda dos preços retornados
travelClass4A classe de viagem do voo (Econômica, Econômica Premium, Executiva ou Primeira).
sortBy6Ordenar os resultados de voo por preço, horário de partida, horário de chegada, etc.
stops3Restringir o número de paradas (conexões) no itinerário do voo.

Ambas as listas são servidas sem chave de API, então um cliente pode lê-las 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 200 e coloca a falha dentro do resultado, com isError definido como true e o motivo como texto. O agente lê uma mensagem onde você poderia esperar uma linha de status.

Uma chave errada aparece como saída da ferramenta, não como conexão falha. tools/list aceita qualquer chave não vazia e retorna a ferramenta, então o cliente completa o handshake e mostra verde. A primeira chamada de ferramenta então volta com isError: true e o texto HasData API error: 401 Unauthorized. Fique atento a essa string, porque nada antes no fluxo relata o problema.

Uma chave ausente é o único erro HTTP real. A autorização roda antes de qualquer ferramenta, e a conexão em si falha com 401. Os cabeçalhos CORS estão presentes, e um cliente de navegador lê o status e não uma falha de rede opaca.

Um argumento que quebra o esquema da ferramenta é rejeitado antes de virar uma extração. O servidor responde com isError: true e o texto MCP error -32602: Input validation error, nomeando o campo problemático. Um roundTrip sem um returnDate, ou includeAirlines junto com excludeAirlines, é capturado aqui.

Uma rota sem voos na data retorna um resultado bem-sucedido com os arrays de itinerário vazios, não um erro. requestMetadata.status ainda lê ok. Teste os voos antes de classificá-los.

Um código de aeroporto inválido retorna 400 com requestMetadata.status definido como error. Use códigos IATA ou kgmids, não nomes de cidades.

Resultados que trazem dados também trazem um requestMetadata.id que vale citar no suporte.

Preços, plano gratuito e limites

Cada chamada ao Google Flights custa 15 créditos por chamada bem-sucedida. O tamanho da resposta não altera o preço, e a busca profunda custa o mesmo que uma busca padrão.

O plano gratuito é de 1.000 créditos por mês, sem cartão, o que equivale a cerca de 66 buscas de voos. Ele é renovado a cada ciclo de faturamento, então um agente de baixo volume funciona no plano gratuito indefinidamente.

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 conforme o volume, de US$ 4,42 por 1.000 chamadas no plano inicial para US$ 1,79 no Basic e US$ 1,25 nos níveis Growth. Os valores atuais estão na página de preços.

Seu plano também define a concorrência. O plano gratuito permite 1 requisição por vez, o Startup 5, o Basic 15, e os níveis Growth variam de 50 a 500. Trate o caso de estouro de forma defensiva em qualquer operação não supervisionada.

Uma requisição que retorna status diferente de 200 não é cobrada. Uma viagem de ida e volta equivale a duas chamadas, então inclua isso no orçamento.

Seleção de ferramentas

O parâmetro de consulta apis decide quais ferramentas seu agente enxerga. Menos ferramentas significa menos contexto gasto com definições de ferramentas e menos chances de o modelo escolher a errada.

?apis=google_travel_flights          the one tool in this repo
?apis=google_travel                   add Google Hotels
?apis=google_travel_flights,airbnb    flights plus Airbnb stays

O parâmetro aceita nomes de provedores como google_travel e nomes individuais de APIs como google_travel_flights. Nomes com erro de digitação são ignorados. Se todos os nomes estiverem errados, a requisição falha com erro 400, e o corpo da resposta lista tanto o que não foi reconhecido quanto todos os valores válidos. Remova o parâmetro e o mesmo endpoint expõe todas as 57 ferramentas da HasData.

Como ele se compara

O Google descontinuou a API QPX Express de voos em 2018 e nunca a substituiu, então não existe uma API oficial do Google Flights. As alternativas restantes são fazer scraping dos resultados públicos ou licenciar dados brutos de tarifas GDS, o que é pesado e caro. Este servidor lê os mesmos resultados que o site exibe e os retorna como JSON.

API oficial do GoogleEste servidor
DisponibilidadeNenhuma desde o fechamento do QPX Express em 2018Schema mantido sobre os resultados ao vivo
Dados de emissõesNão oferecidosPor itinerário, comparados à média da rota
Histórico de preçosNão oferecidopriceInsights com uma faixa típica
ConfiguraçãoNada para configurar, porque não existeUma chave e uma URL
CustoNão aplicávelPago após o plano gratuito, 15 créditos por chamada

O que este servidor não faz. Não faz reservas nem pagamentos. Ele lê tarifas, trechos e os tokens que o próprio Google usa para avançar para a reserva, e devolve a etapa de reserva para você.

FAQ

Existe uma API oficial do Google Flights?

Não. O Google encerrou o QPX Express em 2018 e não lançou um substituto. Todas as opções leem os mesmos resultados públicos que o site exibe. Esta é mantida pela HasData e os retorna como JSON estruturado.

O que é um servidor MCP do Google Flights?

Um servidor que expõe o Google Flights como uma ferramenta que um cliente de IA pode chamar. O cliente envia uma chamada de ferramenta pelo Model Context Protocol, o servidor busca os itinerários e retorna JSON estruturado, e o modelo trabalha com o resultado. Este expõe uma única ferramenta e roda remotamente.

Por que uma viagem de ida e volta equivale a duas chamadas?

O Google retorna primeiro as opções de ida, cada uma com um departureToken. Você escolhe uma e passa o token de volta para obter os voos de volta que fazem par com ela. Isso espelha o funcionamento do site, e é por isso que uma viagem de ida e volta custa 30 créditos.

Os números de carbono estão em quilogramas?

Não, em gramas. thisFlight: 433000 significa 433 kg, e differencePercent compara com a média da rota.

O que é busca profunda?

Um modo mais lento que retorna exatamente o que o Google Flights mostra no navegador. Deixe desativado para ganhar velocidade e ative quando precisar de paridade com o site.

Posso usar isso junto com outras APIs da HasData?

Sim. O parâmetro apis aceita uma lista, e ?apis=google_travel adiciona o Google Hotels junto com os voos. Remova o parâmetro e você recebe tudo.

Conformidade e dados pessoais

A HasData acessa apenas dados publicamente disponíveis. Os termos de uma plataforma podem restringir o acesso automatizado, e você é responsável pela sua própria conformidade.

Links da HasData

Página do produto e construtor de requisiçõesGoogle Flights API
Documentação do servidorMCP server docs
Todas as 57 ferramentas em um único servidorHasData/hasdata-mcp
Tutoriais de clientesMCP clients and integrations
Tudo o mais que extraímosGoogle Flights API and 54 more
Planos e custos de créditosPlans and credit costs
Chaves e usoHasData dashboard
Lançador Node no npm@hasdata/google-flights-mcp
Lançador Python no PyPIhasdata-google-flights-mcp

Desenvolvimento

Este repositório contém configuração e documentação para um servidor remoto. Não há etapa de build nem nada para containerizar.

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 retorna exatamente uma ferramenta, que ela ainda declara seus parâmetros obrigatórios, que o nome não mudou e que a chave em uso é realmente aceita. Essa última verificação chama a ferramenta de verdade e custa 15 créditos, que é o preço de um canário que pode falhar pelo motivo certo.

# macOS and Linux
HASDATA_API_KEY=your_key_here npm test

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

A mesma suíte roda em CI a cada push e uma vez por semana em agendamento, porque a lista de ferramentas upstream pode mudar sem que ninguém toque neste repositório. Uma falha significa que a lista de ferramentas mudou, a chave parou de funcionar ou o endpoint ficou inacessível, e a mensagem da asserção indica qual.

Contribuindo

Correções na tabela de parâmetros e no exemplo de resposta são a contribuição mais útil, porque são as partes que sofrem desvio. Inclua a chamada que você fez e a resposta que obteve. Pull requests de forks rodam a suíte sem chave, e as verificações ao vivo são puladas em vez de ficarem vermelhas.

Licença

MIT. Consulte LICENSE.