Codex CLI에 Unreal Engine MCP 적용하기
Unreal MCP : https://github.com/ChiR24/Unreal_mcp
Codex를 사용.
공통 작업
Unreal_mcp 설치
git clone https://github.com/ChiR24/Unreal_mcp.git
cd Unreal_mcp
npm install
npm run build
node dist/cli.js로 수동 실행 테스트
node dist/cli.js
.codex/config.toml 수정
Windows 경로는 TOML 이스케이프 문제를 피하기 위해 /를 쓰는 편이 안전하다.
[mcp_servers.unreal-engine]
command = "node"
args = [ "D:/Unreal_mcp/dist/cli.js" ]
Blueprint 프로젝트인 경우 (UE 5.6.1)
Blueprint 프로젝트는 프로젝트 로컬 플러그인으로만 적용
Unreal_mcp 플러그인을 UE 5.6.1 엔진으로 패키징
플러그인을 원본 그대로 Plugins에 복사하지 않고, UE 5.6.1 엔진의 RunUAT BuildPlugin 흐름으로 먼저 패키징
D:\unreal_mcp\Unreal_mcp\scripts\package-plugin.bat "D:\Epic Library\UE_5.6" "D:\unreal_mcp\build"
패키징된 결과물의 descriptor는 아래와 같은 형태EngineVersion은 5.6.0으로 표시되지만 실제 패키징/사용 엔진은 UE 5.6.1
{
"FileVersion": 3,
"Version": 3,
"VersionName": "0.1.4",
"FriendlyName": "MCP Automation Bridge",
"EngineVersion": "5.6.0",
"CanContainContent": false,
"IsBetaVersion": true,
"IsExperimentalVersion": true,
"Modules": [
{
"Name": "McpAutomationBridge",
"Type": "Editor",
"LoadingPhase": "Default",
"PlatformAllowList": [
"Win64",
"Mac",
"Linux"
]
}
],
"Installed": true
}
패키징 결과물 McpAutomationBridge를 프로젝트에 복사
패키징 결과물:
..\unreal_mcp\build\McpAutomationBridge
프로젝트 설치 위치:
UnrealProject\Plugins\McpAutomationBridge
참고용 패키징 결과물:
패키징한 결과물
.uproject에서 McpAutomationBridge 플러그인을 Editor 전용으로 활성화
{
"FileVersion": 3,
"EngineAssociation": "5.6",
"Category": "",
"Description": "",
"Plugins": [
{
"Name": "ModelingToolsEditorMode",
"Enabled": true,
"TargetAllowList": [
"Editor"
]
},
{
"Name": "McpAutomationBridge",
"Enabled": true,
"TargetAllowList": [
"Editor"
]
}
]
}
DefaultGame.ini에서 Native MCP 활성화
추가한 설정:
[/Script/McpAutomationBridge.McpAutomationBridgeSettings]
bEnableNativeMCP=True
현재 프로젝트의 관련 내용:
[/Script/CommonUI.CommonUISettings]
CommonButtonAcceptKeyHandling=TriggerClick
[/Script/EngineSettings.GeneralProjectSettings]
ProjectID=397FFA41432F1E395F7D339B622127AB
[/Script/McpAutomationBridge.McpAutomationBridgeSettings]
bEnableNativeMCP=True
엔진 코드 수정(UE 5.6.1 기준)
플러그인 패키징 중 UE 5.6.1의 UBT에서 moduleType == null 상황으로 패키징이 실패해서, 아래 파일에 null guard를 추가
Epic Library\UE_5.6\Engine\Source\Programs\UnrealBuildTool\Configuration\ModuleRules.cs
수정된 부분:
internal static bool IsValidForTarget(Type moduleType, ReadOnlyTargetRules targetRules, [NotNullWhen(false)] out string? invalidReason)
{
if (moduleType == null)
{
invalidReason = "ModuleRules type is null";
return false;
}
IEnumerable<TargetType> supportedTargetTypes = moduleType.GetCustomAttributes<SupportedTargetTypesAttribute>().SelectMany(x => x.TargetTypes).Distinct();
...
}
수정된 UBT를 반영하기 위해 UnrealBuildTool.dll도 다시 빌드해서 교체
백업 파일:
D:\Epic Library\UE_5.6\Engine\Source\Programs\UnrealBuildTool\Configuration\ModuleRules.cs.codex-backup-20260421
D:\Epic Library\UE_5.6\Engine\Binaries\DotNET\UnrealBuildTool\codex-backup-20260421\UnrealBuildTool.dll
C++ 프로젝트인 경우 (5.7.1)
C++ 프로젝트는 프로젝트 빌드 체인에서 플러그인 모듈을 직접 컴파일할 수 있으므로, Blueprint 프로젝트처럼 패키징된 플러그인을 쓰기보다 원본 플러그인을 프로젝트 로컬 Plugins에 복사해서 빌드
적용 전 정리
Unreal Editor를 닫고 Live Coding을 끈다. Editor가 열려 있거나 Live Coding mutex가 남아 있으면 아래 빌드에서 실패한다.
Unreal_mcp plugins\내용을 프로젝트 Plugins에 복사
프로젝트 설치 위치의 Plugins\에 복사
.uproject에서 플러그인 활성화
.uproject
{
"FileVersion": 3,
"EngineAssociation": "5.7",
"Category": "",
"Description": "",
"Modules": [
{
"Name": "ProjectName",
"Type": "Runtime",
"LoadingPhase": "Default"
}
],
"Plugins": [
{
"Name": "ModelingToolsEditorMode",
"Enabled": true,
"TargetAllowList": [
"Editor"
]
},
{
"Name": "McpAutomationBridge",
"Enabled": true,
"TargetAllowList": [
"Editor"
]
}
]
}
DefaultGame.ini에서 브리지 포트와 Native MCP 활성화
Config\DefaultGame.ini 설정
[/Script/McpAutomationBridge.McpAutomationBridgeSettings]
bAllowNonLoopback=False
ListenHost=127.0.0.1
ListenPorts=8091
bEnableNativeMCP=True
Editor 로그에서 정상적으로 로드되면 Log로 아래내용이 뜬다.
LogPluginManager: Mounting Project plugin McpAutomationBridge
LogMcpAutomationBridge: MCP Automation Bridge module initialized.
LogMcpAutomationBridgeSubsystem: AttemptConnection: creating server listener on 127.0.0.1:8091
LogMcpAutomationBridgeSubsystem: Automation bridge listening on port=8091
이 로그는 Editor 쪽 브리지가 8091에서 대기 중이라는 뜻.
Codex MCP 서버가 실제로 붙었는지는 별도로 ue://health에서 connected를 확인.
Codex config.toml 설정
.codex\config.toml에는 MCP 서버와 환경변수를 아래처럼 설정.
[mcp_servers.unreal-engine]
command = "node"
args = [ "D:/Unreal_mcp/dist/cli.js" ]
[mcp_servers.unreal-engine.env]
UE_PROJECT_PATH = "G:/UnrealProject/unrealproject.uproject"
MCP_AUTOMATION_HOST = "127.0.0.1"
MCP_AUTOMATION_PORT = "8091"
MCP_AUTOMATION_WS_PORT = "8091"
MCP_AUTOMATION_CLIENT_PORT = "8091"
MCP_AUTOMATION_PORT만으로는 부족할 수 있다.
실제로 확인한 Unreal_mcp 런타임에서
실제 연결 포트에 MCP_AUTOMATION_WS_PORT와MCP_AUTOMATION_CLIENT_PORT를 사용했다.
그래서 세 값을 모두 8091로 맞췄다.
node dist/cli.js는 Codex가 MCP 서버로 자동 실행.
수동으로 켜둘 필요는 없고, 수동 실행은 단독 테스트용이다.
프로젝트 빌드
플러그인을 프로젝트 로컬로 복사하고 .uproject를 수정한 뒤 UnrealEditor를 빌드
성공 시 아래 파일이 생성된다.
G:\UnrealProject\Plugins\McpAutomationBridge\Binaries\Win64\UnrealEditor-McpAutomationBridge.dll
G:\UnrealProject\Plugins\McpAutomationBridge\Binaries\Win64\UnrealEditor-McpAutomationBridge.pdb
G:\UnrealProject\Plugins\McpAutomationBridge\Binaries\Win64\UnrealEditor.modules
최종 실행 순서
- Codex 다시 실행
- Unreal Editor 실행
- Codex에서 Unreal MCP tool 또는
ue://actors같은 리소스를 호출해서 실제 연결 유도
ue://health만 먼저 보면 연결 전 상태라 disconnected로 보일 수 있다.ue://actors처럼 Editor 요청을 실제로 보내면 handshake가 일어나고, 이후 ue://health에서 연결 상태가 갱신된다.
연결 확인 결과
ue://actors 호출이 성공했고 현재 레벨 Actor 목록을 읽었다.
{
"success": true,
"count": 8
}
이후 ue://health에서 아래 상태를 확인
{
"status": "connected",
"automationBridge": {
"connected": true,
"activePort": 8091
},
"unrealConnection": {
"features": {
"automationBridgeConnected": true
}
}
}
내용에 대한 질의나, 수정 요청은 저에게 큰 도움이 됩니다.
'Unreal Engine' 카테고리의 다른 글
| GameplayMessageRouter Plugin 2 (0) | 2026.06.11 |
|---|---|
| GameplayMessageRouter Plugin 1 (0) | 2026.06.10 |
| Niagara (0) | 2026.05.20 |
| Delegate (0) | 2026.05.18 |
| State Tree, Behavior Tree (0) | 2026.05.07 |