Atlas / MCP servers / winccoa / WinCC OA

WinCC OACAUTION

mcp/winccoa/wincc-oa

WinCC OA MCP Server

Verdict
CAUTION
Grade
B
Trust score
88 /100
Exposed tools
62 30r · 21w · 11d
Transport
stdio · streamable-http
License
MIT
Stars
25
01

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

Read from source at commit 0766696e4beeOBSERVED · 2026-10-10
02

Connect

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-code
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]
claude-desktop
{
  "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}"
      }
    }
  }
}
03

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.

ToolRiskDescription
actionreadCommon user actions
add-managerwrite
add-widgetwriteAdd 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-deletedestructiveDelete 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-setwrite
archive-deletedestructiveDelete archive configuration from a datapoint element in WinCC OA. This tool removes the archive configuration from the specified datapoint element. Example: {
archive-queryreadQuery 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-setwriteSet 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: {
batteryreadBattery and power status
chartreadChart and graph types
common-deletedestructiveDelete 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-queryreadQuery 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-setwrite
create-custom-iconwrite
create-dashboardwrite
create-datapointwrite
delete-custom-icondestructiveDelete 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-dashboarddestructiveDelete a dashboard. Marks a dashboard as unpublished and clears all its widgets. Parameters: - dashboardId: Dashboard datapoint name (e.g.,
delete-widgetdestructiveDelete a widget from a dashboard. Removes a widget from the dashboard. Parameters: - dashboardId: Dashboard datapoint name (required) - widgetIdentifier: Widget identifier (required) - By ID: {
devicereadHardware and devices
dp-setwriteSet 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-createwriteCreate 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-getread
dp-type-namereadReturns the data point type for the given data point name. dpName: Name of the data point (for example,
edit-dashboardwriteEdit an existing dashboard
edit-widgetwriteEdit 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: {
filereadFiles and documents
get-datapointsreadSearch and return datapoint instances from the WinCC OA project by pattern and type. For each match, provides the datapoint
get-dpTypesread
get-manager-propertiesread
get-manager-statusreadGet 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-valuereadGet current value of datapoint element(s) from WinCC OA. For a single datapoint: pass as string (e.g.
kill-managerdestructive
list-custom-iconsreadList 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-dashboardsread
list-ix-iconsread
list-managersread
list-widgetsreadList 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-addresswriteConfigures 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-connectionwrite
mqtt-delete-connectiondestructiveDeletes 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-stateread
mqtt-list-connectionsreadLists 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.
navigationreadNavigation and movement
networkreadConnectivity and network
opcua-add-address-configwrite
opcua-add-connectionwrite
opcua-browsereadBrowses the OPC UA address space with smart auto-depth selection. This tool intelligently navigates through the OPC UA server
opcua-delete-connectiondestructiveCompletely 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
plantreadIndustrial plants and buildings
pv-range-deletedestructiveDelete 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-queryreadQuery 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-setwrite
remove-managerdestructive
settingsreadConfiguration and settings
start-managerwrite
statusreadStatus indicators and alerts
stop-managerwriteStop 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
timewriteTime and schedule related
trendreadTrend and direction indicators
update-manager-propertieswrite
userreadPeople and user management
04

Trust audit

CAUTIONgrade B · trust 88/100 Install with care. The audit found things worth knowing before you trust its output.

LayerWhat it checksResult
L0Provenance & inventoryPASS
L1Static analysis of the codeWARN
L2Instruction surface (what it tells the agent)PASS
L3Class-specific surfaceWARN
L4Behavioural (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)

MEDIUMInformation disclosure · disclose.log_secret · CWE-209, CWE-532
mcpWinCCOA/src/index_http.ts:422
console.log(`API Token: ${log.describeSecret(serverConfig.http.auth.token)}`);
MEDIUMHard-coded secrets · secret.generic · CWE-798, CWE-321
mcpWinCCOA/tests/unit/config/config-loader.test.ts:304
const secret = 'super-secret-token-value';
MEDIUMFilesystem / path · mcp.destructive_tools · CWE-22, CWE-59
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
Why it matters. 11 tool(s) can delete or overwrite
Fix. prefer a read-only mode or scoped tokens; the page states the blast radius
LOWFilesystem / path · fs.system_paths · CWE-22, CWE-59
mcpWinCCOA/tests/unit/helpers/icons.test.ts:191
const bad = ['../x', '..', 'a/b', 'a\\b', '.hidden', '', 'a'.repeat(200), '/etc/passwd', 'x.svg/../../y'];
LOWFilesystem / path · fs.traversal · CWE-22, CWE-59
mcpWinCCOA/src/helpers/dashboards/DashboardManager.ts:18
} from '../../types/dashboards/dashboard.js';
LOWFilesystem / path · fs.traversal · CWE-22, CWE-59
mcpWinCCOA/src/helpers/dashboards/DashboardManager.ts:23
} from '../../types/dashboards/dashboard.js';
LOWFilesystem / path · fs.traversal · CWE-22, CWE-59
mcpWinCCOA/src/helpers/dashboards/DashboardManager.ts:24
import type { WidgetInstance } from '../../types/dashboards/schema.js';
LOWFilesystem / path · fs.traversal · CWE-22, CWE-59
mcpWinCCOA/src/helpers/dashboards/DashboardManager.ts:25
import type { WidgetConfig } from '../../types/dashboards/widgets.js';
LOWFilesystem / path · fs.traversal · CWE-22, CWE-59
mcpWinCCOA/src/helpers/dashboards/DashboardManager.ts:26
import { validateTrendConfig, validatePieConfig } from '../../types/dashboards/widgets.js';
LOWNetwork egress · net.raw_ip · CWE-200, CWE-319
docs/TROUBLESHOOTING.md:598
proxy_pass http://127.0.0.1:3000;
INFOPrompt injection · prompt.authority_framing · CWE-94, CWE-1427
mcpWinCCOA/src/fields/default.md:47
- Some operations require elevated privileges
INFOPrompt injection · prompt.credential_read · CWE-94, CWE-1427
docs/TROUBLESHOOTING.md:243
cat mcpWinCCOA/.env
Why it matters. asks the agent to read credentials
INFOPrompt injection · prompt.credential_read · CWE-94, CWE-1427
docs/TROUBLESHOOTING.md:662
cat .env | grep -v '#' | grep '='
Why it matters. asks the agent to read credentials

Gates applied: no_behavioural_pass.

Audited 2026-10-10 · audit v0.4.1 · source sha 0766696e4beefull audit observations/trust-audit/mcp-server/winccoa__wincc-oa.json · Report an issue / request a re-scan
05

Audit history

Every audit this server has had. A grade with a past is a grade somebody is still checking.

DateSourceVerdictGradeScoreChange
2026-10-100766696e4beeCAUTIONB88first audit
06

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.

Advertisement