mcpField
D
drawio-diagram

drawio-diagram

github.com/automateyournetwork设计与 UI68861 次安装4 天前更新
代码仓库

关于 drawio-diagram

用于将网络图生成为 Draw.io 原生文件或在浏览器编辑器中打开的技能,面向需要可编辑图表、导出文件或预览链接的网络工程师。

主要功能

  1. 01生成原生 .drawio 文件
  2. 02导出 PNG、SVG 和 PDF
  3. 03在浏览器编辑器中打开图表
  4. 04支持 Mermaid、XML 和 CSV 输入
  5. 05在导出文件中嵌入图表 XML

适用场景

  1. 01绘制物理或逻辑网络拓扑
  2. 02导出图表用于文档
  3. 03从 CSV 预览设备清单图
  4. 04分享可在浏览器编辑的图表链接

MCP 相关

通过 `@drawio/mcp` MCP 服务在 Draw.io 浏览器编辑器中打开图表。服务接收 Mermaid、XML 或 CSV 内容并返回图表 URL。

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/automateyournetwork/netclaw --skill drawio-diagram

安装后在 Claude Code 中输入/drawio-diagram确认已加载。

详细介绍

Draw.io 网络图

使用以下两种方式生成网络图:

  1. 原生文件模式 — 在磁盘上生成 .drawio XML 文件,可选通过 draw.io 桌面版 CLI(官方 jgraph skill-cli)导出为 PNG/SVG/PDF
  2. 浏览器模式 — 通过 @drawio/mcp MCP 服务,在 Draw.io 浏览器编辑器中打开图表(输入格式可以是 Mermaid、XML 或 CSV)

安装说明:原生注册和文档中所述的 MCP_CALL 调用共用已安装的组件启动器。首次使用前,请检查 readiness.json;发现失败不代表设备状态有问题。现有的写入审批仍然适用。

模式 1:生成原生文件(官方 Skill-CLI)

直接生成原生 .drawio 文件。还可选择导出为 PNG、SVG 或 PDF,并在文件中嵌入图表 XML(这样导出的文件在 draw.io 中仍可编辑)。

如何创建图表
  1. 生成 draw.io XML,使用 mxGraphModel 格式表示所需图表
  2. 使用 Write 工具将 XML 写入当前工作目录中的 .drawio 文件
  3. 如果用户要求导出格式(png、svg、pdf),使用 draw.io CLI 和 --embed-diagram 导出,然后删除源 .drawio 文件
  4. 打开结果 — 如果已导出,则打开导出的文件;否则打开 .drawio 文件
选择输出格式

查看用户的请求,确认其格式偏好:

  • /drawio create a flowchart → flowchart.drawio
  • /drawio png flowchart for login → login-flow.drawio.png
  • /drawio svg: ER diagram → er-diagram.drawio.svg
  • /drawio pdf architecture overview → architecture-overview.drawio.pdf

如果未提及格式,则写入 .drawio 文件并打开。用户之后可以要求导出。

支持的导出格式
格式嵌入 XML备注
png是(-e)随处可查看,可在 draw.io 中编辑
svg是(-e)可缩放,可在 draw.io 中编辑
pdf是(-e)可打印,可在 draw.io 中编辑
jpg否有损格式,不支持嵌入 XML

PNG、SVG 和 PDF 均支持 --embed-diagram — 导出的文件包含完整的图表 XML,因此在 draw.io 中打开后可恢复可编辑的图表。

draw.io CLI

draw.io 桌面应用包含用于导出的命令行界面。

查找 CLI

先尝试 drawio(如果已在 PATH 中则可用),然后再使用特定于平台的路径:

  • macOS:/Applications/draw.io.app/Contents/MacOS/draw.io
  • Linux:drawio(通常通过 snap/apt/flatpak 安装在 PATH 中)
  • Windows:"C:\Program Files\draw.io\draw.io.exe"

回退到其他路径之前,使用 which drawio(Windows 上使用 where drawio)检查它是否在 PATH 中。

