Skip to main content
Glama
mcp-snap7

mcp-snap7

by daedalus

mcp-snap7

MCP server for python-snap7, enabling MCP clients to interact with Siemens PLCs

PyPI Python Coverage Ruff

Install

pip install mcp-snap7

Related MCP server: OpenTIA-MCP

Requirements

  • python-snap7 requires the libsnap7 library to be installed on your system. See python-snap7 documentation for installation instructions.

Usage

As MCP Server

Configure your MCP client to use mcp-snap7 as a stdio server:

{
  "mcpServers": {
    "mcp-snap7": {
      "command": "mcp-snap7"
    }
  }
}

Available Tools

  • connect_plc - Connect to a Siemens PLC

  • disconnect_plc - Disconnect from PLC

  • get_connected - Check connection status

  • db_read / db_write - Read/write data blocks

  • mb_read / mb_write - Read/write memory bytes

  • tm_read / tm_write - Read/write timers

  • ct_read / ct_write - Read/write counters

  • eb_read / eb_write - Read/write edge inputs

  • ab_read / ab_write - Read/write absolute bytes

  • get_cpu_info - Get CPU information

  • get_cpu_state - Get CPU state

  • get_protection - Get PLC protection level

  • plc_cold_start - Trigger cold start

  • plc_hot_start - Trigger hot start

  • plc_stop - Stop PLC

  • get_error_text - Get error description

Development

git clone https://github.com/daedalus/mcp-snap7.git
cd mcp-snap7
pip install -e ".[test]"

# run tests
pytest

# format
ruff format src/ tests/

# lint
ruff check src/ tests/

# type check
mypy src/

Available Tools

22 tools
ab_readC

Read absolute bytes from PLC.

Inputs: start (required), size (required). Returns: result

ab_writeC

Write absolute bytes to PLC.

Inputs: start (required), data (required). Returns: result

connect_plcC

Connect to a Siemens PLC.

Inputs: address (required), rack, slot, tcp_port. Returns: result

ct_readB

Read counters from PLC.

Inputs: start (required), size (required). Returns: result

ct_writeC

Write counters to PLC.

Inputs: start (required), data (required). Returns: result

db_readC

Read data block from PLC.

Inputs: db_number (required), start (required), size (required). Returns: result

db_writeC

Write data block to PLC.

Inputs: db_number (required), start (required), data (required). Returns: result

disconnect_plcB

Disconnect from the connected PLC.

Returns: Disconnection status message

Inputs: no named parameters. Returns: result

eb_readC

Read edge inputs from PLC.

Inputs: start (required), size (required). Returns: result

eb_writeB

Write edge inputs to PLC.

Inputs: start (required), data (required). Returns: result

get_connectedA

Check if PLC is connected.

Returns: True if connected, False otherwise

Inputs: no named parameters. Returns: result

get_cpu_infoA

Get CPU information from PLC.

Returns: Dictionary containing CPU information

Inputs: no named parameters. Returns: object

get_cpu_stateA

Get CPU state from PLC.

Returns: CPU state string

Inputs: no named parameters. Returns: result

get_error_textA

Get error description from error code.

Inputs: error_code (required). Returns: result

get_protectionB

Get PLC protection level.

Returns: Dictionary containing protection level info

Inputs: no named parameters. Returns: object

mb_readC

Read memory bytes from PLC.

Inputs: start (required), size (required). Returns: result

mb_writeB

Write memory bytes to PLC.

Inputs: start (required), data (required). Returns: result

plc_cold_startB

Trigger PLC cold start.

Returns: Status message

Inputs: no named parameters. Returns: result

plc_hot_startB

Trigger PLC hot start.

Returns: Status message

Inputs: no named parameters. Returns: result

plc_stopB

Stop PLC.

Returns: Status message

Inputs: no named parameters. Returns: result

tm_readC

Read timers from PLC.

Inputs: start (required), size (required). Returns: result

tm_writeB

Write timers to PLC.

Inputs: start (required), data (required). Returns: result

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

Loading tool schema changelog…

    TDQS

    B3.4/5.0

    Scored across 22 tools

    Disambiguation5/5

    Each tool has a distinct purpose: connecting/disconnecting, reading/writing specific memory areas, retrieving CPU information, and controlling PLC state. There is no overlap or ambiguity.

    Naming Consistency5/5

    All tool names follow a consistent verb_noun pattern with snake_case (e.g., connect_plc, db_read, plc_stop). The naming is predictable and easy to parse.

    Tool Count4/5

    22 tools is on the higher side but appropriate for the complex domain of PLC interaction, covering multiple memory types and control operations. It feels well-scoped without being bloated.

    Completeness4/5

    The tool set provides comprehensive read/write access to common PLC memory areas and basic control functions. Minor gaps like safety operations or additional diagnostics exist, but core workflows are covered.

    Maintenance

    ActivityNo data
    ResponsivenessOutdated data

    Related MCP Connectors

    Related MCP Servers

    • F
      license
      Not graded
      quality
      C
      maintenance
      MCP server that connects AI assistants to Siemens TIA Portal via the Openness API. AI-assisted PLC programming, project management, hardware configuration, cross-reference analysis, and deployment. 19 tools, 230 actions.
      60
      -
    • A
      license
      B
      quality
      C
      maintenance
      Universal MCP server for industrial PLC communication, enabling AI agents to read sensors, alarms, status, setpoints, and write setpoints via adapters for Modbus, S7, or custom PLCs.
      6
      MIT
    • A
      license
      Not graded
      quality
      D
      maintenance
      Connects AI agents to Siemens industrial PLCs for automatic monitoring and control of industrial equipment.
      28
      MIT