メインコンテンツまでスキップ

はじめに

@dineug/erd-editor-mcp は、コーディングエージェントが erd-editor のダイアグラムを編集できるようにする MCP サーバーです。 Claude Code、Codex をはじめとする Model Context Protocol のクライアントは、ドキュメントに対する操作ごとに 1 つのツールを使えます。テーブルの追加、カラム名の変更、2 つのテーブルの関連付け、DDL ダンプの読み込み、SQL としてのスキーマの読み出しなどです。

ドキュメントが VS Code、Obsidian、または JetBrains IDE の ERD Editor で開かれているときは、エージェントは共同編集の参加者のようにエディタに加わります。 変更はその場でキャンバスに現れます。エージェントの Undo は、エージェント自身の編集だけを元に戻します。 VS Code はエージェントかユーザーが保存するまでエージェントの変更を未保存のままにし、Obsidian と JetBrains IDE はユーザー自身の編集と同じようにそれらを保存します。 そのドキュメントを扱うエディタがない場合は、同じツールがファイルそのものを編集します。

VS Code で開いているダイアグラムに、コーディングエージェントがテーブルとリレーションシップを追加する様子

エージェントにできること​

  • 会話しながらスキーマを作成・変更します。テーブル、カラムとすべてのカラムオプション、リレーションシップとそのカーディナリティおよび ON DELETE と ON UPDATE のアクション、インデックス、メモ、色、キャンバス上の位置が対象です。リレーションシップを参照してください。
  • テーブルをテーブルグループにまとめます。指定したテーブルを囲むように、またはキャンバス上の範囲にグループを追加し、その後、名前の変更、色の指定、テーブルと一緒の移動、サイズ変更、テーブルの追加と削除、グループの削除を行います。グループを削除しても、そのテーブルはその場所に残ります。テーブルグループを参照してください。
  • SQL DDL、GraphQL SDL、DBML、AML から解析したスキーマや、別の .erd.json ドキュメントで、ドキュメントを置き換えます。または、エディタの Import and Add と同じように、すでにあるものをすべて残したまま、そのスキーマやドキュメントをダイアグラムの下に追加します。DBML の TableGroup は、どちらの場合もテーブルグループとして取り込まれます。読み込みを参照してください。
  • ダイアグラムを、ID の一覧、エンティティ全体、保存で書き込まれるとおりの .erd.json のテキストとして、または Schema SQL タブの Statements と Header の選択肢を指定して、8 つのデータベースいずれかの DDL として読み出します。数千のテーブルがあるスキーマでは、1 ページずつ、数個のテーブルずつ、または数個のテーブルグループのテーブルずつ読み取ります。ドキュメントの読み取りを参照してください。
  • データベース、データベース名、そして Schema SQL でテーブルの前後に書き出されるスクリプトを設定します。テーブルの前に置く CREATE EXTENSION や、後に置く GRANT などです。erd_read は、スクリプトだけを返すことも、ドキュメント全体の DDL の中に含めて返すこともできます。設定を参照してください。
  • 複数の編集を、すべて適用するか何も適用しないかの 1 つの編集として実行し、1 回の Undo で元に戻せます。erd_batch を参照してください。
  • 自身の編集を Undo・Redo します。ユーザーの編集は対象外です。

できないことは次のとおりです。

  • 拡大・縮小、スクロール、タブの切り替え。これらは各閲覧者に属するため、それを行うツールはありません。ただし、ドキュメントを置き換える読み込みは、エディタの Import と同じように、Viewport がロックされていても表示を動かします。キャンバスの開始位置に 100% で戻るか、erd_import_json の場合は読み込むドキュメントの表示に移り、そのドキュメントが Canvas Type をロックしていなければ、そのタブにも切り替わります。読み込みを参照してください。
  • View Option、Code Generator の言語と名前のケース、括弧の種類、設定タブの Relationship DataType Sync、Maximum comment width、Column Order の変更。これらはユーザーがエディタで設定するもので、エージェントはファイルに保存されているとおりに読み取ります。
  • ロックのオンとオフの切り替え。ロックや上記の設定を変えるのは、ドキュメント全体を置き換える erd_import_json だけで、読み込むドキュメントのロックと設定に変わります。以前のリリースで保存したファイルのように lockSettings フィールドのないドキュメントでは、すべてのロックがオンになります。ドキュメントを置き換えた読み込みを Undo すると、どの読み込みでも、ドキュメントが読み込み前に持っていた設定とロックが戻ります。
  • Map Columns のような、リレーションシップの別のカラムへの対応付け直し。代わりにエージェントは、リレーションシップを削除して(外部キーカラムはその場に残ります)、erd_link_columns で目的のカラムを関連付けます。これを、1 回の Undo で元に戻せる 1 つの erd_batch の中で行います。
  • Code Generator の実行。erd_read は DDL か JSON を返し、エージェントはそこから自分でコードを書きます。

仕組み​

サーバーは、MCP クライアントが起動する stdio プロセスです。 呼び出しのたびに、そのドキュメントを保持しているエディタを探します。ERD Editor の拡張機能またはプラグインを入れた、VS Code のウィンドウ、Obsidian の保管庫のウィンドウ、JetBrains IDE のいずれかです。

  • ライブ — ワークスペース、保管庫、開いているプロジェクトのいずれかにそのドキュメントを含むか、ドキュメントを開いているエディタがある場合です。サーバーはそのエディタの編集セッションに参加し、編集はエディタに反映されます。VS Code では未保存のまま、Obsidian と JetBrains IDE ではユーザー自身の編集と同じように保存されます。
  • ヘッドレス — エディタがない場合です。サーバーはファイルを読み込み、編集を適用して、ファイルに書き戻します。
  • 拒否 — ドキュメントを保持しているエディタはあるものの、そのハブがオフになっている場合です。サーバーはディスクから読み取りますが、何も書き込みません。開いているエディタが次に保存するときに、ファイルを上書きしてしまうおそれがあるためです。エディタのハブはオンでも、その ERD Editor 拡張機能またはプラグインがサーバーと異なるハブのプロトコルを使う場合は、読み取りも含め、そのドキュメントに対するすべての呼び出しが protocolMismatch で拒否され、更新が必要な側を示すメッセージが返ります。アップデートを参照してください。

詳しくはライブとヘッドレスを参照してください。

動作要件​

Node.jsサーバーの実行に 22.12 以降
MCP クライアントClaude Code、Codex、または stdio サーバーを起動できる任意のクライアント
ライブ編集用の VS Code1.101.0 以降と、ERD Editor 拡張機能 4.0.0 以降
ライブ編集用の Obsidianデスクトップアプリ 1.5.7 以降と、ERD Editor プラグイン 1.0.0 以降
ライブ編集用の JetBrains IDEIntelliJ ベースの IDE 2025.2 以降と、ERD Editor プラグイン 1.0.0 以降

サーバー 1.0.0 と上記のリリースは、ハブのプロトコル 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 のプラグインにはハブがないため、サーバーはそれらを認識せず、そこでダイアグラムが開いていても、ディスク上のファイルを編集します。

次はインストールです。