Skip to main content
Glama
harezadmm
by harezadmm

bizagi-mcp

将流程描述转换为可在 Bizagi Modeler 中干净打开的 BPMN 2.0 图。

一个 MCP 服务器,用于生成、读取、审计和预览 BPMN 2.0 图,并驱动 Windows 上的 Bizagi Modeler 桌面应用。

An auto-laid-out purchase request process

由一份 60 行的 JSON 规范生成。上面的每个坐标都是计算出来的,而非手工放置。


为什么存在

Bizagi Modeler 没有脚本 API。它支持的唯一集成路径是通过其 Export / Import 选项卡使用开放的 BPMN 2.0 XML 格式。

但有一个让朴素生成变得无用的陷阱:Bizagi 会原样导入文件中写入的坐标。 它不会为你自动布局。如果生成一个结构完美但没有几何信息的 BPMN 文件,打开后就会是一堆堆叠在原点的方框。

因此,这个服务器的难点不在于 XML,而在于布局。


Related MCP server: camunda-mcp

它能做什么

工具

作用

get_spec_reference

规范格式:每种节点类型、字段和规则

create_process

描述 → 一个可导入的 .bpmn 文件,坐标已计算

update_process

编辑现有的 .bpmn(添加/更改/删除节点和流),并重新布局

read_process

解析 .bpmn → 结构化 JSON、可读的逐步讲解或可编辑的规范

list_processes

扫描文件夹并汇总每个 BPMN 文件

validate_process

根据 BPMN 2.0 规则和建模约定进行审计,并为每个发现提供修复建议

render_preview

渲染为 SVG — 无需打开 Bizagi 即可检查结果

export_documentation

将流程文档导出为 Markdown(大纲 + 审计)

bizagi_status

Bizagi Modeler 是否可以从这里被驱动

bizagi_open

启动 Bizagi Modeler,可选择附带一个文件

bizagi_import_bpmn

驱动 Export / Import ▸ BPMN,并验证导入是否成功

bizagi_export_bpmn

为打开的图驱动 Export ▸ BPMN

前八个是纯 Python 实现,可在任何操作系统上运行,无论是否安装 Bizagi。只有四个 bizagi_* 工具需要 Windows。


布局引擎

一个感知泳道的分层布局,按运行顺序如下:

  1. 打破循环,使图能够分层

  2. 最长路径分层 → 每个节点的水平列

  3. 按(列,泳道)进行重心排序 → 减少交叉线

  4. 自适应泳道高度,根据每个带区中最高的单元格调整大小

  5. 预留条带 — 沿任何承载跨列分支的泳道顶部设置一条旁路带,底部为回环设置一条通道带

  6. 正交布线绕过障碍物而非穿过它们

  7. 标签分离作为最后一步

它保证什么

这些不是空想。每一条都是一项测试,当规则被移除时测试就会失败:

  • 没有两个形状重叠

  • 没有边穿过非其端点的形状

  • 每个元素都位于其泳池内

  • 消息流在泳池之间的空走廊中运行,绝不会水平穿过某个泳池

  • 每条消息流在走廊中都有自己的线路,走廊的大小根据穿过它的流的数量而定——因此它们的标签不会堆叠

  • 回环在预留的条带中各自拥有自己的通道,该条带在泳道尺寸确定时预留

  • 跨列分支在自己的泳道内绕行,越过它所跳过的活动

  • 网关的分支从明显不同的点离开,因此双向分叉不会看起来像单个箭头

  • 边界事件流向下离开,绝不会向上穿过宿主活动

  • 注释和数据存储位于它们所描述内容的旁边——或者,当它们没有关联时,位于它们声明的泳池内,而不是画布之外

  • 没有标签被写在另一个标签或形状之上

设计说明

几个容易出错的决策:

  • 标签的宽度与其文本相同。 为每个标签预留一个扁平框,会使长标签之间的碰撞对任何测量预留框的东西都不可见。

  • 预留空间必须排除在居中之外。 加宽泳道为通道腾出空间,然后将其中的形状居中,一半的新空间就会作为上方内边距被还回去——通道最终会太窄而无法使用。

  • 绕行应位于形状之间的间隙中,而不是绕过所有形状。 从所有内容的上方或下方布线会使线条落在泳池之外,而到达该线条的垂直线会在途中穿过每个泳道。

  • 数据存储可以与许多活动关联,但只位于一个活动旁边。 每次关联都放置一次,会在之前放置的位置留下空洞。


安装

pip install -e .

对于 Windows 桌面工具:

pip install -e ".[desktop]"

Python ≥ 3.10。

注册到 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"
      }
    }
  }
}

如果 bizagi-mcp 不在 PATH 中:

