t-pane MCP服务器
MCP(模型上下文协议)服务器,使Claude能够在tmux窗格中执行命令,在Claude和用户之间提供共享的终端体验。
特性
- 目录感知窗格管理:为每个目录/项目创建单独的窗格
- 命令执行:使用捕获的输出在tmux窗格中运行命令
- 智能输出捕获:使用唯一标记来精确捕获命令输出,而不管缓冲区大小如何
- 多会话支持:每个Claude实例都会根据工作目录获得自己的窗格
- 会话保持:命令在tmux中保持可见,以便用户交互
- 交互式提示检测:自动检测命令何时需要用户输入(密码、确认等)
- 目录特定日志记录:命令记录到
.t-pane/logs/在当前目录中 - 后台任务:在后台窗格中启动Claude实例以执行研究/分析任务
安装
cd /Users/rumen.d/github/mcp-servers/t-pane
npm install
npm run build配置
添加到您的Claude配置文件(~/Library/Application Support/Claude/config.json):
{
"mcpServers": {
"t-pane": {
"command": "node",
"args": ["/Users/rumen.d/github/mcp-servers/t-pane/dist/index.js"]
}
}
}用法
配置后,Claude可以使用以下工具:
1.执行命令
在tmux窗格中执行命令并捕获输出。
execute_command({
command: "ls -la",
pane: "claude-terminal", // optional, defaults to "claude-terminal"
captureOutput: true // optional, defaults to true
})2.创建窗格
使用特定名称创建新的tmux窗格。
create_pane({
name: "my-pane", // optional, defaults to "claude-terminal"
split: "horizontal" // optional: "horizontal" or "vertical"
})3.捕获输出
从tmux窗格捕获最近的输出。
capture_output({
pane: "claude-terminal", // optional
lines: 100 // optional, number of lines to capture
})4.小组成员名单
列出所有可用的tmux窗格。
list_panes()5.发送密钥
将文本发送到tmux窗格而不执行它(对于预填充命令很有用)。
send_keys({
text: "git push origin main",
pane: "claude-terminal", // optional, defaults to directory-specific pane
enter: false // optional, set to true to also send Enter
})6.启动后台任务
创建一个背景窗格,用于运行具有特定研究/分析任务的Claude。
launch_background_task({
task: "Research TypeScript 5.x features and create a summary",
outputFile: "typescript-features.md", // saved to .t-pane/tasks/
timeout: 300000 // optional, default 5 minutes
})7.检查后台任务
检查所有后台任务的状态。
check_background_tasks()运作原理
- 命令执行:当Claude执行命令时,它会用唯一的标记进行包装:
echo '===CMD_${commandId}_START==='; ; echo '===CMD_${commandId}_END==='- 输出捕获:服务器:
- 在tmux缓冲区中查找START标记 - 计算从末尾开始要捕获的行数 - 仅提取标记之间的输出 - 将干净的输出返回给Claude
- 交互式提示检测:当命令需要用户输入时:
- 检测常见的提示模式(密码、用户名、是/否等) - 返回一个特殊响应,提醒Claude需要用户交互 - Claude将通知您切换到tmux窗格并提供输入
- 命令记录:所有命令和输出都记录到:
- 主要位置: .t-pane/logs/ 在当前工作目录中 - 回退位置: ~/.t-pane/logs/{directory-hash}/ 如果本地目录不可写 - 格式:JSON行(每行一个JSON对象) - 包括:时间戳、命令、输出(如果>2KB则截断)、退出代码、持续时间、目录 - 禁用: export T_PANE_DISABLE_LOGGING=true
- 效率:这种方法通过以下方式有效地处理任何输出大小(甚至100k+行)的命令:
- 使用唯一ID避免冲突 - 从缓冲区末端捕获 - 仅提取相关部分
示例会话
当Claude使用此服务器时,您将看到:
- 具有目录特定命名的新tmux窗格(例如。,
claude-t-pane对于t-pane目录) - 每个目录都有自己的专用窗格
- 在不同目录中工作的多个Claude实例不会干扰
- Claude执行的所有命令都显示在相应的窗格中
- 您可以与同一终端进行交互
- 命令历史记录按目录保留
发展
# Watch mode for development
npm run watch
# Build for production
npm run build需求
- tmux已安装并在PATH中可用
- 必须在tmux会话中运行才能获得完整功能
- Node.js 18+
故障排除
- “未安装tmux”:使用包管理器安装tmux
- “不在tmux会话中运行”:首先使用以下命令启动tmux
tmux new-session - 命令未出现:检查窗格名称是否与Claude正在使用的名称匹配
目录感知会话
t-pane服务器为每个目录创建单独的tmux窗格:
- 窗格名称基于最后2个目录组件(例如。,
claude-mcp-servers-t-pane) - 在不同目录中工作的每个Claude实例都有自己的窗格
- 日志存储在每个项目目录的本地
- 多个Claude实例可以同时工作而不受干扰
互动提示
当命令需要用户输入时(如 git push 请求凭据),服务器将:
- 检测交互提示
- 在tmux窗格中预填充命令(不按Enter键)
- 向Claude返回一条消息,表示需要用户交互
- 你会看到这样的消息:“⚠️ tmux窗格中需要用户交互”
- 切换到tmux窗格,其中命令已预先填充并准备好供您查看/执行
命令记录
默认情况下,所有命令都会记录到 .t-pane/logs/ 在当前目录中:
{"timestamp":"2024-06-27T10:30:00Z","command":"git status","output":"...","exitCode":0,"duration":150,"directory":"/path/to/project"}要禁用日志记录,请执行以下操作:
export T_PANE_DISABLE_LOGGING=true背景任务(实验)
t-pane服务器可以在后台窗格中启动Claude实例进行研究或分析:
- 启动任务:创建一个包含任务说明的新窗格
- 手动执行:切换到窗格并运行
claude启动任务 - 输出位置:结果保存到
.t-pane/tasks/ - 状态跟踪:使用
check_background_tasks()监控进度
此功能是实验性的,需要在创建的窗格中手动调用Claude。
未来的增强功能
- \[x\] 交互式提示检测
- \[x\] 命令记录
- \[x\] 后台任务执行(实验)
- \[\]后台任务的自动Claude调用
- \[\]支持多个并发命令
- \[\]长时间运行的命令的进度指示器
- \[\]与集成
/resume用于会话连续性
8.读取文件
使用tmux窗格中的cat/head命令读取文件内容。
9.编辑文件
在tmux窗格中使用sed编辑文件(用户可见)。
