命令行安全工具mcp

@andresthor/cmd-line-mcp
0 Stars 804 次浏览 andresthor 更新于 2026-08-23

允许AI助手通过具有全面安全功能的受控接口安全地执行常见的Unix/macOS终端命令。

该服务暂未提供标准配置,请参考 README 手动接入

服务介绍

命令行 MCP 服务器

PyPI version
Python Versions

一个安全的模型控制协议 (MCP) 服务器,允许 AI 助手在受控目录访问和命令权限下执行终端命令。

概述

命令行 MCP 在 AI 助手和您的终端之间提供了一个安全层。它实现了双重安全模型:

  1. 命令权限:命令被分类为读取(安全)、写入(更改数据)或系统(影响系统状态),具有不同的批准要求
  2. 目录权限:命令只能访问显式列入白名单的目录或在会话期间批准的目录

AI 助手使用标准化的 MCP 工具与此服务器交互,从而实现安全的终端命令执行,同时防止访问敏感文件或危险操作。您可以根据需要从高度限制性到更宽松地配置安全级别。

主要功能

安全性 易用性 集成
目录白名单 命令分类(读/写/系统) Claude Desktop 兼容性
命令过滤 持久会话权限 标准 MCP 协议
模式匹配 命令链(管道等) 自动批准选项
危险命令阻止 直观的审批工作流 多种配置方法

支持的命令(开箱即用)

读取命令

  • ls, pwd, cat, less, head, tail, grep, find, which, du, df, file, sort 等。

写入命令

  • cp, mv, rm, mkdir, rmdir, touch, chmod, chown 等。

系统命令

  • ps, top, htop, who, netstat, ifconfig, ping 等。

安全架构

该系统实现了一种多层次的安全方法:

┌───────────────────────────────────────────────────────────────┐
│                   COMMAND-LINE MCP SERVER                     │
├──────────────────┬────────────────────────┬───────────────────┤
│ COMMAND SECURITY │   DIRECTORY SECURITY   │ SESSION SECURITY  │
├──────────────────┼────────────────────────┼───────────────────┤
│ ✓ Read commands  │ ✓ Directory whitelist  │ ✓ Session IDs     │
│ ✓ Write commands │ ✓ Runtime approvals    │ ✓ Persistent      │
│ ✓ System commands│ ✓ Path validation      │   permissions     │
│ ✓ Blocked list   │ ✓ Home dir expansion   │ ✓ Auto timeouts   │
│ ✓ Pattern filters│ ✓ Subdirectory check   │ ✓ Desktop mode    │
└──────────────────┴────────────────────────┴───────────────────┘

所有安全功能都可以根据您的威胁模型和便利需求从限制性到宽松进行配置。

快速开始

# Install
git clone https://github.com/yourusername/cmd-line-mcp.git
cd cmd-line-mcp
python -m venv venv
source venv/bin/activate
pip install -e .
cp config.json.example config.json

# Run
cmd-line-mcp                        # With default config
cmd-line-mcp --config config.json   # With specific config

配置选项

服务器支持四种配置方法,按优先级顺序如下:

  1. 内置默认配置(default_config.json)
  2. JSON 配置文件(推荐用于自定义)
    cmd-line-mcp --config config.json
    
  3. 环境变量(用于特定覆盖)
    export CMD_LINE_MCP_SECURITY_WHITELISTED_DIRECTORIES="~,/tmp"
    
  4. .env 文件(用于特定环境设置)
    cmd-line-mcp --config config.json --env .env
    

默认配置存储在 default_config.json 中,并随包一起提供。您可以复制此文件以创建自己的自定义配置。

核心配置设置

{
  "security": {
    "whitelisted_directories": ["/home", "/tmp", "~"],
    "auto_approve_directories_in_desktop_mode": false, 
    "require_session_id": false,
    "allow_command_separators": true
  },
  "commands": {
    "read": ["ls", "cat", "grep"], 
    "write": ["touch", "mkdir", "rm"],
    "system": ["ps", "ping"]
  }
}

环境变量格式

环境变量使用可预测的命名模式:

CMD_LINE_MCP_<SECTION>_<SETTING>

示例:

# Security settings
export CMD_LINE_MCP_SECURITY_WHITELISTED_DIRECTORIES="/projects,/var/data"
export CMD_LINE_MCP_SECURITY_AUTO_APPROVE_DIRECTORIES_IN_DESKTOP_MODE=true

# Command additions (these merge with defaults)
export CMD_LINE_MCP_COMMANDS_READ="awk,jq,wc"

Claude 桌面集成

