A ladder logic editor and PLC programming platform with MCP (Model Context Protocol) support for integration with AI assistants like Claude Code. Includes Community Edition (CE) self-hosted single-user version and SaaS platform.
NiRuLogic exposes 42 tools across HTTP routes and JavaScript API wrappers, but lacks critical definition infrastructure. Go route handlers (tools 1-28) have NO visible input schemas, parameter descriptions, or output documentation in the source. JavaScript API wrappers (tools 30-42) have minimal schemas: only tool 30 (createProgram) shows 2 parameters with basic type/description; tools 31-42 show parameter names and types but descriptions are generic or missing. No tool has documented output schemas. Descriptions are present but often vague ('Handles program listing and creation' for handlePrograms). Error handling is absent from visible code. Tool naming follows verb_noun convention (good), but composition issues exist: handleProgramRoute conflates GET/PUT/DELETE into one tool; MCP relay tools (19-22) mix concerns. Security: no visible input validation, secret injection, or permission gates. This server would fail code review by a principal tool engineer.
Creates a new element (contact, coil, timer, etc.) in a rung
Creates a new ladder logic program with specified name and target
Creates a new rung in a program
Creates a wire connection between elements in a rung
Deletes an element from a rung
Deletes a ladder logic program
Deletes a rung from a program
Deletes a wire connection
Retrieves a ladder logic program by ID
Go route handlers (tools 1-28) have NO visible input schemas or parameter documentation. Cannot verify what parameters they accept or what they return. Violates pattern:tool and pattern:tool-description.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | F | 36 | 2026-07-28+ | v2 |
Compiles ladder logic programs to target code via /api/compile
Serves the NiRuLogic ladder logic editor UI
Creates new element definitions via /api/element-defs/create
Retrieves element definition history via /api/element-defs/history
Reverts element definitions to previous versions via /api/element-defs/revert
Saves element definitions via /api/element-defs/save
Retrieves all element definitions via /api/element-defs
Serves installer scripts with host rewriting for Claude Desktop and Claude Code via /static/install-*.ps1 and /static/install-*.sh
Serves logo image via /logo.png
MCP client management and registry API via /api/mcp/clients
MCP HTTP transport endpoint via /mcp/http
Handles MCP message routing via /mcp/messages
Pairs MCP clients for relay via /api/mcp/pair
MCP Server-Sent Events transport for zero-install Claude Code integration via /mcp/sse
Serves MCP setup page via /mcp-setup
Serves MCP test page via /mcp-test
MCP WebSocket relay bridging browser MCP clients with external clients (Claude Code, etc.) via /mcp/ws
Activates plugins via /api/plugins/activate
Creates new plugins via /api/plugins/create
Installs plugins via /api/plugins/install
Installs plugins from URL via /api/plugins/install-url
Handles individual plugin operations via /api/plugins/{id}
Handles plugin management via /api/plugins
Lists available plugins via /api/plugins/list
Handles individual program operations (GET, PUT, DELETE) via /api/programs/{id}
Handles program listing and creation via /api/programs endpoint
Serves static files (editor UI, plugin bundles, MCP setup pages) via /static/
Saves target definitions via /api/targets/save
Handles target definition retrieval via /api/targets
Lists all ladder logic programs
Updates an element in a rung
Updates a ladder logic program
Updates a rung
JavaScript API tools (30-42) have minimal parameter descriptions. 'Element data' and 'Rung data' are vague; LLMs cannot infer required fields, types, or constraints. Violates pattern:tool-description baseline (100% of A+ tools have param descriptions).
No output schemas documented for any tool. LLMs cannot plan downstream calls or extract required fields (e.g., program_id after createProgram). Violates pattern:tool baseline (100% of A+ tools have documented return types).
handleProgramRoute and handlePluginRoute conflate multiple HTTP methods (GET/PUT/DELETE) into single tools. Violates pattern:tool (each tool should do exactly one thing). Should split into separate get_program, update_program, delete_program tools.
No visible error handling, input validation, or recovery guidance in source code. LLMs receive no actionable error messages. Violates pattern:recovery-guide and pattern:error-classification.