返回市场
终端设备

终端设备

作者:kirby442 星标更新:2025-06-19

项目介绍

终端 MCP 服务器

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

功能

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

安装

npm install
npm run build

使用

可用工具

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

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

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

    • sessionId(字符串,必需):要执行命令的会话 ID
    • command(字符串,必需):要执行的命令
  4. get_session_output - 获取会话的最近输出

    • sessionId(字符串,必需):要获取输出的会话 ID
    • lines(数字,可选):要检索的最近行数
  5. destroy_session - 销毁终端会话

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

示例用法

// 创建两个会话
create_session({ sessionId: "app" })
create_session({ sessionId: "client", cwd: "/tmp" })

// 在会话 1 中启动一个应用
execute_in_session({ sessionId: "app", command: "npm start" })

// 从会话 2 与应用交互
execute_in_session({ sessionId: "client", command: "curl http://localhost:3000" })

// 检查正在运行的内容
list_sessions({})

// 获取最近的输出
get_session_output({ sessionId: "app", lines: 20 })

// 清理
destroy_session({ sessionId: "client" })

架构

  • 每个会话在非交互模式下运行一个持久的 shell 进程
  • 命令通过标准输入发送到 shell
  • 输出被捕获并缓冲(每个会话最多 1000 行)
  • 会话维护自己的环境和工作目录
  • 正确的清理确保没有孤儿进程
  • 事件监听器管理防止内存泄漏
  • 错误处理确保与 Claude Code 的健壮操作

稳定性和可靠性

此服务器已针对 Claude Code 进行了测试和调试。关键修复包括:

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

有关稳定性改进的详细技术信息,请参阅 ISSUE_MEMORY_LEAK.md

Observer 应用程序(macOS)

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

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

要运行 Observer 应用程序:

cd observer
./run.sh

开发

npm install
npm run build
npm run dev  # 监控模式

许可证

MIT </中文翻译>