Go to file
Marcus Sanatan 5488af2c99
Make it easier to add tools (#301)
* Add a decorate that wraps around the `mcp.tool` decorator.

This will allow us to more easily collect tools

* Register tools that's defined in the tools folder

* Update Python tools to use new decorator

* Convert script_apply_edits tool

* Convert last remaining tools with new decorator

* Create an attribute so we can identify tools via Reflection

* Add attribute to all C# tools

* Use reflection to load tools

* Initialize command registry to load tools at startup

* Update tests

* Move Dev docs to docs folder

* Add docs for adding custom tools

* Update function docs for Python decorator

* Add working example of adding a screenshot tool

* docs: update relative links in README files

Updated the relative links in both README-DEV.md and README-DEV-zh.md to use direct filenames instead of paths relative to the docs directory, improving link correctness when files are accessed from the root directory.

* docs: update telemetry documentation path reference

Updated the link to TELEMETRY.md in README.md to point to the new docs/ directory location to ensure users can access the telemetry documentation correctly. Also moved the TELEMETRY.md file to the docs/ directory as part of the documentation restructuring.

* rename CursorHelp.md to docs/CURSOR_HELP.md

Moved the CursorHelp.md file to the docs directory to better organize documentation files and improve project structure.

* docs: update CUSTOM_TOOLS.md with improved tool naming documentation and path corrections

- Clarified that the `name` argument in `@mcp_for_unity_tool` decorator is optional and defaults to the function name
- Added documentation about using all FastMCP `mcp.tool` function decorator options
- Updated class naming documentation to mention snake_case conversion by default
- Corrected Python file path from `tools/screenshot_tool.py` to `UnityMcpServer~/src/tools/screenshot_tool.py`
- Enhanced documentation for tool discovery and usage examples

* docs: restructure development documentation and add custom tools guide

Rearranged the development section in README.md to better organize the documentation flow. Added a dedicated section for "Adding Custom Tools" with a link to the new CUSTOM_TOOLS.md file, and renamed the previous "For Developers" section to "Contributing to the Project" to better reflect its content. This improves discoverability and organization of the development setup documentation.

* docs: update developer documentation and add README links

- Added links to developer READMEs in CUSTOM_TOOLS.md to guide users to the appropriate documentation
- Fixed typo in README-DEV.md ("roote" → "root") for improved clarity
- These changes improve the developer experience by providing better documentation navigation and correcting technical inaccuracies

* feat(tools): enhance tool registration with wrapped function assignment

Updated the tool registration process to properly chain the mcp.tool decorator and telemetry wrapper, ensuring the wrapped function is correctly assigned to tool_info['func'] for proper tool execution and telemetry tracking. This change improves the reliability of tool registration and monitoring.

* Remove AI generated code that was never used...

* feat: Rebuild MCP server installation with embedded source

Refactored the server repair logic to implement a full rebuild of the MCP server installation using the embedded source. The new RebuildMcpServer method now:
- Uses embedded server source instead of attempting repair of existing installation
- Deletes the entire existing server directory before re-copying
- Handles UV process cleanup for the target path
- Simplifies the installation flow by removing the complex Python environment repair logic
- Maintains the same installation behavior but with a cleaner, more reliable rebuild approach

This change improves reliability of server installations by ensuring a clean slate rebuild rather than attempting to repair potentially corrupted environments.

* Add the rebuild server step

* docs: clarify tool description field requirements and client compatibility

* fix: move initialization flag after tool discovery to prevent race conditions

* refactor: remove redundant TryParseVersion overrides in platform detectors

* refactor: remove duplicate UV validation code from platform detectors

* Update UnityMcpBridge/Editor/Tools/CommandRegistry.cs

Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com>

* refactor: replace WriteToConfig reflection with direct McpConfigurationHelper call

---------

Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com>
2025-10-03 18:53:09 -04:00
.claude Improved ci prompt testing suite (#270) 2025-09-07 15:47:56 -07:00
.github Autoformat (#297) 2025-09-30 16:25:33 -04:00
TestProjects/UnityMCPTests Make it easier to add tools (#301) 2025-10-03 18:53:09 -04:00
UnityMcpBridge Make it easier to add tools (#301) 2025-10-03 18:53:09 -04:00
docs Make it easier to add tools (#301) 2025-10-03 18:53:09 -04:00
scripts Improved ci prompt testing suite (#270) 2025-09-07 15:47:56 -07:00
tests Autoformat (#297) 2025-09-30 16:25:33 -04:00
tools Autoformat (#297) 2025-09-30 16:25:33 -04:00
.gitignore feat: Automatic Background Compile and Domain Reload for MCP Script Edits and New Script Creation (#248) 2025-09-02 09:36:50 -07:00
LICENSE chore: update package metadata and license to CoplayDev organization 2025-08-08 15:54:43 -04:00
README-zh.md Make it easier to add tools (#301) 2025-10-03 18:53:09 -04:00
README.md Make it easier to add tools (#301) 2025-10-03 18:53:09 -04:00
deploy-dev.bat Rename namespace and public facing plugin output from "Unity MCP" to "MCP for Unity" (#225) 2025-08-20 15:59:49 -04:00
logo.png docs: add Coplay sponsorship and logo to README 2025-08-06 20:59:02 -04:00
mcp_source.py Autoformat (#297) 2025-09-30 16:25:33 -04:00
prune_tool_results.py Improved ci prompt testing suite (#270) 2025-09-07 15:47:56 -07:00
restore-dev.bat Rename namespace and public facing plugin output from "Unity MCP" to "MCP for Unity" (#225) 2025-08-20 15:59:49 -04:00
test_unity_socket_framing.py Autoformat (#297) 2025-09-30 16:25:33 -04:00

README.md

MCP for Unity
English 简体中文

Proudly sponsored and maintained by Coplay -- the best AI assistant for Unity. Read the backstory here.

Discord python GitHub commit activity GitHub Issues or Pull Requests

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.
Available Tools

Your LLM can use functions like:

  • read_console: Gets messages from or clears the console.
  • manage_script: Manages C# scripts (create, read, update, delete).
  • manage_editor: Controls and queries the editor's state and settings.
  • manage_scene: Manages scenes (load, save, create, get hierarchy, etc.).
  • manage_asset: Performs asset operations (import, create, modify, delete, etc.).
  • manage_shader: Performs shader CRUD operations (create, read, modify, delete).
  • manage_gameobject: Manages GameObjects: create, modify, delete, find, and component operations.
  • manage_menu_item: List Unity Editor menu items; and check for their existence or execute them (e.g., execute "File/Save Project").
  • 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.

How It Works

MCP for Unity connects your tools using two components:

  1. MCP for Unity Bridge: A Unity package running inside the Editor. (Installed via Package Manager).
  2. 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).
image

Installation ⚙️

Prerequisites

  • Python: Version 3.12 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
    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
    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.


🌟 Step 1: Install the Unity Package

To install via Git URL

  1. Open your Unity project.
  2. Go to Window > Package Manager.
  3. Click + -> Add package from git URL....
  4. Enter:
    https://github.com/CoplayDev/unity-mcp.git?path=/UnityMcpBridge
    
  5. Click Add.
  6. The MCP server is installed automatically by the package on first run or via Auto-Setup. If that fails, use Manual Configuration (below).

To install via OpenUPM

  1. Install the OpenUPM CLI
  2. Open a terminal (PowerShell, Terminal, etc.) and navigate to your Unity project directory
  3. 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).

MCPForUnity-Readme-Image

Option A: Auto-Setup (Recommended for Claude/Cursor/VSC Copilot)

  1. In Unity, go to Window > MCP for Unity.
  2. Click Auto-Setup.
  3. 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.json with top-level servers.unityMCP and "type": "stdio". On Windows, MCP for Unity writes an absolute uv.exe (prefers WinGet Links shim) to avoid PATH issues.
  • Cursor / Windsurf (help link): if uv is missing, the MCP for Unity window shows "uv Not Found" with a quick [HELP] link and a "Choose uv Install Location" button.
  • Claude Code (help link): if claude isn'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:

  1. 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
  2. Edit the file to add/update the mcpServers section, 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: 🚨make sure to run these from your Unity project's home directory🚨

macOS:

claude mcp add UnityMCP -- uv --directory /Users/USERNAME/Library/AppSupport/UnityMCP/UnityMcpServer/src run server.py

Windows:

claude mcp add 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 ▶️

  1. Open your Unity Project. The MCP for Unity package should connect automatically. Check status via Window > MCP for Unity.

  2. Start your MCP Client (Claude, Cursor, etc.). It should automatically launch the MCP for Unity Server (Python) using the configuration from Installation Step 2.

  3. 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.


Development & Contributing 🛠️

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.

Contributing to the Project

If you're contributing to MCP for Unity or want to test core changes, we have development tools to streamline your workflow:

  • Development Deployment Scripts: Quickly deploy and test your changes to MCP for Unity Bridge and Python Server
  • Automatic Backup System: Safe testing with easy rollback capabilities
  • Hot Reload Workflow: Fast iteration cycle for core development

📖 See README-DEV.md for complete development setup and workflow documentation.

Contributing 🤝

Help make MCP for Unity better!

  1. Fork the main repository.
  2. Create a branch (feature/your-idea or bugfix/your-fix).
  3. Make changes.
  4. Commit (feat: Add cool new feature).
  5. Push your branch.
  6. Open a Pull Request against the main branch.

📊 Telemetry & Privacy

Unity MCP 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=true environment 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
    • Verify uv: Make sure uv is 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
      
  • Auto-Configure Failed:
    • Use the Manual Configuration steps. Auto-configure might 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

Star History Chart

Sponsor

Coplay Logo