在 Claude 中实现交互式终端(SSH):6 个 MCP 项目完整对比

想在 Claude 里直接 SSH 进服务器跑命令,却发现 Claude 的内置工具根本不支持交互式终端。没有 PTY、没有持久 session,npm install 跑到一半就断,密码提示出来也没法输入。

GitHub 上有 6 个 MCP 项目专门解决这个痛点,我逐一实测了每个项目,以下是完整对比。


六个项目快速概览

项目 语言 Stars 安装方式 状态
PiloTY Python 17 uv / pipx ⚠️ WIP,开发中
mcp-interactive-terminal TypeScript 2 npx 一行 ✅ 可用
interactive-shell-mcp JavaScript 4 需本地 build ✅ 可用
interactive-terminal-mcp Python 5 uvx 一行 ✅ 可用
smart-terminal-mcp JavaScript 5 npx @stable ✅ 稳定发布
terminal-mcp Python 3 uvx 一行 ✅ v0.4.6,最活跃

功能对比矩阵

功能 PiloTY mcp-interactive-terminal interactive-shell-mcp interactive-terminal-mcp smart-terminal-mcp terminal-mcp
真实 PTY ✅ pexpect ✅ node-pty ✅ node-pty 基础进程 ✅ node-pty ✅ pexpect
SSH 支持 ✅ 公钥认证 ✅ 任意命令 ✅ 任意命令 ✅ 任意命令 ✅ 任意命令 ✅ 含密码认证
SSH 密码认证 ❌ 不支持 可发送 可发送 可发送 可发送 ✅ password 专用参数
输出截断控制 ❌ 无 ✅ max_output_chars ✅ maxBytes + 元数据 ❌ 无 ✅ maxLines + 分页 ✅ 4 种截断策略
长命令(npm install) ❌ 无超时控制 ✅ timeout_ms 参数 maxBytes 兜底 ✅ timeout 参数 ✅ timeout + 分页 ✅ wait_for + 截断
等待 pattern prompt 自动检测 ✅ 正则匹配 ✅ terminal_wait ✅ session_wait_for
Ctrl+C / 控制字符 基础支持 ✅ send_control ❌ 无文档 ❌ 无专用接口 ✅ terminal_send_key ✅ control_char 参数
安装难度 uv/pipx ✅ npx 一行 需 build ✅ uvx 一行 ✅ npx @stable ✅ uvx 一行
Windows 支持 pipe fallback ❌ 未知 ✅ 重点支持 ❌ 仅 Unix/Mac
危险命令保护 ✅ 7 层安全机制 ❌ 无 shell=false ✅ 可配置白名单
TUI 应用支持 基础 ✅ xterm-headless ✅ snapshot 模式 ❌ 无 ✅ 完整支持 ✅ auto/diff 模式
会话历史记录 ✅ ~/.piloty/ ❌ 无 ❌ 无 ✅ MCP 资源 ✅ terminal_get_history ✅ 内置

✅ 完整支持   部分支持   ❌ 不支持


各项目详细分析

① PiloTY

定位最明确——专为 SSH 场景设计,有 Handler 架构,支持后台进程监控,所有会话自动写日志到 ~/.piloty/

优势:SSH 场景文档最完整,支持 vim、tmux 等交互程序,后台进程管理有独立 API。

致命问题:项目标注 WIP,密码认证 SSH 尚未完成。无输出截断机制,npm install 这类长输出会原样返回,极易超出 MCP 响应大小限制导致连接中断。

安装:

uv tool install git+https://github.com/yiwenlu66/PiloTY.git

Claude Desktop 配置:

{
  "mcpServers": {
    "piloty": {
      "command": "piloty"
    }
  }
}

② mcp-interactive-terminal

安全性最强的实现,7 层防护,危险命令(rm -rfDROP TABLE)需要二次确认才能执行。底层用 xterm-headless,AI 看到的输出和人类在终端里看到的完全一致。

优势:npx 零配置,4 层命令完成检测算法(进程退出 → prompt 检测 → 输出静默 → 超时),安全机制完善。