导出命令
drawio -x -f <format> -e -b 10 -o <output> <input.drawio>

关键标志:

  • -x / --export:导出模式
  • -f / --format:输出格式(png、svg、pdf、jpg)
  • -e / --embed-diagram:在输出文件中嵌入图表 XML(仅 PNG、SVG、PDF)
  • -o / --output:输出文件路径
  • -b / --border:图表周围的边框宽度(默认值:0)
  • -t / --transparent:透明背景(仅 PNG)
  • -s / --scale:缩放图表尺寸
  • --width / --height:适配到指定尺寸(保持纵横比)
  • -a / --all-pages:导出所有页面(仅 PDF)
  • -p / --page-index:选择特定页面(从 1 开始计数)
打开结果
  • macOS:open <file>
  • Linux:xdg-open <file>
  • Windows:start <file>
文件命名
  • 根据图表内容使用描述性文件名(例如 login-flow、database-schema)
  • 多词名称使用小写字母并以连字符分隔
  • 导出时使用双重扩展名:name.drawio.png、name.drawio.svg、name.drawio.pdf — 这表示文件包含嵌入的图表 XML
  • 导出成功后,删除中间的 .drawio 文件 — 导出的文件已包含完整图表

模式 2:通过 MCP 服务使用浏览器编辑器

通过 @drawio/mcp MCP 服务,直接在 Draw.io 浏览器编辑器中打开图表。支持三种输入格式。

Mermaid 图表(最适合快速绘制拓扑图)
python3 $MCP_CALL "npx -y @drawio/mcp" open_drawio_mermaid '{"content":"graph TD\n  A --> B"}'
XML 图表(最适合绘制定位精确、样式丰富的详细图表)
python3 $MCP_CALL "npx -y @drawio/mcp" open_drawio_xml '{"content":"<mxGraphModel>...</mxGraphModel>"}'
CSV 图表(最适合绘制设备清单)
python3 $MCP_CALL "npx -y @drawio/mcp" open_drawio_csv '{"content":"## label: %name%\nname,refs\nA,B\nB,C"}'

这 3 种工具都接受可选参数 "lightbox": true,用于只读视图;以及 "dark": "auto"|"true"|"false",用于深色模式。

工具会返回一个 Draw.io URL。直接分享即可——图表会在浏览器编辑器中打开,可在其中编辑、导出或保存。


XML 格式参考

.drawio 文件是原生 mxGraphModel XML。始终直接生成 XML——Mermaid 和 CSV 格式需要在服务端转换,且无法保存为原生文件。

基本结构

每个图表都必须采用以下结构:

<mxGraphModel>
  <root>
    <mxCell id="0"/>
    <mxCell id="1" parent="0"/>
    
  </root>
</mxGraphModel>
  • 单元格 id="0" 是根图层
  • 单元格 id="1" 是默认父图层
  • 除非使用多个图层,否则所有图表元素都使用 parent="1"
常用样式

圆角矩形:

<mxCell id="2" value="Label" style="rounded=1;whiteSpace=wrap;" vertex="1" parent="1">
  <mxGeometry x="100" y="100" width="120" height="60" as="geometry"/>
</mxCell>

菱形(决策):

<mxCell id="3" value="Condition?" style="rhombus;whiteSpace=wrap;" vertex="1" parent="1">
  <mxGeometry x="100" y="200" width="120" height="80" as="geometry"/>
</mxCell>

箭头(边):

<mxCell id="4" value="" style="edgeStyle=orthogonalEdgeStyle;" edge="1" source="2" target="3" parent="1">
  <mxGeometry relative="1" as="geometry"/>
</mxCell>

带标签的箭头:

<mxCell id="5" value="Yes" style="edgeStyle=orthogonalEdgeStyle;" edge="1" source="3" target="6" parent="1">
  <mxGeometry relative="1" as="geometry"/>
