Skip to main content
Glama

Remote Demo MCP

Lokaler MCP-Server, der ein vorkompiliertes statisches Verzeichnis mit rsync auf einem Remote-Host bereitstellt.

Funktionsweise

  • Verwendet einen festen deployUser aus der MCP-Konfiguration

  • Leitet project vom Basisnamen des localDir ab

  • Lädt localDir-Inhalte hoch nach:

    • /var/www/html/demo-remote/{user}/{project}/

  • Verwendet den lokalen rsync-Befehl

  • Unterstützt OTP/interaktive SSH-Abläufe durch Anbindung der rsync-Sitzung an /dev/tty

  • Fragt bei Fehlern nach, ob ein erneuter Versuch unternommen werden soll, bis der Benutzer abbricht

Related MCP server: nomad

Installation

npm install
npm run build

Konfiguration

Standard-Konfigurationspfad:

  • ~/.config/remote-demo-mcp/config.json

Pfad überschreiben mit:

  • REMOTE_DEMO_MCP_CONFIG=/abs/path/config.json

Beispiel:

{
  "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"]
}

Der Server aktiviert automatisch fortsetzbare Uploads durch Anhängen von:

  • --partial

  • --checksum

  • --progress (sofern rsyncOptions nicht bereits --progress oder --info=... enthält)