设置

  1. 安装 Claude for Desktop
  2. ~/Library/Application Support/Claude/claude_desktop_config.json 中进行配置:
{
  "mcpServers": {
    "cmd-line": {
      "command": "/path/to/venv/bin/cmd-line-mcp",
      "args": ["--config", "/path/to/config.json"],
      "env": {
        "CMD_LINE_MCP_SECURITY_REQUIRE_SESSION_ID": "false",
        "CMD_LINE_MCP_SECURITY_AUTO_APPROVE_DIRECTORIES_IN_DESKTOP_MODE": "true"
      }
    }
  }
}

推荐的 Claude 桌面设置

为了获得最佳体验,请配置以下选项:

  • require_session_id: false - 为防止审批循环,这是必需的
  • auto_approve_directories_in_desktop_mode: true - 为了方便访问,这是一个可选设置
  • 将常用目录添加到白名单中

配置完成后,重启 Claude for Desktop。

AI 助手工具

服务器提供了这些 MCP 工具供 AI 助手使用:

工具 目的 需要审批
execute_command 运行任何类型的命令 是,对于写入/系统命令
execute_read_command 运行只读命令 仅需目录审批
approve_directory 授权访问某个目录 不适用 - 这是一个审批工具
approve_command_type 授予命令类别的权限 不适用 - 这是一个审批工具
list_directories 显示授权目录
list_available_commands 显示命令类别
get_command_help 获取命令使用指南
get_configuration 查看当前设置

工具示例

目录管理

# Check available directories
dirs = await list_directories(session_id="session123")
whitelisted = dirs["whitelisted_directories"]
approved = dirs["session_approved_directories"]

# Request permission for a directory
if "/projects/my-data" not in whitelisted and "/projects/my-data" not in approved:
    result = await approve_directory(
        directory="/projects/my-data", 
        session_id="session123"
    )

命令执行

# Read commands (read permissions enforced)
result = await execute_read_command("ls -la ~/Documents")

# Any command type (may require command type approval)
result = await execute_command(
    command="mkdir -p ~/Projects/new-folder", 
    session_id="session123"
)

获取配置

# Check current settings
config = await get_configuration()
whitelist = config["directory_whitelisting"]["whitelisted_directories"]

目录安全系统

服务器限制了特定目录下的命令执行,以防止访问敏感文件。

目录安全模式

系统支持三种安全模式:

模式 描述 最佳用途 配置
严格 仅允许列入白名单的目录 最大安全性 auto_approve_directories_in_desktop_mode: false
审批 非白名单目录需要显式审批 交互式使用 标准客户端的默认行为
自动批准 自动批准 Claude 桌面的目录 方便性 auto_approve_directories_in_desktop_mode: true

白名单目录配置

"security": {
  "whitelisted_directories": [
    "/home",                  // System directories
    "/tmp",
    "~",                      // User's home
    "~/Documents"             // Common user directories
  ],
  "auto_approve_directories_in_desktop_mode": false  // Set to true for convenience
}

目录审批流程

  1. 请求在某一目录下执行命令
  2. 系统检查:
    • 该目录是否在全球白名单中?→ 允许
    • 该目录是否已在本次会话中被批准?→ 允许
    • 都不是?→ 请求审批
  3. 批准后,该目录在整个会话期间都将保持批准状态

路径格式支持

  • 绝对路径:/home/user/documents
  • 主目录:~(扩展为用户的主目录)
  • 用户子目录:~/Downloads

Claude 桌面集成

服务器为 Claude 桌面维护一个持久会话,确保目录审批在请求之间持续有效,并防止审批循环。

命令定制

系统通过命令分类来控制访问:

类别 描述 示例命令 是否需要审批
读取 安全操作 ls, cat, find
写入 数据修改 mkdir, rm, touch
系统 系统操作 ps, ping, ifconfig
禁止 危险命令 sudo, bash, eval 总是拒绝

自定义方法

// In config.json
{
  "commands": {
    "read": ["ls", "cat", "grep", "awk", "jq"],
    "write": ["mkdir", "touch", "rm"],
    "system": ["ping", "ifconfig", "kubectl"],
    "blocked": ["sudo", "bash", "eval"]
  }
}

环境变量方法:

# Add to existing lists, not replace (comma-separated)
export CMD_LINE_MCP_COMMANDS_READ="awk,jq"
export CMD_LINE_MCP_COMMANDS_BLOCKED="npm,pip"

MCP 服务器会将这些添加与现有命令合并,使您无需重新创建完整的命令列表即可扩展功能。

命令链

服务器支持三种命令链接方式:

方法 符号 示例 配置设置
管道 | ls | grep txt allow_command_separators: true
序列 ; mkdir dir; cd dir allow_command_separators: true
后台 & find . -name "*.log" & allow_command_separators: true

链中的所有命令都必须来自支持的命令列表。安全性检查适用于整个链。

快速配置:

"security": {
  "allow_command_separators": true  // Set to false to disable all chaining
}

要禁用特定分隔符,请将其添加到 dangerous_patterns 列表中。

许可证

MIT

相关 MCP 服务