# MCP Server CLI A CLI tool that creates a local Model Context Protocol (MCP) server for developers, enabling custom tool definitions in YAML/JSON with built-in file operations, git commands, shell execution, and local LLM support for offline AI coding assistant integration. ## Features - **MCP Protocol Support**: Full Model Context Protocol server implementation - **Built-in Tools**: File operations, git commands, and shell execution - **Custom Tools**: Define your own tools in YAML/JSON format - **Local LLM Integration**: Connect to Ollama, LM Studio, or other local LLMs - **Security**: Whitelisted commands and blocked paths for safe execution - **CLI Interface**: Easy-to-use command-line interface ## Installation ```bash pip install mcp-server-cli ``` Or from source: ```bash git clone https://7000pct.gitea.bloupla.net/7000pctAUTO/mcp-server-cli.git cd mcp-server-cli pip install -e . ``` ## Quick Start 1. Initialize a configuration file: ```bash mcp-server config init -o config.yaml ``` 2. Start the server: ```bash mcp-server server start --port 3000 ``` 3. The server will be available at `http://127.0.0.1:3000` ## CLI Commands ### Server Management ```bash # Start the MCP server mcp-server server start --port 3000 --host 127.0.0.1 # Check server status mcp-server server status # Health check mcp-server health ``` ### Tool Management ```bash # List available tools mcp-server tool list # Add a custom tool mcp-server tool add path/to/tool.yaml # Remove a custom tool mcp-server tool remove tool_name ``` ### Configuration ```bash # Show current configuration mcp-server config show # Generate a configuration file mcp-server config init -o config.yaml ``` ## Configuration Create a `config.yaml` file: ```yaml server: host: "127.0.0.1" port: 3000 log_level: "INFO" llm: enabled: false base_url: "http://localhost:11434" model: "llama2" security: allowed_commands: - ls - cat - echo - git blocked_paths: - /etc - /root ``` ### Environment Variables | Variable | Description | |----------|-------------| | `MCP_PORT` | Server port | | `MCP_HOST` | Server host | | `MCP_LOG_LEVEL` | Logging level (DEBUG, INFO, WARNING, ERROR) | | `MCP_LLM_URL` | Local LLM base URL | ## Built-in Tools ### File Operations | Tool | Description | |------|-------------| | `file_tools` | Read, write, list, search, glob files | | `read_file` | Read file contents | | `write_file` | Write content to a file | | `list_directory` | List directory contents | | `glob_files` | Find files matching a pattern | ### Git Operations | Tool | Description | |------|-------------| | `git_tools` | Git operations: status, log, diff, branch | | `git_status` | Show working tree status | | `git_log` | Show commit history | | `git_diff` | Show changes between commits | ### Shell Execution | Tool | Description | |------|-------------| | `shell_tools` | Execute shell commands safely | | `execute_command` | Execute a shell command | ## Custom Tools Define custom tools in YAML: ```yaml name: my_tool description: Description of the tool input_schema: type: object properties: param1: type: string description: First parameter required: true param2: type: integer description: Second parameter default: 10 required: - param1 annotations: read_only_hint: true destructive_hint: false ``` Or in JSON: ```json { "name": "example_tool", "description": "An example tool", "input_schema": { "type": "object", "properties": { "message": { "type": "string", "description": "The message to process", "required": true } }, "required": ["message"] } } ``` ## Local LLM Integration Connect to local LLMs (Ollama, LM Studio, llama.cpp): ```yaml llm: enabled: true base_url: "http://localhost:11434" model: "llama2" temperature: 0.7 max_tokens: 2048 ``` ## Claude Desktop Integration Add to `claude_desktop_config.json`: ```json { "mcpServers": { "mcp-server": { "command": "mcp-server", "args": ["server", "start", "--port", "3000"] } } } ``` ## Cursor Integration Add to Cursor settings (JSON): ```json { "mcpServers": { "mcp-server": { "command": "mcp-server", "args": ["server", "start", "--port", "3000"] } } } ``` ## Security Considerations - Shell commands are whitelisted by default - Blocked paths prevent access to sensitive directories - Command timeout prevents infinite loops - All operations are logged ## API Reference ### Endpoints - `GET /health` - Health check - `GET /api/tools` - List tools - `POST /api/tools/call` - Call a tool - `POST /mcp` - MCP protocol endpoint ### MCP Protocol ```json { "jsonrpc": "2.0", "id": 1, "method": "initialize", "params": { "protocol_version": "2024-11-05", "capabilities": {}, "client_info": {"name": "client"} } } ``` ### Example: Read a File ```bash curl -X POST http://localhost:3000/api/tools/call \ -H "Content-Type: application/json" \ -d '{"name": "read_file", "arguments": {"path": "/path/to/file.txt"}}' ``` ### Example: List Tools ```bash curl http://localhost:3000/api/tools ``` ## Development ```bash # Install development dependencies pip install -e ".[dev]" # Run tests pytest tests/ -v # Run linting ruff check . ``` ## License MIT License