图表生成服务

Draw.io MCP Server 是一个用于程序化生成图表的服务,支持700+ Azure架构图标和基本形状,提供模糊搜索、批量操作和图层管理等功能。

  • by simonkurtz-MSFT
  • TypeScript
  • 本地部署
  • 82 星标
  • 更新于
在 GitHub 查看 simonkurtz-MSFT/drawio-mcp-server

使用说明

Draw.io MCP服务器

A. 模型上下文协议(MCP) 用于程序化图表生成的服务器 Draw.io (图表.net)。此服务器直接生成Draw.io XML,无需浏览器扩展或Draw.io实例。

演示视频

致谢

如果没有以下存储库及其作者,这个项目就不会以这种方式存在。非常感谢。

特性

  • 700多个Azure架构图标 --微软官方图标,内嵌SVG数据,分为约20类(计算、网络、存储、数据库、AI+ML、安全等)
  • 基本形状 --矩形、椭圆、菱形、平行四边形和其他流程图图元
  • 模糊搜索 --在整个图标库中按部分名称查找形状
  • 批量操作 --在一次调用中创建和更新多个单元格,以获得更好的性能
  • 层管理 --跨层创建、列出和组织单元格
  • 风格预设 --内置Azure、流程图和常规颜色预设
  • 多个传输 --stdio(默认)和可流式传输HTTP
  • XML导出 --与Draw.io桌面和网络兼容的标准Draw.io XML格式

对于PNG/SVG/PDF转换,请使用jgraph的Draw.io skill-cli 工作流: https://github.com/jgraph/drawio-mcp/blob/main/skill-cli/README.md.

文档

需求

快速开始

来源

deno run --allow-net --allow-read --allow-env src/index.ts

MCP客户端配置

配置您的MCP客户端(Claude Desktop、VS Code、Codex等)以使用服务器:

克劳德桌面版

编辑 claude_desktop_config.json:

  • macOS: ~/Library/Application Support/Claude/claude_desktop_config.json
  • 视窗: %APPDATA%\Claude\claude_desktop_config.json
{
  "mcpServers": {
    "drawio": {
      "command": "deno",
      "args": ["run", "--allow-net", "--allow-read", "--allow-env", "/path/to/drawio-mcp-server/src/index.ts"]
    }
  }
}

VS Code

添加到您的VS代码设置或 .vscode/mcp.json:

{
  "mcpServers": {
    "drawio": {
      "command": "deno",
      "args": ["run", "--allow-net", "--allow-read", "--allow-env", "/path/to/drawio-mcp-server/src/index.ts"]
    }
  }
}

泽德

在助手设置中,添加上下文服务器:

{
  "drawio": {
    "command": "deno",
    "args": ["run", "--allow-net", "--allow-read", "--allow-env", "/path/to/drawio-mcp-server/src/index.ts"],
    "env": {}
  }
}

法典

编辑 ~/.codex/config.toml:

[mcp_servers.drawio]
command = "deno"
args = ["run", "--allow-net", "--allow-read", "--allow-env", "/path/to/drawio-mcp-server/src/index.ts"]

对于本地运行的HTTP传输:

[mcp_servers.drawio]
url = "http://localhost:8080/mcp"

奥特姆(奥利玛)

编辑 ~/.local/share/oterm/config.json:

{
  "mcpServers": {
    "drawio": {
      "command": "deno",
      "args": ["run", "--allow-net", "--allow-read", "--allow-env", "/path/to/drawio-mcp-server/src/index.ts"]
    }
  }
}

配置

运输选择

这 --transport 标志控制要启动的传输。默认值为 stdio.

标志 描述
--transport stdio 仅限stdio(默认)
--transport http 仅限HTTP
--transport stdio,http 两种运输方式

环境变量

变量 描述 默认值
AZURE_ICON_LIBRARY_PATH Azure图标库XML文件的路径(从中自动检测到 assets/ 如果未设置) (已检测到)
LOGGER_TYPE 记录器实施: console 或 mcp_server console
HTTP_PORT HTTP服务器端口(CLI --http-port 优先) 8080
TRANSPORT 运输类型: stdio, http,或 stdio,http (CLI --transport 优先) stdio
SAVE_DIAGRAMS ⚠️ 仅限开发模式 --自动将图表XML保存到 ./diagrams/ 导出/完成 (已禁用)

