WinCC Unified MCP服务器

一款通过GraphQL API与SIEMENS WinCC Unified SCADA系统交互的模型上下文协议服务器,提供用户认证、标签值读写、报警管理等功能。

  • by vogler75
  • JavaScript
  • 本地部署
  • 15 星标
  • 更新于
在 GitHub 查看 vogler75/winccua-mcp-server

使用说明

WinCC统一MCP服务器

模型上下文协议(MCP)服务器,设计用于通过其GraphQL API与西门子WinCC Unified SCADA系统接口。该服务器将各种WinCC Unified功能作为MCP工具公开,允许AI助手和其他兼容MCP的客户端与SCADA系统进行交互。

特性

  • 连接到WinCC统一GraphQL端点。
  • 提供MCP工具,用于:
    • 用户身份验证(login-user).
    • 浏览SCADA对象(browse-objects).
    • 读取当前标签值(get-tag-values).
    • 查询历史/记录的标签数据(get-logged-tag-values).
    • 获取活动警报(get-active-alarms).
    • 获取记录的警报(get-logged-alarms).
    • 将值写入标签(write-tag-values).
    • 确认警报(acknowledge-alarms).
    • 重置警报(reset-alarms).
  • 支持可选的自动服务帐户登录和令牌刷新机制。

先决条件

  • Node.js(建议使用v18.x或更高版本)。
  • npm(通常随Node.js一起提供)。
  • 访问正在运行的WinCC Unified GraphQL服务器端点。

配置

使用环境变量配置服务器:

  • GRAPHQL_URL: 必需WinCC Unified GraphQL服务器的完整URL。 例子: https://your-wincc-server.example.com/graphql
  • GRAPHQL_USR:(可选)服务帐户的用户名。如果随附 GRAPHQL_PWD,服务器将在启动时尝试使用这些凭据登录,并定期(每分钟)维护会话。此令牌全局存储,如果没有发生用户特定的登录,则由工具使用。
  • GRAPHQL_PWD:(可选)服务帐户的密码。

环境变量设置示例(Linux/macOS):

export GRAPHQL_URL="http://localhost:4000/graphql"
export GRAPHQL_USR="username1"
export GRAPHQL_PWD="password1"
export NODE_TLS_REJECT_UNAUTHORIZED=0 # Set to 0 to disable TLS certificate validation (development only)

如何开始

  1. 导航到项目目录。

  2. 安装依赖项: 如果你还没有,请安装必要的Node.js包:

    npm install
    
  3. 设置环境变量: 确保 GRAPHQL_URL (以及可选 GRAPHQL_USR, GRAPHQL_PWD)环境变量的设置如“配置”部分所述。

  4. 运行服务器: 您可以使用提供的 run.sh 脚本(在Linux/macOS上):

    ./run.sh
    

    这 run.sh 脚本执行 export NODE_TLS_REJECT_UNAUTHORIZED=0 在启动服务器之前 node index.jsThe NODE_TLS_REJECT_UNAUTHORIZED=0 设置禁用TLS证书验证,如果WinCC Unified GraphQL服务器使用HTTPS和自签名或内部颁发的证书,则可能需要进行TLS证书验证。 警告: 禁用证书验证(NODE_TLS_REJECT_UNAUTHORIZED=0)应该只在可信的开发或内部网络环境中进行,因为它绕过了重要的安全检查。

    或者,您可以直接运行服务器:

    # On Linux/macOS, if your GraphQL server uses HTTPS with a self-signed certificate:
    # export NODE_TLS_REJECT_UNAUTHORIZED=0
    # On Windows (PowerShell), if needed:
    # $env:NODE_TLS_REJECT_UNAUTHORIZED = "0"
    
    node index.js
    

MCP服务器将启动并监听端口 3000 默认情况下。您可以使用配置端口 MCP_PORT 环境变量:

MCP_PORT=8080 node index.js

MCP请求预计在 /mcp 端点(例如。, http://localhost:3000/mcp).

免责声明

安全通知: 此服务器尚未加固或保护,无法用于生产。在任何环境中部署或公开此服务器之前,用户有责任实施适当的安全措施(如身份验证、授权、网络限制和HTTPS)。

与Claude桌面客户端连接

将此MCP服务器与Claude AI桌面应用程序(或其他支持 mcp-remote),您需要配置客户端以连接到此服务器。对于Claude Desktop应用程序,这通常是通过编辑 claude_desktop_config.json 文件。此文件的位置因操作系统而异,但通常在Claude应用程序的支持或配置目录中。

添加或更新 mcpServers 你的部分 claude_desktop_config.json 文件如下:

{
  "mcpServers": {
    "WinCC Unified": {
      "command": "npx",
      "args": ["mcp-remote", "http://localhost:3000/mcp"]
    }
  }
}

说明:

  • "WinCC Unified":这是此服务器连接的用户定义名称,将出现在Claude应用程序中。你可以把它变成对你有意义的东西(例如。, "WinCC_Unified_Plant_A").
  • "command": "npx":此命令告诉客户端使用 npx (节点包执行)运行 mcp-remote 工具。
  • "args": ["mcp-remote", "http://localhost:3000/mcp"]:
    • mcp-remote:这是命令行MCP客户端。确保 npx 可以找到它。您可能需要安装 @modelcontextprotocol/tools 全球范围(npm install -g @modelcontextprotocol/tools)或者在可由以下人员访问的项目上下文中提供它 npx.
    • http://localhost:3000/mcp:这是WinCC Unified MCP服务器正在侦听的URL。如果您的服务器在其他地方或其他端口上运行,请调整主机名和端口。

保存此配置后,重新启动Claude Desktop应用程序。现在,它应该将“WinCC Unified”(或您选择的名称)列为可用的MCP服务器,允许您使用其工具。

可用工具

服务器公开了以下与WinCC Unified交互的工具:

  • login-user: 使用用户名和密码将用户登录到WinCC Unified。为后续请求存储会话令牌。这是可选的,因为MCP服务器可以以使用服务帐户自动登录的方式启动。

  • browse-objects: 根据提供的筛选条件,查询标签、元素、类型、警报、日志标签以及基本上任何具有配置名称的内容。

  • get-tag-values: 从WinCC Unified查询标签值。根据提供的名单。如果directRead为真,则直接从PLC获取值。

  • get-logged-tag-values: 从数据库中查询记录的标记值。

  • get-active-alarms: 从提供的系统中查询活动警报。

  • get-logged-alarms: 查询存储系统中记录的警报。

  • write-tag-values: 根据提供的TagValueInput列表更新标签。

  • acknowledge-alarms: 确认一个或多个警报。 每个报警标识符必须具有配置的报警的名称,以及可选的实例ID。如果实例ID为0或未提供,则将确认给定警报的所有实例。

  • reset-alarms: 重置一个或多个警报。 每个报警标识符必须具有配置的报警的名称,以及可选的实例ID。如果实例ID为0或未提供,则给定报警的所有实例都将重置。