Skip to main content
Glama
fkom13

MCP SFTP Orchestrator

by fkom13

🚀 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.


📦 Installation

git clone https://github.com/fkom13/mcp-sftp-orchestrator.git
cd sftp-mcp
npm install
cp .env.example .env
# Éditer .env avec vos chemins

Prérequis : Node.js >= 18.0.0


Related MCP server: SSH MCP Server

⚙️ Configuration (.env)

Toutes les variables sont optionnelles. Les valeurs par défaut sont conçues pour un usage standard.

Variable

Défaut

Description

MCP_DATA_DIR

~/.config/mcp-orchestrator

Dossier où sont stockés servers.json, apis.json, queue.json, history.json

MCP_SYNC_TIMEOUT_S

120

Délai en secondes avant qu'une tâche passe en arrière-plan (retour immédiat au client, tâche continue)

MCP_DEFAULT_CMD_TIMEOUT_S

600

Timeout SSH par défaut en secondes. 0 = aucune limite

MCP_INTERACTIVE_CMD_TIMEOUT_S

300

Timeout pour les commandes interactives. 0 = aucune limite

MCP_MAX_WAIT_TIMEOUT_S

600

Timeout maximum pour l'outil task_wait

MAX_CONNECTIONS_PER_SERVER

5

Nombre max de connexions SSH simultanées par serveur

MIN_CONNECTIONS_PER_SERVER

1

Nombre min de connexions SSH maintenues par serveur

IDLE_TIMEOUT

300000

Délai en ms avant fermeture d'une connexion SSH inactive (5 min)

KEEP_ALIVE_INTERVAL

30000

Intervalle keepalive SSH en ms (30s)

MAX_QUEUE_SIZE

1000

Nombre maximum de jobs dans la file d'attente

SAVE_INTERVAL

5000

Intervalle de sauvegarde de la queue sur disque en ms (5s)

MCP_DEBUG

false

true pour activer les logs détaillés dans stderr


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

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

Outil

Description

help

Guide complet : liste des outils, variables .env, astuces d'utilisation

system_diagnostics

Diagnostic complet (queue, pool, serveurs, APIs). verbose:true pour les logs

Gestion des Serveurs

Outil

Description

server_add

Ajouter/modifier un alias de serveur (host, user, keyPath ou password)

server_list

Lister tous les serveurs configurés avec leurs détails

server_remove

Supprimer un alias de serveur

Gestion du Catalogue API

Outil

Description

api_add

Ajouter une API au catalogue de monitoring

api_list

Lister toutes les APIs configurées

api_remove

Supprimer une API du catalogue

api_check

Test de santé d'une API via son alias (utilise SSH + curl)

Exécution de Tâches

Outil

Description

task_exec

Exécuter une commande SSH. Paramètre timeout en secondes (0 = infini)

task_exec_interactive

SSH avec gestion des prompts (yes/no, menus, passwords). Supporte responses avec regex

task_exec_sequence

Séquence de plusieurs commandes SSH sur le même serveur

task_transfer

Transfert SFTP fichier ou dossier. force:true pour écraser sans confirmation

task_transfer_multi

Transferts SFTP multiples avec support de patterns glob (*, ?, [])

Monitoring

Outil

Description

get_system_resources

CPU, RAM, Disque d'un serveur

get_services_status

Statut des services systemd, Docker, PM2

get_fail2ban_status

Statut Fail2Ban (toutes les jails ou une spécifique)

check_api_health

Test HTTP direct sur une URL (via SSH + curl)

Logs

Outil

Description

get_pm2_logs

Logs PM2 d'une application spécifique ou toutes

get_docker_logs

Logs d'un container Docker

tail_file

Dernières lignes d'un fichier distant (équivalent tail -n)

File d'Attente & Suivi

Outil

Description

task_queue

Voir toutes les tâches (en cours, en attente, terminées)

task_status

Détail complet d'une tâche par son ID

task_history

Historique des tâches exécutées, filtrable par alias

task_retry

Relancer une tâche échouée ou crashée

task_wait

Attendre la fin d'une tâche passée en arrière-plan (jusqu'à 600s)

task_logs

Logs internes du système MCP

queue_stats

Statistiques de la file d'attente

pool_stats

Statistiques du pool de connexions SSH


đź“– Guide d'Utilisation

Commandes longues (docker build, grosses installs)

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

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

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

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

node diagnose.js        # Diagnostic complet
node test_mcp.js        # Test smoke MCP
node test_features.js   # Tests unitaires (queue, pool, glob, prompts, crash)

🛣️ Roadmap

Version

Changement

8.2.0

Ménage, uniformisation erreurs, nettoyage logs

8.3.0

Transferts SFTP blindés (fichier vs dossier, force:true)

8.4.0

Timeouts longues opérations, task_wait

8.5.0

SSH interactif amélioré (menus, regex, password)

8.6.0

Sécurité (escapeShellArg, détection secrets)

9.0.0

Nettoyage, uniformisation finale, outil help, transport stdio uniquement

9.0.1

Corrections sécurité (injection shell, vestiges code)


đź“„ Licence

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

Install Server
A
license - permissive license
B
quality
D
maintenance

Maintenance

–Maintainers
–Response time
–Release cycle
–Releases (12mo)
Commit activity

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/fkom13/mcp-sftp-orchestrator'

If you have feedback or need assistance with the MCP directory API, please join our Discord server