| 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. |
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.
| Use Case | Example |
|---|---|
| Bulk object creation | "Create 50 temperature tags following naming pattern Area{N}_Temp" |
| Display generation | "Create a dashboard showing all pump statuses in a 2×3 grid" |
| Device configuration | "Connect to a Siemens S7-1500 PLC at IP 192.168.1.10" |
| Configuration review | "Review my alarm configuration and suggest improvements" |
| Learning assistance | "Show me how to configure historian logging for this tag" |
| Object discovery | "List all tags in the Boiler area that don't have alarms configured" |
| Protocol discovery | "What protocols are available for Siemens PLCs?" |
| Cross-reference analysis | "Where is tag Tank1Level used in the solution?" |
MCP for Designer is not a code generator or wizard, it's a collaborative engineering tool.
| Traditional Generators | MCP for Designer |
|---|---|
| Generate output, then done | Work side-by-side with AI continuously |
| Output goes to files, needs to open on tools | Changes appear directly in Designer UI |
| One-shot generation | Iterative conversation with full context |
| Limited to predefined templates and specific areas | AI understands your entire solution |
| You adapt to the tool's structure | Tool adapts to your requirements |
What this means in practice:
The MCP for Designer is Enabled by default. If you want to To disable it:
This configuration has the scope of that solution onlysetting is per-solution.
Configure Claude Desktop to connect to the Designer MCP server:
{
"mcpServers": {
"FrameworX-Designer": {
"command": "<ProductPath>\\MCP\\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 17 tools organized by category:
| Tool | Purpose |
|---|---|
| create_solution | Create a new FrameworX solution (.dbsln file) |
| open_solution | Open an existing solution to work with |
| get_solution_info | Get solution overview with object counts per table |
| 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 or browse runtime namespaces (Server, Client, Tag, etc.) |
| get_objects_config | Get full JSON configuration for specific objects |
| get_table_schema | Get field definitions and valid values for any table type |
| create_objects | Create new objects from JSON configuration |
| validate_json | Validate JSON configuration before creating objects |
| update_object | Modify existing objects (respects MCP Category permissions) |
| delete_objects | Remove objects from the solution |
Runtime Values: When runtime is connected, object tools automatically include live values:
list_objectsaddsValueproperty to each object (when applicable)get_objects_configaddsValue,Quality,Timestampproperties (properties added are according the object type). Use
designer_action('get_runtime_diagnostics')to check if runtime is connectedconnection status.
| Tool | Purpose |
|---|---|
| designer_action | Navigate UI, get state, control runtime, set execution profile |
Available actions:
navigate — Go to module, table, or object pathget_state — Get current Designer view and selection (optional screenshot)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, TextBox, WizardSymbol, etc.controls) |
Special queries:
get_element_schema('Canvas') — Canvas display structure with layout infoget_element_schema('Dashboard') — Dashboard grid and cell structureget_element_schema('WizardSymbol') — Industrial symbols: BLOWER, MOTOR, PUMP, TANK, VALVE| Tool | Purpose |
|---|---|
| list_protocols | Search available protocols by equipment name (fuzzy matching) |
| get_protocol_schema | Get protocol-specific field schema for configuration fields |
Search examples:
list_protocols(search='siemens') → S7, S7Pluslist_protocols(search='allen') → EtherNet/IP, DF1, ControlLogixlist_protocols(search='modbus') → Modbus TCP, Modbus RTUlist_protocols(search='opc') → OPC UA, OPC DA| Tool | Purpose |
|---|---|
| search_docs | Search FrameworX documentation with label/section 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, version control, usage countsversions |
Available tables:
RecentChanges — Audit trail of who changed what and whenVersionControl — Table versions and modification datesCrossReference — Where an object is used (requires object_name)UseCount — Usage frequency per objectObjects are organized by module. Use these TableType names with object tools:
| Category | TableType | Designer Tab | Description | |||
|---|---|---|---|---|---|---|
| UNS | UnsTags | Tags | ||||
| UnsUserTypes | Process variable tagsUserTypes | |||||
| UnsTagProviders | TagProviders | External data sources (MQTT, OPC UA) | UnsUserTypes | UserTypes | Custom data structures (UDT) | |
| UnsEnumerations | EnumerationsNumber-to-string mappings | |||||
| Devices | DevicesChannels | ChannelsProtocol connections | ||||
| DevicesNodes | Nodes | Device addresses | ||||
| DevicesPoints | Points | Tag-to-address mappings | ||||
| Alarms | AlarmsGroups | Groups | Alarm behavior settings | |||
| AlarmsItems | ItemsIndividual alarm definitions | |||||
| AlarmsAreas | AreasAlarm hierarchy | |||||
| Historian | HistorianTags | HistorianTagsTags configured for logging | ||||
| HistorianTables | HistorianTablesStorage configurations | |||||
| HistorianStorageLocations | StorageLocations | Database connections | ||||
| Datasets | DatasetsDBs | DBsDatabase connections | ||||
| DatasetsQueries | QueriesSQL query definitions | |||||
| DatasetsTables | Tables | Direct table access | ||||
| DatasetsFiles | Files | File operations | ||||
| Scripts | ScriptsTasks | Tasks | Event-triggered code | |||
| ScriptsClasses | ClassesReusable code libraries | |||||
| ScriptsExpressions | ExpressionsOne-liner calculations | |||||
| Reports | ReportsForms | Forms | Document templates | |||
| ReportsWebData | WebDataJSON/XML data objects | |||||
| Displays | DisplaysList | List | UI screens and pages | |||
| DisplaysSymbols | Symbols | Reusable visual components | ||||
| DisplaysLayouts | LayoutsScreen layout definitions | |||||
| DisplaysImages | ImagesImage library | |||||
| Security | SecurityUsers | Users | User accounts | |||
| SecurityPermissions | Permissions | Permission flags | ||||
| SecurityPolicies | PoliciesSecurity rules |
| Method | Syntax | When to Use |
|---|---|---|
| Direct path | Tag.Folder/Name.Value | Standard tag reference |
| Asset function | Asset("Folder/Name").Value | Works everywhere, required for TagProvider dynamic paths |
| Context | Syntax | Example | |||
|---|---|---|---|---|---|
| Scripts (C#, VB, Python) | @ prefix required+ .Value | @Tag.Tank1.Level.Value or @Asset("Tank1").Value | |||
| Expressions | No @ prefix, no .Value | Tag.Tank1.Level + 10 | |||
| Display bindings | @ prefix + .Value | @Tag.Tank1.Level.Value | Dynamic bindings | Asset with expression | @Asset(Tag.SelectedPath).Value |
| String embedding | Curly braces | "Level: {Tag.Tank1.Level} %" |
| Namespace | Purpose | Examples |
|---|---|---|
| Server | Server-wide information | @Server.DateTime, @Server.MachineName, @Server.ProductVersion |
| Client | Per-client information (different per user) | @Client.Username, @Client.StationName, @Client.MachineName |
| Info | System diagnostics | @Info.CPU, @Info.Memory, @Info.DiskSpace |
Every configured object has runtime properties accessible via namespace:
Alarm.Group.Critical.AckRequired, Alarm.Item.HighTemp.ActiveDevice.Channel.Modbus1.Status, Device.Node.PLC1.ErrorScript.Task.Startup.LastRun, Display.MainPage.IsOpenUse list_objects('Server') or list_objects('Alarm.Group') to explore.
Tag.Folder1/Folder2/TagNameTag.Controller1.SPTag.ArrayTag[5]Objects created by AI automatically receive Category = "MCP" to track AI-created vs manually-created objects.
| Object Category | What AI Can Update |
|---|---|
| Contains "MCP" | All fields (full replacement) |
| No "MCP" (user edited) | Description field only |
How
It Worksit works:
Canvas displays use absolute pixel positioning with an Elements array:
{
"Name": "TankOverview",
"PanelType": "Canvas",
"Size": "1366 x 728",
"Elements": [
{
"Type": "TextBox",
"Left": 100,
"Top": 50,
"Width": 120,
"Height": 28,
"LinkedValue": "@Tag.Tank1.Level.Value"
},
{
"Type": "Symbol",
"WizardType": "TANK",
"Left": 100,
"Top": 100,
"Width": 65,
"Height": 65
}
]
}
{
"Name": "MotorDashboard",
"PanelType": "Dashboard",
"Size": "1366 x 728",
"DashboardDisplay": {
"Columns": ["*", "*"],
"Rows": ["*", "*"]
},
"Cells": [
{
"Row": 0,
"Col": 0,
"Cell": { "HeaderLink": "Motor 1" },
"Content": {
"Type": "TextBox",
"LinkedValue": "@Tag.Motor1.Speed.Value"
}
}
]
}
Pre-built industrial symbols with default appearance:
{ "Type": "Symbol", "WizardType": "VALVE", "Left": 100, "Top": 200 }Setting Up"Create a Double tag called TankLevel in the Tanks folder with range 0-100"
"I need to connect Connect to a Siemens S7-1500 PLC at IP 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 in the solution?"
AI will useuses: 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"
"Search the documentation for alarm configuration options"
| Page Tree | ||
|---|---|---|
|