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

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"]
}
A
license - permissive license
-
quality - not tested
C
maintenance

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