简介
@dineug/erd-editor-mcp 是一个让编码智能体编辑 erd-editor 图的 MCP 服务器。
Claude Code、Codex 以及其他任何 Model Context Protocol 客户端,都会为文档上的每种操作获得一个工具:添加表、重命名列、关联两个表、导入 DDL 转储、以 SQL 形式读回 schema。
当文档在 VS Code、Obsidian 或 JetBrains IDE 的 ERD Editor 中打开时,智能体会像协作者一样加入编辑器。 每处变更都会在发生的同时出现在画布上,而智能体的 Undo 只会撤回它自己的编辑。 VS Code 会让智能体的变更在智能体或你保存之前一直保持未保存状态,而 Obsidian 和 JetBrains IDE 会像保存你自己的编辑一样保存它们。 没有编辑器持有该文档时,同样的工具会直接编辑文件本身。

智能体能做什么
- 在对话中构建或修改 schema:表、列及所有列选项、关系及其基数和 ON DELETE 与 ON UPDATE 操作、索引、备注、颜色,以及在画布上的位置。参见关系。
- 将表归入表分组:围绕它指定的表或在画布的某个区域上添加分组,然后重命名分组、为其着色、连同其中的表一起移动、调整其大小、把表放入或移出分组,或者删除分组,删除后其中的表会留在原处。参见表分组。
- 用从 SQL DDL、GraphQL SDL、DBML 或 AML 解析出的 schema,或者用另一个
.erd.json文档替换当前文档。也可以像编辑器的Import and Add那样,把该 schema 或文档添加到图的下方,并保留图中已有的一切。无论哪种方式,DBML 的TableGroup都会成为表分组。参见导入。 - 以 id 列表、完整实体、保存时写出的
.erd.json文本,或八种数据库中任意一种的 DDL 的形式读回图,DDL 可使用 Schema SQL 标签页中的Statements与Header选项。在包含数千个表的 schema 上,它每次只读取一页、几个表,或几个表分组中的表。参见读取文档。 - 设置数据库、数据库名称,以及 Schema SQL 中写在各表之前和之后的脚本,例如写在表之前的
CREATE EXTENSION或写在表之后的GRANT。erd_read可以单独给出这些脚本,也可以在整个文档的 DDL 中一并给出。参见设置。 - 把多次编辑作为一次编辑执行,要么全部生效,要么全部不生效,一次 Undo 即可撤回。参见 erd_batch。
- Undo 与 Redo 它自己的编辑,而绝不会动你的编辑。
它不做的事:
- 缩放、滚动或切换标签页。这些属于每位查看者,因此没有任何工具会这样做。不过,替换文档的导入仍会移动视图,即使
Viewport已锁定也是如此,与编辑器的Import相同:视图回到画布的起点并恢复为 100%;使用erd_import_json时,则移到它所加载文档的视图,并且除非该文档锁定了Canvas Type,还会切换到该文档的标签页。参见导入。 - 更改
View Option、Code Generator 的语言与名称大小写、括号类型,或者 Settings 标签页中的Relationship DataType Sync、Maximum comment width和Column Order。这些由你在编辑器中设置,智能体读取到的是文件所保存的值。 - 开启或关闭锁定。只有替换整个文档的
erd_import_json会改变锁定或上述设置,使其变为所加载文档中的值。没有lockSettings字段的文档(例如较早版本保存的文件)会开启所有锁定。对任何替换了文档的导入执行 Undo,都会恢复文档之前的设置和锁定。 - 像
Map Columns那样把关系重新映射到其他列上。智能体的做法是删除该关系(其外键列会保留在原处),再用erd_link_columns关联它想要的列,这些都在一次erd_batch中完成,一次 Undo 即可撤回。 - 运行 Code Generator。
erd_read返回 DDL 或 JSON,智能体会据此自行编写代码。
工作原理
服务器是由 MCP 客户端启动的 stdio 进程。 每次调用时,它都会查找持有该文档的编辑器:VS Code 窗口、Obsidian 仓库窗口或 JetBrains IDE,且各自安装了 ERD Editor 扩展或插件。
- 实时模式:某个编辑器的工作区、仓库或某个已打开的项目包含该文档,或者该编辑器已打开该文档。服务器加入该编辑器的编辑会话,编辑落在编辑器中:在 VS Code 中处于未保存状态,在 Obsidian 和 JetBrains IDE 中则像你自己的编辑一样被保存。
- 无头模式:没有编辑器。服务器加载文件、应用编辑,然后把文件写回。
- 拒绝编辑:有编辑器持有该文档,但其 hub 已关闭。服务器会从磁盘读取,但不写入任何内容,因为打开的编辑器下次保存时可能会覆盖该文件。如果编辑器的 hub 已开启,但其 ERD Editor 扩展或插件所用的 hub 协议与服务器不同,则针对该文档的每次调用都会以
protocolMismatch被拒绝,读取也不例外,并附带一条指出需要更新哪一方的消息,参见更新。
详情参见实时与无头模式。
环境要求
| Node.js | 22.12 或更高版本,用于运行服务器 |
| MCP 客户端 | Claude Code、Codex,或任何能够启动 stdio 服务器的客户端 |
| VS Code(用于实时编辑) | 1.101.0 或更高版本,并安装 4.0.0 或更高版本的 ERD Editor 扩展 |
| Obsidian(用于实时编辑) | 1.5.7 或更高版本的桌面应用,并安装 1.0.0 或更高版本的 ERD Editor 插件 |
| JetBrains IDE(用于实时编辑) | 2025.2 或更高版本的基于 IntelliJ 的 IDE,并安装 1.0.0 或更高版本的 ERD Editor 插件 |
服务器 1.0.0 与上面的发布版本使用 hub 协议 2。
为智能体提供服务的更早发布版本使用协议 1:VS Code 扩展 3.0.0 至 3.1.0、Obsidian 插件 0.1.0 和 0.2.0,以及 JetBrains 插件 0.9.0 和 0.10.0。
这类发布版本与服务器 1.0.0 会互相拒绝,更早的服务器与上面的发布版本同样会互相拒绝,参见更新。
3.0.0 之前的 VS Code 扩展或 0.9.0 之前的 JetBrains 插件没有 hub,因此服务器看不到它,会直接编辑磁盘上的文件,即使是在其中打开的图也一样。
下一步:安装。