Edgegap

официальный

Развертывайте многопользовательские игровые серверы из вашего агента кодирования. Десять инструментов, которые переводят выделенный сервер Unity, Unreal или Godot из контейнерного образа к подключенным игрокам.

Что можно делать с Edgegap MCP?

  • Развертывание игрового сервера из контейнерного образа — Попросите ассистента зарегистрировать ваш контейнерный образ с настройками CPU, памяти и портов, а затем запустить его рядом с конкретными игроками.
  • Отслеживание статуса развертывания и данных для подключения — Попросите ассистента опрашивать систему, пока ваше развертывание не будет готово, и вернуть адрес подключения, либо проверить статус и логи запущенного экземпляра.
  • Управление версиями приложений — Попросите ассистента вывести список существующих приложений и версий или создать новую версию на основе настроек рабочей, чтобы избежать дублирования.
  • Корректная остановка развертываний — Поручите ассистенту завершить конкретное развертывание по ID запроса, отправив чистый сигнал завершения, а не принудительное завершение.
  • Поиск и очистка осиротевших серверов — Попросите ассистента вывести список всех развертываний из предыдущих сессий, чтобы вы могли определить и остановить неиспользуемые экземпляры.

Размещённый MCP-сервер

npx add-mcp 'https://mcp.edgegap.dev/mcp'

Устанавливается в Claude Code, Codex, Cursor и другие

Документация

edgegap-mcp

MCP-сервер для Edgegap, который позволяет кодирующему агенту провести разработчика от стадии «у меня есть контейнер игрового сервера» до «игроки подключены к нему» без необходимости читать справочник по API.

Десять инструментов, отобранных вручную. Не сгенерированы из OpenAPI-спецификации — см. Scope, почему.

Установка

Два способа запуска. Выбирайте в зависимости от того, насколько вам важно, куда попадает ваш токен — см. Where your token goes.

Удалённая конечная точка

Размещается Edgegap как Cloudflare Worker. Ничего устанавливать не нужно.

{
  "mcpServers": {
    "edgegap": {
      "type": "http",
      "url": "https://mcp.edgegap.dev/mcp",
      "headers": { "Authorization": "token YOUR_API_TOKEN" }
    }
  }
}

Также работает как пользовательский коннектор в claude.ai: добавьте https://mcp.edgegap.dev/mcp и укажите тот же токен.

Локально

Запускается на вашей собственной машине, вызывается вашим редактором. Одна строка в конфигурации MCP-клиента, ничего клонировать и собирать не нужно.

{
  "mcpServers": {
    "edgegap": {
      "command": "npx",
      "args": ["-y", "@edgegap/mcp"]
    }
  }
}

Работает в Claude Code, Cursor, Codex и VS Code. В продакшене закрепляйте версию (@edgegap/mcp@0.1.5), а не плавайте на latest.

Зарегистрирован в официальном реестре MCP как dev.edgegap/mcp.

Версия Node: локальному серверу требуется Node 18+. Для развёртывания собственной копии Cloudflare Worker требуется Node 22+, потому что wrangler требует этого.

Куда попадает ваш токен

Это различается в зависимости от режима, и именно это различие является причиной существования обоих режимов.

Локально. Сервер работает как процесс на вашем собственном компьютере. Первый вызов инструмента запрашивает у вас токен, показывает, на что он даёт разрешение, и требует явного подтверждения перед его принятием. Где затем хранится этот токен, исчерпывающе:

  • одна переменная в памяти этого процесса, на время жизни сессии вашего редактора

Это весь список. Не на диске. Не в конфигурационном файле. Не в журналах. Не на каком-либо сервере Edgegap — единственное, что отправляется в Edgegap, это сам вызов API, точно так же, как если бы вы выполнили curl. Закрытие редактора полностью отзывает доступ этого сервера.

Удалённо. Ваш токен отправляется в mcp.edgegap.dev при каждом запросе и пересылается оттуда в API Edgegap. Он проходит через инфраструктуру, которой управляет Edgegap. Worker хранит его в течение жизни запроса и не сохраняет его, но это утверждение «мы не храним его», а не «мы никогда его не видим». Это разные вещи, и только локальный режим обеспечивает второе.

Сгенерируйте токен на https://app.edgegap.com/user-settings?tab=tokens.

