AI Agent Toolkit for Rockwell Automation L5X file manipulation
Project description
L5X Agent Toolkit
An MCP server that lets Claude safely read and modify Rockwell Studio 5000 L5X files — every operation produces structurally correct output; the agent never hand-edits XML.
You describe a PLC change in plain English; the toolkit translates it into byte-perfect L5X through validated functions that understand the schema, CDATA encoding, dual data-format synchronization, and Studio 5000's import rules.
Features
- 21 tools covering tags, programs, rungs (RLL), ST lines, SFC charts, FBD sheets, alarms, I/O modules, AOIs, UDTs, axes, trends, and cross-reference analysis.
- Native AOI/UDT editing — Add-On Instructions and User-Defined Types are edited in place, not round-tripped through an export shell.
- Pre-flight validation — catch structural errors, missing references, and naming violations before you save.
- Firmware v30–v38 — retarget projects across the supported range.
- Plugin support — register custom tools via entry points (see PLUGINS.md).
- Minimal dependencies —
lxmland the standard library, plusmcp[cli]for the server.
Quick Start
Install from PyPI:
pip install "l5x-toolkit[mcp]"
Or from source:
git clone https://github.com/Axiara/l5x-toolkit.git
cd l5x-toolkit
pip install -e ".[mcp]"
Either way this installs lxml and mcp[cli]. Requires Python 3.12+ (install 3.13 — see Getting Started). The import package is l5x_agent_toolkit.
Then register the MCP server using the l5x-mcp-server console command (installed by the step above):
Claude Code:
claude mcp add l5x-toolkit -- l5x-mcp-server
Claude Desktop: Add to your claude_desktop_config.json:
{
"mcpServers": {
"l5x-toolkit": {
"command": "l5x-mcp-server",
"args": [],
"env": {}
}
}
}
Verify the connection in Claude Code with the /mcp slash command — l5x-toolkit should appear as connected.
New to Python? See Getting Started for the full from-scratch setup (installing Python, PATH, and verifying the connection).
Example Conversation
You: Load my project at C:\Projects\Line4.L5X and tell me what is in it.
Claude: (calls
load_project) Loaded: Line4_Controller (1756-L83E, FW 35.11). The project has 12 programs, 847 tags, 6 AOIs, 3 UDTs, and 24 modules.You: Create a new program called PalletizerControl and schedule it under MainTask.
Claude: (calls
manage_programstwice — once to create, once to schedule) Done. Created program 'PalletizerControl' with a MainRoutine and scheduled it under MainTask.You: Add a DINT tag called PalletizerState, then add a rung that sets it to 1 when StartPB is pressed.
Claude: (calls
manage_tags, thenmanage_rungs) Created the tag and added the rung:XIC(StartPB)MOV(1,PalletizerState);You: Validate and save to C:\Projects\Line4_updated.L5X
Claude: (calls
validate, thensave_project) Validation passed with 0 errors. Saved to C:\Projects\Line4_updated.L5X.
Documentation
| Document | Description |
|---|---|
| Documentation index | The docs hub — Using vs Contributing tracks |
| Getting Started | Install Python, the toolkit, and the MCP server, from zero |
| Component Libraries | Configure library directories so Claude can import components by name |
| Cookbook | Task recipes — what to ask Claude, and which tools run |
| Tool Reference | All 21 tools with parameters and behavior |
| Architecture | The layered design and the 21-tool surface |
| Development & Roadmap | Status, supported scope, known limitations, roadmap |
| Changelog | Version history |
| Contributing | Setup, tests, and how to contribute |
Project Structure
The package is layered; lxml is isolated to core/. See Architecture for detail.
l5x_agent_toolkit/
core/ XML tree, CDATA, reference scanner, config — the only layer that imports lxml
model/ typed DTOs / view objects
query/ read-only projections: inspect, inventory/list, references, resolver
ops/ language & structural operation helpers
validate/ typed Finding/Report checks (default + opt-in families)
server/ MCP tool wrappers (envelope, reads, write/structural/lifecycle dispatch)
mcp_server.py registers the 21 tools over stdio
License
MIT License. See LICENSE for details.
Created by Megan Fox. Uses lxml for XML processing and the MCP Python SDK for the Model Context Protocol server.
Rockwell Automation, Studio 5000, Logix Designer, and RSLogix 5000 are trademarks of Rockwell Automation, Inc. This toolkit is not affiliated with or endorsed by Rockwell Automation.
Project details
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file l5x_toolkit-1.3.0.tar.gz.
File metadata
- Download URL: l5x_toolkit-1.3.0.tar.gz
- Upload date:
- Size: 747.4 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
2b3aa9479e599c25060beb50ece9421e7e5e594dbfed34010eedbeaf8dbb954c
|
|
| MD5 |
52a88c42c9a44d42f72664350a61f883
|
|
| BLAKE2b-256 |
7e333d33d907f22d70a5bc9fc6e97e8ad73e794821e233b5b3ccfb1133c9293a
|
Provenance
The following attestation bundles were made for l5x_toolkit-1.3.0.tar.gz:
Publisher:
release.yml on Axiara/l5x-toolkit
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
l5x_toolkit-1.3.0.tar.gz -
Subject digest:
2b3aa9479e599c25060beb50ece9421e7e5e594dbfed34010eedbeaf8dbb954c - Sigstore transparency entry: 1886199912
- Sigstore integration time:
-
Permalink:
Axiara/l5x-toolkit@58fc570727151e3c2ca3105806919d9061fedd3d -
Branch / Tag:
refs/tags/v1.3.0 - Owner: https://github.com/Axiara
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@58fc570727151e3c2ca3105806919d9061fedd3d -
Trigger Event:
push
-
Statement type:
File details
Details for the file l5x_toolkit-1.3.0-py3-none-any.whl.
File metadata
- Download URL: l5x_toolkit-1.3.0-py3-none-any.whl
- Upload date:
- Size: 633.0 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
35820ba6ef6f1ec91b07f1fba775872300585ec1250ab8f2739ce1f31793c5e2
|
|
| MD5 |
ebffaba51511369da0a8ed13e93b9f66
|
|
| BLAKE2b-256 |
f72f77d28f82dedff70740f4dabf5ab3f0bb72b7b55ee9d569d4e30d33cba4c5
|
Provenance
The following attestation bundles were made for l5x_toolkit-1.3.0-py3-none-any.whl:
Publisher:
release.yml on Axiara/l5x-toolkit
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
l5x_toolkit-1.3.0-py3-none-any.whl -
Subject digest:
35820ba6ef6f1ec91b07f1fba775872300585ec1250ab8f2739ce1f31793c5e2 - Sigstore transparency entry: 1886199930
- Sigstore integration time:
-
Permalink:
Axiara/l5x-toolkit@58fc570727151e3c2ca3105806919d9061fedd3d -
Branch / Tag:
refs/tags/v1.3.0 - Owner: https://github.com/Axiara
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@58fc570727151e3c2ca3105806919d9061fedd3d -
Trigger Event:
push
-
Statement type: