Interactive Shell MCP
MCP de Shell Interactivo
Servidor MCP para sesiones de shell interactivas con soporte TUI. Proporciona a los agentes de IA terminales persistentes, navegación interactiva por prompts, lectura de pantalla renderizada y búsqueda de resultados.
Demo
Sin MCP | Con MCP |
|
|
"htop es interactivo y no se puede ejecutar" | Inicia htop, lee la pantalla, extrae datos del proceso (2x velocidad) |
Por qué existe esto
La mayoría de las herramientas de codificación por IA ejecutan comandos de shell de forma aislada: cada comando inicia una shell nueva, los prompts interactivos son imposibles y las aplicaciones TUI simplemente vuelcan códigos de escape sin procesar. Este servidor MCP proporciona sesiones PTY persistentes con un emulador de terminal virtual (@xterm/headless) para que los agentes puedan mantener el estado de la shell, navegar por prompts interactivos con las teclas de flecha y leer pantallas de terminal renderizadas como texto limpio.
Tres modos de salida:
Modo | Ideal para | Qué obtienes |
streaming | Comandos regulares (ls, git, npm) | Salida secuencial sin procesar, borrada tras la lectura |
snapshot | Aplicaciones con actualización en vivo (top, htop) | Final del búfer de terminal actual |
screen | Aplicaciones TUI, prompts, cualquier cosa visual | Cuadrícula de texto 2D renderizada (lo que ve un humano) |
Inicio rápido
git clone https://github.com/lightos/interactive-shell-mcp.git
cd interactive-shell-mcp
npm install && npm run build
claude mcp add interactive-shell node dist/src/server.jsLuego pregúntale a Claude: "monitoriza htop y dime qué está consumiendo más CPU"
Características
Lectura de pantalla renderizada desde aplicaciones TUI mediante
@xterm/headlesswaitForIdleen todas las herramientas de lectura (no más adivinanzas con sleep)Búsqueda en pantalla con coincidencia de texto y patrones regex
Extracción de regiones rectangulares con coordenadas de fila/columna
Lista blanca de shells: bash, zsh, fish, sh, dash, ksh, powershell.exe, pwsh, cmd.exe
Limpieza automática tras 10 minutos de inactividad, detección de código de salida durante 60 segundos tras el cierre del proceso
Multiplataforma: Unix/Linux/macOS + Windows
Casos de uso
Andamiaje y migraciones interactivas:
npx create-next-app,drizzle-kit push,prisma migrate,npm init, o cualquier CLI basada en inquirer/clackMonitorización del sistema:
htop,btop,top,iftop,dufcon búsqueda de procesos y extracción de regionesTUI de DevOps:
lazydocker,lazygit,k9s,terraform consoleSesiones remotas:
ssha servidores, incluyendo aplicaciones TUI anidadas sobre SSHCLI de bases de datos:
psql,mysql,redis-cli,mongoshen modo interactivoHerramientas de red:
netcat/ncat,nmap,airodump-ng,tcpdumpREPLs y depuradores:
python,node,irb,gdb/lldbEditores de texto:
vim,nano,emacs -nw
Configuración de MCP
Claude Code (CLI)
claude mcp add interactive-shell node /path/to/interactive-shell-mcp/dist/src/server.jsClaude Desktop
Añadir a ~/Library/Application Support/Claude/claude_desktop_config.json (macOS) o %APPDATA%\Claude\claude_desktop_config.json (Windows):
{
"mcpServers": {
"interactive-shell": {
"command": "node",
"args": ["/path/to/interactive-shell-mcp/dist/src/server.js"]
}
}
}VS Code / Cursor
Añadir a tus ajustes de MCP (.vscode/mcp.json o ~/.cursor/mcp.json):
{
"mcpServers": {
"interactive-shell": {
"command": "node",
"args": ["/path/to/interactive-shell-mcp/dist/src/server.js"]
}
}
}Referencia de herramientas
start_shell_session
Genera una nueva shell PTY con un emulador de terminal virtual.
Parámetro | Tipo | Requerido | Descripción |
| number | no | Columnas de terminal (predeterminado: 120, máx: 500) |
| number | no | Filas de terminal (predeterminado: 40, máx: 200) |
| string | no | Shell a utilizar (predeterminado: |
| string | no | Directorio de trabajo (predeterminado: cwd del servidor) |
Devuelve { sessionId, cols, rows }
send_shell_input
Escribe entrada en la PTY. Añade un retorno de carro por defecto.
Parámetro | Tipo | Requerido | Descripción |
| string | sí | ID de sesión |
| string | sí | Texto a enviar. Modo raw: |
| boolean | no | Enviar sin añadir CR. Analiza secuencias de escape. (predeterminado: false) |
read_shell_output
Lee la salida de la PTY. Tres modos: streaming (predeterminado), snapshot, screen.
Parámetro | Tipo | Requerido | Descripción |
| string | sí | ID de sesión |
| string | no |
|
| number | no | Esperar N ms de silencio antes de leer (máx: 5000ms) |
| number | no | Bytes máximos para modo streaming (predeterminado: 100KB) |
| number | no | Tamaño del búfer de snapshot (predeterminado: 50KB) |
| number | no | Modo screen: fila de inicio (basado en 0) |
| number | no | Modo screen: fila final (exclusiva) |
| boolean | no | Modo screen: incluir líneas vacías finales (predeterminado: true) |
| boolean | no | Modo screen: recortar espacios en blanco finales por línea (predeterminado: false) |
El modo screen devuelve la posición del cursor, dimensiones del terminal y estado del búfer alternativo en los metadatos.
get_screen_region
Extrae texto de una región rectangular de la pantalla.
Parámetro | Tipo | Requerido | Descripción |
| string | sí | ID de sesión |
| number | sí | Fila de inicio (basado en 0, inclusiva) |
| number | sí | Columna de inicio (basado en 0, inclusiva) |
| number | sí | Fila final (exclusiva) |
| number | sí | Columna final (exclusiva) |
| boolean | no | Recortar espacios en blanco finales por línea (predeterminado: false) |
| number | no | Esperar N ms de silencio antes de leer (máx: 5000ms) |
get_screen_cursor
Obtiene la posición del cursor y el texto de la línea actual.
Parámetro | Tipo | Requerido | Descripción |
| string | sí | ID de sesión |
| number | no | Esperar N ms de silencio antes de leer (máx: 5000ms) |
Devuelve { cursor: { x, y }, currentLine, isAlternateBuffer }
search_screen
Busca texto o regex en la pantalla del terminal. Devuelve hasta 50 coincidencias.
Parámetro | Tipo | Requerido | Descripción |
| string | sí | ID de sesión |
| string | sí | Texto o patrón regex |
| boolean | no | Tratar el patrón como regex (predeterminado: false) |
| number | no | Esperar N ms de silencio antes de leer (máx: 5000ms) |
Devuelve { results: [{ row, col, text }], count }
list_sessions
Lista todas las sesiones activas con metadatos. Sin parámetros.
Devuelve { sessions: [{ sessionId, shell, cols, rows, isAlternateBuffer, idleSeconds }] }
resize_shell
Cambia el tamaño del terminal de una sesión activa.
Parámetro | Tipo | Requerido | Descripción |
| string | sí | ID de sesión |
| number | sí | Nuevas columnas (1-500) |
| number | sí | Nuevas filas (1-200) |
end_shell_session
Cierra la PTY y libera recursos.
Parámetro | Tipo | Requerido | Descripción |
| string | sí | ID de sesión |
Ejemplos de uso
Estos muestran los patrones de llamada a herramientas MCP para desarrolladores que crean integraciones. Los usuarios finales simplemente hablan con su agente de IA de forma natural.
Lectura de una aplicación TUI
await send_shell_input(sessionId, "htop");
const { output, metadata } = await read_shell_output(sessionId, {
mode: "screen",
waitForIdle: 500
});
// output: rendered htop as clean text (CPU bars, process table, etc.)
// metadata.isAlternateBuffer: true (htop uses alternate screen)
// Extract just the process list (rows 6-30)
const processes = await get_screen_region(sessionId, {
startRow: 6, startCol: 0, endRow: 30, endCol: 120,
trimWhitespace: true
});Navegación por prompts interactivos
// Send arrow keys and enter in raw mode
await send_shell_input(sessionId, "\\x1b[B", { raw: true }); // down arrow
await send_shell_input(sessionId, " ", { raw: true }); // space to select
await send_shell_input(sessionId, "\\r", { raw: true }); // enter to confirm
// Read what the prompt looks like now
const screen = await read_shell_output(sessionId, {
mode: "screen", waitForIdle: 300
});Esperar a la salida de un comando
await send_shell_input(sessionId, "npm install");
const output = await read_shell_output(sessionId, {
waitForIdle: 1000 // wait for 1s of silence
});Búsqueda de contenido
// Find all error lines
const errors = await search_screen(sessionId, {
pattern: "error|Error|ERROR",
regex: true,
waitForIdle: 500
});
// [{ row: 12, col: 0, text: "Error" }, ...]Comportamiento de la sesión
Limpieza automática: Las sesiones inactivas >10 minutos se eliminan automáticamente
Detección de salida: Cuando una shell termina, las herramientas devuelven
"Session exited with code N"durante 60 segundos en lugar de un error genérico de ID no válidoLista blanca de shells: Solo se pueden generar shells conocidas (bash, zsh, fish, sh, dash, ksh, powershell.exe, pwsh, cmd.exe). Los valores desconocidos vuelven al valor predeterminado de la plataforma.
Licencia
MIT
This server cannot be installed
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Latest Blog Posts
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/lightos/interactive-shell-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server

