Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.
Comment: Promote 10.1.5 draft body into live designer_action Reference

Draft preview of the 10.1.5 additions to designer_action and related DesignerMCP tools — new build action parameters and compile feedback on write/read responses.

designer_action Reference

Reference for the designer_action MCP tool: navigation, visual targeting, runtime control, and dynamic tab actions.

AI Integration → designer_action Reference (10.1.5 draft)


Info

New in This is a 10.1.5 . Three visual-targeting actions added (select_row, scroll, expand) plus the set_language dynamic action. navigate also accepts table-name form (e.g. UnsTagProviders, AlarmsItems) and the UnifiedNamespace.Tab public alias.draft preview. The tools and parameters described here are not yet released in the currently shipping version. When 10.1.5 ships, this content will be merged into the parent page and this draft retired.


10.1.5 adds build-visibility signals to the DesignerMCP surface. The build action gains two parameters that mirror the RuntimeBuildAndPublish dialog, write_objects responses carry per-row compile feedback for the four tables that hold user-authored .NET, get_objects(detail='full') surfaces a lastCompile field on those same rows, and the solution context carries a compact build_state section.

The JSON shape returned by the build surface is defined once on MCP SDK Reference (10.1.5 draft) — the "build Block" section there is the authoritative shape. This page covers only the DesignerMCP-specific entry points

The designer_action MCP tool performs every non-object-mutation operation against the live Designer: navigation between tabs, finding objects, targeting a specific row for visual attention, starting and stopping the runtime, and dispatching dynamic tab actions the active tab advertises.

Use this reference together with MCP SDK Reference for the transport model and Claude Code MCP Setup for setup.

Table of Contents
maxLevel2
minLevel2
stylenone


designer_action('build', …) — new parameters

The build action invokes the same pipeline as the Designer "Build and Publish" dialog. In 10.1.5 it accepts two named parameters that mirror the dialog's checkboxes.

Signature

Code Block
languagetext
designer_action(
  action: string,             "build",
  rebuild_all:       // one of the core actions below, or any tabActions value
  target: string bool = false,   // false = incremental, true = full rebuild
  validate_displays:  bool = true     // meaning depends on action run Display compile pass in addition to Scripts
) -> object { build: <block> }
      

When the server does not recognize the action, the response includes a validActions array with the core list. Dynamic tab actions are discovered through tool responses (for example, the tabActions array returned by get_objects).

ParameterDefaultEffect
rebuild_allfalseWhen false, only objects modified since the last build are recompiled; unchanged objects appear in summary.skipped. When true, every object in the four affected tables is recompiled regardless of modification state. Mirrors the Rebuild All checkbox in the Build and Publish dialog.
validate_displaystrueWhen true, DisplaysList code-behind is compiled alongside the three Scripts tables. When false, only Scripts are compiled (useful when iterating on script logic without wanting the Display compile cost). Mirrors the Validate Displays checkbox in the Build and Publish dialog.

The response is the shared build block. See MCP SDK Reference (10.1.5 draft) for the full shape.

Code Block
languagetext

# Fast path during iterative development
designer_action('build')
# == designer_action('build', rebuild_all=false, validate_displays=true)

# Pre-deploy check — recompile everything
designer_action('build', rebuild_all=true, validate_displays=true)

# Scripts-only run while debugging script logic
designer_action('build', validate_displays=false)
      

write_objects — per-row compile field

When a write_objects call touches a row in one of the four affected tables (ScriptsTasks, ScriptsClasses, ScriptsExpressions, DisplaysList), the response entry for that row carries a compile field populated from the save-time incremental compile.

Code Block
languagejs

{
  "results": [
    {
      "table": "ScriptsTasks",
      "name":  "Line1_Cycle",
      "status": "written",
      "compile": {
        "status": "error",
        "diagnostics": [
          { "line": 12, "msg": "The name 'tagx' does not exist in the current context" }
        ]
      }
    },
    {
      "table": "ScriptsClasses",
      "name":  "TankUtils",
      "status": "written",
      "compile": { "status": "ok", "diagnostics": [] }
    }
  ]
}
      

Writes to rows outside the four affected tables carry no compile field — those objects do not participate in the .NET compile pipeline.

The row-level compile reports only what the incremental pipeline saw for that single object. Cross-object breakage — for example, an edit to a ScriptsClasses row that breaks a ScriptsTasks row referencing it — is surfaced by a subsequent designer_action('build') call, not by the write response alone.


get_objects(detail='full') — lastCompile field

When get_objects is called with detail='full' against one of the four affected tables, each returned row carries a lastCompile field holding the most recent compile result for that object.

Code Block
languagejs

{
  "table": "ScriptsTasks",
  "name":  "Line1_Cycle",
  "code":  "...",
  "lastCompile": {
    "status": "ok",
    "at":     "2026-04-21T16:02:11Z",
    "diagnostics": []
  }
}
      
