MCP Connector

Securely Execute Commands on Windows and Remote Systems

A deprecated MCP server for secure PowerShell, CMD, Git Bash, and SSH command execution on Windows - use DesktopCommanderMCP instead.

Works with gitssh

91
Spark score
out of 100
Updated 11 months ago
Version 1.0.0
Models
universal

Add to Favorites

Why it matters

Gain controlled command-line access to Windows systems (PowerShell, CMD, Git Bash) and remote machines via SSH. This asset provides robust security features for safe execution and management.

Outcomes

What it gets done

01

Execute commands in specified shells (PowerShell, CMD, Git Bash)

02

Manage SSH connections for remote command execution

03

Track command history and audit access

04

Enforce security policies like command blocking and path restrictions

Install

Add it to your toolbox

Run in your project directory:

curl -fsSL https://spark.entire.vc/get/vb-windows-cli | bash

Capabilities

Tools your agent gets

execute_command

Execute a command in the specified shell (PowerShell, CMD, or Git Bash) with optional working directory

get_command_history

Retrieve the history of executed commands with an optional limit parameter

ssh_execute

Execute a command on a remote system via SSH using a configured connection

ssh_disconnect

Disconnect from an SSH server using the connection ID

create_ssh_connection

Create a new SSH connection with configuration details

read_ssh_connections

Read all configured SSH connections from the configuration

update_ssh_connection

Update an existing SSH connection configuration

delete_ssh_connection

Delete an SSH connection using the connection ID

get_current_directory

Get the server's current working directory

Overview

Windows CLI MCP Server

A deprecated MCP server for restricted Windows shell (PowerShell/CMD/Git Bash) and SSH command execution with configurable security blocking. Deprecated and unmaintained - use DesktopCommanderMCP for new setups. When active, requires careful path and SSH connection restriction before enabling.

What it does

This MCP server enables controlled command-line access on Windows systems, letting an MCP client like Claude Desktop execute commands in PowerShell, Command Prompt, or Git Bash, and on remote systems via SSH - similar in spirit to Open Interpreter. Access is governed by a JSON configuration file covering three areas: security (blocked commands and arguments, allowed working-directory paths, command length limits, logging, and injection protection), shells (which of PowerShell/CMD/Git Bash are enabled, their executable paths, and blocked shell operators like &, |, ;), and SSH (default timeouts, concurrent session limits, keepalive settings, and named connection profiles with host/port/credentials).

Built-in security that cannot be disabled includes case-insensitive command blocking, full-path parsing to block disguised binaries (blocking C:\Windows\System32\rm.exe if rm is blocked), false-positive avoidance (warm_dir isn't blocked just because rm is blocked), input validation, proper process termination, and automatic password masking in resources. The default configuration is deliberately restrictive, blocking commands like rm, del, format, shutdown, reg, and netsh, and arguments like -enc, -command, and --interactive. It also blocks the shell chaining operators &, |, ;, and backtick across PowerShell, CMD, and Git Bash by default, caps command length at 2000 characters, enforces a 30-second command timeout, and keeps a history of up to 1000 executed commands with their outputs.

When to use - and when NOT to

This project is deprecated and no longer maintained. The maintainer directs users to DesktopCommanderMCP for equivalent functionality going forward - only use this server for legacy setups or reference, not new deployments.

When it was in active use, it granted direct access to your files, environment variables, command execution, and remote server management - review and restrict allowed paths and SSH connections, enable directory restrictions, and configure command blocks before enabling it, since commands can read environment variables that may contain sensitive information and can read/write any file within the allowed paths.

Capabilities

Nine tools: execute_command (run a command in a specified shell, optionally in a working directory), get_command_history (timestamped past commands with outputs), and a full SSH connection lifecycle - ssh_execute, ssh_disconnect, create_ssh_connection, read_ssh_connections, update_ssh_connection, delete_ssh_connection - plus get_current_directory. It also exposes resources for SSH connections (ssh://{connectionId}), SSH configuration (ssh://config), current directory (cli://currentdir), and server configuration (cli://config), all with sensitive fields masked.

How to install

npx @simonb97/server-win-cli --init-config ./config.json

Add the server to claude_desktop_config.json pointing at @simonb97/server-win-cli via npx, optionally passing --config path/to/your/config.json to use a specific configuration file instead of the defaults. If no --config flag is given, the server looks for ./config.json in the current directory, then falls back to ~/.win-cli-mcp/config.json in the user's home directory; if neither exists, it falls back to the restrictive default configuration.

Who it's for

Historically, Windows power users and automation builders who needed an AI assistant to run shell commands or manage remote servers over SSH with fine-grained security controls - now superseded by DesktopCommanderMCP for that use case. The project was released under the MIT License.

Source README

Windows CLI MCP Server

NPM Downloads
NPM Version
smithery badge

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.

Features

  • Multi-Shell Support: Execute commands in PowerShell, Command Prompt (CMD), and Git Bash
  • SSH Support: Execute commands on remote systems via SSH
  • Resource Exposure: View SSH connections, current directory, and configuration as MCP resources
  • Security Controls:
    • Command and SSH command blocking (full paths, case variations)
    • Working directory validation
    • Maximum command length limits
    • Command logging and history tracking
    • Smart argument validation
  • Configurable:
    • Custom security rules
    • Shell-specific settings
    • SSH connection profiles
    • Path restrictions
    • Blocked command lists

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.

Usage with Claude Desktop

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:

  • Execute commands directly using the available tools
  • View configured SSH connections and server configuration in the Resources section
  • Manage SSH connections through the provided tools

Configuration

The server uses a JSON configuration file to customize its behavior. You can specify settings for security controls, shell configurations, and SSH connections.

  1. To create a default config file, either:

a) copy config.json.example to config.json, or

b) run:

npx @simonb97/server-win-cli --init-config ./config.json
  1. Then set the --config flag to point to your config file as described in the Usage with Claude Desktop section.

Configuration Locations

The server looks for configuration in the following locations (in order):

  1. Path specified by --config flag
  2. ./config.json in current directory
  3. ~/.win-cli-mcp/config.json in user's home directory

If no configuration file is found, the server will use a default (restricted) configuration:

Default 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": {}
  }
}

Configuration Settings

The configuration file is divided into three main sections: security, shells, and ssh.

Security Settings
{
  "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
  }
}
Shell Configuration
{
  "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 Configuration
{
  "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
      }
    }
  }
}

API

Tools

  • execute_command

    • Execute a command in the specified shell
    • Inputs:
      • shell (string): Shell to use ("powershell", "cmd", or "gitbash")
      • command (string): Command to execute
      • workingDir (optional string): Working directory
    • Returns command output as text, or error message if execution fails
  • get_command_history

    • Get the history of executed commands
    • Input: limit (optional number)
    • Returns timestamped command history with outputs
  • ssh_execute

    • Execute a command on a remote system via SSH
    • Inputs:
      • connectionId (string): ID of the SSH connection to use
      • command (string): Command to execute
    • Returns command output as text, or error message if execution fails
  • ssh_disconnect

    • Disconnect from an SSH server
    • Input:
      • connectionId (string): ID of the SSH connection to disconnect
    • Returns confirmation message
  • create_ssh_connection

    • Create a new SSH connection
    • Inputs:
      • connectionId (string): ID for the new SSH connection
      • connectionConfig (object): Connection configuration details including host, port, username, and either password or privateKeyPath
    • Returns confirmation message
  • read_ssh_connections

    • Read all configured SSH connections
    • Returns a list of all SSH connections from the configuration
  • update_ssh_connection

    • Update an existing SSH connection
    • Inputs:
      • connectionId (string): ID of the SSH connection to update
      • connectionConfig (object): New connection configuration details
    • Returns confirmation message
  • delete_ssh_connection

    • Delete an SSH connection
    • Input:
      • connectionId (string): ID of the SSH connection to delete
    • Returns confirmation message
  • get_current_directory

    • Get the current working directory of the server
    • Returns the current working directory path

Resources

  • SSH Connections

    • URI format: ssh://{connectionId}
    • Contains connection details with sensitive information masked
    • One resource for each configured SSH connection
    • Example: ssh://raspberry-pi shows configuration for the "raspberry-pi" connection
  • SSH Configuration

    • URI: ssh://config
    • Contains overall SSH configuration and all connections (with passwords masked)
    • Shows settings like defaultTimeout, maxConcurrentSessions, and the list of connections
  • Current Directory

    • URI: cli://currentdir
    • Contains the current working directory of the CLI server
    • Shows the path where commands will execute by default
  • CLI Configuration

    • URI: cli://config
    • Contains the CLI server configuration (excluding sensitive data)
    • Shows security settings, shell configurations, and SSH settings

Security Considerations

Built-in Security Features (Always Active)

The following security features are hard-coded into the server and cannot be disabled:

  • Case-insensitive command blocking: All command blocking is case-insensitive (e.g., "DEL.EXE", "del.cmd", etc. are all blocked if "del" is in blockedCommands)
  • Smart path parsing: The server parses full command paths to prevent bypass attempts (blocking "C:\Windows\System32\rm.exe" if "rm" is blocked)
  • Command parsing intelligence: False positives are avoided (e.g., "warm_dir" is not blocked just because "rm" is in blockedCommands)
  • Input validation: All user inputs are validated before execution
  • Shell process management: Processes are properly terminated after execution or timeout
  • Sensitive data masking: Passwords are automatically masked in resources (replaced with ********)

Configurable Security Features (Active by Default)

These security features are configurable through the config.json file:

  • Command blocking: Commands specified in blockedCommands array are blocked (default includes dangerous commands like rm, del, format)
  • Argument blocking: Arguments specified in blockedArguments array are blocked (default includes potentially dangerous flags)
  • Command injection protection: Prevents command chaining (enabled by default through enableInjectionProtection: true)
  • Working directory restriction: Limits command execution to specified directories (enabled by default through restrictWorkingDirectory: true)
  • Command length limit: Restricts maximum command length (default: 2000 characters)
  • Command timeout: Terminates commands that run too long (default: 30 seconds)
  • Command logging: Records command history (enabled by default through logCommands: true)

Important Security Warnings

These are not features but important security considerations to be aware of:

  • Environment access: Commands may have access to environment variables, which could contain sensitive information
  • File system access: Commands can read/write files within allowed paths - carefully configure allowedPaths to prevent access to sensitive data

FAQ

Common questions

Discussion

Questions & comments · 0

Sign In Sign in to leave a comment.