winadm-mcp
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@winadm-mcpWhy is my printer not working? Check if the Spooler service is running."
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
winadm-mcp
An MCP server that gives AI agents safe, read-mostly access to Windows administration: services, processes, the event log and system info.
$ uvx winadm-mcp --allow-write
# or: winadm-mcpPoint Claude Desktop / Claude Code / any MCP client at it and your agent can answer
"why is my printer not working" (Spooler stopped?), "what ate my RAM" or
"what broke since boot" — without you alt-tabbing through services.msc,
Task Manager and Event Viewer.
Tools
Tool | Access | What it does |
| read | all services with status + start type; filter by status/name |
| write | start / stop / restart a service |
| read | PID, working set MB, CPU seconds |
| write | force-kill by PID |
| read | newest events from any log (default System, error/warning/critical) |
| read | OS, hostname, last boot, memory totals |
Read-only by default. Write tools refuse to act unless the server is started with
--allow-write. Service names and PIDs are validated before they touch PowerShell.
Related MCP server: Win MCP Server
Install / run
uvx winadm-mcp # read-only (recommended first)
uvx winadm-mcp --allow-write # enable write toolsor pip install winadm-mcp and run winadm-mcp.
Claude Desktop config example:
{
"mcpServers": {
"winadm": {
"command": "uvx",
"args": ["winadm-mcp"]
}
}
}Honest technical notes
Every tool is a small PowerShell one-liner invoked with
-EncodedCommand(UTF-16LE base64, no temp files, no shell string interpolation of user input — names/PIDs are regex-validated first).Windows-only by nature; on other OSes tools return a clear error instead of lying.
Tested on Linux CI with fully mocked PowerShell (deterministic, no admin rights needed) and smoke-tested on
windows-latest.
Development
pip install -e ".[dev]"
pytestLicense
Available Tools
6 toolskill_process_toolA
Force-kill a process by PID. Requires --allow-write.
| Name | Required | Description | Default |
|---|---|---|---|
| pid | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden: "Force-kill" correctly signals a destructive, irreversible mutation and "--allow-write" discloses the permission gate, which is genuinely useful. However it omits failure behavior, whether protected/system processes can be targeted, and any confirmation or rate-limit constraints.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences, zero filler, with the action front-loaded and the permission prerequisite attached immediately after. Nothing can be trimmed without losing information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Output schema exists, so return values need not be described, and the tool is simple (one required param). Still, for a destructive operation backed by no annotations, the description should say what happens on a bad PID or denied permission — that is the notable gap.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, so the description must compensate: "by PID" clarifies that the single pid parameter is a process identifier, adding meaning beyond the bare string field. It still leaves format details unspecified — whether a string PID, an image name, or a numeric literal is accepted.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ("Force-kill a process") plus the selector ("by PID"), which is unambiguous against siblings like list_windows_processes and service_action_tool. It does not explicitly name a sibling as the alternative, so it falls short of a 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives one hard prerequisite ("Requires --allow-write") but no guidance on when termination is appropriate versus alternatives such as service_action_tool for stopping services, and no warning about the irreversible nature of force-killing. Usage is only implied.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_windows_processesA
List processes with PID, working set (MB) and CPU seconds.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full behavioral burden: "List" implies a read-only, non-destructive operation, and the named return fields hint at what the call reports. It says nothing about whether all processes or only the caller's are visible, whether admin rights are needed, or how CPU seconds are measured (cumulative vs. delta).
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence with zero filler; the resource and the return fields are both stated up front.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no parameters and an output schema documenting return values, the description only needs to identify the resource, which it does. The remaining gap is scope visibility (all processes vs. accessible ones), which could matter for a Windows process lister but is minor for correctly invoking the tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool takes zero parameters (schema coverage 100% and empty properties), so there is no parameter semantics to explain. Baseline 4 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ("List processes") and even names the returned fields (PID, working set MB, CPU seconds), so an agent immediately knows what the tool produces. It does not, however, explicitly differentiate itself from sibling tools such as kill_process_tool or list_windows_services.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no when-to-use guidance, no mention of prerequisites or elevation requirements, and no reference to alternatives in the sibling set. The usage is only inferable from the tool name itself.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_windows_servicesA
List Windows services with status and start type. Optionally filter by status (Running/Stopped/etc.) or substring of the service name.
| Name | Required | Description | Default |
|---|---|---|---|
| name | No | ||
| status | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations exist, so the description carries the full burden; 'List' plus the stated return fields safely imply a non-mutating read. It says nothing about permissions required, result volume/pagination, or whether both filters combine as AND.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, zero filler, with the capability stated first and the optional filtering behavior second.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return structure need not be described, and this is a simple two-parameter read tool. Only the default-empty-string semantics of the filters are left unexplained.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0% (bare titles with empty-string defaults), so the description must compensate. It does add real meaning: 'name' is a substring match, not exact, and 'status' takes values like Running/Stopped — but it omits what empty-string defaults do and whether status is case-sensitive or an enum.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource ('List Windows services') and adds the returned dimensions (status, start type), which clearly separates it from list_windows_processes. It stops short of naming or contrasting any sibling explicitly.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The word 'Optionally' signals that both filters are skippable, and the presence of service_action_tool implies this is the read-only discovery step. But no when-to-use/when-not-to-use guidance or explicit routing to a sibling is given.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
read_eventlogB
Read recent events from a Windows event log (default: System, levels error/warning/critical, newest first).
| Name | Required | Description | Default |
|---|---|---|---|
| level | No | error,warning,critical | |
| log_name | No | System | |
| max_events | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations exist, so the description carries the full burden. It usefully discloses two real behaviors: the default severity filter (error/warning/critical, i.e. informational events are excluded unless requested) and newest-first ordering. It omits permissions needed, whether the read is live or a snapshot, pagination, and what happens with very large logs.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence with the key context in a compact parenthetical; nothing is wasteful. It is lean to the point of under-specification, but structure and sizing are appropriate.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return values need not be explained. However, with no annotations and 0% schema coverage, an agent still lacks enough to call it confidently — no valid log_name list, no level syntax, no note on max_events behavior or required privileges.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate, and it only partially does. It mentions the level and log_name defaults (which largely restate the schema 'default' fields) but never explains that level is a comma-separated list, what valid log_name values look like, or what max_events does — that third parameter is undocumented in both places.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ("Read recent events from a Windows event log") and adds scope detail (default log, default severity levels, newest-first ordering). It is clearly distinguishable from the sibling tools (services, processes, system info), though it never names them explicitly.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is only implied: the reader infers this is the troubleshooting/diagnostics tool for log inspection, but there is no explicit "use when..." statement, no mention of prerequisites (admin rights), and no routing to or away from any sibling.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
service_action_toolA
Start, stop or restart a Windows service. Requires --allow-write.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | ||
| action | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden. It does disclose the write-permission requirement, implying a mutating operation, but says nothing about the disruptive impact of stopping a service, whether state is recoverable, or failure modes.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short, front-loaded sentences with zero filler: the operation comes first and the prerequisite second. Nothing could be removed without losing information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return values need not be explained, and the tool has only two required parameters. The remaining gap is the absence of any warning about mutation side effects for an annotation-free write tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, so both parameters are undocumented in the schema. The description implicitly enumerates valid 'action' values (start/stop/restart), which is genuinely useful, but leaves 'name' ambiguous — service name versus display name — and offers no format hints.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description gives a specific verb set (start, stop, restart) and resource (Windows service), which clearly separates it from the read-only sibling list_windows_services. It stops short of explicitly naming that sibling as the alternative, so it is clear but not fully differentiated.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
'Requires --allow-write' states a prerequisite for use, which is useful gating context. However, there is no guidance on when to choose this over kill_process_tool or list_windows_services, nor on what conditions should steer an agent away from restarting a service.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
windows_system_infoB
OS name/version, hostname, last boot time and memory totals.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are supplied, so the description carries the full behavioral burden and does not state that this is a read-only, side-effect-free probe, nor anything about latency, permissions, or freshness of the values. It only names returned fields, which the output schema already covers.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded fragment with zero padding; every listed item is a real returned field. It is arguably too terse rather than too long, so it loses a point for under-specification rather than verbosity.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no parameters and a full output schema, the description only needs to say what domain the tool reports on, and it does. The main omission is any statement of read-only safety and freshness, which matters when annotations are absent.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool takes zero parameters, so the baseline is 4 and there is nothing the description could add about argument meaning. It correctly avoids inventing filter options that do not exist.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description enumerates the specific resource contents (OS name/version, hostname, boot time, memory totals), which makes the tool's function unambiguous despite lacking an explicit verb. It is not a tautology of the name, but it never contrasts itself with siblings like read_eventlog or list_windows_processes.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is only implied: an agent can infer this is the go-to tool for host identity and capacity facts. There is no explicit when-to-use statement, no exclusions, and no mention of alternatives for overlapping questions such as event-log-derived boot times.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
6 tool updates
v0.1.0- First observed
kill_process_tool - First observed
list_windows_processes - First observed
list_windows_services - First observed
read_eventlog - First observed
service_action_tool - First observed
windows_system_info
TDQS
Scored across 6 tools
Each tool targets a distinct resource and action: list vs. act on services, list vs. kill processes, read event logs, and fetch system info. There is no meaningful overlap between any pair, and the write tools are explicitly separated from their read counterparts.
The set mixes several conventions: list_windows_services and list_windows_processes use a clear list_windows_ prefix, while service_action_tool and kill_process_tool use a vague _tool suffix, and read_eventlog/windows_system_info follow yet other patterns. Names are readable but not predictable as a family.
Six tools is well-scoped for a Windows administration server focused on services, processes, event logs, and system info. Each tool clearly earns its place without redundancy.
The surface covers the essential read and write operations for services, processes, event logs, and system info. Minor gaps remain, such as service configuration/creation, process start, or event log clearing, but core admin workflows are supported.
Maintenance
Related MCP Connectors
Connect ChatGPT, Claude, Cursor or VS Code to your Windows PC: files, terminal, browser, apps.
- DNS-DATA RemoteDeprecatedcom.dns-data
Connect AI assistants to authorized Windows and macOS devices for files, commands, and management.
Operate Linux, macOS and Windows from your LLM. Every action runs through an auditable allowlist.
Remote Desktop Commander: use files, terminal and processes on your own computers from any AI app.
Related MCP Servers
- AlicenseBqualityDmaintenanceProvides Windows system diagnostic capabilities to AI agents, allowing them to access event logs, crash information, system uptime, and perform stability analysis.113MIT
- AlicenseBqualityAmaintenanceEnables AI agents to securely manage and execute commands on remote Windows servers via WinRM, including PowerShell execution, system information retrieval, and service management.618 PyPI6MIT
- AlicenseNot gradedqualityDmaintenanceEnables AI agents to perform extensive Windows system administration, file operations, process management, network configuration, registry editing, GUI automation, and more through a comprehensive set of MCP tools.1MIT
- AlicenseBqualityBmaintenanceEnables AI agents to run PowerShell commands and manage Windows services without intrusive console windows, while also supporting remote execution via SSH and WinRM.20304 npm1MIT