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
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
- Seleção de ferramentas
- Comparação
- 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 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.
| Campo | Valor |
|---|---|
| URL | https://mcp.hasdata.com/mcp?apis=google_travel_flights |
| 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 "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
| Ferramenta | O que retorna |
|---|---|
hasdata_google_travel_flights_getGoogleFlights | Preç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âmetro | Tipo | Obrigatório | Observações |
|---|---|---|---|
departureId | string | sim | Código IATA como JFK, ou um kgmid de local como /m/02_286. Separe vários aeroportos por vírgula |
arrivalId | string | sim | Mesmo formato que departureId |
outboundDate | string | sim | YYYY-MM-DD |
type | string | roundTrip por padrão, oneWay, ou multiCity com multiCityJson | |
returnDate | string | Obrigatório quando type é roundTrip | |
travelClass | string | economy, premiumEconomy, business ou first | |
stops | string | nonStop, oneStopOrFewer ou twoStopsOrFewer | |
sortBy | string | topFlights padrão, além de price, duration, emissions, departureTime, arrivalTime | |
adults / children / infantsInSeat / infantsOnLap | number | Composição de passageiros | |
maxPrice / maxDuration / bags | number | Limites e quantidade de bagagem de mão | |
includeAirlines / excludeAirlines | string | Códigos IATA de companhias aéreas separados por vírgula, um ou outro, não ambos | |
departureToken | string | Selecione uma opção de ida e busque a volta ou o próximo trecho | |
bookingToken | string | Busque opções de reserva para um itinerário escolhido | |
currency / gl / hl | string | Moeda e o país e idioma da pesquisa | |
deepSearch | boolean | Corresponder 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.
carbonEmissionsestá em gramas, não em quilogramas.thisFlight: 433000é 433 kg.differencePercentcompara comtypicalForThisRoute, 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.
| Prompt | O que faz |
|---|---|
google_flights | Comparar 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âmetro | Valores | O que seleciona |
|---|---|---|
type | 3 | Especifica 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. |
gl | 245 | O código de país de duas letras do país ao qual você quer limitar a pesquisa. |
hl | 159 | O código de idioma de duas letras do idioma que você quer usar na pesquisa. |
currency | 71 | O parâmetro define a moeda dos preços retornados |
travelClass | 4 | A classe de viagem do voo (Econômica, Econômica Premium, Executiva ou Primeira). |
sortBy | 6 | Ordenar os resultados de voo por preço, horário de partida, horário de chegada, etc. |
stops | 3 | Restringir 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 Google | Este servidor | |
|---|---|---|
| Disponibilidade | Nenhuma desde o fechamento do QPX Express em 2018 | Schema mantido sobre os resultados ao vivo |
| Dados de emissões | Não oferecidos | Por itinerário, comparados à média da rota |
| Histórico de preços | Não oferecido | priceInsights com uma faixa típica |
| Configuração | Nada para configurar, porque não existe | Uma chave e uma URL |
| Custo | Não aplicável | Pago 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ções | Google Flights API |
| Documentação do servidor | MCP server docs |
| Todas as 57 ferramentas em um único servidor | HasData/hasdata-mcp |
| Tutoriais de clientes | MCP clients and integrations |
| Tudo o mais que extraímos | Google Flights API and 54 more |
| Planos e custos de créditos | Plans and credit costs |
| Chaves e uso | HasData dashboard |
| Lançador Node no npm | @hasdata/google-flights-mcp |
| Lançador Python no PyPI | hasdata-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.