mcpField
P
pty-mcp

pty-mcp

本地服务
github.com/raychao-oao云与基础设施201 周前更新

关于 pty-mcp

pty-mcp 是为 AI Agent 提供交互式终端会话的 MCP 服务,支持本地 Shell、SSH 主机、串口设备和持久远程任务。它面向管理服务器与设备的系统管理员和网络工程师。

主要功能

  1. 01交互式本地 Shell 会话
  2. 02SSH 和串口连接
  3. 03持久远程会话
  4. 04按输出模式等待
  5. 05发送终端控制键
  6. 06可选的脱敏审计日志

适用场景

  1. 01重启服务器并等待其恢复响应
  2. 02通过串口在路由器上运行命令
  3. 03监视日志中的匹配事件
  4. 04从长时间运行的远程任务断开

MCP 相关

pty-mcp 提供创建和管理本地、SSH、串口及持久终端会话的工具,并可发送输入和控制键、读取输出及按模式等待。

配置

本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。

暂未收录安装方式

我们还没有获取到这个服务的安装包或远程地址,请按项目 README 中的说明安装。

代码仓库
安装包
mcpbpty-mcp-darwin-arm64
mcpbpty-mcp-darwin-amd64
mcpbpty-mcp-linux-amd64
mcpbpty-mcp-linux-arm64

工具

还没有获取到工具列表

本地服务需要在你的电脑上运行后才能读取工具,维护者暂未提供工具列表。

详细介绍

pty-mcp

pty-mcp MCP 服务

一个 MCP(Model Context Protocol)服务,为 AI Agent 提供交互式终端会话——本地 Shell、SSH、串行端口,以及断开连接后仍能保持的持久远程会话。

专为系统管理员和网络工程师打造,帮助 AI 管理真实的服务器和设备,而不仅仅是生成代码。

AI Agent 通过 pty-mcp 与 Telehack BBS 交互

为什么需要

AI Agent 会在非交互式 Shell 中运行命令。它们无法:

  • SSH 登录服务器并与正在运行的进程交互
  • 通过串行控制台连接路由器或交换机
  • 监控日志,并在特定事件发生时作出响应
  • 在多条命令之间保留会话状态
  • 等待服务器重启,并检测其恢复上线的时间

pty-mcp 通过 MCP 提供真实的 PTY 会话,解决了所有这些问题。

没有 pty-mcp,AI Agent 只能反复执行 sleep 30 && check_status 循环——等待事件发生时白白消耗 CPU 周期和 API 调用。有了 wait_for,Agent 会在服务端阻塞,直到事件发生。减少轮询、降低能耗,也更有利于北极熊。🐻‍❄️

使用场景

服务器管理

# Reboot a server and wait until it's back online
create_local_session("ping myserver")
read_output(wait_for: "bytes from", timeout: 300)
→ blocks until server responds after reboot (~80s, one tool call)

网络设备管理

# Connect to a router via serial console
create_serial_session(port: "/dev/ttyUSB0", baud: 9600)
send_input("show interfaces status")
read_output(wait_for: "\\$")

日志监控和告警

# Watch logs and act when something happens
create_ssh_session(host: "prod", user: "admin")
send_input("tail -f /var/log/app.log")
read_output(wait_for: "ERROR|CRITICAL", timeout: 3600)
→ returns the error line + context when it appears

断开连接后仍能继续运行的长时间任务

create_ssh_session(host: "server", user: "admin", persistent: true)
send_input("apt upgrade -y")
detach_session()          → close Claude Code, task continues
# Reconnect later to check result

功能

功能描述
本地终端在本地机器上运行交互式 bash/python/node 会话
SSH 会话使用密钥/密码身份验证连接远程主机,支持 SSH 配置
串行端口通过串行端口连接设备(IoT、嵌入式设备、网络设备)
持久会话通过 ai-tmux 守护进程,让会话在 SSH 断开后继续运行
附加/分离从正在运行的会话中分离,稍后重新连接
控制键发送 ctrl+c、ctrl+d、方向键、tab、escape
稳定检测返回前等待输出稳定(智能超时)
模式匹配wait_for 会阻塞,直到输出中出现正则表达式模式(v0.2.0)
有界内存环形缓冲区可防止长时间运行的会话耗尽内存(OOM)(v0.2.0)
调整终端大小调整本地、SSH、串行及持久远程会话的 PTY 窗口大小(v0.10.0)
审计日志可选的自愿操作日志——将 send_input 命令记录到收集器,以便审查和追溯(v0.8.0)
审计脱敏写入审计日志前会自动清除凭据、身份验证标头和 PEM 密钥(v0.10.0)

