openplc-engineering-mcp
This server provides read-only engineering inspection for OpenPLC projects plus compile validation delegated to openplc-cli.
Return basic server information (
get_server_info)Inspect the relevant file structure of an OpenPLC project (
get_project_structure)List POUs: programs, function blocks, and functions with language and path (
list_pous)List datatypes, execution configuration, POU source, variables, and global variables
Validate projects and retrieve diagnostics
Compile projects by delegating to
openplc-cli(requires it onPATH)Does not support project/data-type/variable modification, deployment, runtime control, variable forcing, authentication, HTTP transport, or generic shell/filesystem tools
Click on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@openplc-engineering-mcpShow the project structure for my OpenPLC project"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
openplc-engineering-mcp
A small experimental Python MCP server that exposes domain-oriented engineering operations for the OpenPLC Editor project.
The project uses the official Model Context Protocol Python SDK and stdio transport. Inspection tools are read-only; compilation is delegated to the authoritative openplc-cli.
Quick start
Requirements: Python 3.12+ and uv.
git clone https://github.com/industrix-com-br/openplc-engineering-mcp.git
cd openplc-engineering-mcp
uv sync
uv run openplc-engineering-mcpRun the test suite with:
uv run pytestRelated MCP server: gx3-mcp-server
Current tools
get_project_structurelist_pouslist_datatypesget_execution_configurationget_io_configurationread_pouupdate_poulist_variableslist_global_variablesvalidate_projectcompile_projectget_diagnostics
Inspection tools are read-only. update_pou replaces the complete content of one existing Structured Text POU with optimistic-concurrency and atomic-write protection. compile_project is a local write operation that requires openplc-cli on PATH.
Documentation
Read the published documentation for setup, architecture, MCP tools, OpenPLC project behavior, development, scope, and research context.
The source documentation remains in docs/ and docs/index.md is the entry point for agents working directly with the repository.
Compatibility
Full compatibility target: the current OpenPLC Editor
developmentbranch after the August 24, 2026 changes that addeddatatypes/*.dtpersistence and the headless CLI used by this MCP.Released versions: no published OpenPLC Editor release currently provides the complete feature set expected by this MCP. The latest release, v4.2.11 from August 11, 2026, predates those changes.
POU format boundary: native text-based POU persistence was introduced by OpenPLC Editor PR #411 and shipped in v4.1.0. This establishes the POU-format breakline, but v4.1.0 alone is not a full MCP compatibility baseline.
Backward compatibility: intentionally not provided. Legacy JSON-centric OpenPLC project representations are out of scope.
See docs/openplc-projects.md for the detailed compatibility boundary.
Scope
The current version focuses on project, execution-configuration, physical I/O, POU, data-type, and variable inspection and shallow project validation, plus complete-content replacement of existing Structured Text POUs and compilation delegated to openplc-cli. POU creation/deletion/renaming, writes to other POU languages, data-type modification, resource-configuration modification, deployment, runtime control, variable forcing, authentication, HTTP transport, and generic shell/filesystem tools are not implemented.
See docs/scope.md for the current boundary.
Available Tools
3 toolsget_project_structureBRead-onlyIdempotent
Return the relevant file structure of an OpenPLC Editor project.
| Name | Required | Description | Default |
|---|---|---|---|
| project_path | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| name | Yes | |
| path | Yes | |
| type | Yes | |
| files | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate readOnlyHint=true and idempotentHint=true, so the safe and repeatable nature of the operation is covered. The description adds little beyond this, but it does clarify that the tool reads a project's file structure and does not contradict the annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single concise sentence with no filler or redundancy. The verb and object are front-loaded, and every word contributes meaning.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The context is fairly simple: one required parameter, safe annotations, and an output schema. However, the description lacks important details about how to specify project_path and what makes the file structure 'relevant,' so it is adequate but incomplete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema provides only the parameter name and type, with 0% description coverage. The tool description suggests project_path refers to an OpenPLC Editor project, but it does not specify whether it should be a directory path, a file path, absolute or relative, creating ambiguity for the agent.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('Return') and the resource ('the relevant file structure of an OpenPLC Editor project'), which distinguishes it from siblings like get_server_info and list_pous. However, the word 'relevant' is vague and leaves unclear what subset of the file structure is included.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives no guidance on when to use this tool versus alternatives. It does not mention when get_server_info or list_pous would be more appropriate, nor does it state any prerequisites such as needing a valid project directory.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_server_infoARead-onlyIdempotent
Return basic information about this experimental OpenPLC MCP server.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint and idempotentHint, so the description does not need to restate those. It adds useful context by labeling the server as 'experimental', which signals potential instability or changing behavior beyond what the annotations convey.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single concise sentence that front-loads the action ('Return') and resource, with no redundant or filler content. Every word earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a zero-parameter info tool, the description is complete: annotations cover safety and idempotence, the output schema defines the return format, and the description adds the experimental context. Nothing essential is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With zero parameters, the schema fully covers parameter semantics (vacuously). The description adds no parameter information, but none is needed. Baseline of 4 is appropriate for a parameterless tool.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('Return') and a clear resource ('basic information about this experimental OpenPLC MCP server'). It is distinct from the sibling tools in subject matter, but it does not explicitly differentiate itself from get_project_structure or list_pous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no explicit guidance on when to use this tool versus the siblings, nor any exclusions or alternatives. The intended use is implied by the resource name, but there is no direct usage context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_pousBRead-onlyIdempotent
List the programs, function blocks, and functions in an OpenPLC project.
| Name | Required | Description | Default |
|---|---|---|---|
| project_path | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint and idempotentHint, so the read-only nature is covered. The description adds that the returned scope includes programs, function blocks, and functions, but does not disclose additional behavior such as error handling, path validation, or output shape beyond what annotations already imply.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is one concise, front-loaded sentence with no filler or redundant information. It states exactly what the tool does in minimal space.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple listing tool with only one parameter and an existing output schema, the description is mostly adequate. However, it lacks parameter-level guidance and does not clarify how project_path should be provided, leaving some room for interpretation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, and the description does not explain the project_path parameter at all. The schema's title 'Project Path' gives basic meaning, but the description adds no value about expected path format or whether it must be absolute, relative, or point to a specific file.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('List') and a specific resource ('programs, function blocks, and functions in an OpenPLC project'), clearly indicating what the tool returns. It does not explicitly contrast itself with siblings like get_project_structure, but the resource focus is specific enough to allow an agent to distinguish it.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is provided for when to use this tool versus alternatives such as get_project_structure or get_server_info. The description implies a use case but does not state exclusions, prerequisites, or when another sibling would be more appropriate.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections. Dates show when Glama detected each change.
3 tool updates
v0.1.0- First observed
get_project_structure - First observed
get_server_info - First observed
list_pous
TDQS
get_server_info is clearly distinct as server metadata. get_project_structure and list_pous overlap somewhat since a file structure could include POUs, but the descriptions separate file layout from logical POU listings.
All tool names follow a verb_noun pattern with get_ and list_ prefixes. The mix of get and list is a minor style inconsistency, but the pattern is still predictable and readable.
Three tools is a small but reasonable surface for an experimental read-only server. Each tool serves a distinct purpose, though the inclusion of a generic server_info tool makes the set feel slightly thin.
The server only provides inspection capabilities: server info, project structure, and POU listing. There are no operations for opening, editing, compiling, validating, or managing POU details, which are significant gaps for an engineering-focused server.
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Connectors
Read-only MCP server exposing a user ORANO library to their own AI agent.
1Read-only MCP tools for AI agent discovery, structured resources, and NIULAI information.
An MCP server that provides access to Testiny projects, test cases and test runs
Read-only MCP server for turva.dev, an agent-readiness audit and advisory service.
Related MCP Servers
- FlicenseBqualityDmaintenanceEnables AI agents to read and understand local Mendix project structure and logic by connecting directly to the .mpr file via MCP. Allows querying microflows, entities, attributes, and modules in read-only mode without requiring cloud access.41-
- FlicenseBqualityAmaintenanceProvides read-only analysis of Mitsubishi GX Works3 PLC projects via MCP, enabling device tracing, cross-referencing, ladder inspection, linting, and report generation without modifying source projects.121-
- FlicenseNot gradedqualityCmaintenanceEnables MCP agents to inspect deployment knowledge extracted from a repository, covering workflows, services, deployments, and images.-
- FlicenseNot gradedqualityAmaintenanceProvides read-only, structured access to Yasin ecosystem information (project registry, documentation, GitHub state, diagnostics) through the MCP protocol, enabling AI agents to query without direct repository access.3-
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/industrix-com-br/openplc-engineering-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server