s7-mcp-bridge

cadugrillo/s7-mcp-bridge

3.3

If you are the rightful owner of s7-mcp-bridge and would like to certify it and/or have it hosted online, please leave a comment on the right or send an email to dayong@mcphub.com.

S7 MCP Bridge is a server that connects AI agents to Siemens industrial PLCs, enabling automated monitoring and control of industrial equipment.

Tools
5
Resources
0
Prompts
0

S7 MCP Bridge

S7 MCP Bridge is a MCP Server that connects AI agents to Siemens industrial PLCs (specifically S7-1500 and S7-1200 models). This allows AI agents to automatically monitor and control industrial equipment by sending commands and receiving data from the machines.


🔧 Available Tools

  • User authentication (Api-Login, Api-Logout, Api-ChangePassword)
  • Check PLC connectivity (Api-Ping)
  • Retrieve user permissions (Api-GetPermissions)
  • Get API version (Api-Version)
  • List available API methods (Api-Browse)
  • Retrieve structure information (Api-GetQuantityStructures)
  • Get password security policies (Api-GetPasswordPolicy)
  • Browse tags and metadata (PlcProgram-Browse)
  • Read single variables (PlcProgram-Read)
  • Write Boolean, Number, or String tags (PlcProgram-Write)
  • Read the current CPU operating mode (Plc-ReadOperatingMode)
  • Request a change of operating mode (Plc-RequestChangeOperatingMode)
  • Read the CPU system time (Plc-ReadSystemTime)
  • Set the CPU system time (Plc-SetSystemTime)
  • Read available project languages (Project-ReadLanguages)
  • Browse active alarms (Alarms-Browse)
  • Acknowledge alarms (Alarms-Acknowledge)
  • Browse diagnostic buffer entries (DiagnosticBuffer-Browse)
  • List all configured PLCs via env variables (List-AvailablePlcs)
  • Create backup file of the CPU (Plc-CreateBackup)
  • Delete a ticket provided by the system (Api-CloseTicket)

⚙️ Prerequisites

  • Node.js (v18.x or later recommended)
  • npm (comes bundled with Node.js)
  • Access to a running SIEMENS PLC API (Webserver)

⚙️ Configuration

This server uses environment variables for configuration.

Example 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

🚀 Getting Started (Development)

  1. Git Clone this repo: https://github.com/cadugrillo/s7-mcp-bridge.git

  2. Navigate to the project folder:

cd s7-mcp-bridge
  1. Install dependencies:
npm install
  1. Build the project:
npm run build
  1. Edit env variables as shown above.

  2. Start the server

npm run start

🐳 Docker Container

There is a Docker Container Image avaiable at https://hub.docker.com/r/cadugrillo/s7-mcp-bridge/tags

  • How to run
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

Remember to change port according to your deployment. When TRANSPORT is set to "http-stream", there is a status page at http://<server-ip-address>:[MCP_SERVER_PORT +1]/status

  • Available Environment Variables
PLC_IP_ADDRESSESrequiredIP addresses of available PLCs separated by comma eg. "192.168.1.10, 192.168.1.20"
PLC_NAMESoptionalNames of available PLCs separated by comma eg. "Machine1, Machine2"
MCP_SERVER_PORToptionalIf not set, it defaults to 57001, status page at http://<server-ip-address>:57002/status
TRANSPORToptionalIt can be "http-stream" or "stdio". If not set it defaults to http-stream

🖥️ Connecting with Claude Desktop

  1. Install Claude extension (s7-mcp-bridge-vx.x.x.mcpb) found at https://github.com/cadugrillo/s7-mcp-bridge/tree/main/claude_extension.

  2. Or run as a Docker Container choosing from one of the options (stdio or http-stream):

  • (stdio) Find or create the claude_desktop_config.json file (typically in the Claude app config folder) and add the following:
{
    "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-stream) Or run the docker container (instructions above) and add the following (remember to change port according to your deployment):
{
  "mcpServers": {
    "S7-MCP-Bridge": {
      "command": "npx",
      "args": ["mcp-remote", "http://localhost:57001/mcp"]
    }
  }
}
  1. Or use the following if running locally for development (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"
      }
    }
  }
}

🪲 Reporting bugs and contributing

  • Want to report a bug or request a feature? Please open an issue