这是仅用于测试和开发目的的实验软件。请勿在生产环境中使用或与敏感数据一起使用。
一种模型上下文协议(MCP)服务器,通过tmux会话提供持久的shell执行。此服务器使AI助手能够在持久shell中执行命令。 这解锁了许多可能性,例如代理编排。..
特性
- 双窗口架构:每个工作区有两个窗口-
exec用于命令执行和ui用于干净的输出显示 - 持久工作区:在tmux会话中执行命令,这些命令在MCP客户端重新启动时持续存在
- 交互式流程支持:处理长时间运行的进程、REPL和交互式命令
- 工作区隔离:用于不同项目或任务的多个独立工作区
- 干净的UI管理:用于执行和面向用户的输出的单独窗口
- 自动会话管理:无缝创建、销毁和监视工作区
安装
🚨 安全警告:此软件允许AI助手在您的系统上执行任意shell命令。仅在隔离的测试环境中安装和使用。切勿在有敏感数据的系统或生产环境中使用。
先决条件
- Node.js 18.0.0或更高版本
- tmux已安装在您的系统上
- Ubuntu/Debian: sudo apt install tmux - macOS: brew install tmux - CentOS/RHEL: sudo yum install tmux
从npm安装
npm install -g tmux-mcp-server从源代码安装
git clone https://github.com/TNTisdial/persistent-shell-mcp.git
cd persistent-shell-mcp
npm install
npm link用法
MCP客户端配置
添加到MCP客户端配置中:
{
"mcpServers": {
"tmux-shell": {
"command": "tmux-mcp-server"
}
}
}可用工具
核心执行工具
execute_command
执行快速完成并返回完整输出的命令。使用 exec 窗户。
execute_command({
command: "ls -la",
workspace_id: "my-project"
})start_process
启动长时间运行或交互式流程。可以针对任一窗口:
exec窗口(默认):用于后台进程ui窗口:用于需要用户可见性的交互式应用程序
start_process({
command: "python3",
workspace_id: "dev",
target_window: "ui" // For interactive apps like vim, python REPL
})get_output
从任一窗口捕获当前终端输出:
ui窗口(默认):清除面向用户的输出exec窗口:包含所有命令的原始shell
get_output({
workspace_id: "dev",
window_name: "ui" // or "exec" for raw output
})send_input
向任一窗口中正在运行的进程发送输入。
send_input({
text: "print('Hello World')",
workspace_id: "dev",
target_window: "ui"
})stop_process
在exec窗口中停止当前正在运行的进程(发送Ctrl+C)。
stop_process({workspace_id: "dev"})工作区管理工具
create_workspace
创建一个具有双窗口的新隔离工作区。
destroy_workspace
销毁工作区及其所有进程。
list_workspaces
列出所有活动工作区。
建筑
双窗设计
每个工作区由两个tmux窗口组成:
exec窗口:用于执行命令的原始shell
- 处理所有命令执行 - 显示完整的shell历史记录和提示 - 用于后台进程
ui窗口:干净的输出显示
- 显示用户交互的干净输出 - 用于交互式应用程序 - 提供更好的用户体验
工作区隔离
- 每个工作区都是一个单独的tmux会话
- 独立的工作目录和环境
- 进程不会干扰工作空间
- 不同项目/任务的清晰分离
常见工作流
快速命令执行
// Execute and get results immediately
execute_command({command: "npm install", workspace_id: "frontend"})
execute_command({command: "git status", workspace_id: "frontend"})交互式开发
// Start Python REPL in UI window
start_process({
command: "python3",
workspace_id: "python-dev",
target_window: "ui"
})
// Send Python commands
send_input({text: "import os", workspace_id: "python-dev", target_window: "ui"})
send_input({text: "print(os.getcwd())", workspace_id: "python-dev", target_window: "ui"})
// Check output
get_output({workspace_id: "python-dev", window_name: "ui"})后台流程管理
// Start server in background
start_process({command: "npm run dev", workspace_id: "server"})
// Check server status
get_output({workspace_id: "server", window_name: "exec"})
// Stop server when done
stop_process({workspace_id: "server"})多项目开发
// Frontend workspace
create_workspace({workspace_id: "frontend"})
execute_command({command: "cd /path/to/frontend", workspace_id: "frontend"})
// Backend workspace
create_workspace({workspace_id: "backend"})
execute_command({command: "cd /path/to/backend", workspace_id: "backend"})
// Database workspace
create_workspace({workspace_id: "database"})
start_process({command: "mysql -u root -p", workspace_id: "database", target_window: "ui"})项目结构
tmux-mcp/
├── src/
│ ├── server.js # Main MCP server and tool definitions
│ ├── tmux-manager.js # Tmux session and window management
│ └── index.js # Entry point
├── bin/
│ └── tmux-mcp-server # Executable script
├── package.json
└── README.md故障排除
未找到Tmux
Error: tmux command not found安装tmux: sudo apt install tmux (Ubuntu/Debian)或 brew install tmux (macOS)
创建工作区失败
Error: Failed to create workspace检查tmux服务器是否正在运行,以及您是否有创建会话的权限
命令未响应
Check workspace status with get_output使用 get_output 随着 window_name: "exec" 查看原始外壳状态
流程受阻
Use stop_process to send Ctrl+C发送中断信号 stop_process 终止挂起进程
许可证
麻省理工学院
