MCP SFTP Orchestrator

MCP SFTP Orchestrator

Enables remote server management through SSH/SFTP with persistent task queuing, system monitoring, file transfers, service status checks, and API health monitoring through a unified interface.

Category
Visit Server

README

🚀 MCP Orchestrator - Serveur d`orchestration SSH/SFTP

Version License Node

Un serveur MCP (Model-Context-Protocol) puissant pour l'orchestration de tùches distantes. Il gÚre des connexions SSH et SFTP, une file d'attente de tùches persistante, et expose un ensemble riche d'outils pour la gestion de serveurs, le monitoring, et l'exécution de commandes via une interface stdio compatible avec les LLM.

✹ FonctionnalitĂ©s Principales

🔐 Gestion de Serveurs

  • ✅ Configuration multi-serveurs avec alias
  • ✅ Support authentification par clĂ© SSH ou mot de passe
  • ✅ Stockage sĂ©curisĂ© des configurations

📡 ExĂ©cution SSH

  • ✅ Commandes simples et sĂ©quences
  • ✅ Mode interactif avec auto-rĂ©ponse aux prompts
  • ✅ Streaming pour logs (PM2, Docker, tail, journalctl)
  • ✅ Pool de connexions persistantes
  • ✅ Retry automatique en cas d`Ă©chec

