The full upstream README, mirrored here for reference. Install config, tool schemas, adoption signals, and an original overview live on the Powershell MCP listing page.
A Model Context Protocol server that gives AI agents real, non-intrusive access to Windows PowerShell.
Most tools that let an agent run Windows commands spawn a visible console window for every call — which steals focus and interrupts whatever you're typing. powershell-mcp runs everything in a hidden process (windowsHide: true / no CreateWindow), captures structured output, enforces hard timeouts, and exposes purpose-built tools for service and system management. Built for running unattended next to a human at the keyboard.
{ stdout, stderr, exit_code, duration, timed_out }. Hard timeout with tree-kill. Output is capped so a runaway command can't flood the context.pwsh (PowerShell 7+) and falls back to powershell.exe; override with PWSH_MCP_EXE.| Tool | Description |
|---|---|
run_powershell | Run any PowerShell script/command (hidden). { script, cwd?, timeoutMs? } |
run_program | Run a native executable directly (no shell) and capture clean stdout/stderr + exit code - for gh/git/docker/node and other console binaries whose output a hidden shell swallows. { program, args?, cwd?, timeoutMs? } |
list_services | List services, optional filter wildcard. |
get_service | Detailed status of one service by name. |
control_service | start / stop / restart / status a service. |
system_info | OS, CPU, memory, and per-drive disk summary. |
ssh_exec | Run a command on a remote host over SSH, fully in-process (no ssh.exe, no WSL — works headless). { host, username, command, port?, privateKeyPath?, passphrase?, password?, timeoutMs? } |
winrm_exec | Run a command on a remote Windows host via PowerShell Remoting (WinRM / Invoke-Command). No SSH server or agent needed on the target. { computerName, command, username?, password?, useSsl?, authentication?, timeoutMs? } |
sftp_upload | Upload a local file to a remote host over SFTP, in-process (ssh2 — no scp.exe/WSL, headless). { localPath, remotePath, host, username, port?, privateKeyPath?, passphrase?, password?, timeoutMs? } |
sftp_download | Download a remote file to this host over SFTP, in-process. Same params as sftp_upload. |
Native programs: Windows PowerShell routes a native command's stdout to the console, so run hidden it is lost. Use
run_program(direct-exec) for console binaries likegh/git/docker; userun_powershellfor PowerShell/cmdlet logic.
Real calls, real output — headless, no console window, structured results:
powershell-mcp manages more than the local box. Windows' own ssh.exe produces no capturable output when run from a windowless/background process, and shipping WSL to every server doesn't scale — so remote exec is built in:
ssh_exec uses the pure-JS ssh2 client (no external binary), so it works headless and needs nothing on the target beyond an SSH server. Ideal for Linux hosts.winrm_exec uses native PowerShell Remoting, so a Windows fleet needs only WinRM enabled — no per-server install.On startup the server sends a one-time ping (host id, version, OS, timestamp) and flushes per-tool call counts every 30 minutes (and on exit). This helps prioritise which tools matter. No command content, arguments, output, or paths are ever sent.
POWERSHELL_MCP_NO_TELEMETRY=1.POWERSHELL_MCP_TELEMETRY_URL.The collector under collector/ is a standalone Node.js service (JSONL append, systemd unit, nginx snippet, deploy.sh) deployed separately.
The canonical npm package is @imrrd/powershell-mcp.
Run it directly from npm in an MCP client:
Or install the CLI globally:
Migrating:
powershell-mcpis deprecated and will not receive a patched legacy release. Remove it and install@imrrd/powershell-mcp@0.5.3or later.
For development from source:
See examples/claude_desktop_config.json for the canonical package-based client configuration.
CI runs build + tests on both windows-latest and ubuntu-latest.
winrm_exec sends caller-controlled connection details to the local PowerShell child over stdin; credentials are not placed in process arguments or environment variables.control_service and many commands require the MCP host process to run with sufficient privileges.MIT © IMR Research & Development (UK)