Command-line execution for MCP clients with command whitelists, path validation and working directory restrictions.
接入配置
选择客户端,复制配置,再按项目文档补齐环境变量。
claude mcp add cli --env ALLOWED_DIR='<ALLOWED_DIR>' --env ALLOWED_COMMANDS='<ALLOWED_COMMANDS>' --env ALLOWED_FLAGS='<ALLOWED_FLAGS>' --env COMMAND_TIMEOUT='<COMMAND_TIMEOUT>' --env MAX_COMMAND_LENGTH='<MAX_COMMAND_LENGTH>' --env ALLOW_SHELL_OPERATORS='<ALLOW_SHELL_OPERATORS>' -- uv run cli-mcp-server~/.codex/config.toml
[mcp_servers.cli]
command = "uv"
args = ["run", "cli-mcp-server"]
env = { ALLOWED_DIR = "<ALLOWED_DIR>", ALLOWED_COMMANDS = "<ALLOWED_COMMANDS>", ALLOWED_FLAGS = "<ALLOWED_FLAGS>", COMMAND_TIMEOUT = "<COMMAND_TIMEOUT>", MAX_COMMAND_LENGTH = "<MAX_COMMAND_LENGTH>", ALLOW_SHELL_OPERATORS = "<ALLOW_SHELL_OPERATORS>" }
# codex mcp add cli --env ALLOWED_DIR='<ALLOWED_DIR>' --env ALLOWED_COMMANDS='<ALLOWED_COMMANDS>' --env ALLOWED_FLAGS='<ALLOWED_FLAGS>' --env COMMAND_TIMEOUT='<COMMAND_TIMEOUT>' --env MAX_COMMAND_LENGTH='<MAX_COMMAND_LENGTH>' --env ALLOW_SHELL_OPERATORS='<ALLOW_SHELL_OPERATORS>' -- uv run cli-mcp-server~/.cursor/mcp.json
{
"mcpServers": {
"cli": {
"command": "uv",
"args": [
"run",
"cli-mcp-server"
],
"env": {
"ALLOWED_DIR": "<ALLOWED_DIR>",
"ALLOWED_COMMANDS": "<ALLOWED_COMMANDS>",
"ALLOWED_FLAGS": "<ALLOWED_FLAGS>",
"COMMAND_TIMEOUT": "<COMMAND_TIMEOUT>",
"MAX_COMMAND_LENGTH": "<MAX_COMMAND_LENGTH>",
"ALLOW_SHELL_OPERATORS": "<ALLOW_SHELL_OPERATORS>"
}
}
}
}.vscode/mcp.json
{
"servers": {
"cli": {
"type": "stdio",
"command": "uv",
"args": [
"run",
"cli-mcp-server"
],
"env": {
"ALLOWED_DIR": "<ALLOWED_DIR>",
"ALLOWED_COMMANDS": "<ALLOWED_COMMANDS>",
"ALLOWED_FLAGS": "<ALLOWED_FLAGS>",
"COMMAND_TIMEOUT": "<COMMAND_TIMEOUT>",
"MAX_COMMAND_LENGTH": "<MAX_COMMAND_LENGTH>",
"ALLOW_SHELL_OPERATORS": "<ALLOW_SHELL_OPERATORS>"
}
}
}
}~/.gemini/settings.json
{
"mcpServers": {
"cli": {
"command": "uv",
"args": [
"run",
"cli-mcp-server"
],
"env": {
"ALLOWED_DIR": "<ALLOWED_DIR>",
"ALLOWED_COMMANDS": "<ALLOWED_COMMANDS>",
"ALLOWED_FLAGS": "<ALLOWED_FLAGS>",
"COMMAND_TIMEOUT": "<COMMAND_TIMEOUT>",
"MAX_COMMAND_LENGTH": "<MAX_COMMAND_LENGTH>",
"ALLOW_SHELL_OPERATORS": "<ALLOW_SHELL_OPERATORS>"
}
}
}
}claude_desktop_config.json
{
"mcpServers": {
"cli": {
"command": "uv",
"args": [
"run",
"cli-mcp-server"
],
"env": {
"ALLOWED_DIR": "<ALLOWED_DIR>",
"ALLOWED_COMMANDS": "<ALLOWED_COMMANDS>",
"ALLOWED_FLAGS": "<ALLOWED_FLAGS>",
"COMMAND_TIMEOUT": "<COMMAND_TIMEOUT>",
"MAX_COMMAND_LENGTH": "<MAX_COMMAND_LENGTH>",
"ALLOW_SHELL_OPERATORS": "<ALLOW_SHELL_OPERATORS>"
}
}
}
}.trae/mcp.json
{
"mcpServers": {
"cli": {
"command": "uv",
"args": [
"run",
"cli-mcp-server"
],
"env": {
"ALLOWED_DIR": "<ALLOWED_DIR>",
"ALLOWED_COMMANDS": "<ALLOWED_COMMANDS>",
"ALLOWED_FLAGS": "<ALLOWED_FLAGS>",
"COMMAND_TIMEOUT": "<COMMAND_TIMEOUT>",
"MAX_COMMAND_LENGTH": "<MAX_COMMAND_LENGTH>",
"ALLOW_SHELL_OPERATORS": "<ALLOW_SHELL_OPERATORS>"
}
}
}
}需要的环境变量
ALLOWED_DIRALLOWED_COMMANDSALLOWED_FLAGSCOMMAND_TIMEOUTMAX_COMMAND_LENGTHALLOW_SHELL_OPERATORS
把占位值换成你自己的密钥;不要把密钥提交到代码仓库。