此仓库包含一个模型上下文协议(MCP)Python 服务器,该服务器使 Claude 能够通过自然语言与 Unreal Engine 5 进行交互。通过利用远程控制 API,这种集成允许您通过与 Claude 的对话直接创建、操作和控制 Unreal Engine 中的 3D 对象和蓝图演员。
这个 MCP 服务器弥合了 Claude 的自然语言处理能力和 Unreal Engine 强大的 3D 环境之间的差距。用户只需简单地描述他们想要在 Unreal Engine 中创建或修改的内容,Claude 将解释这些请求并通过 MCP 服务器执行相应的操作。
git clone https://github.com/yourusername/ue5-mcp.git
cd ue5-mcp
pip install uv mcp requests
claude_desktop_config.json 中添加以下内容,调整路径指向您的本地仓库:{
"mcpServers": {
"ue5-mcp": {
"command": "uv",
"args": ["--directory", "C:\\path\\to\\ue5-mcp", "run", "ue5_mcp_server.py"],
"env": {}
}
}
}
注意:如果您已配置其他 MCP 服务器,可能需要禁用它们以防止冲突。
这里有一些您可以与 Claude 使用的示例提示:
服务器默认使用厘米作为所有测量的单位:
UE5-MCP 服务器使用以下核心组件:
服务器使用 FastMCP 构建,它在 Claude 和 Unreal Engine 之间建立了一个双向通信通道。主要组件如下:
# 创建具有生命周期支持的 MCP 服务器
mcp = FastMCP(
"Unreal-Engine-MCP",
description="通过模型上下文协议集成 Unreal Engine(默认单位:厘米)",
lifespan=server_lifespan
)
服务器通过远程控制 API 连接到 Unreal Engine,这是一个内置的 HTTP 服务器,运行在 Unreal 内部:
# 默认 Unreal Engine 远程控制 API 设置
UE_HOST = "http://127.0.0.1" # 本地主机
UE_PORT = "30010" # 默认端口
UE_URL = f"{UE_HOST}:{UE_PORT}/remote/object/call"
服务器通过函数装饰器向 Claude 提供多种工具:
@mcp.tool()
async def get_all_scene_actors(ctx: Context) -> str:
"""获取当前级别中所有演员的列表"""
# 实现...
@mcp.tool()
async def spawn_actor(ctx: Context, blueprint_path: str, ...) -> str:
"""在当前 Unreal Engine 级别中生成蓝图演员"""
# 实现...
@mcp.tool()
async def spawn_snowman_family(ctx: Context, ...) -> str:
"""在当前 Unreal Engine 级别中生成三个雪人的家庭"""
# 实现...
@mcp.tool()
async def modify_actor(ctx: Context, actor_path: str, ...) -> str:
"""修改 Unreal Engine 级别中现有演员的属性"""
# 实现...
服务器可以通过远程控制 API 调用来创建和修改场景中的演员:
# 演示如何创建演员的工作方式
spawn_payload = {
"objectPath": "/Script/EditorScriptingUtilities.Default__EditorLevelLibrary",
"functionName": "SpawnActorFromClass",
"parameters": {
"ActorClass": blueprint_path,
"Location": {"X": location[0], "Y": location[1], "Z": location[2]},
"Rotation": {"Pitch": rotation[0], "Yaw": rotation[1], "Roll": rotation[2]}
},
"generateTransaction": True
}
每个动作都是作为对 Unreal Engine 远程控制 API 的 HTTP 请求执行的,返回结果为 JSON 格式。
展示功能之一是能够通过单一命令创建一个雪人家庭。服务器将:
这展示了如何使用简单的自然语言命令创建复杂的场景。
服务器可以使用其原生蓝图函数复制场景中存在的演员:
async def duplicate_snowman(
snowman_actor_path: str,
location: Tuple[float, float, float],
rotation: Tuple[float, float, float],
scale: Tuple[float, float, float],
name: Optional[str]
) -> Optional[str]:
"""调用蓝图演员中的复制函数"""
# 实现...
服务器支持修改现有演员的任何属性:
服务器生成详细的日志可以帮助诊断问题:
2023-11-15 14:32:45,123 - Unreal-MCP-Server - INFO - Unreal Engine MCP 服务器正在启动...
2023-11-15 14:32:45,125 - Unreal-MCP-Server - INFO - 默认单位系统:厘米(1 Unreal 单位 = 1 厘米)
2023-11-15 14:32:45,234 - Unreal-MCP-Server - INFO - 已连接到 Unreal Engine 远程控制 API
要向服务器添加新功能:
@mcp.tool() 装饰器将其暴露给 Claude示例:
@mcp.tool()
async def your_new_function(ctx: Context, param1: str, param2: int) -> str:
"""
描述您的函数做什么
参数:
param1: 参数1的描述
param2: 参数2的描述
返回:
包含结果的 JSON 字符串
"""
# 实现...
您可以通过修改现有函数或创建特定于您演员的新函数来适应服务器以与您的自定义蓝图演员一起工作。
该项目受到了类似 Claude 的 MCP 集成的启发,特别是由 runeape-sats 制作的原始 Unreal Engine MCP 服务器。特别感谢 Anthropic 团队创造了 Claude 并使这类集成成为可能。