API ВЕГА

MCP-сервер Google Flights

Размещённый сервер Model Context Protocol (MCP), который предоставляет Claude, Cursor, Windsurf и любому другому MCP-клиенту один инструмент Google Flights. Ищите билеты в одну сторону, туда и обратно, а также маршруты с несколькими городами. Результаты включают тарифы, сегменты перелётов, выбросы углекислого газа и историю цен в структурированном формате JSON. Аккаунт Google не требуется, а обходиться с устаревшим API для путешествий не нужно.

1 000 бесплатных кредитов каждый месяц, без привязки карты — этого хватит примерно на 66 поисков авиабилетов.

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

Содержание

  • Что потребуется

  • Быстрый запуск

  • Примеры запросов

  • Инструменты

  • Ошибки и сценарии сбоев

  • Стоимость, бесплатный тариф и ограничения

  • Выбор инструмента

  • Сравнение с аналогами

  • Часто задаваемые вопросы

  • Ссылки HasData

  • Разработка

  • Участие в проекте

  • Лицензия

Что потребуется

MCP-клиент и API-ключ HasData из панели управления. Регистрация бесплатна и не требует привязки карты. Бесплатного тарифа хватит примерно на 66 вызовов в месяц при стоимости 15 кредитов за вызов. Это удалённый сервер: для подключения достаточно URL и заголовка x-api-key. Запускать контейнер не нужно, аккаунт Google не потребуется. Клиенты, которые поддерживают только stdio, могут подключаться через небольшой лаунчер: пакет @hasdata/google-flights-mcp опубликован в npm, а hasdata-google-flights-mcp — в PyPI. Примеры приведены ниже.

Быстрый запуск

URL сервера одинаков для всех клиентов. Мы проверили подключение в Claude Code и Claude Desktop. Примеры для остальных клиентов составлены в соответствии с их документацией по подключению удалённых серверов.

ПолеЗначение
URLhttps://mcp.hasdata.com/mcp?apis=google_travel_flights
ТранспортHTTP, streamable
Заголовок авторизацииx-api-key: HASDATA_API_KEY

Клиенты с поддержкой OAuth можно подключить по тому же URL и выполнить вход, не указывая ключ в конфигурационном файле.

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

Откройте Settings, выберите Connectors, затем Add custom connector. Вставьте https://mcp.hasdata.com/mcp?apis=google_travel_flights и выполните вход.

Если вы настраиваете подключение через конфигурационный файл, учтите, что Claude Desktop поддерживает в нём только локальные серверы (stdio). Для подключения к удалённому серверу потребуется лаунчер stdio. Эту функцию выполняет пакет @hasdata/google-flights-mcp, который получает ключ из переменной окружения. Добавьте следующий фрагмент в claude_desktop_config.json:

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

Если вместо Node вы используете Python, замените лаунчер пакетом из PyPI. uvx запускает его без предварительной установки:

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

Cursor

Файл ~/.cursor/mcp.json используется для всех проектов, а .cursor/mcp.json — для одного проекта:

