@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 +21 -15
- package/.gencodedoc.yaml +76 -0
- package/README.fr.md +369 -0
- package/README.md +333 -61
- package/ROADMAP.md +21 -0
- package/apis.js +17 -0
- package/compareEngine.js +132 -0
- package/config.js +35 -4
- package/diagnose.js +89 -0
- package/diffEngine.js +141 -0
- package/diffFormatter.js +114 -0
- package/fileOps.js +275 -0
- package/guide.js +236 -0
- package/history.js +8 -1
- package/notes.js +87 -0
- package/package.json +5 -22
- package/policies.js +76 -0
- package/queue.js +107 -121
- package/server.js +1460 -108
- package/sftp.js +131 -41
- package/shellSessions.js +237 -0
- package/snapshotManager.js +324 -0
- package/sourceAdapter.js +357 -0
- package/ssh.js +168 -84
- package/sshPool.js +52 -56
- package/test_mcp.js +55 -0
- package/tunnels.js +224 -0
- package/utils.js +6 -0
- package/publish1github.md +0 -216
package/.env.example
CHANGED
|
@@ -1,22 +1,28 @@
|
|
|
1
|
-
#
|
|
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
|
|
6
|
-
MCP_SYNC_TIMEOUT_S=
|
|
4
|
+
# Délai avant passage en arrière-plan (secondes)
|
|
5
|
+
MCP_SYNC_TIMEOUT_S=120
|
|
7
6
|
|
|
8
|
-
#
|
|
9
|
-
|
|
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
|
-
#
|
|
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=
|
|
18
|
-
KEEP_ALIVE_INTERVAL=
|
|
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
|
-
#
|
|
21
|
-
|
|
22
|
-
HISTORY_RETENTION=2678400000
|
|
27
|
+
# Activer ou désactiver Debug wrapper
|
|
28
|
+
MCP_DEBUG=false
|
package/.gencodedoc.yaml
ADDED
|
@@ -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)
|