项目简介
Shell Command MCP Server 是一个实现了 Model Context Protocol (MCP) 协议的服务器,它允许你通过 MCP 客户端(如 Claude for Desktop)安全地在 Docker 容器中执行 shell 命令。这个服务器提供了一个隔离的环境,避免直接访问主机 Docker 守护进程,增强了安全性。同时,它预装了常用的 Kubernetes 工具,方便进行 Kubernetes 集群管理。
主要功能点
- 安全 Shell 命令执行: 通过 MCP 协议提供执行 shell 命令的能力,所有命令在隔离的 Docker 容器中运行。
- 内置 Kubernetes 工具: 容器预装 'kubectl', 'helm', 'kustomize', 'k9s' 等 Kubernetes 工具,方便用户进行集群操作。
- 隔离的 Docker 环境: 命令在非 root 用户的 Docker 容器中执行,与宿主机环境隔离,提高安全性。
- 用户工作区持久化: 通过 Docker Volume Mount 将宿主机目录挂载到容器,实现用户工作区的文件持久化。
安装步骤
- 安装 Docker: 确保你的机器上已经安装并运行 Docker。
- 拉取 Docker 镜像: 使用 Docker 命令拉取 'ghcr.io/kaznak/shell-command-mcp:v1.0.0' 镜像。
docker pull ghcr.io/kaznak/shell-command-mcp:v1.0.0
服务器配置
MCP 客户端需要配置连接到 Shell Command MCP Server 的信息。以下是 Claude for Desktop 的配置示例,你需要将这段 JSON 配置添加到 Claude for Desktop 的配置文件中。
MacOS 配置示例:
{ "shell-command": { "serverName": "shell-command", // 自定义的服务名称,用于在客户端中标识 "command": "docker", // 启动服务器的命令,这里使用 docker "args": [ // 启动服务器命令的参数 "run", "--rm", // 容器退出后自动删除 "-i", // 保持 STDIN 打开 "--mount", // 挂载宿主机目录到容器 "type=bind,src=/Users/你的用户名/ClaudeWorks,dst=/home/mcp/ClaudeWorks", // 将宿主机 /Users/你的用户名/ClaudeWorks 目录挂载到容器的 /home/mcp/ClaudeWorks,请替换为你的实际目录 "ghcr.io/kaznak/shell-command-mcp:v1.0.0" // 使用的 Docker 镜像 ] } }
Windows 配置示例:
{ "shell-command": { "serverName": "shell-command", // 自定义的服务名称,用于在客户端中标识 "command": "docker", // 启动服务器的命令,这里使用 docker "args": [ // 启动服务器命令的参数 "run", "--rm", // 容器退出后自动删除 "-i", // 保持 STDIN 打开 "--mount", // 挂载宿主机目录到容器 "type=bind,src=\\\\wsl.localhost\\Ubuntu\\home\\你的用户名\\ClaudeWorks,dst=/home/mcp/Works", // 将宿主机 WSL Ubuntu 的 /home/你的用户名/ClaudeWorks 目录挂载到容器的 /home/mcp/Works,请替换为你的实际目录 "ghcr.io/kaznak/shell-command-mcp:v1.0.0" // 使用的 Docker 镜像 ] } }
注意:
- 请将配置示例中的 '/Users/你的用户名/ClaudeWorks' (MacOS) 或 '\\wsl.localhost\Ubuntu\home\你的用户名\ClaudeWorks' (Windows) 替换为你希望在容器中访问的宿主机目录。这个目录将被挂载到容器内部,使得容器可以访问和操作宿主机上的文件。
- 'serverName' 字段可以自定义,用于在 MCP 客户端中识别和使用这个服务器。
基本使用方法
配置完成后,在 MCP 客户端中(例如 Claude for Desktop),你就可以使用 'execute-command' 工具来执行 shell 命令了。
工具名称: 'execute-command'
工具描述: 在 bash 中执行 shell 命令。每次命令执行都会启动一个新的 bash 进程。
工具参数:
- 'command': 要执行的 shell 命令,字符串类型。
- 'options': 可选参数,对象类型,包含以下字段:
- 'cwd': 命令执行的工作目录,字符串类型,可选。
- 'env': 命令执行的环境变量,键值对对象,可选。
- 'timeout': 命令执行超时时间,毫秒,整数,可选。
使用示例 (在 Claude 中):
你可以通过自然语言指令或 Claude 的工具调用功能来使用 'execute-command' 工具。例如,你可以指示 Claude 执行 'ls -l /home/mcp/ClaudeWorks' 命令来查看挂载目录的内容。
{ "tool_calls": [ { "id": "tool_call_id", "type": "function", "function": { "name": "execute-command", "arguments": { "command": "ls -l /home/mcp/ClaudeWorks" } } } ] }
服务器会将命令的 'stdout' (标准输出), 'stderr' (标准错误输出) 和 'exitCode' (退出码) 返回给客户端。
信息
分类
开发者工具