Command-Line MCP Server
# Command-Line MCP Server
[](https://badge.fury.io/py/cmd-line-mcp)
[](https://pypi.org/project/cmd-line-mcp/)
[](https://opensource.org/licenses/MIT)
An MCP server that lets AI assistants run terminal commands safely. Commands are categorized (read/write/system), directories are whitelisted, and dangerous patterns are blocked automatically.
---
## Quick Start
```bash
pip install cmd-line-mcp
# Or from source
git clone https://github.com/andresthor/cmd-line-mcp.git
cd cmd-line-mcp
pip install -e .
```
Run the server:
```bash
cmd-line-mcp # default config
cmd-line-mcp --config config.json # custom config
```
---
## Claude Desktop Setup
Add to `~/Library/Application Support/Claude/claude_desktop_config.json`:
```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"
}
}
}
}
```
Restart Claude Desktop after saving.
> [!TIP]
> Set `require_session_id: false` to prevent approval loops in Claude Desktop.
---
## How It Works
Commands go through a validation pipeline before execution:
1. **Pattern matching** — blocks dangerous constructs (`system()`, shell escapes, etc.)
2. **Command classification** — each command must be in the read, write, system, or blocked list
3. **Directory check** — target directory must be whitelisted or session-approved
4. **Approval check** — write/system commands require session approval
Pipes, semicolons, and `&` are supported — each segment is validated independently.
### What's Allowed
| Category | Commands | Approval |
|:------------|:---------------------------------------------------------------|:--------------:|
| **Read** | `ls`, `cat`, `grep`, `find`, `head`, `tail`, `sort`, `wc`, … | Auto |
| **Write** | `cp`, `mv`, `rm`, `mkdir`, `touch`, `chmod`, `awk`, `sed`, … | Required |
| **System** | `ps`, `ping`, `curl`, `ssh`, `xargs`, … | Required |
| **Blocked** | `sudo`, `bash`, `sh`, `python`, `eval`, … | Always denied |
### What's Blocked
Shells, scripting interpreters, and known command-execution vectors are blocked — including indirect execution through `awk system()`, `sed /e`, `find -exec`, `tar --checkpoint-action`, `env`, and `xargs`. See [docs/SECURITY.md](docs/SECURITY.md) for the full list.
---
## Configuration
The server works out of the box with sensible defaults. Customize via JSON config, environment variables, or `.env` files:
```bash
# Whitelist directories
export CMD_LINE_MCP_SECURITY_WHITELISTED_DIRECTORIES="/projects,/var/data"
# Add commands (merges with defaults)
export CMD_LINE_MCP_COMMANDS_READ="jq,rg"
```
See [docs/CONFIGURATION.md](docs/CONFIGURATION.md) for full configuration reference, MCP tool documentation, and directory security details.
---
## License
MIT
TDQS
Scored across 8 tools
Most tools have distinct purposes, such as approve_command_type vs. approve_directory, and execute_command vs. execute_read_command. However, get_command_help and list_available_commands could be confused as both provide information about commands, though their descriptions clarify that one is detailed help and the other is a categorized list.
All tool names follow a consistent verb_noun pattern with snake_case, such as approve_command_type, execute_command, and get_configuration. There are no deviations in naming conventions, making the set predictable and readable.
With 8 tools, the server is well-scoped for a command-line management system. Each tool serves a clear purpose, such as execution, approval, and information retrieval, without being overly sparse or bloated.
The tool set covers core aspects of command-line management, including command execution, approval workflows, and configuration. A minor gap is the lack of a tool to revoke approvals or manage sessions beyond listing, but agents can likely work around this with existing tools.