UnityInfoMCP
Provides tools for runtime inspection and automation of Unity games, enabling users to explore scene hierarchies, inspect and modify component fields, search for text elements, and capture screenshots from live Unity instances.
Click on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@UnityInfoMCPFind the Player object and show me its current transform position"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
English | 한국어
UnityInfoMCP
Unity runtime inspection toolkit for MCP-based automation.
This repository contains two parts:
UnityInfoMCP: an external Python MCP serverUnityInfoBridge: an in-game Unity plugin that exposes runtime data over local JSON-RPC
The split is intentional:
the MCP server can stay alive while games restart
AI clients keep a stable MCP endpoint
the game-side bridge can reconnect whenever the game launches again
Port layout
This is the part that matters most in practice:
MCP server in default HTTP mode:
http://127.0.0.1:16000/mcpMCP server in stdio mode: no listening socket; the MCP client launches the process directly
Game bridge: first free port in
127.0.0.1:16001~16100
These are different connections.
--transport streamable-httpuses the HTTP endpoint above--transport stdioswitches the client-facing transport to stdio--portonly applies to--transport streamable-httpUNITY_INFO_BRIDGE_PORTis only a legacy fallback for bridge connection attemptsbridge auto-discovery still scans
16001~1610016000is theUnityInfoMCPHTTP port. The in-gameUnityInfoBridgeplugin itself binds the first free port in16001~16100.
There are also two separate transport layers:
Client ->
UnityInfoMCP: Streamable HTTP or stdioUnityInfoMCP->UnityInfoBridge: TCP
Repository layout
UnityInfoMCPThe Python MCP packageUnityInfoBridgeThe Unity plugin projectUnityInfoBridge/includesReference DLLs used to build the bridgedocsBridge protocol and tool mapping documents
Supported bridge targets
UnityInfoBridge currently targets:
BepInEx BE #754+MonoBepInEx BE #754+IL2CPPMelonLoader 0.7.2MonoMelonLoader 0.7.2IL2CPP
Running the MCP server
Create and activate a virtual environment:
python -m venv .venv
. .venv/Scripts/activate
pip install -e .For PyInstaller or release builds, install the build extra instead:
pip install -e ".[build]"Run the MCP server on the default transport and port:
unity-info-mcpThat starts the Streamable HTTP transport on 127.0.0.1:16000 and exposes /mcp.
If the unity-info-mcp command is not found on Windows, use:
python -m UnityInfoMCPThat usually means Python's user Scripts directory is not on PATH.
In this environment, the generated launcher is installed at:
C:\Users\USER\AppData\Local\Python\pythoncore-3.12-64\Scripts\unity-info-mcp.exeRun it on a different port:
unity-info-mcp --port 8080Run it over stdio instead:
unity-info-mcp --transport stdioBehavior:
default MCP transport: Streamable HTTP
optional MCP transport: stdio via
--transport stdiodefault HTTP bind:
127.0.0.1:16000default HTTP MCP endpoint:
http://127.0.0.1:16000/mcp--portis only valid when--transport streamable-httpis in usestartup failure: prints the error; interactive HTTP launches wait for
Enter, stdio exits immediately
MCP client configuration
UnityInfoMCP supports both Streamable HTTP and stdio on the client-facing side.
For URL-based MCP clients, connect to:
http://127.0.0.1:16000/mcpIf you launch the server on a custom port, use the matching endpoint instead:
http://127.0.0.1:8080/mcpFor process-launching MCP clients, launch the server in stdio mode:
unity-info-mcp --transport stdioBridge-side environment variables are still useful in both modes:
$env:UNITY_INFO_BRIDGE_HOST = "127.0.0.1"
$env:UNITY_INFO_BRIDGE_PORT = "16000"
unity-info-mcp --transport stdioImportant notes:
UNITY_INFO_BRIDGE_PORT=16000is only a legacy fallback bridge portnormal bridge discovery still probes
16001~16100--portonly affects--transport streamable-http--transport stdiodoes not expose/mcp; the client must speak MCP over the launched process stdio
Recommended auto-launch examples:
Codex config.toml:
[mcp_servers.UnityInfoMCP]
command = "C:\\MCP\\UnityInfoMCP_v1.0.2.exe"
args = ["--transport", "stdio"]
startup_timeout_sec = 45
[mcp_servers.UnityInfoMCP.env]
UNITY_INFO_BRIDGE_HOST = "127.0.0.1"
UNITY_INFO_BRIDGE_PORT = "16000"Claude Desktop claude_desktop_config.json:
{
"mcpServers": {
"UnityInfoMCP": {
"command": "C:\\MCP\\UnityInfoMCP_v1.0.2.exe",
"args": ["--transport", "stdio"],
"env": {
"UNITY_INFO_BRIDGE_HOST": "127.0.0.1",
"UNITY_INFO_BRIDGE_PORT": "16000"
}
}
}
}Direct execution
You can also run UnityInfoMCP directly outside MCP client configuration.
When unity-info-mcp is available on PATH:
unity-info-mcpWhen you prefer stdio transport:
unity-info-mcp --transport stdioWhen you prefer to invoke the module directly:
python -m UnityInfoMCPTo run the module in stdio mode:
python -m UnityInfoMCP --transport stdioTo bind HTTP on a different port:
unity-info-mcp --port 8080If you built the PyInstaller executable, you can launch it directly as well:
& "C:\path\to\UnityInfoMCP_v1.0.2.exe"Or in stdio mode:
& "C:\path\to\UnityInfoMCP_v1.0.2.exe" --transport stdioIn all of these direct-launch cases, UnityInfoMCP starts the selected client-facing transport. Streamable HTTP exposes /mcp on the selected port, while stdio does not bind an HTTP port.
Environment variables
UNITY_INFO_BRIDGE_TRANSPORTDefault:tcpTransport used betweenUnityInfoMCPand the game-sideUnityInfoBridgeUNITY_INFO_BRIDGE_HOSTDefault:127.0.0.1UNITY_INFO_BRIDGE_PORTDefault:16000Legacy fallback bridge port only. Auto-discovery still probes16001~16100.UNITY_INFO_BRIDGE_TIMEOUT_SECDefault:8.0UNITY_INFO_MCP_NAMEDefault:UnityInfoMCPUNITY_INFO_MCP_LOG_LEVELDefault:INFO
Use .env.example as a starting point if needed.
Building UnityInfoBridge
Build inputs:
bridge references are resolved from
UnityInfoBridge/includesthe project only uses local reference DLLs under:
UnityInfoBridge/includes/bepinex/monoUnityInfoBridge/includes/bepinex/il2cppUnityInfoBridge/includes/melonloader/monoUnityInfoBridge/includes/melonloader/il2cppUnityInfoBridge/includes/unity/monoUnityInfoBridge/includes/unity/il2cppUnityInfoBridge/build.ps1builds all supported variants
The repository already includes the required reference DLLs, so builds do not depend on any extra sync step.
Typical build:
Set-Location UnityInfoBridge
.\build.ps1Build specific targets:
Set-Location UnityInfoBridge
.\build.ps1 -Configurations Release_BepInEx_IL2CPPBuild outputs:
UnityInfoBridge/Release/UnityInfoBridge.BepInEx.Mono/UnityInfoBridge/Release/UnityInfoBridge.BepInEx.IL2CPP/UnityInfoBridge/Release/UnityInfoBridge.MelonLoader.Mono/UnityInfoBridge/Release/UnityInfoBridge.MelonLoader.IL2CPP/
Each output now includes the bridge assembly plus Newtonsoft.Json.dll.
IL2CPP outputs also include UnityInfoBridge.*.deps.json.
Release assets
The GitHub release workflow produces:
UnityInfoMCP_vx.x.x.exeUnityInfoMCP-vx.x.x.tar.gzUnityInfoMCP-vx.x.x-py3-none-any.whlUnityInfoBridge_vx.x.x_MelonLoader_Mono.zipUnityInfoBridge_vx.x.x_MelonLoader_IL2CPP.zipUnityInfoBridge_vx.x.x_BepInEx_Mono.zipUnityInfoBridge_vx.x.x_BepInEx_IL2CPP.zipSHA256SUMS.txt
Package structure:
MelonLoader Mono zip:
Mods/UnityInfoBridge.dllMods/Newtonsoft.Json.dllMelonLoader IL2CPP zip:
Mods/UnityInfoBridge.dllMods/Newtonsoft.Json.dllMods/UnityInfoBridge.deps.jsonBepInEx Mono zip:
BepInEx/plugins/UnityInfoBridge/UnityInfoBridge.dllBepInEx/plugins/UnityInfoBridge/Newtonsoft.Json.dllBepInEx IL2CPP zip:
BepInEx/plugins/UnityInfoBridge/UnityInfoBridge.dllBepInEx/plugins/UnityInfoBridge/Newtonsoft.Json.dllBepInEx/plugins/UnityInfoBridge/UnityInfoBridge.deps.json
MCP tool surface
Runtime:
bridge_statuslist_bridge_targetsselect_bridge_targetget_runtime_summary
Scene and hierarchy:
list_scenesget_scene_hierarchyfind_gameobjects_by_nameresolve_instance_idget_gameobjectget_gameobject_by_pathget_gameobject_children
Components and fields:
get_componentsget_componentget_component_fieldssearch_component_fields
Text and localization discovery:
list_text_elementssearch_textget_text_context
Snapshots:
snapshot_gameobjectsnapshot_scene
Write operations:
set_gameobject_activeset_component_memberset_text
Capture:
capture_screenshot
Notes:
text and hierarchy discovery includes persistent
DontDestroyOnLoadUI when Unity exposes it as a valid runtime scene objectcapture_screenshotreturns PNG image content to the MCP clientwhen
output_pathis omitted, the bridge usesGameRoot\UnityInfoBridge\captures\capture_yy-MM-dd-HH-mm-ss-fff.pngas a temporary capture path andUnityInfoMCPremoves the temp file after embedding the imageprovide
output_pathif you want the PNG to remain on disk after the MCP response
Example workflow
Find which font a live dialogue line is using:
User prompt:
"어디까지나 이리스의 의견이니까"라는 텍스트가 어느 폰트를 사용하고 있는지 알려줘.Primary tool call:
UnityInfoMCP.search_text({
"query": "어디까지나 이리스의 의견이니까",
"include_inactive": true,
"limit": 10
})Typical result summary:
scene:
Searchobject path:
_root/Canvas2/ScreenScaler2/GameObject/messagewindow/messagearea/text_message (TMP)component type:
TMPro.TextMeshProUGUIcurrent TMP font asset:
message#en-font
Move the same text up by 100px:
User prompt:
그 텍스트를 위로 100px 올려줘.Tool flow:
UnityInfoMCP.get_components({
"gameobject_instance_id": 480506,
"include_fields": true,
"include_non_public": false,
"field_depth": 1
})UnityInfoMCP.set_component_member({
"component_instance_id": 485632,
"member_name": "anchoredPosition",
"value": { "x": 0.0, "y": -258.0 },
"include_non_public": false
})Verification:
UnityInfoMCP.get_component_fields({
"component_instance_id": 485632,
"include_non_public": false,
"include_properties": true,
"max_depth": 1
})Typical result summary:
target component:
UnityEngine.RectTransformanchoredPosition:(0.0, -358.0)->(0.0, -258.0)effective change: moved upward by
100px
Runtime object IDs such as 480506 and 485632 are example values and will differ each session.
For common Unity structs, tuple-style strings such as "(0, -258)" also work.
Documentation
Bridge protocol:
docs/bridge-protocol.mdTool mapping:
docs/tool-catalog.md
This server cannot be installed
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Latest Blog Posts
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/snowyegret23/UnityInfoMCP'
If you have feedback or need assistance with the MCP directory API, please join our Discord server