终端会话管理服务器

一个用于管理多个持久终端会话的模型上下文协议(MCP)服务器,支持会话创建、命令执行、输出缓冲和生命周期管理。

  • by kirby44
  • Swift
  • 本地部署
  • 2 星标
  • 更新于
在 GitHub 查看 kirby44/terminals

使用说明

终端MCP服务器

用于管理多个持久终端会话的模型上下文协议(MCP)服务器。

特性

  • 创建和管理多个命名终端会话
  • 在特定会话中执行命令
  • 持久化shell环境(环境变量、工作目录、历史记录)
  • 会话输出缓冲和检索
  • 清洁会话生命周期管理
  • 为方便起见,默认会话支持
  • 使用Observer应用程序(macOS)进行可视化会话监控

安装

npm install
npm run build

用法

可用工具

  1. 创建会话 -创建新的持久终端会话

    • sessionId (字符串,必填):会话的唯一标识符
    • shell (字符串,可选):要使用的Shell(默认值:系统Shell)
    • cwd (字符串,可选):工作目录(默认:当前目录)
  2. list_sessions -列出所有活动的终端会话

  3. execute_in_session -在特定会话中执行命令

    • sessionId (string,必填):在中执行命令的会话ID
    • command (string,必填):要执行的命令
  4. get_session_output -获取会话的最新输出

    • sessionId (string,必填):从中获取输出的会话ID
    • lines (number,可选):要检索的最近行数
  5. destroy_session -销毁终端会话

    • sessionId (字符串,必填):要销毁的会话ID
  6. set_default_session -为后续操作设置默认会话

    • sessionId (字符串,必填):会话ID设置为默认值

示例用法

// Create two sessions
create_session({ sessionId: "app" })
create_session({ sessionId: "client", cwd: "/tmp" })

// Start an app in session 1
execute_in_session({ sessionId: "app", command: "npm start" })

// Interact with the app from session 2
execute_in_session({ sessionId: "client", command: "curl http://localhost:3000" })

// Check what's running
list_sessions({})

// Get recent output
get_session_output({ sessionId: "app", lines: 20 })

// Cleanup
destroy_session({ sessionId: "client" })

建筑

  • 每个会话都以非交互模式运行一个持久shell进程
  • 命令通过stdin发送到shell
  • 输出被捕获和缓冲(每个会话最多1000行)
  • 会话维护自己的环境和工作目录
  • 适当的清理可确保没有孤立的进程
  • 事件侦听器管理可防止内存泄漏
  • 使用Claude代码进行稳健操作的错误处理

稳定性和可靠性

此服务器已经过测试和调试,可以与Claude Code一起使用。关键修复包括:

  • 内存泄漏预防:在命令执行中正确清理事件侦听器
  • TTY兼容性:用于基于管道的通信的非交互式外壳模式
  • 错误处理:文件操作和流程管理的全面错误处理
  • 资源清理:进程终止和目录清理的适当时间

看 ISSUE_MEMORY_LEAK.md 有关稳定性改进的详细技术信息。

观察者应用程序(macOS)

这 observer/ 该目录包含一个Swift macOS应用程序,用于实时可视化监控终端会话。Observer应用程序提供:

  • 用于会话显示的网格和侧边栏视图模式
  • 通过文件监视进行实时输出监控
  • 用于跟踪多个终端会话的可视化界面

要运行Observer应用程序,请执行以下操作:

cd observer
./run.sh

发展

npm install
npm run build
npm run dev  # Watch mode

许可证

麻省理工学院