Interactive Shell MCP
Interactive Shell MCP
MCP-сервер для интерактивных сеансов оболочки с поддержкой TUI. Предоставляет ИИ-агентам постоянные терминалы, интерактивную навигацию по подсказкам, чтение отрисованного экрана и поиск по выводу.
Демонстрация
Без MCP | С MCP |
|
|
"htop интерактивен и не может быть запущен" | Запускает htop, считывает экран, извлекает данные о процессах (в 2 раза быстрее) |
Зачем это нужно
Большинство инструментов для кодинга с ИИ запускают команды оболочки изолированно: каждая команда начинает новую оболочку, интерактивные подсказки невозможны, а TUI-приложения просто выводят «сырые» escape-коды. Этот MCP-сервер предоставляет постоянные PTY-сеансы с эмулятором виртуального терминала (@xterm/headless), чтобы агенты могли сохранять состояние оболочки, перемещаться по интерактивным подсказкам с помощью клавиш со стрелками и читать отрисованные экраны терминала как обычный текст.
Три режима вывода:
Режим | Лучше всего подходит для | Что вы получаете |
streaming | Обычные команды (ls, git, npm) | «Сырой» последовательный вывод, очищается после чтения |
snapshot | Обновляемые в реальном времени приложения (top, htop) | Текущий буфер терминала |
screen | TUI-приложения, подсказки, визуальный контент | Отрисованная 2D-сетка текста (то, что видит человек) |
Быстрый старт
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.jsЗатем спросите Claude: "отслеживай htop и скажи, что потребляет больше всего CPU"
Функции
Чтение отрисованного экрана из TUI-приложений через
@xterm/headlesswaitForIdleдля всех инструментов чтения (больше не нужно угадывать с sleep)Поиск по экрану с использованием текста и регулярных выражений
Извлечение прямоугольных областей с координатами строк/столбцов
Белый список оболочек: bash, zsh, fish, sh, dash, ksh, powershell.exe, pwsh, cmd.exe
Автоматическая очистка после 10 минут простоя, обнаружение кода выхода в течение 60 секунд после завершения процесса
Кроссплатформенность: Unix/Linux/macOS + Windows
Варианты использования
Интерактивное создание каркасов и миграции:
npx create-next-app,drizzle-kit push,prisma migrate,npm initили любой CLI на базе inquirer/clackМониторинг системы:
htop,btop,top,iftop,dufс поиском процессов и извлечением областейDevOps TUI:
lazydocker,lazygit,k9s,terraform consoleУдаленные сеансы:
sshна серверы, включая вложенные TUI-приложения через SSHCLI баз данных:
psql,mysql,redis-cli,mongoshв интерактивном режимеСетевые инструменты:
netcat/ncat,nmap,airodump-ng,tcpdumpREPL и отладчики:
python,node,irb,gdb/lldbТекстовые редакторы:
vim,nano,emacs -nw
Конфигурация MCP
Claude Code (CLI)
claude mcp add interactive-shell node /path/to/interactive-shell-mcp/dist/src/server.jsClaude Desktop
Добавьте в ~/Library/Application Support/Claude/claude_desktop_config.json (macOS) или %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
Добавьте в настройки MCP (.vscode/mcp.json или ~/.cursor/mcp.json):
{
"mcpServers": {
"interactive-shell": {
"command": "node",
"args": ["/path/to/interactive-shell-mcp/dist/src/server.js"]
}
}
}Справочник инструментов
start_shell_session
Запуск новой PTY-оболочки с эмулятором виртуального терминала.
Параметр | Тип | Обязателен | Описание |
| number | нет | Столбцы терминала (по умолчанию: 120, макс: 500) |
| number | нет | Строки терминала (по умолчанию: 40, макс: 200) |
| string | нет | Используемая оболочка (по умолчанию: |
| string | нет | Рабочая директория (по умолчанию: рабочая директория сервера) |
Возвращает { sessionId, cols, rows }
send_shell_input
Запись ввода в PTY. По умолчанию добавляет возврат каретки.
Параметр | Тип | Обязателен | Описание |
| string | да | ID сеанса |
| string | да | Текст для отправки. Raw-режим: |
| boolean | нет | Отправка без добавления CR. Парсит escape-последовательности. (по умолчанию: false) |
read_shell_output
Чтение вывода из PTY. Три режима: streaming (по умолчанию), snapshot, screen.
Параметр | Тип | Обязателен | Описание |
| string | да | ID сеанса |
| string | нет |
|
| number | нет | Ожидание N мс тишины перед чтением (макс: 5000 мс) |
| number | нет | Макс. байт для режима streaming (по умолчанию: 100 КБ) |
| number | нет | Размер буфера снимка (по умолчанию: 50 КБ) |
| number | нет | Режим screen: начальная строка (с 0) |
| number | нет | Режим screen: конечная строка (исключая) |
| boolean | нет | Режим screen: включать пустые строки в конце (по умолчанию: true) |
| boolean | нет | Режим screen: обрезать пробелы в конце каждой строки (по умолчанию: false) |
Режим screen возвращает позицию курсора, размеры терминала и состояние альтернативного буфера в метаданных.
get_screen_region
Извлечение текста из прямоугольной области экрана.
Параметр | Тип | Обязателен | Описание |
| string | да | ID сеанса |
| number | да | Начальная строка (с 0, включая) |
| number | да | Начальный столбец (с 0, включая) |
| number | да | Конечная строка (исключая) |
| number | да | Конечный столбец (исключая) |
| boolean | нет | Обрезать пробелы в конце каждой строки (по умолчанию: false) |
| number | нет | Ожидание N мс тишины перед чтением (макс: 5000 мс) |
get_screen_cursor
Получение позиции курсора и текста текущей строки.
Параметр | Тип | Обязателен | Описание |
| string | да | ID сеанса |
| number | нет | Ожидание N мс тишины перед чтением (макс: 5000 мс) |
Возвращает { cursor: { x, y }, currentLine, isAlternateBuffer }
search_screen
Поиск текста или регулярного выражения на экране терминала. Возвращает до 50 совпадений.
Параметр | Тип | Обязателен | Описание |
| string | да | ID сеанса |
| string | да | Текст или шаблон регулярного выражения |
| boolean | нет | Обрабатывать шаблон как регулярное выражение (по умолчанию: false) |
| number | нет | Ожидание N мс тишины перед чтением (макс: 5000 мс) |
Возвращает { results: [{ row, col, text }], count }
list_sessions
Список всех активных сеансов с метаданными. Без параметров.
Возвращает { sessions: [{ sessionId, shell, cols, rows, isAlternateBuffer, idleSeconds }] }
resize_shell
Изменение размера терминала активного сеанса.
Параметр | Тип | Обязателен | Описание |
| string | да | ID сеанса |
| number | да | Новые столбцы (1-500) |
| number | да | Новые строки (1-200) |
end_shell_session
Закрытие PTY и очистка ресурсов.
Параметр | Тип | Обязателен | Описание |
| string | да | ID сеанса |
Примеры использования
Здесь показаны шаблоны вызовов инструментов MCP для разработчиков, создающих интеграции. Конечные пользователи просто общаются со своим ИИ-агентом естественным образом.
Чтение 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
});Навигация по интерактивным подсказкам
// 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
});Ожидание вывода команды
await send_shell_input(sessionId, "npm install");
const output = await read_shell_output(sessionId, {
waitForIdle: 1000 // wait for 1s of silence
});Поиск контента
// Find all error lines
const errors = await search_screen(sessionId, {
pattern: "error|Error|ERROR",
regex: true,
waitForIdle: 500
});
// [{ row: 12, col: 0, text: "Error" }, ...]Поведение сеанса
Автоматическая очистка: Сеансы, простаивающие более 10 минут, автоматически удаляются
Обнаружение выхода: Когда оболочка завершается, инструменты возвращают
"Session exited with code N"в течение 60 секунд вместо общей ошибки о неверном IDБелый список оболочек: Можно запускать только известные оболочки (bash, zsh, fish, sh, dash, ksh, powershell.exe, pwsh, cmd.exe). Неизвестные значения возвращаются к платформе по умолчанию.
Лицензия
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

