@fkom13/mcp-sftp-orchestrator 6.0.0 → 11.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/.env.example CHANGED
@@ -1,22 +1,28 @@
1
- # Chemin seront stockés les fichiers servers.json et history.json
2
- # Par défaut, ce sera ~/.config/mcp-orchestrator
1
+ # Répertoire de données (configs, historique, queue)
3
2
  MCP_DATA_DIR="/home/fkomp/Bureau/oracle/tools/sftp-mcp/data"
4
3
 
5
- # Délai en secondes avant qu'une tâche ne passe en arrière-plan (mode asynchrone)
6
- MCP_SYNC_TIMEOUT_S=30
4
+ # Délai avant passage en arrière-plan (secondes)
5
+ MCP_SYNC_TIMEOUT_S=120
7
6
 
8
- # Timeout pour l'exécution synchrone (ms)
9
- SYNC_TIMEOUT=30000
7
+ # Timeouts d'exécution (secondes)
8
+ MCP_DEFAULT_CMD_TIMEOUT_S=600 # 10 minutes
9
+ MCP_INTERACTIVE_CMD_TIMEOUT_S=300 # 5 minutes
10
+ MCP_MAX_WAIT_TIMEOUT_S=600 # 10 minutes max pour task_wait
10
11
 
11
- # Taille maximale de la queue
12
- MAX_QUEUE_SIZE=1000
13
-
14
- # Pool de connexions
12
+ # Pool de connexions SSH
15
13
  MAX_CONNECTIONS_PER_SERVER=5
16
14
  MIN_CONNECTIONS_PER_SERVER=1
17
- IDLE_TIMEOUT=320000
18
- KEEP_ALIVE_INTERVAL=300000
15
+ IDLE_TIMEOUT=300000 # 5 minutes
16
+ KEEP_ALIVE_INTERVAL=30000 # 30 secondes
17
+
18
+ # Queue
19
+ MAX_QUEUE_SIZE=1000
20
+ SAVE_INTERVAL=5000 # Sauvegarde toutes les 5s
21
+ HISTORY_RETENTION=2678400000 # 31 jours
22
+
23
+ # Restreindre l'accès fichiers à des racines spécifiques (optionnel)
24
+ # Défaut: vide = accès complet. Exemple: MCP_ALLOWED_ROOTS=/srv/apps,/etc/nginx
25
+ MCP_ALLOWED_ROOTS=
19
26
 
