Enterprise Architect について
Enterprise Architect は、Sparx Enterprise Architect の `.qea` エクスポートを扱う AI エージェント向けの読み取り専用 MCP サーバーです。EA の実行インスタンスなしでモデルを検索・閲覧でき、応答には完全性メタデータが含まれます。
主な機能
- 01モデルの全文検索
- 02要素と図の詳細表示
- 03パッケージ階層とコネクターの閲覧
- 04ユースケースシナリオの取得
- 05完全性メタデータ付きのページング
活用シーン
- 01語句やパッケージでモデル要素を検索
- 02ユースケースの手順と注記を確認
- 03関係と図の内容をたどる
- 04結果の切り詰め有無を確認
MCP 対応
MCP クライアントに、`.qea` モデルの検索・閲覧用読み取り専用ツールを提供します。SQLite エクスポートを直接読み込み、EA の実行インスタンスを必要としません。
設定
ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。
ツール
12掲載時のツール一覧 · 3 週間前に更新
| パラメーター | 型 | 必須 | 説明 |
|---|---|---|---|
| limit | integer | いいえ | 返す結果の最大件数(デフォルトは 25) |
| offset | integer | いいえ | 返す最初の結果のゼロ始まりのインデックス(デフォルトは 0)。`continuation` に含まれる offset を指定して再度呼び出すとページを移動できます。 |
| boostAnyOf | array | いいえ | これらの語句も含む結果の順位を上げますが、結果は除外しません。絞り込むには ea_search_and_any_of を使用してください。 |
| objectType | string | いいえ | オブジェクトタイプで絞り込みます(例:Class、UseCase、Activity、Screen、Requirement、Interface、Component)。 |
| stereotype | string | いいえ | ステレオタイプで絞り込みます。 |
| packageScope | any | いいえ | このパッケージとその子孫に結果を限定します。パッケージ ID または名前で指定します。 |
| requiredTerms | array | はい | 各語句は、要素の検索可能なテキスト(名前、ノート、別名、属性、操作、制約)のどこかに含まれている必要があります。語句は同じフィールドにある必要はありません。最大 10 件。 |
詳細
Enterprise Architect MCP サーバー
Sparx Enterprise Architect の .qea エクスポート向けの読み取り専用Model Context Protocol(MCP)サーバーです。実行中の EA インスタンスを必要とせず、AI エージェントが EA の分析モデルにアクセスできます。要素の検索、パッケージの移動、ユースケースのシナリオの読み取り、コネクターのたどり直しが可能です。
あらゆる MCP クライアント(VS Code/GitHub Copilot、Claude Desktop、Cursor、Windsurf)で動作します。.qea SQLite エクスポートを直接読み取り、書き込みは一切行いません。また、すべての応答に完全性メタデータが含まれるため、エージェントは回答が途中で切れているか、完全かを判断できます。
キーワード: MCP サーバー · Sparx Enterprise Architect · .qea · UML · ユースケースのシナリオ · パッケージツリー · コネクター · 図 · モデル検索 · AI エージェント用ツール
前提条件
- Node.js 22+(組み込みの
node:sqliteモジュールを使用) - Sparx Enterprise Architect からエクスポートした
.qeaファイル
インストール
VS Code/GitHub Copilot
最も手早い方法は、このページ上部にある Install in VS Code バッジを使うことです。入力するものはありません。エージェントが初めてモデルを照会したときに、サーバーが .qea のパスを尋ね、次回のために回答を記憶します。
代わりにターミナルから登録する場合は、スクリプト作成や共有セットアップに便利な、次の CLI 呼び出しを使います。
code --add-mcp '{\"name\":\"enterprise-architect\",\"command\":\"npx\",\"args\":[\"-y\",\"enterprise-architect-mcp\"]}'
\" のシーケンスは code シム用です。PowerShell が引数を渡した後に、シムがその引数を再解析するためです。PowerShell 独自のバッククォートでエスケープしても、--% を使っても、引用符は取り除かれた状態で渡されます。シングルクォートを使うと、PowerShell に文字列を処理されずに済みます。bash または zsh では、次の通常の形式が使えます。
code --add-mcp '{"name":"enterprise-architect","command":"npx","args":["-y","enterprise-architect-mcp"]}'
手動で設定する場合は、プロジェクトの .vscode/mcp.json に次の内容を追加します。
{
"servers": {
"enterprise-architect": {
"type": "stdio",
"command": "npx",
"args": ["-y", "enterprise-architect-mcp"]
}
}
}
このファイルに個人情報は含まれないため、そのままコミットでき、各開発者が自分のマシンで一度だけプロンプトに回答できます。プロンプトを一切表示させたくない場合は、末尾の引数、env ブロック、またはワークスペースのルートにある Git の無視対象 .env で、あらかじめパスを指定します。
EA_QEA_PATH=C:\EA\exports\model.qea
Claude Desktop
パスを指定しない同じ設定を claude_desktop_config.json(Windows では %APPDATA%\Claude\、macOS では ~/Library/Application Support/Claude/)に記述します。
{
"mcpServers": {
"enterprise-architect": {
"command": "npx",
"args": ["-y", "enterprise-architect-mcp"]
}
}
}
Claude Desktop はワークスペースフォルダーからサーバーを実行しないため、そこに置いた .env は確実には機能しません。クライアントがパスのプロンプトをまったく表示できない場合、サーバーは黙って失敗せず、その旨を伝えます。その場合は、env ブロックでパスを指定できます。
"env": { "EA_QEA_PATH": "C:\\EA\\exports\\model.qea" }
npm の代わりにソースから直接実行するには、"args": ["-y", "github:mm6502/enterprise-architect-mcp"] を使用します。
プロンプトの例
接続したら、次のようなプロンプトを試してみてください。
- 「‘legal entity’に関連する要素を検索して」
- 「ルート配下のパッケージ構造を表示して」
- 「UC_SUBMIT_APPLICATIONのユースケースシナリオは?」
- 「0103 Application Processing図には、どの要素とコネクターがありますか?」
- 「参照{3F2A7C10-5B4D-4e8a-9C1F-27D6E8B0A4F3}を解決して」
- 「t_connectorにはどの列がありますか?」
- 「要素a7680はどの図に表示されますか?」
設定
サーバーの起動にパスは必要ありません。エージェントが最初にモデルをクエリしたときにパスを探し、実際に開けた最初のソースを使用します。
- CLI引数 —
mcp-server-ea C:\path\to\model.qea - 環境変数 —
EA_QEA_PATH(envブロックまたはシステム環境変数に設定) .envファイル — 作業ディレクトリにある.envファイル内のEA_QEA_PATH=...- 記憶された回答 — プロンプトに最後に伝えた内容
- プロンプト — クライアントが尋ね、使用可能な回答が次回のために記憶されます
プロンプトを表示させたくない場合(CIジョブ、共有イメージ、または単に好みによる場合)は、作業ディレクトリにあるGitの追跡対象外の.envにパスを記述します。テンプレートをコピーしてください。
Copy-Item .env.example .env
次に、.envにローカルのパスを設定します。
EA_QEA_PATH=C:\EA\exports\model.qea
パスがファイルではなくディレクトリを指している場合、サーバーは更新日時が最も新しい.qeaファイルを自動的に選択します。エクスポートフォルダーを指定すれば、再設定しなくても新しいエクスポートが使用されます。
EA_QEA_PATH=C:\EA\exports\
.envファイルはGitの追跡対象外です。各開発者が共有設定に影響を与えずに自分のパスを設定できます。また、コミットされることもありません。そのため、新しいユーザーは手動で設定する必要があります。プロンプトに一度回答すれば、手動での設定は不要になります。
開けないパスを指定したソースは、致命的なエラーにするのではなくスキップされ、次のソースが試されます。理由はサーバーログに記録され、後続のソースが開けた場合、ea_get_model_infoのskippedに表示されます。これは意図的な動作です。envブロックにサンプル値が残っていると、ほかのどの回答よりも優先され、プロンプトに回答しても役に立たなくなるためです。その代わり、実際の入力ミスも通知されずに後回しになるため、サーバーが想定と異なるモデルを開いた場合はea_get_model_infoを確認してください。
スキップが有効なのは、スキップされたソースの代わりに別の回答を使用できる場合だけです。そのため、次の2つのケースは致命的なエラーになります。コマンドラインで渡したパス(古い既定値ではなく、今回の実行に対する明示的な指示です)と、プロンプトを表示できないクライアントでの無効なソースです。後者の場合、処理を続行すると、ユーザーに通知する代わりに別のモデルを知らないうちに開いてしまうためです。
回答はマシンごとに記憶されます。Windowsでは%APPDATA%\enterprise-architect-mcp\、macOSでは~/Library/Application Support/enterprise-architect-mcp/、それ以外では$XDG_CONFIG_HOME(または~/.config)に保存されます。別の場所に保存するには、EA_MCP_CONFIG_DIRを設定してください。開けないパスは記憶されないため、入力を間違えた場合はもう一度尋ねてもらうだけで修正できます。
利用可能なツール
| ツール | 説明 |
|---|---|
ea_search | 要素、属性、操作、制約を全文検索します。requiredTerms を受け取ります。これは、要素の検索可能なテキストのどこかにすべて含まれている必要がある語句のリストです(AND 条件)。語句は同じフィールドに含まれている必要はありませんが、同じフィールドに含まれている場合は、より高い順位になります。boostAnyOf は任意の追加語句のリストで、結果から除外することなく順位を上げます。欧文ラテン文字について、大文字と小文字、ダイアクリティカルマークを区別せず、エンティティエンコードされたテキストをデコードします。各結果には、照合の根拠となるフィールド、該当する属性または操作、作成者自身のテキストの抜粋が含まれます。packageScope(パッケージ ID または名前)を指定すると、結果をそのパッケージとその子孫に限定できます。スコープを指定しない場合は、パッケージ別の内訳も報告します。 |
ea_search_and_any_of | ea_search と同じ照合を行い、さらに andAnyOf を受け取ります。これは任意の語句リストで、結果は requiredTerms および andAnyOf の語句のうち少なくとも 1 つを満たす必要があります。これは順位の変更ではなく、検索結果の絞り込みに使います。代替語句によって結果を除外する必要がある場合は、ea_search ではなくこちらを使用してください。 |
ea_get_element | 要素の詳細情報をすべて返します。属性、操作、要素が含まれる図、制約(事前条件/事後条件/不変条件/プロセス)が含まれます。属性の多重度に対照性があるかどうかを示します。 |
ea_list_elements | パッケージ内の要素を一覧表示します。必要に応じて型で絞り込めます。ウィンドウ表示形式で、合計件数と offset によるページ情報を返します。 |
ea_get_connectors | 要素の関係を返します。フィーチャーリンクの解決結果(各端が接続されている属性/操作)も含まれます。Generalization コネクターでは、各端に role(child/parent)が含まれます。connectorType: "Generalization" と direction: "incoming"/"outgoing" で絞り込むと、図を使わずに要素の直接の子/親を一覧表示できます。 |
ea_get_diagram_elements | 図上の要素とコネクターを返します。暗黙のコネクターとフィーチャーリンクも含まれます。elements には自由記述の Note 図オブジェクトも含まれます。凡例や略語の定義が記載されていることがよくあります。 |
ea_get_scenarios | ユースケースのシナリオ手順を、すべての属性(トリガー、使用するもの、結果、リンク、状態)およびシナリオの注記とともに返します。手順の uses に業務ルールまたは制約のコードが記載される場合があります。そのコード自体は独立して検索できず、同じ要素に対して ea_get_element を使用して取得します。 |
ea_get_package_tree | 再帰的な深さを指定して、パッケージ階層をたどります。 |
ea_list_diagrams | 名前、型、パッケージで図を検索します。上記のツールと同様のウィンドウ表示形式です。 |
ea_resolve | アナリストの参照(中括弧で囲まれた GUID または名前)を、完全なパッケージパスを含むモデル候補に解決します。アナリストコードの場合は名前の前方一致にフォールバックします。各候補には guid、exact、prefix のいずれかの match が含まれます。 |
ea_get_schema | モデルのデータベーススキーマ(テーブル、列、インデックス、rowid エイリアス)を調べます。 |
ea_get_model_info | 開いているエクスポートの識別情報(ファイル名、サイズ、変更日、サーバーバージョン、パスの設定元)を返します。 |
レスポンスの仕様
すべてのツールは、次の情報を含む構造化 JSON を返します。
_meta.sourceTables— 参照したデータベーステーブルtotalMatched/returned/truncated— 各コレクションの完全性に関するメタデータcontinuation— 結果が切り詰められた場合に、全件を取得するための正確な呼び出し- 存在しない対象には
isError: trueと{ error: "not_found" }(空の結果とは区別されます)
不正確な回答が確定した回答として受け取られないよう、次の 2 つのフィールドを用意しています。
ea_resolve—matchは常に存在します。不正確な一致はprefixのみです。ea_get_element—_meta.attributes.multiplicityIsUniform: trueは、要素の属性に多重度の対照性がないことを意味します。そのため、1..1は必須であることの根拠にはなりません。
結果の並べ替え、ページ分割、絞り込みの方法
名前の並び順
照合はロケールに依存しません。検索ではヨーロッパのラテン文字の大文字・小文字とダイアクリティカルマークを区別しないため、Straße、Łódź、Győr は、どのように入力した場合でも、またはエンティティとしてエンコードした場合でも見つかります。
列挙ツールである ea_search、ea_list_elements、ea_list_diagrams は、名前順には並べ替えません。モデルの内部識別子順に並べ替えます。これは安定していて再現可能ですが、人為的な順序であり、どの行が次に続くかに意味はありません。これは意図的なトレードオフです。SQLite のバイナリ照合順序でアルファベット順に並べ替えると、アクセント付きの文字で始まる名前はすべて Z より後に配置されます。また、これらのツールは全件ではなくウィンドウを返すため、単にリストの順序が変わるだけではなく、アクセント付きの名前がウィンドウから完全に押し出されてしまいます。実際のエクスポートで測定したところ、アクセント付きの文字で始まる名前は、全名前の3.9%を占めるモデルで、バイナリ順では表示枠の1.3%を占めたのに対し、識別子順では3.0%を占めました。
引き続きロケール順で名前を並べ替えるのは ea_get_scenarios だけです。このツールでは常に全件が返され、名前が切り捨てられることはありません。EA_LOCALE を env ブロックまたはシステム環境変数で BCP 47 タグ(sk、pl、hu、de、…)に設定すると、並べ替えに使うロケールを固定できます。未設定の場合は、ホストのデフォルトが適用されます。この設定は照合には影響しません。
ページングと絞り込み
列挙ツールが返すのはサンプルではなくウィンドウです。各レスポンスには totalMatched、returned、offset、truncated が含まれ、残りの行がある場合は、次の呼び出しを示す continuation が含まれます。これを繰り返し使用すると、一致するすべての項目を一度ずつ確認して処理を完了できます。大量のデータを読む際に limit を大きくするのではなく、offset を進めてください。
一致する行数がウィンドウに収まる量を大幅に超える場合、レスポンスには分布を示す breakdown も含まれます。キーはパラメーター名、値は引数の値です。そのため、breakdown は何千もの行をページングするのではなく、objectType、stereotype、diagramType、または、まだスコープが設定されていない ea_search の場合は packageScope(一致するパッケージの ID として報告され、次の呼び出しにそのまま渡せます)で絞り込むための手がかりになります。
ライセンス
Copyright (c) 2026 Michal Mracka
EUPL の下でライセンスされています。全文は LICENSE をご覧ください。
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。