| Page properties | ||||||||||
|---|---|---|---|---|---|---|---|---|---|---|
| ||||||||||
|
Enable AI-powered solution configuration through Model Context Protocol integration.
| Table of Contents | ||||||
|---|---|---|---|---|---|---|
|
| Info | ||
|---|---|---|
| ||
Preview Version for tests and training, not released for production. |
Enable AI-powered solution configuration through Model Context Protocol integration.
Version: 0.7
Last Updated: January 25, 2026
Connector Name: DesignerMCP
Interface: TCP/IP (stdio transport)
The AI MCP for Designer service enables AI models to interact with the FrameworX Designer application, providing intelligent assistance for solution configuration tasks. Instead of manually creating and configuring objects, you can describe what you need in natural language and let AI generate the configuration.
Note: This connector is for configuration-time operations (building solutions in Designer.exe). For querying live data from running solutions, see AI MCP for Runtime Connector.
| 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?" |
The MCP for Designer is Enabled by default. If you want to disable it:
This configuration has the scope of that solution only.
Click ApplyConfigure Claude Desktop to connect to the Designer MCP server:
{
"mcpServers": {
"FrameworX-Designer": {
"command": "c:<ProductPath>\\Dev\\Tatsoft2020_1\\FactoryStudio\\bin\\MCP\\DesignerMCP.exe",
MCP\\DesignerMCP.exe",
"args": ["/port:3101"],
"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
these17 tools organized by category:
Session| 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 |
| Tool | Purpose |
|---|---|
| list_ |
| objects | List |
| objects in a table 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 |
| Tool | Purpose |
|---|
| designer_ |
| Tool | Purpose |
|---|---|
| list_protocols | List available communication protocols filtered by group |
| get_protocol_schema | Get protocol-specific field schema (ProtocolOptions, PrimaryStation, Address) |
Protocols are organized into these groups:
| Group | Description | Examples |
|---|---|---|
| AutomationVendors | Vendor-specific PLC protocols | ControlLogix, S7, Mitsubishi, Omron |
| FactoryFloor | Industrial fieldbus protocols | Modbus, Profinet, EtherNet/IP |
| HistorianDB | Data storage and historian connections | SQL, ODBC, OSIsoft PI |
| ITCloud | IoT and cloud protocols | MQTT, MQTTSpB, REST, AMQP |
| StandardProtocols | Industry-standard protocols | OPCUA, OPCDA, ValueSimulator |
| VerticalIndustries | Industry-specific protocols | DNP3, IEC61850, BACnet |
| Tool | Purpose |
|---|---|
| open_data_explorer | Open Data Explorer with connection settings (MQTT, OPC, PLC, SQL) |
| get_data_explorer_state | Get connection status, selected node, and creation recipes |
| Source Type | URL Format | Example |
|---|---|---|
| MQTT | tcp://host:port or ssl://host:port | tcp://192.168.1.100:1883 |
| OPC | opc.tcp://host:port | opc.tcp://192.168.1.100:4840 |
| PLC | IP address or hostname | 192.168.1.100 |
| SQL | Connection string | Server=localhost;Database=mydb;... |
| Tool | Purpose |
|---|---|
| search_docs | Search FrameworX documentation |
| navigate_to | Navigate Designer UI to specific location |
| get_designer_state | Get current Designer view and selection |
| take_screenshot | Capture current Designer view |
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:
| 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.) |
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 |
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 counts |
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 | Process variable tags |
| UnsTagProviders | TagProviders | External data sources (MQTT, OPC UA) | |
| UnsUserTypes | UserTypes | Custom data structures (UDT) | |
| UnsEnumerations | Enumerations | Number-to-string mappings | |
| Devices | DevicesChannels | Channels | Protocol connections |
| DevicesNodes | Nodes | Device addresses | |
| DevicesPoints | Points | Tag-to-address mappings | |
| Alarms | AlarmsGroups | Groups | Alarm behavior settings |
| AlarmsItems | Items | Individual alarm definitions | |
| AlarmsAreas | Areas | Alarm hierarchy | |
| Historian | HistorianTags | HistorianTags | Tags configured for logging |
| HistorianTables | HistorianTables | Storage configurations | |
| HistorianStorageLocations | StorageLocations | Database connections | |
| Datasets | DatasetsDBs | DBs | Database connections |
| DatasetsQueries | Queries | SQL query definitions | |
| DatasetsTables | Tables | Direct table access | |
| DatasetsFiles | Files | File operations | |
| Scripts | ScriptsTasks | Tasks | Event-triggered code |
| ScriptsClasses | Classes | Reusable code libraries | |
| ScriptsExpressions | Expressions | One-liner calculations | |
| Reports | ReportsForms | Forms | Document templates |
| ReportsWebData | WebData | JSON/XML data objects | |
| Displays | DisplaysList | List | UI screens and pages |
| DisplaysSymbols | Symbols | Reusable visual components | |
| DisplaysLayouts | Layouts | Screen layout definitions | |
| DisplaysImages | Images | Image library | |
| Security | SecurityUsers | Users | User accounts |
| SecurityPermissions | Permissions | Permission flags | |
| SecurityPolicies | Policies | Security 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 | @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.
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 |
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": "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" }
]
}
},
{
"RowType": 1, "Col": 0, "ColSpan": 3Symbol",
"CellWizardType": { "HeaderLink": "Trend" }TANK",
"ContentLeft": {100,
"TypeTop": "TrendChart"100,
"LinkedValueWidth": "@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:
For device configuration, the AI can discover:
* suffix)When using Data Explorer tools, the AI 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 |
| Use list_protocols to discover available options | Guess protocol names |
| Use Data Explorer to browse before creating devices | Manually construct connection strings |
| 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" |
| Tip | Reason |
|---|---|
| Use get_protocol_schema before creating devices | Shows required fields and valid values |
| Pay attention to key fields (marked with *) | These must be provided for the device to work |
| Use Data Explorer to browse live data sources | Verifies connectivity and discovers available tags |
| Let AI use recipes from get_data_explorer_state | Pre-built configurations reduce errors |
| Specify interface type when protocol supports multiple | "Modbus over TCPIP" not just "Modbus" |
For querying live data from running solutions:
65,
"Height": 65
}
]
}
Dashboard displays use grid-based positioning with Cells array:
{
"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 }"Create a Double tag called TankLevel in the Tanks folder with range 0-100"
"I need to 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 use: 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 | ||
|---|---|---|
|