Commands

Un servidor MCP para ejecutar comandos arbitrarios en la máquina local.

Documentación

runProcess herramienta

La herramienta runProcess ejecuta procesos en la máquina anfitriona. Hay dos formas mutuamente excluyentes de invocarla:

  1. command_line (cadena) — Se ejecuta mediante el shell predeterminado del sistema (igual que escribir en bash/fish/pwsh/etc.). Las funciones del shell como tuberías, redirecciones y expansión de variables funcionan todas.
  2. argv (matriz de cadenas) — Invocación directa del ejecutable. argv[0] es el ejecutable, el resto son argumentos. Sin interpretación del shell.

No puedes pasar ambos. La herramienta deduce si usar un shell según el parámetro que proporciones.

Si quieres que tu modelo use shell(s) específicos en un sistema, los listaría en tu prompt de sistema. O quizás en las instrucciones de la herramienta, aunque los modelos tienden a prestar más atención a los ejemplos en un prompt de sistema.

¡Házmelo saber si encuentras problemas!

Herramientas

Las herramientas son para que los LLM las soliciten. Claude Sonnet 3.5 usa inteligentemente run_process. Y las pruebas iniciales muestran resultados prometedores con Groq Desktop with MCP y modelos llama4.

Actualmente, ¡solo un comando para dominarlos a todos!

  • run_process - ejecuta un comando, es decir, hostname o ls -al o echo "hello world" etc.
    • Devuelve STDOUT y STDERR como texto
    • El parámetro opcional stdin significa que tu LLM puede
      • pasar scripts a través de STDIN a comandos como fish, bash, zsh, python
      • crear archivos con cat >> foo/bar.txt a partir del texto en stdin

[!WARNING] ¡Ten cuidado con lo que le pides a este servidor que ejecute! En la aplicación Claude Desktop, usa Approve Once (no Allow for This Chat) para que puedas revisar cada comando, usa Deny si no confías en el comando. Los permisos los dicta el usuario que ejecuta el servidor. NO ejecutes con sudo.

Video tutorial

YouTube Thumbnail

Indicaciones

Las indicaciones son para que los usuarios las incluyan en el historial de chat, es decir, mediante los comandos de barra de Zed (en su panel de Chat IA)

  • run_process - genera un mensaje de indicación con la salida del comando
  • Para tu información, esto fue principalmente un ejercicio de aprendizaje... Lo veo como una llamada de herramienta solicitada por el usuario. Es una forma elegante de decir que es una plantilla para ejecutar un comando y pasar las salidas al modelo.

Desarrollo

Instalar dependencias:

npm install

Compilar el servidor:

npm run build

Para desarrollo con reconstrucción automática:

npm run watch

Instalación

Para usar con Claude Desktop, agrega la configuración del servidor:

En MacOS: ~/Library/Application Support/Claude/claude_desktop_config.json En Windows: %APPDATA%/Claude/claude_desktop_config.json

Groq Desktop (beta, macOS) usa ~/Library/Application Support/groq-desktop-app/settings.json

Usar el paquete npm publicado

Publicado en npm como mcp-server-commands usando este workflow

{
  "mcpServers": {
    "mcp-server-commands": {
      "command": "npx",
      "args": ["mcp-server-commands"]
    }
  }
}

Usar una compilación local (checkout del repositorio)

Asegúrate de ejecutar npm run build

{
  "mcpServers": {
    "mcp-server-commands": {
      // works b/c of shebang in index.js
      "command": "/path/to/mcp-server-commands/build/index.js"
    }
  }
}

Modelos locales

  • La mayoría de los modelos están entrenados de tal manera que no creen que pueden ejecutar comandos por ti.
    • A veces, usan herramientas sin dudar... otras veces, tengo que persuadirlos.
    • Usa un prompt de sistema o una plantilla de prompt para indicar que deben seguir las solicitudes del usuario. Incluyendo usar run_processs sin verificar dos veces.
  • Ollama es una excelente manera de ejecutar un modelo localmente (con Open-WebUI)
# NOTE: make sure to review variants and sizes, so the model fits in your VRAM to perform well!

# Probably the best so far is [OpenHands LM](https://www.all-hands.dev/blog/introducing-openhands-lm-32b----a-strong-open-coding-agent-model)
ollama pull https://huggingface.co/lmstudio-community/openhands-lm-32b-v0.1-GGUF

# https://ollama.com/library/devstral
ollama pull devstral

# Qwen2.5-Coder has tool use but you have to coax it
ollama pull qwen2.5-coder

HTTP / OpenAPI

El servidor está implementado con el transporte STDIO. Para HTTP, usa mcpo para una interfaz de servidor web compatible con OpenAPI. Esto funciona con Open-WebUI

uvx mcpo --port 3010 --api-key "supersecret" -- npx mcp-server-commands

# uvx runs mcpo => mcpo run npx => npx runs mcp-server-commands
# then, mcpo bridges STDIO <=> HTTP

[!WARNING] Usé brevemente mcpo con open-webui, asegúrate de examinarlo por problemas de seguridad.

Registro

La aplicación Claude Desktop escribe registros en ~/Library/Logs/Claude/mcp-server-mcp-server-commands.log

Por defecto, solo se registran mensajes importantes (es decir, errores). Si quieres ver más mensajes, agrega --verbose al args al configurar el servidor.

Por cierto, los registros se escriben en STDERR porque eso es lo que Claude Desktop enruta a los archivos de registro. En el futuro, espero que los mensajes de registro bien formateados se escriban a través del transporte STDIO al cliente MCP (nota: no la aplicación Claude Desktop).

Depuración

Dado que los servidores MCP se comunican a través de stdio, la depuración puede ser desafiante. Recomendamos usar el MCP Inspector, que está disponible como script de paquete:

npm run inspector

El Inspector proporcionará una URL para acceder a las herramientas de depuración en tu navegador.