📁 Transferts SFTP

  • ✅ Upload/Download de fichiers et dossiers
  • ✅ Support patterns glob (*.txt, **/*.js)
  • ✅ Transferts multiples en une seule commande
  • ✅ CrĂ©ation automatique des dossiers parents

📊 Monitoring & APIs

  • ✅ Monitoring systĂšme (CPU, RAM, Disque)
  • ✅ Statut des services (systemd, Docker, PM2)
  • ✅ Health checks HTTP/HTTPS avec authentification
  • ✅ Catalogue d`APIs personnalisable
  • ✅ Fail2Ban status

🎯 Gestion de Tñches

  • ✅ Queue persistante avec sauvegarde automatique
  • ✅ ExĂ©cution hybride (sync/async)
  • ✅ Historique des commandes
  • ✅ Retry manuel et automatique
  • ✅ Statistiques dĂ©taillĂ©es

📩 Installation

Vous avez deux méthodes pour utiliser cet outil :

Méthode 1 : Via NPM (Recommandé)

C'est la méthode la plus simple. L'outil sera téléchargé et exécuté à la demande par npx.

Enregistrez ce MCP auprĂšs de votre client (ex: gemini-cli) avec la configuration suivante :

{
  "mcpServers": {
    "orchestrator": {
      "command": "npx",
      "args": [
        "@fkom13/mcp-sftp-orchestrator"
      ],
      "env": {
        "MCP_DATA_DIR": "/chemin/absolu/vers/votre/dossier/de/donnees"
      }
    }
  }
}

Important : Remplacez /chemin/absolu/vers/votre/dossier/de/donnees par un chemin réel sur votre machine, par exemple ~/.config/mcp-orchestrator.

Méthode 2 : Depuis les Sources (Git)

Cette méthode est utile si vous souhaitez modifier le code.

  1. Clonez le dépÎt :

    git clone https://github.com/fkom13/mcp-sftp-orchestrator.git
    cd mcp-sftp-orchestrator
    
  2. Installez les dépendances :

    npm install
    
  3. Configurez votre client MCP pour lancer le script localement :

    {
      "mcpServers": {
        "orchestrator": {
          "command": "node",
          "args": [
            "/chemin/vers/mcp-sftp-orchestrator/server.js"
          ],
          "env": {
            "MCP_DATA_DIR": "/chemin/vers/mcp-sftp-orchestrator/data"
          }
        }
      }
    }
    

đŸ› ïž Configuration

La configuration du serveur se fait par ordre de priorité :

  1. Variables d'environnement du client MCP (le bloc env dans votre JSON) : Priorité la plus haute. C'est la méthode recommandée pour définir le dossier de données.
  2. Fichier .env : Si vous lancez le projet localement (méthode 2), vous pouvez créer un fichier .env à la racine. Il sera utilisé si la variable n'est pas définie par le client MCP.
  3. Valeurs par défaut : Si rien n'est défini, le dossier de données par défaut sera ~/.config/mcp-orchestrator.

Variables disponibles :

  • MCP_DATA_DIR: (RecommandĂ©) Le dossier oĂč seront stockĂ©es les donnĂ©es (configurations des serveurs, historique, etc.).
  • MCP_SYNC_TIMEOUT_S: Le dĂ©lai en secondes avant qu'une tĂąche longue ne passe en arriĂšre-plan. Par dĂ©faut : 30.

🧰 RĂ©fĂ©rence des Outils (API)

Voici la liste complÚte des outils exposés par ce serveur MCP.

Gestion des Serveurs

  • server_add: Enregistre ou met Ă  jour les informations de connexion d'un serveur.
  • server_list: Affiche la liste de tous les alias de serveurs configurĂ©s.
  • server_remove: Supprime un alias de serveur de la configuration.

Exécution de Tùches

  • task_exec: ExĂ©cute une commande SSH (hybride synchrone/asynchrone).
  • task_transfer: TransfĂšre un fichier ou dossier via SFTP (hybride synchrone/asynchrone).
  • task_exec_interactive: ExĂ©cute une commande SSH interactive (gĂšre les prompts yes/no, etc.).
  • task_exec_sequence: ExĂ©cute plusieurs commandes SSH en sĂ©quence sur le mĂȘme serveur.
  • task_transfer_multi: TransfĂšre plusieurs fichiers/dossiers avec support de patterns glob.

Monitoring & Diagnostics

Outil Description
get_system_resources RécupÚre les métriques systÚme vitales (CPU, RAM, Disque).
get_services_status RécupÚre le statut des services (systemd, Docker, PM2).
get_fail2ban_status RécupÚre les informations du service Fail2Ban.
check_api_health Test HTTP direct sur une URL (sans catalogue).

Récupération de Logs

  • get_pm2_logs: Raccourci pour rĂ©cupĂ©rer les logs PM2.
  • get_docker_logs: Raccourci pour rĂ©cupĂ©rer les logs d'un container Docker.
  • tail_file: Affiche les derniĂšres lignes d'un fichier distant.

Gestion de la File d'Attente (Queue)

  • task_queue: Affiche le statut de toutes les tĂąches dans la file d'attente.
  • task_status: RĂ©cupĂšre les dĂ©tails d'une tĂąche par son ID.
  • task_history: Affiche l'historique des derniĂšres tĂąches lancĂ©es.
  • task_retry: Relance une tĂąche qui a Ă©chouĂ© ou crashĂ©.
  • queue_stats: Affiche les statistiques de la queue de tĂąches.

Gestion des APIs (Monitoring Externe)

  • api_add: Ajoute une API au catalogue de monitoring.
  • api_list: Affiche toutes les APIs configurĂ©es.
  • api_remove: Supprime une API du catalogue.
  • api_check: Lance un test de santĂ© sur une API.

Administration du Serveur MCP

  • task_logs: Affiche les logs du systĂšme MCP lui-mĂȘme.
  • pool_stats: Affiche les statistiques du pool de connexions SSH.

Prérequis

  • Node.js >= 18.0.0
  • npm ou yarn
  • AccĂšs SSH aux serveurs cibles

Installation rapide


# Cloner le dépÎt
git clone https://github.com/fkom13/mcp-sftp-orchestrator.git
cd mcp-sftp-orchestrator

# Installer les dépendances
npm install

# Copier et configurer l`environnement
cp .env.example .env
nano .env

# Démarrer le serveur
node server.js

⚙ Configuration
Variables d`environnement (.env)
Bash

# Répertoire de données (configs, historique, queue)
MCP_DATA_DIR="/home/user/.config/mcp-orchestrator"

# Délai avant passage en arriÚre-plan (secondes)
MCP_SYNC_TIMEOUT_S=30

# Timeouts d`exécution (millisecondes)
MCP_DEFAULT_CMD_TIMEOUT_MS=300000      # 5 minutes
MCP_INTERACTIVE_CMD_TIMEOUT_MS=120000  # 2 minutes

# Pool de connexions SSH
MAX_CONNECTIONS_PER_SERVER=5
MIN_CONNECTIONS_PER_SERVER=1
IDLE_TIMEOUT=300000           # 5 minutes
KEEP_ALIVE_INTERVAL=30000     # 30 secondes

# Queue
MAX_QUEUE_SIZE=1000
SAVE_INTERVAL=5000            # Sauvegarde toutes les 5s
HISTORY_RETENTION=2678400000  # 31 jours

# Debug log wraper erreor in stdio.error
MCP_DEBUG=false

Structure des données
text

~/.config/mcp-orchestrator/
├── servers.json      # Configurations serveurs
├── apis.json         # Catalogue d`APIs
├── queue.json        # Queue de tñches
├── queue.backup.json # Backup de sĂ©curitĂ©
└── history.json      # Historique

đŸ› ïž Guide d`Utilisation
1. Configuration d`un serveur
JavaScript

// Avec clé SSH
{
  "tool": "server_add",
  "arguments": {
    "alias": "prod_vps",
    "host": "192.168.1.100",
    "user": "admin",
    "keyPath": "/home/user/.ssh/id_rsa"
  }
}

// Avec mot de passe
{
  "tool": "server_add",
  "arguments": {
    "alias": "staging",
    "host": "staging.example.com",
    "user": "deploy",
    "password": "SecureP@ssw0rd"
  }
}
2. Exécution de commandes
Commande simple
JavaScript

{
  "tool": "task_exec",
  "arguments": {
    "alias": "prod_vps",
    "cmd": "uptime && df -h"
  }
}
Commande interactive
JavaScript

{
  "tool": "task_exec_interactive",
  "arguments": {
    "alias": "prod_vps",
    "cmd": "sudo apt-get update && sudo apt-get upgrade",
    "autoRespond": true,
    "responses": {
      "Do you want to continue": "Y",
      "Restart services": "yes"
    }
  }
}
Séquence de commandes
JavaScript

{
  "tool": "task_exec_sequence",
  "arguments": {
    "alias": "prod_vps",
    "commands": [
      "cd /var/www/app",
      "git pull origin main",
      "npm install",
      "pm2 restart app"
    ],
    "continueOnError": false
  }
}
3. Transferts SFTP
Upload simple
JavaScript

{
  "tool": "task_transfer",
  "arguments": {
    "alias": "prod_vps",
    "direction": "upload",
    "local": "/home/user/config.json",
    "remote": "/etc/app/config.json"
  }
}
Transferts multiples avec glob
JavaScript

{
  "tool": "task_transfer_multi",
  "arguments": {
    "alias": "prod_vps",
    "direction": "upload",
    "files": [
      {
        "local": "/home/user/logs/*.log",
        "remote": "/var/log/app/"
      },
      {
        "local": "/home/user/configs/**/*.json",
        "remote": "/etc/app/configs/"
      }
    ]
  }
}
4. Monitoring
Ressources systĂšme
JavaScript