FieldMeaning
lastCompile.statusok or error, matching the shared build block convention.
lastCompile.atISO-8601 timestamp of the compile that produced this result.
lastCompile.diagnostics[]Same shape as elsewhere — line and msg per entry, empty when status is ok.

Calls with detail='summary' or the default detail level do not include lastCompile — it is only emitted on the full-detail path to keep the summary response compact.


SolutionContext / RefreshContext — build_state section

The context packages returned to the agent on connect and on refresh now include a compact build_state section. This gives the agent a one-shot view of compile health without needing to call designer_action('build') at session start.

Code Block
languagejs

{
  "build_state": {
    "built":     42,
    "failed":    1,
    "skipped":   0,
    "timestamp": "2026-04-21T16:02:11Z"
  }
}
      

The fields match the summary portion of the shared build block. Per-object diagnostics are not included here — callers that need them issue designer_action('build') or get_objects(detail='full') on the affected table.

Core Actions

ActionTarget formatPurpose
navigateSection.Tab, tab name, table name, or Table.ObjectGo to any module, table, or object. Use for info pages (AlarmsGroups, DataExplorer.MQTTTools, Monitors) and to focus a specific object. Table-name form matches the table_type = Section + Tab convention used elsewhere in the API.
select_rowTableType.ObjectNameSelect a specific row in a config grid by name and scroll it into view. Visual only, no mutation.
scrollTableType.ObjectNameAlias of select_row.
expandTreeName.path/segmentsExpand a tree node, select it, scroll into view. V1 supports AssetTree only. Library and symbol trees return UNSUPPORTED_TREE.
find_objectObject nameOpen the Find Results panel with every location where the object is referenced.
find_nextStep to the next location in the Find Results panel.
start_runtimeStart the runtime for the current solution.
stop_runtimeStop the runtime.
hot_reloadReload the active configuration into the running runtime.

Dynamic Tab Actions

Each Designer tab advertises extra actions in the tabActions array on get_objects responses. Call designer_action with any advertised value. Common examples:

ActionTarget formatExample
logonuser:passworddesigner_action('logon', 'admin:tatsoft')
set_themeTheme namedesigner_action('set_theme', 'Dark')
set_languageBCP-47 codedesigner_action('set_language', 'pt-BR')
builtin_brokerstart or stopdesigner_action('builtin_broker', 'start')
buildBuild labeldesigner_action('build', 'v2.1 release')
go_to_folderFolder pathdesigner_action('go_to_folder', 'Line1/Tank1')

Unknown dynamic actions return a clear error with the current tab's tabActions list, so the client always has a recovery path.

Examples

Code Block
languagetext
# Navigate to an info page designer_action('navigate', 'DataExplorer.MQTTTools') designer_action('navigate', 'AlarmsMonitor') # Navigate to a specific object designer_action('navigate', 'Tag.Line1/Tank1/Level') designer_action('navigate', 'Display.MainPage') # Navigate by table name (Section + Tab concatenated — same convention as table_type) designer_action('navigate', 'UnsTagProviders') designer_action('navigate', 'AlarmsItems') designer_action('navigate', 'DevicesChannels') # Navigate via the UnifiedNamespace public alias designer_action('navigate', 'UnifiedNamespace.TagProviders') # Target a config grid row (no mutation) designer_action('select_row', 'UnsTags.Plant1/Temperature') designer_action('select_row', 'AlarmsItems.HighTemp') designer_action('select_row', 'DevicesChannels.Modbus1') # Expand an AssetTree path designer_action('expand', 'AssetTree.Plant1/Motor1') designer_action('expand', 'AssetTree.Plant1/Tank2/Inlet') # Find references designer_action('find_object', 'Tag.Folder1/Level') designer_action('find_next') # Runtime control designer_action('start_runtime') designer_action('stop_runtime') designer_action('hot_reload') # Dynamic tab actions (from tabActions) designer_action('set_theme', 'Dark') designer_action('set_language', 'pt-BR') designer_action('builtin_broker', 'start')


Error Codes

CodeWhenRecovery
MISSINGBUILD_IN_PARAMETERTarget omitted for an action that needs one.PROGRESSAnother build call is already running for the active solution.Wait for the in-flight call to complete. The second call does not queueResponse includes an examples array. Retry with a valid target.
INVALID_PARAMETERTarget has the wrong format (for example, no TableType. prefix on select_row)rebuild_all or validate_displays is not a boolean.Response includes an examples array with the correct format.
ROW_NOT_FOUNDselect_row target exists neither as a row name nor as a folder path.Check spelling. Use get_objects to list the table contents.
UNSUPPORTED_TREEexpand target names a tree other than AssetTree.V1 supports AssetTree only. Library and symbol trees are a future extension.
INVALID_ACTIONAction is neither a core action nor an advertised tab action.Response includes the validActions list and, when available, the current tab's tabActionscall form.

In this section...

Page Tree
root@parent