RE:NODE

Как подключить Claude к игровому серверу или приложению через MCP

Автор Команда RE:NODE
15 мин чтения


Чтобы подключить Claude к серверу RE:NODE, нужно добавить один URL - https://panel.renode.space/api/client/mcp - как удалённый MCP-сервер, а затем один раз подтвердить подключение в браузере. В Claude Code это одна команда claude mcp add; в Claude.ai - пользовательский коннектор (custom connector) с тем же адресом. Ничего не устанавливается ни на ваш компьютер, ни на сервер. На странице согласия вы выбираете, до каких серверов ассистент может дотянуться и на каком уровне: Files (читать и править файлы, читать консоль) или Manage (то же самое, плюс запуск, остановка, перезапуск и команды в консоль). Базы данных, бэкапы, расписания, пользователи, параметры запуска и пароли остаются недоступными при любом выборе.

Если вам нужна помощь только с одним сервером в рамках одного разговора, есть путь короче: кнопка Connect AI над консолью создаёт ссылку, которую вы вставляете в чат. Ниже разобраны оба способа, а также то, что ассистент на самом деле видит, что от него скрыто и что делать, если соединение не поднимается. Ничего из этого не привязано к играм: сервер Valheim, Discord-бот и приложение на Next.js выглядят для ассистента одинаково.

Что такое MCP, в одном абзаце#

Model Context Protocol - это стандартный способ, которым ИИ-ассистент вызывает инструменты, живущие где-то в другом месте. MCP-сервер публикует список инструментов с именами и аргументами - read_file, tail_console, power - а ассистент сам решает, когда их вызвать, читает результат и продолжает работу. Удалённый MCP-сервер - это сервер, к которому обращаются по HTTPS, а не запускают как локальную программу. Наш использует Streamable HTTP, которого современные клиенты Claude ждут от удалённого сервера, поэтому не нужно ставить пакеты, держать на компьютере Node.js или Python и следить за обновлениями.

Практическая разница с вставкой логов в чат в том, что ассистент перестаёт гадать. Вместо того чтобы вы копировали последние 40 строк консоли и описывали структуру папок, он сам смотрит содержимое каталога, читает server.properties или package.json, просматривает консоль и сообщает, что нашёл. На уровне Manage он затем может перезапустить сервер и дождаться, пока тот поднимется.

Два пути: MCP-endpoint или ссылка#

Есть две двери, и подходят они для разных задач.

СпособПодходит дляСрок действия
MCP-endpoint + OAuthПостоянная работа с вашими серверамиОстаётся подключённым, пока используется
Ссылка (Connect AI)Один сервер, один разговор7 дней простоя (чтение), 24 часа простоя (управление)

MCP-endpoint с OAuth стоит настроить, если вы регулярно пользуетесь Claude. Вы подключаетесь один раз, выбираете серверы и уровень, а ассистент сам поддерживает свой доступ: токены доступа живут час и обновляются в фоне, а refresh-токен продлевается ещё на 30 дней при каждом использовании. Ассистент, который вы открываете раз в месяц, ни разу не попросит войти снова. Кроме того, ему доступен инструмент list_servers, поэтому можно сказать «тот, что с Minecraft», а не вставлять ID.

Ссылка привязана к одному серверу, и её вы передаёте, а не входите по ней. Она работает в любом ассистенте, который умеет открывать URL - Claude, ChatGPT или любом другом, - потому что в простейшем случае это страница с markdown-описанием сервера. Ссылка с целью Manage this server может и действовать, и у неё есть собственный MCP-адрес, который можно добавить в Claude как коннектор.

Если сомневаетесь, начните с OAuth в том клиенте Claude, которым пользуетесь чаще всего. Ссылки берите для быстрой разовой задачи или для ассистента, который вообще не поддерживает удалённый MCP.

Подключаем Claude Code#

Claude Code - это агент для командной строки, и настроить его быстрее всего. В любом терминале:

bash
$ claude mcp add --transport http renode https://panel.renode.space/api/client/mcp