{
  "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. В Windsurf поле называется serverUrl, а не 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 в рабочей области:

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

Примеры запросов

Это запросы, а не код. Вставьте любой из них — агент сам выберет нужный инструмент. Для каждого примера указано количество вызовов: успешный вызов стоит 15 кредитов.

Найди билеты в одну сторону из JFK в лондонский аэропорт Хитроу на 15 сентября, отсортируй по цене и покажи три самых дешёвых варианта с авиакомпаниями и оценкой выбросов углекислого газа.

Один вызов — 15 кредитов. Тарифы, сегменты перелёта и данные о выбросах возвращаются вместе.

Найди варианты по тому же маршруту, но только без пересадок и бизнес-классом. Укажи, у какого варианта самые низкие выбросы.

Один вызов — 15 кредитов. Класс обслуживания и количество пересадок задаются как фильтры в одном запросе.

Хорошая ли сейчас цена — $295 за перелёт из JFK в LHR, если учитывать историю цен?

Один вызов — 15 кредитов. Ответ содержит priceInsights с типичным диапазоном цен и оценкой уровня цены.

Найди самый дешёвый билет туда и обратно из JFK в LHR: вылет 15 сентября, возвращение 22 сентября.

Два вызова — 30 кредитов. Сначала Google возвращает варианты перелёта туда, затем отдельный вызов получает обратные рейсы для выбранного варианта.

Перелёт туда и обратно по своей схеме требует двух вызовов. В первом вызове возвращаются варианты перелёта туда, каждый с собственным departureToken. Чтобы получить соответствующие обратные рейсы, передайте этот токен в следующем запросе. Для билета в одну сторону и проверки цены достаточно одного вызова на каждый запрос.

Инструменты

ИнструментЧто возвращает
hasdata_google_travel_flights_getGoogleFlightsДанные для каждого маршрута: цена и валюта, общая продолжительность, количество пересадок, сегменты перелёта с указанием авиакомпании, номера рейса, самолёта, аэропортов и времени вылета и прибытия, выбросы CO2 и многое другое. 15 кредитов за вызов

Инструмент только один, он предназначен только для чтения. Ниже приведён сокращённый пример реального вызова; цены постоянно меняются, поэтому воспринимайте его как образец структуры данных. Название инструмента ведёт на справочную страницу его конечной точки с полным перечнем параметров.

Пример показывает только полезную нагрузку, а не весь ответ. Результат tools/call содержит один текстовый блок, в котором находится JSON с полями url, status, text и json; собранные данные находятся в json. В необработанном ответе JSON-RPC путь к этим данным выглядит так: result.content[0].text. Сначала разберите его как JSON, затем обратитесь к .json. Чат-клиент выполнит это преобразование автоматически, а при прямом обращении к конечной точке из кода потребуется сделать это самостоятельно.

Результаты поиска Google Flights

hasdata_google_travel_flights_getGoogleFlights

Маршруты на выбранную дату с ценами, сегментами перелёта, данными о выбросах и историей цен.

ПараметрТипОбязательныйПримечания
departureIdstringдаКод IATA, например JFK, или идентификатор местоположения kgmid, например /m/02_286. Чтобы указать несколько аэропортов, разделите их запятыми
arrivalIdstringдаФормат такой же, как у departureId
outboundDatestringдаYYYY-MM-DD
typestringПо умолчанию roundTrip; также доступны oneWay и multiCity с параметром multiCityJson
returnDatestringОбязателен, если type имеет значение roundTrip
travelClassstringeconomy, premiumEconomy, business или first
stopsstringnonStop, oneStopOrFewer или twoStopsOrFewer
sortBystringПо умолчанию topFlights; также доступны price, duration, emissions, departureTime, arrivalTime
adults / children / infantsInSeat / infantsOnLapnumberСостав пассажиров
maxPrice / maxDuration / bagsnumberМаксимальная цена, длительность и количество мест ручной клади
includeAirlines / excludeAirlinesstringКоды авиакомпаний IATA, разделённые запятыми. Можно использовать один из параметров, но не оба одновременно
departureTokenstringВыберите вариант вылета, чтобы получить обратный рейс или следующий сегмент
bookingTokenstringПолучите варианты бронирования для выбранного маршрута
currency / gl / hlstringВалюта, страна и язык поиска
deepSearchbooleanРезультаты соответствуют тому, что Google показывает в браузере; ответ формируется медленнее

В документации также описаны параметры includeConnections, excludeConnections, layoverDuration, outboundTimes, returnTimes, showHidden, lessEmissions и multiCityJson.

Результаты разделены на bestFlights и otherFlights. Для каждого маршрута указаны price, type, totalDuration в минутах, массив сегментов flights, объект carbonEmissions и bookingToken. Каждый сегмент содержит departureAirport и arrivalAirport (с полями id, name и местным временем time), а также duration, airline, flightNumber, airplane, legroom, travelClass и массив extensions. Для сегментов, которые Google помечает как часто задерживающиеся, также указывается oftenDelayedByOver30Min. Маршрут без пересадок состоит из одного сегмента, маршрут с пересадками — из нескольких.

Значения carbonEmissions указаны в граммах, а не в килограммах. thisFlight: 433000 означает 433 кг. differencePercent показывает разницу с типичным значением для маршрута typicalForThisRoute, поэтому отрицательное число означает, что выбросы ниже среднего.

{
  "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 с полями lowestPrice, typicalPriceRange и priceLevel (например, typical), а также priceHistory — список точек [timestamp, price]. В поле airports возвращаются найденные аэропорты вылета и прибытия с указанием города и страны.

Ошибки и сценарии сбоя

При вызове инструмента клиент почти никогда не получает HTTP-ошибку. Уровень MCP отвечает с кодом 200, а сведения об ошибке помещает в результат: isError получает значение true, а причина передаётся в виде текста. Вместо строки со статусом агент получает сообщение.

Неверный ключ отображается в результате работы инструмента, а не как ошибка соединения. Метод tools/list принимает любой непустой ключ и возвращает инструмент, поэтому клиент успешно завершает рукопожатие и показывает зелёный статус. При первом вызове инструмента возвращается isError: true и текст HasData API error: 401 Unauthorized. Обратите внимание на эту строку: на предыдущих этапах проблема никак не проявляется.

Отсутствующий ключ — единственный случай настоящей HTTP-ошибки. Проверка авторизации выполняется до вызова любого инструмента, поэтому соединение завершается с ошибкой 401. Заголовки CORS передаются, и браузерный клиент видит код ответа, а не непрозрачную сетевую ошибку.

Аргумент, не соответствующий схеме инструмента, отклоняется до начала скрейпинга. Сервер возвращает isError: true и текст MCP error -32602: Input validation error, в котором указано проблемное поле. Например, здесь будут отклонены запрос roundTrip без returnDate или одновременное использование includeAirlines и excludeAirlines.

Если на указанную дату рейсов по маршруту нет, сервер возвращает успешный результат с пустыми массивами маршрутов, а не ошибку. При этом requestMetadata.status по-прежнему имеет значение ok. Прежде чем ранжировать результаты, проверьте, есть ли в них рейсы.

Неверный код аэропорта приводит к ошибке 400, а requestMetadata.status получает значение error. Используйте коды IATA или kgmid, а не названия городов.

В результатах с данными также содержится requestMetadata.id. Его стоит указывать при обращении в службу поддержки.

Стоимость, бесплатный тариф и ограничения

Каждый успешный вызов Google Flights стоит 15 кредитов. Размер ответа не влияет на стоимость; глубокий поиск стоит столько же, сколько стандартный.

Бесплатный тариф предоставляет 1 000 кредитов в месяц без привязки карты — этого примерно хватит на 66 поисков авиабилетов. Кредиты обновляются с началом нового платёжного периода, поэтому агент с небольшим объёмом запросов может бессрочно пользоваться бесплатным тарифом.

Платные тарифы начинаются от $59 в месяц за 200 000 кредитов — примерно 13 000 поисков. При увеличении объёма стоимость единицы снижается: с $4.42 за 1 000 вызовов на начальном тарифе до $1.79 на Basic и $1.25 на тарифах Growth. Актуальные цены указаны на странице тарифов.

Тариф также определяет допустимое количество параллельных запросов. Бесплатный тариф допускает 1 запрос одновременно, Startup — 5, Basic — 15, а тарифы Growth — от 50 до 500. Если запросы выполняются без постоянного контроля, обязательно предусмотрите обработку превышения лимита.

Запросы, завершившиеся с кодом, отличным от 200, не тарифицируются. Перелёт туда и обратно требует двух вызовов — учитывайте это при расчёте расходов.

Выбор инструментов

Параметр запроса apis определяет, какие инструменты будут доступны агенту. Чем меньше инструментов, тем меньше контекста расходуется на их описания и тем ниже вероятность, что модель выберет неподходящий инструмент.

?apis=google_travel_flights          единственный инструмент в этом репозитории
?apis=google_travel                   добавить Google Hotels
?apis=google_travel_flights,airbnb    авиабилеты и жильё Airbnb

В параметре можно указывать названия провайдеров, например google_travel, и отдельных API, например google_travel_flights. Названия с опечатками игнорируются. Если все указанные значения неверны, запрос завершится с ошибкой 400, а в теле ответа будут перечислены нераспознанные значения и все допустимые варианты. Если не указывать параметр, та же конечная точка предоставит доступ ко всем 57 инструментам HasData.

Сравнение с альтернативами

В 2018 году Google прекратила поддержку API авиабилетов QPX Express и не выпустила ему замену, поэтому официального API Google Flights не существует. Оставшиеся варианты либо собирают данные из публичных результатов поиска, либо используют лицензированные данные о тарифах из GDS — это сложный и дорогостоящий подход. Этот сервер получает те же результаты, что и сайт, и возвращает их в формате JSON.

Официальный API GoogleЭтот сервер
ДоступностьНе существует с момента закрытия QPX Express в 2018 годуПоддерживаемая схема, основанная на актуальных результатах поиска
Данные о выбросахНе предоставляютсяДля каждого маршрута, в сравнении со средним значением по направлению
История ценНе предоставляетсяpriceInsights с типичным диапазоном цен
НастройкаНастраивать нечего, поскольку API не существуетОдин ключ и один URL
СтоимостьНе применимоПосле исчерпания бесплатного тарифа — 15 кредитов за вызов

Чего этот сервер не делает. Он не оформляет бронирование и не принимает оплату. Сервер получает цены, сегменты перелёта и токены, которые сам Google использует для перехода к бронированию, а оформление передаёт вам.

Часто задаваемые вопросы

Существует ли официальный API Google Flights?

Нет. Google закрыла QPX Express в 2018 году и не выпустила ему замену. Все доступные варианты получают те же публичные результаты, которые показывает сайт. Этот сервер поддерживается HasData и возвращает данные в структурированном формате JSON.

Что такое MCP-сервер Google Flights?

Это сервер, который предоставляет Google Flights в виде инструмента, доступного для вызова AI-клиентом. Клиент отправляет вызов инструмента через Model Context Protocol, сервер получает данные о маршрутах и возвращает структурированный JSON, а модель обрабатывает результат. Этот сервер предоставляет один инструмент и работает удалённо.

Почему перелёт туда и обратно требует двух вызовов?

Сначала Google возвращает варианты вылета, каждый из которых содержит departureToken. Выберите подходящий вариант и передайте его токен обратно, чтобы получить соответствующие ему обратные рейсы. Так же работает сайт, поэтому перелёт туда и обратно стоит 30 кредитов.

Значения выбросов указаны в килограммах?

Нет, в граммах. thisFlight: 433000 означает 433 кг, а differencePercent показывает разницу со средним значением для маршрута.

Что такое глубокий поиск?

Это более медленный режим, который возвращает данные в точности в том виде, в каком их показывает Google Flights в браузере. Для скорости оставьте этот режим выключенным; включайте его, когда нужно получить результаты, соответствующие сайту.

Можно ли использовать это вместе с другими API HasData?

Да. Параметр apis принимает список, а ?apis=google_travel добавляет Google Hotels к авиаперелётам. Если убрать параметр, будут доступны все данные.

Соблюдение требований и персональные данные

HasData получает только общедоступные данные. Условия использования платформы могут ограничивать автоматизированный доступ, поэтому за соблюдение требований отвечаете вы.

Ссылки HasData

Страница продукта и конструктор запросовGoogle Flights API
Документация сервераДокументация MCP-сервера
Все 57 инструментов на одном сервереHasData/hasdata-mcp
Руководства по клиентамКлиенты и интеграции MCP
Все остальные источники данныхGoogle Flights API и ещё 54 источника
Тарифы и стоимость кредитовТарифы и стоимость кредитов
Ключи и статистика использованияПанель управления HasData
Запуск Node из npm@hasdata/google-flights-mcp
Запуск Python из PyPIhasdata-google-flights-mcp

Разработка

Этот репозиторий содержит конфигурацию и документацию для удалённого сервера. Сборка не требуется, и контейнеризировать здесь нечего.

Тесты в test/ проверяют контракт инструмента — ту часть, которая может измениться без коммитов в этот репозиторий. Они проверяют, что ?apis=google_travel_flights возвращает ровно один инструмент, в его описании по-прежнему указаны обязательные параметры, имя не изменилось, а используемый ключ действительно принимается. Последняя проверка вызывает инструмент по-настоящему и стоит 15 кредитов — такова цена контрольного теста, который должен завершиться ошибкой, если для этого есть основания.

# macOS and Linux
HASDATA_API_KEY=your_key_here npm test

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

Этот же набор тестов запускается в CI при каждом отправлении изменений и раз в неделю по расписанию: список инструментов во внешнем источнике может измениться, даже если в этом репозитории никто ничего не менял. Ошибка означает, что изменился список инструментов, ключ перестал работать или конечная точка недоступна. Сообщение проверки указывает, что именно произошло.

Участие в разработке

Наиболее полезны исправления таблицы параметров и примера ответа — именно эти части чаще всего устаревают. Укажите выполненный вызов и полученный ответ. Для pull request из форков тесты запускаются без ключа, а проверки доступности пропускаются, чтобы сборка не завершалась ошибкой.

Лицензия

MIT. См. LICENSE.