WAGO PLC runs on your own machine — the client starts it, so there is no endpoint to ping. 134 installs a week from pypi. Last commit 25 Sep 2026.
Read and monitor WAGO PLC parameters over the WDA REST API. Read-only unless writes are allowed.
We read the source, 2 d ago · rules 995398eba69f
Things with no honest explanation: a promise that contradicts the code, code that runs at install time while hiding what it does, data leaving the machine.
r = subprocess.run(
What this server is able to do. For an MCP server this is often the job itself — a terminal server runs commands because that is what it is for. Listed so you know what you are plugging in, not as an accusation.
r = subprocess.run(
Is this your server and something here is wrong? Tell us — corrections are free and do not require a plan.
Code changes quietly between releases, and nobody reads the diff of a dependency. We do, on every release — watch WAGO PLC and you get told the day something new turns up.
This server runs on your own machine — install it with the package manager and the client starts it for you. Package name taken from the official registry entry.
claude mcp add wago-plc-mcp-server -e 'TRANSPORT=<TRANSPORT>' -e 'WAGO_PLC_HOSTS=<WAGO_PLC_HOSTS>' -e 'DEFAULT_PLC_USERNAME=<DEFAULT_PLC_USERNAME>' -e 'DEFAULT_PLC_PASSWORD=<DEFAULT_PLC_PASSWORD>' -e 'WAGO_ALLOW_WRITES=<WAGO_ALLOW_WRITES>' -- uvx wago-plc-mcp-server
{
"mcpServers": {
"wago-plc-mcp-server": {
"command": "uvx",
"args": [
"wago-plc-mcp-server"
],
"env": {
"DEFAULT_PLC_PASSWORD": "<DEFAULT_PLC_PASSWORD>",
"DEFAULT_PLC_USERNAME": "<DEFAULT_PLC_USERNAME>",
"TRANSPORT": "<TRANSPORT>",
"WAGO_ALLOW_WRITES": "<WAGO_ALLOW_WRITES>",
"WAGO_PLC_HOSTS": "<WAGO_PLC_HOSTS>"
}
}
}
}
[mcp_servers.wago-plc-mcp-server]
command = "uvx"
args = ["wago-plc-mcp-server"]
env = { TRANSPORT = "<TRANSPORT>", WAGO_PLC_HOSTS = "<WAGO_PLC_HOSTS>", DEFAULT_PLC_USERNAME = "<DEFAULT_PLC_USERNAME>", DEFAULT_PLC_PASSWORD = "<DEFAULT_PLC_PASSWORD>", WAGO_ALLOW_WRITES = "<WAGO_ALLOW_WRITES>" }
{
"mcpServers": {
"wago-plc-mcp-server": {
"command": "uvx",
"args": [
"wago-plc-mcp-server"
],
"env": {
"DEFAULT_PLC_PASSWORD": "<DEFAULT_PLC_PASSWORD>",
"DEFAULT_PLC_USERNAME": "<DEFAULT_PLC_USERNAME>",
"TRANSPORT": "<TRANSPORT>",
"WAGO_ALLOW_WRITES": "<WAGO_ALLOW_WRITES>",
"WAGO_PLC_HOSTS": "<WAGO_PLC_HOSTS>"
}
}
}
}
{
"servers": {
"wago-plc-mcp-server": {
"type": "stdio",
"command": "uvx",
"args": [
"wago-plc-mcp-server"
],
"env": {
"DEFAULT_PLC_PASSWORD": "<DEFAULT_PLC_PASSWORD>",
"DEFAULT_PLC_USERNAME": "<DEFAULT_PLC_USERNAME>",
"TRANSPORT": "<TRANSPORT>",
"WAGO_ALLOW_WRITES": "<WAGO_ALLOW_WRITES>",
"WAGO_PLC_HOSTS": "<WAGO_PLC_HOSTS>"
}
}
}
}
Put your own values in place of
<TRANSPORT> (MCP transport. Fixed to stdio for this package), <WAGO_PLC_HOSTS> (Comma-separated IPs of the WAGO PLCs, reachable from this machine), <DEFAULT_PLC_USERNAME> (WBM username on the PLCs), <DEFAULT_PLC_PASSWORD> (WBM password, same on all listed PLCs), <WAGO_ALLOW_WRITES> (true lets the agent change parameters, run methods and upload files. Anything else keeps every PLC read-only).
The author’s registry entry marks them as required.
Optional settings from the registry entry, left out of the block above:
WAGO_TIMEOUT_SECONDS (WDA request timeout. CC100 needs 45 or more, other controllers work with 15), AUDIT_LOG_FILE (Optional path for the tamper-evident audit log of writes and refusals).
MCP server for EPICS Channel Access: read, monitor and guarded writes of process variables.
Monitor web pages and read item-level updates: the field that moved, with its old and new value.
Read-only VMware vCenter/ESXi monitoring, 33 MCP tools; vSphere calls allowlist-gated in tests.
VESA pattern, dimensions and weight per TV or monitor model, from the makers' manuals. Read-only.
Monitor ICTBroadcast outbound campaigns, and start and stop them when writes are on.
MCP server for Teramind's insider-threat/employee-monitoring API (read-only, metadata-only surface).
Monitor ICTDialer outbound auto-dialer campaigns, and start and stop them when writes are on.
Monitor ICTContact / ICTDialer outbound campaigns, and start and stop them when writes are on.
Answers built from our own checks of this server.