
Unity自然
STDIO为Unity提供自然用户体验的MCP服务器
为Unity提供自然用户体验的MCP服务器
UnityNaturalMCP is an MCP server implementation for Unity that aims for a "natural" user experience.
MCP tools defined in Unity C# can be used directly from MCP clients such as Claude Code, GitHub Copilot(VSCode) and Cursor.
[!WARNING] UnityNaturalMCP is still in the preview stage. It is usable in practice, but several feature additions are planned.
graph LR A[MCP Client] ---|Streamable HTTP| C[UnityNaturalMCPServer]
or
graph LR A[MCP Client] ---|stdio| B[stdio-to-streamable-http] B ---|Streamable HTTP| C[UnityNaturalMCPServer]
An MCP server implementation provided as a Unity Package that behaves as a Streamable HTTP
server.
Clients that support Streamable HTTP
, such as Github Copilot(VSCode)
, can communicate directly with Unity Editor through this server.
A Node.js-based stdio MCP server that relays communication between MCP clients and Unity.
Some MCP clients, such as ClaudeCode
, do not support Streamable HTTP
as of June 15, 2025.
By bypassing stdio input to Streamable HTTP
, it enables communication between UnityNaturalMCPServer
and MCP clients.
A Unity project for functional verification and as a sample.
Currently, the following MCP tools are implemented:
The following packages are required:
Also, install the following Nuget Packages via NugetForUnity:
[!WARNING] ModelContextProtocol is still in preview stage. When installing via NugetForUnity, you need to enable the
Show Prerelease
toggle.
You can install via UPM (Unity Package Manager):
Packages/manifest.json
dependencies
section:
"jp.notargs.unity-natural-mcp": "https://github.com/notargs/UnityNaturalMCP.git?path=/UnityNaturalMCPServer"
Edit > Project Settings > Unity Natural MCP
in Unity EditorRefresh
button to apply the settings[!NOTE]
56780
is just the default port. Feel free to change it to suit your project. Note that67 80
is the ASCII code forCP
. Of course, it comes from MCP.
Use the following command to register an MCP server with ClaudeCode.
claude mcp add -s project --transport http unity-natural-mcp http://localhost:56780/mcp
When using MCP with Claude Code on Windows, you need to use WSL2.
To integrate WSL2 with Unity, you need to properly configure the network settings between WSL2 and the host OS.
A simple approach is to use mirror mode to connect WSL2 and the host OS.
To enable mirror mode, add the following settings to C:/Users/[username]/.wslconfig
:
[wsl2] networkingMode=mirrored
In mirror mode, you can communicate between WSL2 and the host OS via localhost.
However, when the C# server binds to localhost, it may not work as expected and connections may fail.
To work around this, set the IP Address to *
in Unity's Edit > Project Settings > Unity Natural MCP
and execute Refresh
.
[!CAUTION] From a security perspective, specifying
*
for the IP Address is not normally recommended. This is only meant to show a simplified setup procedure. Please adjust accordingly based on your environment.
When using GitHub Copilot(VSCode), connection via Streamable HTTP is possible.
Add the following configuration to .vscode/mcp.json
:
{ "servers": { "unity-natural-mcp": { "url": "http://localhost:56780/mcp" } } }
Clone this repository and add these snippets to .cursor/mcp.json
.
Please replace path/to/UnityNaturalMCP
with the path to the cloned UnityNaturalMCP
.
{ "mcpServers": { "unity-natural-mcp": { "command": "npm", "args": ["run", "start", "--prefix", "path/to/UnityNaturalMCP/stdio-to-streamable-http/"], "env": { "MCP_SERVER_IP": "localhost", "MCP_SERVER_PORT": "56780" } }} }
In UnityNaturalMCP, you can implement MCP tools in C# using the MCP C# SDK.
Create an asmdef for the Editor and add the following script files.
using System.ComponentModel; using ModelContextProtocol.Server; [McpServerToolType, Description("Description of custom MCP tool")] public class MyCustomMCPTool { [McpServerTool, Description("Method description")] public string MyMethod() { return "Hello from Unity!"; } }
To register MCP tools with the MCP server, create a class that inherits from 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>(); } }
Create > UnityNaturalMCP > My Custom Tool Builder
Edit > Project Settings > Unity Natural MCP > Refresh
, restart the MCP server to load the created tools.From MCP Inspector, you can call MCP tools via Streamable HTTP and perform operational verification smoothly.
When errors occur within MCP tools, they are not displayed in logs.
It is recommended to use try-catch blocks to log errors and rethrow them.
[McpServerTool, Description("Example of error-returning process")] public async void ErrorMethod() { try { throw new Exception("This is an error example"); } catch (Exception e) { Debug.LogError(e); throw; } }
When using Unity's API, it is necessary to consider the possibility that it may be called from threads other than the main thread.
Additionally, the return type must use ValueTask<T>
.
[McpServerTool, Description("Example of asynchronous processing")] public async ValueTask<string> AsyncMethod() { await UniTask.SwitchToMainThread(); await UniTask.Delay(1000); return "Finished async processing"; }
MIT License