MCP Connector MicroStation Documentation
How to install, configure, and use MCP Connector MicroStation to connect AI clients like Claude Desktop, Claude Code, Cursor, and VS Code to Bentley MicroStation via Model Context Protocol.
MCP Connector MicroStation connects AI assistants to a live Bentley MicroStation session on your machine. Once connected, your AI can read and author the design file: scan elements, create and modify geometry, manage levels, cells, references and annotation, and build 3D SmartSolids. Two parts ship together and talk over a local connection: an MCP server your AI client launches, and a plug-in that loads inside MicroStation. Nothing needs to be configured between them.
Requirements
- Bentley MicroStation 2023 to 2026 (Windows, 64-bit)
- The connector runs as a managed AddIn inside MicroStation, so MicroStation itself must be installed on the same machine.
- Windows 10 or 11
AI Applications
- Claude Desktop
- Claude Code
- Cursor
- VS Code
- Any other MCP client (via manual configuration below)
Installation
Close MicroStation before starting the installation.
MCPCONNECTOR STATUS at the command line; if it is not running, type MCPCONNECTOR START.Connect Your AI Client
The MCP server is a single executable installed with the plug-in bundle:
C:\ProgramData\AUTOM8LABS\MCPConnectorMicroStation\Bridge\MCPConnectorMicroStation.Bridge.exe
Claude Desktop and Cursor
The installer registers the server automatically in Claude Desktop
(claude_desktop_config.json) and Cursor (.cursor\mcp.json).
Just restart the client after installing. If you ever need to add it by hand, use the
JSON below.
Manual configuration (any MCP client)
Add this to your client's MCP server configuration:
{
"mcpServers": {
"AUTOM8LABS_MicroStation": {
"command": "C:\\ProgramData\\AUTOM8LABS\\MCPConnectorMicroStation\\Bridge\\MCPConnectorMicroStation.Bridge.exe"
}
}
}
Claude Code
Register the same executable from a terminal:
claude mcp add AUTOM8LABS_MicroStation -- "C:\ProgramData\AUTOM8LABS\MCPConnectorMicroStation\Bridge\MCPConnectorMicroStation.Bridge.exe"
VS Code
Add the server to your MCP configuration (for example .vscode/mcp.json in a workspace):
{
"servers": {
"AUTOM8LABS_MicroStation": {
"type": "stdio",
"command": "C:\\ProgramData\\AUTOM8LABS\\MCPConnectorMicroStation\\Bridge\\MCPConnectorMicroStation.Bridge.exe"
}
}
}
After changing MCP configuration, restart the AI client completely for the changes to take effect.
Optional: raw key-in and script execution
send_keyin, run_vba_macro and run_python_script require Pro and are disabled by default. To enable them, create the Windows user environment variable MCP_CONNECTOR_ENABLE_COMMAND_EXEC with value 1, then close and restart MicroStation so its process receives the setting. Setting this only in an AI client's MCP server configuration does not enable the native plug-in.
In Windows, open Edit environment variables for your account, choose New under User variables, enter the name and value above, and confirm. Remove the variable and restart MicroStation to disable execution again. These tools can run arbitrary commands or code in the host; enable them only when that access is intended.
Local AI Setup
Connect a local AI model to MicroStation through an MCP-compatible app. These steps are for Windows, on the same computer as MicroStation.
1. Prepare MicroStation
- Install MCP Connector for MicroStation and open a sample DGN file.
- Run the key-in
MCPCONNECTOR STATUSto check the connector is running. If needed, start it withMCPCONNECTOR START. Keep MicroStation open. - In your AI app, download or select a local model that supports tool calling.
2. Configure your app
Use this entry for the installed MCP Connector for MicroStation.
{
"mcpServers": {
"AUTOM8LABS_MicroStation": {
"command": "C:\\ProgramData\\AUTOM8LABS\\MCPConnectorMicroStation\\Bridge\\MCPConnectorMicroStation.Bridge.exe"
}
}
}
For separate fields, use AUTOM8LABS_MicroStation as the name, stdio as the transport, and the command path with single backslashes and no quotes. Leave Arguments blank for this example.
Edit an existing connector entry rather than adding a duplicate. Keep its arguments, environment and tool settings. In an existing JSON file, add only AUTOM8LABS_MicroStation inside mcpServers, preserving other entries.
Choose your app below. Connection tested means registration, tool discovery and reconnection were checked using the Revit connector. These MicroStation steps use the same app settings; they have not been tested end to end with every app and model.
- Open Settings > Agent Skills once to create the configuration file.
- Click the app version number > Open storage. Open
plugins/anythingllm_mcp_servers.jsonand add the entry. - Return to Agent Skills and click Refresh. Check the connector is running.
- Start your test prompt with
@agent.
- Open MCP connections and look for
AUTOM8LABS_MicroStation, including paused entries. - Use that connection if present. Otherwise, add one using the name and command above.
- Enable the connection and choose your local model.
- Open Settings > MCP > MCP Servers > Add > Import from JSON.
- Paste the JSON, enable the server and check its tools appear.
- Open Work > your Agent's menu > Edit > MCP and enable the connector for that Agent.
- Select your local model and start a conversation with that Agent.
- Open Settings > MCP Servers > Add MCP Server.
- Select STDIO and enter the name and command above.
- Save, then enable the server. A green indicator confirms it is active.
- In the right sidebar, open Program > Install > Edit mcp.json.
- Add the connector inside
mcpServersand save. - Check the connector is available and enabled for your chat.
- Sign in to your local installation. Open MCP settings > Import JSON.
- Paste the JSON. The import applies immediately.
- Enable the connector and MCP tool use for your chat.
These steps apply to 2026.9.11. Other versions may differ. See Unsloth's current guide.
3. Test the connection
With your sample DGN file open, ask:
In AnythingLLM, prefix this with @agent. Confirm a connector tool runs and the answer matches your open design file and model.
Tool loading and model limits
If available, enable tool selection or on-demand loading and start with a few read-only tools. Large tool lists can exceed a local model's context. A larger context setting alone does not guarantee reliable tool use.
Free vs Pro
Two editions ship in one install:
- Free (43 native tools, plus two Bridge recovery tools) is read-only inspection: a connectivity check, plus tools that scan elements, read properties, ranges and tags, list levels, models, cells, references, saved views, dimension styles and paper sizes, and navigate the view with zoom, fit and rotate. Nothing in the free edition creates, modifies, or maintains the design file. No key is needed; it just works.
- Pro (119 additional native tools and a session launcher) unlocks everything else: geometry and cell placement, 3D SmartSolid modelling with booleans and feature editing, transforms and symbology, annotation and dimensioning, level management with DGNLIB standards checking, reference authoring, camera and fence control, batch DGN to DWG conversion, print to PDF, and file housekeeping.
Pro is a per-seat subscription: £10 per seat per month or £100 per seat per year. See the product page for purchasing.
In the tool reference below, every tool is marked Free or Pro. On a free install, Pro tools are not listed to the AI client at all, and the MicroStation plug-in checks entitlement before executing paid operations, independently of the tool list shown by the AI client.
The Bridge reads the running plug-in's edition and refreshes tool availability when it changes. If your AI client keeps a cached list, reconnect it after activating or deactivating Pro. When MicroStation cannot be reached, the local manifest is the fallback.
Licence Activation and Management
Licensing lives entirely in the MicroStation plug-in. There is no key to set in the AI client.
MCPCONNECTOR LICENCE command.- One seat per machine. A seat covers every AI client on that machine: Claude Desktop, Claude Code, Cursor, VS Code, and any other MCP client.
- Moving machines. Click Deactivate in the licence dialog to free the seat, then activate on the new PC.
- Working offline. A validated key keeps working offline between licence checks, so short offline stretches never block your work.
Quickstart
MCPCONNECTOR STATUS confirms it is running.ping tool. You should get back "Connected to MicroStation."The AI reads the level table and element counts and reports back. On Pro, follow up with:
Power BI Dashboard
Review AI-assisted work in MicroStation using the Tool Use Audit browser dashboard or Power BI report. The dashboard download is free. Recording MicroStation calls requires MCP Connector for MicroStation Pro 1.1.2 or later.
Download: Tool Use Audit dashboard and Power BI report (.zip)
1. Enable audit logging
Logging is off by default. Open Registry Editor as administrator. Export the following key if it already exists, then create or edit these values:
HKEY_LOCAL_MACHINE\SOFTWARE\AUTOM8LABS\MCPConnectorMicroStation
| Value | Type | Setting |
|---|---|---|
AuditLog | DWORD (32-bit) | 1 enables recording. |
AuditLogFolder | String (REG_SZ) | Your local or network log folder, for example C:\AuditLogs. |
AuditReason | DWORD (32-bit) | Optional: 1 asks the AI for a short explanation of each call. Leave unset to omit it. |
Create the log folder and give MicroStation users write access. For several computers, use a shared network folder. Restart MicroStation, reconnect the AI app and ask it to run get_session_info to confirm the active policy. The MCPCONNECTOR STATUS key-in also reports when calls are being recorded.
2. Open the dashboard
Extract the ZIP to a short path such as C:\AuditDashboard. Keep all its files and folders together.
- Open the extracted
AUTOM8LABS-Connector-Audit-v1.1.0folder, then openaudit-dashboard.htmlin Chrome or Edge. - Select Open audit folder and choose your
AuditLogFolder. - Allow folder read access. The dashboard reads the CSV files locally and refreshes automatically.
- In the extracted
AUTOM8LABS-Connector-Audit-v1.1.0folder, openAUTOM8LABS Connector Audit.pbipin Power BI Desktop for Windows, September 2026 or later. - Select Transform data > Edit parameters and set AuditLogFolder to your log folder.
- Select OK > Apply changes > Refresh.
Use the Product filter to select MicroStation. Select Refresh when you want the latest records. See Microsoft's Power BI project guide for opening .pbip reports.
3. Check the records
With a sample DGN open, ask the AI to run get_file_info. Wait around 30 seconds, then look for that call in the dashboard. Select Refresh in Power BI.
Each record includes the time, Windows user, computer, MicroStation release, design file, AI app, tool, read/write classification and outcome. The arguments and optional AI explanation are limited to 300 characters each. Chat messages and full tool results are not recorded. A write classification means a tool can change a file; it does not prove that a change occurred.
Local CSV files are kept in %LOCALAPPDATA%\AUTOM8LABS\MCPConnectorMicroStation\Audit for 90 days. They are copied into month folders under AuditLogFolder about every 30 seconds and when the connector stops. Retention in that destination folder is managed by your organisation. Logging failures do not stop tool execution.
Bridge-only tools, including start_microstation_session and the two recovery tools, are not recorded. Audit logging requires an active Pro licence.
Tool Reference
Browse the full reference below. Categories and tool names are listed alphabetically. Each tool has an example prompt you can click to copy, paste into your AI client and adapt to your model.
The 165 client tools include 162 native tools, a Pro session launcher and two Free Bridge recovery tools. The Edition column shows whether each tool is Free or requires Pro. The plug-in checks the licence before executing Pro tools.
Replace example file paths, names and dimensions with your own. Coordinates and distances use the design file's master units unless stated otherwise. For prompts about a selected element, select it in MicroStation first.
3D SmartSolids
| Tool | Example prompt | Edition |
|---|---|---|
| Convert an element into a solid body so the solid operations can accept it | ||
convert_to_smart_solid | Pro | |
| Create a box solid in MicroStation | ||
create_smart_solid_box | Pro | |
| Create a cone solid in MicroStation, built along the Z axis | ||
create_smart_solid_cone | Pro | |
| Create a cylinder solid in MicroStation | ||
create_smart_solid_cylinder | Pro | |
| Create a sphere solid in MicroStation | ||
create_smart_solid_sphere | Pro | |
| Create a torus solid in MicroStation | ||
create_smart_solid_torus | Pro | |
| Create a wedge solid in MicroStation: a circular sector of the given radius and angle, extruded to the given height | ||
create_smart_solid_wedge | Pro | |
| Extrude a closed planar element - a shape, circle, ellipse or closed complex chain - into a solid, perpendicular to the profile's own plane | ||
extrude_profile | Pro | |
| Loft a solid through two or more profiles in the order given, so the shape transitions from one cross-section to the next | ||
loft_profiles | Pro | |
| Inspect a solid: volume, body kind, bounding range, and the pick points needed to target its faces and edges | ||
query_solid | Pro | |
| Revolve a planar profile about an axis to make a solid of revolution | ||
revolve_profile | Pro | |
| Sweep a closed planar profile along a path element to make a solid | ||
sweep_profile_along_path | Pro | |
Annotation and Dimensions
| Tool | Example prompt | Edition |
|---|---|---|
| Line existing notes up into a tidy column by moving each note's text to a common X, leaving every leader still pointing at its target | ||
align_notes | Pro | |
| Dimension the overall extents of an existing element | ||
dimension_element | Pro | |
| List the named dimension styles in the active file, with their note alignment settings | ||
list_dimension_styles | Free | |
| Place a dimension across a run of points | ||
place_dimension | Pro | |
| Place a note with a leader | ||
place_note | Pro | |
| Set the active dimension style by name, so later dimensions and notes inherit it | ||
set_active_dimension_style | Pro | |
Cells
| Tool | Example prompt | Edition |
|---|---|---|
| Attach a cell library file so its cells can be placed by name | ||
attach_cell_library | Pro | |
| Create a standard drawing symbol as an annotation cell in the ACTIVE file (open the cell library first): grid_bubble (circle + letter), north_point (circle + arrow + N), revision_triangle (triangle + number), level_marker (target + level text), callout (circle split by a bar: drawing number over sheet number), section_arrow (direction arrow + reference). Sizes in millimetres at 1:1; the cell scales with annotation scale on placement. Edit the text after placement, or replace it with tags (attach_tags) for scheduled values. | ||
create_annotation_cell | Pro | |
| Create a named cell in the ACTIVE file (open the cell library first). Geometry comes from a spec of lines, line strings, shapes, circles, arcs and text in master units where (0,0) is the cell origin, and/or from existing element ids in the active model (copied, with 'origin' becoming the cell origin). Set annotation true for sheet symbols so they scale with annotation scale. Saves the file. | ||
create_cell_definition | Pro | |
| Create a new cell library (.cel) from a 2D seed and open it as the active file so create_cell_definition and create_annotation_cell can write cells into it. Uses the workspace's 2D design seed when no seed_path is given. Put the folder on MS_CELL / MS_CELLLIST (write_config_file) so the workspace finds it. | ||
create_cell_library | Pro | |
| Delete a cell (its model) from the ACTIVE cell library file. Refuses to delete the active model. Saves the file. | ||
delete_cell_definition | Pro | |
| List the cells available in the attached cell library, with name and description, so a cell can then be placed by name with place_cell | ||
list_cells | Free | |
| Place a named cell from the attached cell library at explicit coordinates - the way a titleblock is stamped onto a sheet | ||
place_cell | Pro | |
Connectivity
| Tool | Example prompt | Edition |
|---|---|---|
| After inspecting the affected host state and confirming the uncertain operation has stopped, explicitly acknowledge its result to permit new work. Never automatically replay the operation. Requires the token returned by get_bridge_recovery after a successful inspection. | ||
acknowledge_bridge_recovery | Free | |
| Read the bridge recovery block and inspection requirements. Does not inspect the host or clear the block. | ||
get_bridge_recovery | Free | |
| Read MicroStation's Message Center: the errors, warnings, info and debug messages the session has shown, newest first, with details where present. Works with no design file open. Times are known only for messages written after the connector loaded; earlier entries have no time. Read-only. | ||
get_messages | Free | |
| Get information about the current MCP session: connector version and edition, MicroStation version, the active design file, how many tools this session offers, and the administrator policy in force (how many tools are switched off, whether an allow list is set, whether the audit log is on). Works with no design file open. Read-only. | ||
get_session_info | Free | |
| Check connectivity to the MicroStation MCP Connector | ||
ping | Free | |
Element Symbology
| Tool | Example prompt | Edition |
|---|---|---|
| Set the color of an element by color index (0-255) | ||
set_element_color | Pro | |
| Move an element to a different level | ||
set_element_level | Pro | |
| Set the line style of an element by style ID | ||
set_element_style | Pro | |
| Set the transparency of an element (0.0=opaque, 1.0=fully transparent) | ||
set_element_transparency | Pro | |
| Set the line weight of an element (0-31) | ||
set_element_weight | Pro | |
Elements and Selection
| Tool | Example prompt | Edition |
|---|---|---|
| Count elements in the ACTIVE MODEL, optionally filtered by level or type. 'total' is the answer to "how many elements are in this model"; 'counts' is a per-type breakdown for when the caller asked about a particular kind of element | ||
count_elements | Free | |
| Delete an element by its ElementId | ||
delete_element | Pro | |
| Find elements within a bounding box range | ||
find_elements_in_range | Free | |
| Get detailed information about a specific element by its ElementId | ||
get_element_info | Free | |
| Get all properties of an element: color, weight, line style, level, transparency | ||
get_element_properties | Free | |
| Get the bounding box (range) of a specific element | ||
get_element_range | Free | |
| Extract portable geometry from current MicroStation selection in master units | ||
get_selected_geometry | Free | |
| Get the number of elements currently selected in MicroStation | ||
get_selection_count | Free | |
| Read exact element geometry in world coordinates at full precision: by element ids, level, range, element type or the whole model. Lines and shapes come back as vertices; arcs and ellipses with centre, both radii, axis vectors, start and sweep; B-spline curves and surfaces with orders, poles, weights, knots, closed flags and trim boundaries; cells and shared cells with name, origin and matrix (a negative determinant is a mirrored instance) and their parts; swept surfaces and solids with their profile curves; solid and sheet bodies with volume, faces (plane, cylinder, cone, sphere, torus recognised with the fit residual stated), edge curves and vertices. An element that cannot be read still gets a row with the reason, and the reply carries unreadCount. Reads another DGN without opening it when file_path is given. A whole-model read is written to a JSON Lines file and the reply carries the counts and the path. | ||
read_geometry | Pro | |
| Return the outline of elements as straight lines, circular arcs (centre, radius, sweep) and conics, with the fit residual of every segment. Works on shapes, complex shapes and chains, B-spline curves, swept surfaces and solids (their profile and sweep), B-spline surfaces (their four edges) and one face of a solid body (give face, from read_geometry). Coordinates are rounded to the file's resolution unless round is false. A curve stored as a B-spline is decoded span by span and becomes an arc only when it is one to the tolerance; a true conic or ellipse is returned as such, never as the nearest arc. Reads another DGN without opening it when file_path is given. | ||
read_outline | Pro | |
| Scan for elements in the active MicroStation model with optional filters by level and element type | ||
scan_elements | Free | |
Fence
| Tool | Example prompt | Edition |
|---|---|---|
| Place a fence - a closed boundary that later operations act inside | ||
define_fence | Pro | |
| List the elements inside the currently placed fence, with a count by element type | ||
get_fence_contents | Free | |
| Remove the currently placed fence, so later operations act on the whole model again | ||
undefine_fence | Pro | |
Files and Models
| Tool | Example prompt | Edition |
|---|---|---|
| Convert many design files to DWG in one pass, writing each output into a target folder | ||
batch_save_as_dwg | Pro | |
| Compress the active design file to remove deleted-element space and unused data (the same operation as File > Compress) | ||
compress_design | Pro | |
| Create a new design file from a seed file | ||
create_design_file | Pro | |
| Create a model in the ACTIVE file - what the Create Model dialog does: type (design, drawing, sheet), 2D/3D, name, description, seed model (units and settings copied from an existing model in the file, default the active model), annotation scale (e.g. 100 for 1:100), and the cell flags (can be placed as a cell, as an annotation cell, graphic or point). Saves the file. For cells with geometry use create_cell_definition / create_annotation_cell instead. Note: a view group for the new model is created by MicroStation the first time it is opened in the UI. | ||
create_model | Pro | |
| Run the Data Cleanup utility on the active design file (Utilities > Data Cleanup): processes duplicate and overlapping elements according to the utility's current settings on this machine | ||
data_cleanup | Pro | |
| Report the stored format of design files (V7, V8, DWG, DXF) from their first bytes, without opening them. Use it before open_design_file to know whether a file is V7: a V7 file is opened read-only unless an upgrade is asked for. is3d is known from the header for V7 files only; for V8 it is null here and reported by inventory_dgn_folder. | ||
get_dgn_format | Free | |
| Get information about the active DGN file: file path and number of models | ||
get_file_info | Free | |
| Get information about the active model: name, description, 2D/3D type, and UOR unit conversion factors | ||
get_model_info | Free | |
| Inventory every design file under a folder without opening any of them: format (V7 or V8), 2D or 3D, size and date, each model with its element count, and each reference attachment with whether it is displayed and how many of its levels are hidden. Also returns the reference graph: which files attach which, the files that nothing in the folder attaches (they can still hold content), and attachments whose file was not found. A file that cannot be read is listed with the reason and counted in unreadCount. The active file is not changed. | ||
inventory_dgn_folder | Pro | |
| List all models in the active DGN file | ||
list_models | Free | |
| Open a design file (DGN or DWG), replacing the currently active file. All later tool calls operate on the newly opened file. A V7 file is opened read-only, as it is, with no prompt and no change to the file, unless v7 is set to upgrade. | ||
open_design_file | Pro | |
| Delete unused resources from the active design file: levels, fonts, line styles, dimension styles, and/or text styles | ||
purge_unused | Pro | |
| Write the active design file out as a DWG at the given path, using the current DWG save options | ||
save_as_dwg | Pro | |
| Save the active design file in place, committing pending changes to disk | ||
save_design_file | Pro | |
| Write the active design file to a new DGN path | ||
save_design_file_as | Pro | |
| Start an additional MicroStation session after the connected plug-in confirms Pro. Choose a WorkSpace and WorkSet, or use No WorkSpace and No WorkSet by default. Optionally open a design file, including read-only. Returns the new process ID; existing sessions are left open. First open MicroStation and activate Pro. | ||
start_microstation_session | Pro | |
Geometry Creation
| Tool | Example prompt | Edition |
|---|---|---|
| Create an arc element in MicroStation defined by center, radius, start angle, and sweep | ||
create_arc | Pro | |
| Create a B-spline curve from its definition: order, poles and, optionally, weights and the full knot vector. Poles are plain positions in master units (not multiplied by their weights). With no knots a clamped uniform knot vector is used. Read it back with read_geometry. | ||
create_bspline_curve | Pro | |
| Create a B-spline surface from its definition: both orders, a grid of poles given as poles[v][u] (rows along v, each row running along u), and optionally weights in the same grid, both full knot vectors and trim loops in the surface's own parameters. Poles are plain positions in master units. Read it back with read_geometry. | ||
create_bspline_surface | Pro | |
| Create a circle element in MicroStation | ||
create_circle | Pro | |
| Create an ellipse element in MicroStation | ||
create_ellipse | Pro | |
| Create a line element between two points in MicroStation | ||
create_line | Pro | |
| Create a line string (polyline) from a list of points in MicroStation | ||
create_line_string | Pro | |
| Create a closed shape (polygon) from points in MicroStation | ||
create_shape | Pro | |
| Place a text element in MicroStation | ||
create_text | Pro | |
Key-ins
| Tool | Example prompt | Edition |
|---|---|---|
| Run a MicroStation key-in command (escape hatch for ops without a dedicated tool) | ||
send_keyin | Pro | |
Levels
| Tool | Example prompt | Edition |
|---|---|---|
| Create a new level in the active model | ||
create_level | Pro | |
| Delete a level | ||
delete_level | Pro | |
| Count the number of elements on a specific level | ||
get_level_usage | Free | |
| List all levels in the active MicroStation model with name, number, usage, and display status | ||
list_levels | Free | |
| Rename a level by its current name | ||
rename_level | Pro | |
| Set the active level for new element placement | ||
set_active_level | Pro | |
| Turn level display on or off in bulk | ||
set_all_levels_display | Pro | |
| Show or hide a level in the active view | ||
set_level_display | Pro | |
Printing
| Tool | Example prompt | Edition |
|---|---|---|
| Read a print configuration (.pltcfg): driver, display label, every flat setting with its value, and the paper forms with sizes. Accepts a stock driver name (pdf, printer, pscript, png, tiff, ...) or a full path. Use it before write_pltcfg to see which settings a base offers, or to audit a workspace's drivers. | ||
inspect_pltcfg | Pro | |
| List the paper sizes a printer driver defines, with their dimensions in millimetres | ||
list_paper_sizes | Free | |
| Print a view, fence or sheet model to a PDF file at a chosen paper size | ||
print_to_pdf | Pro | |
| Author a print configuration (.pltcfg) by deriving from a base: a stock driver (pdf, pdfnongeo, printer, pscript, png, tiff, jpeg, cals, hpgl2, hpglrtl, interplot, markup_pdf) or any existing .pltcfg path. Sets the display label and comments, any flat setting by element name (e.g. RasterParametersGrayscale, PDFSearchableText, DefaultPenTableFileName, DefaultPrintFileName, ResolutionDotsPerUnit, AutoOpenPlotFile), and the paper forms: keep only named forms, and add custom forms with size and units. Put the file on MS_PLTCFG_PATH and name it in MS_DEFAULT_PLTCFG_FILE via write_config_file. Use inspect_pltcfg to see a base's settings first. | ||
write_pltcfg | Pro | |
References
| Tool | Example prompt | Edition |
|---|---|---|
| Attach a DGN or DWG file as a reference to the active model | ||
attach_reference | Pro | |
| Detach a reference from the active model by its logical name (or detach every reference with detach_all) | ||
detach_reference | Pro | |
| Get detailed information about a specific reference attachment | ||
get_reference_info | Free | |
| List all reference attachments in the active model with file path, logical name, and display status | ||
list_references | Free | |
| Reload all reference attachments from disk to pick up changes made to the referenced files | ||
reload_references | Pro | |
| Control reference live nesting. nest_depth 0 turns live nesting off (no nested references pulled in); a higher number allows that many levels of nesting | ||
set_reference_nesting | Pro | |
| Control reference override behaviour. level_overrides on/off toggles whether reference level symbology overrides are applied. nest_overrides never/allowed sets whether nested references may carry overrides (never = lock them out) | ||
set_reference_overrides | Pro | |
| Set the visible-edges (hidden-line) display mode for all references: 'wireframe' (off), 'cached' (computed and stored), or 'dynamic' (computed live) | ||
set_reference_visible_edges | Pro | |
| Show or hide a reference attachment | ||
toggle_reference_display | Pro | |
Ribbon and Automation
| Tool | Example prompt | Edition |
|---|---|---|
| Build a MicroStation VBA project (.mvba) from source: creates the project, adds each standard or class module with the given code, compiles it and saves it. The reply's phase is 'built' when that is done. If it is 'created' the empty project was only queued for loading: call again with the same arguments and overwrite true. Code that does not compile fails the call, with the compile error, the module and the line. Use it to ship workspace macros such as file-naming, title-block or batch tools, then wire them to ribbon buttons with a key-in like 'vba run [ProjectName]Module.Procedure'. Put the .mvba on MS_VBASEARCHDIRECTORIES so 'vba run' finds it. | ||
build_vba_project | Pro | |
| Report the state of VBA in this session: each loaded project with its mode (design, run or break), and the text and buttons of any error box the VBA editor has open. Call it after run_vba_macro to see whether the macro finished: a project in break mode, or an open error box, means it stopped on an error and reset_vba_project is needed before anything else will run. | ||
get_vba_state | Pro | |
| Import icon files into the ACTIVE file as named icons for ribbon buttons and tool boxes. Accepts .ico directly and converts .png / .bmp / .jpg / .gif to multi-size .ico (default 16, 24 and 32 px). The icon name is the file name without extension; use it as the icon in write_ribbon_xml. Open the GUI DGNLIB first (it must be on MS_GUIDGNLIBLIST or MS_ICONLIBRARYLIST for the ribbon to find the icons), then run this and it saves the file. | ||
import_icons | Pro | |
| List the ribbon definitions loaded from the workspace's GUI DGNLIBs, ribbon XML files and application resources: workflows with their tab collections, tabs with their groups, and groups with their items. Returns the internal Names that write_ribbon_xml needs to merge into an existing workflow or tab. Filter by substring to keep the answer small. | ||
list_ribbon_structure | Free | |
| Reload the ribbon from its definition sources (GUI DGNLIBs, MS_RIBBONXML files, application resources) so tabs, groups, buttons and icons added since start-up appear. Run after write_ribbon_xml + set_config_variable, or after import_icons. Reports whether MicroStation accepted the reload; if the new items still do not show, restart MicroStation. | ||
reload_ribbon | Pro | |
| Recover VBA after a macro stopped on an error: closes the VBA editor's error box if one is open (End, so the macro does not carry on) and resets the project so it leaves break mode. Whatever the macro changed before it stopped stays changed. Returns each project's mode afterwards. | ||
reset_vba_project | Pro | |
| Run a Python script in MicroStation's built-in Python (2024 and later) via the 'python' key-in, e.g. a script written with write_script_file that uses the MicroStation Python API. Asynchronous - pass wait_ms if a following tool depends on the result. Disabled by default; requires the MCP_CONNECTOR_ENABLE_COMMAND_EXEC=1 environment variable on the MicroStation machine. | ||
run_python_script | Pro | |
| Run a VBA procedure: loads the project if a path is given, then queues 'vba run [Project]Module.Procedure' and reports how it ended. A macro that stops on a compile or run-time error fails the call with VBA's own message; its error box is closed and the project reset, so the session is never left waiting on it. A macro may open other files, which changes the active file for later calls (the reply says so). Refused while a project is stopped in break mode or an error box is open: call reset_vba_project first. Disabled by default; requires the MCP_CONNECTOR_ENABLE_COMMAND_EXEC=1 environment variable on the MicroStation machine. | ||
run_vba_macro | Pro | |
| Find suitable existing MicroStation icons for a custom ribbon or GUI. Search by the button's purpose using a few keywords, such as 'place text', 'attach reference' or 'print'. Reads actual named icons from configured MicroStation RSC/GUI DGNLIB libraries, and matches ribbon tool labels and descriptions where available. Results are ranked keyword matches, not a guarantee of visual suitability: choose the best semantic match and pass its exact icon value to write_ribbon_xml. Try related keywords if there is no suitable match; never invent an icon name. Read-only. | ||
search_icons | Free | |
| Author a custom ribbon as a MicroStation ribbon XML file (tabs > groups > buttons, each button running a key-in, with optional drop-down menus and named icons). The file is validated against the install's RibbonDefinitions.xsd. Load it by adding MS_RIBBONXML > <file> to a cfg (write_config_file or set_config_variable), then reload_ribbon or restart. To add a tab to an EXISTING workflow pass tab_collection (find names with list_ribbon_structure); to add a group to an existing tab give the tab that name with match 'Merge'. Icons must be named icons: import them first with import_icons, or use search_icons with the button purpose to choose an existing icon. Copy the returned icon value exactly; never guess a stock icon name. | ||
write_ribbon_xml | Pro | |
| Write a text file into the workspace: Python scripts (.py), VBA source (.bas, .cls, .frm), key-in scripts (.txt), function-key menus (.mnu), ribbon or data XML, CSV level tables, JSON or Markdown notes. Creates the folder if needed. Pair with build_vba_project to compile VBA sources into an .mvba, and run_python_script to run Python. Refuses to overwrite unless overwrite is true. | ||
write_script_file | Pro | |
Saved Views
| Tool | Example prompt | Edition |
|---|---|---|
| Recall a saved view into one of the eight view windows, restoring its orientation, levels, clip volume, and reference settings | ||
apply_saved_view | Free | |
| List the saved views stored in the active design file with their names and descriptions | ||
list_saved_views | Free | |
| Create a saved view from one of the eight view windows, capturing its current orientation, levels, clip volume, and reference settings under a name that can be recalled later with apply_saved_view | ||
save_named_view | Pro | |
Solid Booleans and Feature Editing
| Tool | Example prompt | Edition |
|---|---|---|
| Bevel one edge of a solid | ||
chamfer_solid_edge | Pro | |
| Round off every edge bounding one face of a solid in a single operation | ||
fillet_face_edges | Pro | |
| Round off one or more edges of a solid to a given radius | ||
fillet_solid_edges | Pro | |
| Push or pull one face of a solid along its own normal, growing or shrinking the body | ||
offset_solid_face | Pro | |
| Delete one face of a solid, extending the surrounding faces to close the gap | ||
remove_solid_face | Pro | |
| Hollow a solid out, leaving walls of the given thickness | ||
shell_solid | Pro | |
| Keep only the volume shared by two or more solids | ||
solid_intersect | Pro | |
| Cut one or more solids out of a target solid | ||
solid_subtract | Pro | |
| Combine two or more solids into a single body | ||
solid_union | Pro | |
Standards and DGNLIB
| Tool | Example prompt | Edition |
|---|---|---|
| Activate an element template by path (from list_element_templates) so subsequent placement uses its level and symbology. Optionally applies it to the selected elements. | ||
activate_element_template | Pro | |
| Check if levels in the active model match a DGNLIB standards file | ||
check_level_standards | Pro | |
| Check text elements for standards compliance: minimum height, allowed fonts, and text styles | ||
check_text_standards | Pro | |
| Create a new DGNLIB (design library) file. Uses the workspace's personal DGNLIB seed when no seed_path is given. Opens it as the active file by default so create_level, create_text_style, create_dimension_style, create_element_template and import_icons write into it. Put the file on MS_DGNLIBLIST (or MS_GUIDGNLIBLIST for UI libraries) via write_config_file so the workspace loads it. | ||
create_dgnlib | Pro | |
| Create a dimension style in the active file (open the standards DGNLIB first): text style, text height, terminator, extension line offset/extension, unit format, accuracy (decimal places), text position, colour and weight. Replaces an existing style only when overwrite is true. Saves the file. Verify with list_dimension_styles. | ||
create_dimension_style | Pro | |
| Create an element template in the active file (open the standards DGNLIB first) at a slash-separated path such as 'Annotation/2mm Notes Left' - intermediate groups are created as needed. Sets the template's level, colour, weight, line style, text style, dimension style, cell name, element class, priority and transparency; each is optional. With overwrite, an existing template at that path is updated. Saves the file. This is the layer ribbon buttons target: a button key-in like 'TEMPLATE ACTIVATE Annotation/2mm Notes Left;PLACE TEXT' drives it. | ||
create_element_template | Pro | |
| Create a text style in the active file (open the standards DGNLIB first): font, height and width in master units, justification, colour, bold / italic / underline and line spacing. Replaces an existing style of the same name only when overwrite is true. Saves the file. Verify with list_text_styles. | ||
create_text_style | Pro | |
| Write the element templates defined in the ACTIVE file to an XML file - the same format the Customize dialog exports. Use it to audit a library as text, to copy templates between libraries with import_element_templates, or as a starting point for bulk edits. | ||
export_element_templates | Pro | |
| Generate a comprehensive CAD standards compliance report covering levels, text, symbology, and references | ||
generate_standards_report | Pro | |
| Import element templates from an XML file (as written by export_element_templates or the Customize dialog) into the ACTIVE file, optionally under an existing group. Names are kept unique. Saves the file. | ||
import_element_templates | Pro | |
| List the element templates available to the active file (its own plus every DGNLIB on MS_DGNLIBLIST) as slash-separated paths, grouped as in the Element Templates dialog, with the active template. Use the paths with activate_element_template and in ribbon button key-ins. | ||
list_element_templates | Free | |
| Find all levels in the active model that are NOT in the attached DGNLIB standards | ||
list_non_standard_levels | Pro | |
| List the text styles available in the active file (its own and those inherited from DGNLIBs): name, font, height and width in master units, justification, colour and emphasis flags. Use the names in create_dimension_style and create_element_template. | ||
list_text_styles | Free | |
| Update the active file's levels from the attached DGNLIB standards libraries (dgnlib update levels) | ||
sync_levels_from_dgnlib | Pro | |
Tags
| Tool | Example prompt | Edition |
|---|---|---|
| Attach tags from a tag set to an element in the active model, with values - e.g. put TitleBlock on the title block cell, or GRID on a grid bubble. Attaches every definition in the set unless 'tags' names a subset. Values are coerced to each definition's type; omitted ones take the definition default. Optional x/y places the tag text (master units); otherwise it sits at the element origin. | ||
attach_tags | Pro | |
| Create a tag set (attribute schema) in the ACTIVE file with its tag definitions: name, type (text, integer, short, double), prompt, default value, hidden and constant flags. Put it in the standards DGNLIB or cell library so title blocks, grid bubbles and revision symbols carry the same schema everywhere. Saves the file. | ||
create_tag_set | Pro | |
| Edit an existing tag set in the ACTIVE file: add definitions, update prompt / default / hidden / constant on existing ones, remove definitions, or delete the whole set. Tags already attached to elements keep their values; a removed definition leaves orphaned tags. Saves the file. | ||
edit_tag_set | Pro | |
| Read every tag (attribute) on an element: tag set name, tag name, current value and data type | ||
get_element_tags | Free | |
| List the tag set definitions in the active file with their member tag names, data types, prompts and default values - the schema behind set_element_tag | ||
list_tag_sets | Free | |
| Set the value of a tag (attribute) on an element and save it - how a titleblock drawing number, title, date or revision field gets updated | ||
set_element_tag | Pro | |
Transform and Modify
| Tool | Example prompt | Edition |
|---|---|---|
| Create a rectangular array of an element with specified rows, columns, and spacing | ||
array_element | Pro | |
| Copy an element with a translation offset | ||
copy_element | Pro | |
| Mirror an element across a line defined by two points | ||
mirror_element | Pro | |
| Move an element by a translation vector | ||
move_element | Pro | |
| Rotate an element around a center point by an angle in degrees (about the Z axis) | ||
rotate_element | Pro | |
| Scale an element uniformly from a center point | ||
scale_element | Pro | |
Views and Navigation
| Tool | Example prompt | Edition |
|---|---|---|
| Fit a view so every element is visible | ||
fit_view | Free | |
| Read the full state of a view: origin, extents and centre (master units), which standard orientation it is in, render mode, camera position/target/angle, and the display flags | ||
get_view_info | Free | |
| List the eight views with their open state, standard orientation, and display extents | ||
list_views | Free | |
| Position a view's perspective camera: eye position, target point, and either the camera angle in DEGREES or the focal length | ||
set_camera | Pro | |
| Change the display style of a view (or all 8 views) | ||
set_display_style | Pro | |
| Set a view's rendering mode: wireframe, hiddenline, solidfill, constantshade, smoothshade, phong, wiremesh, or crosssection | ||
set_render_mode | Pro | |
| Turn view display flags on or off - constructions, dimensions, text, text_nodes, fill, patterns, line_styles, line_weights, level_symbology, grid, tags, reference_boundaries, acs_triad, background_image, data_entry_regions | ||
set_view_display_flags | Pro | |
| Set a view to a standard orientation: top, bottom, front, back, left, right, or iso | ||
set_view_rotation | Free | |
| Force update (redraw) all open views | ||
update_views | Free | |
| Zoom a view to show a specific element | ||
zoom_to_element | Free | |
| Zoom a view by a factor | ||
zoom_view | Free | |
WorkSpace and WorkSet Configuration
| Tool | Example prompt | Edition |
|---|---|---|
| Associate a DGN with a WorkSet: stamp the WorkSpace/WorkSet identity and project properties into the file so it opens under that WorkSet without the 'not found' prompt. Works on the active file or on any DGN by path (opened, stamped, saved, closed without disturbing the active file), so a folder of migrated drawings can be re-pointed one call at a time. Defaults to the active WorkSet. | ||
assign_workset | Pro | |
| Scaffold a MicroStation CONNECT workspace on disk: WorkSpaces/<name>.cfg, the WorkSpace Standards folders (Cell, Data, Dgn, Dgnlib, Dgnlib/GUI, Macros, Materials, Pltcfg, Seed, Symb, Tables), a first WorkSet with its cfg, .dgnws and Dgn/Standards/Out folders, and optionally an Organization folder with standards.cfg. Every cfg is pre-wired for DGNLIB lists, GUI DGNLIBs, ribbon XML, icon libraries, cells, seeds, VBA and Python search paths. Also writes a WorkSpaceSetup.cfg to copy into the MicroStation config folder so the install points at the new root. Creates nothing that already exists unless overwrite is true. | ||
create_workspace | Pro | |
| Read a MicroStation configuration variable: whether it is defined, its raw value and the fully expanded value. Use it to check workspace wiring such as MS_DGNLIBLIST, MS_GUIDGNLIBLIST, MS_RIBBONXML, MS_CELL, MS_SEEDFILES or _USTN_*. | ||
get_config_variable | Free | |
| Report which WorkSpace and WorkSet a DGN is associated with (the association that makes MicroStation prompt when the file is opened elsewhere), plus the project properties stamped on it. Reads the active file, or any DGN by path without opening it in the UI. | ||
get_file_workset | Free | |
| Describe the active workspace: WorkSpace and WorkSet names, configuration roots (_USTN_ORGANIZATION, _USTN_WORKSPACEROOT, _USTN_WORKSETROOT, user prefs), the active workflow, the personal DGNLIB, and the resolved standards wiring (DGNLIB lists, GUI DGNLIBs, ribbon XML, icon libraries, cell and seed paths, VBA and Python search paths). Start here before authoring anything into a workspace. | ||
get_workspace_info | Free | |
| List the configuration variables of the active session with their expanded values. Filter by prefix (e.g. MS_DGNLIBLIST, _USTN_) or substring. The full session holds well over a thousand variables, so filter and page rather than dumping everything. | ||
list_config_variables | Free | |
| List the WorkSpaces under the active configuration and the WorkSets in each, with descriptions and cfg paths. Use the names with assign_workset. | ||
list_worksets | Free | |
| Define or override a configuration variable in the running session, e.g. point MS_RIBBONXML at a new ribbon file or add a DGNLIB folder. Session-only unless persist is true, which also writes it to the user's configuration file so it survives a restart. Workspace-wide wiring belongs in a cfg file: use write_config_file for that. | ||
set_config_variable | Pro | |
| Write a MicroStation configuration file (.cfg or .ucf) from structured entries, or append to an existing one. Each entry is variable + operator + value: = sets, > appends a path to a list, < prepends, : sets only if undefined. Values may use $(VAR) references such as $(_USTN_ORGANIZATION)dgnlib/*.dgnlib. raw_lines lets you add %if / %include blocks verbatim. Use it for standards.cfg, WorkSpace and WorkSet cfgs, and to wire MS_DGNLIBLIST, MS_GUIDGNLIBLIST, MS_RIBBONXML, MS_ADDINPATH or MS_VBASEARCHDIRECTORIES. | ||
write_config_file | Pro | |
Troubleshooting
The AI says it is not connected to MicroStation
- MicroStation must be running with a design file open. Open the first session yourself. Pro can then start an additional session with
start_microstation_session. - In MicroStation, run
MCPCONNECTOR STATUSto check the plug-in state. If it reports not running, runMCPCONNECTOR START. - Ask your AI to run the
pingtool. It reports whether the link is up and, if not, why.
The plug-in did not load
- The plug-in auto-loads when MicroStation starts. If the AUTOM8LABS ribbon is missing, restart MicroStation, then run
MCPCONNECTOR STARTat the command line. - Confirm the bundle exists at
C:\ProgramData\AUTOM8LABS\MCPConnectorMicroStation. If it is missing, re-run the installer. - Check that your MicroStation release is between 2023 and 2026.
Pro tools are missing after activating
- With MicroStation running, the Bridge reads the edition from the connected plug-in. Reconnect your AI client and start a new conversation to refresh any cached tool list after activation. Administrator permissions may also restrict which tools appear.
- Confirm the licence state in MicroStation via Manage Licence on the AUTOM8LABS ribbon.
The AI client does not list the server
- Restart the client completely after installing; a window reload is not always enough.
- For clients other than Claude Desktop and Cursor, add the manual configuration yourself.
send_keyin is not available
- Raw key-in execution requires Pro and is off by default. Create the Windows user environment variable
MCP_CONNECTOR_ENABLE_COMMAND_EXECwith value1, then restart MicroStation. Check any administrator tool restrictions. See raw command execution setup.
FAQ
MCPCONNECTOR LICENCE command, then restart your AI client.
MCP_CONNECTOR_ENABLE_COMMAND_EXEC=1. Restart MicroStation after setting it. Setting it only in the AI client configuration does not enable execution in the plug-in. Administrator policies can restrict these tools further. See raw command execution setup.
Changelog
- Administrator permissions and audit logging. Adds machine-wide native tool restrictions, CSV audit logging and optional explanations, with setup instructions and a downloadable browser dashboard and Power BI report.
- Geometry and file workflows. Includes exact geometry and outline readers, B-spline creation, DGN format detection, safe V7 handling, folder inventory and VBA compile/state checks that were missing from the 1.1.1 package.
- Live discovery retained. The running plug-in supplies the edition and policy-filtered tool list. A stale manifest cannot hide licensed tools, and native execution still checks the licence.
- Additional sessions. The session launcher requires a connected Pro plug-in before starting another MicroStation session.
- Live licence discovery. The Bridge gets tool availability from the running plug-in, so a stale Free manifest no longer hides tools from a licensed Pro session. The local manifest remains the fallback when the host cannot be reached.
- Licence enforcement. Improved consistency when licence state changes. Paid operations still require entitlement in the native plug-in; tool discovery does not grant it. Existing signed offline allowances remain supported.