UnityNaturalMCPは、"ナチュラル"な使い勝手を目指した、Unity向けのMCPサーバー実装です。
Unity C#で定義したMCPツールを、ダイレクトにClaudeCodeやGitHub Copilot(VSCode), CursorなどのMCPクライアントから利用できます。
Warning
UnityNaturalMCPは、まだpreview段階です。実用可能ですが、いくつかの機能追加が予定されています。
- Unity EditorとMCPクライアント間の簡潔な通信フロー
- stdio/Streamable HTTP対応
- MCP C# SDKを用いた、C#で完結する拡張MCPツールの実装
- ClaudeCode, GitHub Copilot(VSCode), Cursorなどをサポート
- Unity 6000.0以降
- Node.js 18.0.0以降 (
mcp-stdio-to-streamable-httpを使用する場合)
graph LR
A[MCP Client] ---|Streamable HTTP| C[UnityNaturalMCPServer]
または
graph LR
A[MCP Client] ---|stdio| B[stdio-to-streamable-http]
B ---|Streamable HTTP| C[UnityNaturalMCPServer]
Unity Packageとして提供される、 Streamable HTTP として振る舞うMCPサーバー実装です。
Github Copilot(VSCode) などの Streamable HTTP 対応のクライアントであれば、これを介して単体でUnity Editorと通信することができます。
Node.jsで実装された、MCPクライアントとUnity間の通信を中継する stdio ベースのMCPサーバーです。
Cursor などの一部のMCPクライアントは、2025/6/23現在、 Streamable HTTP に対応していません。
stdio の入力を Streamable HTTP にバイパスすることで、 UnityNaturalMCPServer とMCPクライアントの間の通信を可能にします。
機能検証用、サンプルとなるUnityプロジェクトです。
現在、次のMCPツールが実装されています。
- RefreshAssets: Unity Editorのアセットを更新
- GetCurrentConsoleLogs: Unity Consoleのログを取得
- ClearConsoleLogs: Unity Consoleのログをクリア
- RunEditModeTests: Unity Test RunnerでEditModeテストを実行
- RunPlayModeTests: Unity Test RunnerでPlayModeテストを実行
動作には、次のPackageが必要です。
また、NugetForUnityより、次のNuget Packageをインストールしてください。
Warning
ModelContextProtocolはまだpreview段階です。NugetForUnityを介して導入する場合、Show Prereleaseトグルを有効化する必要があります。
UPM(Unity Package Manager)を介してインストールできます。
Packages/manifest.jsonを編集dependenciesセクションに以下を追加:"jp.notargs.unity-natural-mcp": "https://github.com/notargs/UnityNaturalMCP.git?path=/UnityNaturalMCPServer"
- Unity Editorで
Edit > Project Settings > Unity Natural MCPを開く - MCPサーバーのポート番号を設定(デフォルト: 56780)
Refreshボタンをクリックして設定を反映
Note
56780はあくまでデフォルトポートです。プロジェクトに合わせて、自由に変更してください。
なお、67 80 はASCII Codeで CP を表します。もちろんMCPから来ています。
次のコマンドを利用して、ClaudeCodeにMCPサーバーを登録します。
claude mcp add -s project --transport http unity-natural-mcp http://localhost:56780/mcpWindows上でClaude Codeなどを用いてMCPを利用する場合、WSL2を利用する必要があります。
WSL2とUnityの連携を行うためには、WSL2とホストOSのネットワーク設定を適切に行う必要があります。
簡単なアプローチは、ミラーモードを使用して、WSL2とホストOSを接続する方法です。
ミラーモードを有効化するためには、C:/Users/[username]/.wslconfigへと以下の設定を追加します。
[wsl2]
networkingMode=mirroredミラーモードでは、localhostを介してWSL2とホストOSの間で通信することができます
しかしながら、C#サーバー側でlocalhostにバインドした場合、期待通りに動作せず、接続が失敗する場合があります。
これを回避するためには、UnityのEdit > Project Settings > Unity Natural MCPより、IPAddressを*に設定し、Refreshを実行します。
Caution
セキュリティ上の観点から、IP Addressに*を指定することは本来推奨されません。
こちらはあくまで簡易的なセットアップ手順を示すものです。
環境に応じて、適宜調整を行ってください。
GitHub Copilot(VSCode)を利用する場合、Streamable HTTPを介した接続が可能です。
.vscode/mcp.json に次の設定を追加します。
{
"servers": {
"unity-natural-mcp": {
"url": "http://localhost:56780/mcp"
}
}
}Cursorは2025/6/23現在、Streamable HTTPに対応していないため、stdioを介して接続する必要があります。
mcp-stdio-to-streamable-http Releases より、最新の mcp-stdio-to-streamable-http-*.zip をダウンロードしてください。
.cursor/mcp.jsonへと次を追記してください。
path/to/mcp-stdio-to-streamable-http は、Cloneした mcp-stdio-to-streamable-http のパスに置き換えてください。
{
"mcpServers": {
"unity-natural-mcp": {
"command": "node",
"args": ["path/to/mcp-stdio-to-streamable-http/dist/index.js"],
"env": {
"MCP_SERVER_IP": "localhost",
"MCP_SERVER_PORT": "56780"
}
}}
}Streamable HTTPに対応しています。ルートに.gemini/settings.jsonを作成し、以下を記述してください(独自のポート番号にした場合は、56780を修正してください)
{
"mcpServers": {
"httpServer": {
"httpUrl": "http://localhost:56780/mcp"
}
}
}詳細はGemini CLIのドキュメントを参照してください。
Gemini CLI ドキュメント – HTTP ベースの MCP サーバ
UnityNaturalMCPでは、MCP C# SDKを用いて、C#でMCPツールを実装することができます。
Editor用のasmdefを作成し、次のスクリプトファイルを追加します。
using System.ComponentModel;
using ModelContextProtocol.Server;
[McpServerToolType, Description("カスタムMCPツールの説明")]
public class MyCustomMCPTool
{
[McpServerTool, Description("メソッドの説明")]
public string MyMethod()
{
return "Hello from Unity!";
}
}MCPツールをMCPサーバーに登録するためには、McpBuilderScriptableObjectを継承したクラスを作成します。
using Microsoft.Extensions.DependencyInjection;
using UnityEngine;
using UnityNaturalMCP.Editor;
[CreateAssetMenu(fileName = "MyCustomMCPToolBuilder",
menuName = "UnityNaturalMCP/My Custom Tool Builder")]
public class MyCustomMCPToolBuilder : McpBuilderScriptableObject
{
public override void Build(IMcpServerBuilder builder)
{
builder.WithTools<MyCustomMCPTool>();
}
}- Unity Editorでプロジェクトウィンドウを右クリック
Create > UnityNaturalMCP > My Custom Tool Builderを選択してScriptableObjectを作成Edit > Project Settings > Unity Natural MCP > Refreshから、MCPサーバーを再起動すると、作成したツールが読み込まれます。
MCP Inspectorから、Streamable HTTPを介してMCPツールを呼び出し、動作確認をスムーズに行うことができます。
MCPツール内でエラーが発生した場合、それはログに表示されません。
try-catchブロックを使用して、エラーをログに記録し、再スローすることを推奨します。
[McpServerTool, Description("エラーを返す処理の例")]
public async void ErrorMethod()
{
try
{
throw new Exception("This is an error example");
}
catch (Exception e)
{
Debug.LogError(e);
throw;
}
}UnityのAPIを利用する際は、メインスレッド以外から呼び出される可能性を考慮する必要があります。
また、戻り値の型には、 ValueTask<T> を利用する必要があります。
[McpServerTool, Description("非同期処理の例")]
public async ValueTask<string> AsyncMethod()
{
await UniTask.SwitchToMainThread();
await UniTask.Delay(1000);
return "非同期処理完了";
}テスト実行時にドメインの再ロードが発生すると、Unityエディターとの接続が切断され、テスト実行ツールが失敗します。
次の点にご注意ください:
- コンパイルが終わってからテスト実行を指示してください
- ドメインの再ロードを伴うEdit Modeテストは実行しないでください
- Play Modeテストを実行するときは Edit > Project Settings > Editor > "Enter Play Mode Settings" でドメインの再ロードをオフに設定してください
MIT License