renode - это просто имя, под которым сервер будет виден внутри Claude Code, назовите его как хотите. Команда регистрирует сервер, но вход пока не выполняет. Запустите Claude Code и выполните /mcp. У записи renode будет отметка, что нужна аутентификация; выберите её, и Claude Code откроет в браузере страницу согласия панели.

  1. Если вы не вошли в панель, сначала вас отправят на вход (с кодом двухфакторной аутентификации, если она включена), а затем вернут прямо на страницу согласия.
  2. Проверьте адрес, на который возвращается подтверждение. Для Claude Code это адрес localhost, и страница предупредит об этом - для CLI так и должно быть: браузер передаёт код программе на вашем же компьютере.
  3. Выберите All my servers или отметьте нужные серверы.
  4. Выберите уровень: Files или Manage.
  5. Подтвердите. Вкладку браузера можно закрыть; у Claude Code теперь есть инструменты.

Вернувшись в Claude Code, попросите о чём-нибудь, что потребует вызова инструмента: «Покажи мои серверы RE:NODE и скажи, какие из них запущены». Если он отвечает настоящими именами ваших серверов, подключение работает.

Несколько деталей про Claude Code, которые стоит знать:

  • По умолчанию claude mcp add регистрирует сервер только для текущего проекта. Добавьте --scope user, чтобы он был доступен во всех проектах на вашем компьютере, или --scope project, чтобы записать его в файл .mcp.json в репозитории и коллеги получили ту же запись (каждый всё равно входит под собой).
  • claude mcp list показывает, что зарегистрировано и подключается ли каждый сервер. claude mcp remove renode удаляет запись на вашей стороне.
  • Удаление записи не отзывает доступ в панели. Чтобы завершить доступ по-настоящему, отключите его ещё и в панели - см. раздел об отзыве ниже.

Если использовать API-ключ

Если вы уже используете клиентский API-ключ для скриптов, он по-прежнему работает и обходится без браузера:

bash
$ claude mcp add --transport http renode https://panel.renode.space/api/client/mcp \    --header "Authorization: Bearer ptlc_your_key_here"

Это менее аккуратный вариант. У ключа полный доступ к клиентскому API вашего аккаунта, он сам не истекает и лежит открытым текстом в конфигурации Claude Code. Список разрешённых IP на ключе и обязательная двухфакторная аутентификация продолжают действовать, как и для любого вызова клиентского API. Выбирайте OAuth, если нет причин поступить иначе - например, headless-машина, где негде подтвердить вход в браузере.

Подключаем Claude.ai и Claude Desktop#

В Claude.ai тот же endpoint добавляется как пользовательский коннектор. Точные названия пунктов меню меняются, когда Anthropic обновляет приложение, но путь такой: Settings, затем Connectors, затем пункт добавления пользовательского коннектора.

  1. Дайте ему имя, например RE:NODE.
  2. Вставьте https://panel.renode.space/api/client/mcp в поле URL. Поля OAuth client ID и secret оставьте пустыми - панель поддерживает динамическую регистрацию, так что Claude зарегистрируется сам.
  3. Сохраните и нажмите Connect. В браузере откроется страница согласия панели.
  4. Выберите серверы и уровень и подтвердите.

На странице согласия показаны название приложения, запрашивающего доступ, и адрес, на который вернётся подтверждение. Для Claude.ai это должен быть адрес Anthropic, а не что-то незнакомое. Если на странице написано, что имя клиента «checked by nothing» (ничем не проверено), это правда: любой может зарегистрировать клиента и назвать его как угодно, поэтому страница и показывает ещё и адрес возврата. Прочитайте его, прежде чем подтверждать.

После подключения включите коннектор в разговоре (в меню инструментов под полем ввода) и попросите Claude показать ваши серверы.

Claude Desktop использует коннекторы вашего аккаунта Claude, поэтому коннектор, добавленный в Claude.ai, должен появиться и там. Доступны ли вам пользовательские коннекторы вообще, зависит от вашего тарифа Claude - проверять это нужно на справочных страницах Anthropic, а не у нас. Мы собирали и тестировали endpoint с Claude Code и пользовательскими коннекторами Claude.ai. Он следует спецификации MCP, поэтому другие клиенты с поддержкой удалённого MCP и OAuth должны работать, но с ChatGPT и Cursor мы его не проверяли и ничего не обещаем.