架构

┌─────────────────────────────────────────────────────┐
│ AI Agent (Claude Code, etc.)                        │
│                                                     │
│  MCP Tools: create_local_session, send_input,       │
│             send_control, read_output, close_session │
└──────────────────────┬──────────────────────────────┘
                       │ JSON-RPC stdio
┌──────────────────────┴──────────────────────────────┐
│ pty-mcp (MCP Server)                                │
│                                                     │
│  Session Manager                                    │
│  ├── LocalSession  (local PTY via creack/pty)       │
│  ├── SSHSession    (remote PTY via x/crypto/ssh)    │
│  ├── SerialSession (serial port via go.bug.st)      │
│  └── RemoteSession (persistent via ai-tmux)         │
└─────────────────────────────────────────────────────┘

Persistent mode (ai-tmux):

  pty-mcp ──SSH──▶ ai-tmux client ──Unix socket──▶ ai-tmux server (daemon)
                                                     ├── PTY: bash
                                                     ├── PTY: ssh admin@router
                                                     └── PTY: tail -f /var/log/syslog

快速开始

Claude Code 插件(推荐)

自动安装二进制文件并注册 MCP 服务:

claude plugin marketplace add raychao-oao/pty-mcp
claude plugin install pty-mcp@pty-mcp

重启 Claude Code——会话启动时会自动下载二进制文件,然后再重启一次以启用它。无需手动执行 claude mcp add。

更新:

claude plugin marketplace update pty-mcp
claude plugin update pty-mcp@pty-mcp

重启 Claude Code——会话启动时会自动下载新版二进制文件,然后再重启一次以应用更新。

手动安装

一行命令完成安装并注册(macOS / Linux / WSL2):

curl -fsSL https://raw.githubusercontent.com/raychao-oao/pty-mcp/main/install.sh | sh
claude mcp add pty-mcp -- /usr/local/bin/pty-mcp

重启 Claude Code 后即可使用这些工具。

其他安装方式

从 GitHub Releases 下载:

前往 Releases,下载适用于你平台的二进制文件,并赋予其可执行权限:

平台二进制文件
macOS(Apple Silicon)pty-mcp-darwin-arm64
macOS(Intel)pty-mcp-darwin-amd64
Linux(x86_64)/ WSL2pty-mcp-linux-amd64
Linux(ARM64)pty-mcp-linux-arm64
chmod +x pty-mcp-*
sudo mv pty-mcp-* /usr/local/bin/pty-mcp
claude mcp add pty-mcp -- /usr/local/bin/pty-mcp

从源代码构建(需要 Go 1.25+):

go install github.com/raychao-oao/pty-mcp@latest
claude mcp add pty-mcp -- $(go env GOPATH)/bin/pty-mcp
WSL2 说明

pty-mcp 在 WSL2 中开箱即用。请使用 Linux 二进制文件:

# Inside WSL2
curl -fsSL https://raw.githubusercontent.com/raychao-oao/pty-mcp/main/install.sh | sh
claude mcp add pty-mcp -- /usr/local/bin/pty-mcp
可选:在远程服务器上安装 ai-tmux

如需在 SSH 断开后仍保留持久会话,请在远程服务器上安装 ai-tmux:

# Download for your server's architecture
curl -fsSL https://raw.githubusercontent.com/raychao-oao/pty-mcp/main/install.sh | sh
# Or just copy the binary:
scp /usr/local/bin/ai-tmux your-server:/usr/local/bin/ai-tmux
使用示例

注册后,AI Agent 可以使用这些 MCP 工具:

本地交互式 shell:

create_local_session()                    → {session_id, type: "local"}
send_input(session_id, "cd /tmp && ls")   → {output: "...", is_complete: true}
send_input(session_id, "python3")         → start Python REPL
send_input(session_id, "print('hello')")  → {output: "hello\n>>>"}
send_control(session_id, "ctrl+d")        → exit Python
close_session(session_id)

