login-userLABSCO SUMMARY
It writes tags and acknowledges alarms, and it has not been hardened.
That disclaimer is the author's own: no authentication, authorization or network restriction is built in, and putting those in front of it is your job before it goes anywhere near a plant. The supplied run script also sets NODE_TLS_REJECT_UNAUTHORIZED to 0, which is convenient against a self-signed internal certificate and unacceptable outside a trusted network.
What it is
A Node server that fronts a WinCC Unified SCADA system's GraphQL API, exposing tag reads and writes, alarm queries and acknowledgement, and object browsing as MCP tools.
What you get
get-tag-valuesfor current values andget-logged-tag-valuesfor historical dataget-active-alarmsandget-logged-alarms, withacknowledge-alarmsandreset-alarmsto act on themwrite-tag-valuesto set values on the systembrowse-objectsto find what exists before you query itlogin-userfor a user session, or an automatic service-account login the server refreshes every minute
Requirements
Node.js v18 or later and a reachable WinCC Unified GraphQL endpoint in GRAPHQL_URL. GRAPHQL_USR and GRAPHQL_PWD are optional and enable the service-account session. The server listens on port 3000 by default — MCP_PORT changes it — and serves MCP at /mcp; clients connect through npx mcp-remote http://localhost:3000/mcp.
Setup effort
Follow the published steps — export GRAPHQL_URL="https://your-wincc-server.example.com/graphql"
USE CASES
Asking what a process value is right now
Browse for the tag, then read its current value without opening the SCADA client.
Investigating what happened overnight
Pull the logged tag values and the logged alarms for the window in question and read them together.
Clearing an alarm you have understood
Read the active alarms, then acknowledge or reset the ones you have dealt with.
Running unattended
Give the service-account credentials and the server maintains its own session instead of needing a login per run.
9 tools
Listed in project docs. Your client may show a different list.
browse-objectsget-tag-valuesget-logged-tag-valuesget-active-alarmsget-logged-alarmswrite-tag-valuesacknowledge-alarmsreset-alarmsBEFORE YOU INSTALL
What to know first
Tools you get
9 tools named in the project's documentation. write-tag-values, acknowledge-alarms and reset-alarms change the plant; acknowledging or resetting without instanceID applies to every instance of that alarm. With GRAPHQL_USR and GRAPHQL_PWD set, the server acts as that account without login-user.
Requires
- Node.js 18 or later, with npm
- GRAPHQL_URL in your environment — your WinCC Unified GraphQL server's URL
Where it runs
The documented client runs the server on your machine.
INSTALLATION
Connect your client
Server setup
git clone https://github.com/vogler75/winccua-mcp-server
cd winccua-mcp-serverNavigate to the project directory.
Install dependencies: If you haven't already, install the necessary Node.js packages: npm install
Set Environment Variables: GRAPHQL_URL is required: the full URL of your WinCC Unified GraphQL server (for example <YOUR_WINCC_URL>/graphql). GRAPHQL_USR and GRAPHQL_PWD are optional: a service account the server logs in with on startup and every minute after. On Linux/macOS:
export GRAPHQL_URL="<YOUR_WINCC_URL>/graphql"
export GRAPHQL_USR="username1"
export GRAPHQL_PWD="password1"Run the server: You can use the provided run.sh script (on Linux/macOS): ./run.sh — or run it directly with node index.js
Point an MCP client at the running server by adding the configuration under MCP Clients to claude_desktop_config.json, then restart the client.
MCP Clients
Claude Desktop
{
"mcpServers": {
"WinCC Unified": {
"command": "npx",
"args": [
"mcp-remote",
"http://localhost:3000/mcp"
]
}
}
}The configuration on this page does not set GRAPHQL_URL, GRAPHQL_USR, GRAPHQL_PWD. The server reads them from its own environment, so set them with the export lines above before you start it; the client block only connects to the running server.