Remote Demo MCP
Remote Demo MCP
Servidor MCP local que despliega un directorio estático precompilado en un host remoto con rsync.
Qué hace
Utiliza el
deployUserfijo de la configuración de MCP.Deriva el
projectdel nombre base delocalDir.Sube el contenido de
localDira:/var/www/html/demo-remote/{user}/{project}/
Utiliza el comando local
rsync.Soporta flujos SSH interactivos/OTP al adjuntar la sesión de rsync a
/dev/tty.En caso de error, pregunta si desea reintentar hasta que el usuario cancele.
Instalación
npm install
npm run buildConfiguración
Ruta de configuración predeterminada:
~/.config/remote-demo-mcp/config.json
Sobrescribir la ruta con:
REMOTE_DEMO_MCP_CONFIG=/abs/path/config.json
Ejemplo:
{
"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"]
}El servidor habilita automáticamente las subidas reanudables añadiendo:
--partial--checksum--progress(a menos quersyncOptionsya incluya--progresso--info=...)
Nota de compatibilidad:
El modo de sesión interactiva utiliza
node-pty. Si vesposix_spawnp faileden macOS/Linux, a menudo es causado por un helper denode-ptyno ejecutable (.../node-pty/prebuilds/*/spawn-helper). Este servidor ahora verifica y corrige automáticamente el permiso de ejecución del helper al iniciar la sesión.
La ruta base del destino remoto está codificada y no se puede sobrescribir:
/var/www/html/demo-remote
Herramienta
deploy_static
Palabras clave:
EN:
deploy to remote,deploy demo,publish demo,upload static site中文:
部署到远程,部署demo,部署 demo,发布demo,上传静态网页
Reglas de user:
deployUseres el ID de usuario de la aplicación para la ruta remota, no elusernamede SSH.Caracteres permitidos:
A-Z a-z 0-9 _ -No permitidos:
.,.., espacios,/,\y otros caracteres especiales.
Entrada:
{
"localDir": "/abs/path/to/dist",
"clientCwd": "/abs/path/on-mcp-client",
"dryRun": false
}Resolución de ruta localDir:
Ruta absoluta: se utiliza directamente.
Ruta relativa: se resuelve con respecto a
clientCwdsi se proporciona.Alternativa para ruta relativa:
CODEX_START_DIRsi está configurado, de lo contrarioprocess.cwd()(directorio de inicio del servidor).
Resolución del nombre del proyecto:
Si se proporciona
clientCwd, el nombre del proyecto utiliza el último segmento de la ruta declientCwd.De lo contrario, el nombre del proyecto utiliza el último segmento de la ruta de
localDirresuelta.
Nota de comportamiento:
Si
ssh.interactiveAuth=trueydryRun=false,deploy_staticfallará rápidamente por diseño.Para despliegues interactivos con OTP/contraseña, utiliza:
start_deploy_sessionpoll_deploy_sessionsubmit_deploy_inputcuandonextAction=submit_input
La confirmación de la clave de host (
yes/no) y las solicitudes de contraseña se manejan automáticamente en modo sesión.El OTP sigue siendo manual: llama a
submit_deploy_inputcuandonextAction=submit_input.
Salida (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
Entrada:
{
"url": "https://example.com/alice/my-site/index.html",
"timeoutMs": 8000
}Herramientas de sesión OTP interactiva
Utilízalas cuando se deba ingresar OTP/contraseña durante el despliegue en hosts no TTY:
start_deploy_sessionpoll_deploy_session(leer salida y progreso; sistate=waiting_input, enviar código)submit_deploy_input(enviar OTP/contraseña)repetir el paso 2 hasta que
stateseasucceededofailedopcional
cancel_deploy_session
poll_deploy_session admite salida incremental mediante cursor y devuelve nextCursor.
Las herramientas de sesión devuelven nextAction para hacer que la orquestación sea determinista:
submit_input: llamar asubmit_deploy_inputpoll: llamar apoll_deploy_sessiondone: flujo de trabajo finalizado (succeeded/failed/cancelled)
Registro de sesión:
Configurar en el archivo de configuración de MCP bajo
sessionLog.sessionLog.enabledel valor predeterminado esfalse.sessionLog.pathel valor predeterminado es/tmp/remote-demo-mcp-session.log.sessionLog.logInputValueel valor predeterminado esfalse(solo se registra la longitud de la entrada).Las herramientas de sesión interactiva ejecutan rsync en un PTY, por lo que las solicitudes de contraseña/OTP se pueden detectar mediante
poll_deploy_session.
Política de clave de host SSH:
accept-new(predeterminado): la clave de host de primera vez se acepta automáticamente; la clave cambiada se rechaza.strict: nunca aceptar automáticamente una clave de host desconocida.insecure: deshabilitar la validación de la clave de host (alto riesgo; solo para uso temporal/depuración).
Flujo interactivo de Codex CLI:
Llamar a
start_deploy_sessionBucle
poll_deploy_sessionSi
needsInput=trueonextAction=submit_input, llamar asubmit_deploy_inputcon OTP/contraseña. El mensaje que se muestra al usuario es "Please Enter MFA Code." o "Please Enter Password."Continuar sondeando hasta
nextAction=done
Contrato de protocolo de agente (para clientes MCP como Codex):
Llamar a
start_deploy_sessionuna vez.Leer
nextActionde la respuesta.Si
nextAction=submit_input, llamar asubmit_deploy_input.Si
nextAction=poll, llamar apoll_deploy_session.Repetir los pasos 2-4 hasta
nextAction=done.Nunca llamar a
deploy_staticpara flujos OTP; usar solo herramientas de sesión.Mientras se sondea, transmitir el progreso de la transferencia desde
outputal usuario final continuamente.
Salida (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"
}Ejecución
npm run dev
# or
npm run build && npm startInicializar archivo de configuración:
remote-demo-mcp initCrea:
~/.config/remote-demo-mcp/config.jsonEl modo interactivo muestra cada valor de campo actual para editar.
Presiona Enter sin ingresar nada para mantener el valor actual sin cambios.
Si la configuración ya existe,
initpregunta si desea modificarla, luego solicita confirmación final antes de sobrescribir.
codex 使用
安裝 npm 包
npm install -g @jake.e-com365/remote-demo-mcpcodex 添加 mcp
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