MCP Terminal

by sichang824
Verified
# MCP Terminal MCP Terminal 是一个基于 MCP(Model Context Protocol)的终端控制服务器,专为与大型语言模型(LLM)和 AI 助手集成而设计。它提供了一个标准化的接口,使 AI 可以执行终端命令并获取输出结果。 ## 特性 - 使用官方 MCP SDK 实现 - 支持多种终端控制器: - **iTerm2 控制器**:在 macOS 上使用 iTerm2 的 Python API 提供高级控制 - **AppleScript 控制器**:在 macOS 上使用 AppleScript 控制 Terminal 应用 - **Subprocess 控制器**:在所有平台上通用的终端控制方式 - 支持多种服务器模式: - **STDIO 模式**:通过标准输入/输出与客户端通信 - **SSE 模式**:通过 Server-Sent Events 提供 HTTP API - 自动检测最佳终端控制器 - 与 Claude Desktop 无缝集成 ## 安装 ### 先决条件 - Python 3.8+ - [uv](https://github.com/astral-sh/uv) 包管理工具 如果您还没有安装 uv,可以通过以下命令安装: ```bash # 在macOS上使用Homebrew brew install uv # 在其他平台上 pip install uv ``` ### 使用 uv 安装(推荐) 克隆仓库并使用 uv 安装依赖: ```bash # 克隆仓库 git clone https://github.com/yourusername/mcp-terminal.git cd mcp-terminal # 创建虚拟环境并安装基本依赖 uv venv source .venv/bin/activate # 在Windows上使用 .venv\Scripts\activate uv pip install -e . # 如果需要iTerm2支持 (仅限macOS) uv pip install -e ".[iterm]" # 如果需要开发工具(测试、代码格式化等) uv pip install -e ".[dev]" ``` ### 使用 Makefile 安装 我们提供了 Makefile 来简化常见操作: ```bash # 安装基本依赖 make setup # 安装iTerm2支持 make setup-iterm # 安装开发依赖 make setup-dev ``` ## 使用方法 ### 运行 MCP 终端服务器 有多种方式可以启动服务器: ```bash # 使用Python直接运行(默认使用stdio模式和自动检测终端控制器) python mcp_terminal.py # 使用Makefile运行(stdio模式) make run-stdio # 使用Makefile运行(SSE模式) make run-sse # 使用指定控制器 make run-iterm # 使用iTerm2控制器 make run-applescript # 使用AppleScript控制器 make run-subprocess # 使用Subprocess控制器 ``` ### Claude Desktop ```json { "mcpServers": { "terminal": { "command": "/Users/ann/Workspace/mcp-terminal/.venv/bin/python", "args": [ "/Users/ann/Workspace/mcp-terminal/mcp_terminal.py", "--controller", "subprocess" ] } } } ``` ### 命令行选项 服务器支持多种命令行选项: ```bash python mcp_terminal.py --help ``` 主要选项: - `--controller` 或 `-c`:指定终端控制器类型(auto, iterm, applescript, subprocess) - `--mode` 或 `-m`:指定服务器模式(stdio, sse) - `--host`:指定 SSE 模式主机地址 - `--port` 或 `-p`:指定 SSE 模式端口 - `--log-level` 或 `-l`:指定日志级别 ## 与 Claude Desktop 集成 MCP Terminal 可以与 Claude Desktop 无缝集成,为 Claude 提供终端控制能力。 ### 配置步骤 1. **启动 MCP Terminal 服务器**(以 stdio 模式): ```bash # 在一个终端窗口中运行 make run-stdio ``` 2. **配置 Claude Desktop 使用 MCP 服务器**: 打开 Claude Desktop,然后: - 点击设置图标(通常在右上角) - 导航到"扩展"或"工具"选项卡 - 启用"自定义工具"功能 - 添加 MCP Terminal 的配置: - 工具名称:Terminal - 工具路径:输入 mcp_terminal.py 的完整路径 - 使用 stdio 模式:勾选 - 保存配置 3. **测试集成**: 在与 Claude 的对话中,你现在可以请求 Claude 执行终端命令,例如: - "请列出我的主目录下的文件" - "检查我当前的 Python 版本" - "创建一个新目录并将当前日期写入一个文件" ### 故障排除 如果集成不正常工作: 1. 确保 MCP Terminal 服务器正在运行 2. 检查日志输出以查找错误 3. 验证 Claude Desktop 的工具配置是否正确 4. 尝试重启 Claude Desktop 和 MCP Terminal 服务器 ## API 规范 MCP Terminal 提供以下 MCP 函数: ### execute_command 执行终端命令并获取输出结果。 **参数**: - `command` (string):要执行的命令 - `wait_for_output` (boolean, 可选):是否等待并返回命令输出,默认为 true - `timeout` (integer, 可选):等待输出的超时时间(秒),默认为 10 **返回**: - `success` (boolean):命令是否成功执行 - `output` (string, 可选):命令的输出结果 - `error` (string, 可选):如果命令失败,返回错误信息 - `return_code` (integer, 可选):命令的返回代码 - `warning` (string, 可选):警告信息 ### get_terminal_info 获取终端信息。 **参数**:无 **返回**: - `terminal_type` (string):正在使用的终端类型 - `platform` (string):运行平台 ## 安全考虑 MCP Terminal 允许执行任意终端命令,这可能带来安全风险。在生产环境中使用时,应该: 1. 限制服务器只接受来自受信任来源的连接 2. 考虑实现命令白名单或黑名单 3. 定期审计执行的命令 4. 在专用账户下运行服务器,限制其权限 ## 开发 ### 目录结构 ``` /Users/ann/Workspace/mcp-terminal/ ├── mcp_terminal.py # 入口点脚本 ├── pyproject.toml # 项目配置和依赖 ├── README.md # 项目文档 ├── Makefile # 构建和运行命令 ├── src/ │ ├── __init__.py │ └── mcp_terminal/ │ ├── __init__.py │ ├── stdio_server.py # 主服务器启动脚本 │ ├── controllers/ │ │ ├── __init__.py # 控制器工厂和导入 │ │ ├── base.py # 基础控制器接口 │ │ ├── subprocess.py # 通用子进程控制器 │ │ ├── applescript.py # AppleScript控制器 │ │ └── iterm.py # iTerm2 API控制器 │ └── tools/ │ ├── __init__.py │ └── terminal.py # 终端操作工具 └── tests/ # 测试目录 ├── __init__.py └── test_subprocess_controller.py ``` ### 运行测试 ```bash # 使用pytest运行所有测试 make test # 或者直接使用pytest pytest tests/ ``` ### 代码格式化 ```bash # 检查代码格式 make lint # 自动格式化代码 make format ``` ## 贡献 欢迎贡献!请遵循以下步骤: 1. Fork 仓库 2. 创建功能分支 (`git checkout -b feature/amazing-feature`) 3. 提交更改 (`git commit -m 'Add some amazing feature'`) 4. 推送到分支 (`git push origin feature/amazing-feature`) 5. 提交 Pull Request ## 许可证 此项目采用 MIT 许可证 - 详情见[LICENSE](LICENSE)文件。