安全命令行执行服务器

一个安全的模型上下文协议(MCP)服务器实现,用于执行受控的命令行操作,具有全面的安全功能。

  • by MladenSU
  • Python
  • 本地部署
  • 177 星标
  • 更新于
在 GitHub 查看 MladenSU/cli-mcp-server

使用说明

CLI MCP服务器


用于执行受控命令行操作的安全模型上下文协议(MCP)服务器实现 全面的安全功能。


目录

  1. 概述
  2. 特性
  3. 配置
  4. 可用工具
  5. 使用Claude Desktop
  6. 安全功能
  7. 错误处理
  8. 发展
  9. 许可证

概述

此MCP服务器支持安全的命令行执行,具有强大的安全措施,包括命令白名单、路径 验证和执行控制。非常适合在保持安全性的同时提供对LLM应用程序的受控CLI访问。

特性

  • 🔒 通过严格验证确保命令执行的安全性
  • ⚙️ 可配置的命令和标记白名单,带有“全部”选项
  • 🛡️ 路径遍历预防和验证
  • 🚫 外壳操作员注射保护
  • ⏱️ 执行超时和长度限制
  • 📝 详细的错误报告
  • 🔄 异步操作支持
  • 🎯 工作目录限制和验证

配置

使用环境变量配置服务器:

变量 描述 默认值
ALLOWED_DIR 命令执行的基本目录(必需) 无(必需)
ALLOWED_COMMANDS 逗号分隔的允许命令列表或“全部” ls,cat,pwd
ALLOWED_FLAGS 逗号分隔的允许标志列表或“全部” -l,-a,--help
MAX_COMMAND_LENGTH 最大命令字符串长度 1024
COMMAND_TIMEOUT 命令执行超时(秒) 30
ALLOW_SHELL_OPERATORS 允许shell运算符(&&、

注:设置 ALLOWED_COMMANDS 或 ALLOWED_FLAGS “all”将分别允许任何命令或标志。

安装

通过以下方式自动安装Claude Desktop的CLI MCP服务器 史密瑟里:

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

可用工具

运行命令

在允许的目录中执行白名单CLI命令。

输入架构:

{
  "command": {
    "type": "string",
    "description": "Single command to execute (e.g., 'ls -l' or 'cat file.txt')"
  }
}

安全说明:

  • 默认情况下不支持Shell运算符(&&、|、>、>>),但可以通过启用 ALLOW_SHELL_OPERATORS=true
  • 除非ALLOWED_Commands='all',否则命令必须列入白名单
  • 标志必须列入白名单,除非ALLOWED_Flags=“全部”
  • 所有路径都被验证为在ALLOWED_DIR范围内

show_security_rules

显示当前安全配置和限制,包括:

  • 工作目录
  • 允许的命令
  • 允许的标志
  • 安全限制(最大命令长度和超时)

使用Claude Desktop

添加到您的 ~/Library/Application\ Support/Claude/claude_desktop_config.json:

开发/未发布的服务器配置

{
  "mcpServers": {
    "cli-mcp-server": {
      "command": "uv",
      "args": [
        "--directory",
        "<path/to/the/repo>/cli-mcp-server",
        "run",
        "cli-mcp-server"
      ],
      "env": {
        "ALLOWED_DIR": "</your/desired/dir>",
        "ALLOWED_COMMANDS": "ls,cat,pwd,echo",
        "ALLOWED_FLAGS": "-l,-a,--help,--version",
        "MAX_COMMAND_LENGTH": "1024",
        "COMMAND_TIMEOUT": "30",
        "ALLOW_SHELL_OPERATORS": "false"
      }
    }
  }
}

已发布的服务器配置

{
  "mcpServers": {
    "cli-mcp-server": {
      "command": "uvx",
      "args": [
        "cli-mcp-server"
      ],
      "env": {
        "ALLOWED_DIR": "</your/desired/dir>",
        "ALLOWED_COMMANDS": "ls,cat,pwd,echo",
        "ALLOWED_FLAGS": "-l,-a,--help,--version",
        "MAX_COMMAND_LENGTH": "1024",
        "COMMAND_TIMEOUT": "30",
        "ALLOW_SHELL_OPERATORS": "false"
      }
    }
  }
}

如果它不起作用或在UI中显示,请通过清除缓存 uv clean.

安全功能

  • ✅ 使用“全部”选项执行白名单命令
  • ✅ 使用“全部”选项进行标记验证
  • ✅ 路径遍历预防和规范化
  • ✅ 外壳操作员屏蔽(通过以下方式提供选择加入支持 ALLOW_SHELL_OPERATORS=true)
  • ✅ 命令长度限制
  • ✅ 执行超时
  • ✅ 工作目录限制
  • ✅ Symlink解析和验证

错误处理

服务器为以下对象提供详细的错误消息:

  • 安全违规(CommandSecurityError)
  • 命令超时(CommandTimeoutError)
  • 命令格式无效
  • 路径安全违规
  • 执行失败(CommandExecutionError)
  • 常规命令错误(CommandError)

发展

先决条件

  • Python 3.10+
  • MCP协议库

建筑与出版

准备分发包裹:

  1. 同步依赖关系并更新锁文件:

    uv sync
    
  2. 构建包分发:

    uv build
    

    这将在 dist/ 目录。

  3. 发布到PyPI:

    uv publish --token {{YOUR_PYPI_API_TOKEN}}
    

调试

由于MCP服务器在stdio上运行,调试可能具有挑战性。为了达到最佳调试效果 经验,我们强烈建议使用 MCP检查员.

您可以通过以下方式启动MCP检查器 npm 随着 此命令:

npx @modelcontextprotocol/inspector uv --directory {{your source code local directory}}/cli-mcp-server run cli-mcp-server

启动后,检查器将显示一个URL,您可以在浏览器中访问该URL以开始调试。

许可证

此项目根据MIT许可证获得许可-请参阅 许可证 文件以获取详细信息。


有关更多信息或支持,请在项目存储库上打开一个问题。