通过 SSH 连接到远程服务:

create_ssh_session(host: "myserver", user: "admin")
send_input(session_id, "top")
send_control(session_id, "ctrl+c")        → stop top

等待匹配模式(v0.2.0):

create_local_session("ping myserver")
read_output(session_id, wait_for: "bytes from", timeout: 300)
→ blocks until server responds or 5 min timeout

send_input(session_id, "docker-compose up")
read_output(session_id, wait_for: "ready|error", timeout: 60, context_lines: 3)
→ returns matched line + 3 lines of context

发送机密信息/密码(v0.3.0):

# AI detects a password prompt, calls send_secret instead of handling the password itself
create_ssh_session(host: "router", user: "admin")
read_output(session_id, wait_for: "Password:")   → session is waiting for input

send_secret(session_id, prompt: "Router admin password:")
→ native GUI dialog appears on the operator's screen (macOS: system dialog,
   WSL2: Windows Get-Credential, Linux: zenity/kdialog)
→ operator types password — it is sent directly to the PTY session
→ AI only sees: {success: true, length: 12}
→ password never appears in AI context or logs

持久会话(SSH 断开后仍会保留):

create_ssh_session(host: "server", user: "admin", persistent: true)
send_input(session_id, "make build")      → start long build
detach_session(session_id)                → disconnect, build continues

# Later (even after restart):
list_remote_sessions(host: "server", user: "admin")  → see running sessions
create_ssh_session(host: "server", user: "admin", session_id: "abc123")  → reattach
send_input(session_id, "echo $?")         → check build result

MCP 工具

工具描述
create_local_session启动本地交互式终端(bash、python3、node 等)
create_ssh_session通过 SSH 连接到远程主机(支持 SSH 配置别名)
create_serial_session连接到串行端口设备
send_input发送命令并等待输出稳定
read_output读取输出,可选择等待匹配模式(wait_for、timeout、context_lines、tail_lines)
send_control发送控制键(ctrl+c、ctrl+d、方向键、tab 等)
send_secret通过 GUI 对话框提示人工操作员输入机密信息;将其发送到 PTY 会话,不会暴露在 AI 上下文或日志中 ¹
list_sessions列出所有活动会话
close_session关闭会话(终止远程 PTY)
detach_session断开连接,但保持远程 PTY 运行
resize_session调整任意会话类型的终端窗口大小(行数/列数)
list_remote_sessions列出远程主机上的持久会话

¹ send_secret 平台支持:macOS 使用原生密码对话框(osascript)。WSL2 使用 powershell.exe Get-Credential(Windows GUI 对话框)。配备显示服务器的 Linux 使用 zenity 或 kdialog。无头 Linux 则回退到 /dev/tty。在 macOS/Linux 上,如果操作员在 60 秒内没有响应,对话框会关闭,调用会返回超时错误,而不会再打开其他对话框或再次等待;取消调用(例如,在 Claude Code 中按 ESC)也会以相同方式立即关闭对话框。WSL2 是个例外:其对话框没有超时,也绝不会被强制关闭,包括取消时也是如此——研究发现,终止一个由 WSL 互操作机制启动、且拥有已打开 Windows GUI 窗口的进程,会导致宿主终端冻结(无法响应输入、滚动和选择),直到操作员关闭该终端,而且除此之外别无恢复办法。对话框只会一直等待,直到操作员作出答复或自行点击 Cancel,此时会正常退出。

审计日志

pty-mcp 提供可选的审计日志功能,可将每条 send_input 命令记录到中央收集器中。这让团队能够审查并追踪 AI Agent 在会话期间执行的操作。

重要提示: 这是一种自愿启用、自行报告的操作日志。它依赖操作员主动选择启用并运行收集器。由于 pty-mcp 运行在操作员自己的机器上,没有技术机制可以强制记录日志——不遵守要求的操作员只需在未启用审计的情况下运行 pty-mcp 即可。此功能为需要追踪记录的团队提供支持,但在需要满足审计合规要求的环境中,它不能替代系统级审计工具(例如 auditd、syslog 转发、SSH 会话记录)。

