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)如何开始
- 导航到项目目录。
- 安装依赖项:
如果你还没有,请安装必要的Node.js包:
npm install- 设置环境变量:
确保 GRAPHQL_URL (以及可选 GRAPHQL_USR, GRAPHQL_PWD)环境变量的设置如“配置”部分所述。
- 运行服务器:
您可以使用提供的 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.jsMCP服务器将启动并监听端口 3000 默认情况下。您可以使用配置端口 MCP_PORT 环境变量:
MCP_PORT=8080 node index.jsMCP请求预计在 /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或未提供,则给定报警的所有实例都将重置。
