FunseaAI Unity MCP について
提供された README では、FunseaAI Unity MCP は Funplay MCP for Unity として紹介されており、Unity パッケージとローカル MCP サーバーで AI アシスタントを起動中の Unity プロジェクトに接続します。記載された機能には、シーンやスクリプトの作成、実行時検証、入力シミュレーション、性能分析、エディター自動化があります。
主な機能
- 01Unity シーンの作成と編集
- 02スクリプト生成
- 03実行時の動作検証
- 04入力シミュレーション
- 05性能分析とエディター作業の自動化
- 06Unity から MCP クライアントを設定
活用シーン
- 01自然言語の依頼からゲームシーンを構築
- 02Unity プロジェクトのスクリプトを生成して検証
- 03AI アシスタントで実行中のエディタープロジェクトを調査
MCP 対応
Unity パッケージがローカル MCP サーバーを起動し、設定可能な core または full のツール、プロジェクトコンテキストのリソース、実行機能を MCP クライアントに公開します。プロジェクト別エンドポイントとワンクリックのクライアント設定に対応しています。
設定
ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。
このサーバーのパッケージやリモートエンドポイントはまだ取得できていません。プロジェクトの README の手順に従ってください。
ツール
ローカルサーバーのツールはマシン上で起動して初めて取得できます。メンテナーはまだツール一覧を提供していません。
詳細
Funplay MCP for Unity
Unity Editor 向けの最先端 MCP サーバー
中国語 | 英語
💖 このプロジェクトが役に立ったと思ったら、ぜひ Star を付けてください。より多くの Unity 開発者にこのプロジェクトを知ってもらい、継続的な開発の支援にもつながります。
Funplay MCP for Unity は、MIT ライセンスの Unity Editor 用 MCP サーバーです。Claude Code、Cursor、Kimi Code、LM Studio、Windsurf、Codex、VS Code Copilot などの AI アシスタントが、実行中の Unity プロジェクト内で直接操作できるようにします。
ゲームの内容を一文で説明するだけで、AI アシスタントが Funplay MCP for Unity に組み込まれたシーン作成、スクリプト生成、ランタイム検証、入力シミュレーション、パフォーマンス分析、エディター自動化のツールを使って、Unity 上にゲームを構築します。
「10×10 のグリッド、食べ物の出現、スコア UI、ゲームオーバー画面を備えたスネークゲームを作って」
AI アシスタントは Funplay MCP for Unity を使ってシーンを作成し、すべてのスクリプトを生成して、UI を設定し、ゲームロジックを構成します。すべて、ひとつのプロンプトから実行できます。
16 秒のデモ — AI が 3D モデルを生成し、シーンに最初から最後まで組み込みます。HD MP4 を視聴。
クイックスタート
すぐに接続したい場合は、次の 3 つを実行してください。
- Git URL から Unity パッケージをインストールする
Funplay > MCP Serverを起動する- 組み込みのワンクリッククライアント設定を使う
1. UPM 経由でインストール(Git URL)
Unity で Window → Package Manager → + → Add package from git URL を選択します。
https://github.com/FunplayAI/funplay-unity-mcp.git
💡 クローンまたはインストールする前に、GitHub で ⭐ を付けていただけると大変うれしいです。
オプション:OpenUPM 経由でインストール
Unity Package Manager にレジストリから取得したパッケージのバージョン履歴を表示し、バージョンを選択できるようにしたい場合は、Git ではなく OpenUPM からインストールしてください。
OpenUPM CLI を使う場合:
openupm add com.gamebooom.unity.mcp
または、Packages/manifest.json にスコープ付きレジストリを手動で追加します。
{
"scopedRegistries": [
{
"name": "OpenUPM",
"url": "https://package.openupm.com",
"scopes": [
"com.gamebooom"
]
}
],
"dependencies": {
"com.gamebooom.unity.mcp": "0.7.2"
}
}
以前に Git URL からインストールしている場合は、先に Git 依存関係を削除してから OpenUPM からインストールしてください。Git からインストールしたパッケージでは、Unity に解決済みの Git バージョンのみが表示され、レジストリに基づく「Version History」の一覧は表示されません。
2. MCP サーバーを起動する
Funplay → MCP Server を選択して、サーバーを起動します。
新しいプロジェクトには、プロジェクトパスから割り当てられる専用ポートが設定されます。そのため、異なるプロジェクトを開いた2つのエディターが同じポートを取り合うことはありません。MCP Server ウィンドウには正確な URL(http://127.0.0.1:<port>/mcp/project/<project-id>/)が表示され、ワンクリック設定でその URL が書き込まれます。Server Port にポートを入力すると固定できます(CI、ファイアウォールルールなど)。代わりに、Use Per-Project Port を選択すると、プロジェクトごとにポートが割り当てられます。
アップグレード後も既存の固定ポートは維持されますが、v0.7.1 では生成される URL がプロジェクトに紐づけられます。古いルート URL は引き続き読み取り可能ですが、書き込みには検証済みの expected_context が必要です。既存の青い Skills 通知カードで Reconfigure MCP + Skills を再実行してクライアントを再接続するか、独立して検証された対象の Editor からガードを明示的に渡してください。そのプロジェクトを別のエディターと並行して実行する場合は、Use Per-Project Port をクリックしてください。詳しい設定方法は、複数の Unity プロジェクトを同時に実行するを参照してください。
ウィンドウにフォールバックポートが表示された場合、使用中の固定ポートを引き続き指定するクライアント設定は使わないでください。そのポートを所有するプロセスに接続される可能性があります。Use Per-Project Port または Pin Current Port をクリックし、サーバーの再起動が完了するまでは、ワンクリック設定はブロックされます。
デフォルトのトランスポートは、プロセス内で直接通信する HTTP です。Unity のスクリプト再コンパイルや Play Mode のドメインリロードをまたいだ接続をより確実に維持する必要がある場合は、MCP Server ウィンドウで Experimental Broker Mode を有効にしてください。Unity に同梱された Mono で小規模なローカルブローカーを実行し、MCP クライアントには同じ 127.0.0.1 ポートを維持します。クライアント設定を変更する必要はありません。
core または full が公開するツールを正確に編集する場合は、Funplay → Tool Exposure を開いてください。
execute_code の安全性に関するデフォルト設定や、プラグインのデバッグログを調整する場合は、Funplay → MCP Settings を開いてください。
3. AI クライアントを設定する
まず、Funplay > MCP Server ウィンドウに組み込まれている One-Click MCP Configuration を使用してください。
対象のクライアントを選択して Configure をクリックすると、推奨される MCP 設定項目がパッケージによって書き込まれます。
Claude Code、Cursor、Codex、OpenCode、DeepSeek Harness の場合は、Configure + Skills をクリックすると、組み込みのプロジェクトスキルも両方インストールされます。
現在の Unity プロジェクト向けのプロジェクト固有の AI ガイダンスを設定する場合は、Funplay → Project Skills を開いて、対応プラットフォームを選択し、組み込みの unity-mcp-workflow と unity-ui-composition スキルをインストールしてください。UI スキルでは、レスポンシブな縦向きおよび横向きの uGUI 作業を扱います。
バージョン 0.7.0 では、これら2つの組み込みスキルを維持したまま、Unity 公式プラグイン 0.1.8-betaを参考に、タスク別のリファレンスを4つ追加しました。UI フレームワークの選定、安全な Sprite インポーターの編集、TMP/ローカライズの検証、パッケージの準備状況に関する内容です。エージェントはタスクに関連するリファレンスのみを読み込みます。デフォルトのツールや追加のスキルは追加されません。MCP 優先の運用、プロジェクトの規約、プレハブの保持、デザインの忠実性が引き続き優先されます。既存のインストールを更新するには、Project Skills を使用してください。リファレンスが見つからない場合や古い場合も、スキル更新通知が表示されます。ユーザーが所有するリファレンスファイルは上書きされません。
バージョン 0.7.1 では、両方の組み込みスキルに実行信頼性に関するガイダンスが追加されました。プロジェクト ID、実際のフレーム進行、厳格な入力経路、所有する検証処理のクリーンアップ、Unity の操作を妨げるネイティブダイアログの条件付き処理などが含まれます。共通の青いセットアップカードでは、MCP と Skills の問題がまとめて報告され、Reconfigure MCP + Skills から再設定できます。一方の問題を解決しても、もう一方の問題はそのまま維持されます。実行信頼性と移行を参照してください。
設定ファイルを手動で編集する場合は、以下の例を参考にしてください。<project> をこのプロジェクトのエントリー名に、<port> をポート番号に、<project-id> をバインド済み URL 全体に含まれる ID に置き換えてください。これらは別の Editor ではなく、MCP Server ウィンドウからコピーしてください。
Claude Code / Claude Desktop
{
"mcpServers": {
"funplay-<project>": {
"type": "http",
"url": "http://127.0.0.1:<port>/mcp/project/<project-id>/"
}
}
}
Cursor
{
"mcpServers": {
"funplay-<project>": {
"url": "http://127.0.0.1:<port>/mcp/project/<project-id>/"
}
}
}
LM Studio
LM Studio の mcp.json の場所は、バージョンやプラットフォームによって異なる場合があります。LM Studio の Program > Install > Edit mcp.json を使用してください。Funplay のワンクリック Configure ボタンは LM Studio の lmstudio://add_mcp リンクを開き、推測したパスにファイルを作成するのではなく、既存の設定ファイルがある場合にのみ更新します。
{
"mcpServers": {
"funplay-<project>": {
"url": "http://127.0.0.1:<port>/mcp/project/<project-id>/"
}
}
}
VS Code
{
"servers": {
"funplay-<project>": {
"type": "http",
"url": "http://127.0.0.1:<port>/mcp/project/<project-id>/"
}
}
}
Trae
{
"mcpServers": {
"funplay-<project>": {
"url": "http://127.0.0.1:<port>/mcp/project/<project-id>/"
}
}
}
Kiro
{
"mcpServers": {
"funplay-<project>": {
"type": "http",
"url": "http://127.0.0.1:<port>/mcp/project/<project-id>/"
}
}
}
Kimi / Kimi Code
現在の Kimi Code リリースでは、プロジェクトレベルの MCP サーバーを .kimi-code/mcp.json から読み込みます(公式 MCP ドキュメント)。Funplay のワンクリック Configure はここに書き込むため、現在の Unity サーバーはこのプロジェクトで開始した Kimi セッションからのみ参照できます。マシンに旧式の Kimi CLI データディレクトリしかない場合は、互換性のあるユーザーレベルの ~/.kimi/mcp.json に書き込みます。設定後、Unity プロジェクトのルートから新しい Kimi セッションを開始してください。初回使用時はループバック URL を確認し、ワークスペースを信頼してください。生成されるプロジェクトファイルには、このマシンのローカルポートが含まれるため、チームでポートを固定して共有することを意図している場合を除き、通常はコミットしないでください。
{
"mcpServers": {
"funplay-<project>": {
"url": "http://127.0.0.1:<port>/mcp/project/<project-id>/"
}
}
}
Codex
[mcp_servers.funplay-<project>]
url = "http://127.0.0.1:<port>/mcp/project/<project-id>/"
OpenCode
リポジトリ専用の .opencode/opencode.json に書き込まれます(グローバル設定ではありません)。そのため、このリポジトリ内で開始した OpenCode セッションだけが、このエディターのツールを参照できます。
{
"mcp": {
"funplay-<project>": {
"type": "remote",
"url": "http://127.0.0.1:<port>/mcp/project/<project-id>/",
"enabled": true
}
}
}
DeepSeek Harness
各 DeepSeek Harness プロファイルの ~/.dsh/profiles/<profile>/cordis.patch.yml に、区切り付きの管理ブロックとして書き込みます。DSH は起動のたびに --profile を介してプラグインを構成し、外部から指定できる単一のアクティブプロファイルを公開していないためです。再設定時もブロック外の内容は保持されます。ブロックを手動で削除すると、エントリーがアンインストールされます。
# >>> funplay-mcp:funplay-<project> begin (managed by Funplay MCP -- reconfigure from Unity > Funplay > MCP Server)
# Funplay Unity MCP endpoint served by this editor; tools appear as mcp__funplay-<project>__<tool>.
- insert:
- id: mcp-funplay-<project>
name: '@deepseek-ai/dsh-mcp-client'
config:
serverName: funplay-<project>
transport: streamable-http
url: http://127.0.0.1:<port>/mcp/project/<project-id>/
# <<< funplay-mcp:funplay-<project> end
Antigravity
ワークスペースローカルの .agents/mcp_config.json に、Funplay の Streamable HTTP エンドポイントを指定する serverUrl を含む mcpServers エントリーとして書き込みます。これにより、関係のないワークスペースにサーバーが設定されるのを防ぎます。ワークスペース MCP 設定に対応した最新バージョンの Antigravity を使用し、MCP サーバーを再読み込みしてください。
ワークスペースルートは、.git(worktree の .git ファイルも含む)がある最も近い親ディレクトリです。Git の管理外にある場合は、Unity プロジェクトディレクトリがルートになります。そのディレクトリを Antigravity のワークスペースとして開いてください。Configure + Skills は、Unity プロジェクトがリポジトリ内のサブディレクトリにある場合も含め、同じルートに .agents/mcp_config.json、.agents/skills/、および管理対象の AGENTS.md ブロックを配置します。他のクライアントでは既存の指示ファイルの場所が維持され、パスが重なる場合はブロックが共有されます。
~/.gemini/config/mcp_config.json または旧式の ~/.gemini/antigravity/mcp_config.json にある既存の Funplay エントリーは、パネルに表示されますが変更されません。各ワークスペースの設定後に確認してください。ワンクリック操作はグローバル設定へのフォールバックを行いません。同じリポジトリ内の複数の Unity プロジェクトはワークスペースを共有します。MCP エントリーには個別の名前が付けられますが、Project Skills は、別のプロジェクトが管理するワークスペースガイダンスの置き換えを拒否します。
{
"mcpServers": {
"funplay-<project>": {
"serverUrl": "http://127.0.0.1:<port>/mcp/project/<project-id>/"
}
}
}
Windsurf
Use Cursor と同じ JSON 構造を使用してください。ただし、ローカルの Windsurf バージョンで異なる MCP 設定形式が必要な場合は、その形式を使用してください。4. 接続を確認する
AI クライアントを開き、まず安全なリクエストをいくつか試してください。
- "
get_scene_infoを呼び出して、開いているシーンを教えてください。" - "
unity://project/contextを読み取り、現在のエディターの状態を要約してください。" - "
execute_codeを使って、アクティブなシーン名を返してください。"
これらが動作すれば、MCP サーバー、リソース、主要な実行ツールが正しく接続されています。
5. 作成を始める
AI クライアントを開き、次のように試してください。「浮遊するプラットフォームが 5 つある 3D プラットフォーマーレベルを作成してください」
始める前に
- このパッケージはエディター専用です。ビルドしたゲームにランタイムコンポーネントを追加することはありません。
- 新規プロジェクトでは MCP サーバーのポートがプロジェクトごとに割り当てられ(範囲は 20000-29999)、固定される場合もあります。以前のバージョンからアップグレードしたプロジェクトでは、既存のポートが固定ポートとして引き継がれ、入力したポートも固定ポートになります。MCP Server ウィンドウには、ポートの割り当て方法とアクティブな URL が表示されます。プロジェクトのクライアント設定エントリーにはプロジェクトディレクトリ名が使用されます(例:
funplay-love-town)。そのため、複数のプロジェクトを設定しても、共有のfunplayエントリーが上書きされることはなくなりました。ディレクトリ名が同じプロジェクトが 2 つある場合、2 つ目のプロジェクトの設定時にプロジェクトハッシュが自動的に追加されるため、上書きは発生せず、設定を有効にする必要もありません。 - ローカルの MCP サーバー設定は
UserSettings/FunplayMcpSettings.jsonに保存されます。 - パッケージのデフォルトは
coreです。構造化された検査・編集、UI 監査と作成、復元可能なエディター準備、共有タスクステータス、視覚的なエビデンス、入力、ログに対応する、目的を絞った 40 個のツールが含まれます。短い MCP タスクは 1 回の応答で完了できます。get_taskは、上限付きの待機と状態変更リビジョンに対応しています。execute_codeはプロジェクト固有のフォールバックとして引き続き利用できます。fullでは、従来のステータス/コンパイル/Play API、検証管理、参照トランザクション、専門的な診断ツールを含む全 185 個のツールが利用できます。カスタム公開リストは保持されます。get_tool_capabilitiesでは、実装状況、公開状況、関連するランタイムバックエンドの利用可否を確認できます。 - 生成されるクライアント URL はプロジェクト単位です。書き込みを行う前に、initialize 応答に含まれるプロジェクト ID を別途確認してください。古いルート URL は引き続き読み取り可能ですが、変更には確認済みの
expected_contextが必要です。一致しない場合、ツールは実行されません。実行時の信頼性と移行を参照してください。 execute_codeの安全性チェックと、より厳格なファイルシステムガードは、Funplay > MCP Settings からデフォルトで有効になっています。このガードは、明らかに破壊的なコード、広範囲にわたるSystem.IOの書き込み、直接的なファイルストリーム、絶対パス/ユーザー領域のパス/システムパス/ディレクトリ遡上パスをブロックしますが、完全なサンドボックスではありません。クライアントは、任意の呼び出しでオプションのsafety_checks引数を使い、デフォルト設定を上書きすることもできます。- プラグインのデバッグログはデフォルトで無効になっていますが、Funplay > MCP Settings から有効にすることもできます。警告とエラーは常に Unity Console に出力されます。
- 公開されているすべての MCP ツールは直接実行されます。追加の承認切り替え設定はありません。
- メニュー:
Funplay > Check for Updatesを使用すると、Git インストールをその場で更新するか、最新のunitypackageを自動的にダウンロードしてインポートできます。
このプロジェクトを選ぶ理由
- 構造化ツールを優先 — 一般的な調査・編集には専用ツールを使用し、プロジェクト固有の不足を補う場合は、ガード付きのインメモリ
execute_codeを引き続き利用できます。詳しくは、execute_code: インメモリ C# 実行をご覧ください。 - デフォルトの安全チェック —
execute_codeには、常時有効な永続的安全トグルが追加されました。これには、呼び出しごとの引数を明確に公開しないクライアント向けの、より厳格なファイルシステムガードも含まれます。 - プレイモードの自動化 — 同じ MCP セッションから、プレイモードへの切り替え、キーボード/マウス入力のシミュレーション、スクリーンショットの撮影、ログの調査、動作の検証ができます。
- プロジェクトコンテキストを標準搭載 — プロジェクトの状態、アクティブなシーン、選択項目、コンパイル、コンソール出力、MCP の操作履歴を示すライブリソースを公開します。
- 通常は必要な範囲だけ、必要に応じてすべて —
coreは用途を絞った40個のツールを公開し、fullは組み込みの全185個のツールを公開します。 - Unity パッケージひとつで完結 — 追加の承認 UI も、クリック操作が必要な外部デーモンも不要で、Unity 側のプラグイン自体に Python も必要ありません。
- 拡張可能 — 属性ベースの検出機能でカスタムツールを追加したり、必要に応じて Unity を外部 MCP サービスに接続したりできます。
主な機能
- 組み込みツール185個 — 43個のモジュールにわたるシーン編集、アセット、スクリプト、プレイモード制御、視覚的な証拠、構造化調査、ガード付き参照編集、範囲を限定した検証に対応します。
- 構造化された戻り値と
instanceIdによる連鎖 — ツールは、安定したinstanceIdフィールドを含む{success, message, data}JSON を返します。これにより、エージェントは名前を再解決する代わりに、by_id呼び出しを確実に連鎖できます。 execute_code用のIFunplayCommand— 新しいスニペットテンプレートでは、自動 Undo(ctx.RegisterObjectCreation/Modification/DestroyObject)、構造化ログ(ctx.Log/LogWarning/LogError)、エージェントに返される追跡可能な変更履歴を利用できます。- リソースとプロンプト — ライブのプロジェクトコンテキスト、シーン/選択項目/エラーのリソース、リソーステンプレート、再利用可能なワークフロープロンプトを提供します。
- 入力シミュレーションとスクリーンショット — キーボード/マウスのシミュレーションでプレイモードを操作し、ゲーム/シーンのキャプチャで結果を検証できます。v0.7.2 では、実フレームでの連続マウス/シングルタッチのドラッグ、待機時間の制限、所有リソースのクリーンアップが追加されました。詳しくはタイミングとバックエンドの制限をご覧ください。
- 組み込みのアップデート機能 — Unity メニューからアップデートを確認し、Git パッケージの再取得または最新の
unitypackageの自動インポートを選択できます。 - ワンクリックのクライアント設定 — Unity ウィンドウから、Claude Code、Cursor、Kimi、LM Studio、VS Code、Kiro、Trae、Codex、OpenCode、DeepSeek Harness、Antigravity などのクライアント向けに、MCP 設定エントリーを直接生成できます。
- ツール公開の制御 —
coreとfullで公開するツールを正確に編集できます。 - プロジェクトスキルマネージャー — 対応する AI クライアント向けにプロジェクトレベルのスキルを設定できます。組み込みの
unity-mcp-workflowとunity-ui-compositionのガイダンスも利用できます。 - MCP 設定 —
execute_codeの安全性に関する既定値を調整したり、MCP 接続やツール実行のトラブルシューティング時にプラグインの詳細デバッグログを有効にしたりできます。 - ベンダーに依存しない設計 — Claude Code、Cursor、Kimi Code、LM Studio、Windsurf、Codex、VS Code Copilot など、MCP に対応するあらゆる AI クライアントで動作します。
execute_code:メモリ内での C# 実行
execute_code は Funplay MCP for Unity の中核です。AI が C# スニペットを作成し、Roslyn を優先するメモリ内フローでコンパイルして、エディタースレッド上で実行できます。エージェントはプロジェクトファイルをディスクに書き込むことなく、Unity Editor とランタイムの API をすべて利用できます。
- プロジェクトにファイルを残さずコンパイル — スニペットはメモリ内でのコンパイル/実行フローを維持しながら、まず Unity に同梱された Roslyn csc でコンパイルされます。
Assets/以下に.csファイルは書き込まれず、ドメインリロードも発生せず、スニペット自体が行う操作以外でプロジェクトの状態に影響することもありません。 - 実行前にエディターの準備を完了 — 呼び出しごとに AssetDatabase を更新し、保留中のコンパイルが完了するまで待ってからスニペットをコンパイルします。そのため、別途
request_recompileを実行しなくても、外部ファイルの編集が自動的に反映されます。 - 自動 Undo と構造化ログ(推奨テンプレート) —
IFunplayCommandを実装し、注入されたExecutionContextを使用すると、作成/変更/破棄されたすべてのオブジェクトがエディターの Undo に記録され、変更履歴がエージェントに返されます。
using UnityEngine;
using UnityEditor;
using Funplay.Editor.Tools.Helpers;
using Funplay.Editor.Tools.Scripting;
public class CommandScript : IFunplayCommand
{
public void Execute(ExecutionContext ctx)
{
var go = GameObject.CreatePrimitive(PrimitiveType.Cube);
ctx.RegisterObjectCreation(go); // auto-Undo + tracked
ctx.Log("Created {0}", go.name);
ctx.ReturnValue = GameObjectSerializer.Describe(go, includeComponents: false);
}
}
応答には { logs, created, modified, destroyed, returnValue } が含まれるため、エージェントはシーンを再照会することなく、変更内容を正確に確認できます。
従来のテンプレート(public static string Run())も引き続きサポートされています。構造化トラッキングが過剰な、単発の確認用スニペットに便利です。
execute_code と専用ツールの使い分け — execute_code は、複数ステップのオーケストレーション、新しい読み取り処理、または細かなツール呼び出しを 5~10 回連鎖させるよりも、1 つのスニペットにまとめた方が簡潔な場面で力を発揮します。コンポーネントの単一フィールドの編集、簡単な選択変更、既存のツールで対応できる処理には、専用ツールを使用してください。LLM にとって呼び出しコストが低く、結果も確認しやすくなります。
Coplay との比較
以下の表では、このリポジトリと、GitHub で公開されている Coplay のオープンソース unity-mcp リポジトリの仕様を比較しています。
| 項目 | Funplay MCP for Unity | Coplay unity-mcp |
|---|---|---|
| Unity 側のアーキテクチャ | HTTP MCP サーバーを内蔵した Unity Editor 組み込みパッケージ | Unity ブリッジとローカル Python MCP サーバー |
| ローカルで追加で必要なもの | 基本的なワークフローでは Unity パッケージのみ | 公開されているクイックスタートによると Unity + Python 3.10+ + uv |
| 主なワークフローのスタイル | まず execute_code を使い、その後に目的を絞ったヘルパーツールを使用 | ブリッジ経由で幅広い manage_* ツール群を公開 |
| デフォルトで公開されるツール | コンパクトな core プロファイル。オプションで full に拡張可能 | 公開ドキュメントでは、常時利用可能な幅広いツール群を重視 |
| 組み込みのコンテキストモデル | プロジェクトリソース、リソーステンプレート、ワークフロープロンプト、インタラクション履歴 | 公開 README では、ツール群とブリッジ/サーバーのワークフローを重視 |
| プレイモードの検証 | パッケージにプレイモード制御、スクリーンショット、ログ、入力シミュレーションを内蔵 | 公開 README では、幅広い Unity 管理・自動化ツールを重視 |
| 位置付け | AI によるエディター制御に対応した、軽量で直接利用できる MIT ライセンスの Unity MCP サーバー | Coplay が保守するフル機能の Unity ブリッジ。Python ベースのサーバーセットアップを採用 |
Coplay 列の出典:CoplayDev/unity-mcp
Unity AI Assistant との比較
以下の表では、このリポジトリと Unity Technologies の公式パッケージ com.unity.ai.assistant(2026-05 時点で v2.7.0-pre.2)を比較しています。
| 項目 | Funplay MCP for Unity | Unity AI Assistant |
|---|---|---|
| 最低 Unity バージョン | 2022.3 | 6000.3(Unity 6 のみ) |
| ライセンス | MIT、オープンソース | Unity Terms of Service、プロプライエタリ |
| デプロイ | エディター内のローカル HTTP MCP サーバー、クラウド不要 | エディター + ネイティブ Relay サブプロセス + Unity Cloud バックエンド |
| 課金 | 無料。ユーザーが AI クライアントを用意 | クレジット制(Unity Dashboard) |
| ツールの公開 | 43 モジュールにまたがる 185 ツール。core(40)/full プロファイル | 約 15 個の MCP ツール(主に Manage* ファミリー) |
| 汎用の代替手段 | execute_code — Roslyn 優先のインメモリコンパイル、IFunplayCommand + Undo、サンドボックスなし(クライアント側で承認) | RunCommand — 名前空間のブラックリストによるサンドボックス |
| プレイモードの検証 | 完全なループ:開始/入力をシミュレート/キャプチャ/ログを読み取り/終了 | 開始/終了のみ。入力シミュレーションなし |
| アセットジェネレーター | 組み込みなし(execute_code で外部 API を組み合わせ) | ネイティブの画像/メッシュ/PBR/サウンド/アニメーションジェネレーター |
| 主なクライアントモデル | 任意の MCP クライアントを利用(Claude Code / Cursor / Kimi / LM Studio / Codex / VS Code) | 組み込みチャットウィンドウ + Gateway 経由の Claude/Gemini 用 ACP |
| オフライン対応 | はい(ツール呼び出し。推論は選択したクライアントに依存) | いいえ(推論には Unity Cloud が必要) |
2 つのアプローチの詳細な比較については、Funplay Unity MCP vs Unity AI Assistant detailed comparison(中国語)をご覧ください。
MCP の機能
現在のオープンソースパッケージは、価値の高い 4 つの機能レイヤーを公開しています。
- ツール —
fullでは合計 185 個のツール、coreでは用途を絞った 40 個のツール - 主な実行手段 — エディター/ランタイムの高度なオーケストレーション用の
execute_code - プロンプト — パラメーター化されたワークフロープロンプト:
edit_prefab_safely、verify_compilation、enter_play_and_recover、wire_serialized_references、create_playable_prototype。プロジェクトルートのmcp-prompts/*.mdファイルを使って、プロジェクト独自のプロンプトを追加できます。 - リソース — プロジェクトコンテキスト、シーンの概要、選択状態、コンパイルエラー、コンソールエラー、MCP の操作履歴に加え、シーンオブジェクト、コンポーネント、アセットパス用のリソーステンプレート
プロジェクトプロンプト
プロジェクトのプロンプトファイルでは、依存関係のない簡易的なフロントマター形式の後に、ワークフロー本文を記述します。
---
name: validate_activity
description: Open and validate a project activity.
arguments: activity_key(required), theme_id
---
Open activity {activity_key} with theme {theme_id}, then validate its runtime state.
名前と引数名は [a-z][a-z0-9_-]{0,63} に一致する必要があります。必須の引数、不明な引数、文字列以外の引数は prompts/get によって拒否されます。省略されたオプションのプレースホルダーは空文字列になります。定義は MCP サーバーの起動時にキャッシュされるため、プロンプトファイルを変更した後はサーバーを再起動するか、Unity のドメインリロードを実行してください。
組み込みツール
バージョン 0.7.2 には、43 モジュールにまたがる 185 個のツール関数が含まれており、そのうち使用頻度の高い 40 個のツールがデフォルトで公開されています。ID の移行、厳密な入力、連続ドラッグ、所有リソースのクリーンアップ、参照の保持、証拠の再利用については、実行の信頼性と検証をご覧ください。
| カテゴリ | ツール |
|---|---|
| GameObject | create_primitive, create_game_object, delete_game_object, find_game_objects, get_game_object_info, set_transform, duplicate_game_object, rename_game_object, set_parent, add_component, set_tag_and_layer, set_active |
| Hierarchy | get_hierarchy |
| Components | get_component_properties, list_components, set_component_property, set_component_properties |
| Component Batch | copy_component, paste_component_values, add_component_to_many |
| Scripts | create_script, edit_script, patch_script |
| Assets | create_material, assign_material, find_assets, delete_asset, rename_asset, copy_asset |
| Asset Import | get_asset_import_settings, set_asset_import_settings |
| References | find_references, find_broken_references, patch_serialized_reference |
| Mesh | get_mesh_info |
| Materials | get_material_properties, set_material_property |
| Files | read_file, write_file, search_files, list_directory, exists |
| Scene | get_scene_info, list_scenes, load_scene_additive, unload_scene, list_dirty_scenes, save_all_scenes, save_scene, open_scene, create_new_scene, enter_play_mode, exit_play_mode, set_time_scale, get_time_scale |
| Physics | physics_raycast, physics_overlap, physics2d_overlap_point |
| Particles | particle_control |
| Lighting | get_lighting_settings, set_lighting_settings, bake_lightmaps |
| Timeline | director_evaluate |
| Prefabs | create_prefab, instantiate_prefab, unpack_prefab, open_prefab_stage, save_prefab_stage, close_prefab_stage, set_prefab_property, set_prefab_properties |
| ScriptableObject | create_scriptable_object, get_scriptable_object, set_scriptable_object_properties |
| UI | create_canvas, create_button, create_text, create_image, raycast_at_point, get_ui_defaults, configure_ui_defaults, create_project_ui |
| UI Audit | audit_ui, get_ui_audit, cancel_ui_audit |
| UI Preview | start_ui_preview_session, get_ui_preview_session, end_ui_preview_session |
| Inspection | find_project_types, inspect_ui_sprites, get_tool_capabilities, inspect_render_bindings |
| Verification | verification_scope, save_verification_evidence, read_verification_evidence(Full;ステータスは get_task で確認) |
| Visual Inspection | get_visual_coordinates, get_object_screen_bounds |
| Animation | create_animation_clip, create_animator_controller, assign_animator, get_animator_state, set_animator_parameter, play_animator_state |
| Camera | get_camera_properties, set_camera_projection, set_camera_settings, set_camera_culling_mask |
| Screenshot | capture_game_view, capture_simulator_view, capture_scene_view, capture_multiview, capture_editor_window |
| Video | record_game_view, mark_recording, extract_recording_frames, get_recording_frame |
| Script Execution | execute_code, get_execute_code_history, replay_execute_code, clear_execute_code_history |
| Input Simulation | simulate_key_press, simulate_key_combo, simulate_mouse_click, simulate_mouse_drag, simulate_ui_scroll |
| Performance | get_performance_snapshot, analyze_scene_complexity |
| Profiler | profiler_start, profiler_stop, profiler_status, get_frame_timing, get_counters, get_object_memory, get_top_memory_objects, memory_take_snapshot, memory_list_snapshots, memory_compare_snapshots, frame_debugger_enable, frame_debugger_disable, frame_debugger_get_events |
| Memory Snapshot | memory_take_full_snapshot, memory_list_full_snapshots, memory_open_snapshot_in_profiler, memory_query_top_objects, memory_query_references |
| Packages | install_package, remove_package, list_packages |
| Compilation | wait_for_compilation, request_recompile, get_compilation_errors, get_reload_recovery_status |
| Editor Operations | prepare_editor, get_editor_operation, list_editor_operations, cancel_editor_operation |
| Tasks | get_task(共有の読み取り専用ステータスと上限付き待機) |
| Testing | run_tests, get_test_job, cancel_test_run |
| Editor State | get_editor_state, get_selection, set_selection, get_prefab_stage, get_active_tool, set_active_tool, get_windows, get_tags, add_tag, remove_tag, get_layers, add_layer, get_build_settings |
| Project Settings | get_project_settings |
| Undo | undo, redo, get_undo_state |
| Menu Items | execute_menu_item, validate_menu_item |
| Visual Feedback | select_object, focus_on_object, ping_asset, log_message, show_dialog, get_console_logs |
📊 Profiler ツールのリファレンス、実装に関する注記、既知の制限事項、テストレポートの全容については、PROFILER_TOOLS.md をご覧ください。
エンドツーエンドの準備、読み取り専用の監査、構造化クエリ、プロジェクトの TMP/Prefab/入力のデフォルト設定、キャプチャ座標のマッピング、録画マーカー/キーフレーム、復旧可能なプレビューセッションについては、信頼性の高い UI ワークフローをご覧ください。組み込みの Project Skills の両方にこれらのワークフローが含まれています。既存のインストールを更新するには、Project Skills を使用してください。これらのツールとスキルの更新は、v0.6.9 以降に含まれています。
Game View の動画を録画する
core に含まれる record_game_view を使用すると、UI アニメーション、トランジション、複数ステップのインタラクションを、短い無音の MP4 で確認できます。Unity に組み込まれている MediaEncoder を使用するため、Recorder パッケージや外部エンコーダーは必要ありません。
- Play Mode に入り、リロードからの復旧を待ってから、レンダリングされるように Game タブを開きます。
record_game_viewを{"action":"start","duration_seconds":10,"fps":15,"max_dimension":1280}で呼び出します。返されたrecording_idを控えておきます。- 録画中に操作を行います。Start はすぐに返され、録画は時間制限に達すると自動的に停止します。
{"action":"status","recording_id":"<id>"}で状態を確認します。早めに終了するにはaction:"stop"を指定し、ファイナライズが完了するまで状態を確認します。ready:trueになったら、返されたpathをローカル動画ファイルとして読み取ります。動画データは MCP のレスポンスに埋め込まれません。リモートクライアントは、Unity マシン上のファイルに別途アクセスする必要があります。
クリップには <UnityProject>/Library/FunplayMcp/Recordings/ 内で一意のファイル名が付けられ、削除するまで保持されます。Start で指定できる長さは 1~120 秒、目標 FPS は 1~60、最大寸法は 128~1920 ピクセルです。アスペクト比を維持し、アップスケーリングは行わず、エンコード寸法には偶数値を使用します。状態には、実際のフレーム数、経過時間、停止理由、ファイルサイズ、エラーが含まれます。ポーリング/停止時には録画 ID を渡し、新しいクリップを誤って操作しないようにしてください。
現在、Play Mode のグラフィックス対応 macOS および Windows の Editor でサポートされており、音声トラックはありません。シーンカメラを再レンダリングせず、オーバーレイ UI を含むレンダリング済みの Game View をキャプチャします。Game タブのレンダリングを継続し、キャプチャ中にサイズを変更しないでください。タブを非表示/閉じたり、レンダリング解像度を変更したりすると、古いフレームや引き伸ばされたフレームを無言でキャプチャする代わりに、エラーで録画が停止します。Play Mode を終了するとクリップがファイナライズされます。スクリプト/ドメインのリロードが発生すると、クリップは早期にファイナライズされ、エディターセッションに interrupted のレシートが保持されます。ready:true のファイルのみを使用してください。フレームが遅れた場合も実際のタイムスタンプが維持されますが、録画によるオーバーヘッドが発生します。これは視覚的な記録用であり、フレーム精度のパフォーマンスプロファイリング用ではありません。
カスタムツールの追加
シンプルな属性アノテーションを使って、独自のツールを作成できます。
using System.ComponentModel;
[ToolProvider("MyTools")]
public static class MyCustomTools
{
[Description("Spawns enemies at random positions in the scene")]
public static string SpawnEnemies(
[ToolParam("Number of enemies to spawn", Required = true)] int count,
[ToolParam("Prefab path in Assets")] string prefabPath)
{
// Your implementation here
return $"Spawned {count} enemies";
}
}
メソッドは自動的に検出され、snake_case(spawn_enemies)に変換され、JSON Schema 定義とともに MCP 経由で公開されます。
アーキテクチャ
MCP Server (HTTP JSON-RPC 2.0)
└─ MCPRequestHandler (protocol handling)
└─ MCPExecutionBridge
└─ FunctionInvokerController (reflection-based invocation)
└─ Tool Functions (185 built-in tools across 43 modules)
External AI Client → HTTP Request → MCPRequestHandler → MCPExecutionBridge → FunctionInvokerController → tool method
要件
- Unity 2022.3 以降
Newtonsoft.Jsonを含む .NET/Mono
コントリビューション
コントリビューションを歓迎します!PR を提出する前に、コントリビューションガイドをお読みください。
ライセンス
MIT — 商用またはオープンソースのプロジェクトで、自由に使用、変更、配布、統合できます。
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。