一个安全的模型控制协议(MCP)服务器,允许AI助手执行终端命令,并具有受控目录访问权限和命令权限。
命令行MCP在AI助手和您的终端之间提供了一层安全防护。它实现了双重安全模型:
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等。系统实施了多层安全方法:
┌───────────────────────────────────────────────────────────────┐
│ 命令行MCP服务器 │
├──────────────────┬────────────────────────┬───────────────────┤
│ 命令安全 │ 目录安全 │ 会话安全 │
├──────────────────┼────────────────────────┼───────────────────┤
│ ✓ 读取命令 │ ✓ 目录白名单 │ ✓ 会话ID │
│ ✓ 写入命令 │ ✓ 运行时批准 │ ✓ 持久 │
│ ✓ 系统命令 │ ✓ 路径验证 │ 权限 │
│ ✓ 阻止列表 │ ✓ 扩展主目录 │ ✓ 自动超时 │
│ ✓ 模式过滤器 │ ✓ 子目录检查 │ ✓ 桌面模式 │
└──────────────────┴────────────────────────┴───────────────────┘
所有安全功能都可以根据威胁模型和便利需求从严格到宽松进行配置。
# 安装
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
# 运行
cmd-line-m
cmd-line-mcp --config config.json # 使用特定配置
服务器支持四种配置方法,按优先级顺序排列:
cmd-line-mcp --config config.json
export CMD_LINE_MCP_SECURITY_WHITELISTED_DIRECTORIES="~,/tmp"
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>
示例:
# 安全设置
export CMD_LINE_MCP_SECURITY_WHITELISTED_DIRECTORIES="/projects,/var/data"
export CMD_LINE_MCP_SECURITY_AUTO_APPROVE_DIRECTORIES_IN_DESKTOP_MODE=true
# 命令添加(这些与默认值合并)
export CMD_LINE_MCP_COMMANDS_READ="awk,jq,wc"
~/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"
}
}
}
}
为了获得最佳体验,请配置:
require_session_id: false - 必须防止审批循环auto_approve_directories_in_desktop_mode: true - 可选,方便访问配置后,重启Claude for Desktop。
服务器为AI助手提供了以下MCP工具:
| 工具 | 目的 | 是否需要审批 |
|---|---|---|
execute_command | 执行任何类型的命令 | 是,对于写入/系统命令 |
execute_read_command | 执行只读命令 | 目录审批即可 |
approve_directory | 授予目录访问权限 | 不适用 - 它是审批工具 |
approve_command_type | 授予命令类别的权限 | 不适用 - 它是审批工具 |
list_directories | 显示授权目录 | 否 |
list_available_commands | 显示命令类别 | 否 |
get_command_help | 获取命令使用指南 | 否 |
get_configuration | 查看当前设置 | 否 |
# 检查可用目录
dirs = await list_directories(session_id="session123")
whitelisted = dirs["whitelisted_directories"]
approved = dirs["session_approved_directories"]
# 请求目录权限
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"
)
# 读取命令(强制执行读取权限)
result = await execute_read_command("ls -la ~/Documents")
# 任何类型的命令(可能需要命令类型审批)
result = await execute_command(
command="mkdir -p ~/Projects/new-folder",
session_id="session123"
)
# 检查当前设置
config = await get_configuration()
whitelist = config["directory_whitelisting"]["whitelisted_directories"]
服务器限制命令执行到特定目录,防止访问敏感文件。
系统支持三种安全模式:
| 模式 | 描述 | 最适合 | 配置 |
|---|---|---|---|
| 严格 | 只允许白名单目录 | 最大安全性 | auto_approve_directories_in_desktop_mode: false |
| 审批 | 非白名单目录需要明确批准 | 互动使用 | 标准客户端的默认行为 |
| 自动批准 | 自动批准Claude Desktop的目录 | 方便 | auto_approve_directories_in_desktop_mode: true |
"security": {
"whitelisted_directories": [
"/home", // 系统目录
"/tmp",
"~", // 用户家目录
"~/Documents" // 常见用户目录
],
"auto_approve_directories_in_desktop_mode": false // 设置为true以方便
}
/home/user/documents~(扩展为用户的主目录)~/Downloads服务器为Claude Desktop维护持久会话,确保目录审批在请求之间持续存在,防止审批循环。
系统使用命令分类来控制访问:
| 类别 | 描述 | 示例命令 | 是否需要审批 |
|---|---|---|---|
| 读取 | 安全操作 | ls, cat, find | 否 |
| 写入 | 数据修改 | mkdir, rm, touch | 是 |
| 系统 | 系统操作 | ps, ping, ifconfig | 是 |
| 阻止 | 危险命令 | sudo, bash, eval | 总是拒绝 |
// 在config.json中
{
"commands": {
"read": ["ls", "cat", "grep", "awk", "jq"],
"write": ["mkdir", "touch", "rm"],
"system": ["ping", "ifconfig", "kubectl"],
"blocked": ["sudo", "bash", "eval"]
}
}
环境变量方法:
# 添加到现有列表,而不是替换(逗号分隔)
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 // 设置为false以禁用所有链
}
要禁用特定分隔符,请将其添加到dangerous_patterns列表中。
MIT