From plugin-windows-mcp
This skill should be used when the user asks to "run a PowerShell command", "execute a shell command", "list processes", "kill a process", "modify the registry", "send a notification", "check system info", "manage Windows services", "automate system tasks", or needs to perform system-level operations on Windows using Shell, Process, Registry, or Notification tools.
npx claudepluginhub mustafaakben/plugin-windows-mcp --plugin plugin-windows-mcpThis skill uses the workspace's default tool permissions.
This skill covers four system-level tools: Shell (PowerShell execution), Process (process management), Registry (Windows Registry operations), and Notification (toast notifications).
Verifies tests pass on completed feature branch, presents options to merge locally, create GitHub PR, keep as-is or discard; executes choice and cleans up worktree.
Guides root cause investigation for bugs, test failures, unexpected behavior, performance issues, and build failures before proposing fixes.
Writes implementation plans from specs for multi-step tasks, mapping files and breaking into TDD bite-sized steps before coding.
This skill covers four system-level tools: Shell (PowerShell execution), Process (process management), Registry (Windows Registry operations), and Notification (toast notifications).
Execute PowerShell commands directly on the system.
Key parameter: command (string — the PowerShell command to run)
Returns: stdout, stderr, and exit code.
Prefer Shell when:
Use GUI tools when:
File operations:
Get-ChildItem -Path "C:\Users" -Recurse -Filter "*.txt"
Copy-Item "source.txt" "destination.txt"
New-Item -ItemType Directory -Path "C:\NewFolder"
Remove-Item "file.txt" -Force
System information:
Get-ComputerInfo | Select-Object WindowsProductName, OsVersion
Get-WmiObject -Class Win32_Processor | Select-Object Name, NumberOfCores
Get-CimInstance -ClassName Win32_LogicalDisk | Select-Object DeviceID, FreeSpace, Size
[System.Environment]::OSVersion
Network:
Test-NetConnection -ComputerName "google.com" -Port 443
Get-NetIPAddress | Where-Object AddressFamily -eq "IPv4"
Invoke-WebRequest -Uri "https://example.com" -OutFile "page.html"
Software management:
Get-Package | Where-Object Name -like "*Python*"
winget list
winget install "App.Name"
Services:
Get-Service | Where-Object Status -eq "Running"
Restart-Service -Name "ServiceName"
Get-Service -Name "wuauserv" | Select-Object Status, StartType
-Force or -Confirm:$false flagsSelect-Object and Where-Object to filter large result setsList running processes or terminate them by name or PID.
Process(action="list")
Returns all running processes with their PID, name, CPU, and memory usage.
Use cases:
Process(action="kill", name="notepad")
Process(action="kill", pid=1234)
Best practices:
name for well-known single-instance appspid when multiple instances exist and only one should be terminatedProcess(list) after killing to confirm terminationCommon termination targets:
Read, write, delete, or list Windows Registry keys and values.
Registry(action="read", path="HKCU\\Software\\Microsoft\\Windows\\CurrentVersion\\Explorer", name="ShellState")
Registry(action="write", path="HKCU\\Software\\MyApp", name="Setting", value="enabled", type="REG_SZ")
Registry(action="list", path="HKCU\\Software\\Microsoft")
Registry(action="delete", path="HKCU\\Software\\MyApp", name="OldSetting")
reg export via Shell before changes| Path | Purpose |
|---|---|
HKCU\Software\Microsoft\Windows\CurrentVersion\Run | User startup programs |
HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Run | System startup programs |
HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer | Explorer settings |
HKCU\Control Panel\Desktop | Desktop settings (wallpaper, etc.) |
HKLM\SYSTEM\CurrentControlSet\Services | Windows services |
Send Windows toast notifications to alert the user.
Parameters: title (required), message (required)
Notification(title="Task Complete", message="The file export has finished successfully.")
When to use:
Best practices:
Shell("Get-Service -Name 'wuauserv'") -> check status
Shell("Restart-Service -Name 'wuauserv' -Force") -> restart
Shell("Get-Service -Name 'wuauserv'") -> verify running
Notification(title="Service Restarted", message="Windows Update service has been restarted.")
Process(list) -> find the hung process
Process(kill, name="myapp")
Wait(1)
App(launch "MyApp") -> Wait(2)
Screenshot -> verify app is running
Shell("Get-CimInstance Win32_Processor | Select-Object LoadPercentage")
Shell("Get-CimInstance Win32_LogicalDisk | Select-Object DeviceID, @{N='FreeGB';E={[math]::Round($_.FreeSpace/1GB,2)}}")
Shell("Get-Process | Sort-Object WorkingSet64 -Descending | Select-Object -First 5 Name, @{N='MemMB';E={[math]::Round($_.WorkingSet64/1MB,1)}}")
For advanced PowerShell patterns and system administration techniques:
references/powershell-patterns.md — Common PowerShell one-liners, service management, and system administration patterns