В локальном режиме установка EDGEGAP_API_TOKEN имеет приоритет над запросом, для CI и клиентов, которые не могут показывать запросы. Не передавайте токен в качестве аргумента командной строки — аргументы видны другим процессам через ps, и сервер предупреждает, если обнаруживает такой.

Что использовать. Удалённый режим — для первой попытки, демонстрации или контролируемой сессии, где важнее простота настройки, чем контроль над токеном. Локальный — для всего, что работает без присмотра, для всего в организации с живой игрой, и для всего, где вы предпочли бы не расширять доверие без необходимости. Ограничения, описанные ниже, существуют только в локальном режиме.

Прочитайте это перед подключением агента

Токен API Edgegap нельзя ограничить по правам. Один токен авторизует каждое приложение, каждую версию, каждый запущенный деплой и ваше использование во всей организации. Не существует токена только для деплоя и токена для отдельного приложения.

Последствия, о которых стоит подумать:

  • Агент, владеющий этим токеном, может остановить продакшен-деплои, а не только тестовые, которые он создал.
  • Инъекция промптов, достигающая агента — из файла репозитория, issue, загруженной страницы — достигает и токена.
  • Всё, что агент записывает в журнал, выводит или отправляет провайдеру модели, — это место, где токен может оказаться. Этот сервер не записывает его в журнал, но он не может контролировать, что делает остальная часть агента.
  • На удалённой конечной точке тот же неограниченный токен дополнительно обрабатывается worker'ом Edgegap при каждом вызове.

Рекомендуемая настройка, в порядке убывания осторожности:

СитуацияНастройка
Автономный агент без присмотраЛокальный режим. Отдельная непродакшен-организация, плюс EDGEGAP_READ_ONLY=1
Контролируемый агент, живая игра в организацииЛокальный режим. EDGEGAP_APP_ALLOWLIST, ограниченный приложением, над которым ведётся работа, плюс EDGEGAP_MAX_DURATION_MINUTES. Сначала прочитайте Scope of the allowlist — уже запущенные деплои не покрываются
Соло-разработчик, без продакшен-нагрузкиЛюбой режим. Настройки по умолчанию подходят; отзовите токен по завершении

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

Область действия списка разрешений

EDGEGAP_APP_ALLOWLIST применяется четырьмя инструментами, которые принимают имя приложения: edgegap_create_app, edgegap_list_app_versions, edgegap_create_app_version и edgegap_deploy.

Он не применяется пятью инструментами, ключом которых является request_id: edgegap_get_deployment, edgegap_wait_for_deployment, edgegap_list_deployments, edgegap_stop_deployment и edgegap_get_deployment_logs. Агент, работающий с установленным списком разрешений, может перечислить все деплои в организации, а затем просмотреть, прочитать журналы или остановить любой из них — включая деплои приложений, не входящих в список.

Таким образом, список разрешений ограничивает то, что агент может создавать и развёртывать, а не то, к чему он может прикоснуться после запуска. Это уже, чем подразумевалось в более ранних версиях этого документа.

Для более строгой гарантии сегодня используйте EDGEGAP_READ_ONLY=1, который вообще не регистрирует пять изменяющих инструментов, или направьте агента в отдельную непродакшен-организацию. Оба варианта не затронуты этим пробелом.

Сообщено Syed Anas Mohiuddin, сентябрь 2026.

Переменные окружения

Они настраивают локальный сервер. На удалённой конечной точке они устанавливаются Edgegap и не могут быть изменены отдельным разработчиком — если вам нужна какая-либо из них, запускайте локально.

ПеременнаяПо умолчаниюНазначение
EDGEGAP_API_TOKEN(запрашивается)Токен API. Необязателен — пропустите, и разработчика спросят при первом использовании. Префикс token добавляется автоматически.
EDGEGAP_READ_ONLY0Установите в 1, и пять изменяющих инструментов никогда не будут зарегистрированы. Агент не может их видеть, поэтому его нельзя уговорить их вызвать.
EDGEGAP_APP_ALLOWLIST(пусто)Разделённые запятыми имена приложений. При установке четыре инструмента, ключом которых является приложение, отказываются трогать что-либо ещё. Не ограничивает пять инструментов с ключом request_id — см. Scope of the allowlist.
EDGEGAP_MAX_DURATION_MINUTES60Потолок на max_duration, который агент может установить для версии. Ограничивает неконтролируемые расходы от автономного агента.
EDGEGAP_TIMEOUT_MS30000Таймаут HTTP на запрос.