</mxCell>
实用样式属性
属性值用途
rounded=10 或 1圆角
whiteSpace=wrapwrap文本换行
fillColor=#dae8fc十六进制颜色背景颜色
strokeColor=#6c8ebf十六进制颜色边框颜色
fontColor=#333333十六进制颜色文本颜色
shape=cylinder3形状名称数据库圆柱体
shape=mxgraph.flowchart.document形状名称文档形状
ellipse样式关键字圆形/椭圆
rhombus样式关键字菱形
edgeStyle=orthogonalEdgeStyle样式关键字直角连接线
edgeStyle=elbowEdgeStyle样式关键字肘形连接线
dashed=10 或 1虚线
swimlane样式关键字泳道容器

网络工程图表类型

1. 物理拓扑图

显示设备、物理链路、接口名称、IP 地址和链路速度。

python3 $MCP_CALL "npx -y @drawio/mcp" open_drawio_mermaid '{"content":"graph TD\n  R1[\"R1\\nCore Router\\n10.255.255.1\"]\n  R2[\"R2\\nCore Router\\n10.255.255.2\"]\n  SW1[\"SW1\\nDist Switch\\n10.255.255.3\"]\n  R1 -->|\"Gi0/0 -- Gi0/0\\n10.1.1.0/30\"| R2\n  R1 -->|\"Gi0/1 -- Gi0/1\\n10.1.2.0/30\"| SW1\n  R2 -->|\"Gi0/1 -- Gi0/1\\n10.1.3.0/30\"| SW1"}'
2. 逻辑拓扑图

显示路由协议关系、区域、AS 编号和 VRF。

python3 $MCP_CALL "npx -y @drawio/mcp" open_drawio_mermaid '{"content":"graph TD\n  subgraph \"OSPF Area 0\"\n    R1[\"R1 ABR\"]\n    R2[\"R2 ABR\"]\n  end\n  subgraph \"OSPF Area 1\"\n    R3[\"R3\"]\n  end\n  R1 --- R2\n  R1 --- R3"}'
3. 安全区域图

显示防火墙、DMZ、信任边界和 ACL 强制执行点。

python3 $MCP_CALL "npx -y @drawio/mcp" open_drawio_mermaid '{"content":"graph LR\n  subgraph \"Untrusted\"\n    INET((Internet))\n  end\n  subgraph \"DMZ\"\n    WEB[\"Web Server\"]\n  end\n  subgraph \"Trusted\"\n    CORE[\"Core Switch\"]\n  end\n  INET --> FW[\"Firewall\"]\n  FW --> WEB\n  FW --> CORE"}'

重要:XML 格式正确性

  • 切勿在 XML 注释中使用双连字符(--)。 根据 XML 规范,`` 内的 -- 属于非法内容,会导致解析错误。请使用单连字符或改写措辞。
  • 对属性值中的特殊字符进行转义:&amp;、&lt;、&gt;、&quot;
  • 始终为每个 mxCell 使用唯一的 id 值

何时使用各模式

场景模式原因
生成用于版本控制的 .drawio 文件原生文件在磁盘上生成实际文件
导出 PNG/SVG/PDF 用于文档原生文件使用 CLI 导出并嵌入 XML
根据发现数据快速预览拓扑浏览器在浏览器中即时可视化
基于 CSV 的清单图表浏览器只有通过 MCP 才能使用 CSV 格式
Mermaid 语法图表浏览器只有通过 MCP 才能转换 Mermaid
离线/隔离网络环境原生文件无需网络
分享图表链接浏览器返回可分享的 URL

与其他技能集成

  • 使用 pyats-topology 发现网络,然后根据数据生成图表
  • 使用 netbox-reconcile 根据协调状态(已记录/未记录/缺失)为链路着色
  • 使用 markmap-viz 绘制层次视图,并使用 Draw.io 绘制拓扑视图
  • 使用 aci-fabric-audit 数据生成 ACI 架构拓扑图
  • 使用 gait-session-tracking 记录图表生成过程及其源数据引用

评论

支持 Markdown