bizagi-modeler
Click on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@bizagi-modelerGenerate a BPMN diagram for our invoice approval process and preview it"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
bizagi-mcp
Turn a description of a process into a BPMN 2.0 diagram that opens cleanly in Bizagi Modeler.
An MCP server that generates, reads, audits and previews BPMN 2.0 diagrams — and drives the Bizagi Modeler desktop app on Windows.

Generated from a 60-line JSON spec. Every coordinate above was computed, not placed by hand.
Why this exists
Bizagi Modeler has no scripting API. The one integration path it does support is the open BPMN 2.0 XML format, through its Export / Import tab.
But there is a catch that makes naive generation useless: Bizagi imports the coordinates written in the file verbatim. It does not lay out a diagram for you. Emit a structurally perfect BPMN file without geometry and it opens as a pile of boxes stacked on the origin.
So the hard part of this server is not the XML. It is the layout.
Related MCP server: camunda-mcp
What it does
Tool | What it does |
| The spec format: every node type, field and rule |
| Description → a |
| Edit an existing |
| Parse a |
| Scan a folder and summarise each BPMN file |
| Audit against BPMN 2.0 rules and modelling conventions, with a fix for each finding |
| Render to SVG — check the result without opening Bizagi |
| Process documentation as Markdown (outline + audit) |
| Whether Bizagi Modeler can be driven from here |
| Launch Bizagi Modeler, optionally with a file |
| Drive Export / Import ▸ BPMN, and verify that it landed |
| Drive Export ▸ BPMN for the open diagram |
The first eight are pure Python and run on any OS, with or without Bizagi installed.
Only the four bizagi_* tools need Windows.
The layout engine
A lane-aware layered layout, in the order it runs:
Break cycles so the graph can be layered at all
Longest-path layering → each node's horizontal column
Barycenter ordering per (column, lane) → fewer crossing lines
Adaptive lane heights, sized to the tallest cell each band holds
Reserved strips — a bypass band along the top of any lane carrying a column-skipping branch, and a channel strip at the bottom for loop-backs
Orthogonal routing that goes around obstacles rather than through them
Label separation as a final pass
What it guarantees
These are not aspirations. Each one is a test that fails when the rule is removed:
No two shapes overlap
No edge is drawn through a shape that is not its own endpoint
Every element sits inside its pool
Message flows run in the empty corridor between pools, never horizontally through one
Each message flow gets its own line in that corridor, and the corridor is sized from how many flows cross it — so their labels do not stack
Loop-backs each get their own channel in a strip reserved while lanes are sized
A branch that skips columns detours inside its own lane, over the activities it skips
A gateway's branches leave from visibly different points, so a two-way split does not read as a single arrow
Boundary-event flows leave downwards, never back up through the host activity
Annotations and data stores sit beside what they describe — or, when they have no association, inside the pool they declare rather than off the canvas
No label is written over another label or over a shape
Design notes
A few decisions that are easy to get wrong:
A label is as wide as its text. Reserving a flat box for every label makes collisions between the long ones invisible to anything that measures the reserved box.
Reserved space must be held out of centring. Grow a lane to make room for a channel and then centre the shapes in it, and half the new space is handed back as padding above — the channel ends up too thin to use.
A detour belongs in the gaps between shapes, not around all of them. Routing over or under everything lands the line outside the pool, and the verticals that reach it then cross every lane on the way.
A data store can be associated with many activities but sits beside one. Placing it once per association leaves holes in the lanes where the earlier placements were.
Install
pip install -e .For the Windows desktop tools:
pip install -e ".[desktop]"Python ≥ 3.10.
Register with Claude
claude_desktop_config.json (Windows: %APPDATA%\Claude\claude_desktop_config.json):
{
"mcpServers": {
"bizagi-modeler": {
"command": "bizagi-mcp",
"env": {
"BIZAGI_MCP_ROOT": "C:\\Users\\you\\Documents\\Bizagi"
}
}
}
}If bizagi-mcp is not on PATH:
{
"mcpServers": {
"bizagi-modeler": {
"command": "python",
"args": ["-m", "bizagi_mcp.server"],
"env": { "BIZAGI_MCP_ROOT": "C:\\Users\\you\\Documents\\Bizagi" }
}
}
}For Claude Code: claude mcp add bizagi-modeler -- bizagi-mcp
Environment variables
Variable | What it does |
| Confine every file read and write to this folder. Strongly recommended. |
| Full path to |
Usage
Generate a diagram
"Model a leave request: the employee submits it, the manager approves or rejects it, HR records the outcome. Save it to
D:\Processes\leave.bpmn."
Then in Bizagi Modeler: Export / Import ▸ Import ▸ BPMN.
Analyse an existing model
Export from Bizagi first (Export / Import ▸ Export ▸ BPMN), then:
"Read
D:\Processes\purchasing.bpmn, walk me through it, and tell me what is wrong with it."
Example
See examples/purchase_request.json (the spec), .bpmn (generated) and .svg (preview).
Validation rules
Structure (BPMN001–BPMN020, severity error / warning)
Missing start or end events · unreachable elements · dead ends · sequence flows crossing pools · message flows inside one pool · gateways branching without conditions · event-based gateway targets · implicit split and merge · boundary events on non-activities · duplicate ids · a default flow that also carries a condition · one-in-one-out gateways.
Conventions (BP001–BP017, severity warning / info)
Activity naming (verb + object) · gateways not phrased as questions · unlabelled branches · documentation coverage · pools without lanes · empty lanes · diagram size · duplicate names · pools that never exchange messages.
Every finding names the offending element and the concrete step to fix it.
Driving the desktop app
bizagi_open is the dependable path: Modeler takes a file as a command line argument,
so no menu has to be driven.
bizagi_import_bpmn drives the ribbon, and is honest about it:
It claims the foreground and verifies it got there. Windows refuses
SetForegroundWindowto a process that does not own the foreground, andset_focus()returns as if it worked — clicking on regardless sends a real mouse click into whatever the user is working in.It counts diagram tabs before and after, and reports
imported: true/falsefrom that evidence rather than from hope.Both counts are taken with the window raised, because a window that is behind can hand back an incomplete accessibility tree.
There is no background mode
Import cannot run while the machine is used for something else. Three routes were tested against Modeler 4.3.0.008 and all three are closed:
Route | Result |
UI Automation | Ribbon tabs expose no patterns at all |
| Ignored, across every candidate window handle |
| Exits 0 without importing anything |
The ribbon only responds to real mouse input on a focused window. For unattended runs, give Bizagi its own Windows session or VM. If you want that recorded so nobody retries it: this table is the record.
Security
Paths are fully resolved (
~,.., symlinks) before being checked, then confined toBIZAGI_MCP_ROOTwhen it is setXML parsing goes through
defusedxmlwhen available (XXE, billion laughs)Files are never overwritten without
overwrite=trueBizagi is launched with an argument list and no shell, so a filename can never become a command
Every error comes back as data (
{"ok": false, ...}), never a traceback
Tests
pip install -e ".[dev]"
pytest -q72 tests: spec normalisation, XSD element ordering, BPMNDI completeness, every layout guarantee listed above, label collisions, round-trips, each validation rule, path traversal, ribbon button selection, foreground verification, and the error contract of every tool.
Known limitations
.bpmis not read. It is Bizagi's proprietary format; export to BPMN first.list_processesstill lists.bpmfiles and flags them.Desktop control is Windows-only and needs
pywinauto.Diagrams are generated one level deep. A sub-process appears as a collapsed shape; its contents are not generated.
Layout tidiness is guaranteed for the geometry written to the file. Bizagi places node names by its own rules, which the diagram interchange section does not control.
License
MIT — see LICENSE.
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Servers
- FlicenseBqualityDmaintenanceEnables AI agents to create, manipulate, and manage BPMN 2.0 diagrams programmatically, with support for Mermaid conversion, auto-layout, and file persistence.249
- AlicenseNot gradedqualityCmaintenanceMCP server for modeling Camunda 7 BPMN diagrams programmatically, including elements, flows, and Camunda extensions.MIT
- FlicenseNot gradedqualityFmaintenanceEnables AI-driven graphical diagram creation and manipulation using natural language, with support for BPMN workflows, analysis, and manual editing via the Model Context Protocol.1
- AlicenseNot gradedqualityFmaintenanceEnables to create and edit Microsoft Visio diagrams programmatically via a standardized API.86MIT
Related MCP Connectors
Create, validate, convert & extract compliant e-invoices (UBL, Factur-X, ZUGFeRD, XRechnung)
Generate cloud architecture diagrams, flowcharts, and sequence diagrams.
Convert Revit files to XKT, IFC, or DWG and query BIM data via natural language.
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/harezadmm/bizagi-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server