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 oferece 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 aposentada para contornar.

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

Glama score tool contract MCP Tools npm PyPI License

Conteúdo

O que você precisa

Um cliente MCP e uma chave de API da HasData do painel, gratuita para criar sem cartão, e o teste cobre cerca de 66 chamadas 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/api/mcp?apis=google_travel_flights
TransporteHTTP, streamable
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/api/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/api/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 ao 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 o 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:

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

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

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

.vscode/mcp.json no workspace:

{
  "servers": {
    "google-flights": {
      "type": "http",
      "url": "https://mcp.hasdata.com/api/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 cada 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 em uma única solicitação.

$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 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 cada.

Ferramentas

Uma ferramenta, somente leitura. O exemplo abaixo é extraído de uma chamada real, e as tarifas mudam constantemente. Leia-o como uma forma. 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.

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, mais 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 sua volta ou próximo trecho
bookingTokenstringBusque opções de reserva para um itinerário escolhido
currency / gl / hlstringMoeda e o país e idioma da busca
deepSearchbooleanCorresponder ao que o Google mostra no 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 [timestamp, price] pontos. airports ecoa os aeroportos de partida e chegada resolvidos, com cidade e país.

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 de 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 própria conexão 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ários 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 carregam dados também carregam um requestMetadata.id que vale citar no suporte.

Preços, plano gratuito e limites

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

O teste gratuito é 1.000 créditos por 30 dias sem cartão, o que dá cerca de 66 buscas de voos. Depois disso, uma conta ativa continua recebendo 100 créditos recarregados diariamente sempre que o saldo cair abaixo de 100, então um agente de baixo volume roda no plano gratuito indefinidamente.

Os planos pagos começam em US$ 49 por mês por 200.000 créditos, o que dá cerca de 13.000 buscas. O preço unitário cai com o volume, de US$ 3,68 por 1.000 chamadas no plano inicial para US$ 1,49 no Business, US$ 1,25 no Growth e US$ 1,12 nos maiores planos de alto volume.

Seu plano também define a concorrência. O teste gratuito permite 1 solicitação por vez, Startup 15, Business 30, Growth 50, e os planos de alto volume vão de 200 a 1.500. Trate o caso de estouro defensivamente em qualquer coisa não supervisionada.

Uma solicitação que volta com status diferente de 200 não é cobrada. Uma ida e volta são duas chamadas, então faça o orçamento para isso.

Seleção de ferramentas

O parâmetro de consulta apis decide quais ferramentas seu agente vê. Menos ferramentas significa menos contexto gasto em definições de ferramentas e menos chances de o modelo alcançar 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 solicitação falha com 400, e o corpo 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.

Comparação

O Google aposentou sua API de voos QPX Express em 2018 e nunca a substituiu, então não há uma API oficial do Google Flights. Os caminhos restantes são extrair os resultados públicos ou licenciar dados brutos de tarifas GDS, o que é pesado e caro. Este servidor lê os mesmos resultados que o site mostra e os retorna como JSON.

API oficial do GoogleEste servidor
DisponibilidadeNenhuma desde que o QPX Express foi encerrado 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 teste, 15 créditos por chamada

O que este servidor não faz. Não faz reservas e não processa 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. Toda opção lê os mesmos resultados públicos que o site exibe. Este é mantido 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 exige 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 combinam com ela. Isso espelha como o site funciona, 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 isso à média da rota.

O que é busca profunda?

Um modo mais lento que retorna exatamente o que o Google Flights mostra em um navegador. Deixe desativado para velocidade, 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ê obtém 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 solicitaçõesAPI do Google Flights
Documentação do servidorDocs do servidor MCP
Todas as 57 ferramentas em um servidorHasData/hasdata-mcp
Tutoriais de clientesClientes e integrações MCP
Tudo o mais que extraímosAPI do Google Flights e mais 54
Planos e custos de créditosPlanos e custos de créditos
Chaves e usoPainel da HasData
Lançador Node no npm@hasdata/google-flights-mcp
Lançador Python no PyPIhasdata-google-flights-mcp

Desenvolvimento

Este repositório é configuração e documentação para um servidor remoto. Não há etapa de build e 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 no CI a cada push e uma vez por semana em um 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 de asserção diz qual.

Contribuindo

Correções na tabela de parâmetros e na amostra de resposta são a contribuição mais útil, porque são as partes que se desatualizam. 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. Veja LICENSE.