by simon-ami
Secure Model Context Protocol server that enables command‑line interactions on Windows, supporting PowerShell, CMD, Git Bash and remote SSH operations.
Provides a Model Context Protocol (MCP) server for Windows that allows MCP clients to execute commands in PowerShell, Command Prompt, Git Bash, or on remote systems via SSH. It includes extensive security controls such as command and argument blocking, working‑directory restrictions, command length limits, and injection protection.
{
"mcpServers": {
"windows-cli": {
"command": "npx",
"args": ["-y", "@simonb97/server-win-cli"]
}
}
}
config.json
(or copy config.json.example
). You can generate one with:npx @simonb97/server-win-cli --init-config ./config.json
Place the file in the current directory, specify a custom path with --config
, or store it in ~/.win-cli-mcp/config.json
.
3. Integration with Claude Desktop – Add an entry to claude_desktop_config.json
:
{
"mcpServers": {
"windows-cli": {
"command": "npx",
"args": ["-y", "@simonb97/server-win-cli"]
}
}
}
Use the optional --config
flag if you have a custom configuration file.
4. Running – Launch the server via the configured command. MCP clients will then be able to invoke the provided tools (e.g., execute_command
, ssh_execute
).
Q: Is the project still maintained?\nA: The repository is marked as deprecated. A maintained alternative is available at https://github.com/wonderwhy-er/DesktopCommanderMCP
.
Q: Which npm command should I use to start the server?\nA: Use npx -y @simonb97/server-win-cli
(or include it in your Claude Desktop configuration as shown above).
Q: How do I restrict the server to a specific directory?\nA: Set "restrictWorkingDirectory": true
and list the allowed directories under "allowedPaths"
in the configuration file.
Q: Can I disable SSH support?\nA: Yes, set "ssh": { "enabled": false }
in the config.
Q: Where does the server look for the configuration file?\nA: It checks (1) the path supplied via --config
, (2) ./config.json
in the current folder, then (3) ~/.win-cli-mcp/config.json
.
Q: How are sensitive values like passwords handled?\nA: Passwords are masked (********
) in the exposed MCP resources.
[!CAUTION] PROJECT DEPRECATED - No longer maintained. Use https://github.com/wonderwhy-er/DesktopCommanderMCP instead for similar functionality.
MCP server for secure command-line interactions on Windows systems, enabling controlled access to PowerShell, CMD, Git Bash shells, and remote systems via SSH. It allows MCP clients (like Claude Desktop) to perform operations on your system, similar to Open Interpreter.
[!IMPORTANT] This MCP server provides direct access to your system's command line interface and remote systems via SSH. When enabled, it grants access to your files, environment variables, command execution capabilities, and remote server management.
- Review and restrict allowed paths and SSH connections
- Enable directory restrictions
- Configure command blocks
- Consider security implications
See Configuration for more details.
See the API section for more details on the tools and resources the server provides to MCP clients.
Note: The server will only allow operations within configured directories, with allowed commands, and on configured SSH connections.
Add this to your claude_desktop_config.json
:
{
"mcpServers": {
"windows-cli": {
"command": "npx",
"args": ["-y", "@simonb97/server-win-cli"]
}
}
}
For use with a specific config file, add the --config
flag:
{
"mcpServers": {
"windows-cli": {
"command": "npx",
"args": [
"-y",
"@simonb97/server-win-cli",
"--config",
"path/to/your/config.json"
]
}
}
}
After configuring, you can:
The server uses a JSON configuration file to customize its behavior. You can specify settings for security controls, shell configurations, and SSH connections.
a) copy config.json.example
to config.json
, or
b) run:
npx @simonb97/server-win-cli --init-config ./config.json
--config
flag to point to your config file as described in the Usage with Claude Desktop section.The server looks for configuration in the following locations (in order):
--config
flagIf no configuration file is found, the server will use a default (restricted) configuration:
Note: The default configuration is designed to be restrictive and secure. Find more details on each setting in the Configuration Settings section.
{
"security": {
"maxCommandLength": 2000,
"blockedCommands": [
"rm",
"del",
"rmdir",
"format",
"shutdown",
"restart",
"reg",
"regedit",
"net",
"netsh",
"takeown",
"icacls"
],
"blockedArguments": [
"--exec",
"-e",
"/c",
"-enc",
"-encodedcommand",
"-command",
"--interactive",
"-i",
"--login",
"--system"
],
"allowedPaths": ["User's home directory", "Current working directory"],
"restrictWorkingDirectory": true,
"logCommands": true,
"maxHistorySize": 1000,
"commandTimeout": 30,
"enableInjectionProtection": true
},
"shells": {
"powershell": {
"enabled": true,
"command": "powershell.exe",
"args": ["-NoProfile", "-NonInteractive", "-Command"],
"blockedOperators": ["&", "|", ";", "`"]
},
"cmd": {
"enabled": true,
"command": "cmd.exe",
"args": ["/c"],
"blockedOperators": ["&", "|", ";", "`"]
},
"gitbash": {
"enabled": true,
"command": "C:\\Program Files\\Git\\bin\\bash.exe",
"args": ["-c"],
"blockedOperators": ["&", "|", ";", "`"]
}
},
"ssh": {
"enabled": false,
"defaultTimeout": 30,
"maxConcurrentSessions": 5,
"keepaliveInterval": 10000,
"keepaliveCountMax": 3,
"readyTimeout": 20000,
"connections": {}
}
}
The configuration file is divided into three main sections: security
, shells
, and ssh
.
{
"security": {
// Maximum allowed length for any command
"maxCommandLength": 1000,
// Commands to block - blocks both direct use and full paths
// Example: "rm" blocks both "rm" and "C:\\Windows\\System32\\rm.exe"
// Case-insensitive: "del" blocks "DEL.EXE", "del.cmd", etc.
"blockedCommands": [
"rm", // Delete files
"del", // Delete files
"rmdir", // Delete directories
"format", // Format disks
"shutdown", // Shutdown system
"restart", // Restart system
"reg", // Registry editor
"regedit", // Registry editor
"net", // Network commands
"netsh", // Network commands
"takeown", // Take ownership of files
"icacls" // Change file permissions
],
// Arguments that will be blocked when used with any command
// Note: Checks each argument independently - "cd warm_dir" won't be blocked just because "rm" is in blockedCommands
"blockedArguments": [
"--exec", // Execution flags
"-e", // Short execution flags
"/c", // Command execution in some shells
"-enc", // PowerShell encoded commands
"-encodedcommand", // PowerShell encoded commands
"-command", // Direct PowerShell command execution
"--interactive", // Interactive mode which might bypass restrictions
"-i", // Short form of interactive
"--login", // Login shells might have different permissions
"--system" // System level operations
],
// List of directories where commands can be executed
"allowedPaths": ["C:\\Users\\YourUsername", "C:\\Projects"],
// If true, commands can only run in allowedPaths
"restrictWorkingDirectory": true,
// If true, saves command history
"logCommands": true,
// Maximum number of commands to keep in history
"maxHistorySize": 1000,
// Timeout for command execution in seconds (default: 30)
"commandTimeout": 30,
// Enable or disable protection against command injection (covers ;, &, |, \`)
"enableInjectionProtection": true
}
}
{
"shells": {
"powershell": {
// Enable/disable this shell
"enabled": true,
// Path to shell executable
"command": "powershell.exe",
// Default arguments for the shell
"args": ["-NoProfile", "-NonInteractive", "-Command"],
// Optional: Specify which command operators to block
"blockedOperators": ["&", "|", ";", "`"] // Block all command chaining
},
"cmd": {
"enabled": true,
"command": "cmd.exe",
"args": ["/c"],
"blockedOperators": ["&", "|", ";", "`"] // Block all command chaining
},
"gitbash": {
"enabled": true,
"command": "C:\\Program Files\\Git\\bin\\bash.exe",
"args": ["-c"],
"blockedOperators": ["&", "|", ";", "`"] // Block all command chaining
}
}
}
{
"ssh": {
// Enable/disable SSH functionality
"enabled": false,
// Default timeout for SSH commands in seconds
"defaultTimeout": 30,
// Maximum number of concurrent SSH sessions
"maxConcurrentSessions": 5,
// Interval for sending keepalive packets (in milliseconds)
"keepaliveInterval": 10000,
// Maximum number of failed keepalive attempts before disconnecting
"keepaliveCountMax": 3,
// Timeout for establishing SSH connections (in milliseconds)
"readyTimeout": 20000,
// SSH connection profiles
"connections": {
// NOTE: these examples are not set in the default config!
// Example: Local Raspberry Pi
"raspberry-pi": {
"host": "raspberrypi.local", // Hostname or IP address
"port": 22, // SSH port
"username": "pi", // SSH username
"password": "raspberry", // Password authentication (if not using key)
"keepaliveInterval": 10000, // Override global keepaliveInterval
"keepaliveCountMax": 3, // Override global keepaliveCountMax
"readyTimeout": 20000 // Override global readyTimeout
},
// Example: Remote server with key authentication
"dev-server": {
"host": "dev.example.com",
"port": 22,
"username": "admin",
"privateKeyPath": "C:\\Users\\YourUsername\\.ssh\\id_rsa", // Path to private key
"keepaliveInterval": 10000,
"keepaliveCountMax": 3,
"readyTimeout": 20000
}
}
}
}
execute_command
shell
(string): Shell to use ("powershell", "cmd", or "gitbash")command
(string): Command to executeworkingDir
(optional string): Working directoryget_command_history
limit
(optional number)ssh_execute
connectionId
(string): ID of the SSH connection to usecommand
(string): Command to executessh_disconnect
connectionId
(string): ID of the SSH connection to disconnectcreate_ssh_connection
connectionId
(string): ID for the new SSH connectionconnectionConfig
(object): Connection configuration details including host, port, username, and either password or privateKeyPathread_ssh_connections
update_ssh_connection
connectionId
(string): ID of the SSH connection to updateconnectionConfig
(object): New connection configuration detailsdelete_ssh_connection
connectionId
(string): ID of the SSH connection to deleteget_current_directory
SSH Connections
ssh://{connectionId}
ssh://raspberry-pi
shows configuration for the "raspberry-pi" connectionSSH Configuration
ssh://config
Current Directory
cli://currentdir
CLI Configuration
cli://config
The following security features are hard-coded into the server and cannot be disabled:
These security features are configurable through the config.json file:
blockedCommands
array are blocked (default includes dangerous commands like rm, del, format)blockedArguments
array are blocked (default includes potentially dangerous flags)enableInjectionProtection: true
)restrictWorkingDirectory: true
)logCommands: true
)These are not features but important security considerations to be aware of:
allowedPaths
to prevent access to sensitive dataThis project is licensed under the MIT License - see the LICENSE file for details.
Please log in to share your review and rating for this MCP.
{ "mcpServers": { "windows-cli": { "command": "npx", "args": [ "-y", "@simonb97/server-win-cli" ], "env": {} } } }
Explore related MCPs that share similar capabilities and solve comparable challenges
by zed-industries
A high‑performance, multiplayer code editor designed for speed and collaboration.
by modelcontextprotocol
Model Context Protocol Servers
by modelcontextprotocol
A Model Context Protocol server for Git repository interaction and automation.
by modelcontextprotocol
A Model Context Protocol server that provides time and timezone conversion capabilities.
by cline
An autonomous coding assistant that can create and edit files, execute terminal commands, and interact with a browser directly from your IDE, operating step‑by‑step with explicit user permission.
by continuedev
Enables faster shipping of code by integrating continuous AI agents across IDEs, terminals, and CI pipelines, offering chat, edit, autocomplete, and customizable agent workflows.
by upstash
Provides up-to-date, version‑specific library documentation and code examples directly inside LLM prompts, eliminating outdated information and hallucinated APIs.
by github
Connects AI tools directly to GitHub, enabling natural‑language interactions for repository browsing, issue and pull‑request management, CI/CD monitoring, code‑security analysis, and team collaboration.
by daytonaio
Provides a secure, elastic infrastructure that creates isolated sandboxes for running AI‑generated code with sub‑90 ms startup, unlimited persistence, and OCI/Docker compatibility.