主要坑:node-pty 是原生模块,macOS 需要 Xcode,Linux 需要 build-essential,编译失败自动降级 pipe 模式,TUI 应用输出会乱码。另外 create_session 用 exec 语义,带参数命令(rails console -e staging)需要先创建 bash session 再执行。

安装:

claude mcp add terminal -- npx -y mcp-interactive-terminal

Claude Desktop 配置:

{
  "mcpServers": {
    "terminal": {
      "command": "npx",
      "args": ["-y", "mcp-interactive-terminal"],
      "env": {
        "MCP_TERMINAL_MAX_OUTPUT": "50000",
        "MCP_TERMINAL_DEFAULT_TIMEOUT": "30000"
      }
    }
  }
}

③ interactive-shell-mcp

streaming / snapshot 双模式设计很聪明:普通命令用 streaming,htoptop 这类持续刷新的程序自动切到 snapshot,返回当前屏幕状态而不是原始字节流。

优势:返回值带 truncated: true 元数据,上层知道输出被截断了;snapshot 模式对 TUI 监控很实用。

主要坑:node_modules 被提交到仓库,没有 npm 发布,必须本地 build。无安全机制,无版本 tag,稳定性未知。

安装:

git clone https://github.com/lightos/interactive-shell-mcp
cd interactive-shell-mcp
npm install && npm run build

配置路径写死为本地路径:

{
  "mcpServers": {
    "Interactive Shell MCP": {
      "command": "node",
      "args": ["/your/path/to/interactive-shell-mcp/dist/server.js"]
    }
  }
}

④ interactive-terminal-mcp

2025 年 12 月发布,Python 实现,核心卖点是状态化会话(Stateful Sessions)——环境变量、工作目录和进程状态在命令间保持持久化,SSH 远程会话不需要每次重新连接。

