Remote Demo MCP
Remote Demo MCP
Локальный MCP-сервер, который развертывает предварительно собранный статический каталог на удаленном хосте с помощью rsync.
Что он делает
Использует фиксированный
deployUserиз конфигурации MCPОпределяет
projectна основе базового имениlocalDirЗагружает содержимое
localDirв:/var/www/html/demo-remote/{user}/{project}/
Использует локальную команду
rsyncПоддерживает OTP/интерактивные SSH-потоки путем подключения сессии rsync к
/dev/ttyВ случае сбоя запрашивает повторную попытку до тех пор, пока пользователь не отменит операцию
Установка
npm install
npm run buildКонфигурация
Путь к конфигурации по умолчанию:
~/.config/remote-demo-mcp/config.json
Переопределить путь можно с помощью:
REMOTE_DEMO_MCP_CONFIG=/abs/path/config.json
Пример:
{
"deployUser": "demo_user-01",
"publicBaseUrl": "https://example.com",
"sessionLog": {
"enabled": false,
"path": "/tmp/remote-demo-mcp-session.log",
"logInputValue": false
},
"ssh": {
"host": "xxx.xxx.xxx.xxx",
"port": 2222,
"username": "alice123#ec2-user#52.76.147.44",
"interactiveAuth": true,
"password": "",
"hostKeyPolicy": "accept-new",
"autoFillPassword": true
},
"rsyncOptions": ["-az", "--delete"]
}Сервер автоматически включает возобновляемую загрузку, добавляя:
--partial--checksum--progress(еслиrsyncOptionsуже не содержит--progressили--info=...)
Примечание о совместимости:
Режим интерактивной сессии использует
node-pty. Если вы видите ошибкуposix_spawnp failedв macOS/Linux, это часто вызвано неисполняемым вспомогательным файломnode-pty(.../node-pty/prebuilds/*/spawn-helper). Теперь сервер проверяет и автоматически исправляет права на выполнение вспомогательного файла при запуске сессии.
Базовый путь к удаленной цели жестко закодирован и не может быть изменен:
/var/www/html/demo-remote
Инструмент
deploy_static
Ключевые слова:
EN:
deploy to remote,deploy demo,publish demo,upload static site中文:
部署到远程,部署demo,部署 demo,发布demo,上传静态网页
Правила для user:
deployUser— это идентификатор пользователя приложения для удаленного пути, а не SSHusernameДопустимые символы:
A-Z a-z 0-9 _ -Недопустимые:
.,.., пробелы,/,\и другие специальные символы
Входные данные:
{
"localDir": "/abs/path/to/dist",
"clientCwd": "/abs/path/on-mcp-client",
"dryRun": false
}Разрешение пути localDir:
Абсолютный путь: используется напрямую
Относительный путь: разрешается относительно
clientCwd, если он предоставленРезервный вариант для относительного пути:
CODEX_START_DIR, если задан, в противном случаеprocess.cwd()(каталог запуска сервера)
Разрешение имени проекта:
Если предоставлен
clientCwd, имя проекта использует последний сегмент путиclientCwdВ противном случае имя проекта использует последний сегмент пути разрешенного
localDir
Примечание о поведении:
Если
ssh.interactiveAuth=trueиdryRun=false,deploy_staticпо замыслу завершится с ошибкой.Для интерактивного развертывания с OTP/паролем используйте:
start_deploy_sessionpoll_deploy_sessionsubmit_deploy_input, когдаnextAction=submit_input
Подтверждение ключа хоста (
yes/no) и запросы пароля обрабатываются автоматически в режиме сессии.OTP по-прежнему требует ручного ввода: вызовите
submit_deploy_input, когдаnextAction=submit_input.
Выходные данные (structuredContent):
{
"ok": true,
"attempts": 1,
"user": "alice",
"project": "my-site",
"remotePath": "/var/www/html/demo-remote/alice/my-site/",
"publicUrl": "https://example.com/alice/my-site/index.html",
"message": "Deploy succeeded after 1 attempt(s)."
}verify_deploy
Входные данные:
{
"url": "https://example.com/alice/my-site/index.html",
"timeoutMs": 8000
}Инструменты интерактивной OTP-сессии
Используйте их, когда OTP/пароль необходимо ввести во время развертывания на хостах без TTY:
start_deploy_sessionpoll_deploy_session(чтение вывода и прогресса; еслиstate=waiting_input, отправьте код)submit_deploy_input(отправка OTP/пароля)повторите шаг 2, пока
stateне станетsucceededилиfailedопционально
cancel_deploy_session
poll_deploy_session поддерживает инкрементальный вывод по cursor и возвращает nextCursor.
Инструменты сессии возвращают nextAction, чтобы сделать оркестрацию детерминированной:
submit_input: вызовитеsubmit_deploy_inputpoll: вызовитеpoll_deploy_sessiondone: рабочий процесс завершен (succeeded/failed/cancelled)
Логирование сессии:
Настраивается в файле конфигурации MCP в разделе
sessionLog.sessionLog.enabledпо умолчаниюfalse.sessionLog.pathпо умолчанию/tmp/remote-demo-mcp-session.log.sessionLog.logInputValueпо умолчаниюfalse(логируется только длина ввода).Инструменты интерактивной сессии запускают rsync в PTY, поэтому запросы пароля/OTP могут быть обнаружены через
poll_deploy_session.
Политика SSH-ключей хоста:
accept-new(по умолчанию): ключ хоста при первом подключении принимается автоматически; измененный ключ отклоняется.strict: никогда не принимать автоматически неизвестный ключ хоста.insecure: отключить проверку ключа хоста (высокий риск; только для временного использования/отладки).
Интерактивный поток Codex CLI:
Вызовите
start_deploy_sessionЦиклически вызывайте
poll_deploy_sessionЕсли
needsInput=trueилиnextAction=submit_input, вызовитеsubmit_deploy_inputс OTP/паролем. Подсказка для пользователя: "Please Enter MFA Code." или "Please Enter Password."Продолжайте опрос, пока
nextAction=done
Контракт протокола агента (для MCP-клиентов, таких как Codex):
Вызовите
start_deploy_sessionодин раз.Прочитайте
nextActionиз ответа.Если
nextAction=submit_input, вызовитеsubmit_deploy_input.Если
nextAction=poll, вызовитеpoll_deploy_session.Повторяйте шаги 2-4, пока
nextAction=done.Никогда не вызывайте
deploy_staticдля OTP-потоков; используйте только инструменты сессии.Во время опроса постоянно передавайте прогресс передачи из
outputконечному пользователю.
Выходные данные (structuredContent):
{
"ok": true,
"url": "https://example.com/alice/my-site/index.html",
"status": 200,
"statusText": "OK",
"responseTimeMs": 123,
"message": "URL is reachable: HTTP 200 in 123ms"
}Запуск
npm run dev
# or
npm run build && npm startИнициализация файла конфигурации:
remote-demo-mcp initОн создает:
~/.config/remote-demo-mcp/config.jsonИнтерактивный режим показывает каждое текущее значение поля для редактирования.
Нажмите Enter без ввода, чтобы оставить текущее значение без изменений.
Если конфигурация уже существует,
initспросит, нужно ли ее изменить, а затем запросит окончательное подтверждение перед перезаписью.
Использование codex
Установка npm-пакета
npm install -g @jake.e-com365/remote-demo-mcpДобавление mcp в codex
codex mcp add remote-demo-mcp remote-demo-mcp Конфигурация remote-demo-mcp
remote-demo-mcp init
vi ~/.config/remote-demo-mcp/config.json{
"deployUser": "jake",
"publicBaseUrl": "https://demo-remote.e-com365.com/",
"ssh": {
"host": "xxx.xxx.xxx.xxx",
"username": "alice123#ec2-user#18.140.183.126",
"interactiveAuth": true,
"port": 2222,
"password": "xxx",
"hostKeyPolicy": "accept-new",
"autoFillPassword": true
},
"rsyncOptions": ["-az", "--delete"]
}This server cannot be installed
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Latest Blog Posts
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/jake-bcn/remote-demo-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server