前言
最近需要画很多流程图,于是在DrawIO 上面画了很多的流程图。
现在的各种AI这么发达,有没有办法让AI帮我们自动画图呢?有的兄弟有的。DrawIO官方在三个月前发布了自己的官方MCP:jgraph/drawio-mcp
接入ChatGPT
获取管理员权限
需要在设置-应用里开启开发人员模式:
要注意,开启之后,会强制关闭记忆,不太方便了。仅限调试。
对于Team套餐,需要让自己车的所有者或管理员为每个人开启创建应用的权限,才能正常开启开发人员模式。
接入官方MCP
阅读官方的README可以知道,有两种接入方式:MCP App Server和MCP Tool Server。
- MCP App Server:直接在网页对话中显示为可交互iFrame框架
- MCP Tool Server:适合被命令行工具调用,如CC
开启开发人员模式后点击上面的“创建应用”:
随后就能在对话中的“更多”里看到自己创建的应用:
测试
输入要求让它画图,最上面总会报错,原因是ChatGPT会将XML再包裹一层JSON。万幸的是,官方对此早有准备,会拆解最大四层JSON结构并提取出原始XML字段。
感觉效果不太行。
非官方应用
谷歌搜索搜出的是这个应用:ChatGPT - Draw.io Creator
让它生成,它会生成可以直接导入的DrawIO XML代码:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149
| <mxGraphModel dx="1422" dy="794" grid="1" gridSize="10" guides="1" tooltips="1" connect="1" arrows="1" fold="1" page="1" pageScale="1" pageWidth="1600" pageHeight="1100" math="0" shadow="0"> <root> <mxCell id="0"/> <mxCell id="1" parent="0"/>
<mxCell id="title" value="OAuth2 授权码流程时序图" style="text;html=1;strokeColor=none;fillColor=none;align=left;verticalAlign=middle;whiteSpace=wrap;rounded=0;" vertex="1" parent="1"> <mxGeometry x="80" y="30" width="260" height="30" as="geometry"/> </mxCell>
<mxCell id="user_head" value="资源拥有者
/ 用户" style="rounded=1;whiteSpace=wrap;html=1;" vertex="1" parent="1"> <mxGeometry x="80" y="80" width="130" height="50" as="geometry"/> </mxCell> <mxCell id="browser_head" value="用户代理
/ 浏览器" style="rounded=1;whiteSpace=wrap;html=1;" vertex="1" parent="1"> <mxGeometry x="270" y="80" width="130" height="50" as="geometry"/> </mxCell> <mxCell id="client_head" value="客户端应用
Client" style="rounded=1;whiteSpace=wrap;html=1;" vertex="1" parent="1"> <mxGeometry x="460" y="80" width="140" height="50" as="geometry"/> </mxCell> <mxCell id="auth_head" value="授权服务器
Authorization Server" style="rounded=1;whiteSpace=wrap;html=1;" vertex="1" parent="1"> <mxGeometry x="670" y="80" width="170" height="50" as="geometry"/> </mxCell> <mxCell id="resource_head" value="资源服务器
Resource Server" style="rounded=1;whiteSpace=wrap;html=1;" vertex="1" parent="1"> <mxGeometry x="930" y="80" width="170" height="50" as="geometry"/> </mxCell>
<mxCell id="user_line" value="" style="endArrow=none;html=1;rounded=1;dashed=1;" edge="1" parent="1"> <mxGeometry width="50" height="50" relative="1" as="geometry"> <mxPoint x="145" y="130" as="sourcePoint"/> <mxPoint x="145" y="850" as="targetPoint"/> </mxGeometry> </mxCell> <mxCell id="browser_line" value="" style="endArrow=none;html=1;rounded=1;dashed=1;" edge="1" parent="1"> <mxGeometry width="50" height="50" relative="1" as="geometry"> <mxPoint x="335" y="130" as="sourcePoint"/> <mxPoint x="335" y="850" as="targetPoint"/> </mxGeometry> </mxCell> <mxCell id="client_line" value="" style="endArrow=none;html=1;rounded=1;dashed=1;" edge="1" parent="1"> <mxGeometry width="50" height="50" relative="1" as="geometry"> <mxPoint x="530" y="130" as="sourcePoint"/> <mxPoint x="530" y="850" as="targetPoint"/> </mxGeometry> </mxCell> <mxCell id="auth_line" value="" style="endArrow=none;html=1;rounded=1;dashed=1;" edge="1" parent="1"> <mxGeometry width="50" height="50" relative="1" as="geometry"> <mxPoint x="755" y="130" as="sourcePoint"/> <mxPoint x="755" y="850" as="targetPoint"/> </mxGeometry> </mxCell> <mxCell id="resource_line" value="" style="endArrow=none;html=1;rounded=1;dashed=1;" edge="1" parent="1"> <mxGeometry width="50" height="50" relative="1" as="geometry"> <mxPoint x="1015" y="130" as="sourcePoint"/> <mxPoint x="1015" y="850" as="targetPoint"/> </mxGeometry> </mxCell>
<mxCell id="m1" value="1. 访问受保护功能" style="endArrow=block;html=1;rounded=1;whiteSpace=wrap;" edge="1" parent="1"> <mxGeometry width="50" height="50" relative="1" as="geometry"> <mxPoint x="145" y="180" as="sourcePoint"/> <mxPoint x="335" y="180" as="targetPoint"/> </mxGeometry> </mxCell>
<mxCell id="m2" value="2. 请求客户端页面 / 功能" style="endArrow=block;html=1;rounded=1;whiteSpace=wrap;" edge="1" parent="1"> <mxGeometry width="50" height="50" relative="1" as="geometry"> <mxPoint x="335" y="230" as="sourcePoint"/> <mxPoint x="530" y="230" as="targetPoint"/> </mxGeometry> </mxCell>
<mxCell id="m3" value="3. 重定向到授权端点
response_type=code, client_id, redirect_uri, scope, state" style="endArrow=block;html=1;rounded=1;whiteSpace=wrap;" edge="1" parent="1"> <mxGeometry width="50" height="50" relative="1" as="geometry"> <mxPoint x="530" y="290" as="sourcePoint"/> <mxPoint x="335" y="290" as="targetPoint"/> </mxGeometry> </mxCell>
<mxCell id="m4" value="4. 打开授权请求" style="endArrow=block;html=1;rounded=1;whiteSpace=wrap;" edge="1" parent="1"> <mxGeometry width="50" height="50" relative="1" as="geometry"> <mxPoint x="335" y="350" as="sourcePoint"/> <mxPoint x="755" y="350" as="targetPoint"/> </mxGeometry> </mxCell>
<mxCell id="m5" value="5. 显示登录 / 授权同意页面" style="endArrow=block;html=1;rounded=1;whiteSpace=wrap;" edge="1" parent="1"> <mxGeometry width="50" height="50" relative="1" as="geometry"> <mxPoint x="755" y="410" as="sourcePoint"/> <mxPoint x="335" y="410" as="targetPoint"/> </mxGeometry> </mxCell>
<mxCell id="m6" value="6. 用户登录并同意授权" style="endArrow=block;html=1;rounded=1;whiteSpace=wrap;" edge="1" parent="1"> <mxGeometry width="50" height="50" relative="1" as="geometry"> <mxPoint x="145" y="470" as="sourcePoint"/> <mxPoint x="335" y="470" as="targetPoint"/> </mxGeometry> </mxCell>
<mxCell id="m7" value="7. 提交凭证 / 授权同意" style="endArrow=block;html=1;rounded=1;whiteSpace=wrap;" edge="1" parent="1"> <mxGeometry width="50" height="50" relative="1" as="geometry"> <mxPoint x="335" y="530" as="sourcePoint"/> <mxPoint x="755" y="530" as="targetPoint"/> </mxGeometry> </mxCell>
<mxCell id="m8" value="8. 重定向到 redirect_uri
携带 code 与 state" style="endArrow=block;html=1;rounded=1;whiteSpace=wrap;" edge="1" parent="1"> <mxGeometry width="50" height="50" relative="1" as="geometry"> <mxPoint x="755" y="590" as="sourcePoint"/> <mxPoint x="335" y="590" as="targetPoint"/> </mxGeometry> </mxCell>
<mxCell id="m9" value="9. 请求 redirect_uri
code, state" style="endArrow=block;html=1;rounded=1;whiteSpace=wrap;" edge="1" parent="1"> <mxGeometry width="50" height="50" relative="1" as="geometry"> <mxPoint x="335" y="650" as="sourcePoint"/> <mxPoint x="530" y="650" as="targetPoint"/> </mxGeometry> </mxCell>
<mxCell id="m10" value="10. 用授权码换令牌
grant_type=authorization_code, code, redirect_uri, client_secret" style="endArrow=block;html=1;rounded=1;whiteSpace=wrap;" edge="1" parent="1"> <mxGeometry width="50" height="50" relative="1" as="geometry"> <mxPoint x="530" y="710" as="sourcePoint"/> <mxPoint x="755" y="710" as="targetPoint"/> </mxGeometry> </mxCell>
<mxCell id="m11" value="11. 返回 access_token / refresh_token" style="endArrow=block;html=1;rounded=1;whiteSpace=wrap;" edge="1" parent="1"> <mxGeometry width="50" height="50" relative="1" as="geometry"> <mxPoint x="755" y="760" as="sourcePoint"/> <mxPoint x="530" y="760" as="targetPoint"/> </mxGeometry> </mxCell>
<mxCell id="m12" value="12. 携带 access_token 请求受保护资源" style="endArrow=block;html=1;rounded=1;whiteSpace=wrap;" edge="1" parent="1"> <mxGeometry width="50" height="50" relative="1" as="geometry"> <mxPoint x="530" y="810" as="sourcePoint"/> <mxPoint x="1015" y="810" as="targetPoint"/> </mxGeometry> </mxCell>
<mxCell id="m13" value="13. 返回受保护资源" style="endArrow=block;html=1;rounded=1;whiteSpace=wrap;" edge="1" parent="1"> <mxGeometry width="50" height="50" relative="1" as="geometry"> <mxPoint x="1015" y="850" as="sourcePoint"/> <mxPoint x="530" y="850" as="targetPoint"/> </mxGeometry> </mxCell>
</root> </mxGraphModel>
|
导入后是这个样子:

效果似乎还不错?不知道是不是我调用官方的MCP方式不正确。