| Page properties | ||||||||||
|---|---|---|---|---|---|---|---|---|---|---|
| ||||||||||
|
Enable AI-powered solution configuration through Model Context Protocol integration.
| Table of Contents | ||||||
|---|---|---|---|---|---|---|
|
Documentation pages: AI Integration | MCP for Designer In Action | AI MCP for Designer Connector
| Info | ||
|---|---|---|
| ||
Preview Version for tests and training, not released for production. |
Enable AI-powered solution configuration through Model Context Protocol integration.
Version: 0. |
The AI MCP for Designer
enables AI models to interact with
FrameworX Designer
, providing intelligent assistance for solution configuration
. Describe what you need in natural
language—AI generates the configuration.
Note: This connector is for configuration-time operations (building solutions in Designer.exe). For querying live data from running solutions, see .
Table of Contents maxLevel 2 minLevel 2 indent 10px exclude Overview style none
| AI Model | ↔ | MCP Protocol | ↔ | Solution Configuration | ||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Claude, GPT, GitHub Copilot | Model Context Protocol | Designer.exe | ||||||||||
| ↓ | ||||||||||||
| Structured Methods | ||||||||||||
| ||||||||||||
When AI is connected to Designer, you'll see:
This provides clear visual feedback that AI is actively controlling the Designer.
AI MCP for Runtime Connector.MCP for Designer is Enabled by default. To disable:
This setting is per-solution.
Configure Claude Desktop to connect to the Designer MCP server:
{
"mcpServers": {
"FrameworX-Designer": {
"command": "<ProductPath>\\fx-10MCP\\net8.0\\TMCPServerDesigner\\TMCPServerDesigner.exe",
"args": ["/port:3102"]DesignerMCP.exe",
"transport": "stdio"
}
}
}
Tip: You can run both MCP for Designer and MCP for Runtime simultaneously by including both configurations in your claude_desktop_config.json file.
AI MCP for Designer provides these tools organized by category:
| Tool | Purpose |
|---|---|
| create_solution | Create a new FrameworX solution |
| open_solution | Open an existing solution |
| get_solution_info | Get solution |
| Tool | Purpose |
|---|---|
| list_tables | List all available object types (Tags, Alarms, etc.) |
| get_table_schema | Get field definitions for any object type |
| overview with object counts |
| Info |
|---|
The solutions visible to the MCP for Designer are only the ones in folders defined as Allow Remove Access, by the Solution Center tool. By Default the solutions in the sub-folder ..\Documents\FrameworXSolutions are visible. |
| Tool | Purpose |
|---|---|
| list_objects | |
| List objects in a table or browse runtime namespaces | |
| get_objects_config | |
| Get full | |
| JSON configuration for specific objects | |
| get_table_schema | Get field definitions and valid values for any table |
| create_objects | Create new objects from |
| JSON configuration | |
| update_objects | Modify existing objects |
| validate_json | Validate configuration before creating objects |
| Tool | Purpose |
|---|---|
| list_displays | List all displays in the solution |
| export_display | Export display to AI-friendly JSON format |
| import_display | Create/update display from JSON |
| get_symbol_info | Get symbol metadata and parameters |
| search_symbols | Search symbol library by name or category |
| update_object | Modify existing objects (respects MCP Category) |
| delete_objects | Remove objects from solution |
Runtime Values: When runtime is connected, object tools include live values. Use
designer_action('get_runtime_diagnostics')to check connection status.
| Tool | Purpose |
|---|---|
| designer_action | Navigate UI, get state, control runtime |
Available actions:
navigate — Go to module, table, or object pathget_state — AI MCP for Designer uses simplified JSON formats for creating and modifying displays.
Canvas displays use absolute pixel positioning:
{
"Type": "DisplaysList",
"Name": "TankOverview",
"Width": 1366,
"Height": 768,
"DisplayMode": "Page",
"Children": [
{
"Type": "Symbol",
"SymbolName": "HMI/Tanks/TankWithLevel",
"Left": 100,
"Top": 50,
"Width": 200,
"Height": 300,
"SymbolLabels": [
{ "Key": "Level", "Value": "@Tag.Tank1.Level" },
{ "Key": "Title", "Value": "Tank 1" }
]
},
{
"Type": "TrendChart",
"Left": 350,
"Top": 50,
"Width": 400,
"Height": 300,
"LinkedValue": "@Tag.Tank1.Level"
}
]
}
Dashboard displays use grid-based positioning with resizable cells:
{
"Type": "DisplaysList",
"Name": "MotorDashboard",
"Width": 1366,
"Height": 768,
"DisplayMode": "Page",
"DashboardDisplay": {
"Columns": ["*", "*", "*"],
"Rows": ["*", "*"]
},
"Cells": [
{
"Row": 0, "Col": 0,
"Cell": { "HeaderLink": "Motor 1" },
"Content": {
"Type": "Symbol",
"SymbolName": "HMI/Motors/MotorStatus",
"SymbolLabels": [
{ "Key": "Value", "Value": "@Tag.Motor1.Status" }
]
}
},
{
"Row": 1, "Col": 0, "ColSpan": 3,
"Cell": { "HeaderLink": "Trend" },
"Content": {
"Type": "TrendChart",
"LinkedValue": "@Tag.Motor1.Speed"
}
}
]
}
| Feature | Canvas | Dashboard |
|---|---|---|
| Positioning | Left, Top (pixels) | Row, Col (grid) |
| Sizing | Width, Height | Cell spans (ColSpan, RowSpan) |
| Shapes | ? Supported | ? Not supported |
| Cell headers | N/A | Cell.HeaderLink |
| Resizable | No | Yes (TGridSplitter) |
For complete format specifications, see:
When you open or create a solution, the AI automatically receives context about the FrameworX object model, including:
This context enables the AI to generate valid configuration without you needing to explain the FrameworX data model. For detailed information beyond what's in the context, the AI can use the search_docs tool to query the FrameworX documentation.
For display operations, the AI also receives:
AI-generated configuration should always be reviewed before saving:
For best results when working with AI MCP for Designer:
| Do | Don't |
|---|---|
| Be specific about object types and properties | Use vague descriptions |
| Reference existing solution patterns | Assume AI knows your conventions |
| Provide context about intended behavior | Skip important constraints |
| Ask AI to explain what it will do before executing | Approve bulk changes without review |
| Use validate_json before large create operations | Skip validation on bulk imports |
| Specify display type (Canvas vs Dashboard) | Assume AI will choose correctly |
| Tip | Reason |
|---|---|
| Start with Dashboard for operational screens | Responsive, resizable cells |
| Use Canvas for P&ID and custom graphics | Precise positioning, shapes supported |
| Specify grid dimensions explicitly | "2×3 grid" is clearer than "grid for 6 items" |
| Reference existing symbols by full path | "HMI/Motors/MotorStatus" not just "motor symbol" |
| Provide tag paths for bindings | "@Tag.Motor1.Speed" not "motor speed tag" |
get_runtime_status — Check if runtime is runningget_startup_config — Get startup module settingsstart_runtime / stop_runtime — Control runtime executionset_execution_profile — Switch between Development and Production| Tool | Purpose |
|---|---|
| get_element_schema | Get display element properties (Canvas, Dashboard, controls) |
Special queries:
get_element_schema('Canvas') — Canvas display structureget_element_schema('Dashboard') — Dashboard grid and cell structureget_element_schema('WizardSymbol') — Industrial symbols: BLOWER, MOTOR, PUMP, TANK, VALVE| Tool | Purpose |
|---|---|
| list_protocols | Search protocols by equipment name (fuzzy matching) |
| get_protocol_schema | Get protocol-specific configuration fields |
Search examples:
list_protocols(search='siemens') → S7, S7Pluslist_protocols(search='allen') → EtherNet/IP, DF1, ControlLogixlist_protocols(search='modbus') → Modbus TCP, Modbus RTU| Tool | Purpose |
|---|---|
| search_docs | Search FrameworX documentation with filters |
| get_example_solution | Download example solution JSON configuration |
Documentation labels: concept, tutorial, how-to, example, reference, connector, code, control
| Tool | Purpose |
|---|---|
| get_track_changes | Query audit trail, cross-references, versions |
Available tables:
RecentChanges — Audit trailVersionControl — Table versionsCrossReference — Where an object is used (requires object_name)UseCount — Usage frequency| Category | TableType | Tab |
|---|---|---|
| UNS | UnsTags | Tags |
| UnsUserTypes | UserTypes | |
| UnsTagProviders | TagProviders | |
| UnsEnumerations | Enumerations | |
| Devices | DevicesChannels | Channels |
| DevicesNodes | Nodes | |
| DevicesPoints | Points | |
| Alarms | AlarmsGroups | Groups |
| AlarmsItems | Items | |
| AlarmsAreas | Areas | |
| Historian | HistorianTags | HistorianTags |
| HistorianTables | HistorianTables | |
| HistorianStorageLocations | StorageLocations | |
| Datasets | DatasetsDBs | DBs |
| DatasetsQueries | Queries | |
| DatasetsTables | Tables | |
| DatasetsFiles | Files | |
| Scripts | ScriptsTasks | Tasks |
| ScriptsClasses | Classes | |
| ScriptsExpressions | Expressions | |
| Reports | ReportsForms | Forms |
| ReportsWebData | WebData | |
| Displays | DisplaysList | List |
| DisplaysSymbols | Symbols | |
| DisplaysLayouts | Layouts | |
| DisplaysImages | Images | |
| Security | SecurityUsers | Users |
| SecurityPermissions | Permissions | |
| SecurityPolicies | Policies |
| Context | Syntax | Example |
|---|---|---|
| Scripts (C#, VB, Python) | @ prefix + .Value | @Tag.Tank1.Level.Value |
| Expressions | No prefix, no .Value | Tag.Tank1.Level + 10 |
| Display bindings | @ prefix + .Value | @Tag.Tank1.Level.Value |
| String embedding | Curly braces | "Level: {Tag.Tank1.Level} %" |
Tag.Folder1/Folder2/TagNameTag.Controller1.SPTag.ArrayTag[5]Objects created by AI receive Category = "MCP" to track AI-created vs manually-created.
| Object Category | What AI Can Update |
|---|---|
| Contains "MCP" | All fields (full replacement) |
| No "MCP" (user edited) | Description field only |
How it works:
"Create a Double tag called TankLevel in the Tanks folder with range 0-100"
"Connect to a Siemens S7-1500 PLC at 192.168.1.10"
AI will: Search protocols → Present options → Create Channel → Create Node → Help map Points
"Create a dashboard with 4 cells showing TankLevel, TankTemp, PumpStatus, and AlarmCount"
"Create high and low alarms for TankLevel: High at 90 (Critical), Low at 10 (Warning)"
"Where is tag Tank1Level used?"
AI uses: get_track_changes('CrossReference', object_name='Tag.Tank1Level')
Instead of "Create some tags", say:
"Create these tags in the Production folder: MixerSpeed (Double, 0-1000 RPM), MixerRunning (Digital), BatchCount (Integer)"
"Validate this configuration before creating 50 tags"
"Show me the recent changes" or "Navigate to the Tags tab"
Create simple displays before complex dashboards"Search the documentation for alarm configuration options"
For querying live data from running solutions:
| Page Tree | ||
|---|---|---|
|