Unity Mcp OrchestratorCAUTION
Unity MCP acts as a bridge between AI assistants and your Unity Editor. Give your LLM tools to manage assets, control scenes, edit scripts, and automate tasks within Unity.
Overview
From the repository's own README, as read at the audited commit. Badges and raw HTML are left out.
Proudly sponsored and maintained by Aura — the AI assistant for Unreal & Unity.
And don't miss Godot AI, the new open source project from the makers of MCP for Unity.
Create your Unity apps with LLMs. MCP for Unity bridges AI assistants — Claude, Codex, VS Code, local LLMs, and more — with your Unity Editor via Model Context Protocol. Give your LLM the tools to manage assets, control scenes, edit scripts, run tests, and automate your game dev workflows.
Recent Updates
- [v10.3.0](https://github.com/CoplayDev/unity-mcp/releases/tag/v10.3.0) (2026-10-04)
- [v10.2.0](https://github.com/CoplayDev/unity-mcp/releases/tag/v10.2.0) (2026-09-01)
- [v10.1.2](https://github.com/CoplayDev/unity-mcp/releases/tag/v10.1.2) (2026-08-02)
- [v10.1.0](https://github.com/CoplayDev/unity-mcp/releases/tag/v10.1.0) (2026-07-13)
- [v10.0.2](https://github.com/CoplayDev/unity-mcp/releases/tag/v10.0.2) (2026-07-13)
Full history: Release Notes.
What it does
Control the Unity Editor in
f5ddb2faaa0cOBSERVED · 2026-10-20Install
Commands as the repository documents them. They are shown, not run.
uvx --from mcpforunityserver mcp-for-unity --transport http --http-url http://localhost:8080
git clone https://github.com/CoplayDev/unity-mcp.git
uv run src/main.py --transport stdio
uvx --from mcpforunityserver mcp-for-unity --transport stdio
uvx --from mcpforunityserver mcp-for-unity --transport http --http-host 127.0.0.1 --http-port 8080
uvx --from mcpforunityserver mcp-for-unity \
Host compatibility
What the documentation claims. We have not run a compatibility test.
| Host | Status | Notes |
|---|---|---|
| claude-code | mentioned | |
| claude-desktop | mentioned | |
| codex | mentioned | |
| copilot | mentioned | |
| cursor | mentioned | |
| gemini-cli | mentioned | |
| openclaw | mentioned | |
| windsurf | mentioned |
What it tells the agent
The instruction file, verbatim from the audited commit — this is the text the model reads, and the surface the audit's instruction layer examines. Quoted here so you can judge it without cloning anything.
---
name: unity-mcp-orchestrator
description: Orchestrate Unity Editor via MCP (Model Context Protocol) tools and resources. Use when working with Unity projects through MCP for Unity - creating/modifying GameObjects, editing scripts, managing scenes, running tests, or any Unity Editor automation. Provides best practices, tool schemas, and workflow patterns for effective Unity-MCP integration.
---
# Unity-MCP Operator Guide
This skill helps you effectively use the Unity Editor with MCP tools and resources.
## Template Notice
Examples in `references/workflows.md` and `references/tools-reference.md` are reusable templates. They may be inaccurate across Unity versions, package setups (UGUI/TMP/Input System), and project-specific conventions. Please check console, compilation errors, or use screenshot after implementation.
Before applying a template:
- Validate targets/components first via resources and `find_gameobjects`.
- Treat names, enum values, and property payloads as placeholders to adapt.
## Quick Start: Resource-First Workflow
**Always read relevant resources before using tools.** This prevents errors and provides the necessary context.
```
1. Check editor state → mcpforunity://editor/state
2. Understand the scene → mcpforunity://scene/gameobject-api
3. Find what you need → find_gameobjects or resources
4. Take action → tools (manage_gameobject, create_script, script_apply_edits, apply_text_edits, validate_script, delete_script, get_sha, etc.)
5. Verify results → read_console, manage_camera(action="screenshot"), resources
```
**If a tool you need is not in your tool list, it is not necessarily missing.** Check these before troubleshooting the connection:
- **Project custom tools** (C# `[McpForUnityTool]`): with project-scoped tools enabled on the server, they are *not* callable by name. List them via `mcpforunity://custom-tools` and run them with `execute_custom_tool(tool_name="...", parameters={...})`. With it disabled, they are registered as ordinary tools and appear in your list.
- **Disabled tool groups**: over HTTP, a session starts with only the `core` group enabled. Over stdio, all groups start enabled and are then synced to the tool toggles in the Unity editor, so a tool can still be hidden. `manage_tools(action="list_groups")` shows the groups, `manage_tools(action="activate", group="...")` enables one.
## Critical Best Practices
### 1. After Writing/Editing Scripts: Wait for Compilation and Check Console
```python
# After create_script or script_apply_edits:
# Both tools already trigger AssetDatabase.ImportAsset + RequestScriptCompilation automatically.
# No need to call refresh_unity — just wait for compilation to finish, then check console.
# 1. Poll editor state until compilation completes
# Read mcpforunity://editor/state → wait until is_compiling == false
# 2. Check for compilation errors
read_console(types=["error"], count=10, include_stacktrace=True)
```
**Why:** Unity must compile scripts before they're usable. `create_script` and `script_apply_edits` already trigger import and compilation automatically — calling `refresh_unity` afterward is redundant.
### 2. Use `batch_execute` for Multiple Operations
```python
# 10-100x faster than sequential calls
batch_execute(
commands=[
{"tool": "manage_gameobject", "params": {"action": "create", "name": "Cube1", "primitive_type": "Cube"}},
{"tool": "manage_gameobject", "params": {"action": "create", "name": "Cube2", "primitive_type": "Cube"}},
{"tool": "manage_gameobject", "params": {"action": "create", "name": "Cube3", "primitive_type": "Cube"}}
],
parallel=True # Hint only: Unity may still execute sequentially
)
```
**Max 25 commands per batch by default (configurable in Unity MCP Tools window, max 100).** Use `fail_fast=True` for dependent operations.
**Tip:** Also use `batch_execute` for discovery — batch multiple `find_gameobjects` calls instead of calling them one at a time:
```python
batch_execute(commands=[
{"tool": "find_gameobjects", "params": {"search_term": "Camera", "search_method": "by_component"}},
{"tool": "find_gameobjects", "params": {"search_term": "Player", "search_method": "by_tag"}},
{"tool": "find_gameobjects", "params": {"search_term": "GameManager", "search_method": "by_name"}}
])
```
### 3. Use Screenshots to Verify Visual Results
```python
# Basic screenshot (saves to Assets/, returns file path only)
manage_camera(action="screenshot")
# Inline screenshot (returns base64 PNG directly to the AI)
manage_camera(action="screenshot", include_image=True)
# Use a specific camera and cap resolution for smaller payloads
manage_camera(action="screenshot", camera="MainCamera", include_image=True, max_resolution=512)
# Batch surround: captures front/back/left/right/top/bird_eye around the scene
manage_camera(action="screenshot", batch="surround", max_resolution=256)
# Batch surround centered on a specific object
manage_camera(action="screenshot", batch="surround", view_target="Player", max_resolution=256)
# Positioned screenshot: place a temp camera and capture in one call
manage_camera(action="screenshot", view_target="Player", view_position=[0, 10, -10], max_resolution=512)
# Scene View screenshot: capture what the developer sees in the editor
manage_camera(action="screenshot", capture_source="scene_view", include_image=True)
# Scene View framed on a specific object
manage_camera(action="screenshot", capture_source="scene_view", view_target="Canvas", include_image=True)
```
**Best practices for AI scene understanding:**
- Use `include_image=True` when you need to *see* the scene, not just save a file.
- Use `batch="surround"` for a comprehensive overview (6 angles, one command).
- Use `view_target`/`view_position` to capture from a specific viewpoint without needing a scene camera.
- Use `capture_source="scene_view"` to see the editor viewport (gizmos, wireframes, grid).
- Keep `max_resolution` at 256–Trust audit
CAUTIONgrade C · trust 71/100 Install with care. The audit found things worth knowing before you trust its output.
| Layer | What it checks | Result |
|---|---|---|
| L0 | Provenance & inventory | PASS |
| L1 | Static analysis of the code | WARN |
| L2 | Instruction surface (what it tells the agent) | PASS |
| L3 | Class-specific surface | PASS |
| L4 | Behavioural (sandbox) | SKIPPED |
What the source does
- Filesystem
- declared (9 observation(s))
- Network
- declared (6 observation(s))
- Shell
- declared (2 observation(s))
- Dependencies
- not all pinned
- Secrets in source
- found
Findings (25)
importlib.import_module(full_module_name, package_name)
importlib.import_module(full_module_name, package_name)
private const string DefaultLocalBaseUrl = "http://127.0.0.1:8080";
default="http://127.0.0.1:8080",
help="HTTP server URL (default: http://127.0.0.1:8080). "
line = raw.lstrip("").strip()private const string Secret = "tsk_e2e_secret_value";
building_scene.webm
.mcpbignore
.nojekyll
module = importlib.import_module(f"services.tools.generate_{kind}")module = importlib.import_module(f"services.tools.generate_{kind}")'{\n "dependencies": {\n "com.example.pkg": "file:../../ExternalPkg"\n }\n}\n',# Inject the cookieless GoatCounter beacon when provisioned. The site
docker run -p 8080:8080 msanatan/mcp-for-unity-server:latest --transport http --http-url http://0.0.0.0:8080
docker run -p 8080:8080 unity-mcp-server --transport http --http-url http://0.0.0.0:8080
contents = base64.b64decode(
contents = base64.b64decode(data.get("encodedContents", "").encode(contents = base64.b64decode(data.get("encodedContents", "").encode(decoded_contents = base64.b64decode(
decoded_contents = base64.b64decode(
@docusaurus/core, @docusaurus/plugin-client-redirects, @docusaurus/preset-classic, @easyops-cn/docusaurus-search-local, @mdx-js/react, clsx, prism-react-renderer, react
# 3. Export the .ulf contents (add to ~/.zshrc or ~/.bashrc to persist):
curl -fsSL https://claude.ai/install.sh | bash
curl -fsSL https://claude.ai/install.sh | bash
Gates applied: no_behavioural_pass.
f5ddb2faaa0cfull audit observations/trust-audit/skill/coplaydev__unity-mcp-orchestrator.json · Report an issue / request a re-scanAudit history
Every audit this skill has had.
| Date | Source | Verdict | Grade | Score | Change |
|---|---|---|---|---|---|
| 2026-10-20 | f5ddb2faaa0c | CAUTION | C | 71 | first audit |
Questions
What does the unity-mcp-orchestrator — coplaydev/unity-mcp skill do?
Unity MCP acts as a bridge between AI assistants and your Unity Editor. Give your LLM tools to manage assets, control scenes, edit scripts, and automate tasks within Unity.
Is unity-mcp-orchestrator — coplaydev/unity-mcp safe to install?
With care. The audit graded it C (71/100) and found 25 things worth knowing before you trust this skill, listed below with the exact line each was found on.
What can unity-mcp-orchestrator — coplaydev/unity-mcp access on my machine?
The audit observed that it reaches the network, runs shell commands and reads or writes files. Each of those is consistent with what it says it does. Secrets in the source: found — see the findings.
Which assistants does unity-mcp-orchestrator — coplaydev/unity-mcp work with?
Its documentation mentions claude-code, claude-desktop, codex, copilot, cursor, gemini-cli, openclaw and windsurf. That is what the text claims, not a compatibility test we ran.
How current is this page?
The grade is for one exact copy of the source (f5ddb2faaa0c), read on 2026-10-20. The repository is watched, and a new audit runs when it changes — this is the first audit.
Add this badge to your README
Shows this page's audit result and links back to it. It updates when the audit does.
[](https://modelsatlas.com/skills/coplaydev/unity-mcp-orchestrator/)
Not your listing, or something out of date? Claim or update your listing.