Skip to main content
Glama

simple-mcp-runner

by mjmorales
README.md6.46 kB
# Simple MCP Runner A production-ready Model Context Protocol (MCP) server that provides Language Learning Models (LLMs) with a safe interface to discover and execute system commands on the local machine. ## Features - **Command Discovery**: Pattern-based discovery of available system commands - **Safe Execution**: Configurable security policies, timeouts, and resource limits - **Structured Configuration**: YAML-based configuration with validation - **Production Logging**: Structured logging with multiple output formats - **Graceful Shutdown**: Proper signal handling and cleanup - **Comprehensive Testing**: Unit and integration tests for critical functionality - **Clean Architecture**: Modular design with separation of concerns ## Installation ### From Source ```bash go install github.com/mjmorales/simple-mcp-runner@latest ``` ### Building Locally ```bash git clone https://github.com/mjmorales/simple-mcp-runner.git cd simple-mcp-runner go build -o simple-mcp-runner ``` ## Quick Start 1. Run with default configuration: ```bash simple-mcp-runner run ``` 2. Run with custom configuration: ```bash simple-mcp-runner run --config config.yaml ``` 3. Run with debug logging: ```bash simple-mcp-runner run --log-level debug ``` ## Configuration Create a `config.yaml` file to customize the server behavior: ```yaml app: my-mcp-server transport: stdio # Define custom commands commands: - name: list_files description: List files in current directory command: ls args: ["-la"] - name: show_date description: Show current date and time command: date # Security settings security: # Maximum command length max_command_length: 1000 # Disable shell expansion for safety disable_shell_expansion: true # Block dangerous commands blocked_commands: - rm - dd - mkfs - shutdown - reboot # Or use a whitelist approach # allowed_commands: # - echo # - ls # - cat # Restrict execution to specific paths # allowed_paths: # - /home/user/projects # - /tmp # Execution limits execution: default_timeout: 30s max_timeout: 5m max_concurrent: 10 max_output_size: 10485760 # 10MB kill_timeout: 5s # Logging configuration logging: level: info # debug, info, warn, error format: text # text, json output: stderr include_source: false # Command discovery settings discovery: max_results: 100 common_commands: - ls - cat - grep - find - git - npm - go - python - node ``` ## Usage ### CLI Commands #### Run the MCP Server ```bash simple-mcp-runner run [flags] Flags: -c, --config string Path to configuration file --log-level string Log level (debug, info, warn, error) (default "info") --log-format string Log format (text, json) (default "text") -h, --help Help for run ``` #### Validate Configuration ```bash simple-mcp-runner validate --config config.yaml ``` #### Show Version ```bash simple-mcp-runner version ``` ### MCP Tools The server exposes the following tools via the Model Context Protocol: #### 1. Command Discovery - **Name**: `discover_commands` - **Description**: Discover available system commands - **Parameters**: - `pattern` (optional): Filter pattern (e.g., "git*", "npm") - `max_results` (optional): Limit number of results - `include_desc` (optional): Include command descriptions #### 2. Command Execution - **Name**: `execute_command` - **Description**: Execute a system command - **Parameters**: - `command` (required): Command to execute - `args` (optional): Command arguments - `workdir` (optional): Working directory - `timeout` (optional): Execution timeout #### 3. Configured Commands Custom commands defined in the configuration file are exposed as individual tools. ## Security Considerations This tool is designed for **local development use only**. Security features include: 1. **Command Blocking**: Dangerous commands are blocked by default 2. **Shell Expansion Protection**: Prevents shell injection attacks 3. **Path Restrictions**: Limit execution to specific directories 4. **Resource Limits**: Prevent resource exhaustion 5. **Timeout Protection**: Commands have configurable timeouts 6. **Output Limits**: Prevent memory exhaustion from large outputs ## Architecture The project follows clean architecture principles: ``` . ├── cmd/ # CLI commands │ ├── root.go │ ├── run.go │ ├── validate.go │ └── version.go ├── internal/ # Private packages │ ├── config/ # Configuration management │ ├── discovery/ # Command discovery │ ├── errors/ # Error handling │ ├── executor/ # Command execution │ ├── logger/ # Structured logging │ └── server/ # MCP server implementation ├── pkg/ # Public packages │ └── types/ # Shared types ├── config.yaml # Example configuration ├── go.mod ├── go.sum └── main.go ``` ## Development ### Running Tests ```bash # Run all tests go test ./... # Run with coverage go test -cover ./... # Run specific package tests go test ./internal/executor ``` ### Building with Version Info ```bash VERSION=$(git describe --tags --always --dirty) COMMIT=$(git rev-parse --short HEAD) BUILD_TIME=$(date -u '+%Y-%m-%d %H:%M:%S') go build -ldflags "-X 'github.com/mjmorales/simple-mcp-runner/cmd.Version=$VERSION' \ -X 'github.com/mjmorales/simple-mcp-runner/cmd.Commit=$COMMIT' \ -X 'github.com/mjmorales/simple-mcp-runner/cmd.BuildTime=$BUILD_TIME'" \ -o simple-mcp-runner ``` ### Code Quality The codebase follows Go best practices: - Comprehensive error handling with context - Structured logging for debugging - Proper resource cleanup and timeouts - Thread-safe operations - Extensive test coverage ## Contributing Contributions are welcome! Please ensure: 1. Code follows Go conventions 2. Tests are included for new functionality 3. Documentation is updated as needed 4. Security implications are considered ## License [MIT License](LICENSE) ## Acknowledgments Built using: - [Cobra](https://github.com/spf13/cobra) for CLI - [Model Context Protocol SDK](https://github.com/modelcontextprotocol/go-sdk) for MCP support - Go standard library for robust system interaction

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/mjmorales/simple-mcp-runner'

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