在 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 -rf、DROP 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,htop、top 这类持续刷新的程序自动切到 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 tripsession_wait_for用正则等待输出 pattern,比固定超时可靠得多- 四种截断策略:
tail(默认)、head_tail(保首尾)、tail_only(只看末尾)、none(不截断)
v0.4.1 加了自动 TUI 检测,遇到 htop、vim 这类程序自动切 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 润色整理

浙公网安备 33010602011771号