{
  "tool": "get_system_resources",
  "arguments": {
    "alias": "prod_vps"
  }
}
// Retourne: CPU, RAM, Disque, Load Average
Statut des services
JavaScript

{
  "tool": "get_services_status",
  "arguments": {
    "alias": "prod_vps"
  }
}
// Retourne: systemd, Docker, PM2
Logs Docker
JavaScript

{
  "tool": "get_docker_logs",
  "arguments": {
    "alias": "prod_vps",
    "container": "nginx",
    "lines": 100,
    "since": "1h",
    "timestamps": true
  }
}
Logs PM2
JavaScript

{
  "tool": "get_pm2_logs",
  "arguments": {
    "alias": "prod_vps",
    "app": "api-server",
    "lines": 200,
    "errors": true
  }
}
5. Catalogue d`APIs
Ajouter une API
JavaScript

{
  "tool": "api_add",
  "arguments": {
    "alias": "main_api",
    "url": "https://api.example.com",
    "health_check_endpoint": "/health",
    "health_check_method": "GET",
    "auth_method": "api_key",
    "api_key": "your-api-key-here",
    "auth_header_name": "X-API-Key",
    "auth_scheme": ""
  }
}
Vérifier une API
JavaScript

{
  "tool": "api_check",
  "arguments": {
    "alias": "main_api",
    "server_alias": "prod_vps"
  }
}
// Retourne: status (UP/DOWN), http_code, response_time_ms
6. Gestion de la Queue
Voir toutes les tĂąches
JavaScript

{
  "tool": "task_queue",
  "arguments": {}
}
Statut d`une tĂąche
JavaScript

