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
这三项永远不会合并成一个分数:意见、测量和人气是不同的东西。
我们还没有为它写通俗的介绍。下面是我们从注册中心读取到的事实。
选择你使用的 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个月前进入注册中心。
支持 MCP 的应用,例如 Claude Desktop、Claude Code、Cursor 和 VS Code。你的电脑上还需要有 Node.js。
同一分类中有:GitHub, Desktop Commander, Cloudflare MCP
同一分类中其他作者的服务器,按星标数排序。
如何看卡片:★ GitHub 星标i三大支柱:评价 · 检查 · 使用情况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" })
只显示了开头部分;其余内容请在仓库中阅读