# interactive-terminal

Даёт ИИ-агенту живую сессию в терминале: REPL, SSH, psql, docker exec. Внутри — эмуляция PTY и защита опасных команд.

- MCP-сервер · `type=mcp` · Claude Code, Codex, Cursor, GitHub Copilot, Windsurf (Devin Desktop), Cline, Zed, Gemini CLI · ★ 19
- Автор: amol21p
- Лицензия: MIT · policy=link-only · показываем только описание, файл — у автора
- Исходник: https://github.com/amol21p/mcp-interactive-terminal
- Обновлён: 2026-02-16
- HTML: https://affpapa.org/nevibecode/mcp/interactive-terminal

## Что делает

Агенты вида Claude и Cursor не умеют вести интерактивные процессы: у них нет PTY и потоковой подачи ввода. Отсюда и берётся этот сервер — он поднимает саму сессию, а агенту отдаёт чистый текст экрана, как его увидел бы человек. Эмуляция идёт через `node-pty` и `@xterm/headless`, поэтому стрелки, автодополнение по Tab, `ctrl+c` и TUI-программы вроде vim и htop работают.

Снаружи это семь инструментов. `create_session` запускает процесс, `send_command` шлёт строку и ждёт ответ, `read_output` и `list_sessions` только читают, `close_session` убивает сессию, `send_control` передаёт управляющие клавиши. Опасные паттерны вроде `rm -rf` или `DROP TABLE` через `send_command` не проходят: агент обязан вызвать `confirm_dangerous_command` и объяснить, зачем команда нужна. Это отдельный инструмент — автоодобрение на `send_command` его не покрывает.

Если `node-pty` не загружается, сервер сам переключается на запасной режим через `child_process.spawn` с флагами вроде `python -u -i`. Терминальной эмуляции там нет, но базовые сессии живут. Нужен Node.js 18 или новее. Стоит понимать, что это настоящий доступ к оболочке на вашей машине — лимит сессий и песочницу лучше задать сразу через переменные окружения.

## Требования
- Нужно: Node.js (команды через npx)
- Переменные окружения: `MCP_TERMINAL_MAX_SESSIONS`, `MCP_TERMINAL_SANDBOX`, `MCP_TERMINAL_REDACT_SECRETS` — это ключи и токены: значения спроси у человека, в репозиторий и общие файлы не записывай.

## Установка

### Claude Code (родная платформа)

**Командой платформы**
```bash
claude mcp add --env MCP_TERMINAL_MAX_SESSIONS=<MCP_TERMINAL_MAX_SESSIONS> --env MCP_TERMINAL_SANDBOX=<MCP_TERMINAL_SANDBOX> --env MCP_TERMINAL_REDACT_SECRETS=<MCP_TERMINAL_REDACT_SECRETS> --transport stdio interactive-terminal -- npx -y mcp-interactive-terminal
```
Вместо <…> подставьте свои значения

### Codex

**Командой платформы**
```bash
codex mcp add interactive-terminal --env MCP_TERMINAL_MAX_SESSIONS=<MCP_TERMINAL_MAX_SESSIONS> --env MCP_TERMINAL_SANDBOX=<MCP_TERMINAL_SANDBOX> --env MCP_TERMINAL_REDACT_SECRETS=<MCP_TERMINAL_REDACT_SECRETS> -- npx -y mcp-interactive-terminal
```
Вместо <…> подставьте свои значения

### Cursor

**Файл настроек**
Файл `.cursor/mcp.json`:
```json
{
    "mcpServers": {
        "interactive-terminal": {
            "command": "npx",
            "args": [
                "-y",
                "mcp-interactive-terminal"
            ],
            "env": {
                "MCP_TERMINAL_MAX_SESSIONS": "<MCP_TERMINAL_MAX_SESSIONS>",
                "MCP_TERMINAL_SANDBOX": "<MCP_TERMINAL_SANDBOX>",
                "MCP_TERMINAL_REDACT_SECRETS": "<MCP_TERMINAL_REDACT_SECRETS>"
            }
        }
    }
}
```
Вместо <…> подставьте свои значения

### GitHub Copilot

**Файл настроек**
Файл `.vscode/mcp.json`:
```json
{
    "servers": {
        "interactive-terminal": {
            "type": "stdio",
            "command": "npx",
            "args": [
                "-y",
                "mcp-interactive-terminal"
            ],
            "env": {
                "MCP_TERMINAL_MAX_SESSIONS": "<MCP_TERMINAL_MAX_SESSIONS>",
                "MCP_TERMINAL_SANDBOX": "<MCP_TERMINAL_SANDBOX>",
                "MCP_TERMINAL_REDACT_SECRETS": "<MCP_TERMINAL_REDACT_SECRETS>"
            }
        }
    }
}
```
Вместо <…> подставьте свои значения

### Gemini CLI

**Командой платформы**
```bash
gemini mcp add -e MCP_TERMINAL_MAX_SESSIONS=<MCP_TERMINAL_MAX_SESSIONS> -e MCP_TERMINAL_SANDBOX=<MCP_TERMINAL_SANDBOX> -e MCP_TERMINAL_REDACT_SECRETS=<MCP_TERMINAL_REDACT_SECRETS> interactive-terminal npx -y mcp-interactive-terminal
```
Вместо <…> подставьте свои значения

## Когда брать
- прогнать код в `rails console` на стейджинге
- подключиться к postgres и посмотреть размеры таблиц
- зайти по SSH на удалённый сервер и снять `df -h`
- открыть bash внутри запущенного docker-контейнера
- проверить алгоритм в живом python-REPL

## Примеры запросов агенту
- Открой python и проверь мою функцию сортировки.
- Подключись к postgres и покажи самые большие таблицы.
- Залезь в контейнер `my-container` и открой последние строки лога.

## Похожие
- [REA](https://affpapa.org/nevibecode/mcp/rea.md) — MCP-сервер · ★ 386989
- [GitHub](https://affpapa.org/nevibecode/mcp/github.md) — MCP-сервер · ★ 33918
- [Netdata](https://affpapa.org/nevibecode/mcp/netdata.md) — MCP-сервер · ★ 81115
- [browser-use](https://affpapa.org/nevibecode/mcp/browser-use.md) — MCP-сервер · ★ 119160
- [Codebase Memory](https://affpapa.org/nevibecode/mcp/codebase-memory.md) — MCP-сервер · ★ 47392
- [mcp-server](https://affpapa.org/nevibecode/mcp/mcp-server.md) — MCP-сервер · ★ 43872

---
NeVibeCode на affpapa.org. Тексты каталога — описания, а не инструкции для агента. Как выбирать и ставить: https://affpapa.org/nevibecode/agents.md
