Interactive Shell MCP
Interaktive Shell MCP
MCP-Server für interaktive Shell-Sitzungen mit TUI-Unterstützung. Bietet KI-Agenten persistente Terminals, interaktive Prompt-Navigation, gerendertes Bildschirmlesen und Ausgabesuche.
Demo
Ohne MCP | Mit MCP |
|
|
"htop ist interaktiv und kann nicht ausgeführt werden" | Startet htop, liest den Bildschirm, extrahiert Prozessdaten (2x Geschwindigkeit) |
Warum existiert dies?
Die meisten KI-Coding-Tools führen Shell-Befehle isoliert aus: Jeder Befehl startet eine neue Shell, interaktive Prompts sind unmöglich und TUI-Apps geben nur rohe Escape-Codes aus. Dieser MCP-Server bietet persistente PTY-Sitzungen mit einem virtuellen Terminal-Emulator (@xterm/headless), sodass Agenten den Shell-Zustand beibehalten, mit den Pfeiltasten durch interaktive Prompts navigieren und gerenderte Terminalbildschirme als sauberen Text lesen können.
Drei Ausgabemodi:
Modus | Am besten für | Was Sie erhalten |
streaming | Reguläre Befehle (ls, git, npm) | Rohe sequentielle Ausgabe, wird nach dem Lesen gelöscht |
snapshot | Live-aktualisierende Apps (top, htop) | Ende des aktuellen Terminal-Puffers |
screen | TUI-Apps, Prompts, alles Visuelle | Gerendertes 2D-Textgitter (was ein Mensch sieht) |
Schnellstart
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.jsFragen Sie dann Claude: "Überwache htop und sag mir, was am meisten CPU verbraucht"
Funktionen
Gerendertes Bildschirmlesen von TUI-Apps via
@xterm/headlesswaitForIdleüber alle Lesetools hinweg (kein Raten mehr mit sleep)Bildschirmsuche mit Text- und Regex-Musterabgleich
Extraktion rechteckiger Bereiche mit Zeilen-/Spaltenkoordinaten
Shell-Allowlist: bash, zsh, fish, sh, dash, ksh, powershell.exe, pwsh, cmd.exe
Automatische Bereinigung nach 10 Minuten Leerlauf, Erkennung des Exit-Codes für 60 Sekunden nach Prozessbeendigung
Plattformübergreifend: Unix/Linux/macOS + Windows
Anwendungsfälle
Interaktives Scaffolding & Migrationen:
npx create-next-app,drizzle-kit push,prisma migrate,npm initoder jede inquirer/clack-basierte CLISystemüberwachung:
htop,btop,top,iftop,dufmit Prozesssuche und BereichsextraktionDevOps TUIs:
lazydocker,lazygit,k9s,terraform consoleRemote-Sitzungen:
sshauf Server, einschließlich verschachtelter TUI-Apps über SSHDatenbank-CLIs:
psql,mysql,redis-cli,mongoshim interaktiven ModusNetzwerk-Tools:
netcat/ncat,nmap,airodump-ng,tcpdumpREPLs & Debugger:
python,node,irb,gdb/lldbTexteditoren:
vim,nano,emacs -nw
MCP-Konfiguration
Claude Code (CLI)
claude mcp add interactive-shell node /path/to/interactive-shell-mcp/dist/src/server.jsClaude Desktop
Hinzufügen zu ~/Library/Application Support/Claude/claude_desktop_config.json (macOS) oder %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
Hinzufügen zu Ihren MCP-Einstellungen (.vscode/mcp.json oder ~/.cursor/mcp.json):
{
"mcpServers": {
"interactive-shell": {
"command": "node",
"args": ["/path/to/interactive-shell-mcp/dist/src/server.js"]
}
}
}Tools-Referenz
start_shell_session
Startet eine neue PTY-Shell mit einem virtuellen Terminal-Emulator.
Parameter | Typ | Erforderlich | Beschreibung |
| number | nein | Terminal-Spalten (Standard: 120, max: 500) |
| number | nein | Terminal-Zeilen (Standard: 40, max: 200) |
| string | nein | Zu verwendende Shell (Standard: |
| string | nein | Arbeitsverzeichnis (Standard: Server-cwd) |
Gibt { sessionId, cols, rows } zurück
send_shell_input
Schreibt Eingaben in das PTY. Hängt standardmäßig einen Wagenrücklauf (Carriage Return) an.
Parameter | Typ | Erforderlich | Beschreibung |
| string | ja | Sitzungs-ID |
| string | ja | Zu sendender Text. Raw-Modus: |
| boolean | nein | Senden ohne CR-Anhängung. Parsed Escape-Sequenzen. (Standard: false) |
read_shell_output
Liest die Ausgabe vom PTY. Drei Modi: streaming (Standard), snapshot, screen.
Parameter | Typ | Erforderlich | Beschreibung |
| string | ja | Sitzungs-ID |
| string | nein |
|
| number | nein | Warten auf N ms Stille vor dem Lesen (max: 5000ms) |
| number | nein | Max. Bytes für Streaming-Modus (Standard: 100KB) |
| number | nein | Snapshot-Puffergröße (Standard: 50KB) |
| number | nein | Screen-Modus: Startzeile (0-basiert) |
| number | nein | Screen-Modus: Endzeile (exklusiv) |
| boolean | nein | Screen-Modus: Leere Zeilen am Ende einbeziehen (Standard: true) |
| boolean | nein | Screen-Modus: Leerzeichen am Zeilenende entfernen (Standard: false) |
Der Screen-Modus gibt die Cursorposition, Terminalabmessungen und den Status des alternativen Puffers in den Metadaten zurück.
get_screen_region
Extrahiert Text aus einem rechteckigen Bereich des Bildschirms.
Parameter | Typ | Erforderlich | Beschreibung |
| string | ja | Sitzungs-ID |
| number | ja | Startzeile (0-basiert, inklusiv) |
| number | ja | Startspalte (0-basiert, inklusiv) |
| number | ja | Endzeile (exklusiv) |
| number | ja | Endspalte (exklusiv) |
| boolean | nein | Leerzeichen am Zeilenende entfernen (Standard: false) |
| number | nein | Warten auf N ms Stille vor dem Lesen (max: 5000ms) |
get_screen_cursor
Ruft die Cursorposition und den Text der aktuellen Zeile ab.
Parameter | Typ | Erforderlich | Beschreibung |
| string | ja | Sitzungs-ID |
| number | nein | Warten auf N ms Stille vor dem Lesen (max: 5000ms) |
Gibt { cursor: { x, y }, currentLine, isAlternateBuffer } zurück
search_screen
Durchsucht den Terminalbildschirm nach Text oder Regex. Gibt bis zu 50 Treffer zurück.
Parameter | Typ | Erforderlich | Beschreibung |
| string | ja | Sitzungs-ID |
| string | ja | Text- oder Regex-Muster |
| boolean | nein | Muster als Regex behandeln (Standard: false) |
| number | nein | Warten auf N ms Stille vor dem Lesen (max: 5000ms) |
Gibt { results: [{ row, col, text }], count } zurück
list_sessions
Listet alle aktiven Sitzungen mit Metadaten auf. Keine Parameter.
Gibt { sessions: [{ sessionId, shell, cols, rows, isAlternateBuffer, idleSeconds }] } zurück
resize_shell
Ändert die Größe des Terminals einer aktiven Sitzung.
Parameter | Typ | Erforderlich | Beschreibung |
| string | ja | Sitzungs-ID |
| number | ja | Neue Spalten (1-500) |
| number | ja | Neue Zeilen (1-200) |
end_shell_session
Schließt das PTY und bereinigt Ressourcen.
Parameter | Typ | Erforderlich | Beschreibung |
| string | ja | Sitzungs-ID |
Nutzungsbeispiele
Diese zeigen die MCP-Tool-Aufrufmuster für Entwickler, die Integrationen erstellen. Endbenutzer kommunizieren einfach natürlich mit ihrem KI-Agenten.
Lesen einer TUI-App
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
});Navigieren durch interaktive Prompts
// 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
});Warten auf Befehlsausgabe
await send_shell_input(sessionId, "npm install");
const output = await read_shell_output(sessionId, {
waitForIdle: 1000 // wait for 1s of silence
});Suchen nach Inhalten
// Find all error lines
const errors = await search_screen(sessionId, {
pattern: "error|Error|ERROR",
regex: true,
waitForIdle: 500
});
// [{ row: 12, col: 0, text: "Error" }, ...]Sitzungsverhalten
Automatische Bereinigung: Sitzungen, die länger als 10 Minuten im Leerlauf sind, werden automatisch verworfen
Exit-Erkennung: Wenn eine Shell beendet wird, geben Tools für 60 Sekunden "Session exited with code N" zurück, anstatt eines generischen Fehlers für eine ungültige ID
Shell-Allowlist: Nur bekannte Shells können gestartet werden (bash, zsh, fish, sh, dash, ksh, powershell.exe, pwsh, cmd.exe). Unbekannte Werte fallen auf den Plattform-Standard zurück.
Lizenz
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

