Controls the Unity Editor through an MCP server and local TCP bridge for scene, asset, script, console, test, and build workflows.
Copy the AI prompt to install this server into Claude Code, Cursor, or another agent โ or use 1-click editor setup below.
One-click editor setup isnโt available for this listing yet โ we donโt have a confirmed install command, and weโd rather show nothing than point your editor at the wrong package or host. Follow the projectโs own setup instructions, linked above.
Inspect callable tools, capabilities, and parameters exposed to AI agents by Patina Unity MCP.
Control the Unity Editor from any MCP host. One package install, one click, and your AI assistant can see your scene, create objects, and talk to the console.
Patina is a Rust MCP server paired with a C# Unity bridge. It connects your favorite AI coding tool directly to the Unity Editor over a local TCP channel, with zero manual config.
The host launches the Rust binary over stdio MCP. The Rust server forwards tool calls into Unity through a local loopback TCP bridge. Unity executes them on the main thread and returns the result.
In Unity, open Project Settings > Package Manager, add a scoped registry, then install the package by name.
Scoped registry:
| Field | Value |
|---|---|
| Name | npmjs |
| URL | https://registry.npmjs.org |
| Scope(s) | com.taygunsavas |
Then open the Package Manager (Window > Package Manager), click the + icon in the top left, select Add package by name..., and enter:
Registry releases are signed during the release workflow for Unity Package Manager verification.
Alternatively, open the Package Manager, click the + icon, select Add package from git URL..., and enter:
Patina is distributed as a complete Unity package artifact with the editor code, native Rust runtime binaries under Plugins/<platform>/, and the Unity metadata needed for import. End users do not need the Rust toolchain or a Git checkout of this repository.
Open Window > Patina Unity MCP and click One-Click Setup.
The setup flow verifies the binary, starts the Unity bridge, auto-configures every detected host, replaces stale entries, and shows restart guidance where needed.
Patina writes host configs to a stable user-level runtime path instead of a per-project Unity package cache path. When the package is updated, the Unity editor package refreshes that managed runtime automatically, so supported MCP hosts do not need to be reconfigured just because the package cache path changed.
Open your MCP host and try:
Patina keeps the advertised MCP surface compact so hosts do not need to load every Unity command schema into context. Agents should use:
| MCP tool | What it does |
|---|---|
patina_capabilities | Search or browse the Unity command catalog; request schemas only for specific commands |
patina_call | Execute a catalog command with JSON parameters |
patina_health | Inspect Patina version, command count, bridge port, optional Unity editor state, and bridge diagnostics |
The 87 commands below are available through patina_capabilities and patina_call.
| Tool | What it does |
|---|---|
get_hierarchy | Retrieve the active scene's GameObject tree as nested JSON; supports max_depth and name_filter |
get_scene_info | Active scene metadata (name, path, build index, root count, dirty state); pass include_all_scenes for all loaded scenes |
open_scene | Open a scene by project-relative path; mode single (default) or additive |
save_scene | Save the active scene or any loaded scene; supports Save As |
new_scene | Create and save a new scene with optional empty or default-game-objects setup |
| Tool | What it does |
|---|---|
create_game_object | Spawn an empty GameObject or a built-in primitive (Cube, Sphere, Capsule, Cylinder, Plane, Quad) |
delete_game_object | Permanently delete a GameObject and all its children |
duplicate_game_object | Duplicate a GameObject and its children |
reparent_game_object | Move a GameObject under a new parent; pass null to promote to scene root |
get_game_object_info | Full details for a named GameObject: transform, tag, layer, and all component properties |
set_active_state | Show or hide a GameObject via SetActive() |
set_tag | Set the tag on a GameObject (tag must be registered in Tags & Layers) |
set_layer | Set the layer by name; optionally apply to all children |
set_transform | Set position, rotation (Euler), and/or scale in world or local space in one call |
| Tool | What it does |
|---|---|
add_component | Add a component by short name (Rigidbody) or fully qualified name |
remove_component | Remove a component by type name |
set_property | Set any serialized property on a component using its SerializedObject path |
get_game_object_components | Return a lightweight component list for a GameObject |
| Tool | What it does |
|---|---|
batch_set_properties | Apply serialized property changes across multiple GameObjects |
batch_add_components | Add components to multiple GameObjects |
batch_set_transform | Apply transform changes to multiple GameObjects |
| Tool | What it does |
|---|---|
create_prefab | Save a scene GameObject as a prefab asset |
instantiate_prefab | Instantiate a prefab into the scene at an optional world position |
get_prefab_info | Inspect a prefab asset or scene instance; returns asset type, overrides list, and instance status |
unpack_prefab | Sever a prefab instance link; outermost (default) or completely |
apply_prefab_overrides | Apply all instance overrides back to the source prefab asset on disk |
revert_prefab_overrides | Restore a prefab instance to match its source asset |
list_prefab_components | List component types and instance IDs on a prefab asset; optionally includes child GameObjects with transform paths |
edit_prefab_asset | Perform a batch of edit operations (add/remove component, add/remove child, set field) on a prefab asset, including object-reference fields |
open_prefab_stage | Open a prefab asset in Unity's prefab stage for editing; exit using close_prefab_stage |
close_prefab_stage | Close the active prefab stage; save_changes parameter resolves dirty stages without Unity's blocking save prompt, giving save or discard decision |
Example: Set a component reference within a prefab.
To point a serialized field at another component inside the same prefab, pass an edit_prefab_asset action with set_field and an object reference value. The transform_path inside value is resolved against the prefab root, not against the action's own transform_path:
| Tool | What it does |
|---|---|
find_assets_by_type | Search the Asset Database by type filter (t:Material, t:Prefab, t:Texture2D, etc.) |
find_assets_by_name | Search the Asset Database by partial name match |
get_asset_info | Metadata for an asset: GUID, type, file size, labels, and importer settings |
create_folder | Create a new folder in the Asset Database |
move_asset | Move an asset to a new project-relative path |
rename_asset | Rename an asset in-place |
delete_asset | Delete an asset by project-relative path |
refresh_asset_database | Trigger AssetDatabase.Refresh; incremental or force-reimport |
set_asset_labels | Replace the full label list on an asset |
| Tool | What it does |
|---|---|
create_material | Create a new Material asset; defaults to URP/Lit |
get_material_properties | Read all exposed shader properties with names, types, and current values |
set_material_property | Set a shader property (float, bool, color, vector, or texture path) |
assign_material | Assign a Material to a specific Renderer slot |
Factual signals from GitHub, npm, and our automated checks โ not a rating.
No reviews yet โ be the first to share how this listing worked for you.
Showcase your server listing on GitHub or your project documentation. Embed this dynamic SVG badge to highlight official listing status and live engagement.
[](https://allmcps.com/mcp/taygunsavas-patina-unity-mcp)<a href="https://allmcps.com/mcp/taygunsavas-patina-unity-mcp"><img src="https://allmcps.com/api/badge/taygunsavas-patina-unity-mcp?style=directory" alt="Patina Unity MCP on AllMCPs" /></a>