director-shell-mcp
director-shell-mcp
director-shell-mcp es un pequeño servidor MCP para agentes en modo director. Utiliza el transporte stdio de MCP para proporcionar una vía de escape controlada para escribir archivos, ejecutar código Python de exploración de datos, ejecutar comandos de shell y supervisar trabajos en segundo plano desacoplados. Los comandos se inician solo cuando un agente llama explícitamente a una herramienta; el servidor no ejecuta un shell por sí mismo.
Instalación
Se requiere Node.js 18 o superior. Desde este directorio:
npm installEjecute el servidor directamente con:
node C:/path/to/director-shell-mcp/index.jsRelated MCP server: shell-0
Registro en OMP (principal)
El cliente principal es el entorno Oh My Pi (OMP). Añada esta configuración exacta al ~/.omp/agent/mcp.json a nivel de usuario (o al .omp/mcp.json a nivel de proyecto):
{
"$schema": "https://raw.githubusercontent.com/can1357/oh-my-pi/main/packages/coding-agent/src/config/mcp-schema.json",
"mcpServers": {
"director-shell": {
"command": "node",
"args": ["C:/path/to/director-shell-mcp/index.js"]
}
}
}Para servidores stdio, type puede omitirse. Después de editar la configuración, ejecute /mcp reload y luego /mcp test director-shell en OMP.
Registro genérico de cliente MCP
Otros clientes MCP generalmente aceptan un registro stdio equivalente:
{
"mcpServers": {
"director-shell": {
"command": "node",
"args": ["C:/path/to/director-shell-mcp/index.js"]
}
}
}Referencia de herramientas
Todas las herramientas devuelven un objeto JSON en el contenido de texto MCP. Los errores se devuelven como errores de herramienta MCP con un campo error en forma de frase.
shell_run
Ejecuta un comando hasta su finalización. Parámetros:
command(cadena, obligatorio): texto del comando.cwd(cadena, opcional): directorio de trabajo.timeout_ms(entero, opcional): por defecto 60,000; máximo 600,000.shell(powershell,cmdobash, opcional): por defecto PowerShell en Windows y Bash en otros sistemas.
El resultado contiene exit_code, duration_ms y objetos stdout/stderr. Cada flujo incluye hasta aproximadamente 50 KiB de texto de vista previa. Si un flujo supera ese límite, su objeto también incluye truncated: true y full_output_path que apunta a un archivo temporal que contiene el flujo completo. Un tiempo de espera agotado devuelve un error de herramienta MCP con un mensaje claro y el resultado parcial.
write_file
Escribe texto UTF-8 en una ruta de archivo absoluta. Parámetros:
path(cadena, obligatorio): ruta de archivo absoluta.content(cadena, obligatorio): texto a escribir.append(booleano, opcional): añadir en lugar de reemplazar; por defectofalse.create_dirs(booleano, opcional): crear directorios padre faltantes; por defectotrue.
El resultado contiene path, bytes_written, created (si el archivo no existía antes de la llamada) y appended.
edit_file
Reemplaza texto en un archivo UTF-8 en una ruta absoluta. Parámetros:
path(cadena, obligatorio): ruta de archivo absoluta.old_text(cadena, obligatorio): texto no vacío a buscar.new_text(cadena, obligatorio): texto de reemplazo.replace_all(booleano, opcional): reemplazar cada ocurrencia; por defectofalse.
Sin replace_all, old_text debe aparecer exactamente una vez. Cero coincidencias o múltiples coincidencias devuelven un error de herramienta MCP y dejan el archivo sin cambios. El resultado contiene path y replacements.
run_python
Ejecuta código fuente Python hasta su finalización con salida limitada y un tiempo de espera. En Windows, el servidor prueba primero el lanzador py y luego python; en otros sistemas prueba primero python3 y luego python, almacenando en caché el primer ejecutable utilizable. Parámetros:
code(cadena, obligatorio): código fuente Python.cwd(cadena, opcional): directorio de trabajo para el proceso Python.timeout_ms(entero, opcional): por defecto 60,000; máximo 600,000.args(matriz de cadenas, opcional): valores pasados comosys.argv[1:].
El resultado contiene exit_code, duration_ms, objetos stdout/stderr y python_executable. Los flujos de salida están limitados y se vuelcan a archivos temporales usando el mismo comportamiento que shell_run. Un tiempo de espera agotado devuelve un error de herramienta MCP con un mensaje claro y el resultado parcial.
job_start
Inicia un comando desacoplado que continúa después de que la llamada a la herramienta regrese. Parámetros:
command(cadena, obligatorio)cwd(cadena, opcional)shell(powershell,cmdobash, opcional)name(cadena, opcional, etiqueta legible por humanos)
El resultado contiene job_id, pid, log_paths (stdout, stderr y combined) y la ruta exit_marker. Los metadatos se persisten como JSON en %LOCALAPPDATA%/director-shell-mcp/jobs/<jobId>/, por lo que los trabajos permanecen descubribles después de un reinicio del servidor.
job_status
Lee el estado persistido de un trabajo. Parámetros:
job_id(cadena, obligatorio): un id devuelto porjob_start.tail_lines(entero, opcional): por defecto 40; máximo 1,000.
El resultado contiene running, exit_code (cuando esté disponible), runtime_ms, started_at y output_tail del registro combinado. El envoltorio desacoplado escribe exit_code.txt cuando el comando sale, preservando el código de salida a través de reinicios del servidor.
job_kill
Termina un trabajo iniciado por este servidor. Acepta job_id. En Windows usa taskkill /T /F para terminar el árbol de procesos del envoltorio. Los trabajos que ya se completaron se dejan sin cambios.
job_list
Lista todos los trabajos persistidos válidos con su job_id, name opcional, pid, estado running, código de salida y hora de inicio.
grep_files
Busca recursivamente en un archivo o directorio absoluto usando una expresión regular de JavaScript sin requerir ripgrep. La búsqueda omite node_modules, .git, bin, obj, dist y target, ignora archivos mayores de 5 MiB y archivos binarios, y se detiene en el límite de resultados. Parámetros:
pattern(cadena, obligatorio): fuente de expresión regular de JavaScript.path(cadena, obligatorio): ruta absoluta de archivo o directorio.glob(cadena, opcional): filtro simple de nombre de archivo usando*y?.case_sensitive(booleano, opcional): por defectofalse.max_results(entero, opcional): por defecto 200; máximo 1,000.context_lines(entero, opcional): líneas antes y después de cada coincidencia; por defecto 0; máximo 5.
El resultado contiene matches con file, line_number, line, before y after, además de files_scanned y truncated. Las expresiones regulares inválidas devuelven un error de herramienta MCP.
job_wait
Espera a que un trabajo desacoplado existente salga, sondeando su marcador de salida persistido cada 500 ms. Parámetros:
job_id(cadena, obligatorio): id devuelto porjob_start.timeout_ms(entero, opcional): por defecto 60,000; máximo 600,000.tail_lines(entero, opcional): por defecto 40; máximo 1,000.
El resultado tiene los mismos campos que job_status y añade timed_out. Un plazo vencido mientras el trabajo aún se está ejecutando es un resultado normal con timed_out: true, no un error MCP.
lock_acquire y lock_release
Proporcionan un mutex nombrado entre agentes persistido en %LOCALAPPDATA%/director-shell-mcp/locks/. Los nombres contienen solo letras, dígitos, _, . y - y tienen como máximo 64 caracteres. lock_acquire acepta name (obligatorio), wait_ms (opcional, por defecto 0, máximo 600,000) y una note opcional; devuelve name, un token UUID y acquired_at. La adquisición usa una creación atómica de directorio y recupera bloqueos cuyo proceso propietario registrado ya no está vivo. Un error de bloqueo mantenido identifica su pid, nota cuando esté presente y duración. lock_release acepta name y el token del propietario; tokens incorrectos y bloqueos libres son errores y no cambian el bloqueo.
screenshot
Captura la pantalla virtual completa, o una ventana de nivel superior visible, a un PNG en Windows usando System.Drawing y las API de Windows. Parámetros:
target(screenowindow, opcional): por defectoscreen.window_title(cadena, obligatoria parawindow): subcadena del título de ventana visible, sin distinción de mayúsculas.output_path(.pngabsoluto, opcional): por defecto un archivo con marca de tiempo en el directorio de salida temporal.
El resultado contiene path, width, height, target y el window_title coincidente para capturas de ventana. Devuelve un error claro de no soportado en sistemas que no son Windows y un error claro de no coincidencia cuando no se puede encontrar la ventana solicitada.
process_list
Devuelve un listado de procesos de solo lectura en Windows. Parámetros:
name_filter(cadena, opcional): subcadena sin distinción de mayúsculas de un nombre de proceso o ruta de ejecutable.max_results(entero, opcional): por defecto 100; máximo 1,000.
Cada proceso contiene pid y name, e incluye path, started_at y working_set_bytes cuando estén disponibles. El resultado también contiene truncated.
file_lockers
Informa sobre procesos que mantienen abierto un archivo existente en Windows mediante la API Restart Manager. Acepta path (obligatorio), que debe ser una ruta absoluta a un archivo existente, y devuelve { path, lockers }. Cada bloqueador contiene pid, app_name y app_type; un archivo desbloqueado es un resultado exitoso con una matriz lockers vacía. Los sistemas que no son Windows devuelven un error claro de no soportado.
Verificación
Ejecute la prueba de humo ligera de extremo a extremo (usa solo echo y sleep de PowerShell):
npm run smokeLa prueba de humo inicia un nuevo servidor MCP sobre stdio, realiza la inicialización, lista las quince herramientas, ejercita la escritura de archivos, la edición de texto exacta, la ejecución de Python y el paso de argumentos, la finalización de comandos y la captura de salida, verifica trabajos desacoplados mientras se ejecutan y después de que salen, ejercita grep, wait, bloqueos, capturas de pantalla, listado de procesos y detección de bloqueadores de archivos de Restart Manager, comprueba la persistencia a través de job_list y verifica el manejo de tiempo de espera de comandos.
Licencia
MIT
This server cannot be installed
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Connectors
Operate Linux, macOS and Windows from your LLM. Every action runs through an auditable allowlist.
Runtime permission, approval, and audit layer for AI agent tool execution.
Shared control plane for AI coding agents — tasks, memory, decisions, file locks. 12 tools.
The trust harness for AI agents. Set what an agent can do before it acts.
Related MCP Servers
AlicenseNot gradedqualityDmaintenanceGives AI agents shell access by providing a run_command tool for executing shell commands and returning stdout, stderr, and exit code.151ISC- AlicenseAqualityBmaintenanceProvides direct, unsandboxed local machine access via filesystem, Python, Node.js, and shell commands for MCP agents.4MIT
- AlicenseNot gradedqualityBmaintenanceProvides local command execution, remote SSH, interactive terminals, file read/write, and source search for AI CLI through stdio, with large output pagination and safety confirmations.81Apache 2.0
- FlicenseNot gradedqualityCmaintenanceProvides AI agents with shell execution and file management capabilities on a development VM, including running commands and editing files via tools like run_command, read_file, and edit_file.
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/bobzhou-source/director-shell-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server