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

はじめに

@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 のアクション、インデックス、メモ、色、キャンバス上の位置が対象です。リレーションシップを参照してください。
  • テーブルをテーブルグループにまとめます。指定したテーブルを囲むように、またはキャンバス上の範囲にグループを追加し、その後、名前の変更、色の指定、テーブルと一緒の移動、サイズ変更、テーブルの追加と削除、グループの削除を行います。グループを削除しても、そのテーブルはその場所に残ります。テーブルグループを参照してください。
  • エディタの辞書タブの単語と用語からテーブルとカラムに名前を付け、カラムをそのドメインに紐付けて、データ型を与えます。テーブルとカラムの論理名を設定すると、エディタと同じように辞書がそこから物理名を生成します。ただし、手で書いた物理名は、空でない限りそのまま残ります。ドメイン、単語、用語の追加、変更、削除を行い、単語や用語が変わった後には、1 つのカラム、1 つのテーブル、またはドキュメント全体の物理名を再生成します。タブの Checks シートが検出するものも一覧にします。禁止語、未登録の単語、同義語、1 つの辞書の 2 つの行が共有する名前、ドキュメントに登録されていないドメインへの紐付け、用語が与えるものとは異なる物理名、ドメインのデータ型から外れたカラムです。辞書と辞書のチェックを参照してください。
  • SQL DDL、GraphQL SDL、DBML、AML から解析したスキーマや、別の .erd.json ドキュメントで、ドキュメントを置き換えます。または、エディタの Import and Add と同じように、すでにあるものをすべて残したまま、そのスキーマやドキュメントをダイアグラムの下に追加します。DBML の TableGroup は、どちらの場合もテーブルグループとして取り込まれます。スキーマでドキュメントを置き換えた場合はドキュメントの辞書が残り、別のドキュメントで置き換えた場合はそのドキュメントの辞書が持ち込まれ、追加の場合は辞書は何も持ち込まれません。読み込みを参照してください。
  • ダイアグラムを、論理名と辞書の行も含めて、ID の一覧、エンティティ全体、保存で書き込まれるとおりの .erd.json のテキストとして読み出します。または、Schema SQL タブの Statements と Header の選択肢と Write logical names into empty comments のスイッチを指定して、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 をロックしていなければ、そのタブにも切り替わります。読み込みを参照してください。
  • 名前の表示の Physical Names、Logical Names、Both Names の切り替え。名前の表示は、新しいダイアグラムと同じようにロックがオンの間は各閲覧者に属し、ロックがオフになればユーザーがエディタで選ぶものになるため、それを行うツールはありません。エージェントは、表示にかかわらず論理名を読み書きします。ドキュメントを置き換える erd_import_json が、読み込むドキュメントの名前の表示を持ち込むのは、そのドキュメントの Name View のロックがオフの場合だけです。
  • View Option、Code Generator の言語と名前のケース、括弧の種類、設定タブの Relationship DataType Sync、Maximum comment width、Column Order の変更。これらはユーザーがエディタで設定するもので、エージェントはファイルに保存されているとおりに読み取ります。
  • ロックのオンとオフの切り替え。ロックや上記の設定を変えるのは、ドキュメント全体を置き換える erd_import_json だけで、読み込むドキュメントのロックと設定に変わります。4.0.0 より前の VS Code の拡張機能や、1.0.0 より前の Obsidian または JetBrains のプラグインで保存したファイルのように lockSettings フィールドのないドキュメントでは、すべてのロックがオンになります。ドキュメントを置き換えた読み込みは、どれを Undo しても、ドキュメントが読み込み前に持っていた設定とロックが戻ります。
  • Map Columns のような、リレーションシップの別のカラムへの対応付け直し。代わりにエージェントは、リレーションシップを削除して(外部キーカラムはその場に残ります)、erd_link_columns で目的のカラムを関連付けます。これを、1 回の Undo で元に戻せる 1 つの erd_batch の中で行います。
  • 辞書タブで行う、CSV での辞書の読み込みと書き出し、シートの並べ替え、ある行の上や下への行の挿入。エージェントは行の追加、変更、削除を行い、1 つの erd_batch で多数の行をまとめて扱うこともできます。新しい行はそのシートの末尾に追加されます。
  • Code Generator の実行。erd_read は DDL か JSON を返し、エージェントはそこから自分でコードを書きます。

仕組み​

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

  • ライブ — ワークスペース、保管庫、開いているプロジェクトのいずれかにそのドキュメントを含むか、ドキュメントを開いているエディタがある場合です。サーバーはそのエディタの編集セッションに参加し、編集はエディタに反映されます。VS Code では未保存のまま、Obsidian と JetBrains IDE ではユーザー自身の編集と同じように保存されます。
  • ヘッドレス — エディタがない場合です。サーバーはファイルを読み込み、編集を適用して、ファイルに書き戻します。
  • 拒否 — ドキュメントを保持しているエディタはあるものの、そのハブがオフになっている場合です。サーバーはディスクから読み取りますが、何も書き込みません。開いているエディタが次に保存するときに、ファイルを上書きしてしまうおそれがあるためです。ハブがオンの 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 のプラグインにはハブがないため、サーバーはそれらを認識せず、そこでダイアグラムが開いていても、ディスク上のファイルを編集します。

論理名、ドメイン、辞書のツールには、サーバー 1.1.0 以降と、ドキュメントが開かれているすべての環境で、少なくとも VS Code の拡張機能 4.2.0、または Obsidian か JetBrains のプラグイン 1.2.0 が必要です。 上記のリリースのうち、4.2.0 より前の拡張機能や 1.2.0 より前のプラグインは、プロトコル 2 を使うためエージェントのライブ編集を引き続き受け付けますが、エージェントが書き込む論理名、ドメインの紐付け、辞書の行は無視し、ファイルを保存するときにはそれらを含めません。 ディスク上のファイルを編集する 1.1.0 より前のサーバーは、論理名、ドメインの紐付け、辞書の行なしでファイルを書き戻します。アップデートを参照してください。

次はインストールです。