SkyAccess MCP server
SkyAccess — крупнейшая в мире площадка с объявлениями о пустых перелётах. Этот бесплатный публичный MCP-сервер позволяет любому AI-ассистенту искать более 5 000 актуальных предложений от более чем 900 сертифицированных чартерных операторов FAA Part 135 и их международных аналогов. Такие перелёты часто обходятся на 25–75% дешевле сопоставимого полноценного чартера. Сервер также предоставляет ориентировочные оценки стоимости чартера и ссылку для бронирования, которую путешественник может открыть.
Используйте размещённую версию сервера. Устанавливать ничего не нужно.
https://mcp.skyaccess.com/mcp
Установка
Каждый из вариантов ниже добавляет размещённый сервер в клиент. На вашем устройстве ничего не запускается; учётная запись, регистрация и API key не требуются.
- Claude Code:
claude mcp add --transport http skyaccess https://mcp.skyaccess.com/mcp
- Плагин Claude Code (тот же сервер и дополнительный навык, который подсказывает Claude, когда использовать каждый инструмент):
claude plugin marketplace add sky-access/skyaccess-mcp
claude plugin install skyaccess@skyaccess
- Gemini CLI:
gemini extensions install https://github.com/sky-access/skyaccess-mcp
- VS Code (GitHub Copilot): воспользуйтесь кнопкой выше или выполните команду:
code --add-mcp '{"name":"skyaccess","type":"http","url":"https://mcp.skyaccess.com/mcp"}'
- Claude (claude.ai и Claude Desktop), Cursor и другие клиенты: см. раздел «Подключение из MCP-клиента».
Другие клиенты
В этом репозитории также есть пакет для каждого клиента из списка ниже. Все пакеты подключаются к одному и тому же размещённому серверу и ничего не запускают на вашем устройстве.
Kiro
В панели Powers выберите Add Custom Power, затем Import power from GitHub и укажите https://github.com/sky-access/skyaccess-mcp. Power из powers/skyaccess добавляет сервер и навык, который подсказывает агенту Kiro, когда использовать каждый инструмент.
Gemini CLI
gemini extensions install https://github.com/sky-access/skyaccess-mcp
Настройки расширения находятся в gemini-extension.json и GEMINI.md.
Google Antigravity
Добавьте сервер в ~/.gemini/config/mcp_config.json или в .agents/mcp_config.json рабочей области. Antigravity использует serverUrl, а не url:
{ "mcpServers": { "skyaccess": { "serverUrl": "https://mcp.skyaccess.com/mcp" } } }
Либо установите папку плагина из клона этого репозитория командой /plugin install /integrations/antigravity/skyaccess. Подробнее: integrations/antigravity/skyaccess.
GitHub Copilot CLI
copilot plugin marketplace add sky-access/skyaccess-mcp
copilot plugin install skyaccess@skyaccess
Эта команда устанавливает plugins/skyaccess. В папке находятся файлы plugin.json и mcp.json формата Agent Plugins, а также манифесты Claude Code.
Параметры подключения
| Endpoint | https://mcp.skyaccess.com/mcp |
| Аутентификация | Не требуется. Сервер бесплатный и анонимный: учётная запись, регистрация, API key и OAuth не нужны. |
| Транспорт | Streamable HTTP, только POST, без сохранения состояния. Заголовок Mcp-Session-Id не выдаётся, поэтому каждый запрос обрабатывается отдельно. GET намеренно возвращает 405. |
| Обязательные заголовки | Content-Type: application/json. В заголовке Accept можно указать значение из спецификации MCP application/json, text/event-stream, только application/json, */* или не передавать его вовсе. Если в значении Accept не указано application/json и это не просто */* (например, text/html или только text/event-stream), сервер вернёт 406. |
| Формат ответа | При Accept: application/json, text/event-stream каждый ответ представляет собой одно сообщение Server-Sent Events: event: message, затем data: и JSON-RPC-ответ. Если указан только application/json, */* или заголовок Accept отсутствует, сервер возвращает обычный JSON (Content-Type: application/json). |
| Версия протокола | 2025-06-18. Также согласуются версии 2025-11-25, 2025-03-26 и 2024-11-05. |
| Ограничения частоты запросов | Для вызовов инструментов — 30 запросов за 60 секунд с одного IP-адреса клиента. Подключение не учитывается. Для request_booking — 10 запросов на чартер за час с одного IP-адреса клиента. Подробнее см. Ограничения частоты запросов. |
| География | Предложения доступны по всему миру, большая часть — в США. Цены и оценки указаны в USD. |
| Оплата | Не предусмотрена. Ни один инструмент не принимает оплату и не содержит поля для оплаты. |
| Поддержка | contact@skyaccess.com |
| Политика конфиденциальности | https://skyaccess.com/privacy#connector |
| Условия использования | https://skyaccess.com/terms |
Подключение из MCP-клиента
Сервер можно подключить напрямую из любого клиента, который поддерживает удалённые MCP-серверы через Streamable HTTP. Оставьте поле аутентификации пустым.
-
Claude (claude.ai и Claude Desktop): откройте Settings, выберите Connectors, Add custom connector и вставьте
https://mcp.skyaccess.com/mcp. -
Claude Code, Gemini CLI и VS Code: см. раздел «Установка».
-
Cursor: добавьте следующий код в
~/.cursor/mcp.json:
{ "mcpServers": { "skyaccess": { "url": "https://mcp.skyaccess.com/mcp" } } }
- VS Code, вручную: добавьте следующий код в
.vscode/mcp.jsonрабочей области:
{ "servers": { "skyaccess": { "type": "http", "url": "https://mcp.skyaccess.com/mcp" } } }
- Клиенты, поддерживающие только stdio (например, Claude Desktop с файлом
claude_desktop_config.json): используйте мост из этого репозитория. См. раздел «Локальный установщик и мост stdio».
Проверка с помощью curl
Получить список инструментов:
curl -sS https://mcp.skyaccess.com/mcp \
-H 'Content-Type: application/json' \
-H 'Accept: application/json, text/event-stream' \
-d '{"jsonrpc":"2.0","id":1,"method":"tools/list"}'
Найти пустые перелёты (только чтение):
curl -sS https://mcp.skyaccess.com/mcp \
-H 'Content-Type: application/json' \
-H 'Accept: application/json, text/event-stream' \
-d '{"jsonrpc":"2.0","id":2,"method":"tools/call","params":{"name":"search_empty_legs","arguments":{"origin":"Los Angeles","destination":"Las Vegas","passengers":4}}}'
Сервер не сохраняет состояние, поэтому обе команды работают без предварительного рукопожатия initialize. MCP-клиенты всё равно отправляют такой запрос, и сервер обрабатывает его обычным образом.
Инструменты
| Инструмент | Тип | Описание |
|---|---|---|
search_empty_legs | Только чтение | Ищет актуальные пустые перелёты по параметрам origin, destination, departureDateFrom, departureDateTo, passengers и max_price (USD). Все параметры необязательны. Возвращает до 5 вариантов с маршрутом, временем вылета, стоимостью всего воздушного судна (налоги и сборы отображаются при оформлении заказа), данными о самолёте, количеством мест, удобствами, flightId и ссылкой для бронирования. |
get_flight | Только чтение | Повторно получает сведения о перелёте по flightId или сообщает, что он больше недоступен. |
booking_handoff | Только чтение | Возвращает ссылку на страницу бронирования SkyAccess для указанного flightId. Инструмент ничего не создаёт, не резервирует и не изменяет: путешественник самостоятельно проверяет данные и оформляет бронирование на странице. |
get_charter_estimate | Только чтение | Возвращает ориентировочный диапазон цен в USD для каждой категории воздушных судов, а также продолжительность перелёта по маршруту из origin в destination. Параметры passengers и aircraftCategory необязательны. |
request_booking | Запись | Отправляет в SkyAccess имя и адрес электронной почты путешественника, а также данные поездки (origin, destination, departureDate, passengers и необязательные notes). Вскоре специалист SkyAccess свяжется по электронной почте, чтобы подтвердить доступность и стоимость. Оплата не взимается, бронирование не создаётся. |
Если у перелёта указано price: null, значит опубликованной цены нет (SkyAccess отображает такой вариант как «Уточните цену»). Такие перелёты могут появляться в результатах даже при заданном max_price, поскольку их стоимость неизвестна.
Для каждого инструмента заданы аннотации MCP: у четырёх инструментов только для чтения установлено readOnlyHint: true, а у request_booking — readOnlyHint: false.
Примеры запросов
-
«Найди частный самолёт из Лос-Анджелеса в Лас-Вегас на этой неделе для четырёх человек». (
search_empty_legs) -
«Есть ли недорогие рейсы на частном самолёте из Майами на Багамы?» (
search_empty_legs) -
«Покажи пустые перелёты из Тетерборо в Палм-Бич и дай ссылку для бронирования самого дешёвого варианта». (
search_empty_legs, затемbooking_handoff) -
«Сколько будет стоить чартер частного самолёта из Тетерборо в Аспен для шести человек?» (
get_charter_estimate) -
«Какие выгодные предложения на частные самолёты вылетают из Далласа в эти выходные?» (
search_empty_legs) -
«Сколько примерно стоит перелёт на частном самолёте из Нью-Йорка в Лондон для восьми пассажиров?» (
get_charter_estimate)
Предложения постоянно меняются, поэтому результаты поиска могут отличаться при каждом запуске.
Данные и конфиденциальность
Для четырёх инструментов только для чтения персональные данные не нужны. request_booking — единственный инструмент, который передаёт персональные данные: указанное путешественником имя и адрес электронной почты, а также сведения о поездке и заметки отправляются в SkyAccess, чтобы специалист мог ответить. Вызывайте этот инструмент только по просьбе путешественника связаться с ним через SkyAccess.
Подробнее о том, как SkyAccess обрабатывает эти данные: https://skyaccess.com/privacy#connector
Ограничения частоты запросов
Текущие ограничения на IP-адрес клиента:
-
Вызовы инструментов: 30 запросов за 60 секунд. Каждый запрос с вызовом
tools/callучитывается один раз. Установка соединения не учитывается:initialize,notifications/initialized,notifications/cancelled,tools/list,ping, а такжеGET-запрос MCP-клиента для открытия необязательного потока SSE (в ответ возвращается405). Таким образом, типичный цикл клиента (подключение, получение списка инструментов, вызов одного инструмента) расходует 1 запрос. Любой другой метод учитывается; учитываются также установочные запросы размером более 8 КБ, переданные частями или сжатые, и пакетные запросы с повторяющимися установочными методами. В ответах на учитываемые вызовы инструментов передаются заголовкиRateLimit-Policy: 30;w=60,RateLimit-Limit,RateLimit-RemainingиRateLimit-Reset(в ответеrequest_bookingпередаются значения часового ограничения); в ответах на установочные запросы таких заголовков нет. -
10 запросов на чартер в час. Это ограничение распространяется только на запросы с вызовом
request_booking. -
На один запрос: пакет JSON-RPC может содержать не более 4 вызовов инструментов и не более 1 вызова
request_booking. Для более крупных пакетов сервер возвращает400.
При превышении лимита сервер возвращает HTTP 429 с кодом ошибки JSON-RPC -32029. Заголовок RateLimit-Reset указывает, сколько секунд осталось до сброса лимита; повторите запрос после этого времени.
Устранение неполадок
| Симптом | Причина и решение |
|---|---|
406 Not Acceptable | В заголовке Accept не указано application/json, а его значение не равно только */* (например, указано только text/html или text/event-stream). Передайте Accept: application/json, text/event-stream, application/json или */* либо не указывайте заголовок Accept. |
429, ошибка JSON-RPC -32029 | Достигнут лимит запросов. «Max 30 requests per minute» — это ограничение на вызовы инструментов (установка соединения в него не входит); «Max 10 booking submissions per hour» — ограничение на вызовы request_booking. Подождите указанное в RateLimit-Reset количество секунд, затем повторите запрос. |
405 | Запрос был отправлен методом GET. Передавайте JSON-RPC через POST. MCP-клиенты отправляют один GET, чтобы открыть необязательный поток SSE, и воспринимают ответ 405 как сообщение о том, что поток не предоставляется. Это ожидаемое поведение, и такой запрос не учитывается при подсчёте лимита. |
400 "Only one request_booking call is allowed per request" или "At most 4 tool calls are allowed per request" | Разбейте пакет JSON-RPC на несколько запросов меньшего размера. |
| "No published empty leg flight matches that id." | Рейс больше не опубликован (забронирован, снят с публикации или уже вылетел) либо указан неверный идентификатор. Повторно выполните search_empty_legs. |
get_charter_estimate возвращает "Estimate temporarily unavailable. Please try again." | Это же сообщение возвращается, если название места не распознано. Повторите запрос, указав название крупного города или код аэропорта, например KTEB. |
Локальный установщик и stdio-мост (npm-пакет)
npm-пакет skyaccess-mcp выполняет две задачи. Для его работы требуется Node версии 20 или выше; зависимостей времени выполнения у него нет.
-
Пакет добавляет запись SkyAccess в конфигурации поддерживаемых MCP-клиентов, найденных на компьютере (Cursor и файл конфигурации Claude Desktop). Редактировать JSON вручную не требуется.
-
Пакет предоставляет мост от stdio к HTTP для клиентов, которые не поддерживают URL.
npx -y skyaccess-mcp # register with every supported client found on this machine
npx -y skyaccess-mcp --dry-run # show what would be written, write nothing
npx -y skyaccess-mcp doctor # check the endpoint and list its tools
npx -y skyaccess-mcp bridge # the stdio to HTTP bridge (clients spawn this)
Команда doctor проверяет конечную точку и выводит список её инструментов. Она завершается с ненулевым кодом, если конечная точка недоступна или не возвращает инструменты.
Чтобы вручную подключить мост к клиенту, который поддерживает только stdio, например Claude Desktop через claude_desktop_config.json, используйте такую конфигурацию:
{
"mcpServers": {
"skyaccess": {
"command": "npx",
"args": ["-y", "skyaccess-mcp", "bridge"]
}
}
}
Те же команды можно выполнять из клона этого репозитория с помощью node bin/skyaccess-mcp.mjs .
Параметры: --url , --client , --dry-run, --help.
Как установщик работает с файлами конфигурации
-
Установщик изменяет конфигурацию клиента, только если соответствующая папка уже существует. Поэтому он не создаёт
~/.cursorна компьютере без Cursor. -
Установщик сохраняет все остальные ключи файла, поэтому настройки других MCP-серверов остаются без изменений.
-
Если файл конфигурации не удаётся разобрать как JSON, установщик оставляет его без изменений и сообщает об этом. Существующие файлы конфигурации не перезаписываются.
-
Перед заменой существующей записи SkyAccess установщик сохраняет её резервную копию в
.skyaccess-backup.
Примечания по реализации
-
Зависимостей времени выполнения нет, поэтому не требуется проверять транзитивную цепочку поставок. Используется обычный ESM без этапа сборки: поставляемый код совпадает с содержимым
src/. -
Мост записывает в stdout только JSON-RPC — по одному сообщению в строке; все диагностические сообщения отправляются в stderr. Любая посторонняя запись в stdout нарушит работу протокола.
-
Если на уведомление получен ответ
202, мост не выводит строку в stdout, поскольку ответ, которого клиент не запрашивал, нарушает протокол. -
Если HTTP-запрос завершается ошибкой, мост возвращает ошибку JSON-RPC с тем же
id. Благодаря этому клиент сразу получает ошибку, а не ждёт ответа бесконечно.
Разработка
npm install # installs vitest, the only dev dependency
npm test # offline suite against a real local HTTP server, no network
npm run test:live # opt-in live suite against https://mcp.skyaccess.com/mcp
Набор тестов test:live отправляет только initialize и tools/list. Он не входит в npm test, поскольку зависит от DNS и публичного интернета, которые не позволяют судить о корректности кода.
Манифесты интеграций
Эти файлы указывают клиентам адрес размещённой конечной точки. Ни один из них не запускает код.
| Файл | Используется |
|---|---|
gemini-extension.json, GEMINI.md | Расширение Gemini CLI (gemini extensions install) и каталог расширений Gemini CLI |
.claude-plugin/marketplace.json | Каталог плагинов Claude Code (claude plugin marketplace add sky-access/skyaccess-mcp) |
plugins/skyaccess/ | Сам плагин Claude Code: .claude-plugin/plugin.json, .mcp.json, навык empty-legs и его README |
plugins/skyaccess/plugin.json, plugins/skyaccess/mcp.json | Тот же плагин в формате Agent Plugins версии 1.0.0 для GitHub Copilot CLI, VS Code и каталога Awesome Copilot |
powers/skyaccess/ | Power для Kiro в формате Agent Plugins: plugin.json, mcp.json, навык empty-legs и его README |
integrations/antigravity/skyaccess/ | Плагин Google Antigravity: plugin.json (только название и описание) и mcp_config.json (serverUrl) |
integrations/dify/ | Исходный код плагина инструментов Dify для Dify Marketplace: четыре инструмента только для чтения, упакованные в .difypkg |
При изменении версии сервера одновременно обновите version в gemini-extension.json, plugins/skyaccess/.claude-plugin/plugin.json, plugins/skyaccess/plugin.json и powers/skyaccess/plugin.json. В манифесте Antigravity поле версии отсутствует. Для плагина Dify собственная версия указана в integrations/dify/manifest.yaml. Проверьте файлы Claude Code с помощью claude plugin validate . и claude plugin validate ./plugins/skyaccess, а расширение Gemini — с помощью gemini extensions validate ..
Лицензия
MIT. См. LICENSE.