CLI MCP Server
一个安全的模型上下文协议(MCP)服务器实现,用于执行受控的命令行操作,并具备全面的安全功能。
目录
概述
该MCP服务器支持安全命令行执行,具备强大的安全措施,包括命令白名单、路径验证和执行控制。非常适合在保持安全性的同时,为LLM应用程序提供受控的CLI访问。
功能
- 🔒 安全的命令执行,严格验证
- ⚙️ 可配置的命令和标志白名单,支持'全部'选项
- 🛡️ 防止路径遍历和路径验证
- 🚫 防止Shell操作符注入
- ⏱️ 执行超时和长度限制
- 📝 详细错误报告
- 🔄 支持异步操作
- 🎯 工作目录限制和验证
配置
使用环境变量配置服务器:
| 变量 | 描述 | 默认 |
|---|---|---|
ALLOWED_DIR | 命令执行的基目录(必需) | 无(必需) |
ALLOWED_COMMANDS | 允许的命令列表,用逗号分隔,或'全部' | ls,cat,pwd |
ALLOWED_FLAGS | 允许的标志列表,用逗号分隔,或'全部' | -l,-a,--help |
MAX_COMMAND_LENGTH | 最大命令字符串长度 | 1024 |
COMMAND_TIMEOUT | 命令执行超时(秒) | 30 |
ALLOW_SHELL_OPERATORS | 允许Shell操作符(&&, |, >, 等) | false |
注意:将ALLOWED_COMMANDS或ALLOWED_FLAGS设置为'全部'将允许任何命令或标志。
安装
通过Smithery自动为Claude Desktop安装CLI MCP Server:
npx @smithery/cli install cli-mcp-server --client claude
可用工具
run_command
在允许的目录中执行白名单中的CLI命令。
输入模式:
{
"command": {
"type": "string",
"description": "要执行的单一命令(例如,'ls -l'或'cat file.txt')"
}
}
安全说明:
- 默认不支持Shell操作符(&&, |, >, >>),但可以通过
ALLOW_SHELL_OPERATORS=true启用 - 命令必须白名单,除非
ALLOWED_COMMANDS='all' - 标志必须白名单,除非
ALLOWED_FLAGS='all' - 所有路径都必须验证在
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清除缓存。
安全功能
- ✅ 命令白名单强制执行,支持'全部'选项
- ✅ 标志验证,支持'全部'选项
- ✅ 防止路径遍历和规范化
- ✅ 阻止Shell操作符(通过
ALLOW_SHELL_OPERATORS=true可选支持) - ✅ 命令长度限制
- ✅ 执行超时
- ✅ 工作目录限制
- ✅ 符链接解析和验证
错误处理
服务器为以下情况提供详细错误消息:
- 安全违规(CommandSecurityError)
- 命令超时(CommandTimeoutError)
- 无效的命令格式
- 路径安全违规
- 执行失败(CommandExecutionError)
- 一般命令错误(CommandError)
开发
前提条件
- Python 3.10+
- MCP协议库
构建和发布
准备用于分发的包:
-
同步依赖项并更新锁文件:
uv sync -
构建包分发:
uv build这将在
dist/目录中创建源和轮分发。 -
发布到PyPI:
uv publish --token {{YOUR_PYPI_API_TOKEN}}
调试
由于MCP服务器通过stdio运行,调试可能具有挑战性。为获得最佳调试体验,我们强烈建议使用MCP Inspector。
您可以通过npm使用以下命令启动MCP Inspector:
npx @modelcontextprotocol/inspector uv --directory {{your source code local directory}}/cli-mcp-server run cli-mcp-server
启动后,Inspector将显示一个URL,您可以在浏览器中访问它以开始调试。
许可证
本项目根据MIT许可证授权 - 详细内容请参阅LICENSE文件。
如需更多信息或支持,请在项目仓库中打开问题。
