Aller au contenu
Tous les outils

run_terminal_command

Diagnostic et système · macOS · Windows

Effet: exécution. État: disponibilité conditionnelle.

«Disponibilité conditionnelle» signifie que l’outil peut dépendre de la version, de la plateforme, des autorisations, du compte ou de la configuration. Il n’est pas forcément actif partout.

macOS

Objectif

Exécute une commande shell sur le Mac de l’utilisateur et renvoie sa sortie. Toujours active. Désactivée lorsque LMCP est en mode lecture seule. Trois types de commandes sont refusés, car irréversibles : le formatage ou l’écrasement d’un disque (mkfs, newfs, fdisk, diskutil erase/partition, dd depuis ou vers un périphérique disque), une suppression récursive d’un dossier système, du dossier personnel de l’utilisateur ou de l’un de ses dossiers de données (Documents, Desktop, Downloads, Library, Pictures, Movies, Music), de tout ce qui se trouve directement dans l’un d’eux, ou d’une cible ou d’un dossier que le texte de la commande ne détermine pas (une variable, une substitution de commande, un cd dans un sous-shell), et une fork bomb. Une commande qui nomme un emplacement d’identifiants (trousseaux, clés privées ~/.ssh, ~/.aws, ~/.config/gh, connexions du navigateur, dossier personnel d’un autre utilisateur), qui écrit un fichier exécutant du code plus tard (LaunchAgents, fichiers de démarrage du shell, dossiers des clients d’IA), qui pilote une autre app par script, qui ouvre un script ou une app de terminal, qui contrôle un service système ou l’alimentation, qui injecte un script téléchargé dans un shell, qui écrit dans un fichier de périphérique ou qui modifie récursivement les permissions sur un chemin système n’est PAS refusée : l’aperçu et le résultat portent un avertissement indiquant ce qu’elle fait. Avant de confirmer, dites à l’utilisateur ce qu’elle va lire ou modifier, sauf s’il a demandé exactement cela. Les avertissements ne lisent que le texte de la commande, donc une commande qui masque un chemin n’en reçoit aucun. Les commandes s’exécutent dans un bac à sable macOS qui protège uniquement Local MCP lui-même : le terminal ne peut ni ouvrir ni modifier les propres fichiers de Local MCP par leur chemin (ses réglages et son jeton, ses binaires, son journal d’activité, ses sessions de messagerie et web, son élément de démarrage), ne peut pas parler à son socket, et ne peut pas ouvrir les fichiers d’un compte dont l’utilisateur a désactivé la case Lecture ou Écriture. Aucun réglage ne rouvre ces accès. À cause de ce bac à sable, les programmes système setuid autres que ps et top ne peuvent pas démarrer (sudo, su, crontab, at, traceroute) : l’avertissement l’indique avant l’exécution de la commande, et la commande `log` ne s’exécute pas. Dans le bac à sable, SwiftPM a besoin de --disable-sandbox. Destructif : il affiche d’abord un aperçu de la commande — passez confirm:true pour l’exécuter réellement. La sortie et la durée d’exécution sont plafonnées.

Entrées requises

Les noms restent exactement ceux exigés par l’outil. Les définitions techniques canoniques en anglais figurent dans le schéma dépliable ci-dessous.

Autorisations et confirmation

Le schéma déclare un paramètre de confirmation explicite. Vérifiez l’aperçu et autorisez l’opération réelle conformément au contrat de la plateforme.

Schéma technique canonique en anglais — macOS
{
  "properties": {
    "command": {
      "description": "The shell command to run (a single command line, executed with /bin/zsh -lc).",
      "type": "string"
    },
    "confirm": {
      "description": "Must be true to actually run. Without it, a preview of the command is returned.",
      "type": "boolean"
    },
    "timeout_seconds": {
      "description": "Max seconds to run before it is terminated (default 20, max 60).",
      "type": "integer"
    },
    "working_dir": {
      "description": "Optional absolute working directory. Defaults to the user's home directory.",
      "type": "string"
    }
  },
  "required": [
    "command"
  ],
  "type": "object"
}

Exemple documentaire

Exemple de documentation pour run_terminal_command. N’exécutez pas cet exemple. Les arguments présentés appartiennent à un jeu de données fictif ; résolvez les identifiants réels et obtenez une autorisation avant tout appel réel.

{
  "command": "echo Hello from LMCP",
  "confirm": false
}

Windows

Objectif

Exécute une commande shell sur l’ordinateur de l’utilisateur. Certaines commandes de niveau système (sudo/élévation de privilèges, suppressions récursives de chemins système ou personnels, formatage de disque, arrêt/redémarrage, injection d’un script téléchargé dans un shell, fork bombs) sont refusées. Destructif : il affiche d’abord un aperçu de la commande — passez confirm:true pour l’exécuter réellement. La sortie et la durée d’exécution sont plafonnées. Sous Windows la commande s’exécute via `cmd /c` ; ailleurs via `sh -c`.

Entrées requises

Les noms restent exactement ceux exigés par l’outil. Les définitions techniques canoniques en anglais figurent dans le schéma dépliable ci-dessous.

Autorisations et confirmation

Le schéma déclare un paramètre de confirmation explicite. Vérifiez l’aperçu et autorisez l’opération réelle conformément au contrat de la plateforme.

Schéma technique canonique en anglais — Windows
{
  "properties": {
    "command": {
      "description": "The shell command to run (a single command line).",
      "type": "string"
    },
    "confirm": {
      "description": "Must be true to actually run. Without it, a preview of the command is returned.",
      "type": "boolean"
    },
    "timeout_seconds": {
      "description": "Max seconds to run before it is terminated (default 30, max 60).",
      "type": "integer"
    },
    "working_dir": {
      "description": "Optional absolute working directory. Defaults to the user's home directory.",
      "type": "string"
    }
  },
  "required": [
    "command"
  ],
  "type": "object"
}

Exemple documentaire

Exemple de documentation pour run_terminal_command. N’exécutez pas cet exemple. Les arguments présentés appartiennent à un jeu de données fictif ; résolvez les identifiants réels et obtenez une autorisation avant tout appel réel.

{
  "command": "echo Hello from LMCP",
  "confirm": false
}