thomast1906/azure-drawio-mcp-diagramming
Create and edit architecture diagrams using Draw.io MCP (`drawio/create_diagram`) with reliable Azure icon rendering guidance and troubleshooting. compatibility Requires Python 3 and internet access to refresh the icon catalog (periodic, not per-run).
npx skills add https://github.com/thomast1906/github-copilot-agent-skills --skill azure-drawio-mcp-diagramming
Use this skill to create or update diagrams through the Draw.io MCP tool and to avoid common Azure icon rendering problems.
See references/REFERENCE.md for reference artifacts and refresh commands.
For non-Azure diagrams, you can skip icon discovery/validation scripts and proceed directly to drawio/create_diagram.
drawio/create_diagramdrawio server:{
"servers": {
"drawio": {
"type": "http",
"url": "https://mcp.draw.io/mcp"
}
}
}
references/azure2-complete-catalog.txt to verify icon paths — no scripts needed at runtime.mxGraphModel payload using verified icons when applicable.drawio/create_diagram with the XML..drawio wrapped in <mxfile><diagram>...</diagram></mxfile>.Apply these defaults unless the user explicitly asks for a dense/technical view:
1, 2, 3, 4) instead of many edge labels.For worked examples of common layout problems (stacked edges, repeated labels, observability inside VNet, etc.), see references/layout-antipatterns.md.
When creating Azure infrastructure network diagrams with VNets, subnets, and network isolation:
pageWidth="1900" pageHeight="1500"strokeWidth=4) and large containersfillColor=#fff2cc, strokeColor=#d6b656)fillColor=#d5e8d4, strokeColor=#82b366)fillColor=#dae8fc, strokeColor=#6c8ebf)strokeWidth=2, dashed=1, dashPattern=8 8)edgeStyle=orthogonalEdgeStyle for clean routing<Array> waypoints for complex routingstrokeWidth=3)fillColor=#fff9cc)fillColor=#f5f5f5, strokeColor=#666666)fillColor=#ffe6cc, strokeColor=#d79b00)<mxGraphModel pageWidth="1900" pageHeight="1500">
<!-- VNet Container with thick border -->
<mxCell id="vnet" value="Internal VNet - 10.x.0.0/16"
style="rounded=0;whiteSpace=wrap;html=1;fillColor=#d5e8d4;strokeColor=#82b366;
verticalAlign=top;fontSize=16;fontStyle=1;align=center;strokeWidth=4;">
<mxGeometry x="220" y="580" width="1340" height="820"/>
</mxCell>
<!-- Subnet Container with dashed border inside VNet -->
<mxCell id="subnet-app" value="Application Subnet - 10.x.2.0/24"
style="rounded=1;whiteSpace=wrap;html=1;fillColor=#e6f4ea;strokeColor=#82b366;
verticalAlign=top;fontSize=13;fontStyle=1;align=center;strokeWidth=2;dashed=1;dashPattern=8 8;">
<mxGeometry x="260" y="650" width="480" height="340"/>
</mxCell>
<!-- Resources inside subnet -->
<mxCell id="vm" style="image;aspect=fixed;html=1;points=[];align=center;
image=img/lib/azure2/compute/Virtual_Machine.svg;">
<mxGeometry x="300" y="720" width="64" height="59"/>
</mxCell>
<!-- Labeled traffic edge -->
<mxCell id="edge" value="PostgreSQL:5432"
style="edgeStyle=orthogonalEdgeStyle;strokeWidth=2;strokeColor=#6c8ebf;dashed=1;"
edge="1" source="vm" target="postgres">
<mxGeometry relative="1"/>
</mxCell>
</mxGraphModel>
This section applies only when the diagram includes Azure services/icons.
references/azure2-complete-catalog.txt contains all 648 Azure2 icons.grep -i "gateway" references/azure2-complete-catalog.txtdrawio/create_diagram.cd .github/skills/drawio-mcp-diagramming/scripts
python3 search_azure2_icons_github.py --max-results 9999 > ../references/azure2-complete-catalog.txt
Azure icon rendering in draw.io can fail for two common reasons:
shape=mxgraph.azure2.* may not render in some hosts.image;aspect=fixed;html=1;...;image=img/lib/azure2/<category>/<Icon_Name>.svg;img/lib/azure2/... consistently.app.diagrams.net.Grep the static catalog — no scripts needed at agent runtime:
grep -i "gateway" references/azure2-complete-catalog.txt
grep -i "virtual_machine\|load_balancer\|key_vault" references/azure2-complete-catalog.txt
Use verified paths in diagram cell styles:
image;aspect=fixed;html=1;...;image=img/lib/azure2/<category>/<Icon_Name>.svg;
For renderer resilience, absolute URLs also work:
image;aspect=fixed;html=1;...;image=https://raw.githubusercontent.com/jgraph/drawio/dev/src/main/webapp/img/lib/azure2/networking/Application_Gateways.svg;
If local rendering still fails, open in app.diagrams.net.
image=img/lib/azure2/networking/Front_Doors.svg
image=img/lib/azure2/networking/Private_Link_Hub.svg
image=img/lib/azure2/networking/Network_Watcher.svg
image=img/lib/azure2/app_services/API_Management_Services.svg
image=img/lib/azure2/app_services/App_Services.svg
image=img/lib/azure2/databases/Azure_Cosmos_DB.svg
image=img/lib/azure2/identity/Managed_Identities.svg
image=img/lib/azure2/management_governance/Policy.svg
image=img/lib/azure2/analytics/Log_Analytics_Workspaces.svg
image=img/lib/azure2/management_governance/Monitor.svg
image=img/lib/azure2/devops/Application_Insights.svg
image=img/lib/azure2/devops/API_Connections.svg
If Azure icons still do not render:
OK, then generate the diagram.MCP: List Servers.MCP: Reset Cached Tools if tool list is stale.image=img/lib/azure2/... for Azure2 icon mode.references/azure2-complete-catalog.txt for alternatives.See references/REFERENCE.md for full example prompt templates.
references/azure2-complete-catalog.txt before calling drawio/create_diagram.drawio/create_diagram only with confirmed icon paths.Take thomast1906/azure-drawio-mcp-diagramming from the repository into ~/.claude/skills for personal
use, or into .claude/skills inside a project.
The agent identifies a skill by the name field in its header. Two skills with the
same name cannot sit side by side — one of them will be ignored.