Are you the author? Sign in to claim
systeminternals-mcp
Minimal FastMCP-compatible scaffold that demonstrates dynamic registration and safe subprocess wrapping for exposing Sysinternals and NirSoft binaries.
Quick demo:
python server.py --demo procexp64
Start the MCP stdio server:
python server_mcp.py
Edit config.ini to adjust server settings (log level, timeout, allow_destructive).
The server no longer requires explicit binary paths — it scans the binaries/ directory recursively.
Security notes: This scaffold sanitizes arguments and uses asyncio.create_subprocess_exec without a shell. Extend with explicit safety filters before using in production.
Safety filter: destructive tools (for example sdelete, psexec, pskill) are blocked by default. To run them you must either:
--confirm to the tool arguments, orallow_destructive = true in the [server] section of config.ini.The server also scans a binaries directory recursively if present; place your tool folders (e.g., systeminternals, nirsoft) under binaries.
Prerequisites:
venv.Quick setup:
python -m venv .venv
.\.venv\Scripts\activate
pip install --upgrade pip
pip install -r requirements.txt
python server.py --demo pslist64
python server_mcp.py
The --demo mode is useful for simple CLI usage and for coding agents that can execute shell commands and parse JSON output. server_mcp.py exposes the full MCP stdio endpoint for clients that implement the MCP protocol.
--demo command prints JSON to stdout which is easy to parse from any language.Example Python snippet (agent or script):
import subprocess, json
proc = subprocess.run([
'python', 'server.py', '--demo', 'pslist64', '--',
# additional tool args go here as separate items
], capture_output=True, text=True)
if proc.returncode == 0 and proc.stdout:
result = json.loads(proc.stdout)
print(result)
else:
print('error', proc.stderr)
Note: place any tool arguments after --demo <toolname>; the demo command will join remaining argv pieces for the tool.
python server_mcp.py (it will register tools from binaries.json or the binaries/ directory).If your agent framework doesn't implement MCP natively, use the simple subprocess approach above to execute server.py --demo per-request.
--confirm or allow_destructive=true in config.ini).A GitHub Actions workflow is included at .github/workflows/ci.yml that runs the test suite on push and pull requests.
mcpServers (IDE / agent integration)If your editor/agent supports a mcpServers config (for example the Gemini client settings), add entries that either start the stdio MCP server or point to a running HTTP MCP endpoint.
Example — start the long-lived stdio MCP server from this repo (preferred for full MCP integration):
"systeminternals-mcp": {
"command": "python",
"args": [
"C:\\path\\to\\the\\server_mcp.py"
]
}
Example — demo/one-shot entry that runs --demo and prints JSON (useful for simple agents that call subprocesses):
"systeminternals-mcp-demo": {
"command": "python",
"args": [
"C:\\path\\to\\the\\server.py",
"--demo"
]
}
Example — point to an existing HTTP MCP endpoint:
"systeminternals-mcp-http": {
"url": "http://127.0.0.1:12345/mcp"
}
Notes:
python command if the environment activates the virtualenv automatically.cwd and env, set them so the server runs in the repo root and uses the .venv Python.server_mcp.py) for integrated agents; use --demo for simple per-request subprocess calls that return JSON.Run Claude Code as an MCP server so any agent can delegate coding tasks to it
Browser automation using accessibility snapshots instead of screenshots
Google's universal MCP server supporting PostgreSQL, MySQL, MongoDB, Redis, and 10+ databases
Official GitHub integration for repos, issues, PRs, and CI/CD workflows