Инструменты

Десять инструментов, перечисленных в порядке их следования по «золотому пути». Те же десять в обоих режимах.

ИнструментИзменяющийДля чего нужен
edgegap_list_appsОриентируйтесь перед началом работы. Предотвращает дублирование приложений.
edgegap_create_appСоздайте контейнер для версий.
edgegap_list_app_versionsНайдите развёртываемую версию или скопируйте настройки с рабочей.
edgegap_create_app_versionЗарегистрируйте образ контейнера с CPU, памятью и портами.
edgegap_deployЗапустите один экземпляр рядом с указанными игроками.
edgegap_get_deploymentОдиночное чтение статуса.
edgegap_wait_for_deploymentОпросите до готовности с экспоненциальной задержкой, затем верните адрес подключения.
edgegap_list_deploymentsНайдите осиротевшие серверы с предыдущих сессий.
edgegap_stop_deploymentКорректный SIGTERM, один деплой за раз.
edgegap_get_deployment_logsВывод контейнера и код завершения при сбое.

Проектные решения

Курируемые, а не сгенерированные. API Edgegap содержит примерно шестьдесят операций. Автоматическая генерация одного инструмента на операцию помещает все шестьдесят описаний в контекст агента при каждом ходе и заметно ухудшает выбор инструментов. Эти десять покрывают путь, который превращает нового разработчика.

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

Ошибки написаны для самокоррекции. Ошибка 424 возвращается с сообщением, что образ не удалось извлечь, и какие поля проверить. Ошибка 422 говорит попробовать другие координаты или снизить запрос ресурсов. Агент может действовать на основе этого без обращения к человеку.

Локальная валидация до отправки по сети. Несоответствие памяти и CPU, а также отсутствующее местоположение игрока обнаруживаются здесь, а не всплывают как непрозрачная ошибка 400.

Массовые операции намеренно отсутствуют. stop принимает один request_id. Нет инструмента массовой остановки, потому что агент с выражением фильтра и ошибкой может остановить продакшен-флот.

И размещённая конечная точка, и локальный пакет. Размещённая конечная точка устраняет каждый шаг между обнаружением этого сервера и вызовом инструмента — именно здесь большинство разработчиков сдаётся. Локальный пакет — единственный способ запустить сервер без передачи контроля над неограниченным токеном третьей стороне, включая нас. Ни один не доминирует над другим, поэтому поставляются оба. См. worker/DECISION.md для более подробной версии.

Scope

Намеренно не раскрыто: матчмейкинг, ретрансляторы, частные флоты, умные флоты, хранилище конечных точек, записи ACL/белых списков, теги деплоев, метрики, управление реестром контейнеров, конфигурация DNS.

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

Известное ограничение: запрос токена в принципе

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

Спецификация MCP говорит, что серверы не должны использовать элиситацию для сбора чувствительных данных, а токен API является чувствительным. Этот сервер делает это в любом случае, потому что требование токена в конфигурационном файле до начала работы — это самый большой спад в воронке онбординга, а вся суть сервера — устранить трение настройки.

Это осознанный компромисс, а не образец для копирования. Что делает его защитимым, так это набор смягчений в src/auth.ts — хранение только в памяти, раскрытие на простом языке, обязательное подтверждение, редактирование во всех выводах и переменная окружения, которая всегда побеждает, если присутствует. Удаление любого из них нарушает компромисс.

Настоящее исправление — на стороне Edgegap и улучшило бы оба режима: ограниченные, отзываемые, только для деплоя учётные данные, выдаваемые через OAuth, а не вставляемые как секрет. Пока они не существуют, интерактивный запрос — это обходной путь, и он помечен как таковой в коде.

Разработка

npm run typecheck
node smoke.mjs      # handshake, tool registration, read-only mode
node guards.mjs     # local validation and allowlist enforcement
node elicit.mjs     # token prompt: accept, refuse acknowledgement, decline, no support

Ни один из них не совершает сетевых вызовов. elicit.mjs проверяет, что запрос указывает на общеорганизационный масштаб, что подтверждение обязательно, что токен никогда не появляется в выводе инструментов и что отказ приводит к сообщению «остановись и сообщи», а не к циклу повторных попыток.