Панель Connect AI на консоли#

На вкладке Console каждого сервера, над терминалом, есть панель с заголовком Work on this server with AI. Она также показывается на вкладке Startup. Её видит каждый, кто может читать параметры запуска сервера, то есть владелец и большинство субпользователей.

В ней один выпадающий список, What the assistant is for, и одна кнопка, Connect AI. Доступные цели:

ЦельЧто вы получаете
GeneralСсылка для чтения, чтобы разобраться в сервере
Set up a new projectСсылка для чтения с инструкциями по настройке
Fix my repositoryСсылка для чтения, ориентированная на репозиторий
Server won't startГотовый запрос с хвостом консоли, без ссылки
Connect a databaseСсылка для чтения с шагами по базе данных
Add a domainСсылка для чтения с шагами по домену
Manage this serverСсылка для управления, с которой можно действовать

Нажмите Connect AI, и панель создаст ссылку вида https://panel.renode.space/ai/rnai_... и скопирует её в буфер обмена. Показывается она только один раз - панель хранит хеш, а не саму ссылку, - поэтому вставьте её куда-нибудь, прежде чем закрывать окно. Вставьте её в чат вместе с фразой о том, чего вы хотите, и ассистент откроет её и получит markdown-описание сервера: среду выполнения, команду запуска, порядок загрузки, адрес и порт сервера, результаты предварительной проверки репозитория, если он подключён, и инструкции для выбранной цели.

Server won't start - исключение. Вместо ссылки он копирует готовый к вставке запрос с последним выводом консоли: при падении полезнее всего последний экран лога, и ему не стоит ждать, пока ассистент что-то загрузит. Используйте его на вкладке Console, чтобы строки консоли попали в запрос. Если падение происходит циклично, а не однократно, наше руководство по циклам падений объясняет, что обычно означает такой вывод.

Ссылка Manage this server показывает второй адрес - URL MCP-сервера, оканчивающийся на /mcp. Вставьте его в Claude.ai как пользовательский коннектор или добавьте в Claude Code:

bash
$ claude mcp add --transport http renode-link https://panel.renode.space/ai/rnai_xxx/mcp

Вход здесь не требуется - сама ссылка и есть учётные данные. В этом её смысл, и поэтому она устроена так, чтобы быстро умирать.

Что ассистент видит и может делать#

Через MCP-endpoint ассистенту доступны такие инструменты. Какие из них работают, зависит от подтверждённого вами уровня и от ваших собственных прав на этом сервере; то и другое проверяется при каждом вызове.

ИнструментЧто делаетУровень
list_serversВаши серверы, охваченные доступомFiles
get_server_contextСреда выполнения, запуск, адрес, заметкиFiles
get_resourcesТекущее использование памяти, CPU и дискаFiles
get_setup_promptИнструкции по задаче для этого сервераFiles
tail_consoleСвежий вывод консолиFiles
list_filesСодержимое каталоговFiles
read_fileСодержимое файла, секреты скрытыFiles
write_fileСоздать или перезаписать текстовый файлFiles
set_envЗадать ключи в .env, не читая егоFiles
send_commandВвести команду в консольManage
powerЗапустить, остановить, перезапустить или убить процессManage

Несколько особенностей, которые стоит знать, прежде чем на них полагаться:

  • tail_console возвращает не более последних 100 строк, потому что именно столько хранит в буфере демон сервера. Для более старой ошибки пусть ассистент прочитает файл лога - например, logs/latest.log в Minecraft.
  • write_file записывает текст в UTF-8 размером до 1 МБ. Писать куда-либо внутри .git/ он не будет, потому что .git/hooks - это код, который выполняется при следующем fetch.
  • Инструменты всегда перечислены, даже те, что ваш уровень не разрешает. Отказ приходит в виде понятной ошибки, которую ассистент может разобрать, поэтому подключение уровня Files, которого попросили о перезапуске, скажет, что не может, а не сломается молча.
  • Действия питания, команды консоли и записи файлов фиксируются в журнале активности сервера на вашу учётную запись, с пометкой, что они пришли через OAuth с именем клиента или через ссылку. Перезапуск, сделанный ассистентом, считается намеренным перезапуском, а не падением.

