* Add a function to reload the domain Closes #357 * feat: restructure server instructions into workflow-focused format - Reorganized instructions from flat bullet list into categorized workflow sections - Emphasized critical script management workflow with numbered steps - Improved readability and scannability for AI agents using the MCP server It doesn't make sense to repeat the fucnction tools, they're already parsed * docs: reorder tool list alphabetically in README + add reload_domain tool * feat: add Unity editor state and project info resources - Implemented resources for querying active tool, editor state, prefab stage, selection, and open windows - Added project configuration resources for layers and project metadata - Organized new resources into Editor and Project namespaces for better structure * feat: clarify script management workflow in system prompt - Expanded guidance to include scripts created by any tool, not just manage_script - Added "etc" to tools examples for better clarity * refactor: remove reload_domain tool and update script management workflow - Removed reload_domain tool as Unity automatically recompiles scripts when modified - Updated script management instructions to rely on editor_state polling and console checking instead of manual domain reload - Simplified workflow by removing unnecessary manual recompilation step * Change name of menu items resource as the LLM seems it * refactor: reorganize tests into src/tests/integration directory - Moved all test files from root tests/ to MCPForUnity/UnityMcpServer~/src/tests/integration/ for better organization - Added conftest.py with telemetry and dependency stubs to simplify test setup - Removed redundant path manipulation and module loading code from individual test files * feat: expand Unity test workflow triggers - Run tests on all branches instead of only main - Add pull request trigger to catch issues before merge - Maintain path filtering to run only when relevant files change * chore: add GitHub Actions workflow for Python tests - Configured automated testing on push and pull requests using pytest - Set up uv for dependency management and Python 3.10 environment - Added test results artifact upload for debugging failed runs * refactor: update import path for fastmcp Context * docs: update development setup instructions to use uv - Changed installation commands from pip to uv pip for better dependency management - Updated test running instructions to use uv run pytest - Added examples for running integration and unit tests separately * Formatting [skip ci] * refactor: optimize CI workflow with path filters and dependency installation - Added path filters to only trigger tests when Python source or workflow files change - Split dependency installation into sync and dev install steps for better clarity - Fixed YAML indentation for improved readability * Update .github/workflows/python-tests.yml Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com> * fix: standardize test mode values to match Unity's naming convention - Changed default mode from "edit" to "EditMode" in C# code - Updated Python tool to use "EditMode" and "PlayMode" instead of lowercase variants * refactor: convert test imports to relative imports - Changed absolute imports to relative imports in integration tests for better package structure - Removed test packages from pyproject.toml package list * refactor: use Field with default_factory for mutable default in TagsResponse * refactor: remove duplicate PrefabStageUtility call * Update this as well [skip ci] * Update MCPForUnity/UnityMcpServer~/src/tests/integration/test_script_tools.py Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com> * chore: remove pull_request triggers from test workflows [skip ci] It's already covered by pushes * refactor: update resource function return types to include MCPResponse union * refactor: remove manual domain reload tool - Removed reload_domain tool as Unity handles script recompilation automatically - Updated documentation to reflect automatic compilation workflow - Simplified script management workflow instructions in server description * refactor: add context support to resource handlers - Updated all resource handlers to accept Context parameter for Unity instance routing - Replaced direct async_send_command_with_retry calls with async_send_with_unity_instance wrapper - Added imports for get_unity_instance_from_context and async_send_with_unity_instance helpers * fix: correct grammar in menu items documentation * docs: update README with expanded tools and resources documentation - Added new tools: manage_prefabs, create_script, delete_script, get_sha - Added new resources: editor state, windows, project info, layers, and tags - Clarified manage_script as compatibility router with recommendation to use newer edit tools - Fixed run_test to run_tests for consistency * refactor: convert unity_instances function to async [skip ci] - Changed function signature from synchronous to async - Added await keywords to ctx.info() and ctx.error() calls to properly handle async context methods --------- Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com> |
||
|---|---|---|
| .claude | ||
| .github | ||
| MCPForUnity | ||
| Server | ||
| TestProjects/UnityMCPTests | ||
| docs | ||
| scripts | ||
| tools | ||
| .gitignore | ||
| LICENSE | ||
| README-zh.md | ||
| README.md | ||
| deploy-dev.bat | ||
| mcp_source.py | ||
| prune_tool_results.py | ||
| restore-dev.bat | ||
| test_unity_socket_framing.py | ||
README.md
| English | 简体中文 |
|---|
Proudly sponsored and maintained by Coplay -- the best AI assistant for Unity.
Create your Unity apps with LLMs!
MCP for Unity acts as a bridge, allowing AI assistants (like Claude, Cursor) to interact directly with your Unity Editor via a local MCP (Model Context Protocol) Client. Give your LLM tools to manage assets, control scenes, edit scripts, and automate tasks within Unity.
💬 Join Our Discord
Get help, share ideas, and collaborate with other MCP for Unity developers!
Key Features 🚀
- 🗣️ Natural Language Control: Instruct your LLM to perform Unity tasks.
- 🛠️ Powerful Tools: Manage assets, scenes, materials, scripts, and editor functions.
- 🤖 Automation: Automate repetitive Unity workflows.
- 🧩 Extensible: Designed to work with various MCP Clients.
Tools
Your LLM can use functions like:
execute_menu_item: Executes Unity Editor menu items (e.g., "File/Save Project").manage_asset: Performs asset operations (import, create, modify, delete, etc.).manage_editor: Controls and queries the editor's state and settings.manage_gameobject: Manages GameObjects: create, modify, delete, find, and component operations.manage_prefabs: Performs prefab operations (create, modify, delete, etc.).manage_scene: Manages scenes (load, save, create, get hierarchy, etc.).manage_script: Compatibility router for legacy script operations (create, read, delete). Preferapply_text_editsorscript_apply_editsfor edits.manage_shader: Performs shader CRUD operations (create, read, modify, delete).read_console: Gets messages from or clears the console.run_tests: Runs tests in the Unity Editor.set_active_instance: Routes subsequent tool calls to a specific Unity instance (when multiple are running).apply_text_edits: Precise text edits with precondition hashes and atomic multi-edit batches.script_apply_edits: Structured C# method/class edits (insert/replace/delete) with safer boundaries.validate_script: Fast validation (basic/standard) to catch syntax/structure issues before/after writes.create_script: Create a new C# script at the given project path.delete_script: Delete a C# script by URI or Assets-relative path.get_sha: Get SHA256 and basic metadata for a Unity C# script without returning file contents.
Resources
Your LLM can retrieve the following resources:
unity_instances: Lists all running Unity Editor instances with their details (name, path, port, status).menu_items: Retrieves all available menu items in the Unity Editor.tests: Retrieves all available tests in the Unity Editor. Can select tests of a specific type (e.g., "EditMode", "PlayMode").editor_active_tool: Currently active editor tool (Move, Rotate, Scale, etc.) and transform handle settings.editor_prefab_stage: Current prefab editing context if a prefab is open in isolation mode.editor_selection: Detailed information about currently selected objects in the editor.editor_state: Current editor runtime state including play mode, compilation status, active scene, and selection summary.editor_windows: All currently open editor windows with their titles, types, positions, and focus state.project_info: Static project information including root path, Unity version, and platform.project_layers: All layers defined in the project's TagManager with their indices (0-31).project_tags: All tags defined in the project's TagManager.
How It Works
MCP for Unity connects your tools using two components:
- MCP for Unity Bridge: A Unity package running inside the Editor. (Installed via Package Manager).
- MCP for Unity Server: A Python server that runs locally, communicating between the Unity Bridge and your MCP Client. (Installed automatically by the package on first run or via Auto-Setup; manual setup is available as a fallback).
Installation ⚙️
Prerequisites
-
Python: Version 3.10 or newer. Download Python
-
Unity Hub & Editor: Version 2021.3 LTS or newer. Download Unity
-
uv (Python toolchain manager):
# macOS / Linux curl -LsSf https://astral.sh/uv/install.sh | sh # Windows (PowerShell) winget install --id=astral-sh.uv -e # Docs: https://docs.astral.sh/uv/getting-started/installation/ -
An MCP Client: : Claude Desktop | Claude Code | Cursor | Visual Studio Code Copilot | Windsurf | Others work with manual config
-
[Optional] Roslyn for Advanced Script Validation
For **Strict** validation level that catches undefined namespaces, types, and methods: **Method 1: NuGet for Unity (Recommended)** 1. Install [NuGetForUnity](https://github.com/GlitchEnzo/NuGetForUnity) 2. Go to `Window > NuGet Package Manager` 3. Search for `Microsoft.CodeAnalysis`, select version 4.14.0, and install the package 4. Also install package `SQLitePCLRaw.core` and `SQLitePCLRaw.bundle_e_sqlite3`. 5. Go to `Player Settings > Scripting Define Symbols` 6. Add `USE_ROSLYN` 7. Restart Unity **Method 2: Manual DLL Installation** 1. Download Microsoft.CodeAnalysis.CSharp.dll and dependencies from [NuGet](https://www.nuget.org/packages/Microsoft.CodeAnalysis.CSharp/) 2. Place DLLs in `Assets/Plugins/` folder 3. Ensure .NET compatibility settings are correct 4. Add `USE_ROSLYN` to Scripting Define Symbols 5. Restart Unity **Note:** Without Roslyn, script validation falls back to basic structural checks. Roslyn enables full C# compiler diagnostics with precise error reporting.</details>
🌟 Step 1: Install the Unity Package
To install via Git URL
- Open your Unity project.
- Go to
Window > Package Manager. - Click
+->Add package from git URL.... - Enter:
https://github.com/CoplayDev/unity-mcp.git?path=/MCPForUnity - Click
Add.
To install via OpenUPM
- Install the OpenUPM CLI
- Open a terminal (PowerShell, Terminal, etc.) and navigate to your Unity project directory
- Run
openupm add com.coplaydev.unity-mcp
Note: If you installed the MCP Server before Coplay's maintenance, you will need to uninstall the old package before re-installing the new one.
🛠️ Step 2: Configure Your MCP Client
Connect your MCP Client (Claude, Cursor, etc.) to the Python server set up in Step 1 (auto) or via Manual Configuration (below).
Option A: Auto-Setup (Recommended for Claude/Cursor/VSC Copilot)
- In Unity, go to
Window > MCP for Unity. - Click
Auto-Setup. - Look for a green status indicator 🟢 and "Connected ✓". (This attempts to modify the MCP Client's config file automatically).
Client-specific troubleshooting
- VSCode: uses
Code/User/mcp.jsonwith top-levelservers.unityMCPand"type": "stdio". On Windows, MCP for Unity writes an absoluteuv.exe(prefers WinGet Links shim) to avoid PATH issues. - Cursor / Windsurf (help link): if
uvis missing, the MCP for Unity window shows "uv Not Found" with a quick [HELP] link and a "ChooseuvInstall Location" button. - Claude Code (help link): if
claudeisn't found, the window shows "Claude Not Found" with [HELP] and a "Choose Claude Location" button. Unregister now updates the UI immediately.
Option B: Manual Configuration
If Auto-Setup fails or you use a different client:
- Find your MCP Client's configuration file. (Check client documentation).
- Claude Example (macOS):
~/Library/Application Support/Claude/claude_desktop_config.json - Claude Example (Windows):
%APPDATA%\Claude\claude_desktop_config.json
- Claude Example (macOS):
- Edit the file to add/update the
mcpServerssection, using the exact paths from Step 1.
Click for Client-Specific JSON Configuration Snippets...
Claude Code
If you're using Claude Code, you can register the MCP server using the below commands:
macOS:
claude mcp add --scope user UnityMCP -- uv --directory /Users/USERNAME/Library/AppSupport/UnityMCP/UnityMcpServer/src run server.py
Windows:
claude mcp add --scope user UnityMCP -- "C:/Users/USERNAME/AppData/Local/Microsoft/WinGet/Links/uv.exe" --directory "C:/Users/USERNAME/AppData/Local/UnityMCP/UnityMcpServer/src" run server.py
VSCode (all OS)
{
"servers": {
"unityMCP": {
"command": "uv",
"args": ["--directory","<ABSOLUTE_PATH_TO>/UnityMcpServer/src","run","server.py"],
"type": "stdio"
}
}
}
On Windows, set command to the absolute shim, e.g. C:\\Users\\YOU\\AppData\\Local\\Microsoft\\WinGet\\Links\\uv.exe.
Windows:
{
"mcpServers": {
"UnityMCP": {
"command": "uv",
"args": [
"run",
"--directory",
"C:\\Users\\YOUR_USERNAME\\AppData\\Local\\UnityMCP\\UnityMcpServer\\src",
"server.py"
]
}
// ... other servers might be here ...
}
}
(Remember to replace YOUR_USERNAME and use double backslashes \)
macOS:
{
"mcpServers": {
"UnityMCP": {
"command": "uv",
"args": [
"run",
"--directory",
"/Users/YOUR_USERNAME/Library/AppSupport/UnityMCP/UnityMcpServer/src",
"server.py"
]
}
// ... other servers might be here ...
}
}
(Replace YOUR_USERNAME. Note: AppSupport is a symlink to "Application Support" to avoid quoting issues)
Linux:
{
"mcpServers": {
"UnityMCP": {
"command": "uv",
"args": [
"run",
"--directory",
"/home/YOUR_USERNAME/.local/share/UnityMCP/UnityMcpServer/src",
"server.py"
]
}
// ... other servers might be here ...
}
}
(Replace YOUR_USERNAME)
Usage ▶️
-
Open your Unity Project. The MCP for Unity package should connect automatically. Check status via Window > MCP for Unity.
-
Start your MCP Client (Claude, Cursor, etc.). It should automatically launch the MCP for Unity Server (Python) using the configuration from Installation Step 2.
-
Interact! Unity tools should now be available in your MCP Client.
Example Prompt:
Create a 3D player controller,Create a tic-tac-toe game in 3D,Create a cool shader and apply to a cube.
Working with Multiple Unity Instances
MCP for Unity supports multiple Unity Editor instances simultaneously. Each instance is isolated per MCP client session.
To direct tool calls to a specific instance:
- List available instances: Ask your LLM to check the
unity_instancesresource - Set the active instance: Use
set_active_instancewith the instance name (e.g.,MyProject@abc123) - All subsequent tools route to that instance until changed
Example:
User: "List all Unity instances"
LLM: [Shows ProjectA@abc123 and ProjectB@def456]
User: "Set active instance to ProjectA@abc123"
LLM: [Calls set_active_instance("ProjectA@abc123")]
User: "Create a red cube"
LLM: [Creates cube in ProjectA]
Development & Contributing 🛠️
Development Setup and Guidelines
See README-DEV.md for complete development setup and workflow documentation.
Adding Custom Tools
MCP for Unity uses a Python MCP Server tied with Unity's C# scripts for tools. If you'd like to extend the functionality with your own tools, learn how to do so in CUSTOM_TOOLS.md.
How to Contribute
- Fork the main repository.
- Create an issue to discuss your idea or bug.
- Create a branch (
feature/your-ideaorbugfix/your-fix). - Make changes.
- Commit (feat: Add cool new feature).
- Push your branch.
- Open a Pull Request against the main branch, referencing the issue you created earlier.
📊 Telemetry & Privacy
MCP for Unity includes privacy-focused, anonymous telemetry to help us improve the product. We collect usage analytics and performance data, but never your code, project names, or personal information.
- 🔒 Anonymous: Random UUIDs only, no personal data
- 🚫 Easy opt-out: Set
DISABLE_TELEMETRY=trueenvironment variable - 📖 Transparent: See TELEMETRY.md for full details
Your privacy matters to us. All telemetry is optional and designed to respect your workflow.
Troubleshooting ❓
Click to view common issues and fixes...
- Unity Bridge Not Running/Connecting:
- Ensure Unity Editor is open.
- Check the status window: Window > MCP for Unity.
- Restart Unity.
- MCP Client Not Connecting / Server Not Starting:
- Verify Server Path: Double-check the --directory path in your MCP Client's JSON config. It must exactly match the installation location:
- Windows:
%USERPROFILE%\AppData\Local\UnityMCP\UnityMcpServer\src - macOS:
~/Library/AppSupport/UnityMCP/UnityMcpServer\src - Linux:
~/.local/share/UnityMCP/UnityMcpServer\src
- Windows:
- Verify uv: Make sure
uvis installed and working (uv --version). - Run Manually: Try running the server directly from the terminal to see errors:
cd /path/to/your/UnityMCP/UnityMcpServer/src uv run server.py
- Verify Server Path: Double-check the --directory path in your MCP Client's JSON config. It must exactly match the installation location:
- Configuration Failed:
- Use the Manual Configuration steps. The plugin may lack permissions to write to the MCP client's config file.
Still stuck? Open an Issue or Join the Discord!
License 📜
MIT License. See LICENSE file.
Star History
Unity AI Tools by Coplay
Coplay offers 2 AI tools for Unity
- MCP for Unity is available freely under the MIT license.
- Coplay is a premium Unity AI assistant that sits within Unity and is more than the MCP for Unity.
(These tools have different tech stacks. See this blog post comparing Coplay to MCP for Unity.)
Disclaimer
This project is a free and open-source tool for the Unity Editor, and is not affiliated with Unity Technologies.