终端控制
STDIO为AI助手集成设计的终端控制服务器
为AI助手集成设计的终端控制服务器
MCP Terminal 是一个基于 MCP(Model Context Protocol)的终端控制服务器,专为与大型语言模型(LLM)和 AI 助手集成而设计。它提供了一个标准化的接口,使 AI 可以执行终端命令并获取输出结果。
English | 中文
如果您还没有安装 uv,可以通过以下命令安装:
# 在macOS上使用Homebrew brew install uv # 在其他平台上 pip install uv
克隆仓库并使用 uv 安装依赖:
# 克隆仓库 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]"
注意:如需使用 iTerm2 控制器,必须在 iTerm2 设置中启用 Python API。
打开 iTerm2,依次进入
Preferences
→General
→Magic
,勾选 Enable Python API 选项,如下图所示:
我们提供了 Makefile 来简化常见操作:
# 安装基本依赖 make setup # 安装iTerm2支持 make setup-iterm # 安装开发依赖 make setup-dev
我们提供了 Docker 支持,可以快速部署 MCP Terminal 服务器:
# 构建 Docker 镜像 docker build -t mcp-terminal . # 运行 Docker 容器(SSE模式,端口8000) docker run -p 8000:8000 mcp-terminal
或者使用 docker-compose:
# 启动服务 docker-compose up -d # 查看日志 docker-compose logs -f # 停止服务 docker-compose down
有多种方式可以启动服务器:
# 使用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控制器
使用 Docker 运行 MCP Terminal 服务器(默认使用 SSE 模式和 Subprocess 控制器):
# 直接运行 docker run -p 8000:8000 mcp-terminal # 使用自定义端口 docker run -p 9000:8000 mcp-terminal # 挂载当前目录(可访问本地文件) docker run -p 8000:8000 -v $(pwd):/workspace mcp-terminal
默认配置:
您可以通过修改 Dockerfile 或 docker-compose.yml 文件来自定义配置。
您可以将 Docker 容器配置为 MCP 服务,使 Claude 或其他支持 MCP 的 AI 可以直接使用容器化的工具。以下是在 Claude 配置文件中使用 Docker 容器作为 MCP 服务的示例:
{ "mcp": { "servers": { "terminal": { "command": "docker", "args": [ "run", "--rm", "-i", "--mount", "type=bind,src=${workspaceFolder},dst=/workspace", "mcp-terminal", "mcp-terminal", "--mode", "sse", "--host", "0.0.0.0", "--port", "8000" ] } } } }
这种配置允许:
${workspaceFolder}
变量将当前工作目录挂载到容器中--rm
标志确保容器使用后自动删除,保持环境清洁您可以根据需要定义多个不同的 MCP 服务容器,每个容器专注于特定的功能。
以下是 Claude Desktop 的配置示例:
{ "mcpServers": { "terminal": { "command": "/Users/ann/Workspace/mcp-terminal/.venv/bin/python", "args": [ "/Users/ann/Workspace/mcp-terminal/mcp_terminal.py", "--controller", "subprocess" ] } } }
服务器支持多种命令行选项:
python mcp_terminal.py --help
主要选项:
--controller
或 -c
:指定终端控制器类型(auto, iterm, applescript, subprocess)--mode
或 -m
:指定服务器模式(stdio, sse)--host
:指定 SSE 模式主机地址--port
或 -p
:指定 SSE 模式端口--log-level
或 -l
:指定日志级别MCP Terminal 可以与 Claude Desktop 无缝集成,为 Claude 提供终端控制能力。
启动 MCP Terminal 服务器(以 stdio 模式):
# 在一个终端窗口中运行 make run-stdio
配置 Claude Desktop 使用 MCP 服务器:
打开 Claude Desktop,然后:
测试集成:
在与 Claude 的对话中,你现在可以请求 Claude 执行终端命令,例如:
如果集成不正常工作:
MCP Terminal 提供以下 MCP 函数:
执行终端命令并获取输出结果。
参数:
command
(string):要执行的命令wait_for_output
(boolean, 可选):是否等待并返回命令输出,默认为 truetimeout
(integer, 可选):等待输出的超时时间(秒),默认为 10返回:
success
(boolean):命令是否成功执行output
(string, 可选):命令的输出结果error
(string, 可选):如果命令失败,返回错误信息return_code
(integer, 可选):命令的返回代码warning
(string, 可选):警告信息获取终端信息。
参数:无
返回:
terminal_type
(string):正在使用的终端类型platform
(string):运行平台写入、追加或插入内容到文件。
参数:
filepath
(string):文件路径content
(string):要写入的内容mode
(string, 可选):写入模式,可选值为 "overwrite"(覆盖)、"append"(追加)或 "insert"(插入),默认为 "overwrite"position
(integer, 可选):使用 "insert" 模式时的插入位置create_dirs
(boolean, 可选):如果目录不存在,是否创建目录,默认为 true返回:
success
(boolean):操作是否成功error
(string, 可选):如果操作失败,返回错误信息filepath
(string):操作的文件路径details
(object, 可选):额外的操作详情MCP Terminal 允许执行任意终端命令,这可能带来安全风险。在生产环境中使用时,应该:
mcp-terminal/
├── mcp_terminal.py # 入口点脚本
├── pyproject.toml # 项目配置和依赖
├── README.md # 项目文档
├── Makefile # 构建和运行命令
├── Dockerfile # Docker 构建配置
├── docker-compose.yml # Docker Compose 配置
├── src/
│ ├── __init__.py
│ └── mcp_terminal/
│ ├── __init__.py
│ ├── server.py # 主服务器实现
│ ├── controllers/
│ │ ├── __init__.py # 控制器工厂和导入
│ │ ├── base.py # 基础控制器接口
│ │ ├── subprocess.py # 通用子进程控制器
│ │ ├── applescript.py # AppleScript控制器
│ │ └── iterm.py # iTerm2 API控制器
│ └── tools/
│ ├── __init__.py
│ ├── terminal.py # 终端操作工具
│ └── file.py # 文件操作工具
└── tests/ # 测试目录
├── __init__.py
└── test_subprocess_controller.py
# 使用pytest运行所有测试 make test # 或者直接使用pytest pytest tests/
# 检查代码格式 make lint # 自动格式化代码 make format
欢迎贡献!请遵循以下步骤:
git checkout -b feature/amazing-feature
)git commit -m 'Add some amazing feature'
)git push origin feature/amazing-feature
)此项目采用 MIT 许可证 - 详情见LICENSE文件。