Skip to main content
Glama
OlubunmiAde

plc-mcp-server

by OlubunmiAde
README.md
# PLC MCP Server

A Model Context Protocol (MCP) server for industrial PLC integration. Enables AI assistants to read tags, monitor alarms, and interact with Allen-Bradley ControlLogix PLCs using natural language.

## Features

- šŸ­ **Tag Operations** - Read/write PLC tags
- 🚨 **Alarm Management** - View and acknowledge alarms
- šŸ“Š **Diagnostics** - PLC status, I/O health, connection info
- šŸ”’ **Safety First** - Read-only by default, write whitelist, audit logging
- šŸ”Œ **MCP Standard** - Works with Claude Desktop, Cursor, and any MCP client

## Quick Start

```bash
# Install dependencies
pip install -r requirements.txt

# Configure your PLC connection
cp config.example.yaml config.yaml
# Edit config.yaml with your PLC IP and settings

# Run the server (stdio mode for MCP)
python -m plc_mcp_server

# Or run in HTTP/SSE mode
python -m plc_mcp_server --transport sse --port 8080
```

## Claude Desktop Configuration

Add to `claude_desktop_config.json`:

```json
{
  "mcpServers": {
    "plc": {
      "command": "python",
      "args": ["-m", "plc_mcp_server"],
      "cwd": "/path/to/plc-mcp-server"
    }
  }
}
```

## Project Structure

```
plc-mcp-server/
ā”œā”€ā”€ plc_mcp_server/
│   ā”œā”€ā”€ __init__.py
│   ā”œā”€ā”€ __main__.py          # Entry point
│   ā”œā”€ā”€ server.py            # MCP server implementation
│   ā”œā”€ā”€ plc/
│   │   ā”œā”€ā”€ __init__.py
│   │   ā”œā”€ā”€ client.py        # PLC connection manager
│   │   ā”œā”€ā”€ allen_bradley.py # ControlLogix driver
│   │   ā”œā”€ā”€ siemens.py       # S7 driver (future)
│   │   └── modbus.py        # Modbus driver (future)
│   ā”œā”€ā”€ tools/
│   │   ā”œā”€ā”€ __init__.py
│   │   ā”œā”€ā”€ tags.py          # Tag read/write tools
│   │   ā”œā”€ā”€ alarms.py        # Alarm tools
│   │   └── diagnostics.py   # Status/diagnostic tools
│   ā”œā”€ā”€ resources/
│   │   ā”œā”€ā”€ __init__.py
│   │   └── tag_database.py  # Tag list resource
│   └── safety/
│       ā”œā”€ā”€ __init__.py
│       ā”œā”€ā”€ whitelist.py     # Write permission control
│       └── audit.py         # Audit logging
ā”œā”€ā”€ config.example.yaml
ā”œā”€ā”€ requirements.txt
ā”œā”€ā”€ pyproject.toml
└── tests/
    └── ...
```

## Safety

**This server controls industrial equipment. Safety is paramount.**

- Read-only mode by default (`allow_writes: false`)
- Tag whitelist for write operations
- All operations logged to audit trail
- Confirmation required for writes (via MCP confirmation flow)

## License

MIT

TDQS

A3.6/5.0

Scored across 9 tools

Disambiguation5/5

Each tool targets a distinct action: reading/writing tags, listing tags, managing alarms, or retrieving status info. No overlap in purpose.

Naming Consistency5/5

All tools follow a consistent verb_noun pattern using snake_case (e.g., read_tag, write_tag, acknowledge_alarm).

Tool Count5/5

9 tools cover the essential PLC operations without unnecessary bloat; the count is well-scoped for the domain.

Completeness4/5

Core operations (read/write tags, list tags, alarms, status) are present; missing a bulk write or subscription feature, but these are minor gaps.

Maintenance

ActivityInactive
ResponsivenessUnresponsive