GitHub
Connect AI assistants to GitHub - manage repos, issues, PRs, and workflows through natural language.
作者による説明(英語の原文)
MCP server for real interactive terminal sessions — REPLs, SSH, databases, Docker
この3つを1つのスコアにまとめることはしません。意見、測定、人気はそれぞれ別のものだからです。
このサーバーのやさしい解説はまだ書いていません。以下はレジストリから読み取った事実です。
使っているAIアプリを選んで、設定をコピーしてください。
MCP_TERMINAL_MAX_SESSIONS, MCP_TERMINAL_SANDBOX, MCP_TERMINAL_REDACT_SECRETS必要なもの
どのアプリを使っていますか?
上でアプリを選んでください。選んだアプリを覚えておくので、次からはボタンに「…にインストール」と表示されます。
Claude Desktop → Settings → Developer → Edit Config を開き、claude_desktop_config.json にこれを貼り付けます
{
"mcpServers": {
"interactive-terminal": {
"command": "npx",
"args": [
"-y",
"mcp-interactive-terminal"
],
"env": {
"MCP_TERMINAL_MAX_SESSIONS": "your-value",
"MCP_TERMINAL_SANDBOX": "your-value",
"MCP_TERMINAL_REDACT_SECRETS": "your-value"
}
}
}
}ターミナルでこれを実行します
claude mcp add interactive-terminal --env MCP_TERMINAL_MAX_SESSIONS=your-value --env MCP_TERMINAL_SANDBOX=your-value --env MCP_TERMINAL_REDACT_SECRETS=your-value -- npx -y mcp-interactive-terminal動かす前に、空欄の値を入力してください。
プロジェクトの .cursor/mcp.json、または ~/.cursor/mcp.json に貼り付けます
{
"mcpServers": {
"interactive-terminal": {
"command": "npx",
"args": [
"-y",
"mcp-interactive-terminal"
],
"env": {
"MCP_TERMINAL_MAX_SESSIONS": "your-value",
"MCP_TERMINAL_SANDBOX": "your-value",
"MCP_TERMINAL_REDACT_SECRETS": "your-value"
}
}
}
}ブラウザがアプリを開いてよいか確認し、そのあとアプリが設定を表示して確認を求めます。キーの値は空欄のままなので、自分で入力してください。
プロジェクトの .vscode/mcp.json に貼り付けます
{
"servers": {
"interactive-terminal": {
"type": "stdio",
"command": "npx",
"args": [
"-y",
"mcp-interactive-terminal"
],
"env": {
"MCP_TERMINAL_MAX_SESSIONS": "your-value",
"MCP_TERMINAL_SANDBOX": "your-value",
"MCP_TERMINAL_REDACT_SECRETS": "your-value"
}
}
}
}ブラウザがアプリを開いてよいか確認し、そのあとアプリが設定を表示して確認を求めます。キーの値は空欄のままなので、自分で入力してください。
これはパソコンで動くサーバーですが、ChatGPTがつなげるのはインターネット上のサーバーだけです。ほかのアプリを選んでください。
選んだアプリは、この端末のCookieに保存されます。アカウントは不要です。
MCP_TERMINAL_MAX_SESSIONS envMCP_TERMINAL_SANDBOX envMCP_TERMINAL_REDACT_SECRETS envこの設定は、作者のレジストリ登録情報から作成しています。READMEと違う場合は、READMEに従ってください。
パソコンで動くサーバーです。インストールすると、ツール一覧がAIアプリに表示されます。
誰でも見られる情報をチェックしており、コードは読んでいません。当てはまらない項目は数に入れていません。 · 2026年11月7日にチェック
レジストリ名は、リポジトリを所有するGitHubアカウント amol21p で確認済みです
このリポジトリはまだGitHubから読み取っていません
このリポジトリはまだGitHubから読み取っていません
これはパソコンで動くため、インターネット上のエンドポイントはありません
パソコンで動き、代わりにローカルの設定を使います
パソコンで動くサーバーです。ツール一覧を読み取れるのは、インターネット上のエンドポイントがある場合だけです
レジストリでこのカテゴリにある有効なすべてのサーバーと比較しています。スターは、公開者がリポジトリの所有者である場合だけ数えます。
当てはまる基本チェック1項目のうち1項目に合格しました。コードは読んでいません。キーやトークンを追加する前に、サーバーがどんなアクセスを求めているかを確認し、必要な権限だけを持つキーを使ってください。
レジストリには必須のキーは載っていません。ただし、最初に使うときにサインインを求めるサーバーもあります。
あなたのパソコンで動きます。必要なときにAIアプリが起動し、データは作者のサーバーを通りません(サーバー自体がオンラインサービスを呼び出す場合を除きます)。
GitHubリポジトリの最終更新は–、最新バージョン(1.0.7)がレジストリに届いたのは9 か月前です。
Claude Desktop、Claude Code、Cursor、VS CodeなどのMCP対応アプリで使えます。パソコンにNode.jsも必要です。
同じカテゴリには:GitHub, Desktop Commander, Cloudflare MCP
同じカテゴリで、ほかの作者が作ったサーバー。スターの多い順。
カードの見方:★ GitHubスターi3つの柱:レビュー · チェック · 利用状況i更新=最新バージョンをレジストリに公開した日i
Connect AI assistants to GitHub - manage repos, issues, PRs, and workflows through natural language.
MCP server for terminal commands, file operations, and process management
Cloudflare MCP servers
作者のリポジトリから書かれたとおりにコピーしたものです。PopNx MCPは内容を確認・推奨していません。HTML、画像、スクリプトは取り除いています。リンクはこのサイトの外へ移動します。
MCP server that gives AI agents (Claude Code, Cursor, Windsurf, etc.) real interactive terminal sessions. Run REPLs, SSH, database clients, and any interactive CLI — with clean text output, smart completion detection, and 7-layer security.
AI coding agents can't handle interactive commands. There's no PTY, no stdin streaming. You can't run rails console, python, psql, ssh, or any REPL through them. This MCP server fixes that.
AI Agent (Claude Code, Cursor, etc.)
↕ MCP (JSON-RPC over stdio) mcp-interactive-terminal ↕ node-pty + xterm-headless Interactive Process (rails console, python, psql, ssh, bash...) ↕ Clean text output (exactly what a human would see)
claude mcp add terminal -- npx -y mcp-interactive-terminal
That's it. The server is now available. Ask Claude to "open a python REPL and calculate 2**100".
Go to Settings > MCP Servers, click Add Server, and enter:
{
"mcpServers": { "terminal": { "command": "npx", "args": ["-y", "mcp-interactive-terminal"] } } }
Add to your MCP configuration:
{
"mcpServers": { "terminal": { "command": "npx", "args": ["-y", "mcp-interactive-terminal"] } } }
Add to your .vscode/mcp.json:
{
"servers": { "terminal": { "command": "npx", "args": ["-y", "mcp-interactive-terminal"] } } }
The server communicates over stdio using the Model Context Protocol. Any MCP-compatible client can use it with the same npx -y mcp-interactive-terminal command.
You: "Open rails console for staging and check the user count"
Agent creates session → bash Agent sends: cd /path/to/app && rails console -e staging Agent sends: User.count Agent returns: 1,847,293
You: "Open python and test my sorting algorithm"
Agent creates session → python3 Agent sends: def quicksort(arr): ... Agent sends: quicksort([3, 1, 4, 1, 5, 9]) Agent returns: [1, 1, 3, 4, 5, 9]
You: "Connect to postgres and show me the largest tables"
Agent creates session → psql -U myuser mydb Agent sends: SELECT tablename, pg_size_pretty(pg_total_relation_size(tablename::text)) ... Agent returns: formatted table of results
You: "SSH into the staging server and check disk usage"
Agent creates session → ssh user@staging.example.com Agent sends: df -h Agent returns: disk usage table
You: "Open a shell in my running container and check the logs"
Agent creates session → docker exec -it my-container bash Agent sends: tail -100 /var/log/app.log Agent returns: last 100 log lines
You: "Open node and test the date parsing logic"
Agent creates session → node Agent sends: new Date('2024-02-29').toISOString() Agent returns: 2024-02-29T00:00:00.000Z
The server exposes 7 MCP tools:
create_session — Spawn an interactive process{ "command": "python3", "name": "my-python", "cwd": "/project" }
→ { "session_id": "a1b2c3d4", "name": "my-python", "pid": 12345 }
| Parameter | Required | Default | Description |
|---|---|---|---|
command | Yes | — | Command to run (bash, python3, psql, ssh, etc.) |
args | No | [] | Command arguments |
name | No | auto | Human-readable session name |
cwd | No | server cwd | Working directory |
env | No | {} | Additional environment variables |
cols | No | 120 | Terminal columns |
rows | No | 40 | Terminal rows |
send_command — Send input and get output{ "session_id": "a1b2c3d4", "input": "1 + 1" }
→ { "output": "2", "is_complete": true, "is_alive": true }
| Parameter | Required | Default | Description |
|---|---|---|---|
session_id | Yes | — | Target session |
input | Yes | — | Command/input to send (newline appended automatically) |
timeout_ms | No | 5000 | Max wait time for output |
max_output_chars | No | 20000 | Truncate output beyond this |
Dangerous commands (rm -rf, DROP TABLE, curl|bash, etc.) are blocked — the agent must use confirm_dangerous_command first.
read_output — Read terminal screen (read-only){ "session_id": "a1b2c3d4" }
→ { "output": ">>> ", "is_alive": true }
Safe to auto-approve — this only reads, never sends input.
list_sessions — List active sessions (read-only)→ [{ "session_id": "a1b2c3d4", "name": "my-python", "command": "python3", "pid": 12345, "is_alive": true }]
Safe to auto-approve.
close_session — Kill a session{ "session_id": "a1b2c3d4" }
→ { "success": true }
send_control — Send control characters{ "session_id": "a1b2c3d4", "control": "ctrl+c" }
→ { "output": "^C\n>>>" }
Supported: ctrl+c, ctrl+d, ctrl+z, ctrl+l, ctrl+r, tab, escape, up, down, left, right, enter, backspace, delete, home, end, and more.
confirm_dangerous_command — Two-step safety confirmation{ "session_id": "a1b2c3d4", "input": "rm -rf /tmp/old", "justification": "Cleaning up stale temp files from failed build" }
→ { "output": "...", "is_complete": true, "is_alive": true }
Required when send_command detects a dangerous pattern. The agent must explain why the command is necessary. This is a separate tool — even if send_command is auto-approved, this requires its own permission.
PTY mode (default) — uses node-pty + @xterm/headless (the same terminal emulator as VS Code):
\r overwrites all render correctlyPipe mode (automatic fallback) — activates when node-pty can't load (e.g., in sandboxed environments):
child_process.spawn with auto-injected flags (python -u -i, bash -i, etc.)The mode is selected automatically — PTY is tried first, pipe mode kicks in if it fails.
| Scenario | PTY mode | Pipe mode |
|---|---|---|
printf "\rProgress: 3/3" | Progress: 3/3 | Progress: 1/3Progress: 2/3Progress: 3/3 |
| ANSI colors | Stripped cleanly | Stripped via regex |
| vim, htop, top | Readable screen | Garbled |
| Arrow keys, tab completion | Works | Works |
| Terminal resize | Works | No-op |
Instead of blindly waiting a fixed time, the server uses a layered strategy:
$, python >>>, psql #, etc.), watches for it to reappeartimeout_ms with is_complete: falseSeven-layer defense-in-depth:
| Layer | What It Does | Default | |
|---|---|---|---|
| MCP Tool Annotations | readOnlyHint/destructiveHint on each tool | Always on | |
| Confirmation Flow | Dangerous patterns require confirm_dangerous_command | Always on | |
| Input Pattern Detection | Detect rm -rf, DROP TABLE, curl\ | bash, etc. | Always on |
| Command Blocklist/Allowlist | Block/allow specific commands | Configurable | |
| OS-Level Sandbox | Kernel-level process sandboxing via @anthropic-ai/sandbox-runtime | Off (opt-in) | |
| Secret Redaction | Redact AWS keys, tokens, private keys in output | Off (opt-in) | |
| Resource Limits | Max sessions, output cap, idle timeout, audit logging | Always on |
Only auto-approve the read-only tools:
{
"permissions": { "allow": [ "mcpterminallist_sessions", "mcpterminalread_output" ] } }
This way send_command, create_session, and especially confirm_dangerous_command always require human approval.
All settings via environment variables. Pass them in your MCP config:
{
"mcpServers": { "terminal": { "command": "npx", "args": ["-y", "mcp-interactive-terminal"], "env": { "MCP_TERMINAL_ALLOWED_COMMANDS": "bash,python3,node,psql", "MCP_TERMINAL_REDACT_SECRETS": "true", "MCP_TERMINAL_IDLE_TIMEOUT": "300000" } } } }
| Variable | Default | Description |
|---|---|---|
MCP_TERMINAL_MAX_SESSIONS | 10 | Max concurrent sessions |
MCP_TERMINAL_MAX_OUTPUT | 20000 | Max output chars per read |
MCP_TERMINAL_DEFAULT_TIMEOUT | 5000 | Default wait timeout (ms) |
MCP_TERMINAL_BLOCKED_COMMANDS | — | Comma-separated blocklist |
MCP_TERMINAL_ALLOWED_COMMANDS | — | Comma-separated allowlist (if set, only these are allowed) |
MCP_TERMINAL_ALLOWED_PATHS | — | Comma-separated paths sessions can access |
MCP_TERMINAL_REDACT_SECRETS | false | Redact AWS keys, tokens, private keys in output |
MCP_TERMINAL_LOG_INPUTS | false | Log all inputs to stderr (for debugging) |
MCP_TERMINAL_IDLE_TIMEOUT | 1800000 | Auto-close idle sessions (ms, default 30min, 0 = disabled) |
MCP_TERMINAL_DANGER_DETECTION | true | Enable dangerous command confirmation flow |
MCP_TERMINAL_AUDIT_LOG | — | Path to JSON audit log file |
MCP_TERMINAL_SANDBOX | false | Enable OS-level kernel sandboxing |
MCP_TERMINAL_SANDBOX_ALLOW_WRITE | /tmp | Writable paths in sandbox mode |
MCP_TERMINAL_SANDBOX_ALLOW_NETWORK | * | Allowed network domains in sandbox |
MCP servers that fail to start often show no error in the client. Check:
# Test the server directly:
npx -y mcp-interactive-terminal
The server requires Node.js >= 18. If you see errors about unsupported syntax or missing APIs:
node --version # Must be >= 18
nvm install 18 && nvm use 18
volta install node@18
For nvm/volta/fnm users: npx may use a different Node version than your shell. Use an absolute path:
{
"mcpServers": { "terminal": { "command": "/Users/you/.nvm/versions/node/v22.0.0/bin/npx", "args": ["-y", "mcp-interactive-terminal"] } } }
Find your path with: which npx
node-pty is a native module that requires build tools. If it fails to compile, the server automatically falls back to pipe mode — interactive sessions still work, just without terminal emulation.
If you want full PTY support:
# macOS:
xcode-select --install
sudo apt-get install -y make python3 build-essential
sudo yum install -y make python3 gcc gcc-c++
Some commands need to be run inside a shell rather than directly:
# Instead of: create_session({ command: "rails console -e staging" })
冒頭だけを表示しています。続きはリポジトリで読めます