小贴士:您可以创建 .env 文件来自 .env.example 在本地配置环境变量:

cp .env.example .env
# Edit .env and uncomment/set SAVE_DIAGRAMS=true or other variables

服务器自动加载 .env 启动时的文件。这 .env 文件被gitignored,不会被提交到存储库。

开发模式——自动保存图表

⚠️ 警告:仅适用于开发模式,不适用于生产环境

对于本地调试和开发,您可以启用将图表XML自动保存到本地 diagrams/ 文件夹。这对于在不手动复制XML输出的情况下检查生成的图表非常有用。

要启用:

export SAVE_DIAGRAMS=true
deno task start

或

SAVE_DIAGRAMS=true deno task start

启用时的行为:

  • 每一个电话 export-diagram 或 finish-diagram 自动将XML保存到 ./diagrams/<timestamp>_<tool-name>.drawio
  • 时间戳格式: YYYYMMDD_HHMMSS (例如。, 20260219_143052_export-diagram.drawio)
  • 这 diagrams/ 如果文件夹不存在,则会自动创建
  • 文件保存过程中的错误会被记录下来,但不会使工具操作失败

要禁用(默认):

只需取消设置环境变量或将其设置为除以下值之外的任何值 true 或 1:

unset SAVE_DIAGRAMS

或

export SAVE_DIAGRAMS=false

安全说明:此功能是 默认情况下禁用 并且应该 从未在生产中启用 或集装箱化部署。它仅用于本地开发和调试。

HTTP传输

HTTP传输在以下位置公开了一个可流式传输的HTTP端点 /mcp (默认端口8080)。

deno task start:http
# or with a custom port:
deno run --allow-net --allow-read --allow-env src/index.ts --transport http --http-port 4000

HTTP的MCP客户端配置:

{
  "mcpServers": {
    "drawio": {
      "command": "deno",
      "args": [
        "run",
        "--allow-net",
        "--allow-read",
        "--allow-env",
        "/path/to/drawio-mcp-server/src/index.ts",
        "--transport",
        "http",
        "--http-port",
        "4000"
      ]
    }
  }
}

健康检查: curl http://localhost:8080/health

码头工人

Docker镜像使用 deno compile 生成一个自包含的本机二进制文件,然后在最小值上运行它 无发行版 基本映像(约20MB),没有shell、没有包管理器和非root用户。

从Docker Hub中提取

预构建图像可在 Docker Hub这是最快的入门方法,不需要克隆或构建。

1.拉取最新图像:

docker pull simonkurtzmsft/drawio-mcp-server:latest

2.启动容器:

docker run -d --name drawio-mcp-server -p 8080:8080 simonkurtzmsft/drawio-mcp-server:latest

这将在后台启动服务器,暴露端口8080上的HTTP传输。

3.验证服务器是否正在运行:

curl http://localhost:8080/health

你应该收到一个 OK 响应,确认服务器健康并准备接受连接。

4.将MCP客户端指向正在运行的容器。 例如,在VS Code中(.vscode/mcp.json):

{
  "mcpServers": {
    "drawio": {
      "url": "http://localhost:8080/mcp"
    }
  }
}

或者在克劳德桌面(claude_desktop_config.json):

{
  "mcpServers": {
    "drawio": {
      "url": "http://localhost:8080/mcp"
    }
  }
}

5.停止并移除容器:

docker stop drawio-mcp-server
docker rm drawio-mcp-server

在当地建设

要从源代码构建镜像,而不是从Docker Hub拉取镜像:

# Build
docker build -t drawio-mcp-server .

# Run (exposes HTTP on port 8080)
docker run -d --name drawio-mcp-server -p 8080:8080 drawio-mcp-server

Docker Compose

cp .env.example .env   # Configure REGISTRY and IMAGE_VERSION
docker compose up -d

这 .env 文件支持:

  • REGISTRY --Docker注册表URL(例如。, docker.io/myusername)
  • IMAGE_VERSION --图像标签的语义版本(例如。, 1.0.0)

