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В случае сбоя запрашивает повторную попытку до тех пор, пока пользователь не отменит операцию
Related MCP server: nomad
Установка
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 deployed
Maintenance
Related MCP Connectors
MCP server for mandates, delegation, policy-gated execution, credential grants, and audit.
A MCP server built for developers enabling Git based project management with project and personal…
Zero-install remote MCP server for proof-of-existence file attestation.
MCP server for AI agents to plan, verify, and deploy Cloudflare-native apps.
Related MCP Servers
- AlicenseAqualityCmaintenanceMCP server for managing remote servers via SSH, enabling command execution, file transfer, rsync, tunnels, health checks, backups, and database operations.17475 npm1MIT
- AlicenseBqualityBmaintenanceA local MCP server for agentic remote development that enables code sync via rsync, SSH command execution, and long-running task management in remote tmux sessions.152MIT
- AlicenseNot gradedqualityCmaintenanceSSH-based MCP server that enables remote execution of SSH commands, file transfers, and secure server management via the MCP protocol.ISC
- AlicenseNot gradedqualityDmaintenanceA safe, configurable MCP server enabling AI agents to sync, deploy, diagnose, and compare remote servers via structured tools like rsync and SSH.28 npm5MIT