An open API service indexing awesome lists of open source software.

https://github.com/daedalus/mcp-snap7


https://github.com/daedalus/mcp-snap7

Last synced: 3 months ago
JSON representation

Awesome Lists containing this project

README

          

# mcp-snap7

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

[![PyPI](https://img.shields.io/pypi/v/mcp-snap7.svg)](https://pypi.org/project/mcp-snap7/)
[![Python](https://img.shields.io/pypi/pyversions/mcp-snap7.svg)](https://pypi.org/project/mcp-snap7/)
[![Coverage](https://codecov.io/gh/daedalus/mcp-snap7/branch/main/graph/badge.svg)](https://codecov.io/gh/daedalus/mcp-snap7)
[![Ruff](https://img.shields.io/endpoint?url=https://raw.githubusercontent.com/astral-sh/ruff/main/assets/badge/v2.json)](https://github.com/astral-sh/ruff)

## Install

```bash
pip install mcp-snap7
```

## Requirements

- python-snap7 requires the libsnap7 library to be installed on your system.
See [python-snap7 documentation](https://python-snap7.readthedocs.io/) for installation instructions.

## Usage

### As MCP Server

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

```json
{
"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

```bash
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/
```