Atlas / Skills / coplaydev / Unity Mcp Orchestrator

Unity Mcp OrchestratorCAUTION

skills/coplaydev/unity-mcp-orchestrator

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.

Verdict
CAUTION
Grade
C
Trust score
71 /100
Version
—
Hosts
8 documented
License
MIT
Stars
15,226
01

Overview

From the repository's own README, as read at the audited commit. Badges and raw HTML are left out.

English 简体中文 | Discord Wiki

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

Read from source at commit f5ddb2faaa0cOBSERVED · 2026-10-20
Advertisement
02

Install

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 \
03

Host compatibility

What the documentation claims. We have not run a compatibility test.

HostStatusNotes
claude-codementioned
claude-desktopmentioned
codexmentioned
copilotmentioned
cursormentioned
gemini-climentioned
openclawmentioned
windsurfmentioned
04

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–
05

Trust audit

CAUTIONgrade C · trust 71/100 Install with care. The audit found things worth knowing before you trust its output.

LayerWhat it checksResult
L0Provenance & inventoryPASS
L1Static analysis of the codeWARN
L2Instruction surface (what it tells the agent)PASS
L3Class-specific surfacePASS
L4Behavioural (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)

MEDIUMCode injection · code.dynamic_import · CWE-78, CWE-94, CWE-95
Server/src/utils/module_discovery.py:32
importlib.import_module(full_module_name, package_name)
MEDIUMCode injection · code.dynamic_import · CWE-78, CWE-94, CWE-95
Server/src/utils/module_discovery.py:51
importlib.import_module(full_module_name, package_name)
MEDIUMNetwork egress · net.raw_ip · CWE-200, CWE-319
MCPForUnity/Editor/Helpers/HttpEndpointUtility.cs:22
private const string DefaultLocalBaseUrl = "http://127.0.0.1:8080";
MEDIUMNetwork egress · net.raw_ip · CWE-200, CWE-319
Server/src/main.py:703
default="http://127.0.0.1:8080",
MEDIUMNetwork egress · net.raw_ip · CWE-200, CWE-319
Server/src/main.py:705
help="HTTP server URL (default: http://127.0.0.1:8080). "
MEDIUMObfuscation / stealth · obf.zero_width · CWE-506, CWE-94
tools/local_harness.py:181
line = raw.lstrip("").strip()
MEDIUMHard-coded secrets · secret.generic · CWE-798, CWE-321
TestProjects/UnityMCPTests/Assets/Tests/EditMode/AssetGen/AssetGenJobManagerTests.cs:21
private const string Secret = "tsk_e2e_secret_value";
LOWInventory / provenance · inv.binary · CWE-1104
website/static/img/building_scene.webm
building_scene.webm
Why it matters. a compiled or binary member cannot be reviewed from source
Fix. ship source, or explain the binary in the README
LOWInventory / provenance · inv.hidden_file · CWE-1104
.mcpbignore
.mcpbignore
Why it matters. hidden member outside the usual dotfiles
Fix. review its purpose
LOWInventory / provenance · inv.hidden_file · CWE-1104
website/static/.nojekyll
.nojekyll
Why it matters. hidden member outside the usual dotfiles
Fix. review its purpose
LOWCode injection · code.dynamic_import · CWE-78, CWE-94, CWE-95
Server/tests/test_asset_gen_catalog.py:22
module = importlib.import_module(f"services.tools.generate_{kind}")
LOWCode injection · code.dynamic_import · CWE-78, CWE-94, CWE-95
Server/tests/test_asset_gen_catalog.py:81
module = importlib.import_module(f"services.tools.generate_{kind}")
LOWFilesystem / path · fs.traversal · CWE-22, CWE-59
Server/tests/integration/test_external_changes_scanner.py:67
'{\n  "dependencies": {\n    "com.example.pkg": "file:../../ExternalPkg"\n  }\n}\n',
LOWNetwork egress · net.beacon_words · CWE-200, CWE-319
.github/workflows/docs-deploy.yml:74
# Inject the cookieless GoatCounter beacon when provisioned. The site
LOWNetwork egress · net.raw_ip · CWE-200, CWE-319
Server/README.md:89
docker run -p 8080:8080 msanatan/mcp-for-unity-server:latest --transport http --http-url http://0.0.0.0:8080
LOWNetwork egress · net.raw_ip · CWE-200, CWE-319
Server/README.md:96
docker run -p 8080:8080 unity-mcp-server --transport http --http-url http://0.0.0.0:8080
LOWObfuscation / stealth · obf.decode_call · CWE-506, CWE-94
Server/src/cli/commands/code.py:218
contents = base64.b64decode(
LOWObfuscation / stealth · obf.decode_call · CWE-506, CWE-94
Server/src/services/tools/find_in_file.py:114
contents = base64.b64decode(data.get("encodedContents", "").encode(
LOWObfuscation / stealth · obf.decode_call · CWE-506, CWE-94
Server/src/services/tools/manage_script.py:138
contents = base64.b64decode(data.get("encodedContents", "").encode(
LOWObfuscation / stealth · obf.decode_call · CWE-506, CWE-94
Server/src/services/tools/manage_script.py:596
decoded_contents = base64.b64decode(
LOWObfuscation / stealth · obf.decode_call · CWE-506, CWE-94
Server/src/services/tools/manage_shader.py:61
decoded_contents = base64.b64decode(
LOWSupply chain · supply.unpinned · CWE-829, CWE-1357
website/package.json
@docusaurus/core, @docusaurus/plugin-client-redirects, @docusaurus/preset-classic, @easyops-cn/docusaurus-search-local, @mdx-js/react, clsx, prism-react-renderer, react
Why it matters. 13 dependency range(s) float
Fix. pin exact versions or ship a lockfile
LOWPrompt injection · prompt.persistence · CWE-94, CWE-1427
website/docs/contributing/dev-setup.md:335
# 3. Export the .ulf contents (add to ~/.zshrc or ~/.bashrc to persist):
Why it matters. instructs the agent to persist itself in the user's environment
LOWSupply chain · prompt.pipe_to_shell · CWE-829, CWE-1357
website/docs/guides/claude-code-cli.md:22
curl -fsSL https://claude.ai/install.sh | bash
LOWSupply chain · prompt.pipe_to_shell · CWE-829, CWE-1357
website/docs/guides/troubleshooting.md:44
curl -fsSL https://claude.ai/install.sh | bash

Gates applied: no_behavioural_pass.

Audited 2026-10-20 · audit v0.4.1 · source sha f5ddb2faaa0cfull audit observations/trust-audit/skill/coplaydev__unity-mcp-orchestrator.json · Report an issue / request a re-scan
06

Audit history

Every audit this skill has had.

DateSourceVerdictGradeScoreChange
2026-10-20f5ddb2faaa0cCAUTIONC71first audit
07

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.

ModelsAtlas audit badge

Markdown
[![ModelsAtlas audit: Unity Mcp Orchestrator](https://modelsatlas.com/skills/coplaydev/unity-mcp-orchestrator/badge.svg)](https://modelsatlas.com/skills/coplaydev/unity-mcp-orchestrator/)

Not your listing, or something out of date? Claim or update your listing.

Advertisement