记录内容
  • 时间戳、操作员身份、会话 ID、会话类型(local/ssh/serial)、目标主机
  • 通过 send_input 发送的确切输入(包括类似菜单选择的 raw=true 输入)
  • 每条命令之后的输出片段(前 2 KB)
  • 用于关联命令及其输出的 cmd_id

send_secret 绝不会被记录——通过 GUI 对话框输入的机密信息不会出现在审计日志中。

写入前会自动对命令和输出片段进行脱敏。以下模式会被替换为 [REDACTED] 或 [PRIVATE KEY REDACTED]:

  • 键值凭据:password=、passwd:、token=、api_key=、access_key=、auth_token=、secret=
  • HTTP Authorization 标头:Authorization: Bearer …、Authorization: Basic …、Authorization: Token …
  • PEM 私钥块:-----BEGIN RSA PRIVATE KEY----- / -----BEGIN OPENSSH PRIVATE KEY-----
设置

每位操作员运行一次,以创建配置并生成令牌:

pty-mcp audit init

这会创建 ~/.config/pty-mcp/config(chmod 600),其中包含随机生成的令牌,并打印该令牌,供你分享给采集器管理员。

采集器管理员启动服务(使用 init 输出中的令牌):

PTY_MCP_AUDIT_TOKEN=<token-from-init> \
  pty-mcp audit serve --port 9099 --log /var/log/pty-mcp-audit.jsonl

在配置中设置采集器 URL 后,启用审计:

# Edit config and set: audit-url=http://your-collector:9099
pty-mcp audit enable
# Restart Claude Code to apply

如需暂时停止记录但保留配置:

pty-mcp audit disable

没有配置文件的操作员不受影响——审计默认关闭。

审计模式
模式行为
best-effort(默认)无论日志是否写入,命令都会执行;条目会排队并在后台重试
strict如果无法发送审计条目,则拒绝 send_input;适用于将日志记录作为团队政策要求的情况
查看日志

日志以 JSONL 格式存储(每行一个 JSON 对象),可使用标准工具读取:

# All commands by operator ray
grep '"user":"ray"' /var/log/pty-mcp-audit.jsonl | jq .

# Commands sent to a specific host
jq 'select(.target == "root@prod01")' /var/log/pty-mcp-audit.jsonl

ai-tmux:持久终端守护进程

ai-tmux 是一个轻量级守护进程,运行在远程服务上,可在 SSH 断开连接后保持 PTY 会话运行。可以把它看作是为 AI Agent 设计的 tmux。

在远程服务上安装
# Cross-compile for Linux
GOOS=linux GOARCH=amd64 go build -o ai-tmux-linux ./cmd/ai-tmux/

# Copy to server
scp ai-tmux-linux server:~/ai-tmux
ssh server "chmod +x ~/ai-tmux && sudo mv ~/ai-tmux /usr/local/bin/ai-tmux"
工作原理
  • ai-tmux server — 守护进程模式,通过 Unix 套接字监听并管理 PTY 会话
  • ai-tmux client — 桥接模式,通过标准输入/输出转发 JSON 协议(pty-mcp 通过 SSH 使用)
  • ai-tmux list — 列出活动会话

当 pty-mcp 使用 persistent: true 连接时,守护进程会自动启动。会话在闲置 30 分钟后会被清理。

pty-mcp 会在打开会话前检查远程主机上的 ai-tmux --version,如果缺少该二进制文件或版本低于最低要求,则会返回明确错误,而不是晦涩的连接错误。

SSH 配置支持

pty-mcp 会读取 ~/.ssh/config 以解析主机别名:

# ~/.ssh/config
Host myserver
    HostName 192.168.1.100
    User admin
    Port 2222
    IdentityFile ~/.ssh/id_ed25519
create_ssh_session(host: "myserver", user: "admin")
# Automatically resolves hostname, port, and identity file

要求

  • Go 1.25+
  • 对于串行连接:适当的设备权限
  • 对于持久会话:远程服务上的 ai-tmux 二进制文件

更新日志

版本历史请参阅 CHANGELOG.md。

许可证

MIT

评论

支持 Markdown

第一次接触 MCP?

从协议是什么,到在客户端里装上第一个服务,这几条回答覆盖了大多数入门问题。

一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。