@fkom13/mcp-sftp-orchestrator 6.0.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 ADDED
@@ -0,0 +1,22 @@
1
+ # Chemin où seront stockés les fichiers servers.json et history.json
2
+ # Par défaut, ce sera ~/.config/mcp-orchestrator
3
+ MCP_DATA_DIR="/home/fkomp/Bureau/oracle/tools/sftp-mcp/data"
4
+
5
+ # Délai en secondes avant qu'une tâche ne passe en arrière-plan (mode asynchrone)
6
+ MCP_SYNC_TIMEOUT_S=30
7
+
8
+ # Timeout pour l'exécution synchrone (ms)
9
+ SYNC_TIMEOUT=30000
10
+
11
+ # Taille maximale de la queue
12
+ MAX_QUEUE_SIZE=1000
13
+
14
+ # Pool de connexions
15
+ MAX_CONNECTIONS_PER_SERVER=5
16
+ MIN_CONNECTIONS_PER_SERVER=1
17
+ IDLE_TIMEOUT=320000
18
+ KEEP_ALIVE_INTERVAL=300000
19
+
20
+ # Sauvegarde
21
+ SAVE_INTERVAL=5000
22
+ HISTORY_RETENTION=2678400000
package/README.md ADDED
@@ -0,0 +1,102 @@
1
+ # 🚀 MCP SFTP/SSH Orchestrator
2
+
3
+ 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.
4
+
5
+ ✨ **Fonctionnalités Principales**
6
+
7
+ - **Gestion de Serveurs** : Ajoutez, listez et supprimez des configurations de serveurs SSH/SFTP.
8
+ - **Exécution de Tâches SSH** : Simple, interactive, ou en séquence.
9
+ - **Transferts de Fichiers SFTP** : Upload/Download de fichiers et dossiers, avec support des patterns `glob`.
10
+ - **File d'Attente Intelligente** : Mode hybride (synchrone/asynchrone) et persistance des tâches.
11
+ - **Pooling de Connexions** : Gère un pool de connexions SSH pour une exécution ultra-rapide.
12
+ - **Outils de Monitoring** : Surveillez les ressources système, le statut des services (systemd, Docker, PM2) et Fail2Ban.
13
+ - **Outils de Logs** : Récupérez les logs de PM2, Docker, ou suivez la fin d'un fichier (`tail`).
14
+
15
+ ## 📦 Installation
16
+
17
+ Ce projet est conçu pour être utilisé comme un outil MCP dans un environnement compatible (comme la `gemini-cli`).
18
+
19
+ Enregistrez ce MCP auprès de votre client en utilisant la configuration suivante :
20
+
21
+ ```json
22
+ {
23
+ "mcpServers": {
24
+ "mcp-sftp-orchestrator": {
25
+ "command": "npx",
26
+ "args": [
27
+ "@fkom13/mcp-sftp-orchestrator"
28
+ ],
29
+ "env": {
30
+ "MCP_DATA_DIR": "~/.config/mcp-orchestrator"
31
+ }
32
+ }
33
+ }
34
+ }
35
+ ```
36
+
37
+ Le client MCP lancera automatiquement le serveur via `npx` lors de son premier appel.
38
+
39
+ ## 🛠️ Configuration
40
+
41
+ Le serveur est configurable via des variables d'environnement. Vous pouvez créer un fichier `.env` à la racine du projet si vous l'exécutez localement pour le développement.
42
+
43
+ - `MCP_DATA_DIR`: Le dossier où seront stockées les données (configurations des serveurs, historique, etc.). Par défaut : `~/.config/mcp-orchestrator`.
44
+ - `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`.
45
+
46
+ ## 🧰 Référence des Outils (API)
47
+
48
+ Voici la liste complète des outils exposés par ce serveur MCP.
49
+
50
+ ### Gestion des Serveurs
51
+
52
+ - `server_add`: Enregistre ou met à jour les informations de connexion d'un serveur.
53
+ - `server_list`: Affiche la liste de tous les alias de serveurs configurés.
54
+ - `server_remove`: Supprime un alias de serveur de la configuration.
55
+
56
+ ### Exécution de Tâches
57
+
58
+ - `task_exec`: Exécute une commande SSH (hybride synchrone/asynchrone).
59
+ - `task_transfer`: Transfère un fichier ou dossier via SFTP (hybride synchrone/asynchrone).
60
+ - `task_exec_interactive`: Exécute une commande SSH interactive (gère les prompts `yes/no`, etc.).
61
+ - `task_exec_sequence`: Exécute plusieurs commandes SSH en séquence sur le même serveur.
62
+ - `task_transfer_multi`: Transfère plusieurs fichiers/dossiers avec support de patterns `glob`.
63
+
64
+ ### Monitoring & Diagnostics
65
+
66
+ - `get_system_resources`: Récupère les métriques système vitales (CPU, RAM, Disque).
67
+ - `get_services_status`: Récupère le statut des services (systemd, Docker, PM2).
68
+ - `get_fail2ban_status`: Récupère les informations du service Fail2Ban.
69
+
70
+ ### Récupération de Logs
71
+
72
+ - `get_pm2_logs`: Raccourci pour récupérer les logs PM2.
73
+ - `get_docker_logs`: Raccourci pour récupérer les logs d'un container Docker.
74
+ - `tail_file`: Affiche les dernières lignes d'un fichier distant.
75
+
76
+ ### Gestion de la File d'Attente (Queue)
77
+
78
+ - `task_queue`: Affiche le statut de toutes les tâches dans la file d'attente.
79
+ - `task_status`: Récupère les détails d'une tâche par son ID.
80
+ - `task_history`: Affiche l'historique des dernières tâches lancées.
81
+ - `task_retry`: Relance une tâche qui a échoué ou crashé.
82
+ - `queue_stats`: Affiche les statistiques de la queue de tâches.
83
+
84
+ ### Gestion des APIs (Monitoring Externe)
85
+
86
+ - `api_add`: Ajoute une API au catalogue de monitoring.
87
+ - `api_list`: Affiche toutes les APIs configurées.
88
+ - `api_remove`: Supprime une API du catalogue.
89
+ - `api_check`: Lance un test de santé sur une API.
90
+
91
+ ### Administration du Serveur MCP
92
+
93
+ - `task_logs`: Affiche les logs du système MCP lui-même.
94
+ - `pool_stats`: Affiche les statistiques du pool de connexions SSH.
95
+
96
+ ## 🤝 Contribution
97
+
98
+ Les contributions sont les bienvenues ! N'hésitez pas à ouvrir une *Issue* pour signaler un bug ou proposer une fonctionnalité, ou une *Pull Request* pour soumettre des modifications.
99
+
100
+ ## 📄 Licence
101
+
102
+ Ce projet est sous licence MIT.
package/apis.js ADDED
@@ -0,0 +1,88 @@
1
+ import fs from 'fs/promises';
2
+ import path from 'path';
3
+ import config from './config.js';
4
+
5
+ const APIS_FILE = path.join(config.dataDir, 'apis.json');
6
+
7
+ let apis = {};
8
+
9
+ let isInitialized = false;
10
+ let initPromise = null;
11
+
12
+ // Charger les APIs au démarrage
13
+ async function loadApis() {
14
+ try {
15
+ const data = await fs.readFile(APIS_FILE, 'utf-8');
16
+ apis = JSON.parse(data);
17
+ } catch (err) {
18
+ if (err.code === 'ENOENT') {
19
+ // Le fichier n'existe pas encore, c'est normal
20
+ apis = {};
21
+ } else {
22
+ console.error("Erreur lors du chargement de apis.json:", err);
23
+ }
24
+ }
25
+ }
26
+
27
+ async function ensureInitialized() {
28
+ if (isInitialized) return;
29
+ if (!initPromise) {
30
+ initPromise = loadApis().then(() => { isInitialized = true; });
31
+ }
32
+ return initPromise;
33
+ }
34
+
35
+ // Sauvegarder les APIs
36
+ async function saveApis() {
37
+ await ensureInitialized();
38
+ try {
39
+ await fs.writeFile(APIS_FILE, JSON.stringify(apis, null, 2));
40
+ } catch (err) {
41
+ console.error("Erreur lors de la sauvegarde de apis.json:", err);
42
+ }
43
+ }
44
+
45
+ // Ajouter ou mettre à jour une API
46
+ async function addApi(alias, apiConfig) {
47
+ await ensureInitialized();
48
+ apis[alias] = apiConfig;
49
+ await saveApis();
50
+ return { success: true, message: `API '${alias}' ajoutée/mise à jour avec succès.` };
51
+ }
52
+
53
+ // Lister toutes les APIs
54
+ async function listApis() {
55
+ await ensureInitialized();
56
+ return apis;
57
+ }
58
+
59
+ // Obtenir une API par son alias
60
+ async function getApi(alias) {
61
+ await ensureInitialized();
62
+ const apiConfig = apis[alias];
63
+ if (!apiConfig) {
64
+ throw new Error(`L'alias d'API '${alias}' est inconnu.`);
65
+ }
66
+ return apiConfig;
67
+ }
68
+
69
+ // Supprimer une API
70
+ async function removeApi(alias) {
71
+ await ensureInitialized();
72
+ if (!apis[alias]) {
73
+ throw new Error(`L'alias d'API '${alias}' est inconnu.`);
74
+ }
75
+ delete apis[alias];
76
+ await saveApis();
77
+ return { success: true, message: `API '${alias}' supprimée avec succès.` };
78
+ }
79
+
80
+ // Initialiser le module
81
+ ensureInitialized();
82
+
83
+ export default {
84
+ addApi,
85
+ listApis,
86
+ getApi,
87
+ removeApi
88
+ };
package/config.js ADDED
@@ -0,0 +1,34 @@
1
+ import dotenv from 'dotenv';
2
+ import path from 'path';
3
+ import os from 'os';
4
+ import fs from 'fs';
5
+ import { fileURLToPath } from 'url';
6
+
7
+ // --- Début de la Correction ---
8
+ // Trouve le chemin du .env par rapport à l'emplacement de ce script, et non du répertoire de travail
9
+ const __filename = fileURLToPath(import.meta.url);
10
+ const __dirname = path.dirname(__filename);
11
+ dotenv.config({ path: path.join(__dirname, '.env') });
12
+ // --- Fin de la Correction ---
13
+
14
+ // Analyser les arguments de la ligne de commande (ex: --data-dir=...)
15
+ const args = process.argv.slice(2).reduce((acc, arg) => {
16
+ const [key, value] = arg.split('=');
17
+ if (key && value) {
18
+ acc[key.replace(/^--/, '')] = value;
19
+ }
20
+ return acc;
21
+ }, {});
22
+
23
+ const config = {
24
+ // La hiérarchie reste la même : les arguments en ligne de commande écrasent le .env, qui écrase le défaut.
25
+ dataDir: args['data-dir'] || process.env.MCP_DATA_DIR || path.join(os.homedir(), '.config', 'mcp-orchestrator'),
26
+ syncTimeout: parseInt(args['sync-timeout'] || process.env.MCP_SYNC_TIMEOUT_S || '10', 10) * 1000,
27
+ defaultCommandTimeout: parseInt(process.env.MCP_DEFAULT_CMD_TIMEOUT_MS || '300000', 10),
28
+ interactiveCommandTimeout: parseInt(process.env.MCP_INTERACTIVE_CMD_TIMEOUT_MS || '120000', 10)
29
+ };
30
+
31
+ // Créer le dossier de données s'il n'existe pas
32
+ fs.mkdirSync(config.dataDir, { recursive: true });
33
+
34
+ export default config;
package/history.js ADDED
@@ -0,0 +1,44 @@
1
+ import fs from 'fs/promises';
2
+ import path from 'path';
3
+ import config from './config.js';
4
+ const HISTORY_FILE_PATH = path.join(config.dataDir, 'history.json');
5
+
6
+ async function readHistory() {
7
+ try {
8
+ await fs.access(HISTORY_FILE_PATH);
9
+ const data = await fs.readFile(HISTORY_FILE_PATH, 'utf-8');
10
+ return JSON.parse(data);
11
+ } catch (error) {
12
+ return [];
13
+ }
14
+ }
15
+
16
+ async function writeHistory(history) {
17
+ await fs.writeFile(HISTORY_FILE_PATH, JSON.stringify(history, null, 2));
18
+ }
19
+
20
+ async function logTask(jobDetails) {
21
+ const history = await readHistory();
22
+ const logEntry = {
23
+ jobId: jobDetails.id,
24
+ timestamp: new Date().toISOString(),
25
+ type: jobDetails.type,
26
+ alias: jobDetails.alias,
27
+ command: jobDetails.type === 'ssh' ? jobDetails.cmd : `${jobDetails.direction} ${jobDetails.local} -> ${jobDetails.remote}`
28
+ };
29
+ history.unshift(logEntry); // Ajoute au début
30
+ if (history.length > 500) { // Garde les 500 dernières commandes
31
+ history.pop();
32
+ }
33
+ await writeHistory(history);
34
+ }
35
+
36
+ async function getHistory(filters = {}) {
37
+ let history = await readHistory();
38
+ if (filters.alias) {
39
+ history = history.filter(log => log.alias === filters.alias);
40
+ }
41
+ return history;
42
+ }
43
+
44
+ export default { logTask, getHistory };
package/package.json ADDED
@@ -0,0 +1,40 @@
1
+ {
2
+ "name": "@fkom13/mcp-sftp-orchestrator",
3
+ "version": "6.0.0",
4
+ "description": "Un serveur MCP stdio pour l'orchestration de tâches distantes avec exécution hybride (synchrone/asynchrone) et configuration flexible.",
5
+ "main": "server.js",
6
+ "type": "module",
7
+ "bin": {
8
+ "mcp-sftp-orchestrator": "server.js"
9
+ },
10
+ "scripts": {
11
+ "test": "node test_features.js"
12
+ },
13
+ "repository": {
14
+ "type": "git",
15
+ "url": "git+https://github.com/fkom13/mcp-sftp-orchestrator.git"
16
+ },
17
+ "keywords": [
18
+ "mcp",
19
+ "orchestrator",
20
+ "ssh",
21
+ "sftp",
22
+ "automation"
23
+ ],
24
+ "author": "fkom13",
25
+ "license": "MIT",
26
+ "bugs": {
27
+ "url": "https://github.com/fkom13/mcp-sftp-orchestrator/issues"
28
+ },
29
+ "homepage": "https://github.com/fkom13/mcp-sftp-orchestrator#readme",
30
+ "dependencies": {
31
+ "@modelcontextprotocol/sdk": "^1.17.0",
32
+ "dotenv": "^16.4.5",
33
+ "glob": "^11.0.3",
34
+ "micromatch": "^4.0.5",
35
+ "ssh2": "^1.15.0",
36
+ "ssh2-sftp-client": "^9.1.0",
37
+ "uuid": "^9.0.1",
38
+ "zod": "^3.23.8"
39
+ }
40
+ }
@@ -0,0 +1,216 @@
1
+ C'est un excellent projet ! Vous avez mis en place un orchestrateur MCP très complet avec un pool de connexions SSH, une file d'attente persistante, et une gestion avancée des tâches.
2
+
3
+ Pour le publier sur GitHub et rédiger un bon README.md, voici une approche structurée et un modèle de README que vous pouvez copier-coller et adapter.
4
+
5
+ 1. Comment le Rendre Public sur GitHub
6
+ "Rendre public" un projet MCP comme le vôtre signifie deux choses :
7
+
8
+ Héberger le code source (pour que d'autres puissent le télécharger et l'exécuter).
9
+
10
+ Rendre le serveur MCP "découvrable" (pour que les clients MCP, comme les LLM, puissent l'utiliser).
11
+
12
+ Votre projet est un serveur stdio, ce qui signifie qu'il est conçu pour être exécuté localement par un client MCP (il communique via stdin/stdout, pas via un port réseau). Le "public" ici signifie que d'autres personnes peuvent cloner votre dépôt et l'exécuter localement pour gérer leurs propres serveurs.
13
+
14
+ Étapes pour la Publication :
15
+ Nettoyer le projet :
16
+
17
+ Assurez-vous que votre fichier .gitignore inclut bien /node_modules, .env, et le contenu de votre dossier data/ (comme servers.json, queue.json, etc.) pour ne pas "commiter" vos secrets ou vos données personnelles.
18
+
19
+ Un bon .gitignore pour ce projet :
20
+
21
+ Extrait de code
22
+
23
+ # Fichiers de dépendances
24
+ node_modules/
25
+
26
+ # Fichiers de configuration locaux
27
+ .env
28
+
29
+ # Données de l'application (contient des clés, l'historique, etc.)
30
+ data/*.json
31
+ data/*.backup.json
32
+ # Gardez les fichiers .json d'exemple si vous en avez
33
+ !data/servers.example.json
34
+ Créer le dépôt GitHub :
35
+
36
+ Allez sur GitHub et créez un nouveau dépôt public (par exemple, sftp-mcp-orchestrator).
37
+
38
+ N'initialisez PAS avec un README ou .gitignore si vous avez déjà les vôtres.
39
+
40
+ Lier et Pousser votre code :
41
+
42
+ Dans votre dossier de projet local, exécutez ces commandes (en remplaçant l'URL par la vôtre) :
43
+
44
+ Bash
45
+
46
+ # Initialiser git (si ce n'est pas déjà fait)
47
+ git init -b main
48
+ git add .
49
+ git commit -m "Initial commit: Ajout du serveur MCP Orchestrator"
50
+
51
+ # Lier à votre dépôt distant
52
+ git remote add origin https://github.com/VOTRE_NOM_UTILISATEUR/sftp-mcp-orchestrator.git
53
+
54
+ # Pousser le code
55
+ git push -u origin main
56
+ Ajouter une Licence :
57
+
58
+ Créez un fichier LICENSE à la racine. Pour un projet de ce type, MIT ou Apache 2.0 sont des choix courants et permissifs. Cela indique aux autres comment ils peuvent utiliser votre code.
59
+
60
+ Rédiger le README.md :
61
+
62
+ C'est l'étape la plus importante pour l'adoption. Créez un fichier README.md à la racine de votre projet.
63
+
64
+ 2. Modèle de Documentation README.md
65
+ Voici un modèle complet pour votre README.md. Copiez-collez ce contenu dans un fichier README.md à la racine de votre projet et modifiez l'URL du dépôt.
66
+
67
+ (Début du fichier README.md)
68
+
69
+ 🚀 sftp-mcp: Orchestrateur de Tâches Distantes
70
+ 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.
71
+
72
+ ✨ Fonctionnalités Principales
73
+ Gestion de Serveurs : Ajoutez, listez et supprimez des configurations de serveurs SSH/SFTP (stockées de manière sécurisée).
74
+
75
+ Exécution de Tâches SSH :
76
+
77
+ Exécution simple (task_exec).
78
+
79
+ Exécution interactive avec gestion des prompts (task_exec_interactive).
80
+
81
+ Exécution de séquences de commandes (task_exec_sequence).
82
+
83
+ Transferts de Fichiers SFTP :
84
+
85
+ Upload/Download de fichiers et dossiers (task_transfer).
86
+
87
+ Support des patterns "glob" pour les transferts multiples (task_transfer_multi).
88
+
89
+ File d'Attente (Queue) Intelligente :
90
+
91
+ Hybride : Les tâches rapides retournent un résultat direct (synchrone) ; les tâches longues passent en arrière-plan (asynchrone).
92
+
93
+ Persistante : La file d'attente est sauvegardée sur disque et restaurée au redémarrage.
94
+
95
+ Reprise sur Erreur : Les tâches "crashées" (si le serveur redémarre) peuvent être relancées (task_retry).
96
+
97
+ Pooling de Connexions : Gère un pool de connexions SSH persistantes pour une exécution ultra-rapide des commandes.
98
+
99
+ Outils de Monitoring : Récupérez les ressources système, le statut des services (systemd, Docker, PM2) et le statut de Fail2Ban.
100
+
101
+ Outils de Logs : Récupérez facilement les logs de PM2, de Docker, ou suivez la fin d'un fichier (tail).
102
+
103
+ Catalogue d'API : Gérez et monitorez la santé de vos propres API externes.
104
+
105
+ ⚙️ Installation
106
+ Clonez le dépôt :
107
+
108
+ Bash
109
+
110
+ git clone https://github.com/VOTRE_NOM_UTILISATEUR/sftp-mcp-orchestrator.git
111
+ cd sftp-mcp-orchestrator
112
+ Installez les dépendances :
113
+
114
+ Bash
115
+
116
+ npm install
117
+ 🛠️ Configuration
118
+ Créez votre fichier .env :
119
+
120
+ Bash
121
+
122
+ cp .env.example .env
123
+ Modifiez le .env (Optionnel) : Le script créera par défaut un dossier de données dans ~/.config/mcp-orchestrator. Vous pouvez changer ce comportement en modifiant MCP_DATA_DIR dans votre fichier .env.
124
+
125
+ Extrait de code
126
+
127
+ # Chemin où seront stockés servers.json, history.json, etc.
128
+ MCP_DATA_DIR="/home/user/.config/mcp-orchestrator"
129
+
130
+ # Délai en secondes avant qu'une tâche ne passe en arrière-plan
131
+ MCP_SYNC_TIMEOUT_S=30
132
+ Ajoutez votre premier serveur : Ce serveur n'est utile que s'il peut se connecter à d'autres machines. Vous devez ajouter des serveurs via un client MCP (comme un LLM ou un CLI) en utilisant l'outil server_add.
133
+
134
+ Exemple d'appel (ce que vous demanderiez à votre LLM) :
135
+
136
+ "Ajoute un serveur avec l'alias vps_prod, l'hôte 123.45.67.89, l'utilisateur admin et le chemin de clé /home/user/.ssh/id_rsa_prod."
137
+
138
+ 🏃 Lancement
139
+ Ce projet est un serveur MCP stdio. Il n'expose pas de port HTTP. Il est conçu pour être lancé par un client MCP (comme un SDK ou un CLI) qui communique avec lui via l'entrée/sortie standard.
140
+
141
+ Pour l'utiliser, vous devez enregistrer ce serveur auprès de votre client MCP. La commande de lancement est :
142
+
143
+ Bash
144
+
145
+ node /chemin/complet/vers/sftp-mcp-orchestrator/server.js
146
+ 🧰 Référence des Outils (API)
147
+ Ce serveur expose une suite complète d'outils. Un client MCP compatible (comme un LLM) saura automatiquement quels paramètres sont requis en inspectant le schéma Zod de chaque outil.
148
+
149
+ Gestion des Serveurs
150
+ Outil Description
151
+ server_add Enregistre ou met à jour les informations de connexion d'un serveur.
152
+ server_list Affiche la liste de tous les alias de serveurs configurés.
153
+ server_remove Supprime un alias de serveur de la configuration.
154
+
155
+ Exporter vers Sheets
156
+
157
+ Exécution de Tâches
158
+ Outil Description
159
+ task_exec Exécute une commande SSH (hybride synchrone/asynchrone).
160
+ task_transfer Transfère un fichier ou dossier (SFTP) (hybride synchrone/asynchrone).
161
+ task_exec_interactive Exécute une commande SSH interactive (gestion des prompts yes/no, etc.).
162
+ task_exec_sequence Exécute plusieurs commandes SSH en séquence sur le même serveur.
163
+ task_transfer_multi Transfère plusieurs fichiers/dossiers (SFTP) avec support de patterns glob.
164
+
165
+ Exporter vers Sheets
166
+
167
+ Monitoring & Diagnostics
168
+ Outil Description
169
+ get_system_resources Récupère les métriques système vitales (CPU, RAM, Disque) d'un serveur.
170
+ get_services_status Récupère le statut des services (systemd, Docker, PM2) sur un serveur.
171
+ check_api_health Vérifie la disponibilité et le temps de réponse d'un endpoint HTTP/S.
172
+ get_fail2ban_status Récupère les informations du service Fail2Ban.
173
+
174
+ Exporter vers Sheets
175
+
176
+ Récupération de Logs
177
+ Outil Description
178
+ get_pm2_logs Raccourci pour récupérer les logs PM2 d'une application.
179
+ get_docker_logs Raccourci pour récupérer les logs d'un container Docker.
180
+ tail_file Affiche les dernières lignes d'un fichier distant.
181
+
182
+ Exporter vers Sheets
183
+
184
+ Gestion de la File d'Attente (Queue)
185
+ Outil Description
186
+ task_queue Affiche le statut de toutes les tâches dans la file d'attente.
187
+ task_status Récupère les détails d'une seule tâche par son ID.
188
+ task_history Affiche les dernières tâches lancées (peut être filtré par alias).
189
+ task_retry Relance une tâche qui a échoué ou crashé.
190
+ queue_stats Affiche les statistiques détaillées de la queue de tâches.
191
+
192
+ Exporter vers Sheets
193
+
194
+ Gestion des APIs (Monitoring Externe)
195
+ Outil Description
196
+ api_add Ajoute ou met à jour une API dans le catalogue de monitoring.
197
+ api_list Affiche toutes les APIs configurées dans le catalogue.
198
+ api_remove Supprime une API du catalogue en utilisant son alias.
199
+ api_check Lance un test de santé sur une API du catalogue (via un serveur distant).
200
+
201
+ Exporter vers Sheets
202
+
203
+ Administration du Serveur MCP
204
+ Outil Description
205
+ task_logs Affiche les logs du système MCP lui-même.
206
+ pool_stats Affiche les statistiques du pool de connexions SSH persistantes.
207
+
208
+ Exporter vers Sheets
209
+
210
+ 🤝 Contribution
211
+ Les contributions sont les bienvenues ! N'hésitez pas à ouvrir une Issue pour signaler un bug ou proposer une fonctionnalité, ou une Pull Request pour soumettre des modifications.
212
+
213
+ 📄 Licence
214
+ Ce projet est sous licence MIT. Voir le fichier LICENSE pour plus de détails.
215
+
216
+ (Fin du fichier README.md)