基于MCP协议与Excalidraw实现架构图自动化绘制
1. 项目概述:当Excalidraw遇见MCP,架构图绘制的自动化革命
如果你和我一样,日常工作中需要频繁地绘制系统架构图、流程图,那么你一定对Excalidraw不陌生。这款开源的、手绘风格的绘图工具,以其简洁、直观和强大的协作能力,成为了许多技术团队绘制技术文档的首选。但不知道你有没有遇到过这样的场景:一个大型微服务系统,几十个服务组件,每次架构调整,你都需要在Excalidraw的画布上一个一个地移动、连接、修改那些方框和箭头,繁琐且容易出错。或者,当你需要根据一份已经写好的架构描述文档(比如Markdown或JSON)来生成可视化图表时,你不得不进行枯燥的“翻译”工作。
BV-Venky/excalidraw-architect-mcp这个项目,正是为了解决这些痛点而生的。它本质上是一个MCP(Model Context Protocol)服务器。MCP是Anthropic提出的一种协议,旨在让AI助手(如Claude)能够安全、可控地访问外部工具、数据和功能。而这个项目,就是让Claude这类AI助手,拥有了直接操作Excalidraw来绘制架构图的能力。
简单来说,它架起了一座桥:桥的一边是能用自然语言描述需求的你(或者一份结构化的文档),桥的另一边是能生成精美手绘风格架构图的Excalidraw。你不再需要手动拖拽元件,只需要告诉AI:“请帮我画一个包含API网关、用户服务、订单服务和MySQL数据库的微服务架构图,用箭头标明数据流向。” AI通过这个MCP服务器,就能在Excalidraw中自动创建出对应的图形。
这不仅仅是“自动画图”,更是一种思维和工作流的转变。它将架构设计从纯粹的手工劳动,部分升级为了“声明式”的生成过程。对于架构师、技术布道者、文档工程师,甚至是需要快速绘制技术示意图进行沟通的开发者来说,这个工具的价值在于极大地提升了从想法到可视化的效率与一致性。
2. 核心原理与技术栈拆解
要理解这个项目如何运作,我们需要拆解其核心的“输入-处理-输出”链条,以及背后依赖的关键技术。
2.1 MCP(Model Context Protocol):能力扩展的标准化接口
MCP是这个项目的基石。你可以把它想象成AI世界的“USB协议”或“驱动模型”。在没有MCP之前,每个AI应用如果想接入外部工具(如搜索引擎、数据库、绘图工具),都需要自行定义一套复杂的交互接口,工作量大且不通用。
MCP定义了一套标准化的方式:
- 服务器(Server):提供特定能力的服务端,比如这里的
excalidraw-architect-mcp。它向AI客户端宣告:“嗨,我具备这些功能(Tools)。” - 工具(Tools):服务器提供的具体能力。在这个项目中,核心工具就是
create_architecture_diagram。这个工具定义了输入参数(如架构描述)和输出结果。 - 客户端(Client):通常是Claude Desktop、Cursor等集成了MCP客户端的AI应用。它负责加载MCP服务器,并在用户与AI对话时,在合适的时机调用服务器提供的工具。
当你在Claude中提出画图需求时,对话流程如下:
- 你的提示词被发送给Claude模型。
- Claude模型理解你的意图后,发现需要调用一个外部工具来实现“画图”这个动作。
- Claude客户端检查已加载的MCP服务器,发现
excalidraw-architect-mcp提供了create_architecture_diagram工具。 - 客户端将该工具的描述(包括所需参数格式)再次发送给Claude模型。
- Claude模型根据你的描述和工具参数要求,结构化地生成一个调用请求,例如一个符合特定格式的JSON对象,其中包含了“组件列表”、“关系”等信息。
- 客户端将这个结构化请求发送给
excalidraw-architect-mcp服务器。 - 服务器收到请求,执行核心逻辑:将JSON结构转换为Excalidraw的图形元素。
- 服务器将生成结果(通常是成功状态和可能生成的Excalidraw场景链接或数据)返回给客户端。
- 客户端将结果呈现给你。
注意:MCP的核心优势在于“结构化”。AI模型不再需要“幻想”出如何操作一个它看不见的GUI界面,而是通过一个定义良好的接口进行精确调用,这大大提高了复杂任务执行的可靠性和安全性。
2.2 Excalidraw:不仅是渲染器,更是数据模型
项目输出端是Excalidraw。这里需要理解两个层面:
- Excalidraw 数据模型:Excalidraw的所有图形(矩形、菱形、箭头、文字等)在底层都有一个对应的JSON表示。这个JSON结构定义了元素的位置、大小、样式、文本内容以及元素之间的绑定关系(如箭头起点和终点绑定到某个矩形)。
excalidraw-architect-mcp的核心工作,就是根据输入的架构描述,程序化地生成这样一个符合Excalidraw数据模型规范的JSON对象。 - Excalidraw 渲染与交互:生成的JSON数据可以直接导入Excalidraw的网页应用或自部署实例中,瞬间渲染出完整的图表。由于生成的是标准的Excalidraw数据,你仍然可以像手动绘制一样,对自动生成的图表进行任意的二次调整、美化、添加批注,实现了自动化与灵活性的完美结合。
2.3 项目技术栈与架构逻辑
基于以上原理,我们可以推断出项目的技术实现大概如下:
- 语言:大概率是Node.js (JavaScript/TypeScript)。因为MCP服务器生态目前主要由JS/TS驱动,且便于处理JSON和与Web技术栈集成。
- 核心库:
@modelcontextprotocol/sdk:用于构建MCP服务器的官方SDK,处理与客户端的协议通信。- 可能包含
excalidraw或@excalidraw/excalidraw的相关类型定义包,用于确保生成的JSON数据格式正确。 express或类似框架:如果服务器需要提供额外的HTTP端点(例如预览生成的图表)。
- 核心逻辑流程:
- 解析输入:接收来自MCP客户端的结构化请求(JSON)。请求中应包含架构的组件定义和关系定义。
- 布局计算:这是最具挑战性的部分。如何将一堆抽象的“服务”、“数据库”合理地排列在画布上,避免重叠,并使连接线清晰?项目可能实现了简单的自动布局算法,如:
- 分层布局 (Layered Layout):适用于流程图、依赖图。将组件按类型或层级(如前端层、网关层、业务层、数据层)排列在不同的水平线上。
- 力导向布局 (Force-Directed Layout):模拟物理粒子间的引力和斥力,让连接紧密的组件靠近,不相关的组件远离,最终达到一个平衡的分布。这对于关系复杂的网状架构很有效。
- 网格布局 (Grid Layout):最简单的布局,将组件按行列整齐排列。
- 元素生成:根据布局计算出的坐标,为每个组件创建对应的Excalidraw图形元素(如矩形表示服务,圆柱体表示数据库,椭圆表示外部系统)。同时,根据关系定义,在对应的图形元素间创建箭头(连线)。
- 样式应用:应用统一的视觉样式,如颜色编码(所有数据库用蓝色,所有服务用绿色),字体大小,边框粗细等,以确保图表美观且一致。
- 输出封装:将生成的所有图形元素打包成一个完整的Excalidraw场景JSON,通过MCP协议返回。这个JSON可以直接被Excalidraw应用加载。
3. 从零开始:环境配置与服务器部署实操
了解了原理,我们来看看如何亲手把这个工具用起来。假设你使用的是 Claude Desktop,这是目前体验MCP功能最便捷的方式。
3.1 前期准备:安装基础依赖
首先,你需要确保你的开发环境已经就绪。
- 安装 Node.js 和 npm:这是运行该项目的前提。建议安装最新的LTS版本。你可以在终端运行
node --version和npm --version来检查是否已安装。 - 安装 Claude Desktop:从Anthropic官网下载并安装适合你操作系统的Claude Desktop客户端。安装后,你需要找到其配置目录。
- macOS:
~/Library/Application Support/Claude/ - Windows:
%APPDATA%\Claude\ - Linux:
~/.config/Claude/
- macOS:
3.2 获取与配置 MCP 服务器
接下来,我们需要获取excalidraw-architect-mcp服务器并告诉 Claude Desktop 如何使用它。
- 克隆项目仓库:
git clone https://github.com/BV-Venky/excalidraw-architect-mcp.git cd excalidraw-architect-mcp - 安装项目依赖:
这一步会安装npm install@modelcontextprotocol/sdk以及其他必要的依赖包。 - 构建项目(如果需要):查看项目根目录是否有
package.json文件,并检查其中的scripts。通常会有build命令。如果是TypeScript项目,你需要先编译。npm run build - 定位服务器入口文件:通常,MCP服务器的入口点会在
package.json的main字段或bin字段中指明。常见入口文件如dist/index.js或src/server.js。记下这个文件的绝对路径,例如/Users/yourname/projects/excalidraw-architect-mcp/dist/index.js。
3.3 配置 Claude Desktop 集成
这是最关键的一步,将我们本地的MCP服务器与Claude Desktop关联起来。
- 在之前找到的Claude配置目录下,创建一个名为
claude_desktop_config.json的文件(如果不存在)。 - 编辑这个文件,添加MCP服务器的配置。配置结构如下:
{ "mcpServers": { "excalidraw-architect": { "command": "node", "args": [ "/ABSOLUTE/PATH/TO/YOUR/excalidraw-architect-mcp/dist/index.js" ], "env": { // 可以在这里定义环境变量,例如指定Excalidraw实例的URL // "EXCALIDRAW_BASE_URL": "https://excalidraw.com" } } } }"excalidraw-architect":这是你给这个服务器起的名字,可以自定义。"command": "node":指定用Node.js运行时来执行服务器脚本。"args":数组中的第一个元素必须是上一步找到的入口文件的绝对路径。请务必替换成你的实际路径。"env":可选。如果需要连接到你自部署的Excalidraw,可以在这里设置基础URL。
实操心得:路径中的空格和特殊字符可能导致启动失败。如果路径包含空格,在Windows的
args中可能需要使用双引号包裹整个路径,或在JSON中进行正确的转义。最简单的方法是避免使用带空格的目录。
- 保存配置文件并重启Claude Desktop。重启后,Claude应该会自动加载你配置的MCP服务器。
3.4 验证与测试
重启Claude Desktop后,如何验证配置成功?
- 打开Claude Desktop,新建一个对话。
- 在输入框里,尝试问Claude:“你现在可以使用哪些工具?” 或者 “你能帮我画架构图吗?”
- 如果配置成功,Claude的回复中应该会提及它有一个名为
create_architecture_diagram或类似名称的工具可用。它可能会描述这个工具的功能。 - 进行第一次测试。输入一个简单的请求:
“请使用你的架构图工具,画一个简单的三层Web应用架构,包含用户浏览器、Web服务器、应用服务器和数据库。”
- 观察Claude的响应。它会思考,然后表示正在调用工具。调用成功后,它可能会返回一段文字说明,并提供一个链接或一段Excalidraw数据。
- 返回链接:如果服务器配置了将生成的场景上传到某个服务(如Excalidraw的实时协作房间),则会返回一个
.excalidraw.com的链接,点击即可查看。 - 返回数据:更常见的是返回一个包含Excalidraw场景数据的JSON块。Claude可能会建议你“复制这段数据,然后打开Excalidraw.com,点击‘Load’按钮粘贴导入”。
- 返回链接:如果服务器配置了将生成的场景上传到某个服务(如Excalidraw的实时协作房间),则会返回一个
如果到了这一步,恭喜你,环境已经搭建成功!
4. 核心工具使用详解与架构描述语法
配置好环境只是开始,如何高效地使用这个工具,关键在于学会如何向AI描述你的架构。虽然最终是AI模型(Claude)来理解你的自然语言并生成结构化请求,但掌握一些“最佳实践”能让输出结果更符合你的预期。
4.1create_architecture_diagram工具参数解析
虽然我们是通过自然语言与Claude交互,但了解底层工具期望的结构化数据格式,有助于我们给出更精确的指令。根据项目README和MCP协议惯例,该工具可能接受的参数结构如下:
{ "components": [ { "id": "user_browser", "type": "browser", "label": "User Browser", "description": "End user's web browser accessing the application." }, { "id": "nginx", "type": "gateway", "label": "NGINX Gateway", "description": "Reverse proxy and load balancer." }, { "id": "auth_service", "type": "service", "label": "Auth Service", "description": "Handles user authentication and authorization." } ], "relationships": [ { "source": "user_browser", "target": "nginx", "label": "HTTPS Requests", "type": "http" }, { "source": "nginx", "target": "auth_service", "label": "Proxy Pass", "type": "rpc" } ], "layout": "layered", // 可选:指定布局算法,如 "layered", "force", "grid" "title": "Microservices Authentication Flow" }- components (数组):定义架构中的所有实体。
id: 唯一标识符,用于在关系中进行引用。type: 组件类型,如service,database,queue,gateway,browser,external等。这个字段至关重要,因为它决定了在Excalidraw中用什么图形来表示(矩形、圆柱体、云朵等)。项目内部应该有一个从type到图形样式的映射表。label: 显示在图形上的主要文本。description: 更详细的描述,可能作为工具提示(tooltip)或注释显示。
- relationships (数组):定义组件之间的连接和交互。
source/target: 引用components中的id。label: 连线上的文字说明,如“调用”、“写入”、“发送消息”。type: 关系类型,如http,grpc,kafka,database。可能影响连线的样式(实线、虚线、箭头样式)。
- layout (字符串,可选):给布局算法一个提示。如果你对布局有特殊要求,可以在指令中说明。
- title (字符串,可选):图表的标题。
4.2 高效的自然语言指令技巧
你不需要每次都手动构造JSON。通过精心设计的自然语言指令,你可以引导Claude生成高质量的结构化请求。
基础指令模板:
“请使用架构图工具,绘制一个[架构名称]图。包含以下组件:
- [组件1名称],类型为[组件1类型],负责[组件1描述]。
- [组件2名称],类型为[组件2类型],负责[组件2描述]。 ... 组件之间的关系如下:
- [组件A] 通过 [协议/方式] 调用/访问 [组件B],进行 [交互内容]。
- [组件C] 向 [组件D] 发送 [消息类型] 消息。 ... 请使用[分层/力导向]布局,让图表清晰易读。”
示例1:微服务电商系统
“请使用架构图工具,为我绘制一个简化的电商微服务架构图。 组件包括:
- 用户浏览器 (类型: browser)
- API网关 (类型: gateway, 使用 Kong)
- 用户服务 (类型: service, 管理用户信息)
- 商品服务 (类型: service, 管理商品目录)
- 订单服务 (类型: service, 处理下单流程)
- 支付服务 (类型: service, 对接支付渠道)
- Redis缓存 (类型: database, 存储会话和热点数据)
- MySQL主数据库 (类型: database, 持久化核心业务数据)
- 消息队列RabbitMQ (类型: queue, 用于服务间异步通信)
关系:
- 用户浏览器向API网关发送HTTP请求。
- API网关将请求路由到对应的微服务(用户、商品、订单、支付)。
- 用户服务和订单服务会读写MySQL。
- 所有服务都从Redis读取缓存。
- 订单创建后,订单服务向支付服务发送支付请求消息(通过RabbitMQ)。
- 支付完成后,支付服务通知订单服务更新状态(通过RabbitMQ)。
希望布局能清晰展示前后端分离和分层,前端和网关一层,微服务一层,数据层一层。”
示例2:数据流水线
“请绘制一个实时数据流水线架构图。 组件:移动App (external)、数据采集服务器 (service)、Apache Kafka (queue)、流处理引擎Flink (service)、数据湖S3 (storage)、分析数据库ClickHouse (database)、BI仪表板 (browser)。 关系:App发送日志到采集服务器,服务器写入Kafka主题,Flink消费Kafka进行实时计算,结果分别写入S3和ClickHouse,BI工具从ClickHouse读取数据展示。 布局使用从左到右的流式布局,体现数据流向。”
注意事项:在描述关系时,尽量使用主动语态和明确的动词(“调用”、“写入”、“发送”、“轮询”),这有助于AI准确理解数据流或控制流的方向。对于复杂的、多对多的关系,可以分步骤描述,或请求AI分图层绘制。
4.3 样式与高级定制
你可能希望生成的图表符合公司的配色规范,或者对某些特定类型的组件使用特殊图标。这通常需要修改MCP服务器的源代码。
- 定位样式配置:在项目源代码中,寻找负责将
component.type映射为Excalidraw图形元素的函数或文件。这里会定义每种type对应的图形形状、默认填充色、边框色、字体等。 - 自定义映射:你可以修改这个映射关系。例如,将所有
type: “database”的组件颜色从蓝色改为青色,或者为type: “kubernetes”添加一个特殊的图标(如果Excalidraw支持嵌入自定义SVG)。 - 布局算法调参:如果项目使用的是力导向布局,你可能会找到诸如
linkDistance(连线理想长度)、nodeStrength(节点间作用力)等参数。调整这些参数可以改变图表的疏密和形状。
// 伪代码示例:在服务器源码中可能存在的样式映射 const componentStyleMap = { service: { shape: ‘rectangle’, backgroundColor: ‘#d4edda’, // 浅绿 strokeColor: ‘#155724’, // 深绿 width: 180, height: 80 }, database: { shape: ‘ellipse’, backgroundColor: ‘#d1ecf1’, // 浅蓝 strokeColor: ‘#0c5460’, width: 160, height: 100 }, queue: { shape: ‘diamond’, backgroundColor: ‘#f8d7da’, // 浅红 strokeColor: ‘#721c24’, width: 120, height: 120 } // ... 其他类型 };实操心得:在深入定制前,最好先使用默认配置生成几次图表,了解其默认风格和布局效果。定制样式后,记得重新构建 (npm run build) 并重启Claude Desktop以使更改生效。这是一个进阶操作,需要对项目代码结构有一定了解。
5. 实战工作流:从设计文档到架构图的自动化
掌握了基本用法后,我们可以将这个工具整合到更实际的工作流中,实现更高程度的自动化。
5.1 场景一:基于Markdown文档自动生成图表
许多技术设计文档是用Markdown写的,其中可能用文字描述了系统架构。我们可以结合简单的脚本,将半结构化的Markdown描述转换为AI能更好理解的提示词。
假设你的设计文档architecture.md中有如下段落:
## 系统组件 - **前端应用 (Frontend)**: Vue.js SPA, 运行在用户浏览器中。 - **API网关 (API Gateway)**: 基于Spring Cloud Gateway,负责路由、鉴权。 - **用户服务 (User Service)**: Spring Boot微服务,管理用户数据。 - **订单服务 (Order Service)**: Spring Boot微服务,处理订单生命周期。 - **商品服务 (Product Service)**: Spring Boot微服务,提供商品信息。 - **MySQL**: 主关系型数据库,存储用户、订单、商品信息。 - **Redis**: 缓存层,存储会话和热点商品数据。 ## 数据流 1. 用户从前端发起请求至API网关。 2. 网关根据路径路由到对应微服务。 3. 各微服务根据需要查询或更新MySQL。 4. 商品服务在读取商品信息时,优先查询Redis缓存,未命中则查MySQL并回填。你可以编写一个简单的脚本(Python/Node.js均可),提取关键名词和动词,并格式化为一个更清晰的提示词:
# 这是一个概念性示例,实际解析Markdown需要更复杂的逻辑 import re # 读取文档内容 with open(‘architecture.md‘, ‘r‘) as f: content = f.read() # 简单提取组件(这里用正则示例,实际可用更专业的Markdown解析器) components_section = re.search(r‘## 系统组件\n(.*?)\n##‘, content, re.DOTALL) if components_section: component_lines = components_section.group(1).strip().split(‘\n‘) components = [] for line in component_lines: if ‘**‘ in line: # 提取加粗文本作为label,括号内文本可能包含类型提示 match = re.search(r‘\*\*(.*?)\*\*‘, line) if match: label = match.group(1) type_hint = ‘service‘ if ‘服务‘ in label else ‘database‘ if ‘MySQL‘ in label or ‘Redis‘ in label else ‘browser‘ if ‘前端‘ in label else ‘gateway‘ components.append(f‘- {label} (类型: {type_hint})‘) # 构建最终提示词 prompt = “请使用架构图工具,根据以下描述绘制架构图:\n\n主要组件:\n” prompt += ‘\n‘.join(components) prompt += “\n\n数据流描述:\n[将数据流部分粘贴到这里]” print(prompt)然后将这个生成的提示词直接粘贴到Claude中执行。这比手动重述要高效得多。
5.2 场景二:与CI/CD集成,可视化部署拓扑
在基础设施即代码(IaC)环境中,你的Terraform或CloudFormation模板定义了整个云资源拓扑。你可以编写一个脚本,在CI/CD流水线中,解析这些模板的输出来生成架构图。
- 提取资源信息:在
terraform apply或aws cloudformation describe-stacks之后,获取生成的资源列表及其类型(如aws_lambda_function,aws_api_gateway_rest_api,aws_dynamodb_table)。 - 映射与转换:将云资源类型映射到架构图工具的
component.type。例如:aws_lambda_function->serviceaws_api_gateway_*->gatewayaws_dynamodb_table->databaseaws_s3_bucket->storageaws_sqs_queue->queue
- 推断关系:通过分析资源间的依赖关系(如Lambda函数的执行角色、环境变量引用的其他资源ARN),推断出组件间的关系。
- 调用MCP服务器:你的CI/CD脚本可以直接通过HTTP(如果MCP服务器暴露了HTTP端点)或模拟MCP客户端的方式,调用
create_architecture_diagram工具,传入结构化数据。 - 保存与发布:将生成的Excalidraw图表保存为JSON文件或图片,作为部署文档的一部分,上传到Wiki或文档站点。
这样,每次基础设施变更后,你都能自动获得一份最新的、可视化的架构拓扑图,对于审计和团队沟通价值巨大。
5.3 场景三:架构评审与迭代
在架构设计评审会议中,excalidraw-architect-mcp可以作为一个实时协作和迭代的工具。
- 快速原型:在讨论初期,用自然语言快速生成一个基础架构草图,作为讨论的视觉锚点。
- 实时修改:当讨论中提出“这里是否需要加一个缓存?”时,你可以直接对AI说:“在用户服务和MySQL之间,增加一个Redis缓存组件,类型是database。用户服务先读缓存,未命中再读MySQL。” AI调用工具后,图表即刻更新。
- 版本对比:将不同讨论阶段的架构图导出保存,可以直观地对比架构的演进过程。
- 生成文档:定稿后的架构图,可以直接从Excalidraw导出为PNG、SVG或保存场景链接,嵌入到最终的设计文档中。
这个工作流将架构设计从静态的、事后的绘图,转变为动态的、贯穿讨论始终的活文档。
6. 常见问题排查与性能调优
在实际使用中,你可能会遇到一些问题。以下是一些常见情况的排查思路和解决建议。
6.1 服务器连接与调用失败
| 问题现象 | 可能原因 | 排查步骤与解决方案 |
|---|---|---|
| Claude提示“未找到可用工具”或完全未提及绘图工具。 | 1. MCP服务器配置错误。 2. Claude Desktop未正确加载配置。 3. 服务器启动失败。 | 1.检查配置文件:确认claude_desktop_config.json路径正确,JSON格式无误,特别是args中的文件路径存在且可执行。2.重启Claude:完全退出Claude Desktop并重新启动。 3.查看日志:Claude Desktop通常有日志文件(在配置目录的 Logs子文件夹内)。查看是否有加载MCP服务器时的错误信息。4.手动测试服务器:在终端中,使用配置中的命令和参数直接运行服务器入口文件(如 node /path/to/index.js),看是否有错误输出。确保所有依赖已安装(npm install)。 |
| Claude识别到工具,但调用时超时或返回错误。 | 1. 服务器脚本存在运行时错误。 2. 工具参数不符合预期,导致服务器处理异常。 3. 网络或权限问题。 | 1.检查服务器日志:如果服务器在终端运行,查看调用时的错误堆栈。 2.简化请求:用一个最简单的架构描述进行测试,排除复杂描述导致的问题。 3.检查参数映射:确认你描述的组件 type是服务器支持的。查看项目文档或源码中的类型映射列表。 |
6.2 生成的图表不符合预期
| 问题现象 | 可能原因 | 排查步骤与解决方案 |
|---|---|---|
| 组件图形不对(如数据库显示为方框)。 | 组件type未正确识别或映射。 | 在指令中明确指定类型,如“一个MySQL数据库,类型为database”。检查服务器源码的componentStyleMap,使用已定义的类型关键词。 |
| 布局混乱,组件重叠严重。 | 1. 组件过多,布局算法达到局部最优而非全局最优。 2. 布局参数不适合当前图形。 | 1.尝试不同布局:在指令中明确指定layout: “force”或layout: “layered”,看哪种效果更好。2.分模块绘制:对于大型系统,不要试图在一张图中显示所有细节。可以分别绘制“整体上下文图”、“核心服务详图”、“数据存储图”。 3.手动调整:利用Excalidraw的优势,自动生成后手动拖动调整布局,这是人机协作的常态。 |
| 连线错乱或缺失。 | AI未能正确解析组件间关系。 | 1.关系描述更清晰:使用“A调用B”、“A向B发送消息”、“A从B读取数据”等明确句式。确保关系两端的组件ID(或标签)在你的描述中完全一致。 2.分步生成:先让AI生成只有组件的图,确认组件都正确后,再通过新的对话,基于现有图添加关系。 |
| 图表过于拥挤,文字看不清。 | 画布大小或元素默认尺寸不合适。 | 1.指令控制:尝试在指令中要求“使用更大的画布”或“让组件之间的间距大一些”。虽然AI不一定能精确控制,但可能影响其传递给布局算法的参数。 2.事后调整:在Excalidraw中全选所有元素,使用缩放工具统一调整大小,或调整画布尺寸。 |
6.3 性能与扩展性考量
- 处理大型架构:当组件数量超过50甚至100个时,自动布局的计算可能变慢,且结果可能难以阅读。建议:遵循“分而治之”原则,按子系统、功能模块或层级拆分绘制多个图表,然后用一个高层次的“系统全景图”来链接它们。
- 自定义图形:如果需要使用Excalidraw库中没有的特殊图标(如特定云服务商的Logo),目前的MCP服务器可能不支持。变通方案:可以先生成基础图表,然后在Excalidraw中手动替换或添加自定义图形元素作为库(Library)的一部分。
- 离线使用:默认可能依赖
excalidraw.com。如果你需要在完全内网环境使用,可以考虑自部署Excalidraw后端,并修改MCP服务器的配置,指向你的内网地址。这需要你对Excalidraw的部署有一定了解。
一个关键的实操心得:将excalidraw-architect-mcp视为一个“架构草图生成器”而非“最终成品图绘制工具”。它的最大价值在于快速将思想可视化,打破讨论初期的空白。生成的草图几乎总是需要一些手动调整来达到完美的表达效果。接受这种“AI生成 + 人工润色”的工作模式,才能最大化其效率提升。
