Skip to main content
Glama
kg912

shell-mcp

by kg912

shell-mcp

Un servidor MCP (Model Context Protocol) súper seguro para ejecutar comandos de shell de forma segura con un cliente LLM local.

Modelo de seguridad

Los comandos pasan a través de 8 capas de seguridad independientes — cada una debe ser superada:

Capa

Qué hace

1

Validación de esquema Zod — comprobaciones de tipo estrictas antes de cualquier procesamiento

2

No-shell spawn — execFile con shell: false, nunca se usa /bin/sh -c "..."

3

Lista de bloqueo codificada — rm, sudo, dd, curl, brew, docker, etc. bloqueados permanentemente

4

Inspección de argumentos — rechaza metacaracteres, bytes nulos, patrones sospechosos y flags peligrosos por comando

5

Lista de permitidos de directorios — cada ruta debe estar dentro de --allow-dir

6

Resolución de enlaces simbólicos — los enlaces simbólicos se resuelven antes de la comprobación de ruta (sin escape mediante enlaces simbólicos)

7

Límites de recursos — tiempo de espera, límite de tamaño de salida, límite de concurrencia

8

Entorno saneado — elimina AWS_*, *_TOKEN, *_SECRET, todos los secretos de proveedores de nube

Related MCP server: MCP Shell Server

Inicio rápido

# Clone and build
git clone https://github.com/your-username/shell-mcp.git
cd shell-mcp
npm install
npm run build

# Run (must specify at least one --allow-dir)
node dist/index.js --allow-dir ~/projects --allow-dir ~/data

Configuración del cliente LLM

{
  "shell-mcp": {
    "command": "node",
    "args": [
      "/path/to/shell-mcp/dist/index.js",
      "--allow-dir", "/home/user/projects",
      "--allow-dir", "/home/user/data",
      "--allow-cmd", "ls",
      "--allow-cmd", "cat",
      "--allow-cmd", "grep",
      "--allow-cmd", "find",
      "--allow-cmd", "python3",
      "--timeout", "30",
      "--log-file", "/home/user/.shell-mcp/audit.log"
    ]
  }
}

Flags

Flag

Descripción

Predeterminado

--allow-dir <path>

Directorio permitido (requerido, repetible)

ninguno — el servidor no iniciará

--allow-cmd <cmd>

Lista blanca de comandos específicos (repetible)

todos los no bloqueados

--block-cmd <cmd>

Comandos adicionales a bloquear

—

--timeout <secs>

Tiempo máximo de ejecución (1–300)

30

--max-output <bytes>

Tamaño máximo de salida

1048576 (1MB)

--max-concurrent <n>

Máximo de comandos en paralelo (1–10)

3

--log-file <path>

Ruta del archivo de registro de auditoría

solo stderr

--enable-write

Habilitar la herramienta write_file

desactivado

--allow-overwrite

Permitir sobrescribir archivos

desactivado

--read-only-mode

Deshabilita todas las escrituras (anula --enable-write)

desactivado

--allow-network-cmds

Desbloquear curl, wget, nc

desactivado

--allow-env-passthrough

Reenviar el entorno completo a los procesos hijos

desactivado (saneado)

Herramientas expuestas al LLM

run_command

Ejecuta un comando con una matriz de argumentos explícita. Sin shell — las tuberías (pipes) y redirecciones no funcionarán.

{
  "command": "grep",
  "args": ["-r", "TODO", "/home/user/projects/myapp"],
  "cwd": "/home/user/projects/myapp",
  "timeout": 10
}

read_file

Lee el contenido de un archivo. Admite rangos de líneas y salida binaria (base64).

{
  "path": "/home/user/projects/myapp/src/main.py",
  "startLine": 1,
  "endLine": 50
}

list_directory

Enumera un directorio con vista de árbol, tamaños y permisos.

{
  "path": "/home/user/projects/myapp",
  "recursive": true
}

write_file (requiere --enable-write)

Escribe un archivo. No sobrescribirá sin --allow-overwrite.

{
  "path": "/home/user/projects/myapp/notes.txt",
  "content": "Hello world"
}

get_server_info

Devuelve la configuración y restricciones actuales del servidor. Útil para que el LLM comprenda su entorno aislado (sandbox) antes de actuar.

Comandos bloqueados permanentemente

Estos no pueden ser habilitados por ninguna flag:

rm, rmdir, shred, dd, mkfs, fdisk, diskutil, sudo, su, doas,
osascript, defaults, open, launchctl, crontab,
curl, wget, nc, ssh, scp, rsync,
brew, npm, yarn, pip, gem, cargo, docker,
gcc, clang, kill, killall, shutdown, reboot,
gpg, security (macOS keychain), ...and more

Registro de auditoría

Cada intento de comando (permitido o denegado) se registra en JSON:

{"timestamp":"2024-01-01T12:00:00.000Z","sessionId":"A3F9B2C1","event":"COMMAND_DENY","command":"rm","args":["-rf","/"],"denyLayer":3,"denyReason":"Command \"rm\" is on the hardcoded blocklist"}
{"timestamp":"2024-01-01T12:00:01.000Z","sessionId":"A3F9B2C1","event":"COMMAND_ALLOW","command":"ls","args":["-la"],"cwd":"/home/user/projects","exitCode":0,"durationMs":12,"outputBytes":1024}

Inspeccionar con MCP Inspector

npx @modelcontextprotocol/inspector node dist/index.js --allow-dir /tmp/test

Related MCP Connectors

Related MCP Servers

  • A
    license
    A
    quality
    F
    maintenance
    An MCP server that enables secure execution of shell commands across Windows, macOS, and Linux with built-in whitelisting and approval mechanisms for enhanced security.
    9
    71 npm
    21
    MIT
  • A
    license
    B
    quality
    D
    maintenance
    Enables secure execution of whitelisted shell commands through MCP, with support for stdin input, timeout control, and comprehensive output including stdout, stderr, and execution time.
    1
    MIT
  • A
    license
    Not graded
    quality
    C
    maintenance
    Enables LLM clients to execute shell commands safely through the MCP protocol, with features like session management, safe mode, and process control.
    1
    Apache 2.0
  • A
    license
    Not graded
    quality
    D
    maintenance
    Enables executing shell commands on the host system via an MCP tool, with JWT/OAuth authentication and audit logging for secure remote access.
    1
    MIT