Kompatibilitätshinweis:

  • Der interaktive Sitzungsmodus verwendet node-pty. Wenn Sie unter macOS/Linux posix_spawnp failed sehen, liegt dies oft an einem nicht ausführbaren node-pty-Hilfsprogramm (.../node-pty/prebuilds/*/spawn-helper). Dieser Server prüft nun beim Start der Sitzung die Ausführungsberechtigung des Hilfsprogramms und korrigiert diese automatisch.

Der Basispfad des Remote-Ziels ist fest kodiert und kann nicht überschrieben werden:

  • /var/www/html/demo-remote

Tool

deploy_static

Schlüsselwörter:

  • EN: deploy to remote, deploy demo, publish demo, upload static site

  • 中文: 部署到远程, 部署demo, 部署 demo, 发布demo, 上传静态网页

user-Regeln:

  • deployUser ist die App-Benutzer-ID für den Remote-Pfad, nicht der SSH-username

  • Erlaubte Zeichen: A-Z a-z 0-9 _ -

  • Nicht erlaubt: ., .., Leerzeichen, /, \ und andere Sonderzeichen

Eingabe:

{
  "localDir": "/abs/path/to/dist",
  "clientCwd": "/abs/path/on-mcp-client",
  "dryRun": false
}

localDir-Pfadauflösung:

  • Absoluter Pfad: wird direkt verwendet

  • Relativer Pfad: wird relativ zu clientCwd aufgelöst, falls angegeben

  • Fallback für relative Pfade: CODEX_START_DIR falls gesetzt, ansonsten process.cwd() (Server-Startverzeichnis)

Projekt-Namensauflösung:

  • Wenn clientCwd angegeben ist, verwendet der Projektname das letzte Pfadsegment von clientCwd

  • Andernfalls verwendet der Projektname das letzte Pfadsegment des aufgelösten localDir

Verhaltenshinweis:

  • Wenn ssh.interactiveAuth=true und dryRun=false, schlägt deploy_static designbedingt sofort fehl.

  • Für interaktive OTP/Passwort-Bereitstellungen verwenden Sie:

    1. start_deploy_session

    2. poll_deploy_session

    3. submit_deploy_input wenn nextAction=submit_input

  • Host-Key-Bestätigungen (yes/no) und Passwort-Prompts werden im Sitzungsmodus automatisch behandelt.

  • OTP ist weiterhin manuell: Rufen Sie submit_deploy_input auf, wenn nextAction=submit_input.

Ausgabe (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

Eingabe:

{
  "url": "https://example.com/alice/my-site/index.html",
  "timeoutMs": 8000
}

Interaktive OTP-Sitzungstools

Verwenden Sie diese, wenn während der Bereitstellung in Nicht-TTY-Hosts ein OTP/Passwort eingegeben werden muss:

  1. start_deploy_session

  2. poll_deploy_session (Ausgabe und Fortschritt lesen; wenn state=waiting_input, Code übermitteln)

  3. submit_deploy_input (OTP/Passwort senden)

  4. Schritt 2 wiederholen, bis state auf succeeded oder failed steht

  5. optional cancel_deploy_session

poll_deploy_session unterstützt inkrementelle Ausgabe per cursor und gibt nextCursor zurück.

Sitzungstools geben nextAction zurück, um die Orchestrierung deterministisch zu machen:

  • submit_input: submit_deploy_input aufrufen

  • poll: poll_deploy_session aufrufen

  • done: Workflow abgeschlossen (succeeded / failed / cancelled)

Sitzungsprotokollierung:

  • Konfiguration in der MCP-Konfigurationsdatei unter sessionLog.

  • sessionLog.enabled Standard ist false.

  • sessionLog.path Standard ist /tmp/remote-demo-mcp-session.log.

  • sessionLog.logInputValue Standard ist false (nur die Länge der Eingabe wird protokolliert).

  • Interaktive Sitzungstools führen rsync in einem PTY aus, sodass Passwort/OTP-Prompts über poll_deploy_session erkannt werden können.

SSH-Host-Key-Richtlinie:

  • accept-new (Standard): Host-Key beim ersten Mal automatisch akzeptieren; geänderter Key wird abgelehnt.

  • strict: Unbekannte Host-Keys niemals automatisch akzeptieren.

  • insecure: Host-Key-Validierung deaktivieren (hohes Risiko; nur für temporäre/Debug-Zwecke).

Codex CLI interaktiver Ablauf:

  1. start_deploy_session aufrufen

  2. poll_deploy_session in einer Schleife ausführen

  3. Wenn needsInput=true oder nextAction=submit_input, submit_deploy_input mit OTP/Passwort aufrufen. Der Hinweis für den Benutzer lautet "Please Enter MFA Code." oder "Please Enter Password."

  4. Weiter pollen, bis nextAction=done

Agent-Protokollvertrag (für MCP-Clients wie Codex):

  1. start_deploy_session einmal aufrufen.

  2. nextAction aus der Antwort lesen.

  3. Wenn nextAction=submit_input, submit_deploy_input aufrufen.

  4. Wenn nextAction=poll, poll_deploy_session aufrufen.

  5. Schritte 2-4 wiederholen, bis nextAction=done.

  6. Niemals deploy_static für OTP-Abläufe aufrufen; nur Sitzungstools verwenden.

  7. Während des Pollings den Übertragungsfortschritt aus output kontinuierlich an den Endbenutzer weiterleiten.

Ausgabe (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"
}

Ausführen

npm run dev
# or
npm run build && npm start

Konfigurationsdatei initialisieren:

remote-demo-mcp init

Dies erstellt:

  • ~/.config/remote-demo-mcp/config.json

  • Der interaktive Modus zeigt jeden aktuellen Feldwert zur Bearbeitung an.

  • Drücken Sie Enter ohne Eingabe, um den aktuellen Wert unverändert zu lassen.

  • Wenn die Konfiguration bereits existiert, fragt init nach, ob sie geändert werden soll, und verlangt vor dem Überschreiben eine endgültige Bestätigung.

codex 使用

安裝 npm 包

npm install -g    @jake.e-com365/remote-demo-mcp

codex 添加 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"]
}

Related MCP Connectors

Related MCP Servers

  • A
    license
    B
    quality
    B
    maintenance
    A 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.
    15
    2
    MIT
  • A
    license
    Not graded
    quality
    C
    maintenance
    SSH-based MCP server that enables remote execution of SSH commands, file transfers, and secure server management via the MCP protocol.
    ISC