{
  "tool": "task_status",
  "arguments": {
    "id": "a3f8c2d1"
  }
}
Réessayer une tùche
JavaScript

{
  "tool": "task_retry",
  "arguments": {
    "id": "a3f8c2d1"
  }
}
Statistiques
JavaScript

{
  "tool": "queue_stats",
  "arguments": {}
}
// Retourne: total, byStatus, byType, avgDuration, successRate
Diagnostic complet
JavaScript

{
  "tool": "system_diagnostics",
  "arguments": {
    "verbose": true
  }
}
đŸ—ïž Architecture
Composants Principaux
text

┌─────────────────────────────────────────────┐
│           MCP Server (server.js)            │
│  ‱ Enregistrement des tools                 │
│  ‱ Validation des inputs (Zod)              │
│  ‱ Gestion des requĂȘtes/rĂ©ponses           │
└─────────────┬───────────────────────────────┘
              │
    ┌─────────┮─────────┐
    │                   │
┌───▌────┐       ┌──────▌────────┐
│ SSH    │       │ SFTP          │
│ Module │       │ Module        │
└───┬────┘       └──────┬────────┘
    │                   │
    └─────────┬─────────┘
              │
      ┌───────▌──────────┐
      │  SSH Pool        │
      │  ‱ Connexions    │
      │  ‱ Keep-alive    │
      │  ‱ Auto-cleanup  │
      └───────┬──────────┘
              │
      ┌───────▌──────────┐
      │  Queue Manager   │
      │  ‱ Jobs          │
      │  ‱ History       │
      │  ‱ Persistence   │
      └──────────────────┘
Flux d`Exécution
text

Client → Tool Call → Validation → Job Creation
                                       ↓
                              Pool Get Connection
                                       ↓
                              Execute (SSH/SFTP)
                                       ↓
                         ┌─────────────┮──────────────┐
                         │                            │
                    Quick Job                    Long Job
                    (< 30s)                      (> 30s)
                         │                            │
                    Sync Return               Async Background
                         │                            │
                    Update Queue              Update Queue
                         │                            │
                    Save History              Save History
📊 Gestion des Erreurs
Codes d`erreur
Code	Description	Action recommandée
CONNECTION_FAILED	Échec de connexion SSH	VĂ©rifier host/port/rĂ©seau
AUTH_FAILED	Authentification refusée	Vérifier user/key/password
COMMAND_TIMEOUT	Commande timeout	Augmenter timeout ou vérifier commande
TRANSFER_FAILED	Échec de transfert	VĂ©rifier chemins et permissions
QUEUE_FULL	Queue saturée	Nettoyer ou augmenter MAX_QUEUE_SIZE
RETRY_LIMIT_EXCEEDED	Max tentatives atteint	Vérifier la cause et retry manuellement
Exemple de réponse d`erreur
JSON

{
  "error": true,
  "code": "CONNECTION_FAILED",
  "message": "Impossible de se connecter au serveur",
  "details": {
    "alias": "prod_vps",
    "host": "192.168.1.100",
    "reason": "ECONNREFUSED"
  },
  "timestamp": "2024-11-14T10:30:45.123Z"
}
🔒 SĂ©curitĂ©
Bonnes pratiques
Clés SSH

Utilisez des clés plutÎt que des mots de passe
Protégez vos clés privées (chmod 600)
Utilisez des passphrases
Permissions

Limitez l`accÚs au répertoire MCP_DATA_DIR
Ne commitez jamais .env ou les fichiers de données
Réseau

Utilisez un VPN ou bastion pour l`accĂšs SSH
Configurez Fail2Ban sur les serveurs
Limitez les IPs autorisées
Mots de passe

Stockez-les dans des variables d`environnement
Utilisez des gestionnaires de secrets (Vault, etc.)
Fichiers Ă  exclure du versioning
gitignore

