MCP SFTP Orchestrator
The MCP SFTP Orchestrator is a Model Context Protocol server for orchestrating remote SSH/SFTP tasks, server management, and system monitoring through an LLM-compatible stdio interface.
Core Capabilities:
Server Management: Add, list, and remove server configurations with SSH key or password authentication and secure credential storage.
SSH Command Execution: Execute simple, interactive, or sequential commands with auto-response to prompts, persistent connection pools, automatic retry, and log streaming (PM2, Docker, tail, journalctl).
SFTP File Transfers: Upload/download files and folders with glob pattern support (
*.txt,**/*.js), multi-file transfers, and automatic parent directory creation.System Monitoring: Check system resources (CPU, RAM, Disk, load average), service status (systemd, Docker, PM2), Fail2Ban information, and perform HTTP/HTTPS health checks with authentication.
API Management: Configure and manage an API catalog for health monitoring with various authentication methods (API key, Basic Auth, both, or none).
Log Retrieval: Access PM2 application logs, Docker container logs with timestamp/time-range filters, tail remote files, and view MCP system logs with filtering.
Task Queue Management: Persistent, auto-saving queue with hybrid sync/async execution, detailed task history, manual/automatic retry, and comprehensive statistics including success rates and average durations.
System Administration: Monitor SSH connection pool statistics, system diagnostics, and performance metrics with structured error handling and security best practices.
Enables monitoring and retrieval of Docker container logs, including container status checks and log streaming with configurable parameters.
Supports configuration through .env files for managing environment variables and server settings.
Provides SFTP-based file transfer capabilities including upload/download of files and directories with glob pattern support and automatic parent directory creation.
Enables monitoring and management of NGINX services through systemd service status checks and log retrieval.
Supports installation and execution via npm/npx package manager for streamlined deployment.
Provides dedicated tools for retrieving PM2 process logs, monitoring application status, and managing PM2-controlled services.
Recommended for secure storage and management of secrets and API credentials as part of security best practices.
Uses Zod schema validation for input validation and type safety of tool arguments and configuration.
Click on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@MCP SFTP Orchestratorcheck the CPU and memory usage on my production server"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
đ MCP Orchestrator - Serveur d`orchestration SSH/SFTP
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.
Clonez le dépÎt :
git clone https://github.com/fkom13/mcp-sftp-orchestrator.git cd mcp-sftp-orchestratorInstallez les dépendances :
npm installConfigurez 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é :
Variables d'environnement du client MCP (le bloc
envdans votre JSON) : Priorité la plus haute. C'est la méthode recommandée pour définir le dossier de données.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.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 promptsyes/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 patternsglob.
Monitoring & Diagnostics
Outil | Description |
| RécupÚre les métriques systÚme vitales (CPU, RAM, Disque). |
| RécupÚre le statut des services (systemd, Docker, PM2). |
| RécupÚre les informations du service Fail2Ban. |
| 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-clientResources
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