20
- # Sauvegarde
21
- SAVE_INTERVAL=5000
22
- HISTORY_RETENTION=2678400000
27
+ # Activer ou désactiver Debug wrapper
28
+ MCP_DEBUG=false
@@ -0,0 +1,76 @@
1
+ project_name: sftp-mcp
2
+ ignore:
3
+ dirs:
4
+ - node_modules
5
+ - venv
6
+ - .venv
7
+ - env
8
+ - __pycache__
9
+ - .git
10
+ - dist
11
+ - build
12
+ - .next
13
+ - coverage
14
+ - node_modules
15
+ - dist
16
+ - .next
17
+ - venv
18
+ - .venv
19
+ - __pycache__
20
+ - dist
21
+ - build
22
+ files:
23
+ - .DS_Store
24
+ - Thumbs.db
25
+ - package-lock.json
26
+ - yarn.lock
27
+ extensions:
28
+ - .log
29
+ - .pyc
30
+ - .pyo
31
+ - .exe
32
+ - .bin
33
+ - .jpg
34
+ - .png
35
+ - .gif
36
+ - .mp4
37
+ - .pdf
38
+ - .zip
39
+ - .pyc
40
+ - .pyo
41
+ - .pyd
42
+ patterns: []
43
+ autosave:
44
+ enabled: false
45
+ mode: hybrid
46
+ timer:
47
+ interval: 300
48
+ diff_threshold:
49
+ threshold: 0.05
50
+ check_interval: 60
51
+ ignore_whitespace: true
52
+ ignore_comments: false
53
+ hybrid:
54
+ min_interval: 180
55
+ max_interval: 600
56
+ threshold: 0.03
57
+ retention:
58
+ max_autosaves: 50
59
+ compress_after_days: 7
60
+ delete_after_days: 30
61
+ keep_manual: true
62
+ diff_format:
63
+ default: unified
64
+ unified_context: 3
65
+ json_include_content: true
66
+ ast_enabled: false
67
+ output:
68
+ default_name: '{project}_doc_{date}.md'
69
+ include_tree: true
70
+ include_code: true
71
+ tree_full_code_select: false
72
+ language_detection: true
73
+ max_file_size: 1000000
74
+ storage_path: .gencodedoc
75
+ compression_enabled: true
76
+ compression_level: 3
package/README.fr.md ADDED
@@ -0,0 +1,369 @@
1
+ # 🚀 MCP Orchestrator — Serveur d'orchestration SSH/SFTP
2
+
3
+ **Version** : 11.3.0
4
+ **License** : MIT
5
+ **Node** : >= 18.0.0
6
+
7
+ 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.
8
+
9
+ ### ✨ Fonctionnalités clés
10
+ - **63 outils MCP** — SSH, SFTP, fichiers, monitoring, snapshots, tunnels
11
+ - **Sécurité intégrée** — Blocklist de commandes, allowlist de ports, hash protection
12
+ - **Multi-serveur** — `task_exec {alias:["vps1","vps2"]}` ou `alias:"all"}`
13
+ - **Persistance** — tmux + file d'attente = sessions qui survivent aux crashs
14
+ - **Snapshots** — Versionning dédupliqué de vos fichiers critiques
15
+ - **Tunnels SSH** — Local, Remote, SOCKS5 avec allowlist sécurisée
16
+ - **Guide IA** — Manuel intégré pour l'agent (section:index/workflows/audit/security)
17
+
18
+ ---
19
+
20
+ ## 📦 Installation
21
+
22
+ ### Via npx (recommandé)
23
+ ```bash
24
+ npx @fkom13/mcp-sftp-orchestrator
25
+ ```
26
+
27
+ ### Via git
28
+ ```bash
29
+ git clone https://github.com/fkom13/mcp-sftp-orchestrator.git
30
+ cd mcp-sftp-orchestrator
31
+ npm install
32
+ cp .env.example .env
33
+ # Éditer .env avec vos chemins
34
+ ```
35
+
36
+ Prérequis : Node.js >= 18.0.0
37
+
38
+ ---
39
+
40
+ ## ⚙️ Configuration (.env)
41
+
42
+ Toutes les variables sont optionnelles. Les valeurs par défaut sont conçues pour un usage standard.
43
+
44
+ | Variable | Défaut | Description |
45
+ |----------|--------|-------------|
46
+ | `MCP_DATA_DIR` | `~/.config/mcp-orchestrator` | Dossier où sont stockés `servers.json`, `apis.json`, `queue.json`, `history.json` |
47
+ | `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) |
48
+ | `MCP_DEFAULT_CMD_TIMEOUT_S` | `600` | Timeout SSH par défaut en secondes. `0` = aucune limite |
49
+ | `MCP_INTERACTIVE_CMD_TIMEOUT_S` | `300` | Timeout pour les commandes interactives. `0` = aucune limite |
50
+ | `MCP_MAX_WAIT_TIMEOUT_S` | `600` | Timeout maximum pour l'outil `task_wait` |
51
+ | `MAX_CONNECTIONS_PER_SERVER` | `5` | Nombre max de connexions SSH simultanées par serveur |
52
+ | `MIN_CONNECTIONS_PER_SERVER` | `1` | Nombre min de connexions SSH maintenues par serveur |
53
+ | `IDLE_TIMEOUT` | `300000` | Délai en ms avant fermeture d'une connexion SSH inactive (5 min) |
54
+ | `KEEP_ALIVE_INTERVAL` | `30000` | Intervalle keepalive SSH en ms (30s) |
55
+ | `MAX_QUEUE_SIZE` | `1000` | Nombre maximum de jobs dans la file d'attente |
56
+ | `SAVE_INTERVAL` | `5000` | Intervalle de sauvegarde de la queue sur disque en ms (5s) |
57
+ | `MCP_DEBUG` | `false` | `true` pour activer les logs détaillés dans stderr |
58
+
59
+ ---
60
+
61
+ ## 🔌 Connexion au client MCP (OpenCode, Claude Desktop, etc.)
62
+
63
+ ```json
64
+ {
65
+ "mcpServers": {
66
+ "orchestrator": {
67
+ "command": "node",
68
+ "args": ["/chemin/vers/sftp-mcp/server.js"],
69
+ "env": {
70
+ "MCP_DATA_DIR": "/chemin/vers/sftp-mcp/data"
71
+ }
72
+ }
73
+ }
74
+ }
75
+ ```
76
+
77
+ ---
78
+
79
+ ## 🧰 Référence des Outils (63 outils)
80
+
81
+ ### Aide & Diagnostic
82
+ | Outil | Description |
83
+ |-------|-------------|
84
+ | `help` | Guide complet : liste des outils, variables .env, schémas des paramètres |
85
+ | `guide` | Manuel IA : workflows, cheatsheet, audit, sécurité |
86
+ | `system_diagnostics` | Diagnostic complet (queue, pool, serveurs, APIs) |
87
+
88
+ ### Gestion des Serveurs
89
+ | Outil | Description |
90
+ |-------|-------------|
91
+ | `server_add` | Ajouter/modifier un alias de serveur |
92
+ | `server_list` | Lister tous les serveurs configurés |
93
+ | `server_remove` | Supprimer un alias de serveur |
94
+ | `infra_overview` | Vue synthétique du parc (rôles, services, warnings) |
95
+ | `server_note_set/get/list/remove` | Contexte documenté de chaque serveur |
96
+
97
+ ### Sécurité (Blocklist)
98
+ | Outil | Description |
99
+ |-------|-------------|
100
+ | `policy_blocklist_list` | Lister les commandes bloquées |
101
+ | `policy_blocklist_add` | Ajouter un pattern à la blocklist |
102
+ | `policy_blocklist_remove` | Retirer un pattern de la blocklist |
103
+
104
+ ### Exécution de Tâches
105
+ | Outil | Description |
106
+ |-------|-------------|
107
+ | `task_exec` | SSH one-shot. Supporte `alias:["vps1","vps2"]` ou `alias:"all"` |
108
+ | `task_exec_interactive` | SSH avec gestion des prompts interactifs |
109
+ | `task_exec_sequence` | Séquence de commandes SSH |
110
+ | `task_transfer` | Transfert SFTP. Supporte `server_to_server` direct |
111
+ | `task_transfer_multi` | Transferts multiples avec patterns glob |
112
+
113
+ ### Monitoring
114
+ | Outil | Description |
115
+ |-------|-------------|
116
+ | `get_system_resources` | CPU, RAM, Disque d'un serveur |
117
+ | `get_services_status` | Statut systemd, Docker, PM2 (graceful fallback) |
118
+ | `get_fail2ban_status` | Statut Fail2Ban |
119
+ | `check_api_health` | Test HTTP direct |
120
+
121
+ ### Logs
122
+ | Outil | Description |
123
+ |-------|-------------|
124
+ | `get_pm2_logs` | Logs PM2 |
125
+ | `get_docker_logs` | Logs Docker |
126
+ | `tail_file` | Dernières lignes d'un fichier distant |
127
+
128
+ ### Opérations Fichiers (Local + Remote)
129
+ | Outil | Description |
130
+ |-------|-------------|
131
+ | `file_read` | Lire fichier + hash SHA-256 (protection édition) |
132
+ | `file_write` | Créer/écraser avec `dryRun` et `backup` |
133
+ | `file_edit` | Édition chirurgicale ou complète + protection hash |
134
+
135
+ ### Comparaison & Drift
136
+ | Outil | Description |
137
+ |-------|-------------|
138
+ | `diff_files` | Comparer 2 fichiers (local/remote, cross-server) |
139
+ | `diff_folders` | Comparer 2 dossiers |
140
+ | `compare_all_sources` | Détecter les drifts sur N serveurs |
141
+
142
+ ### Sessions Shell Persistantes
143
+ | Outil | Description |
144
+ |-------|-------------|
145
+ | `shell_create` | Ouvrir une session shell (cd/env persistent) |
146
+ | `shell_exec` | Exécuter dans une session existante |
147
+ | `shell_list` / `shell_close` | Lister/fermer les sessions |
148
+
149
+ ### tmux (Sessions Terminal Survivantes)
150
+ | Outil | Description |
151
+ |-------|-------------|
152
+ | `tmux_create` | Créer une session tmux persistante |
153
+ | `tmux_exec` | Envoyer une commande dans une session |
154
+ | `tmux_read` | Lire le buffer |
155
+ | `tmux_list` / `tmux_kill` | Lister/tuer les sessions |
156
+
157
+ ### Tunnels SSH
158
+ | Outil | Description |
159
+ |-------|-------------|
160
+ | `tunnel_create` | Tunnel local/remote/SOCKS5, persistant via tmux |
161
+ | `tunnel_list` | Lister les tunnels actifs |
162
+ | `tunnel_close` | Fermer un tunnel |
163
+ | `tunnel_allowlist_add/remove` | Gérer les ports autorisés |
164
+
165
+ ### Snapshots (Versioning Fichiers)
166
+ | Outil | Description |
167
+ |-------|-------------|
168
+ | `snapshot_create` | Capturer l'état de fichiers avec déduplication |
169
+ | `snapshot_list` | Lister les snapshots |
170
+ | `snapshot_diff` | Comparer 2 snapshots |
171
+ | `snapshot_restore` | Restaurer (dryRun par défaut) |
172
+ | `snapshot_delete` | Supprimer + nettoyage orphelins |
173
+
174
+ ### File d'Attente & Suivi
175
+ | Outil | Description |
176
+ |-------|-------------|
177
+ | `task_queue` | Voir toutes les tâches en cours |
178
+ | `task_status` | Détail d'une tâche |
179
+ | `task_history` | Historique filtrable |
180
+ | `task_retry` | Relancer une tâche échouée |
181
+ | `task_wait` | Attendre une tâche arrière-plan |
182
+ | `task_logs` | Logs internes MCP |
183
+ | `queue_stats` / `pool_stats` | Statistiques queue et pool SSH |
184
+
185
+ ### Gestion des APIs
186
+ | Outil | Description |
187
+ |-------|-------------|
188
+ | `api_add` / `api_list` / `api_remove` | Catalogue d'APIs |
189
+ | `api_check` | Test de santé via SSH + curl |
190
+
191
+ ---
192
+
193
+ ## 📖 Exemples d'utilisation
194
+
195
+ ### Multi-serveur
196
+ ```bash
197
+ # Une commande sur plusieurs serveurs
198
+ task_exec {alias:["vps1","vps2","vps3"], cmd:"uptime"}
199
+
200
+ # Tout le parc
201
+ task_exec {alias:"all", cmd:"df -h /"}
202
+ ```
203
+
204
+ ### Tunnel SOCKS5 (proxy)
205
+ ```bash
206
+ tunnel_create {name:"proxy", type:"socks", listen_port:1080, via:"vps_paris"}
207
+ # → Navigateur → SOCKS5 127.0.0.1:1080 → VPS Paris
208
+ ```
209
+
210
+ ### Tunnel local (accès service distant)
211
+ ```bash
212
+ tunnel_create {name:"crm", type:"local", listen_port:8080, target:"127.0.0.1:3100", via:"vps_prod"}
213
+ # → http://localhost:8080 → CRM en production
214
+ ```
215
+
216
+ ### Tunnel remote (exposer un service local)
217
+ ```bash
218
+ tunnel_create {name:"dev", type:"remote", listen_port:9090, target:"127.0.0.1:3000", via:"vps", source:"vps_prod", key_path:"/home/user/.ssh/vps.key"}
219
+ # → vps_prod:9090 → votre machine locale:3000
220
+ ```
221
+
222
+ ### Session tmux persistante
223
+ ```bash
224
+ tmux_create {alias:"vps", name:"build", start_cmd:"npm run build"}
225
+ tmux_read {alias:"vps", session:"build"}
226
+ tmux_kill {alias:"vps", session:"build"}
227
+ ```
228
+
229
+ ### Blocklist (sécurité)
230
+ ```bash
231
+ # Voir les commandes bloquées
232
+ policy_blocklist_list
233
+ # → ["rm -rf /", "mkfs*", ...]
234
+
235
+ # Contournement conscient
236
+ task_exec {alias:"vps", cmd:"rm -rf /tmp/cache", skip_policy:true}
237
+ ```
238
+
239
+ ### Édition de fichier sécurisée
240
+ ```bash
241
+ # Lire + hash
242
+ file_read {source:{type:"remote", alias:"vps", path:"/etc/nginx/nginx.conf"}}
243
+ # → content + hash
244
+
245
+ # Éditer avec protection
246
+ file_edit {source:{type:"remote", alias:"vps", path:"/etc/nginx/nginx.conf"},
247
+ oldString:"worker_connections 768;",
248
+ newString:"worker_connections 1024;",
249
+ expectedHash:"abc123...",
250
+ backup:true}
251
+
252
+ # Preview sans écrire
253
+ file_edit {source:{type:"remote", alias:"vps", path:"/etc/nginx/nginx.conf"},
254
+ oldString:"worker_connections 768;",
255
+ newString:"worker_connections 1024;",
256
+ dryRun:true}
257
+ ```
258
+
259
+ ### Snapshot avant modif risquée
260
+ ```bash
261
+ # Avant
262
+ snapshot_create {source:{type:"remote", alias:"vps"}, paths:["/etc/nginx/"], tag:"before-fix"}
263
+
264
+ # Après si problème
265
+ snapshot_restore {snapshotId:"...", target:{type:"remote", alias:"vps"}, dryRun:false, force:true}
266
+ ```
267
+
268
+ ### Drift detection (comparaison multi-serveur)
269
+ ```bash
270
+ compare_all_sources {sources:[
271
+ {type:"remote", alias:"vps1", path:"/etc/nginx/nginx.conf", label:"prod"},
272
+ {type:"remote", alias:"vps2", path:"/etc/nginx/nginx.conf", label:"staging"}
273
+ ]}
274
+ ```
275
+
276
+ ---
277
+
278
+ ## 🏗️ Architecture
279
+
280
+ ```
281
+ Client MCP (stdio)
282
+
283
+ server.js ─── 63 outils MCP enregistrés
284
+
285
+ ├── queue.js ─────── File d'attente persistante (JSON + backup)
286
+ ├── ssh.js ───────── Exécution SSH (pool + connexions dédiées)
287
+ ├── sftp.js ──────── Transferts SFTP (upload/download/multi)
288
+ ├── sshPool.js ───── Pool de connexions SSH persistantes
289
+ ├── servers.js ───── CRUD alias de serveurs
290
+ ├── apis.js ──────── CRUD catalogue d'APIs
291
+ ├── history.js ───── Historique des tâches
292
+ ├── config.js ────── Configuration centralisée
293
+ ├── utils.js ─────── Utilitaires (escapeShellArg)
294
+ ├── fileOps.js ───── Opérations fichiers (read/write/edit)
295
+ ├── diffEngine.js ── Moteur de diff (fichiers/dossiers/sources)
296
+ ├── compareEngine.js ─ Comparaison multi-sources
297
+ ├── diffFormatter.js ─ Formatage des diffs
298
+ ├── sourceAdapter.js ─ Abstraction local/remote
299
+ ├── shellSessions.js ─ Sessions shell persistantes
300
+ ├── snapshotManager.js ─ Snapshots versionnés
301
+ ├── notes.js ──────── Contexte documenté des serveurs
302
+ ├── policies.js ──── Blocklist de commandes
303
+ ├── tunnels.js ────── Tunnels SSH (local/remote/SOCKS)
304
+ ├── guide.js ──────── Manuel IA intégré
305
+ └── diagnose.js ───── Diagnostics
306
+ ```
307
+
308
+ ### Cycle de vie d'un job
309
+
310
+ ```
311
+ pending → running → completed / failed
312
+ ↓ (si redémarrage)
313
+ crashed → retry → pending
314
+ ```
315
+
316
+ ---
317
+
318
+ ## 📚 Manuel IA intégré (guide)
319
+
320
+ L'orchestrator embarque un manuel interactif pour l'agent IA :
321
+
322
+ ```bash
323
+ guide section:index # Table des matières
324
+ guide section:workflows # Recettes copier-coller
325
+ guide section:cheatsheet # Table outil → usage
326
+ guide section:audit # Audit complet du parc en 8 étapes
327
+ guide section:security # Blocklist + tunnels
328
+ guide section:pitfalls # Pièges à éviter
329
+ ```
330
+
331
+ ---
332
+
333
+ ## 🔒 Sécurité
334
+
335
+ - **Command Blocklist** : `rm -rf /`, `mkfs*`, fork bombs et autres commandes destructrices sont bloquées par défaut
336
+ - **Contournement conscient** : `skip_policy: true` pour forcer l'exécution
337
+ - **Allowlist de ports tunnels** : seuls les ports explicitement autorisés peuvent être utilisés
338
+ - **`escapeShellArg()`** : toutes les URLs et chemins sont échappés avant passage à curl/shell
339
+ - **Détection de secrets en clair** : warning au démarrage si mots de passe/clés API en clair
340
+ - **Snapshots avant modif** : `backup:true` sur file_edit/file_write pour annuler une erreur
341
+ - **Recommandation** : clés SSH (pas de mots de passe), stockez les secrets dans Vaultwarden
342
+
343
+ ---
344
+
345
+ ## 🧪 Tests
346
+
347
+ ```bash
348
+ node diagnose.js # Diagnostic complet
349
+ node test_mcp.js # Test smoke MCP
350
+ node test_features.js # Tests unitaires (queue, pool, glob, prompts, crash)
351
+ ```
352
+
353
+ ---
354
+
355
+ ## 🛣️ Roadmap
356
+
357
+ | Version | Changement |
358
+ |---------|------------|
359
+ | 10.0.0 | Nouveaux outils : file_read/write/edit, diff, snapshots, shell, notes |
360
+ | 10.4.0 | server_to_server, help avec schémas, guide audit |
361
+ | 11.0.0 | Command Blocklist, Multi-host (`alias:"all"`), tmux |
362
+ | 11.3.0 | Tunnels SSH (local/remote/SOCKS5), allowlist, fix ssh2 stderr |
363
+ | 12.0.0 (planifié) | Auto-setup clés tunnels, webhooks, dashboard statique |
364
+
365
+ ---
366
+
367
+ ## 📄 Licence
368
+
369
+ MIT — Copyright (c) 2025-2026 Franck (fkom13)