# .gitignore
.env
data/
*.json
!package.json
node_modules/
logs/
*.log
.DS_Store
đŸ§Ș Tests
Bash

# Tests unitaires
npm test

# Tests de fonctionnalités
node test_features.js

# Tests de connexion (nécessite un serveur configuré)
npm run test:integration
🐛 DĂ©bogage
Activer les logs verbeux
Bash

# Dans .env
MCP_DEBUG=true
Consulter les logs systĂšme
JavaScript

{
  "tool": "task_logs",
  "arguments": {
    "level": "error",
    "search": "timeout",
    "limit": 100
  }
}
Diagnostic complet
JavaScript

{
  "tool": "system_diagnostics",
  "arguments": {
    "verbose": true
  }
}
🚀 Performance
Optimisations
Pool de connexions: Réutilisation des connexions SSH
Queue persistante: Sauvegarde incrémentale toutes les 5s
Cleanup automatique: Nettoyage des vieilles tĂąches toutes les heures
Keep-alive: Maintien des connexions actives
Métriques typiques
Opération	Temps moyen
Commande simple	200-500ms
Upload 10MB	2-5s
Download 50MB	5-15s
Pool get connection	< 50ms (si disponible)
📈 Roadmap
 v6.0: Pool de connexions SSH
 v7.0: Gestion des prompts interactifs
 v8.0: Streaming de logs amélioration et correction bug path
 v9.0: Interface Web de monitoring
 v10.0: Support multi-utilisateurs
 v11.0: Chiffrement E2E des données sensibles
đŸ€ Contribution
Les contributions sont les bienvenues !

Fork le projet
Créez une branche (git checkout -b feature/amazing)
Committez (git commit -m `Add amazing feature`)
Push (git push origin feature/amazing)
Ouvrez une Pull Request
📝 Licence
MIT © [Votre Nom]

💬 Support
📧 Email: support@example.com
🐛 Issues: GitHub Issues
📖 Docs: Documentation complùte
🙏 Remerciements
Model Context Protocol
ssh2
ssh2-sftp-client

Recommended Servers

playwright-mcp

playwright-mcp

A Model Context Protocol server that enables LLMs to interact with web pages through structured accessibility snapshots without requiring vision models or screenshots.

Official
Featured
TypeScript
Magic Component Platform (MCP)

Magic Component Platform (MCP)

An AI-powered tool that generates modern UI components from natural language descriptions, integrating with popular IDEs to streamline UI development workflow.

Official
Featured
Local
TypeScript
Audiense Insights MCP Server

Audiense Insights MCP Server

Enables interaction with Audiense Insights accounts via the Model Context Protocol, facilitating the extraction and analysis of marketing insights and audience data including demographics, behavior, and influencer engagement.

Official
Featured
Local
TypeScript
VeyraX MCP

VeyraX MCP

Single MCP tool to connect all your favorite tools: Gmail, Calendar and 40 more.

Official
Featured
Local
Kagi MCP Server

Kagi MCP Server

An MCP server that integrates Kagi search capabilities with Claude AI, enabling Claude to perform real-time web searches when answering questions that require up-to-date information.

Official
Featured
Python
graphlit-mcp-server

graphlit-mcp-server

The Model Context Protocol (MCP) Server enables integration between MCP clients and the Graphlit service. Ingest anything from Slack to Gmail to podcast feeds, in addition to web crawling, into a Graphlit project - and then retrieve relevant contents from the MCP client.

Official
Featured
TypeScript
Qdrant Server

Qdrant Server

This repository is an example of how to create a MCP server for Qdrant, a vector search engine.

Official
Featured
Neon Database

Neon Database

MCP server for interacting with Neon Management API and databases

Official
Featured
Exa Search

Exa Search

A Model Context Protocol (MCP) server lets AI assistants like Claude use the Exa AI Search API for web searches. This setup allows AI models to get real-time web information in a safe and controlled way.

Official
Featured
E2B

E2B

Using MCP to run code via e2b.

Official
Featured