@codesys/mcp-toolkit 1.5.8 → 2.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (110) hide show
  1. package/CHANGELOG.md +153 -189
  2. package/LICENSE +21 -21
  3. package/README.md +269 -152
  4. package/dist/actions.d.ts +28 -0
  5. package/dist/actions.js +98 -0
  6. package/dist/actions.js.map +1 -0
  7. package/dist/bridge/bridge.d.ts +105 -0
  8. package/dist/bridge/bridge.js +400 -0
  9. package/dist/bridge/bridge.js.map +1 -0
  10. package/dist/cli.d.ts +2 -0
  11. package/dist/cli.js +196 -0
  12. package/dist/cli.js.map +1 -0
  13. package/dist/codesys/cache.d.ts +48 -0
  14. package/dist/codesys/cache.js +82 -0
  15. package/dist/codesys/cache.js.map +1 -0
  16. package/dist/codesys/changes.d.ts +57 -0
  17. package/dist/codesys/changes.js +133 -0
  18. package/dist/codesys/changes.js.map +1 -0
  19. package/dist/codesys/decl.d.ts +45 -0
  20. package/dist/codesys/decl.js +251 -0
  21. package/dist/codesys/decl.js.map +1 -0
  22. package/dist/codesys/devices.d.ts +34 -0
  23. package/dist/codesys/devices.js +82 -0
  24. package/dist/codesys/devices.js.map +1 -0
  25. package/dist/codesys/diff.d.ts +13 -0
  26. package/dist/codesys/diff.js +61 -0
  27. package/dist/codesys/diff.js.map +1 -0
  28. package/dist/codesys/install.d.ts +40 -0
  29. package/dist/codesys/install.js +144 -0
  30. package/dist/codesys/install.js.map +1 -0
  31. package/dist/codesys/library-browse.d.ts +19 -0
  32. package/dist/codesys/library-browse.js +57 -0
  33. package/dist/codesys/library-browse.js.map +1 -0
  34. package/dist/codesys/outline.d.ts +32 -0
  35. package/dist/codesys/outline.js +219 -0
  36. package/dist/codesys/outline.js.map +1 -0
  37. package/dist/codesys/simulation.d.ts +34 -0
  38. package/dist/codesys/simulation.js +57 -0
  39. package/dist/codesys/simulation.js.map +1 -0
  40. package/dist/codesys/st.d.ts +36 -0
  41. package/dist/codesys/st.js +69 -0
  42. package/dist/codesys/st.js.map +1 -0
  43. package/dist/daemon.d.ts +46 -0
  44. package/dist/daemon.js +173 -0
  45. package/dist/daemon.js.map +1 -0
  46. package/dist/driver.d.ts +25 -0
  47. package/dist/driver.js +33 -0
  48. package/dist/driver.js.map +1 -0
  49. package/dist/panel/sim-panel.html +357 -0
  50. package/dist/panel/viewer.html +126 -0
  51. package/dist/panel-types.d.ts +20 -0
  52. package/dist/panel-types.js +3 -0
  53. package/dist/panel-types.js.map +1 -0
  54. package/dist/panel.d.ts +27 -0
  55. package/dist/panel.js +208 -0
  56. package/dist/panel.js.map +1 -0
  57. package/dist/server.d.ts +5 -0
  58. package/dist/server.js +33 -974
  59. package/dist/server.js.map +1 -0
  60. package/dist/tools.d.ts +103 -0
  61. package/dist/tools.js +793 -0
  62. package/dist/tools.js.map +1 -0
  63. package/dist/viewer.d.ts +14 -0
  64. package/dist/viewer.js +125 -0
  65. package/dist/viewer.js.map +1 -0
  66. package/package.json +66 -51
  67. package/watcher/mcp_compat.py +147 -0
  68. package/watcher/mcp_ops.py +1178 -0
  69. package/watcher/mcp_sim.py +246 -0
  70. package/watcher/watcher.py +255 -0
  71. package/.claude/settings.local.json +0 -29
  72. package/CLAUDE.md +0 -26
  73. package/CONTRIBUTING.md +0 -72
  74. package/README.md.enhanced +0 -155
  75. package/codesys-mcp-toolkit-1.2.0.tgz +0 -0
  76. package/codesys-mcp-toolkit-1.2.1.tgz +0 -0
  77. package/codesys-mcp-toolkit-1.5.7.tgz +0 -0
  78. package/codesys-mcp-toolkit-1.5.8.tgz +0 -0
  79. package/dist/bin.js +0 -75
  80. package/dist/check_session_paths.js +0 -149
  81. package/dist/codesys_interop.js +0 -435
  82. package/dist/direct_session_command.js +0 -293
  83. package/dist/scriptLoader.js +0 -165
  84. package/dist/scripts/check_status.py +0 -21
  85. package/dist/scripts/compile_project.py +0 -65
  86. package/dist/scripts/create_method.py +0 -80
  87. package/dist/scripts/create_pou.py +0 -102
  88. package/dist/scripts/create_project.py +0 -116
  89. package/dist/scripts/create_property.py +0 -78
  90. package/dist/scripts/ensure_project_open.py +0 -154
  91. package/dist/scripts/find_object_by_path.py +0 -111
  92. package/dist/scripts/get_pou_code.py +0 -91
  93. package/dist/scripts/get_project_structure.py +0 -72
  94. package/dist/scripts/open_project.py +0 -25
  95. package/dist/scripts/save_project.py +0 -29
  96. package/dist/scripts/session_status.py +0 -281
  97. package/dist/scripts/set_pou_code.py +0 -109
  98. package/dist/scripts/start_session.py +0 -809
  99. package/dist/scripts/stop_session.py +0 -324
  100. package/dist/sessionManager.js +0 -798
  101. package/docs/configuration.md +0 -141
  102. package/docs/index.md +0 -26
  103. package/docs/installation.md +0 -84
  104. package/docs/session_management.md +0 -110
  105. package/examples/README.md +0 -78
  106. package/examples/sample_config.json +0 -32
  107. package/replacements_session_status.txt +0 -16
  108. package/scriptDoc.txt +0 -8679
  109. package/scripts/build.js +0 -25
  110. package/scripts/fix_fstrings.py +0 -76
