Labsco
fkom13 logo

MCP SFTP Orchestrator

from fkom13

Orchestrates remote server tasks via SSH and SFTP with a persistent queue. Ideal for DevOps and AI agents.

🔥🔥🔥✓ VerifiedFreeNeeds API keys

🚀 MCP Orchestrator — Serveur d'orchestration SSH/SFTP

Version : 9.0.1
License : MIT
Node : >= 18.0.0

Un serveur MCP (Model Context Protocol) qui donne à un agent IA la capacité d'exécuter des commandes SSH, des transferts SFTP, et du monitoring sur des serveurs distants. File d'attente persistante, pool de connexions SSH, exécution hybride synchrone/asynchrone.


🔌 Connexion au client MCP (OpenCode, Claude Desktop, etc.)

Copy & paste — that's it
{
  "mcpServers": {
    "orchestrator": {
      "command": "node",
      "args": ["/chemin/vers/sftp-mcp/server.js"],
      "env": {
        "MCP_DATA_DIR": "/chemin/vers/sftp-mcp/data"
      }
    }
  }
}

🧰 Référence des Outils (29 outils)

Diagnostic & Aide

OutilDescription
helpGuide complet : liste des outils, variables .env, astuces d'utilisation
system_diagnosticsDiagnostic complet (queue, pool, serveurs, APIs). verbose:true pour les logs

Gestion des Serveurs

OutilDescription
server_addAjouter/modifier un alias de serveur (host, user, keyPath ou password)
server_listLister tous les serveurs configurés avec leurs détails
server_removeSupprimer un alias de serveur

Gestion du Catalogue API

OutilDescription
api_addAjouter une API au catalogue de monitoring
api_listLister toutes les APIs configurées
api_removeSupprimer une API du catalogue
api_checkTest de santé d'une API via son alias (utilise SSH + curl)

Exécution de Tâches

OutilDescription
task_execExécuter une commande SSH. Paramètre timeout en secondes (0 = infini)
task_exec_interactiveSSH avec gestion des prompts (yes/no, menus, passwords). Supporte responses avec regex
task_exec_sequenceSéquence de plusieurs commandes SSH sur le même serveur
task_transferTransfert SFTP fichier ou dossier. force:true pour écraser sans confirmation
task_transfer_multiTransferts SFTP multiples avec support de patterns glob (*, ?, [])

Monitoring

OutilDescription
get_system_resourcesCPU, RAM, Disque d'un serveur
get_services_statusStatut des services systemd, Docker, PM2
get_fail2ban_statusStatut Fail2Ban (toutes les jails ou une spécifique)
check_api_healthTest HTTP direct sur une URL (via SSH + curl)

Logs

OutilDescription
get_pm2_logsLogs PM2 d'une application spécifique ou toutes
get_docker_logsLogs d'un container Docker
tail_fileDernières lignes d'un fichier distant (équivalent tail -n)

File d'Attente & Suivi

OutilDescription
task_queueVoir toutes les tâches (en cours, en attente, terminées)
task_statusDétail complet d'une tâche par son ID
task_historyHistorique des tâches exécutées, filtrable par alias
task_retryRelancer une tâche échouée ou crashée
task_waitAttendre la fin d'une tâche passée en arrière-plan (jusqu'à 600s)
task_logsLogs internes du système MCP
queue_statsStatistiques de la file d'attente
pool_statsStatistiques du pool de connexions SSH

📖 Guide d'Utilisation

Commandes longues (docker build, grosses installs)

Copy & paste — that's it
1. Lancer avec timeout:0 → task_exec { alias: "vps", cmd: "docker build ...", timeout: 0 }
2. Si ça dépasse 120s → passe en arrière-plan avec un ID
3. Récupérer le résultat → task_wait { id: "abc123" }

Transferts SFTP (façon FileZilla)

  • Fichier nouveau : upload/download sans rien de spécial
  • Fichier existe déjà : refusé avec message "Utilisez force:true pour écraser"
  • Avec force: true : écrase sans rien demander
  • Dossier → dossier : transfert récursif automatique
  • Patterns glob : task_transfer_multi avec *.txt, data?.json, etc.

Mode interactif

Copy & paste — that's it
{
  "alias": "vps",
  "cmd": "apt upgrade",
  "interactive": true,
  "autoRespond": true,
  "responses": {
    "Do you want to continue": "y",
    "restart services": "yes"
  }
}

Les clés de responses supportent les expressions régulières. Ex: "[YyNn]\\\\?""y".


🏗️ Architecture

Copy & paste — that's it
Client MCP (stdio ou HTTP)
    │
server.js ─── 29 outils MCP enregistrés
    │
    ├── queue.js ─── File d'attente persistante (JSON + backup auto)
    ├── ssh.js ───── Exécution SSH (pool ou connexion dédiée interactive)
    ├── sftp.js ──── Transferts SFTP (upload/download, glob, force)
    ├── sshPool.js ─ Pool de connexions SSH persistantes (max 5/serveur)
    ├── servers.js ─ CRUD alias de serveurs
    ├── apis.js ──── CRUD catalogue d'APIs
    ├── history.js ─ Historique des 500 dernières tâches
    ├── config.js ── Configuration centralisée (CLI > .env > defaults)
    └── utils.js ─── Utilitaires (escapeShellArg)

Cycle de vie d'un job

Copy & paste — that's it
pending → running → completed / failed
                      ↓ (si redémarrage pendant running)
                    crashed → retry → pending

🔒 Sécurité

  • escapeShellArg() : toutes les URLs et chemins sont échappés avant d'être passés à curl/shell
  • Détection de secrets en clair : au démarrage, un warning est loggé si servers.json ou apis.json contiennent des mots de passe/clés API
  • Recommandation : utilisez des clés SSH (pas de mots de passe) et stockez les clés API dans Vaultwarden plutôt qu'en clair

🧪 Tests

Copy & paste — that's it
node diagnose.js        # Diagnostic complet
node test_mcp.js        # Test smoke MCP
node test_features.js   # Tests unitaires (queue, pool, glob, prompts, crash)

🛣️ Roadmap

VersionChangement
8.2.0Ménage, uniformisation erreurs, nettoyage logs
8.3.0Transferts SFTP blindés (fichier vs dossier, force:true)
8.4.0Timeouts longues opérations, task_wait
8.5.0SSH interactif amélioré (menus, regex, password)
8.6.0Sécurité (escapeShellArg, détection secrets)
9.0.0Nettoyage, uniformisation finale, outil help, transport stdio uniquement
9.0.1Corrections sécurité (injection shell, vestiges code)

📄 Licence

MIT — Copyright (c) 2025-2026 Franck (fkom13)