返回市场
MCP壳服务器

MCP壳服务器

作者:tumf154 星标更新:2025-09-09

项目介绍

MCP Shell Server

codecov smithery badge

MseeP.ai 安全评估徽章

一个实现模型上下文协议(MCP)的安全外壳命令执行服务器。此服务器允许远程执行白名单中的外壳命令,并支持标准输入。

<a href="https://glama.ai/mcp/servers/rt2d4pbn22"><img width="380" height="200" src="https://gips1.baidu.com/it/u=4056089610,762172656&fm=3081&app=3081&f=PNG?w=760&h=400" alt="mcp-shell-server MCP 服务器" /></a>

<a href="https://glama.ai/mcp/servers/rt2d4pbn22"><img width="380" height="200" src="https://gips1.baidu.com/it/u=4056089610,762172656&fm=3081&app=3081&f=PNG?w=760&h=400" alt="mcp-shell-server MCP 服务器" /></a>

特性

  • 安全命令执行:仅能执行白名单中的命令
  • 标准输入支持:通过标准输入传递命令输入
  • 全面输出:返回标准输出、标准错误、退出状态码及执行时间
  • 外壳操作符安全性:在壳操作符(; , &&, ||, |)之后验证命令
  • 超时控制:设置命令的最大执行时间

在您的 Claude.app 中配置 MCP 客户端

发布版本

code ~/Library/Application\ Support/Claude/claude_desktop_config.json
{
  "mcpServers": {
    "shell": {
      "command": "uvx",
      "args": [
        "mcp-shell-server"
      ],
      "env": {
        "ALLOW_COMMANDS": "ls,cat,pwd,grep,wc,touch,find"
      }
    },
  }
}

本地版本

配置

code ~/Library/Application\ Support/Claude/claude_desktop_config.json
{
  "mcpServers": {
    "shell": {
      "command": "uv",
      "args": [
        "--directory",
        ".",
        "run",
        "mcp-shell-server"
      ],
      "env": {
        "ALLOW_COMMANDS": "ls,cat,pwd,grep,wc,touch,find"
      }
    },
  }
}

安装

通过 Smithery 安装

要通过 Smithery 自动安装 Shell Server 到 Claude Desktop:

npx -y @smithery/cli install mcp-shell-server --client claude

手动安装

pip install mcp-shell-server

通过 Smithery 安装

要通过 Smithery 自动安装 Shell Server 到 Claude Desktop:

npx -y @smithery/cli install mcp-shell-server --client claude

使用方法

启动服务器

ALLOW_COMMANDS="ls,cat,echo" uvx mcp-shell-server
# 或使用别名
ALLOWED_COMMANDS="ls,cat,echo" uvx mcp-shell-server

环境变量 ALLOW_COMMANDS(或其别名 ALLOWED_COMMANDS)指定了哪些命令是允许执行的。命令之间可以用逗号分隔,可选地在逗号周围添加空格。

ALLOW_COMMANDSALLOWED_COMMANDS 的有效格式:

ALLOW_COMMANDS="ls,cat,echo"          # 基本格式
ALLOWED_COMMANDS="ls ,echo, cat"      # 带有空格(使用别名)
ALLOW_COMMANDS="ls,  cat  , echo"     # 多个空格

请求格式

# 基本命令执行
{
    "command": ["ls", "-l", "/tmp"]
}

# 带有标准输入的命令
{
    "command": ["cat"],
    "stdin": "Hello, World!"
}

# 带有超时的命令
{
    "command": ["long-running-process"],
    "timeout": 30  # 最大执行时间(秒)
}

# 带有工作目录和超时的命令
{
    "command": ["grep", "-r", "pattern"],
    "directory": "/path/to/search",
    "timeout":  60
}

响应格式

成功响应:

{
    "stdout": "命令输出",
    "stderr": "",
    "status": 0,
    "execution_time": 0.123
}

错误响应:

{
    "error": "不允许的命令:rm",
    "status": 1,
    "stdout": "",
    "stderr": "不允许的命令:rm",
    "execution_time": 0
}

安全性

服务器实现了多种安全措施:

  1. 命令白名单:只有明确允许的命令才能被执行
  2. 外壳操作符验证:在壳操作符(; , &&, ||, |)之后的命令也会被验证是否在白名单中
  3. 无外壳注入:命令直接执行,不经过外壳解释

开发

设置开发环境

  1. 克隆仓库
git clone https://github.com/yourusername/mcp-shell-server.git
cd mcp-shell-server
  1. 安装依赖项,包括测试需求
pip install -e ".[test]"

运行测试

pytest

API 参考

请求参数

字段类型必需描述
commandstring[]命令及其参数作为数组元素
stdinstring要传递给命令的输入
directorystring命令执行的工作目录
timeoutinteger命令的最大执行时间(秒)

响应字段

字段类型描述
stdoutstring命令的标准输出
stderrstring命令的标准错误输出
statusinteger退出状态码
execution_timefloat执行所用时间(秒)
errorstring错误信息(仅在失败时存在)

要求

  • Python 3.11 或更高版本
  • mcp>=1.1.0

许可证

MIT 许可证 - 查看 LICENSE 文件以获取详细信息