优势:4 个工具接口语义清晰(spawn_process / send_command / read_buffer / kill_session),send_command 支持正则匹配输出模式,支持通过 MCP 资源访问完整会话历史(cli://{session_id}/history),uvx 零安装。

主要坑:无输出截断机制,npm install 这类长输出会全量返回。无 TUI 应用支持。没有危险命令保护。文档较少,Windows 兼容性未验证。SSH 密码认证需要手动 send_command 发送,无专用参数。

安装:

uvx interactive-terminal-mcp

Claude Code 配置:

claude mcp add --transport stdio interactive-terminal-mcp -- uvx interactive-terminal-mcp

手动配置:

{
  "mcpServers": {
    "interactive-terminal": {
      "command": "uvx",
      "args": ["interactive-terminal-mcp"]
    }
  }
}

使用示例:

# 1. 启动 SSH 会话
spawn_process  command=["ssh", "user@your-server.com"]

# 2. 等待密码提示并发送密码
send_command  session_id="xxx"  cmd="your_password\n"  wait_for="Password:"  timeout=5

# 3. 执行命令并等待输出 pattern
send_command  session_id="xxx"  cmd="cd /var/www && ls -la\n"  wait_for="total"  timeout=10

# 4. 查看历史记录
read cli://xxx/history

# 5. 关闭会话
kill_session  session_id="xxx"

⑤ smart-terminal-mcp

工具集最丰富:terminal_wait(等待 pattern)、terminal_retry(自动重试)、terminal_diff(两次命令输出对比)、terminal_run_paged(分页读取大输出)、terminal_get_history(查历史不重新执行)。Windows 支持是这几个里最认真做的。

优势:@stable 版本 tag,输出分页和 pattern 等待组合起来处理长命令最稳。

主要坑:progress notifications 依赖 MCP client 传 progressToken,Claude Desktop 不支持,实际看不到进度。terminal_exec 的 head+tail 截断策略在 npm install 中间有错误信息时会丢失,建议改用 tail_only

安装:

claude mcp add smart-terminal -- npx -y smart-terminal-mcp@stable

npm install 最佳实践:

terminal_start()
terminal_write({ data: "npm install\r" })
terminal_wait({ pattern: "added \\d+ packages|npm error", timeout: 120000, returnMode: "match-only" })

match-only 模式只确认命令是否结束,不把几百行安装日志塞进上下文。


⑥ terminal-mcp(推荐)

目前维护最活跃(v0.4.6,2026 年 3 月),Python 实现无原生编译依赖,uvx 零安装。四个核心优势:

  • password 参数专门处理密码认证 SSH,不走普通输入,不记日志
  • session_interact 把发送和读取合成一次 MCP 调用,减少一半 round trip
  • session_wait_for 用正则等待输出 pattern,比固定超时可靠得多
  • 四种截断策略:tail(默认)、head_tail(保首尾)、tail_only(只看末尾)、none(不截断)

v0.4.1 加了自动 TUI 检测,遇到 htopvim 这类程序自动切 snapshot 模式,diff 模式只返回变化的行。

安装:

# 无需安装,直接运行
uvx terminal-mcp

# 或安装到本地
pip install terminal-mcp

Claude Desktop 配置:

{
  "mcpServers": {
    "terminal": {
      "command": "uvx",
      "args": ["terminal-mcp"],
      "env": {
        "TERMINAL_MCP_TRUNCATION_MODE": "head_tail",
        "TERMINAL_MCP_MAX_OUTPUT_BYTES": "200000",
        "TERMINAL_MCP_IDLE_TIMEOUT": "3600"
      }
    }
  }
}

SSH + 长命令完整示例:

# 1. 创建 SSH 会话(密码认证)
session_create  command="ssh user@your-server.com"  label="prod"

# 2. 等待密码提示
session_read    session_id="xxx"  timeout=5.0

# 3. 输入密码(不记日志)
session_send    session_id="xxx"  password="your_password"

# 4. 等待 shell 就绪
session_wait_for  session_id="xxx"  pattern="\\$\\s*$"  timeout=10.0

# 5. 执行 npm install,等到完成再返回
session_interact  session_id="xxx"  input="npm install"  wait_for="added \\d+ packages|npm error"  timeout=120.0

# 6. 收工
session_close   session_id="xxx"

已知 Bug 汇总

项目 严重度 问题描述
PiloTY 无输出截断,npm install 等长输出直接返回全量,超过 MCP 响应限制后连接中断
PiloTY WIP 状态,密码认证 SSH 尚未支持,实际 SSH 可用性存疑
mcp-interactive-terminal node-pty 原生编译失败时降级 pipe 模式,TUI 输出乱码,无告警
mcp-interactive-terminal create_session 用 exec 语义,带参数命令需先启动 bash shell 再执行
interactive-shell-mcp node_modules 入库,必须本地 build,无版本发布,稳定性不明
interactive-terminal-mcp 无输出截断机制,npm install 等长输出全量返回,有连接中断风险
interactive-terminal-mcp 无 TUI 应用支持,无危险命令保护,文档较少
smart-terminal-mcp head+tail 截断丢失中间错误信息,npm 构建日志建议改用 tail_only 模式
smart-terminal-mcp progress notifications 依赖 progressToken,Claude Desktop 不支持
terminal-mcp stream 模式靠"静默 2 秒"判断命令结束,间歇输出命令可能提前返回(用 session_wait_for 替代)
terminal-mcp v0.4.3 前 session_interact 的 wait_for 会误匹配命令回显,旧版本需升级

选哪个

Linux/Mac + SSH 场景:用 terminal-mcp。uvx 零安装,密码认证完善,session_wait_for 处理长命令最可靠,截断策略最灵活。

Windows 用户:用 smart-terminal-mcp。六个里唯一认真做 Windows 支持的,npx @stable 安装,分页 API 对大输出处理最细腻。

安全要求高:用 mcp-interactive-terminal。危险命令两步确认,7 层防护,只读工具可以单独放行,不影响业务操作需要人工批准。

需要会话历史记录:选 interactive-terminal-mcp 或 terminal-mcp。前者通过 MCP 资源暴露历史,后者内置会话管理。

避开 PiloTY,至少等它去掉 WIP 标记、补上输出截断和密码认证再用。


* 本文由 AI 润色整理

posted @ 2026-04-07 13:01  鹄鹄  阅读(1223)  评论(0)    收藏  举报