sylo-allen-bradley

Studio 5000 Logix Designer SDK wrapper — harness-neutral MCP server (Claude Code, Codex, pi via pi-mcp-adapter): controller upload/download and ACD↔L5X export/import. The SDK itself is not bundled (operator-licensed wheel); PLC comms live in sylo-plc-comm

Packages

Package details

package

Install sylo-allen-bradley from npm and Pi will load the resources declared by the package manifest.

$ pi install npm:sylo-allen-bradley
Package
sylo-allen-bradley
Version
0.2.0
Published
Oct 9, 2026
Downloads
367/mo · 3/wk
Author
yeti-trix
License
MIT
Types
package
Size
61.5 KB
Dependencies
0 dependencies · 0 peers
Pi manifest JSON
{
  "mcp": [
    "./.mcp.json"
  ]
}

Security note

Pi packages can execute code and influence agent behavior. Review the source before installing third-party packages.

README

sylo-allen-bradley

Sylo package: Studio 5000 Logix Designer SDK wrapper — controller upload/download and .acd↔L5X export/import (allen_bradley_sdk_* tools). The SDK itself is not bundled and cannot be redistributed — it ships with the licensed Studio 5000 v36+ installation (Windows, Python 3.12 only) and requires a valid Studio 5000 license.

Split out of the old monolith on 2026-09-09:

  • sylo-plc-comms — CIP/OPC UA tag tools (plc_comms_*). No SDK required.
  • sylo-logicforge — L5X parse/review/IO-scaffold, Parse Rules UI, bundled LogicForge backend, canonical download allowlist.
  • This package — SDK tools only: allen_bradley_sdk_upload_from_plc, allen_bradley_sdk_download_to_plc, allen_bradley_sdk_export_l5x, allen_bradley_sdk_import_l5x.

Logix Designer SDK wheel (not bundled)

The Rockwell-proprietary logix_designer_sdk Python wheel ships with your own licensed Studio 5000 v36+ install. Resolution order (scripts/_sdk_paths.py):

  1. LOGIX_DESIGNER_SDK_WHEEL environment variable — explicit wheel path
  2. LOGIX_DESIGNER_SDK_SITE — unpacked SDK tree
  3. A wheel dropped under packages/sylo-logicforge/vendor/logicforge/ (local only, not committed)
  4. Legacy sibling checkout (~/Documents/GitHub/sylo-allen-bradley/)
  5. LOGICFORGE_SOURCE dev-checkout overlay
  6. Rockwell install locations (C:\Program Files (x86)\Rockwell Software\...)

Without the SDK the package still loads — only the direct .acd operations report that the SDK is missing. Use sylo-plc-comms for live tag reads/writes (no SDK) and sylo-logicforge for L5X parse/IO-scaffold work.

Downloads are allowlist-gated

allen_bradley_sdk_download_to_plc is the only tool that writes to a live controller project. It is hard-gated by the operator-managed allowlist whose canonical file lives in sylo-logicforge (packages/sylo-logicforge/assets/download-allowlist.json) — the agent cannot download to any IP not present and enabled there.

Install

Harness-neutral MCP server — same package, three ways:

pi (via pi-mcp-adapter): pi install npm:sylo-allen-bradley. The adapter reads the bundled .mcp.json (declared as pi.mcp in package.json) and registers the server automatically. Set toolPrefix: "none" in adapter settings so tool names stay exactly allen_bradley_sdk_*.

Claude Code: git clone the repo — Claude Code picks up the root .mcp.json natively. No extra deps for the MCP server itself (stdlib only).

Codex: git clone, then codex mcp add allen-bradley -- python server/server.py.

Python: the MCP server runs on any 3.10+; the wrapped SDK scripts run on the SDK Python 3.12 (SYLO_SDK_PYTHON env or py -3.12 on Windows) and need the licensed Studio 5000 v36+ wheel (resolution order in scripts/_sdk_paths.py). Without it, tools load but report the SDK is missing.

Releases publish automatically from GitHub Actions (npm trusted publishing, with provenance): bump version in package.json, commit, tag vX.Y.Z, push the tag.

0.2.0: the pi TypeScript extension was removed — the MCP server (server/server.py, official mcp SDK) is now the only tool surface. Tools, args, JSON contracts, timeouts and allowlist enforcement are unchanged. Also fixes the intermittent false-error regression where SDK INFO lines emitted after the scripts' JSON result were reported as tool errors (server/_trailing_json.py, regression-tested in tests/)