У ссылки набор уже. Ссылка для чтения даёт контекст, запросы с задачами, использование ресурсов, хвост консоли и содержимое каталогов - но не содержимое файлов, потому что ссылка для чтения остаётся действительной неделю простоя и её часто оставляют в истории чата, а в .env как раз лежат секреты. Ссылка для управления добавляет чтение и запись файлов, команды консоли и действия питания. list_servers через ссылку недоступен никогда: ссылка знает ровно один сервер.

Что остаётся недоступным#

Есть вещи, до которых не дотянется ни один уровень и ни одна ссылка. Через MCP-endpoint никогда: базы данных и их пароли, бэкапы, расписания, субпользователи, команда и переменные запуска, настройки сервера. Через ссылку никогда: удаление и переименование файлов, переустановка, изменение запуска и переменных, базы данных, бэкапы, расписания, пользователи, данные SFTP и API-ключи.

Секреты обрабатываются отдельно. Каждый байт, который уходит через эти инструменты - контекст, консоль, содержимое файлов, - проходит через редактор секретов, работающий в три слоя:

  1. По имени. Любая переменная с именем вроде TOKEN, PASSWORD, KEY, SECRET, AUTH или SALT скрывает своё значение.
  2. По виду. Строки, похожие на ключи GitHub, Slack, OpenAI или AWS, JWT, пароли внутри URL или длинные случайные на вид строки скрываются независимо от того, как они названы.
  3. По значению. Реальные секретные значения сервера и пароли его баз данных собираются и вычищаются из готового вывода, что ловит и пароль, вставленный в переменную с именем NOTES.

Именно из-за такого скрытия существует set_env. Если бы ассистент прочитал файл .env и записал его обратно, каждый пароль вернулся бы заглушкой, и приложение сломалось бы. set_env же заменяет или добавляет указанные ключи на стороне панели, сохраняет все остальные байты файла и возвращает только имена ключей. Можно сказать Claude «задай DATABASE_URL в .env вот таким значением», и ничто в ответе его не повторит. Работает он только с файлами, которые называются .env или начинаются с .env. Подробнее о том, где хранить секреты, - в статье переменные окружения и секреты.

Сроки, лимиты и отзыв доступа#

Подключения OAuth и ссылки стареют по-разному.

  • OAuth: токены доступа живут 1 час и обновляются автоматически. Refresh-токены живут 30 дней и продлеваются при каждом обновлении. Если использованный токен предъявляют повторно - признак того, что его скопировали, - весь доступ отзывается, и подтверждать нужно будет заново.
  • Ссылки для чтения: каждое использование продлевает ссылку до 7 дней простоя, но не более 90 дней с момента создания.
  • Ссылки для управления: каждое использование продлевает ссылку до 24 часов простоя, но не более 30 дней с момента создания.
  • У сервера может быть не более пяти активных ссылок, из них две - ссылки для управления. Новая ссылка с той же целью заменяет вашу предыдущую.
  • Каждая ссылка допускает 60 запросов в минуту, 20 действий в минуту и 6 действий питания в минуту.
  • Ссылка перестаёт работать в тот момент, когда её создатель теряет доступ к серверу. Истёкшая, отозванная или отклонённая ссылка отвечает обычным 404, так что по ответу не понять, существовала ли она вообще.

Чтобы завершить доступ раньше, откройте в панели Account, затем Connected AI. Там перечислены все подключения OAuth с кнопкой Disconnect и все активные ссылки, которые вы создали, на любом сервере, с кнопкой Revoke. Здесь стоит наводить порядок, если пропал ноутбук или ушёл коллега, - хотя коллег лучше в любом случае вести как субпользователей с узкими правами, как объясняет статья субпользователи и минимальные привилегии. Учтите, что «All my servers» на странице согласия означает серверы, которыми вы владеете, плюс серверы, где вы сейчас субпользователь, а ваши права субпользователя ограничивают то, что ассистент может делать там.

Пример из практики: сервер, который падает при запуске#

Вот как выглядит типичная сессия с Claude Code, подключённым на уровне Manage, на приложении Node.js, которое падает после обновления. Запрос:

code
My RE:NODE server "shop-api" stopped starting after this morning's deploy.Find out why, fix it, restart it and confirm it stays up.

Ассистент вызывает list_servers, чтобы сопоставить «shop-api» с ID, затем get_server_context, чтобы узнать среду выполнения, команду запуска и порт. Он вызывает tail_console и видит, что приложение занимает порт 3000, хотя порт сервера другой. Через read_file он читает package.json и входной файл, находит порт, прописанный в коде, и с помощью write_file заставляет приложение брать process.env.PORT, привязываясь к 0.0.0.0, а не к localhost. Затем он перезапускает сервер через power, снова смотрит консоль и сообщает, что изменил.

Каждый шаг виден в разговоре, а каждая запись и перезапуск попадают в журнал активности сервера. Прочитайте diff, прежде чем принимать его, - привычки из статьи ИИ-агенты для работы с серверами применимы здесь точно так же, как на любой машине. Тот же сценарий работает и для игры: «сервер Valheim виден в списке, но никто не может зайти» - ассистент пройдёт по консоли, доступным ему параметрам запуска и файлам мира, хотя сам менять переменные запуска не может и подскажет, какое значение поменять на вкладке Startup.

Если подключение не поднимается#

В Claude Code не открывается браузер. Выполните /mcp, выберите сервер и начните аутентификацию. На удалённой машине без браузера скопируйте URL, который выводит Claude Code, в браузер на своём компьютере; переадресация обратно на localhost завершится только на машине, где запущен Claude Code, поэтому для headless-сервера проще API-ключ.

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

Claude говорит, что инструменты есть, но каждый вызов завершается ошибкой. Проверьте уровень. Доступ Files отклоняет power и send_command. Затем проверьте собственные права: на сервере, где вы субпользователь без доступа к консоли, у ассистента его тоже нет.

Ссылка возвращает 404. Она истекла, её заменила более новая ссылка с той же целью, её отозвали или вы потеряли доступ к серверу. Создайте новую на панели консоли.

Вместо ожидаемого значения ассистент видит заглушку. Это работает скрытие секретов. Если ему нужно изменить секрет, попросите использовать set_env; если ему нужно само значение - оно ему не нужно.

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

FAQ#

Запускает ли RE:NODE ИИ-модель и видит ли мои разговоры?

Нет. Мы не запускаем никакую модель. MCP-endpoint и ссылки - это двери для вашего собственного ассистента; Claude работает на стороне Anthropic под вашим аккаунтом Claude, а панель видит только вызовы инструментов, которые он делает, и они записываются в журнал ваших серверов.

Может ли Claude удалить мой мир или мои файлы?

Через эти инструменты - нет. На MCP-endpoint нет инструмента удаления, а ссылки категорически отклоняют удаление и переименование. Перезаписать файл через write_file он может на любом уровне, поэтому перед сессией, где правятся конфигурации, сделайте свежий бэкап.

Можно ли подключить Claude только к одному серверу?

Да. Выберите этот сервер на странице согласия вместо All my servers или используйте ссылку со вкладки Console этого сервера: она всегда дотягивается только до одного сервера.

Работает ли это с ChatGPT или Cursor?

Ссылка работает в ChatGPT, потому что это просто URL. MCP-endpoint и OAuth собраны и протестированы с Claude; другие клиенты с поддержкой удалённого MCP должны работать, но с ChatGPT и Cursor мы это не проверяли.

Что будет, если я какое-то время не буду пользоваться?

Подключение OAuth живёт до 30 дней без использования; после этого Claude попросит подтвердить заново. Ссылка для чтения истекает после 7 дней простоя, а ссылка для управления - после 24 часов, и вам ничего не нужно убирать.

Это было полезно?