{
  "mcpServers": {
    "bizagi-modeler": {
      "command": "python",
      "args": ["-m", "bizagi_mcp.server"],
      "env": { "BIZAGI_MCP_ROOT": "C:\\Users\\you\\Documents\\Bizagi" }
    }
  }
}

对于 Claude Code:claude mcp add bizagi-modeler -- bizagi-mcp

环境变量

变量

作用

BIZAGI_MCP_ROOT

将所有文件读写限制在此文件夹内。强烈推荐。

BIZAGI_MODELER_PATH

当未自动找到 BizagiModeler.exeBizAgiMC.exe 时,提供其完整路径


用法

生成图

“为请假请求建模:员工提交申请,经理批准或拒绝,HR 记录结果。将其保存到 D:\Processes\leave.bpmn。”

然后在 Bizagi Modeler 中:Export / Import ▸ Import ▸ BPMN

分析现有模型

先从 Bizagi 导出(Export / Import ▸ Export ▸ BPMN),然后:

“读取 D:\Processes\purchasing.bpmn,带我逐步了解它,并告诉我它有什么问题。”

示例

参见 examples/purchase_request.json(规范)、.bpmn(生成结果)和 .svg(预览)。


验证规则

结构BPMN001BPMN020,严重级别 error / warning

缺少开始或结束事件 · 不可达元素 · 死端 · 跨泳池的序列流 · 单个泳池内的消息流 · 无条件的网关分支 · 基于事件的网关目标 · 隐式拆分与合并 · 非活动上的边界事件 · 重复的 id · 同时带有条件的默认流 · 一进一出网关。

约定BP001BP017,严重级别 warning / info

活动命名(动词 + 宾语)· 网关未以问题形式表述 · 未标记的分支 · 文档覆盖 · 没有泳道的泳池 · 空泳道 · 图大小 · 重复名称 · 从不交换消息的泳池。

每一条发现都会指出违规元素以及具体的修复步骤。


驱动桌面应用

bizagi_open 是可靠的方式:Modeler 接受文件作为命令行参数,因此无需驱动任何菜单。

bizagi_import_bpmn 驱动功能区,并且对此坦诚相告:

  • 它会抢占前台并验证确实获得了前台。Windows 会拒绝将 SetForegroundWindow 授予不拥有前台的进程,而 set_focus() 会像成功一样返回——无论如何点击,都会向用户正在处理的内容发送真实的鼠标点击。

  • 它会在前后统计图表选项卡的数量,并根据这一证据报告 imported: true / false,而不是凭希望。

  • 两次统计都在窗口置顶时进行,因为位于后面的窗口可能返回不完整的辅助功能树。

没有后台模式

导入无法在机器被用于其他事情时运行。针对 Modeler 4.3.0.008 测试了三种途径,三种都行不通:

途径

结果

UI Automation Invoke 模式

功能区选项卡完全不暴露任何模式

PostMessage 鼠标消息

被忽略,所有候选窗口句柄均如此

BizAgiMC.exe file.bpmn

退出码为 0,但未导入任何内容

功能区只响应聚焦窗口上的真实鼠标输入。对于无人值守运行,请为 Bizagi 提供独立的 Windows 会话或虚拟机。如果你希望这一点被记录下来以免有人重试:这张表就是记录。


安全

  • 路径在检查之前会被完全解析(~..、符号链接),然后在设置了 BIZAGI_MCP_ROOT 时被限制在该目录内

  • XML 解析在可用时通过 defusedxml 进行(XXE、billion laughs)

  • 没有 overwrite=true 时绝不覆盖文件

  • Bizagi 通过参数列表启动,不使用 shell,因此文件名永远不会变成命令

  • 每个错误都以数据形式返回({"ok": false, ...}),绝不会是 traceback


测试

pip install -e ".[dev]"
pytest -q

72 项测试:规范标准化、XSD 元素顺序、BPMNDI 完整性、上文列出的每一条布局保证、标签碰撞、往返转换、每条验证规则、路径遍历、功能区按钮选择、前台验证,以及每个工具的错误契约。


已知限制

  • 不读取 .bpm 它是 Bizagi 的专有格式;请先导出为 BPMN。list_processes 仍会列出 .bpm 文件并标记它们。

  • 桌面控制仅限 Windows,并且需要 pywinauto

  • 图只生成一层深度。 子流程显示为折叠形状;其内容不会生成。

  • 布局整洁性仅对写入文件的几何信息有保证。 Bizagi 按照自己的规则放置节点名称,而图交换部分无法控制这一点。

许可证

MIT — 参见 LICENSE

Install Server
A
license - permissive license
A
quality
C
maintenance

Maintenance

Maintainers
Response time
Release cycle
Releases (12mo)
Commit activity

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

View all related MCP servers

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.

View all MCP Connectors

Latest Blog Posts

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