备注:无发行版映像没有shell,因此容器内健康检查(wget、curl)不可用。使用外部健康检查(例如Kubernetes活性探测、负载均衡器健康检查)来监控 /health 终点。

工具

性能提示:所有单元格操作工具都接受数组——在一次调用中传递所有项,而不是重复调用工具。

无国籍合同:图表工具每次调用都是无状态的。通过完整的先前 diagram_xml 将每个图表相关的工具调用,并结转返回的 diagram_xml 从对下一个呼叫的响应中。

形状发现

工具 说明
search-shapes 模糊搜索形状,包括700多个Azure图标。将所有查询传递到 queries 阵列。
get-shape-categories 列出所有形状类别(常规、流程图、Azure类别)。
get-shapes-in-category 按以下方式列出类别中的所有形状 category_id.
get-style-presets 获取内置样式预设(Azure颜色、流程图形状、边缘样式)。

图表修改

工具 说明
add-cells 添加顶点和/或边。支持 shape_name 对于图标分辨率, temp_id 用于批内参考,以及 dry_run 验证。
edit-cells 更新顶点单元格属性(位置、大小、文本、样式)。
edit-edges 更新边缘属性(文本、源、目标、样式)。
set-cell-shape 将库造型样式应用于现有单元格。
delete-cell-by-id 按ID删除单元格(顶点或边)。Cascade删除顶点的连接边。

图表检查

工具 说明
list-paged-model 所有单元格的分页视图,按类型过滤。
get-diagram-stats 有关单元格计数、边界和层分布的统计信息。
export-diagram 将图表导出为Draw.io XML。
import-diagram 导入Draw.io XML字符串,替换当前图表。
clear-diagram 清除所有单元格并重置图表。

层管理

工具 说明
list-layers 列出所有具有ID和名称的图层。
set-active-layer 为新元素设置活动层。
create-layer 创建新图层。
move-cell-to-layer 将单元格移动到其他层。

页面管理

工具 说明
create-page 在图表中创建新页面(选项卡)。
list-pages 列出所有带有ID和名称的页面。
get-active-page 获取当前活动页面。
set-active-page 切换到其他页面。
rename-page 重命名现有页面。
delete-page 删除页面及其所有内容。无法删除最后一页。

集团/集装箱管理

工具 说明
create-groups 为Contoso、子网、资源组等创建组/容器单元格。
add-cells-to-group 将单元格分配给组。
remove-cell-from-group 从组中删除一个单元格,将其返回到活动层。
list-group-children 列出组中包含的所有单元格。

添加单元格示例

使用 add-cells 随着 temp_id 在单个调用中创建顶点和边的引用:

{
  "cells": [
    {
      "type": "vertex",
      "temp_id": "web",
      "x": 100,
      "y": 100,
      "width": 60,
      "height": 60,
      "text": "Web",
      "style": "aspect=fixed;html=1;image;image=img/lib/azure2/compute/Container_Instances.svg;"
    },
    {
      "type": "vertex",
      "temp_id": "api",
      "x": 220,
      "y": 100,
      "width": 60,
      "height": 60,
      "text": "API",
      "style": "aspect=fixed;html=1;image;image=img/lib/azure2/compute/Container_Instances.svg;"
    },
    { "type": "edge", "source_id": "web", "target_id": "api", "text": "HTTPS" }
  ]
}

Azure图标库

服务器包括 700多个官方Azure架构图标 从 drawio的侏儒/蔚蓝建筑图标,按类别组织:

类别 示例
AI+机器学习 认知服务、Azure OpenAI、机器人服务、机器学习
分析 Synapse分析、copula、数据工厂、事件中心
应用服务 应用服务,静态Web应用
计算 虚拟机、函数、AKS、容器实例、批处理
容器 容器注册表、容器实例、AKS
数据库 SQL数据库、Cosmos DB、Redis缓存、PostgreSQL
DevOps Azure DevOps、管道、仓库
身份 Azure AD,密钥库
集成 服务总线、逻辑应用程序、API管理、事件网格
管理+治理 监控、自动化、策略、日志分析
网络 前门、负载均衡器、应用网关、VPN网关、防火墙
安全 哨兵,安全中心
存储 存储帐户、Blob存储、文件存储、磁盘存储

