README.md•8.74 kB
# Super Windows CLI MCP Server
An enhanced fork of the Windows CLI MCP Server providing unrestricted system access to Windows environments via a command-line interface (MCP).
**Based on:** [win-cli-mcp-server](https://github.com/SimonB97/win-cli-mcp-server) by SimonB97.
---
## ⚠️ CRITICAL SECURITY WARNING ⚠️
This server is designed to run with **SYSTEM-level privileges** on Windows. This grants it **complete and unrestricted access** to the entire operating system, including all files, processes, and configuration settings.
* **DO NOT** install or run this server unless you fully understand the implications of granting SYSTEM-level access.
* **ONLY** use this server in **highly trusted environments** where you have full control over network access.
* **NETWORK SECURITY IS PARAMOUNT:** Since application-level restrictions are minimal by design, rely heavily on firewalls, network segmentation, and strict access control lists (ACLs) to protect the machine running this server.
* **REVIEW THE CONFIGURATION CAREFULLY:** Pay close attention to `allowedPaths`, `blockedCommands`, and other security settings in `config.json`. A misconfiguration can easily expose your system.
**Use this software responsibly and at your own risk. The maintainers assume no liability for misuse or security breaches resulting from its use.**
---
## Features
* Complete access to Windows shell environments (PowerShell, CMD, Git Bash - configurable).
* Unrestricted command execution (configurable via `config.json`).
* Full file system access (configurable via `config.json`).
* SYSTEM-level service installation via NSSM for persistence and auto-recovery.
* Automatic service recovery features provided by NSSM.
* Network binding controls (intended, but primarily managed at the network/firewall level).
* Disabled PowerShell telemetry for enhanced privacy.
* Process reuse for performance (for shells).
* Extended timeouts for long-running operations (configurable).
## Prerequisites
Before you begin, ensure you have the following installed:
1. **Node.js:** Version 18.0.0 or later. Download from [nodejs.org](https://nodejs.org/). (Includes npm).
2. **NSSM (Non-Sucking Service Manager):** Required for reliable service installation. Download the latest version from [nssm.cc](https://nssm.cc/download).
## Installation (Using NSSM - Recommended)
This method installs the server as a persistent Windows service that runs with SYSTEM privileges and starts automatically.
1. **Clone or Download:**
* Clone this repository: `git clone <repository-url>`
* Or download the source code `.zip` and extract it to a suitable location (e.g., `C:\Servers\SuperWinCLIServer`). Avoid user profile folders.
2. **Place NSSM:**
* Download NSSM from [nssm.cc](https://nssm.cc/download).
* Extract the zip file.
* Copy the `nssm.exe` file from the appropriate architecture folder (`win32` or `win64`) into the **root directory** of this project (the same folder as `install-service.ps1`).
3. **Install Dependencies & Build:**
* Open a terminal (PowerShell or CMD) in the project's root directory.
* Run: `npm install`
* This command installs necessary Node.js packages and automatically runs `npm run build` to compile the TypeScript code into the `dist` folder.
4. **Configure `config.json`:**
* **Copy:** Make a copy of `config.sample.json` and name it `config.json` in the project's root directory.
* **Edit:** Open `config.json` and **carefully review and modify** the settings:
* `security.allowedPaths`: **CRITICAL!** Change this from the sample paths to the *actual* directories the server needs access to. For security, be as specific as possible. Start with the project directory itself if unsure (e.g., `"C:\\Servers\\SuperWinCLIServer"` - remember double backslashes `\\`). The service runs as SYSTEM, so paths must be valid for that account.
* `security.blockedCommands` / `blockedArguments`: Review the default lists. Add or remove commands/arguments based on your security policy.
* `shells`: Enable/disable shells (PowerShell, CMD, Git Bash) and verify the `command` path (especially for Git Bash).
* `ssh`: Configure if you intend to use the SSH execution feature (disabled by default).
* **Save** the `config.json` file.
5. **Run Installation Script:**
* Open **PowerShell as Administrator**.
* Navigate to the project's root directory (`cd C:\Servers\SuperWinCLIServer`).
* Execute the installation script: `.\install-service.ps1`
* This script uses NSSM to install and configure the `MCPServer` service to run `node.exe dist/index.js` as `LocalSystem`, starting automatically.
6. **Verify Service Status:**
* In the same administrative PowerShell window, run: `Get-Service MCPServer`
* The status should be `Running`. If it's `Stopped`, check the NSSM logs or Windows Event Viewer (Application and System logs) for errors.
## Configuration (`config.json`) Details
* **`security`**:
* `maxCommandLength`: Max characters allowed in a command string.
* `blockedCommands`: Array of command names (without extension) to block (case-insensitive).
* `blockedArguments`: Array of exact arguments to block (case-insensitive).
* `allowedPaths`: **Crucial setting.** Array of absolute paths. If `restrictWorkingDirectory` is true, commands can only be executed if their working directory starts with one of these paths. Paths are compared case-insensitively after normalization. Use double backslashes (e.g., `"C:\\Tools\\Scripts"`).
* `restrictWorkingDirectory`: Boolean. If true, enforce the `allowedPaths` check for the working directory. Highly recommended to keep `true`.
* `logCommands`: Boolean. If true, executed commands and their output (truncated) are stored in memory (up to `maxHistorySize`).
* `maxHistorySize`: Max number of commands to keep in the in-memory history.
* `commandTimeout`: Seconds before a running command is killed automatically.
* `enableInjectionProtection`: Boolean. If true, attempts to block shell operators (`&`, `|`, `;`, etc. defined per shell) in commands.
* **`shells`**: Configure available local shells (powershell, cmd, gitbash).
* `enabled`: Boolean. Allow use of this shell.
* `command`: Path to the shell executable.
* `args`: Array of default arguments passed to the shell before the user's command.
* `blockedOperators`: Array of strings/characters to block within commands for this specific shell (used if `enableInjectionProtection` is true).
* **`ssh`**: Configure remote command execution via SSH.
* `enabled`: Boolean. Enable the `ssh_execute` and `ssh_disconnect` tools.
* `connections`: Object containing named connection configurations (host, port, username, password/privateKeyPath).
* **Configuration Merging:** When `config.json` is loaded, if it contains a `security` or `shells` section, that entire section **replaces** the default configuration for that section. It does *not* merge individual fields within `security` or `shells`. The `ssh` section is merged more granularly. Ensure your `config.json` includes all necessary fields for these sections if you customize them.
## Service Management (NSSM)
Once installed via `install-service.ps1`, you can manage the service using standard Windows tools or NSSM commands from an **administrative PowerShell/CMD** in the project directory:
* **Start:** `Start-Service MCPServer` or `.\nssm.exe start MCPServer`
* **Stop:** `Stop-Service MCPServer` or `.\nssm.exe stop MCPServer`
* **Restart:** `Restart-Service MCPServer` or `.\nssm.exe restart MCPServer`
* **Status:** `Get-Service MCPServer` or `.\nssm.exe status MCPServer`
* **Edit Configuration (Advanced):** `.\nssm.exe edit MCPServer` (Opens the NSSM GUI editor)
* **View Configuration:** `.\nssm.exe dump MCPServer`
## Uninstallation (NSSM)
1. Open **PowerShell as Administrator**.
2. Navigate to the project's root directory.
3. Execute the uninstallation script: `.\uninstall-service.ps1`
4. This uses NSSM to stop and remove the `MCPServer` service.
## Alternative Execution (Manual/Debug)
You can run the server directly without installing it as a service for testing or debugging purposes:
1. Ensure you have run `npm install`.
2. Ensure `config.json` exists and is configured.
3. Open a normal terminal (PowerShell/CMD) in the project root.
4. Run: `npm run start`
5. The server will run in the foreground. Press `Ctrl + C` to stop it.
## License
This project is licensed under the MIT License - see the [LICENSE](LICENSE) file for details.