PLC连接桥接器

S7 MCP Bridge是一个连接AI代理与西门子工业PLC(S7-1500和S7-1200型号)的服务器,实现工业设备的自动监控和控制。

  • by cadugrillo
  • TypeScript
  • 本地部署
  • 26 星标
  • 更新于
在 GitHub 查看 cadugrillo/s7-mcp-bridge

使用说明

S7 MCP电桥

S7 MCP电桥 是一个MCP服务器,将AI代理连接到西门子工业PLC(特别是S7-1500和S7-1200型号)。这允许AI代理通过发送命令和从机器接收数据来自动监视和控制工业设备。


🔧 可用工具

  • 用户身份验证(Api-Login, Api-Logout, Api-ChangePassword)
  • 检查PLC连接(Api-Ping)
  • 检索用户权限(Api-GetPermissions)
  • 获取API版本(Api-Version)
  • 列出可用的API方法(Api-Browse)
  • 检索结构信息(Api-GetQuantityStructures)
  • 获取密码安全策略(Api-GetPasswordPolicy)
  • 浏览标签和元数据(PlcProgram-Browse)
  • 读取单个变量(PlcProgram-Read)
  • 写入布尔、数字或字符串标签(PlcProgram-Write)
  • 读取当前CPU运行模式(Plc-ReadOperatingMode)
  • 请求更改操作模式(Plc-RequestChangeOperatingMode)
  • 读取CPU系统时间(Plc-ReadSystemTime)
  • 设置CPU系统时间(Plc-SetSystemTime)
  • 阅读可用的项目语言(Project-ReadLanguages)
  • 浏览活动警报(Alarms-Browse)
  • 确认警报(Alarms-Acknowledge)
  • 浏览诊断缓冲区条目(DiagnosticBuffer-Browse)
  • 通过环境变量列出所有配置的PLC(List-AvailablePlcs)
  • 创建CPU的备份文件(Plc-CreateBackup)
  • 删除系统提供的工单(Api-CloseTicket)

⚙️ 先决条件

  • Node.js (建议使用v18.x或更高版本)
  • npm(与Node.js捆绑在一起)
  • 进入跑步 西门子PLC API(网络服务器)

⚙️ 配置

此服务器使用环境变量进行配置。

示例 env variables:

export PLC_IP_ADDRESSES="192.168.2.200, 192.168.2.201, 192.168.2.202"
export PLC_NAMES="PLC1, PLC2, PLC3" //optional
export MCP_SERVER_PORT=57001 //optional
export TRANSPORT="http-stream" //optional

🚀 入门(开发)

  1. Git克隆此仓库:https://github.com/cadugrillo/s7-mcp-bridge.git

  2. 导航到项目文件夹:

cd s7-mcp-bridge
  1. 安装依赖项:
npm install
  1. 构建项目:
npm run build
  1. 如上所示编辑env变量。

  2. 启动服务器

npm run start

🐳 Docker 容器

Docker容器镜像可在https://hub.docker.com/r/cadugrillo/s7-mcp-bridge/tags

  • 如何运行
docker run -d -p 57001:57001 -p 57002:57002 -m 512m --memory-swap=512m \
--name s7McpBridge \
-e MCP_SERVER_PORT=57001 \
-e PLC_IP_ADDRESSES="192.168.2.200, 192.168.2.201, 192.168.2.202" \
-e PLC_NAMES="PLC1, PLC2, PLC3" \
cadugrillo/s7-mcp-bridge:latest

记得根据部署更改端口。 当TRANSPORT设置为“http流”时,在http://<服务器ip地址>处有一个状态页面:[MCP_server_PORT+1]/status

  • 可用环境变量
PLC_IP_ADDRESS 必填 可用PLC的IP地址,用逗号分隔,例如“192.168.1.10,192.168.1.20”
PLC_NAMES 可选 可用PLC的名称,用逗号分隔,例如“Machine1,Machine2”
MCP_SERVER_PORT 可选 如果未设置,则默认为57001,状态页面位于http://<服务器ip地址>:57002/status
TRANSPORT 可选 可以是“http流”或“stdio”。如果未设置,则默认为http流

🖥️ 与Claude Desktop连接

  1. 安装Claude扩展(s7-mcp桥vx.x.x.mcpb),位于https://github.com/cadugrillo/s7-mcp-bridge/tree/main/claude_extension.

  2. 或者作为Docker容器运行,从以下选项中选择一个(stdio或http流):

  • (stdio)查找或创建claude_desktop_config.json文件(通常在claude app config文件夹中),并添加以下内容:
{
    "mcpServers": {
        "S7-MCP-Bridge": {
            "command": "docker",
            "args": [
                "run",
                "-i",
                "--rm",
                "-e",
                "PLC_IP_ADDRESSES=192.168.2.200, 192.168.2.201, 192.168.2.202",
                "-e",
                "PLC_NAMES=PLC1, PLC2, PLC3",
                "-e",
                "TRANSPORT=stdio",
                "cadugrillo/s7-mcp-bridge:latest"
            ]
        }
    }
}
  • (http流)或者运行docker容器(上面的说明)并添加以下内容(记住根据您的部署更改端口):
{
  "mcpServers": {
    "S7-MCP-Bridge": {
      "command": "npx",
      "args": ["mcp-remote", "http://localhost:57001/mcp"]
    }
  }
}
  1. 或者,如果在本地运行进行开发(stdio),请使用以下命令:
{
  "mcpServers": {
    "S7-MCP-Bridge": {
      "command": "node",
      "args": ["path/to/your/index.js"], //`for Windows user proper escape (eg. C:\\path\\to\\your\\index.js)`
      "env": {
        "PLC_IP_ADDRESSES":"192.168.2.200, 192.168.2.201, 192.168.2.202",
        "PLC_NAMES":"PLC1, PLC2, PLC3",
        "TRANSPORT": "stdio"
      }
    }
  }
}

🪲 报告错误并做出贡献

  • 想要报告错误或请求功能?请打开 问题