图标使用 嵌入式base64 SVG数据 --无外部依赖,完全脱机工作,使用正确的Azure品牌和颜色。

库在第一次访问时延迟加载(单例模式)。搜索操作在初始加载后<5ms。

发展

设置

git clone https://github.com/simonkurtz-MSFT/drawio-mcp-server.git
cd drawio-mcp-server

无需安装步骤——Deno在第一次运行时解决了依赖关系。

常用命令

命令 描述
deno task start 从stdio+HTTP传输开始
deno task start:http 仅从HTTP传输开始
deno task dev 监视模式——更改后自动重新启动
deno task test 运行测试
deno task test:watch 在监视模式下运行测试
deno task test:coverage 运行覆盖率测试
deno task bench 运行专注的性能基准测试
deno task lint 棉绒和类型检查
deno task fmt 格式代码
deno task fmt:check 无需书写即可检查格式
deno task compile 编译为自包含的二进制文件
deno task update 更新依赖关系和Docker Deno

deno task update 刷新 deno.json 依赖性要求和 deno.lock 通过 deno outdated --update --latest,然后更新Docker构建器镜像 DENO_VERSION Deno GitHub最新稳定版本的论点。

MCP检查员

使用 MCP检查员 要调试服务器,请执行以下操作:

deno task inspect

在做出改变之后, 重启 检查员。在改变工具定义之后, 清除 和 列表 工具再次。

相关方法

备注:下面的比较都是 截至2026年2月。项目和代理技能都在不断发展——检查他们的存储库以了解最新状态。

这个项目是 lgazo/drawio mcp服务器 Ladislav Gazo。原版作为 桥接到实时Draw.io实例 通过WebSocket浏览器扩展进行交互式实时图表控制。这把叉子是 独立XML生成器 --它在内存中构建图表并输出Draw.io XML,而不需要浏览器或Draw.io实例。 thomast1906/github副驾驶代理技能 采取了另一种方法:a 复制品代理技能 构建原始Draw.io XML并将其发送到托管服务器 mcp.draw.io 服务,由提示说明和静态Azure图标目录指导。

方面 simonkurtz MSFT 原创(lgazo) 代理技能(thomast1906)
建筑 独立MCP服务器——在内存中生成XML 通过WebSocket浏览器扩展桥接到实时Draw.io Copilot代理技能+托管 mcp.draw.io 端点
运行时 Deno(TypeScript) Node.js+pnpm(TypeScript+JavaScript) 无(提示驱动)
需要Draw.io实例 ❌ ✅ 浏览器+MCP扩展 ❌ (使用托管端点)
设置工作 克隆+Deno,或 docker pull npx +浏览器扩展+打开Draw.io 删除 SKILL.md +编目到repo
批量操作 ✅ 数组在 add-cells, edit-cells等等。 ❌ 每个单元格一次工具调用 ✅ 一次性完成完整的XML
Azure图标 ✅ 700+嵌入式base64 SVG ✅ 来自实时Draw.io库 ✅ 静态目录(img/lib/azure2/…)
模糊形状搜索 ✅ search-shapes ❌ 仅用于精确名称查找 ❌
页面管理 ✅ ❌ ❌
集团/集装箱管理 ✅ ❌ ❌
迭代编辑 ✅ 状态模型,增量调用 ✅ Draw.io中的实时编辑 ❌ 每次重新生成完整的XML
交互式功能 ❌ 无状态XML生成 ✅ get-selected-cell, set-cell-data ❌
Docker/云部署 ✅ 分发映像(约20 MB) ❌ 仅限npm包 ❌ 依赖于托管端点
离线支持 ✅ 完全离线 ⚠️ 需要带Draw.io的浏览器 ❌ 需要互联网
最适合 CI/CD、容器、无头/离线批处理生成 具有实时视觉反馈的交互式图表 零安装的快速一次性图表

这三种方法都是有效的——正确的选择取决于您是需要交互式视觉反馈(原始)、无头批处理生成(此分支)还是零安装代理技能。

许可证

麻省理工学院