WinCC OACAUTION
WinCC OA MCP Server
Overview
From the repository's own README, as read at the audited commit. Badges and raw HTML are left out.
AI Integration for Industrial Automation
This Model Context Protocol (MCP) server connects AI assistants to WinCC OA SCADA systems, enabling intelligent automation and monitoring for industrial environments.
Quick Start
Ask your AI:
- "Show me all temperature values in the plant"
- "Which pumps are currently running?"
- "Set the setpoint for pump P-101 to 50%"
- "Create a production report for today"
⚠️ Warning
This tool can modify your WinCC OA system configuration and runtime data. Changes made through this MCP server directly affect your SCADA system and connected industrial processes. Use at your own risk and ensure proper testing in a safe environment before deploying to production systems.
To prevent write operations to SCADA configuration and runtime data, exclude these tool categories from your configuration:
- Datapoints:
datapoints/dp_set,datapoints/dp_create,datapoints/dp_type_create - Alarms:
alarms/alarm_set,alarms/alarm_delete - Archives:
archive/archive_set,archive/archive_delete - Common Config:
common/common_set,common/common_delete - PV Ranges:
pv_range/pv_range_set,pv_range/pv_range_delete - Managers:
manager/manager_control,manager/manager_add,manager/manager_remove,manager/manager_properties - Dashboards:
dashboards/dashboard,dashboards/widget - OPC UA:
opcua/opcua_connection,opcua/opcua_address - MQTT:
mqtt/mqtt_connection
Note: Icon tools (icons/icon) create/delete SVG files but don't modify SCADA data.
Example read-only configuration:
# Only include read operations TOOLS=datapoints/dp_basic,datapoints/dp_types,archive/archive_query,common/common_query,pv_range/pv_range_query,manager/manager_list,opcua/opcua_connection
🔐 Cybersecurity information
In order to protect plants, systems, machines and networks against cyber threats, it is necessary to implement – and continuously maintain
0766696e4beeOBSERVED · 2026-10-10Connect
Built from this server's own package name, version and transport as found in its source — not copied from anyone's documentation, so it cannot drift against a page we do not control. Replace the environment placeholders with a token scoped to the least it needs.
claude mcp add winccoa-mcp-server --env MCP_API_TOKEN=${MCP_API_TOKEN} --env MCP_AUTH_TYPE=${MCP_AUTH_TYPE} --env MCP_CORS_CREDENTIALS=${MCP_CORS_CREDENTIALS} --env MCP_JWT_SECRET=${MCP_JWT_SECRET} -- npx -y @etm-professional-control/[email protected]{
"mcpServers": {
"winccoa-mcp-server": {
"command": "npx",
"args": [
"-y",
"@etm-professional-control/[email protected]"
],
"env": {
"MCP_API_TOKEN": "${MCP_API_TOKEN}",
"MCP_AUTH_TYPE": "${MCP_AUTH_TYPE}",
"MCP_CORS_CREDENTIALS": "${MCP_CORS_CREDENTIALS}",
"MCP_JWT_SECRET": "${MCP_JWT_SECRET}"
}
}
}
}Exposed tools (62)
30 read · 21 write · 11 destructive. Blast radius: 11 tools can delete or overwrite — an agent that can be talked into calling a tool can be talked into calling this one.
| Tool | Risk | Description |
|---|---|---|
action | read | Common user actions |
add-manager | write | |
add-widget | write | Add a widget to a dashboard. Creates a new widget with the specified configuration and adds it to the dashboard. Supports gauge, label, trend, pie, progressbar, and barchart widgets. Parameters: - dashboardId: Dashboard datapoint name (e.g., |
alarm-delete | destructive | Delete alarm configuration from a datapoint element in WinCC OA. This tool: 1. Acknowledges the alert 2. Deactivates the alert 3. Deletes the alert configuration Example: { |
alarm-set | write | |
archive-delete | destructive | Delete archive configuration from a datapoint element in WinCC OA. This tool removes the archive configuration from the specified datapoint element. Example: { |
archive-query | read | Query historical archived data from WinCC OA datapoint elements. Uses chunked retrieval (dpGetPeriodSplit) to handle large datasets without timeouts. Returns values with timestamps for the specified time period. Time Format: ISO 8601 strings (e.g., |
archive-set | write | Set or update archive configuration for a datapoint element in WinCC OA. Configures value archiving (DPATTR_ARCH_PROC_VALARCH) with a single archive group. Default archive class: _NGA_G_EVENT Examples: Simple archive configuration: { |
battery | read | Battery and power status |
chart | read | Chart and graph types |
common-delete | destructive | Delete specific common config attributes from a datapoint element in WinCC OA. Deletes attributes by setting them to empty strings. You can delete individual attributes or all attributes at once. At least one attribute or |
common-query | read | Query existing common config attributes (description, alias, format, unit) from a datapoint element in WinCC OA. Returns the current common config attributes. All language strings are UTF-8 encoded. Example: { |
common-set | write | |
create-custom-icon | write | |
create-dashboard | write | |
create-datapoint | write | |
delete-custom-icon | destructive | Delete a custom icon from /data/WebUI/icons/. Parameters: - name: Icon filename (with or without .svg extension) (required). Same rules as create-custom-icon: letters, digits, |
delete-dashboard | destructive | Delete a dashboard. Marks a dashboard as unpublished and clears all its widgets. Parameters: - dashboardId: Dashboard datapoint name (e.g., |
delete-widget | destructive | Delete a widget from a dashboard. Removes a widget from the dashboard. Parameters: - dashboardId: Dashboard datapoint name (required) - widgetIdentifier: Widget identifier (required) - By ID: { |
device | read | Hardware and devices |
dp-set | write | Set value of datapoint element(s) in WinCC OA. For a single datapoint: pass as object with dpeName and value For multiple datapoints: pass as array of objects with dpeName and value Example single: { dpeName: |
dp-type-create | write | Create a new datapoint type (DPT) in the WinCC OA system. Creates a complete datapoint type tree structure with elements and optional nested structures. Parameters: - typeName: Name of the datapoint type to be created (required); never starts with |
dp-type-get | read | |
dp-type-name | read | Returns the data point type for the given data point name. dpName: Name of the data point (for example, |
edit-dashboard | write | Edit an existing dashboard |
edit-widget | write | Edit a widget on a dashboard. Updates widget properties including title, layout, and appearance settings (header, footer, icons, colors). Parameters: - dashboardId: Dashboard datapoint name (required) - widgetIdentifier: Widget identifier (required) - By ID: { |
file | read | Files and documents |
get-datapoints | read | Search and return datapoint instances from the WinCC OA project by pattern and type. For each match, provides the datapoint |
get-dpTypes | read | |
get-manager-properties | read | |
get-manager-status | read | Get the status of a specific manager by index. Returns detailed status information for a single manager: - Current state - Process ID - Start mode - Start time - Manager number Parameters: - managerIndex: The index of the manager (1-based, 0 is Pmon itself) |
get-value | read | Get current value of datapoint element(s) from WinCC OA. For a single datapoint: pass as string (e.g. |
kill-manager | destructive | |
list-custom-icons | read | List all available custom icons in /data/WebUI/icons/. Returns an array of icon paths that can be used in widget headers/footers. Example usage: Call this tool to see all available custom icons, then use the path in edit-widget: { |
list-dashboards | read | |
list-ix-icons | read | |
list-managers | read | |
list-widgets | read | List all widgets on a dashboard. Returns an array of all widgets with their configurations. Parameters: - dashboardId: Dashboard datapoint name (required) Returns: Array of widget instances with full configuration Example: { |
mqtt-add-address | write | Configures an MQTT peripheral address for a datapoint element (DPE). This tool sets up a DPE to publish and/or subscribe to an MQTT topic. The DPE will send/receive values through the specified MQTT connection. Required parameters: - dpeName: Full datapoint element name (e.g., |
mqtt-add-connection | write | |
mqtt-delete-connection | destructive | Deletes an existing MQTT connection. This tool removes the connection datapoint and disconnects from the broker. The connection will be disabled before deletion. Required parameters: - connectionName: Name of the connection to delete (e.g., |
mqtt-get-connection-state | read | |
mqtt-list-connections | read | Lists all configured MQTT connections and their current states. Returns information about each connection including: - Connection name - Connection state (Inactive, Disconnected, Connecting, Connected, etc.) - Broker address (if available) No parameters required. |
navigation | read | Navigation and movement |
network | read | Connectivity and network |
opcua-add-address-config | write | |
opcua-add-connection | write | |
opcua-browse | read | Browses the OPC UA address space with smart auto-depth selection. This tool intelligently navigates through the OPC UA server |
opcua-delete-connection | destructive | Completely deletes an existing OPC UA client connection from WinCC OA. This tool removes an OPC UA connection by: 1. Removing the connection from the manager |
plant | read | Industrial plants and buildings |
pv-range-delete | destructive | Delete pv_range (min/max) configuration from a datapoint element in WinCC OA. This tool removes the pv_range configuration from the specified datapoint element. Example: { |
pv-range-query | read | Query existing pv_range (min/max) configuration from a datapoint element in WinCC OA. Returns the current range configuration including min, max values and whether boundaries are inclusive. Example: { |
pv-range-set | write | |
remove-manager | destructive | |
settings | read | Configuration and settings |
start-manager | write | |
status | read | Status indicators and alerts |
stop-manager | write | Stop a WinCC OA manager gracefully. This tool stops a manager by sending SIGTERM signal. The manager will have time to save data and close connections properly. IMPORTANT NOTES: - Manager index starts at 1 (0 is Pmon itself) - This sends SIGTERM (graceful shutdown) - The manager has |
time | write | Time and schedule related |
trend | read | Trend and direction indicators |
update-manager-properties | write | |
user | read | People and user management |
Trust audit
CAUTIONgrade B · trust 88/100 Install with care. The audit found things worth knowing before you trust its output.
| Layer | What it checks | Result |
|---|---|---|
| L0 | Provenance & inventory | PASS |
| L1 | Static analysis of the code | WARN |
| L2 | Instruction surface (what it tells the agent) | PASS |
| L3 | Class-specific surface | WARN |
| L4 | Behavioural (sandbox) | SKIPPED |
What the source does
- Filesystem
- declared (6 observation(s))
- Network
- declared (5 observation(s))
- Shell
- declared (1 observation(s))
- Dependencies
- pinned
- Secrets in source
- found
Findings (13)
console.log(`API Token: ${log.describeSecret(serverConfig.http.auth.token)}`);const secret = 'super-secret-token-value';
alarm-delete, archive-delete, common-delete, delete-custom-icon, delete-dashboard, delete-widget, kill-manager, mqtt-delete-connection, opcua-delete-connection, pv-range-delete, remove-manager
const bad = ['../x', '..', 'a/b', 'a\\b', '.hidden', '', 'a'.repeat(200), '/etc/passwd', 'x.svg/../../y'];
} from '../../types/dashboards/dashboard.js';
} from '../../types/dashboards/dashboard.js';
import type { WidgetInstance } from '../../types/dashboards/schema.js';import type { WidgetConfig } from '../../types/dashboards/widgets.js';import { validateTrendConfig, validatePieConfig } from '../../types/dashboards/widgets.js';proxy_pass http://127.0.0.1:3000;
- Some operations require elevated privileges
cat mcpWinCCOA/.env
cat .env | grep -v '#' | grep '='
Gates applied: no_behavioural_pass.
0766696e4beefull audit observations/trust-audit/mcp-server/winccoa__wincc-oa.json · Report an issue / request a re-scanAudit history
Every audit this server has had. A grade with a past is a grade somebody is still checking.
| Date | Source | Verdict | Grade | Score | Change |
|---|---|---|---|---|---|
| 2026-10-10 | 0766696e4bee | CAUTION | B | 88 | first audit |
Questions
What is the WinCC OA MCP server?
WinCC OA MCP Server
What tools does WinCC OA expose?
62 in total: 30 read-only, 21 that write, and 11 that can delete or overwrite (alarm-delete, archive-delete, common-delete, delete-custom-icon, delete-dashboard). Every one is listed on this page with its risk.
Is WinCC OA safe to connect to an agent?
With care. The audit graded it B (88/100) and found 13 things worth knowing before you trust this server, listed below with the exact line each was found on. Separately from the audit: 11 of its tools can destroy data, so scope the token you give it to what you actually need.
What credentials does WinCC OA need?
It reads MCP_API_TOKEN, MCP_AUTH_TYPE, MCP_CORS_CREDENTIALS, MCP_JWT_SECRET, MCP_SSL_KEY_PATH and WINCCOA_PMON_PASSWORD from the environment. Give it a token scoped to the least it needs — an agent that can be talked into calling a tool can be talked into calling it with your credentials.
How does WinCC OA run?
It speaks stdio and streamable-http, so it runs as a local process your client starts. It is published on npm as @etm-professional-control/winccoa-mcp-server at 1.5.1.
How current is this page?
The grade is for one exact copy of the source (0766696e4bee), read on 2026-10-10. The repository is watched and re-audited when it changes.