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

OpenForge MCP の仕組み

OpenForge MCP は、AI クライアントと Unity / Blender / Godot を MCP(Model Context Protocol)で接続するブリッジです。本ページでは、内部アーキテクチャと設計思想を解説します。

全体の通信フロー

AI クライアント            OpenForge MCP サーバー           アプリケーション
(Claude Desktop 等) (Python / stdio or HTTP) (Unity / Blender / Godot)

ユーザーの指示 ──────> MCP リクエスト受信
ツール選択・パラメータ解析 ──────> WebSocket / HTTP 経由で
プラグインが処理を実行
<────── 結果 JSON を返却
<────── AI が結果を
自然言語で応答
  1. ユーザーが AI クライアントに自然言語で指示を送る
  2. AI が MCP ツールを選択し、パラメータを決定する
  3. OpenForge MCP サーバーがリクエストを受信し、対応するアプリケーションへ中継する
  4. アプリケーション側のプラグインがコマンドを実行し、結果を返す
  5. サーバーが結果を AI クライアントに返却し、AI がユーザーに応答する

3 メタツール設計

OpenForge MCP の中核となるのが 3 メタツール設計 です。一般的な MCP サーバーは、すべてのツール(数百個)をそのまま AI に公開します。しかし、AI はツール一覧を毎回コンテキストに含める必要があるため、ツール数が増えるとトークン消費が急激に増加します。

OpenForge MCP では、以下の 3 つのメタツールだけを AI に公開します。

メタツール役割
list_tools利用可能なツールのカテゴリとツール名を一覧取得する
call_tool指定したツールを実行する
get_tool_schema特定ツールのパラメータスキーマを取得する

動作の流れ

AI: "Unity のシーンにキューブを追加して"

1. AI が list_tools を呼び出し → カテゴリ一覧を取得
2. AI が get_tool_schema("create_gameobject") を呼び出し → パラメータを確認
3. AI が call_tool("create_gameobject", {name: "Cube", type: "Cube"}) を呼び出し
4. Unity 側でキューブが生成される

この設計により、AI のコンテキストには常に 3 つのツール定義だけが含まれます。必要なときに必要なツールの情報だけを取得するため、トークン消費を大幅に削減できます。

ツールモードとの関係

3 メタツール設計は Dynamic モード で使用されます。一方、Full モードEssential モード では、ツールを直接公開する従来型の方式も選択できます。詳細は ツールモード を参照してください。

なぜこのアーキテクチャか

トークン効率

AI クライアントは、利用可能なツールの定義をすべてプロンプトに含めます。OpenForge MCP は Unity だけで 100 以上、Blender を含めるとさらに多くのツールを提供します。これらをすべて公開すると、毎回のリクエストで大量のトークンを消費します。

3 メタツール設計では、公開するツール定義が常に 3 つだけなので、ベースのトークン消費が極めて小さくなります。

スケーラビリティ

ツールを追加しても、AI 側のコンテキストサイズは変わりません。新しいカテゴリやツールを自由に追加でき、パフォーマンスに影響しません。

柔軟性

アプリケーションごとにプラグインが独立しているため、Unity・Blender・Godot を同時に接続したり、特定のアプリケーションだけを使うことも可能です。HTTP API モードを使えば、複数の AI クライアントから同時にアクセスすることもできます。

プラグインアーキテクチャ

各アプリケーションには専用のプラグインがインストールされます。

アプリケーションプラグイン形式通信方式
UnityEditor パッケージ (C#)WebSocket
Blenderアドオン (Python)WebSocket
Godotエディタプラグイン (GDScript)WebSocket

プラグインはエディタ内で動作し、シーン操作・アセット管理・スクリーンショット取得などの機能を提供します。MCP サーバーとの通信は WebSocket を使用し、リアルタイムに双方向通信を行います。