Shell Command MCP Server

项目简介

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 将宿主机目录挂载到容器,实现用户工作区的文件持久化。

安装步骤

  1. 安装 Docker: 确保你的机器上已经安装并运行 Docker。
  2. 拉取 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' (退出码) 返回给客户端。

服务器信息