Skip to main content
Glama

MCP Command Server

# MCP Command Server Documentation ## Overview MCP Command Server is a secure Model Context Protocol (MCP) server implementation that allows controlled execution of system commands through Large Language Models (LLMs) like Claude. ## Table of Contents - [Installation](#installation) - [Security Guidelines](#security-guidelines) - [API Reference](#api-reference) - [Usage Examples](#usage-examples) - [Troubleshooting](#troubleshooting) ## Installation ### Prerequisites - Python 3.10 or higher - pip or uv package manager - Claude Desktop (for integration) - Visual Studio Code (recommended for development) ### Quick Install ```bash # Using uv (recommended) uv pip install mcp-command-server # Using pip pip install mcp-command-server ``` ### Development Setup 1. Clone the repository: ```bash git clone https://github.com/yourusername/mcp-command-server.git cd mcp-command-server ``` 2. Create and activate virtual environment: ```bash # Using uv uv venv source .venv/bin/activate # On Unix/macOS .venv\Scripts\activate # On Windows ``` 3. Install dependencies: ```bash uv pip install -e ".[dev]" ``` ### Claude Desktop Integration 1. Open Claude Desktop configuration: ```bash code ~/Library/Application\ Support/Claude/claude_desktop_config.json ``` 2. Add server configuration: ```json { "mcpServers": { "command-server": { "command": "uv", "args": ["run", "python", "-m", "mcp_command_server"], "env": { "ALLOWED_COMMANDS": "ls,pwd,echo" } } } } ``` ## Security Guidelines ### Command Execution Safety 1. **Whitelist Commands** - Only explicitly allowed commands can be executed - Configure through `ALLOWED_COMMANDS` environment variable - Separate multiple commands with commas 2. **Input Sanitization** - All command inputs are sanitized - Special characters are escaped - Path traversal is prevented 3. **User Confirmation** - Commands require explicit user approval - Clear display of command to be executed - Timeout for confirmation requests 4. **Audit Logging** - All command executions are logged - Includes timestamp, command, and result - Logs stored in `~/Library/Logs/Claude/mcp-command-server.log` ### Environment Variables | Variable | Description | Required | Default | | -------------------- | ----------------------------------------------- | -------- | ------- | | ALLOWED_COMMANDS | Comma-separated list of allowed commands | Yes | None | | LOG_LEVEL | Logging verbosity (DEBUG, INFO, WARNING, ERROR) | No | INFO | | CONFIRMATION_TIMEOUT | Seconds to wait for user confirmation | No | 30 | ## API Reference ### Tools #### `execute_command` Executes a system command from the allowed list. ```python @mcp.tool() async def execute_command(command: str, args: list[str]) -> str: """Execute a system command. Args: command: The command to execute (must be in whitelist) args: List of command arguments Returns: Command output as string Raises: SecurityError: If command not in whitelist ValidationError: If arguments invalid """ ``` #### `list_allowed_commands` Returns the list of allowed commands. ```python @mcp.tool() def list_allowed_commands() -> list[str]: """Get list of allowed commands. Returns: List of command names that can be executed """ ``` ### Resources #### `audit_log` Access the command execution audit log. ```python @mcp.resource("audit://log") def get_audit_log() -> str: """Get the command execution audit log. Returns: Formatted audit log entries """ ``` ## Usage Examples ### Basic Command Execution ```python # List directory contents response = await client.call_tool( "execute_command", { "command": "ls", "args": ["-la"] } ) # Print working directory response = await client.call_tool( "execute_command", { "command": "pwd", "args": [] } ) ``` ### Claude Desktop Interaction Example conversation with Claude: ``` Human: What files are in the current directory? Claude: I'll help you list the files in the current directory using the command server. [Tool call: execute_command with args: ["ls", "-la"]] Awaiting your confirmation to run: ls -la [Output after confirmation] total 56 drwxr-xr-x 10 user staff 320 Mar 14 15:30 . drwxr-xr-x 5 user staff 160 Mar 14 15:30 .. -rw-r--r-- 1 user staff 2516 Mar 14 15:30 README.md drwxr-xr-x 4 user staff 128 Mar 14 15:30 src drwxr-xr-x 4 user staff 128 Mar 14 15:30 tests Here's a breakdown of the files and directories in your current location: 1. README.md - Documentation file 2. src/ - Source code directory 3. tests/ - Test files directory Would you like me to examine any of these files or directories in more detail? ### Error Handling When using the command server, you may encounter these common errors: 1. **Command Not Allowed** ``` Error: Command 'rm' is not in the allowed commands list Solution: Add the command to ALLOWED_COMMANDS or use an allowed alternative ``` 2. **Invalid Arguments** ``` Error: Invalid argument format: contains unsafe characters Solution: Remove special characters or properly escape them ``` 3. **Timeout** ``` Error: User confirmation timeout after 30 seconds Solution: Respond to the confirmation prompt more quickly or adjust CONFIRMATION_TIMEOUT ```` ## Troubleshooting ### Common Issues #### Server Not Starting **Problem**: Claude Desktop can't start the command server. **Solutions**: 1. Verify Python installation: ```bash python --version # Should be 3.10 or higher ```` 2. Check configuration path: ```bash ls ~/Library/Application\ Support/Claude/claude_desktop_config.json ``` 3. Validate environment setup: ```bash echo $ALLOWED_COMMANDS # Should show allowed commands ``` #### Permission Errors **Problem**: Commands fail with permission errors. **Solutions**: 1. Check file permissions: ```bash ls -l /path/to/directory ``` 2. Verify user permissions: ```bash whoami groups ``` 3. Update file permissions if needed: ```bash chmod +r /path/to/file # Add read permission ``` #### Logging Issues **Problem**: Can't find command execution logs. **Solutions**: 1. Check log file location: ```bash ls ~/Library/Logs/Claude/mcp-command-server.log ``` 2. Verify logging configuration: ```bash echo $LOG_LEVEL ``` 3. Enable debug logging: ```bash export LOG_LEVEL=DEBUG ``` ### Getting Help 1. **Check Logs**: ```bash tail -f ~/Library/Logs/Claude/mcp-command-server.log ``` 2. **Issue Reporting**: - Visit our GitHub Issues page - Include log output - Describe your environment - List steps to reproduce 3. **Community Support**: - Join our Discord server - Post in GitHub Discussions - Check Stack Overflow tags ## Extending Commands ### Adding New Commands There are two ways to extend the available commands: 1. **Environment Configuration (Basic)** Add commands to the `ALLOWED_COMMANDS` environment variable: ```bash # In your shell or .env file export ALLOWED_COMMANDS="ls,pwd,echo,cat,grep,find" # Or in claude_desktop_config.json { "mcpServers": { "command-server": { "command": "uv", "args": ["run", "python", "-m", "mcp_command_server"], "env": { "ALLOWED_COMMANDS": "ls,pwd,echo,cat,grep,find" } } } } ``` 2. **Custom Command Configuration (Advanced)** Create a command configuration file (`commands.yaml`): ```yaml commands: ls: allowed_flags: ["-l", "-a", "-h", "-t"] allowed_paths: ["~/Documents", "~/Downloads"] description: "List directory contents" grep: allowed_flags: ["-i", "-v", "-n"] max_file_size: "10MB" description: "Search file contents" find: allowed_flags: ["-name", "-type"] excluded_paths: ["/etc", "/var"] description: "Search for files" ``` Then reference it in your configuration: ```json { "mcpServers": { "command-server": { "command": "uv", "args": ["run", "python", "-m", "mcp_command_server"], "env": { "COMMAND_CONFIG": "/path/to/commands.yaml" } } } } ``` ### Security Considerations When adding new commands: 1. **Risk Assessment** - Evaluate what the command can access - Consider potential misuse scenarios - Review command flags and options 2. **Access Control** - Limit commands to specific directories - Restrict dangerous flags - Consider read-only vs write operations 3. **Resource Limits** - Set timeouts for long-running commands - Limit output size - Restrict file size for operations ### Command Categories Here are common command categories you might want to add: 1. **File Operations** ``` cat, less, head, tail, grep, find ``` 2. **Directory Operations** ``` ls, pwd, cd, tree, du ``` 3. **System Information** ``` df, top, ps, free, uptime ``` 4. **Network Tools** ``` ping, curl, wget, netstat ``` 5. **Text Processing** ``` grep, sed, awk, sort, uniq ``` ### Example: Adding Git Commands To add Git support: 1. Add commands to allowlist: ```bash export ALLOWED_COMMANDS="git-status,git-log,git-branch" ``` 2. Create command configurations: ```yaml commands: git-status: allowed_flags: ["--short", "--branch"] working_dir: "~/projects" description: "Show working tree status" git-log: allowed_flags: ["--oneline", "--graph", "-n"] max_entries: 100 description: "Show commit logs" ``` 3. Implement custom validation: ```python @mcp.tool() async def execute_git_command(command: str, args: list[str]) -> str: """Execute git commands safely. Args: command: Git subcommand (status, log, etc.) args: Command arguments Returns: Command output """ # Your implementation here ``` ### Testing New Commands Always test new commands thoroughly: 1. **Unit Tests** ```python def test_git_command_validation(): # Test command validation assert validate_git_command("status", ["--short"]) is True assert validate_git_command("push", []) is False # Dangerous command ``` 2. **Integration Tests** ```python async def test_git_command_execution(): # Test actual execution result = await execute_git_command("status", ["--short"]) assert result.startswith("## main") ``` ### Common Issues 1. **Permission Errors** - Make sure the server has necessary permissions - Check file/directory ownership - Verify user permissions 2. **Command Not Found** - Verify command is in system PATH - Check command spelling - Confirm command installation 3. **Configuration Issues** - Validate YAML syntax - Check file paths - Verify environment variables ## License This project is licensed under the MIT License. See the LICENSE file for details.

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/Andrew-Beniash/mcp-command-server'

If you have feedback or need assistance with the MCP directory API, please join our Discord server