package/CHANGELOG.md CHANGED
@@ -1,189 +1,153 @@
1
- # Changelog
2
-
3
- All notable changes to this project will be documented in this file.
4
-
5
- The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
6
- and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
7
-
8
- ## [1.5.8] - 2025-05-02
9
- ### Fixed
10
- - Fixed null reference error when accessing sessionManager.getState() with --no-session flag
11
- - Added proper null checks for session manager in session_status, start_session, and stop_session tools
12
- - Improved error messages when trying to use session management tools with --no-session flag
13
-
14
- ## [1.5.7] - 2025-05-02
15
- ### Fixed
16
- - Added safety timeout to session scripts to prevent CODESYS UI hanging
17
- - Improved session detection and management to handle zombie sessions
18
- - Enhanced session cleanup in stop_session.py with more robust error handling
19
- - Added maximum session runtime (8 hours) to prevent infinite hanging
20
- - Improved error detection and recovery in session management scripts
21
-
22
- ## [1.5.6] - 2025-05-02
23
- ### Fixed
24
- - Fixed session manager null reference error in interop.ts
25
- - Added additional null checks for session manager
26
- - Improved error handling when session manager is undefined
27
-
28
- ## [1.5.5] - 2025-05-02
29
- ### Fixed
30
- - Added enhanced command.json file verification to debug session communication
31
- - Improved logging for command file operations to diagnose IPC issues
32
- - Added command data verification to detect potential file corruption
33
-
34
- ## [1.5.4] - 2025-05-02
35
- ### Fixed
36
- - Added `--no-session` flag to disable session management when CODESYS UI hangs
37
- - Improved session handling with better error detection and user feedback
38
- - Removed hardcoded session disable flag in favor of command-line option
39
- - Added safeguards to prevent UI blocking during session operations
40
-
41
- ## [1.5.3] - 2025-05-02
42
- ### Fixed
43
- - Added automatic session startup when server starts
44
- - Improved session detection with better diagnostics
45
- - Enhanced logging for session command status
46
-
47
- ## [1.5.2] - 2025-05-02
48
- ### Fixed
49
- - Re-enabled session management feature that was disabled for debugging
50
- - Fixed project path handling between scripts for more reliable project creation
51
- - Fixed create_pou.py and set_pou_code.py to properly handle project paths when embedded in other scripts
52
-
53
- ## [1.5.1] - 2025-05-02
54
- ### Added
55
- - Implemented direct session command handling for project creation
56
- - Added ability to communicate directly with active sessions via command.json
57
- - Created a simplified project creation script optimized for sessions
58
- - Added fallback to standard execution if direct approach fails
59
-
60
- ## [1.5.0] - 2025-05-02
61
- ### Changed
62
- - Temporarily disabled session management for create_project operations to ensure reliability
63
- - Reverted to direct script execution model for project creation operations
64
- - Project creation now uses a simpler, more reliable approach that works consistently
65
-
66
- ## [1.4.9] - 2025-05-02
67
- ### Fixed
68
- - Fixed critical issue with create_project not succeeding in persistent sessions
69
- - Added comprehensive debugging for project creation operations
70
- - Improved result file handling to prevent file access issues
71
- - Enhanced success detection for project file creation when opening fails
72
- - Fixed issue with result files not being properly written during critical operations
73
- - Added atomic file writing with fallback mechanisms for result files
74
-
75
- ## [1.4.8] - 2025-05-02
76
- ### Fixed
77
- - Fixed critical bug with project creation in persistent sessions
78
- - Added SKIP_OPEN option to create_project script for session compatibility
79
- - Improved handling of project creation in sessions to avoid "project in use" errors
80
- - Added better error recovery when project file exists but can't be opened in a session
81
- - Added helpful user messages explaining session limitations with project operations
82
-
83
- ## [1.4.7] - 2025-05-02
84
- ### Fixed
85
- - Fixed create_project freezing in persistent sessions
86
- - Added special detection and handling for project creation operations
87
- - Extended timeout for project creation to 120 seconds (from 60 seconds)
88
- - Added graceful handling of timeouts with partial success detection
89
- - Improved debugging and monitoring of long-running operations in sessions
90
-
91
- ## [1.4.6] - 2025-05-02
92
- ### Fixed
93
- - Fixed session management "hanging" issue with start_session
94
- - Added stdout flushing in Python scripts to ensure output is visible
95
- - Improved session script logging for better debugging
96
- - Added more detailed state information in session scripts
97
-
98
- ## [1.4.5] - 2025-05-02
99
- ### Fixed
100
- - Completely redesigned path handling for Windows paths
101
- - Removed raw string (r'...') approach for more direct path handling
102
- - Implemented path normalization using forward slashes for cross-platform compatibility
103
- - Fixed create_project script to properly handle Windows paths in IronPython environment
104
-
105
- ## [1.4.4] - 2025-05-02
106
- ### Fixed
107
- - Fixed "unexpected token 'C'" error in create_project script
108
- - Improved Windows path handling in create_project.py with better logging and error detection
109
- - Added additional debugging output for raw string path processing
110
-
111
- ## [1.4.3] - 2025-05-02
112
- ### Fixed
113
- - Fixed "Cannot import name redirect_stdout" error in session script execution
114
- - Replaced contextlib.redirect_stdout/redirect_stderr with direct sys.stdout/stderr assignment for IronPython 2.7 compatibility
115
- - Improved StringIO import handling for better Python 2/3 compatibility
116
-
117
- ## [1.4.2] - 2025-05-02
118
- ### Fixed
119
- - Enhanced session communication with better logging and debugging
120
- - Improved command file handling and error recovery
121
- - Fixed path handling for session files
122
- - Added JSON fallback parser for IronPython 2.7
123
- - Ensured synchronous script execution to prevent conflicts
124
- - Increased reliability of session status detection
125
-
126
- ## [1.4.1] - 2025-05-02
127
- ### Fixed
128
- - Fixed IronPython 2.7 compatibility for session management scripts
129
- - Replaced f-strings with str.format() method calls for IronPython compatibility
130
- - Added fallback import for json module (using simplejson for IronPython)
131
- - Improved error handling for session scripts
132
- - Re-enabled session management feature in codesys_interop.ts
133
-
134
- ## [1.4.0] - 2025-05-02
135
- ### Added
136
- - Implemented initial framework for session management
137
- - Added foundation for file-based IPC between Node.js and CODESYS instances
138
- - Created documentation structure for session management capabilities
139
-
140
- ## [1.3.0] - 2025-05-02
141
- ### Changed
142
- - Refactored codebase for improved reliability and maintainability
143
- - Enhanced error handling in Python script templates
144
-
145
- ## [1.2.4] - 2025-05-02
146
- ### Fixed
147
- - Fully disabled session management to prevent operations appearing to succeed but not actually running
148
- - Made it clearer that the persistent session feature is not yet implemented
149
-
150
- ## [1.2.3] - 2025-05-02
151
- ### Fixed
152
- - Improved Windows path handling in Python scripts
153
- - Added better error detection and reporting for file operations
154
- - Enhanced debugging for file creation operations
155
-
156
- ## [1.2.2] - 2025-05-02
157
- ### Fixed
158
- - Fixed issue where session management appeared to work but didn't create files
159
- - Temporarily disabled incomplete session manager implementation
160
-
161
- ## [1.2.1] - 2025-05-02
162
- ### Fixed
163
- - Fixed Python script templates not being included in the npm package
164
-
165
- ## [1.2.0] - 2025-05-02
166
- ### Added
167
- - Session management functionality with `start_session`, `stop_session`, and `session_status` commands
168
- - Persistent CODESYS sessions for improved performance with multiple operations
169
- - Documentation for session management
170
-
171
- ## [1.0.0] - 2025-04-23
172
-
173
- ### Added
174
- - Initial release of the MCP server for CODESYS
175
- - Command-line interface with configuration options
176
- - Project management functionality:
177
- - Opening existing CODESYS projects
178
- - Creating new CODESYS projects
179
- - Saving projects
180
- - POU (Program Organization Unit) management:
181
- - Creating POUs (Programs, Function Blocks, Functions)
182
- - Setting POU code (declaration and implementation)
183
- - Creating properties and methods for Function Blocks
184
- - Project compilation support
185
- - Resources for querying:
186
- - Project status
187
- - Project structure
188
- - POU code
189
- - Documentation for installation and usage
1
+ # Changelog
2
+
3
+ All notable changes to this project will be documented in this file.
4
+
5
+ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
6
+ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
7
+
8
+ ## [2.0.0] - 2026-11-09
9
+
10
+ Rewrite. See README "Migrating from v1".
11
+
12
+ ### Changed
13
+ - CODESYS runs once per session with a watcher script (file-queue IPC,
14
+ JSON op requests, heartbeat, hang/crash detection and restart) instead of
15
+ a cold `--runscript` per call.
16
+ - ESM TypeScript on MCP SDK v2 (`@modelcontextprotocol/server`), Node 20+.
17
+ - One tool, `codesys`, so a client that asks for approval per tool asks once.
18
+ Each operation is an action of it (`read_objects`, `write_object`,
19
+ `create_object`, `get_project_tree`, `search_code`, `compile`,
20
+ `list_libraries`, `add_library`, `list_tasks`, `codesys_status`, ...), and
21
+ actions work on the open project. `help` lists them with their arguments,
22
+ and `batch` runs several in one call.
23
+ - Structured Text only; graphical objects are listed as `[non-ST]`.
24
+ - No login or download to a controller. The online functions are used only
25
+ for CODESYS's own simulation.
26
+ - Earlier development builds simulated in truST. That is gone; the options
27
+ `--trust-runtime`, `--mirror-dir` and `--no-sim` are accepted and ignored,
28
+ so existing client setups keep starting.
29
+
30
+ ### Added
31
+ - CODESYS's own simulation, with nothing extra to install: `codesys_sim_start`,
32
+ `codesys_sim_stop`, `codesys_sim_status`, `codesys_sim_control`,
33
+ `codesys_sim_cycle`, `codesys_sim_read`, `codesys_sim_write`,
34
+ `codesys_sim_force`, `codesys_sim_unforce`. Runs on the real compiler and
35
+ libraries; the project is locked while it runs.
36
+ - `get_outline`, `get_io_list`: the project's structure and interfaces, and
37
+ its I/O variables, from one export instead of reading every object.
38
+ - `get_library_api`: interfaces of referenced source libraries.
39
+ - `checkpoint`, `get_changes`, `revert_object`: change tracking against
40
+ snapshots, with an automatic `session-start` snapshot on open.
41
+ - `open_sim_panel`: a live panel inside the chat (MCP App), which Claude opens
42
+ after opening or creating a project. It is a separate tool with its own
43
+ approval. Open workspace on the card expands it.
44
+ - `open_workspace`: the same workspace in the default browser, when the user
45
+ asks for it, served on 127.0.0.1 with a token. Options `--viewer-port`,
46
+ `--no-viewer`.
47
+ - Panel views that follow Claude's work: Code (live code with new lines
48
+ marked) and Review (accept or revert each changed object, with its
49
+ added/removed line counts; in the chat card the changes open in place).
50
+ - `compile` checks every POU, GVL and DUT, including those no task calls (it
51
+ sets "link always" for the build and restores it); `deep` also generates
52
+ code, `clean` builds from scratch.
53
+ - CODESYS V3.5 SP22: the toolkit passes the install's additional folder
54
+ (`CODESYS\AdditionalFolders\Default`, where SP22 keeps add-ons such as
55
+ Scripting) as `--additionalfolder`, and reads profiles from it.
56
+ `--codesys-additional-folder` overrides it.
57
+ - `codesys_status` and the panel show the Scripting add-on version next to
58
+ the CODESYS install and compiler version. The server log says why an install
59
+ was picked.
60
+ - Build properties: objects excluded from the build are marked in the tree.
61
+ The application's compiler defines and, with Scripting 4.2, the project
62
+ defines and compiler version are reported.
63
+ - `get_devices`: the device tree and its I/O channels with their mapped
64
+ variables; `get_io_list` includes the device-tree mappings.
65
+ - `read_objects` returns graphical bodies (SFC, CFC, LD, FBD) as PLCopenXML.
66
+ - `open_project` opens `.projectarchive` files; `save_project` can write one.
67
+ - `remove_library`. `add_library` also takes a bare title (`Util`), with an
68
+ optional version.
69
+ - `get_library_api` lists compiled libraries and ones the project doesn't
70
+ reference, with their descriptions, from CODESYS's library browser cache.
71
+ - A profile that isn't installed is refused at start, with the installed ones
72
+ listed. The `--workspace` folder is created if missing.
73
+ - Profiles and templates are also found for programs laid out unlike
74
+ `CODESYS.exe`. See `docs/machine-expert-testing.md` for testing with
75
+ Schneider Machine Expert, which isn't supported yet.
76
+ - Checkpoints keep graphical bodies as PLCopenXML; `revert_object` re-imports
77
+ a deleted graphical object instead of recreating it as empty ST.
78
+ - Compile messages give the real column (from CODESYS's offset; its own
79
+ text says column 1) and the token length; the full-screen editor marks
80
+ lines with errors and warnings.
81
+ - `configure_task`: create and configure tasks (kind, interval, priority,
82
+ event, core, watchdog) and add program calls; `list_tasks` shows the event,
83
+ core and watchdog. Removing a call is refused with an explanation: SP21's
84
+ scripting can't do it.
85
+ - Shared session: server processes started with the same options share one
86
+ background owner (one CODESYS), so the panel shows the project the chat
87
+ works on. `--no-shared` runs in-process as before.
88
+ - **In the chat:** a compact card with status, what Claude is working on
89
+ and changes.
90
+ - **Full screen:** a CODESYS-style workspace with the project tree and
91
+ badges, editor tabs (diff against the session start), and problems and
92
+ review tabs.
93
+ - **Follow Claude** opens what Claude edits.
94
+ - **Selections** are sent to Claude as model context.
95
+ - **Panel-only tools** (`get_sim_state`, `get_workspace`, `get_object`) are
96
+ hidden from clients without MCP Apps support. They read a project cache
97
+ that the tools keep current, so the panel never calls CODESYS.
98
+ - **Interaction:** accept or revert Claude's change per object (a `review`
99
+ checkpoint the badges and diffs compare with), and **Pause Claude**, which
100
+ holds Claude's changing tools with a `paused_by_user` answer. User actions
101
+ are sent to Claude as model context. They use app-only `ui_*` tools.
102
+
103
+ ### Fixed
104
+ - The server advertises the MCP Apps extension (`io.modelcontextprotocol/ui`)
105
+ in its capabilities. A host may otherwise treat the card tool as plain text
106
+ and show no card.
107
+ - `create_project` makes a project that compiles (#4). CODESYS's shipped
108
+ `Standard.project` can be years old: SP22's names device 3.1.3.0 and
109
+ `IoStandard, 3.1.3.1`. The new copy is brought up to the running CODESYS's
110
+ device, compiler and libraries. Templates you pass and projects you open are
111
+ never updated.
112
+ - `open_project` says when a project needs a newer compiler than the running
113
+ CODESYS has, and so can't compile there.
114
+ - A start-up timeout or a crash during a call reports what the program printed.
115
+ - A dialog CODESYS waits on during a call ends the call in about 15 seconds
116
+ with an error that names it. Before, the call ran into its timeout (up to 5
117
+ minutes).
118
+ - A request file held for a moment by another process (antivirus, indexer) no
119
+ longer fails the call with `bad_request`.
120
+ - `compile` returns errors and warnings with object, line and code (#10).
121
+ - Non-ASCII text round-trips (UTF-8 end to end) (#9).
122
+ - Reads work in Claude Desktop because they are tools, not resources (#6).
123
+ - Declarations that drop or change the object header are rejected (#5).
124
+ - Functions get their return type (#8).
125
+ - Object kinds come from type GUIDs, so localised CODESYS works.
126
+ - Interfaces are created without the implicit `__System.IQueryInterface` base.
127
+
128
+ ## [1.1.16] - 2025-05-06
129
+
130
+ ### Fixed
131
+ - Reverted to v1.1.3 code base which has working POU creation functionality
132
+ - Fixed path handling by using simpler approach from v1.1.3
133
+ - Restored original Application object finding logic that worked in v1.1.3
134
+
135
+ ## [1.0.0] - 2025-04-23
136
+
137
+ ### Added
138
+ - Initial release of the MCP server for CODESYS
139
+ - Command-line interface with configuration options
140
+ - Project management functionality:
141
+ - Opening existing CODESYS projects
142
+ - Creating new CODESYS projects
143
+ - Saving projects
144
+ - POU (Program Organization Unit) management:
145
+ - Creating POUs (Programs, Function Blocks, Functions)
146
+ - Setting POU code (declaration and implementation)
147
+ - Creating properties and methods for Function Blocks
148
+ - Project compilation support
149
+ - Resources for querying:
150
+ - Project status
151
+ - Project structure
152
+ - POU code
153
+ - Documentation for installation and usage
package/LICENSE CHANGED
@@ -1,21 +1,21 @@
1
- MIT License
2
-
3
- Copyright (c) 2025 CODESYS MCP Server Contributors
4
-
5
- Permission is hereby granted, free of charge, to any person obtaining a copy
6
- of this software and associated documentation files (the "Software"), to deal
7
- in the Software without restriction, including without limitation the rights
8
- to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
- copies of the Software, and to permit persons to whom the Software is
10
- furnished to do so, subject to the following conditions:
11
-
12
- The above copyright notice and this permission notice shall be included in all
13
- copies or substantial portions of the Software.
14
-
15
- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
- IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
- FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
- AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
- LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
- OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
- SOFTWARE.
1
+ MIT License
2
+
3
+ Copyright (c) 2025 CODESYS MCP Server Contributors
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.