ftx-mcp 1.0.0__tar.gz
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.
- ftx_mcp-1.0.0/LICENSE +35 -0
- ftx_mcp-1.0.0/NOTICE +13 -0
- ftx_mcp-1.0.0/PKG-INFO +227 -0
- ftx_mcp-1.0.0/README.md +157 -0
- ftx_mcp-1.0.0/ftx_mcp.egg-info/PKG-INFO +227 -0
- ftx_mcp-1.0.0/ftx_mcp.egg-info/SOURCES.txt +24 -0
- ftx_mcp-1.0.0/ftx_mcp.egg-info/dependency_links.txt +1 -0
- ftx_mcp-1.0.0/ftx_mcp.egg-info/entry_points.txt +2 -0
- ftx_mcp-1.0.0/ftx_mcp.egg-info/requires.txt +13 -0
- ftx_mcp-1.0.0/ftx_mcp.egg-info/top_level.txt +1 -0
- ftx_mcp-1.0.0/pyproject.toml +79 -0
- ftx_mcp-1.0.0/service/__init__.py +2 -0
- ftx_mcp-1.0.0/service/__main__.py +5 -0
- ftx_mcp-1.0.0/service/_cdp.py +208 -0
- ftx_mcp-1.0.0/service/_dpapi.py +138 -0
- ftx_mcp-1.0.0/service/_token_admin.py +153 -0
- ftx_mcp-1.0.0/service/auth.py +468 -0
- ftx_mcp-1.0.0/service/core.py +4604 -0
- ftx_mcp-1.0.0/service/deploy_lock.py +119 -0
- ftx_mcp-1.0.0/service/http_app.py +450 -0
- ftx_mcp-1.0.0/service/main.py +212 -0
- ftx_mcp-1.0.0/service/mcp_app.py +2044 -0
- ftx_mcp-1.0.0/service/optix_model.py +174 -0
- ftx_mcp-1.0.0/service/optix_templates.py +139 -0
- ftx_mcp-1.0.0/service/studio_guard.py +133 -0
- ftx_mcp-1.0.0/setup.cfg +4 -0
ftx_mcp-1.0.0/LICENSE
ADDED
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026 ASQI
|
|
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.
|
|
22
|
+
|
|
23
|
+
---
|
|
24
|
+
|
|
25
|
+
DISCLAIMER OF AFFILIATION
|
|
26
|
+
|
|
27
|
+
This project is not affiliated with, endorsed by, or sponsored by Rockwell
|
|
28
|
+
Automation, Inc. FactoryTalk and Optix are trademarks of Rockwell Automation,
|
|
29
|
+
Inc. ftx-mcp is an independent integration tool authored against the
|
|
30
|
+
public Studio CLI surface; it is not a Rockwell product.
|
|
31
|
+
|
|
32
|
+
The FT Optix binaries themselves (FTOptixApplicationUpdateService.exe,
|
|
33
|
+
FTOptixStudio.exe, FTOptixRuntime.exe) are Rockwell Automation products,
|
|
34
|
+
licensed separately. This repository orchestrates them but does not
|
|
35
|
+
redistribute them.
|
ftx_mcp-1.0.0/NOTICE
ADDED
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
ftx-mcp
|
|
2
|
+
==============
|
|
3
|
+
|
|
4
|
+
Not affiliated with or endorsed by Rockwell Automation, Inc.
|
|
5
|
+
|
|
6
|
+
FactoryTalk Optix is a trademark of Rockwell Automation, Inc. The names
|
|
7
|
+
"FactoryTalk", "Optix", and "FTOptix" used in this project's
|
|
8
|
+
documentation, code comments, and string literals refer to Rockwell's
|
|
9
|
+
products for the purpose of describing what this software interoperates
|
|
10
|
+
with (nominative fair use). No claim to those trademarks is asserted.
|
|
11
|
+
|
|
12
|
+
This software is licensed under the terms in the LICENSE file at the
|
|
13
|
+
root of this repository.
|
ftx_mcp-1.0.0/PKG-INFO
ADDED
|
@@ -0,0 +1,227 @@
|
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
|
+
Name: ftx-mcp
|
|
3
|
+
Version: 1.0.0
|
|
4
|
+
Summary: MCP server for authoring, previewing, and verifying FactoryTalk Optix Studio changes via the emulator, single Windows box.
|
|
5
|
+
Author: ASQI
|
|
6
|
+
License: MIT License
|
|
7
|
+
|
|
8
|
+
Copyright (c) 2026 ASQI
|
|
9
|
+
|
|
10
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
11
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
12
|
+
in the Software without restriction, including without limitation the rights
|
|
13
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
14
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
15
|
+
furnished to do so, subject to the following conditions:
|
|
16
|
+
|
|
17
|
+
The above copyright notice and this permission notice shall be included in all
|
|
18
|
+
copies or substantial portions of the Software.
|
|
19
|
+
|
|
20
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
21
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
22
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
23
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
24
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
25
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
26
|
+
SOFTWARE.
|
|
27
|
+
|
|
28
|
+
---
|
|
29
|
+
|
|
30
|
+
DISCLAIMER OF AFFILIATION
|
|
31
|
+
|
|
32
|
+
This project is not affiliated with, endorsed by, or sponsored by Rockwell
|
|
33
|
+
Automation, Inc. FactoryTalk and Optix are trademarks of Rockwell Automation,
|
|
34
|
+
Inc. ftx-mcp is an independent integration tool authored against the
|
|
35
|
+
public Studio CLI surface; it is not a Rockwell product.
|
|
36
|
+
|
|
37
|
+
The FT Optix binaries themselves (FTOptixApplicationUpdateService.exe,
|
|
38
|
+
FTOptixStudio.exe, FTOptixRuntime.exe) are Rockwell Automation products,
|
|
39
|
+
licensed separately. This repository orchestrates them but does not
|
|
40
|
+
redistribute them.
|
|
41
|
+
|
|
42
|
+
Project-URL: Homepage, https://github.com/asqi-carter/ftx-mcp
|
|
43
|
+
Project-URL: Issues, https://github.com/asqi-carter/ftx-mcp/issues
|
|
44
|
+
Project-URL: Specification, https://github.com/asqi-carter/ftx-mcp/blob/main/docs/architecture.md
|
|
45
|
+
Keywords: factorytalk,optix,mcp,rockwell,ot
|
|
46
|
+
Classifier: License :: OSI Approved :: MIT License
|
|
47
|
+
Classifier: Operating System :: Microsoft :: Windows
|
|
48
|
+
Classifier: Programming Language :: Python :: 3
|
|
49
|
+
Classifier: Programming Language :: Python :: 3.11
|
|
50
|
+
Classifier: Programming Language :: Python :: 3.12
|
|
51
|
+
Classifier: Topic :: Software Development :: Libraries
|
|
52
|
+
Classifier: Topic :: System :: Installation/Setup
|
|
53
|
+
Requires-Python: >=3.11
|
|
54
|
+
Description-Content-Type: text/markdown
|
|
55
|
+
License-File: LICENSE
|
|
56
|
+
License-File: NOTICE
|
|
57
|
+
Requires-Dist: fastapi>=0.110
|
|
58
|
+
Requires-Dist: pydantic>=2.5
|
|
59
|
+
Requires-Dist: uvicorn>=0.27
|
|
60
|
+
Requires-Dist: mcp>=1.2
|
|
61
|
+
Requires-Dist: psutil>=5.9
|
|
62
|
+
Requires-Dist: websocket-client>=1.7
|
|
63
|
+
Provides-Extra: dev
|
|
64
|
+
Requires-Dist: pytest>=8; extra == "dev"
|
|
65
|
+
Requires-Dist: pytest-asyncio>=0.21; extra == "dev"
|
|
66
|
+
Requires-Dist: ruff>=0.5; extra == "dev"
|
|
67
|
+
Requires-Dist: mypy>=1.10; extra == "dev"
|
|
68
|
+
Requires-Dist: httpx>=0.27; extra == "dev"
|
|
69
|
+
Dynamic: license-file
|
|
70
|
+
|
|
71
|
+
# ftx-mcp
|
|
72
|
+
|
|
73
|
+
<!-- mcp-name: io.github.asqi-carter/ftx-mcp -->
|
|
74
|
+
|
|
75
|
+
**Talk to your FactoryTalk Optix project.** ftx-mcp connects AI tools
|
|
76
|
+
(Desktop, Cowork, Code — or any MCP client) to FactoryTalk Optix Studio on
|
|
77
|
+
your Windows machine, so you can build and change HMI screens by describing
|
|
78
|
+
what you want:
|
|
79
|
+
|
|
80
|
+
> *"Add a header that says 'Hello Optix' to Screen 1 and show me."*
|
|
81
|
+
>
|
|
82
|
+
> *"Bind that label's visibility to Model/PumpRunning."*
|
|
83
|
+
>
|
|
84
|
+
> *"Looks right. Launch the emulator and validate it."*
|
|
85
|
+
|
|
86
|
+
Your LLM authors the change directly into your open Studio project, runs the
|
|
87
|
+
emulator, and looks at the rendered runtime to confirm it worked. It is a
|
|
88
|
+
development and testing companion: shipping to hardware stays in Studio's own
|
|
89
|
+
Deploy dialog, in your hands. Everything besides the LLM calls runs locally
|
|
90
|
+
on your machine. No cloud service, no API key; your LLM of choice provides
|
|
91
|
+
the intelligence.
|
|
92
|
+
|
|
93
|
+
[**Blog Post**](https://asqi.org/resources/ftx-mcp-v1/)
|
|
94
|
+
|
|
95
|
+
## Install (10 minutes)
|
|
96
|
+
|
|
97
|
+
Requirements: Windows 11, FactoryTalk Optix Studio 1.7.x, and an MCP client like Claude Cowork.
|
|
98
|
+
|
|
99
|
+
```powershell
|
|
100
|
+
git clone https://github.com/asqi-carter/ftx-mcp.git
|
|
101
|
+
cd ftx-mcp
|
|
102
|
+
.\bootstrap\setup.ps1 # install + start the service
|
|
103
|
+
.\bootstrap\services.ps1 start # start the mcp
|
|
104
|
+
.\bootstrap\services.ps1 status # verify health
|
|
105
|
+
http://127.0.0.1:8765/ui # health dashboard
|
|
106
|
+
```
|
|
107
|
+
|
|
108
|
+
## Start the Studio Bridge (5 minutes)
|
|
109
|
+
|
|
110
|
+
1. **One-time bridge setup** (per project): in the Studio project tree,
|
|
111
|
+
right-click **NetLogic** → add a new **DesignTime NetLogic** named
|
|
112
|
+
`StudioMCPBridge`, double-click it to open the C# editor, and paste in
|
|
113
|
+
[`studio-bridge/StudioMCPBridge.cs`](studio-bridge/StudioMCPBridge.cs)
|
|
114
|
+
(make sure to rebuild in your code editor or save in Studio to trigger a rebuild)
|
|
115
|
+
2. **Setup the Project** once per Studio session: right-click
|
|
116
|
+
**StudioMCPBridge** → **SetupProject** → This just adds a webui for validation access at localhost:8081
|
|
117
|
+
3. **Start the bridge** once per Studio session: right-click
|
|
118
|
+
**StudioMCPBridge** → **StartBridge** → accept Studio's
|
|
119
|
+
one-time security prompt.
|
|
120
|
+
4. **Verify bridge health**: Studio Output will show `listening on http://127.0.0.1:8768` (the bridge). The service dashboard at http://127.0.0.1:8765/ui shows bridge status too.
|
|
121
|
+
|
|
122
|
+
## Cowork (5 minutes)
|
|
123
|
+
|
|
124
|
+
Requirements: MCP server and bridge running. Claude desktop app downloaded.
|
|
125
|
+
|
|
126
|
+
```powershell
|
|
127
|
+
cd ftx-mcp # install + start the service
|
|
128
|
+
.\bootstrap\setup-mcp-client.ps1 -WriteConfig # adds as a connector to desktop app
|
|
129
|
+
```
|
|
130
|
+
|
|
131
|
+
Restart Claude Desktop (You might have to end task in task manager to fully restart), then ask Claude to **"run optix_doctor"** — it
|
|
132
|
+
reports anything missing, with a plain-English fix for each item.
|
|
133
|
+
In settings > connectors you can adjust the permissions for each of the tools
|
|
134
|
+
|
|
135
|
+
## Claude Code (5 minutes)
|
|
136
|
+
|
|
137
|
+
Requirements: MCP server healthy and claude accessible in cli
|
|
138
|
+
|
|
139
|
+
```powershell
|
|
140
|
+
claude mcp add --transport http ftx-mcp http://127.0.0.1:8766/mcp
|
|
141
|
+
```
|
|
142
|
+
|
|
143
|
+
Then in Claude Code, run `/mcp` and confirm `ftx-mcp` shows as connected.
|
|
144
|
+
|
|
145
|
+
## Visual Studio Code (5 minutes)
|
|
146
|
+
|
|
147
|
+
Create or open `.vscode/mcp.json` and add:
|
|
148
|
+
|
|
149
|
+
```json
|
|
150
|
+
{
|
|
151
|
+
"servers": {
|
|
152
|
+
"ftx-mcp": {
|
|
153
|
+
"type": "http",
|
|
154
|
+
"url": "http://127.0.0.1:8766/mcp"
|
|
155
|
+
}
|
|
156
|
+
}
|
|
157
|
+
}
|
|
158
|
+
```
|
|
159
|
+
|
|
160
|
+
## Your first change
|
|
161
|
+
|
|
162
|
+
1. Ask for a change, e.g. *"Using the ftx mcp, Add a Start and stop button that toggles
|
|
163
|
+
Model/MotorRun on MainWindow, and verify it works with a label with the text of 'MOTOR RUNNING' that has visibility tied to MotorRun."*
|
|
164
|
+
2. Watch it work: author → emulator preview → screenshot → and when it looks
|
|
165
|
+
right, you deploy it to your hardware from Studio as usual.
|
|
166
|
+
|
|
167
|
+
## What it's capable of
|
|
168
|
+
|
|
169
|
+
- **Author** widgets, properties, bindings, computed expressions, events,
|
|
170
|
+
translations, and multi-screen navigation — live in the open Studio project.
|
|
171
|
+
- **Run** Studio's built-in emulator via F5 key and read the runtime log.
|
|
172
|
+
- **Verify** by looking at the webui: screenshot, click
|
|
173
|
+
buttons and tabs, type into fields.
|
|
174
|
+
- **Hand back to you to ship** when the preview looks right, you deploy
|
|
175
|
+
from Studio as usual. This distribution only runs the emulator.
|
|
176
|
+
|
|
177
|
+
The full tool list (48 tools, plus the same surface over plain HTTP for
|
|
178
|
+
scripts and CI) is in [docs/tool-reference.md](docs/tool-reference.md).
|
|
179
|
+
Bundled **authoring playbooks** (navigation, bound controls, styles,
|
|
180
|
+
expressions) ship with the server itself — Claude discovers them via
|
|
181
|
+
`optix_list_skills` / `optix_get_skill`, so every connected client gets
|
|
182
|
+
them with zero setup. (In Claude Code they also load natively as
|
|
183
|
+
[skills](skills/).)
|
|
184
|
+
|
|
185
|
+
## Security & safety posture
|
|
186
|
+
|
|
187
|
+
- **Local only.** The service binds `127.0.0.1` and talks to nothing off the
|
|
188
|
+
machine. Optional bearer-token auth, enforced before any LAN bind.
|
|
189
|
+
- **Read-only by default.** Every tool carries MCP `readOnlyHint` /
|
|
190
|
+
`destructiveHint` annotations (contract-pinned by tests) so your MCP host
|
|
191
|
+
can auto-approve reads and gate writes.
|
|
192
|
+
- **Write gates, not hope.** Undeclared properties, array writes, duplicate
|
|
193
|
+
names, and unsafe re-parents are refused with typed errors; composite
|
|
194
|
+
operations roll back on failure. File-level edits are refused while Studio
|
|
195
|
+
has the project open.
|
|
196
|
+
- **Audited.** Every model mutation appends a JSON line to a local audit
|
|
197
|
+
trail (`%LOCALAPPDATA%\ftx-mcp\logs\audit.jsonl`) what, when,
|
|
198
|
+
outcome.
|
|
199
|
+
- **Shipping stays in your hands.** Previewing never touches your runtime;
|
|
200
|
+
deploying to hardware happens from Studio, full stop. This distribution
|
|
201
|
+
does design time edits and testing via the emulator.
|
|
202
|
+
|
|
203
|
+
The full posture including the prompt-injection surface analysis is in
|
|
204
|
+
[SECURITY.md](SECURITY.md).
|
|
205
|
+
|
|
206
|
+
## Documentation
|
|
207
|
+
|
|
208
|
+
| | |
|
|
209
|
+
|---|---|
|
|
210
|
+
| [Runbook](docs/runbook.md) | First session, step by step |
|
|
211
|
+
| [Tool reference](docs/tool-reference.md) | Every MCP tool + the HTTP API |
|
|
212
|
+
| [Architecture](docs/architecture.md) | How the pieces fit together |
|
|
213
|
+
| [Troubleshooting](docs/troubleshooting.md) | Symptom-indexed fixes |
|
|
214
|
+
| [Security](docs/security.md) | Auth, ports, what talks to what |
|
|
215
|
+
|
|
216
|
+
## Compatibility
|
|
217
|
+
|
|
218
|
+
Tested with FactoryTalk Optix Studio 1.7.x on Windows 11, Python 3.12.
|
|
219
|
+
Optix CLI behavior is not contract-stable across major versions — pin your
|
|
220
|
+
Studio version in production.
|
|
221
|
+
|
|
222
|
+
## License
|
|
223
|
+
|
|
224
|
+
[MIT](LICENSE) · © 2026 ASQI · Not affiliated with or endorsed by Rockwell
|
|
225
|
+
Automation. FactoryTalk Optix is a trademark of Rockwell Automation, Inc.;
|
|
226
|
+
this project orchestrates locally installed Optix binaries without
|
|
227
|
+
redistributing them. See [NOTICE](NOTICE).
|
ftx_mcp-1.0.0/README.md
ADDED
|
@@ -0,0 +1,157 @@
|
|
|
1
|
+
# ftx-mcp
|
|
2
|
+
|
|
3
|
+
<!-- mcp-name: io.github.asqi-carter/ftx-mcp -->
|
|
4
|
+
|
|
5
|
+
**Talk to your FactoryTalk Optix project.** ftx-mcp connects AI tools
|
|
6
|
+
(Desktop, Cowork, Code — or any MCP client) to FactoryTalk Optix Studio on
|
|
7
|
+
your Windows machine, so you can build and change HMI screens by describing
|
|
8
|
+
what you want:
|
|
9
|
+
|
|
10
|
+
> *"Add a header that says 'Hello Optix' to Screen 1 and show me."*
|
|
11
|
+
>
|
|
12
|
+
> *"Bind that label's visibility to Model/PumpRunning."*
|
|
13
|
+
>
|
|
14
|
+
> *"Looks right. Launch the emulator and validate it."*
|
|
15
|
+
|
|
16
|
+
Your LLM authors the change directly into your open Studio project, runs the
|
|
17
|
+
emulator, and looks at the rendered runtime to confirm it worked. It is a
|
|
18
|
+
development and testing companion: shipping to hardware stays in Studio's own
|
|
19
|
+
Deploy dialog, in your hands. Everything besides the LLM calls runs locally
|
|
20
|
+
on your machine. No cloud service, no API key; your LLM of choice provides
|
|
21
|
+
the intelligence.
|
|
22
|
+
|
|
23
|
+
[**Blog Post**](https://asqi.org/resources/ftx-mcp-v1/)
|
|
24
|
+
|
|
25
|
+
## Install (10 minutes)
|
|
26
|
+
|
|
27
|
+
Requirements: Windows 11, FactoryTalk Optix Studio 1.7.x, and an MCP client like Claude Cowork.
|
|
28
|
+
|
|
29
|
+
```powershell
|
|
30
|
+
git clone https://github.com/asqi-carter/ftx-mcp.git
|
|
31
|
+
cd ftx-mcp
|
|
32
|
+
.\bootstrap\setup.ps1 # install + start the service
|
|
33
|
+
.\bootstrap\services.ps1 start # start the mcp
|
|
34
|
+
.\bootstrap\services.ps1 status # verify health
|
|
35
|
+
http://127.0.0.1:8765/ui # health dashboard
|
|
36
|
+
```
|
|
37
|
+
|
|
38
|
+
## Start the Studio Bridge (5 minutes)
|
|
39
|
+
|
|
40
|
+
1. **One-time bridge setup** (per project): in the Studio project tree,
|
|
41
|
+
right-click **NetLogic** → add a new **DesignTime NetLogic** named
|
|
42
|
+
`StudioMCPBridge`, double-click it to open the C# editor, and paste in
|
|
43
|
+
[`studio-bridge/StudioMCPBridge.cs`](studio-bridge/StudioMCPBridge.cs)
|
|
44
|
+
(make sure to rebuild in your code editor or save in Studio to trigger a rebuild)
|
|
45
|
+
2. **Setup the Project** once per Studio session: right-click
|
|
46
|
+
**StudioMCPBridge** → **SetupProject** → This just adds a webui for validation access at localhost:8081
|
|
47
|
+
3. **Start the bridge** once per Studio session: right-click
|
|
48
|
+
**StudioMCPBridge** → **StartBridge** → accept Studio's
|
|
49
|
+
one-time security prompt.
|
|
50
|
+
4. **Verify bridge health**: Studio Output will show `listening on http://127.0.0.1:8768` (the bridge). The service dashboard at http://127.0.0.1:8765/ui shows bridge status too.
|
|
51
|
+
|
|
52
|
+
## Cowork (5 minutes)
|
|
53
|
+
|
|
54
|
+
Requirements: MCP server and bridge running. Claude desktop app downloaded.
|
|
55
|
+
|
|
56
|
+
```powershell
|
|
57
|
+
cd ftx-mcp # install + start the service
|
|
58
|
+
.\bootstrap\setup-mcp-client.ps1 -WriteConfig # adds as a connector to desktop app
|
|
59
|
+
```
|
|
60
|
+
|
|
61
|
+
Restart Claude Desktop (You might have to end task in task manager to fully restart), then ask Claude to **"run optix_doctor"** — it
|
|
62
|
+
reports anything missing, with a plain-English fix for each item.
|
|
63
|
+
In settings > connectors you can adjust the permissions for each of the tools
|
|
64
|
+
|
|
65
|
+
## Claude Code (5 minutes)
|
|
66
|
+
|
|
67
|
+
Requirements: MCP server healthy and claude accessible in cli
|
|
68
|
+
|
|
69
|
+
```powershell
|
|
70
|
+
claude mcp add --transport http ftx-mcp http://127.0.0.1:8766/mcp
|
|
71
|
+
```
|
|
72
|
+
|
|
73
|
+
Then in Claude Code, run `/mcp` and confirm `ftx-mcp` shows as connected.
|
|
74
|
+
|
|
75
|
+
## Visual Studio Code (5 minutes)
|
|
76
|
+
|
|
77
|
+
Create or open `.vscode/mcp.json` and add:
|
|
78
|
+
|
|
79
|
+
```json
|
|
80
|
+
{
|
|
81
|
+
"servers": {
|
|
82
|
+
"ftx-mcp": {
|
|
83
|
+
"type": "http",
|
|
84
|
+
"url": "http://127.0.0.1:8766/mcp"
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
```
|
|
89
|
+
|
|
90
|
+
## Your first change
|
|
91
|
+
|
|
92
|
+
1. Ask for a change, e.g. *"Using the ftx mcp, Add a Start and stop button that toggles
|
|
93
|
+
Model/MotorRun on MainWindow, and verify it works with a label with the text of 'MOTOR RUNNING' that has visibility tied to MotorRun."*
|
|
94
|
+
2. Watch it work: author → emulator preview → screenshot → and when it looks
|
|
95
|
+
right, you deploy it to your hardware from Studio as usual.
|
|
96
|
+
|
|
97
|
+
## What it's capable of
|
|
98
|
+
|
|
99
|
+
- **Author** widgets, properties, bindings, computed expressions, events,
|
|
100
|
+
translations, and multi-screen navigation — live in the open Studio project.
|
|
101
|
+
- **Run** Studio's built-in emulator via F5 key and read the runtime log.
|
|
102
|
+
- **Verify** by looking at the webui: screenshot, click
|
|
103
|
+
buttons and tabs, type into fields.
|
|
104
|
+
- **Hand back to you to ship** when the preview looks right, you deploy
|
|
105
|
+
from Studio as usual. This distribution only runs the emulator.
|
|
106
|
+
|
|
107
|
+
The full tool list (48 tools, plus the same surface over plain HTTP for
|
|
108
|
+
scripts and CI) is in [docs/tool-reference.md](docs/tool-reference.md).
|
|
109
|
+
Bundled **authoring playbooks** (navigation, bound controls, styles,
|
|
110
|
+
expressions) ship with the server itself — Claude discovers them via
|
|
111
|
+
`optix_list_skills` / `optix_get_skill`, so every connected client gets
|
|
112
|
+
them with zero setup. (In Claude Code they also load natively as
|
|
113
|
+
[skills](skills/).)
|
|
114
|
+
|
|
115
|
+
## Security & safety posture
|
|
116
|
+
|
|
117
|
+
- **Local only.** The service binds `127.0.0.1` and talks to nothing off the
|
|
118
|
+
machine. Optional bearer-token auth, enforced before any LAN bind.
|
|
119
|
+
- **Read-only by default.** Every tool carries MCP `readOnlyHint` /
|
|
120
|
+
`destructiveHint` annotations (contract-pinned by tests) so your MCP host
|
|
121
|
+
can auto-approve reads and gate writes.
|
|
122
|
+
- **Write gates, not hope.** Undeclared properties, array writes, duplicate
|
|
123
|
+
names, and unsafe re-parents are refused with typed errors; composite
|
|
124
|
+
operations roll back on failure. File-level edits are refused while Studio
|
|
125
|
+
has the project open.
|
|
126
|
+
- **Audited.** Every model mutation appends a JSON line to a local audit
|
|
127
|
+
trail (`%LOCALAPPDATA%\ftx-mcp\logs\audit.jsonl`) what, when,
|
|
128
|
+
outcome.
|
|
129
|
+
- **Shipping stays in your hands.** Previewing never touches your runtime;
|
|
130
|
+
deploying to hardware happens from Studio, full stop. This distribution
|
|
131
|
+
does design time edits and testing via the emulator.
|
|
132
|
+
|
|
133
|
+
The full posture including the prompt-injection surface analysis is in
|
|
134
|
+
[SECURITY.md](SECURITY.md).
|
|
135
|
+
|
|
136
|
+
## Documentation
|
|
137
|
+
|
|
138
|
+
| | |
|
|
139
|
+
|---|---|
|
|
140
|
+
| [Runbook](docs/runbook.md) | First session, step by step |
|
|
141
|
+
| [Tool reference](docs/tool-reference.md) | Every MCP tool + the HTTP API |
|
|
142
|
+
| [Architecture](docs/architecture.md) | How the pieces fit together |
|
|
143
|
+
| [Troubleshooting](docs/troubleshooting.md) | Symptom-indexed fixes |
|
|
144
|
+
| [Security](docs/security.md) | Auth, ports, what talks to what |
|
|
145
|
+
|
|
146
|
+
## Compatibility
|
|
147
|
+
|
|
148
|
+
Tested with FactoryTalk Optix Studio 1.7.x on Windows 11, Python 3.12.
|
|
149
|
+
Optix CLI behavior is not contract-stable across major versions — pin your
|
|
150
|
+
Studio version in production.
|
|
151
|
+
|
|
152
|
+
## License
|
|
153
|
+
|
|
154
|
+
[MIT](LICENSE) · © 2026 ASQI · Not affiliated with or endorsed by Rockwell
|
|
155
|
+
Automation. FactoryTalk Optix is a trademark of Rockwell Automation, Inc.;
|
|
156
|
+
this project orchestrates locally installed Optix binaries without
|
|
157
|
+
redistributing them. See [NOTICE](NOTICE).
|
|
@@ -0,0 +1,227 @@
|
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
|
+
Name: ftx-mcp
|
|
3
|
+
Version: 1.0.0
|
|
4
|
+
Summary: MCP server for authoring, previewing, and verifying FactoryTalk Optix Studio changes via the emulator, single Windows box.
|
|
5
|
+
Author: ASQI
|
|
6
|
+
License: MIT License
|
|
7
|
+
|
|
8
|
+
Copyright (c) 2026 ASQI
|
|
9
|
+
|
|
10
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
11
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
12
|
+
in the Software without restriction, including without limitation the rights
|
|
13
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
14
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
15
|
+
furnished to do so, subject to the following conditions:
|
|
16
|
+
|
|
17
|
+
The above copyright notice and this permission notice shall be included in all
|
|
18
|
+
copies or substantial portions of the Software.
|
|
19
|
+
|
|
20
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
21
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
22
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
23
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
24
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
25
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
26
|
+
SOFTWARE.
|
|
27
|
+
|
|
28
|
+
---
|
|
29
|
+
|
|
30
|
+
DISCLAIMER OF AFFILIATION
|
|
31
|
+
|
|
32
|
+
This project is not affiliated with, endorsed by, or sponsored by Rockwell
|
|
33
|
+
Automation, Inc. FactoryTalk and Optix are trademarks of Rockwell Automation,
|
|
34
|
+
Inc. ftx-mcp is an independent integration tool authored against the
|
|
35
|
+
public Studio CLI surface; it is not a Rockwell product.
|
|
36
|
+
|
|
37
|
+
The FT Optix binaries themselves (FTOptixApplicationUpdateService.exe,
|
|
38
|
+
FTOptixStudio.exe, FTOptixRuntime.exe) are Rockwell Automation products,
|
|
39
|
+
licensed separately. This repository orchestrates them but does not
|
|
40
|
+
redistribute them.
|
|
41
|
+
|
|
42
|
+
Project-URL: Homepage, https://github.com/asqi-carter/ftx-mcp
|
|
43
|
+
Project-URL: Issues, https://github.com/asqi-carter/ftx-mcp/issues
|
|
44
|
+
Project-URL: Specification, https://github.com/asqi-carter/ftx-mcp/blob/main/docs/architecture.md
|
|
45
|
+
Keywords: factorytalk,optix,mcp,rockwell,ot
|
|
46
|
+
Classifier: License :: OSI Approved :: MIT License
|
|
47
|
+
Classifier: Operating System :: Microsoft :: Windows
|
|
48
|
+
Classifier: Programming Language :: Python :: 3
|
|
49
|
+
Classifier: Programming Language :: Python :: 3.11
|
|
50
|
+
Classifier: Programming Language :: Python :: 3.12
|
|
51
|
+
Classifier: Topic :: Software Development :: Libraries
|
|
52
|
+
Classifier: Topic :: System :: Installation/Setup
|
|
53
|
+
Requires-Python: >=3.11
|
|
54
|
+
Description-Content-Type: text/markdown
|
|
55
|
+
License-File: LICENSE
|
|
56
|
+
License-File: NOTICE
|
|
57
|
+
Requires-Dist: fastapi>=0.110
|
|
58
|
+
Requires-Dist: pydantic>=2.5
|
|
59
|
+
Requires-Dist: uvicorn>=0.27
|
|
60
|
+
Requires-Dist: mcp>=1.2
|
|
61
|
+
Requires-Dist: psutil>=5.9
|
|
62
|
+
Requires-Dist: websocket-client>=1.7
|
|
63
|
+
Provides-Extra: dev
|
|
64
|
+
Requires-Dist: pytest>=8; extra == "dev"
|
|
65
|
+
Requires-Dist: pytest-asyncio>=0.21; extra == "dev"
|
|
66
|
+
Requires-Dist: ruff>=0.5; extra == "dev"
|
|
67
|
+
Requires-Dist: mypy>=1.10; extra == "dev"
|
|
68
|
+
Requires-Dist: httpx>=0.27; extra == "dev"
|
|
69
|
+
Dynamic: license-file
|
|
70
|
+
|
|
71
|
+
# ftx-mcp
|
|
72
|
+
|
|
73
|
+
<!-- mcp-name: io.github.asqi-carter/ftx-mcp -->
|
|
74
|
+
|
|
75
|
+
**Talk to your FactoryTalk Optix project.** ftx-mcp connects AI tools
|
|
76
|
+
(Desktop, Cowork, Code — or any MCP client) to FactoryTalk Optix Studio on
|
|
77
|
+
your Windows machine, so you can build and change HMI screens by describing
|
|
78
|
+
what you want:
|
|
79
|
+
|
|
80
|
+
> *"Add a header that says 'Hello Optix' to Screen 1 and show me."*
|
|
81
|
+
>
|
|
82
|
+
> *"Bind that label's visibility to Model/PumpRunning."*
|
|
83
|
+
>
|
|
84
|
+
> *"Looks right. Launch the emulator and validate it."*
|
|
85
|
+
|
|
86
|
+
Your LLM authors the change directly into your open Studio project, runs the
|
|
87
|
+
emulator, and looks at the rendered runtime to confirm it worked. It is a
|
|
88
|
+
development and testing companion: shipping to hardware stays in Studio's own
|
|
89
|
+
Deploy dialog, in your hands. Everything besides the LLM calls runs locally
|
|
90
|
+
on your machine. No cloud service, no API key; your LLM of choice provides
|
|
91
|
+
the intelligence.
|
|
92
|
+
|
|
93
|
+
[**Blog Post**](https://asqi.org/resources/ftx-mcp-v1/)
|
|
94
|
+
|
|
95
|
+
## Install (10 minutes)
|
|
96
|
+
|
|
97
|
+
Requirements: Windows 11, FactoryTalk Optix Studio 1.7.x, and an MCP client like Claude Cowork.
|
|
98
|
+
|
|
99
|
+
```powershell
|
|
100
|
+
git clone https://github.com/asqi-carter/ftx-mcp.git
|
|
101
|
+
cd ftx-mcp
|
|
102
|
+
.\bootstrap\setup.ps1 # install + start the service
|
|
103
|
+
.\bootstrap\services.ps1 start # start the mcp
|
|
104
|
+
.\bootstrap\services.ps1 status # verify health
|
|
105
|
+
http://127.0.0.1:8765/ui # health dashboard
|
|
106
|
+
```
|
|
107
|
+
|
|
108
|
+
## Start the Studio Bridge (5 minutes)
|
|
109
|
+
|
|
110
|
+
1. **One-time bridge setup** (per project): in the Studio project tree,
|
|
111
|
+
right-click **NetLogic** → add a new **DesignTime NetLogic** named
|
|
112
|
+
`StudioMCPBridge`, double-click it to open the C# editor, and paste in
|
|
113
|
+
[`studio-bridge/StudioMCPBridge.cs`](studio-bridge/StudioMCPBridge.cs)
|
|
114
|
+
(make sure to rebuild in your code editor or save in Studio to trigger a rebuild)
|
|
115
|
+
2. **Setup the Project** once per Studio session: right-click
|
|
116
|
+
**StudioMCPBridge** → **SetupProject** → This just adds a webui for validation access at localhost:8081
|
|
117
|
+
3. **Start the bridge** once per Studio session: right-click
|
|
118
|
+
**StudioMCPBridge** → **StartBridge** → accept Studio's
|
|
119
|
+
one-time security prompt.
|
|
120
|
+
4. **Verify bridge health**: Studio Output will show `listening on http://127.0.0.1:8768` (the bridge). The service dashboard at http://127.0.0.1:8765/ui shows bridge status too.
|
|
121
|
+
|
|
122
|
+
## Cowork (5 minutes)
|
|
123
|
+
|
|
124
|
+
Requirements: MCP server and bridge running. Claude desktop app downloaded.
|
|
125
|
+
|
|
126
|
+
```powershell
|
|
127
|
+
cd ftx-mcp # install + start the service
|
|
128
|
+
.\bootstrap\setup-mcp-client.ps1 -WriteConfig # adds as a connector to desktop app
|
|
129
|
+
```
|
|
130
|
+
|
|
131
|
+
Restart Claude Desktop (You might have to end task in task manager to fully restart), then ask Claude to **"run optix_doctor"** — it
|
|
132
|
+
reports anything missing, with a plain-English fix for each item.
|
|
133
|
+
In settings > connectors you can adjust the permissions for each of the tools
|
|
134
|
+
|
|
135
|
+
## Claude Code (5 minutes)
|
|
136
|
+
|
|
137
|
+
Requirements: MCP server healthy and claude accessible in cli
|
|
138
|
+
|
|
139
|
+
```powershell
|
|
140
|
+
claude mcp add --transport http ftx-mcp http://127.0.0.1:8766/mcp
|
|
141
|
+
```
|
|
142
|
+
|
|
143
|
+
Then in Claude Code, run `/mcp` and confirm `ftx-mcp` shows as connected.
|
|
144
|
+
|
|
145
|
+
## Visual Studio Code (5 minutes)
|
|
146
|
+
|
|
147
|
+
Create or open `.vscode/mcp.json` and add:
|
|
148
|
+
|
|
149
|
+
```json
|
|
150
|
+
{
|
|
151
|
+
"servers": {
|
|
152
|
+
"ftx-mcp": {
|
|
153
|
+
"type": "http",
|
|
154
|
+
"url": "http://127.0.0.1:8766/mcp"
|
|
155
|
+
}
|
|
156
|
+
}
|
|
157
|
+
}
|
|
158
|
+
```
|
|
159
|
+
|
|
160
|
+
## Your first change
|
|
161
|
+
|
|
162
|
+
1. Ask for a change, e.g. *"Using the ftx mcp, Add a Start and stop button that toggles
|
|
163
|
+
Model/MotorRun on MainWindow, and verify it works with a label with the text of 'MOTOR RUNNING' that has visibility tied to MotorRun."*
|
|
164
|
+
2. Watch it work: author → emulator preview → screenshot → and when it looks
|
|
165
|
+
right, you deploy it to your hardware from Studio as usual.
|
|
166
|
+
|
|
167
|
+
## What it's capable of
|
|
168
|
+
|
|
169
|
+
- **Author** widgets, properties, bindings, computed expressions, events,
|
|
170
|
+
translations, and multi-screen navigation — live in the open Studio project.
|
|
171
|
+
- **Run** Studio's built-in emulator via F5 key and read the runtime log.
|
|
172
|
+
- **Verify** by looking at the webui: screenshot, click
|
|
173
|
+
buttons and tabs, type into fields.
|
|
174
|
+
- **Hand back to you to ship** when the preview looks right, you deploy
|
|
175
|
+
from Studio as usual. This distribution only runs the emulator.
|
|
176
|
+
|
|
177
|
+
The full tool list (48 tools, plus the same surface over plain HTTP for
|
|
178
|
+
scripts and CI) is in [docs/tool-reference.md](docs/tool-reference.md).
|
|
179
|
+
Bundled **authoring playbooks** (navigation, bound controls, styles,
|
|
180
|
+
expressions) ship with the server itself — Claude discovers them via
|
|
181
|
+
`optix_list_skills` / `optix_get_skill`, so every connected client gets
|
|
182
|
+
them with zero setup. (In Claude Code they also load natively as
|
|
183
|
+
[skills](skills/).)
|
|
184
|
+
|
|
185
|
+
## Security & safety posture
|
|
186
|
+
|
|
187
|
+
- **Local only.** The service binds `127.0.0.1` and talks to nothing off the
|
|
188
|
+
machine. Optional bearer-token auth, enforced before any LAN bind.
|
|
189
|
+
- **Read-only by default.** Every tool carries MCP `readOnlyHint` /
|
|
190
|
+
`destructiveHint` annotations (contract-pinned by tests) so your MCP host
|
|
191
|
+
can auto-approve reads and gate writes.
|
|
192
|
+
- **Write gates, not hope.** Undeclared properties, array writes, duplicate
|
|
193
|
+
names, and unsafe re-parents are refused with typed errors; composite
|
|
194
|
+
operations roll back on failure. File-level edits are refused while Studio
|
|
195
|
+
has the project open.
|
|
196
|
+
- **Audited.** Every model mutation appends a JSON line to a local audit
|
|
197
|
+
trail (`%LOCALAPPDATA%\ftx-mcp\logs\audit.jsonl`) what, when,
|
|
198
|
+
outcome.
|
|
199
|
+
- **Shipping stays in your hands.** Previewing never touches your runtime;
|
|
200
|
+
deploying to hardware happens from Studio, full stop. This distribution
|
|
201
|
+
does design time edits and testing via the emulator.
|
|
202
|
+
|
|
203
|
+
The full posture including the prompt-injection surface analysis is in
|
|
204
|
+
[SECURITY.md](SECURITY.md).
|
|
205
|
+
|
|
206
|
+
## Documentation
|
|
207
|
+
|
|
208
|
+
| | |
|
|
209
|
+
|---|---|
|
|
210
|
+
| [Runbook](docs/runbook.md) | First session, step by step |
|
|
211
|
+
| [Tool reference](docs/tool-reference.md) | Every MCP tool + the HTTP API |
|
|
212
|
+
| [Architecture](docs/architecture.md) | How the pieces fit together |
|
|
213
|
+
| [Troubleshooting](docs/troubleshooting.md) | Symptom-indexed fixes |
|
|
214
|
+
| [Security](docs/security.md) | Auth, ports, what talks to what |
|
|
215
|
+
|
|
216
|
+
## Compatibility
|
|
217
|
+
|
|
218
|
+
Tested with FactoryTalk Optix Studio 1.7.x on Windows 11, Python 3.12.
|
|
219
|
+
Optix CLI behavior is not contract-stable across major versions — pin your
|
|
220
|
+
Studio version in production.
|
|
221
|
+
|
|
222
|
+
## License
|
|
223
|
+
|
|
224
|
+
[MIT](LICENSE) · © 2026 ASQI · Not affiliated with or endorsed by Rockwell
|
|
225
|
+
Automation. FactoryTalk Optix is a trademark of Rockwell Automation, Inc.;
|
|
226
|
+
this project orchestrates locally installed Optix binaries without
|
|
227
|
+
redistributing them. See [NOTICE](NOTICE).
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
LICENSE
|
|
2
|
+
NOTICE
|
|
3
|
+
README.md
|
|
4
|
+
pyproject.toml
|
|
5
|
+
ftx_mcp.egg-info/PKG-INFO
|
|
6
|
+
ftx_mcp.egg-info/SOURCES.txt
|
|
7
|
+
ftx_mcp.egg-info/dependency_links.txt
|
|
8
|
+
ftx_mcp.egg-info/entry_points.txt
|
|
9
|
+
ftx_mcp.egg-info/requires.txt
|
|
10
|
+
ftx_mcp.egg-info/top_level.txt
|
|
11
|
+
service/__init__.py
|
|
12
|
+
service/__main__.py
|
|
13
|
+
service/_cdp.py
|
|
14
|
+
service/_dpapi.py
|
|
15
|
+
service/_token_admin.py
|
|
16
|
+
service/auth.py
|
|
17
|
+
service/core.py
|
|
18
|
+
service/deploy_lock.py
|
|
19
|
+
service/http_app.py
|
|
20
|
+
service/main.py
|
|
21
|
+
service/mcp_app.py
|
|
22
|
+
service/optix_model.py
|
|
23
|
+
service/optix_templates.py
|
|
24
|
+
service/studio_guard.py
|