一个强大的模型上下文协议(MCP)服务器,基于 TypeScript 和 node-pty 实现持久终端会话管理。即使客户端断开连接,终端命令也会继续运行,特别适合像 Claude、Cursor 和 Cline 这样的 AI 助手执行长时间运行的任务。
YouTube 视频链接: https://youtu.be/nfLi1IZxhJs
Bilibili 视频链接: https://www.bilibili.com/video/BV14ksPzqEbM/
Windows 配置 MCP 视频教程链接: https://youtu.be/WYEKwTQCAnc
full 完整输出head 仅读取前 N 行tail 仅读取最后 N 行head-tail 同时从开头和结尾读取since 参数仅读取新添加的内容npm install``yarn``pnpm 等命令等待时的噪音输出wait_for_output 工具确保完整输出检索无需安装,直接使用 npx 启动:
npx persistent-terminal-mcp
REST 版本也支持:
npx persistent-terminal-mcp-rest
npm install persistent-terminal-mcp
安装后,可以在代码中引用所有核心类和类型:
import { PersistentTerminalMcpServer } from "persistent-terminal-mcp";
npm install --global persistent-terminal-mcp
persistent-terminal-mcp
适用于需要修改源代码或深入调试的场景:
npm install # 安装依赖
npm run build # 编译 TypeScript → dist/
npm start # 通过 stdio 启动 MCP 服务器
开发阶段可以直接运行 TypeScript 源代码:
npm run dev # MCP 服务器 (tsx)
npm run dev:rest # REST 服务器 (tsx)
启用调试日志(输出到 stderr,不影响 MCP 通信):
MCP_DEBUG=true persistent-terminal-mcp
npm run example:basic # 基础操作:创建 → 写入 → 读取 → 终止
npm run example:smart # 智能读取:head/tail/head-tail 模式演示
npm run example:spinner # Spinner 压缩功能演示
npm run example:webui # Web UI 功能演示
npm run test:tools # 全量验证所有 MCP 工具
npm run test:fixes # 关键修复的回归测试
配置文件位置:~/Library/Application Support/Claude/claude_desktop_config.json
在配置文件中添加以下内容:
{
"mcpServers": {
"persistent-terminal": {
"command": "npx",
"args": ["-y", "persistent-terminal-mcp"],
"env": {
"MAX_BUFFER_SIZE": "10000",
"SESSION_TIMEOUT": "86400000",
"COMPACT_ANIMATIONS": "true",
"ANIMATION_THROTTLE_MS": "100"
}
}
}
}
解释:
-y 参数会自动确认 npx 下载提示npm install -g persistent-terminal-mcp),可以将 command 改为 "persistent-terminal-mcp" 并移除中间的 -y配置文件位置:%APPDATA%\Claude\claude_desktop_config.json
{
"mcpServers": {
"persistent-terminal": {
"command": "cmd",
"args": ["/c", "npx", "-y", "persistent-terminal-mcp"],
"env": {
"MAX_BUFFER_SIZE": "10000",
"SESSION_TIMEOUT": "86400000",
"COMPACT_ANIMATIONS": "true",
"ANIMATION_THROTTLE_MS": "100"
}
}
}
}
解释:
cmd /c 调用 npxargs 改为 ["/c", "persistent-terminal-mcp"]快速添加使用命令行:
claude mcp add persistent-terminal \
--env MAX_BUFFER_SIZE=10000 \
--env SESSION_TIMEOUT=86400000 \
--env COMPACT_ANIMATIONS=true \
--env ANIMATION_THROTTLE_MS=100 \
-- npx -y persistent-terminal-mcp
或编辑配置文件 ~/.claude.json:
{
"mcpServers": {
"persistent-terminal": {
"command": "npx",
"args": ["-y", "persistent-terminal-mcp"],
"env": {
"MAX_BUFFER_SIZE": "10000",
"SESSION_TIMEOUT": "86400000",
"COMPACT_ANIMATIONS": "true",
"ANIMATION_THROTTLE_MS": "1_00"
}
}
}
}
⚠️ Windows 用户请注意
Claude Code 在 Windows 上
claude mcp add命令存在参数解析问题🚫 不建议使用命令行方法
请参阅专门的配置文档:
📖 在 Windows 上配置 persistent-terminal MCP
该文档提供了两种推荐解决方案:
- ✅ 项目级配置(推荐):在项目根目录创建
.mcp.json文件- ✅ 全局配置 使用 Python 脚本修改
~/.claude.json
配置方法类似于 Claude Desktop,请参阅每个客户端的 MCP 配置文档。
在 .codex/config.toml 文件中添加以下配置:
# MCP Server Configuration (TOML 格式)
# 用于配置 persistent-terminal MCP 服务器
[mcp_servers.persistent-terminal]
command = "npx"
args = ["-y", "persistent-terminal-mcp"]
[mcp_servers.persistent-terminal.env]
MAX_BUFFER_SIZE = "10000"
SESSION_TIMEOUT = "86400000"
COMPACT_ANIMATIONS = "true"
ANIMATION_THROTTLE_MS = "100"
在 .codex/config.toml 文件中添加以下配置:
# MCP Server Configuration (TOML 格式)
# 用于配置 persistent-terminal MCP 服务器
[mcp_servers.persistent-terminal]
command = "cmd"
args = ["/c", "npx", "-y", "persistent-terminal-mcp"]
[mcp_servers.persistent-terminal.env]
MAX_BUFFER_SIZE = "10000"
SESSION_TIMEOUT = "86400000"
COMPACT_ANIMATIONS = "true"
ANIMATION_THROTTLE_MS = "100"
解释 Windows 需要通过 cmd /c 调用 npx
| 变量 | 描述 | 默认值 |
|---|---|---|
MAX_BUFFER_SIZE | 缓冲区最大行数 | 10000 |
SESSION_TIMEOUT 会话超时时间(毫秒) | 86400000(24 小时) | |
COMPACT_ANIMATIONS | 开启 Spinner 压缩 | true |
ANIMATION_THROTTLE_MS | 动画节流时间(毫秒) | 100 |
MCP_DEBUG | 开启调试日志 | false |
AUTO_START_REST_SERVER | MCP 启动时自动启动 REST 服务器 | false |
REST_HOST | REST 服务器监听地址 | localhost |
REST_PORT | REST 服务器端口 | 3001 |
AUTO_START_TERMINAL_UI | 启动时自动启动 Web UI | true |
WEB_UI_HOST | Web UI 服务器监听地址 | localhost |
AUTO_OPEN_BROWSER | 是否自动打开浏览器访问 Web UI | false |
WEB_UI_PORT | Web UI 服务器端口 | 3000 |
通过环境变量可以实现自动服务器启动和网络访问配置:
为了使 REST API 和 Web UI 对外网开放,设置以下环境变量:
# 自动启动 REST API 服务器
AUTO_START_REST_SERVER=true
# REST API 监听所有网络接口(允许外部访问)
REST_HOST=0.0.0.0
# 自动启动 Web UI 界面
AUTO_START_TERMINAL_UI=true
# Web UI 监听所有网络接口(允许外部访问)
WEB_UI_HOST=0.0.0.0
# REST API 端口(可选)
REST_PORT=3001
# Web UI 端口(可选)
WEB_UI_PORT=3000
# 是否自动打开浏览器(可选)
AUTO_OPEN_BROWSER=false
设置上述环境变量后,启动 MCP 服务器:
http://0.0.0.0:3001 自动启动http://0.0.0.0:3000 自动启动将环境变量添加到 MCP 客户端配置中:
Claude Desktop 配置:
{
"mcpServers": {
"persistent-terminal": {
"command": "npx",
"args": ["-y", "persistent-terminal-mcp"],
"env": {
"AUTO_START_REST_SERVER": "true",
"REST_HOST": "0.0.0.0",
"AUTO_START_TERMINAL_UI": "true",
"WEB_UI_HOST": "0.0.0.0",
"WEB_UI_PORT": "3000",
"AUTO_OPEN_BROWSER": "false",
"MAX_BUFFER_SIZE": "10000",
"SESSION_TIMEOUT": "86400000"
}
}
}
}
Claude Code 配置:
claude mcp add persistent-terminal \
--env AUTO_START_REST_SERVER=true \
--env REST_HOST=0.0.0.0 \
--env AUTO_START_TERMINAL_UI=true \
--env WEB_UI_HOST=0.0.0.0 \
--env WEB_UI_PORT=3000 \
--env AUTO_OPEN_BROWSER=false \
-- npx -y persistent-terminal-mcp
import {
PersistentTerminalMcpServer,
TerminalManager,
RestApiServer,
} from "persistent-terminal-mcp";
const manager = new TerminalManager();
const rest = new RestApiServer(manager);
await rest.start(3001);
const mcpServer = new PersistentTerminalMcpServer();
const server = mcpServer.getServer();
await server.connect(/* 自定义 transport */);
所有核心类和类型都在包的根入口处可访问。详情请参阅 src/index.ts。
| 工具 | 功能 | 主要参数 |
|---|---|---|
create_terminal 创建持久终端会话 shell, cwd, env, cols, rows | ||
create_terminal_basic | 简化版创建门户 | shell, cwd |
write_terminal 写入命令到终端 terminalId, input, appendNewline | ||
read_terminal 读取缓冲输出 terminalId, mode, since, stripSpinner | ||
wait_for_output 等待输出稳定 terminalId, timeout, stableTime | ||
get_terminal_stats 查看统计信息 terminalId | ||
list_terminals | 列出所有活跃终端 | None |
kill_terminal | 终止会话 | terminalId, signal |
open_terminal_ui 打开 Web 管理界面 port, autoOpen | ||
fix_bug_with_codex 🆕 | 使用 Codex 自动修复错误 | description, cwd, timeout |
create_terminal - 创建终端创建一个新的持久终端会话。
参数:
shell(可选):Shell 类型,例如 /bin/bash``/bin/zshcwd(可选):工作目录env(可选):环境变量对象cols(可选):终端列数,默认 80rows(可选):终端行数,默认 24返回:
terminalId 终端 IDstatus 状态pid 进程 IDshell Shell 类型cwd 工作目录write_terminal - 写入命令向终端发送命令或输入。
参数:
terminalId 终端 IDinput 要发送的内容appendNewline(可选):是否自动添加换行符,默认 true提示 默认情况下会自动添加换行符来执行命令。要发送原始控制字符(例如箭头键),请相应地配置 appendNewline: false。
read_terminal - 读取输出读取终端的缓冲输出,支持各种智能截断模式。
参数:
terminalId 终端 IDmode(可选):读取模式
full 完整输出(默认)head 仅读取开头tail 仅从末尾读取head-tail 同时从开头和末尾读取since(可选):从第 N 行开始读取(增量读取)maxLines(可选):最大行数,默认 1000headLines(可选):头部模式下的行数,默认 50tailLines(可选):尾部模式下的行数,默认 50stripSpinner(可选):是否压缩 Spinner 动画返回:
output 输出内容totalLines