Skip to main content
Glama

Unreal Engine MCP Bridge

by gingerol
umg_tools.py12.5 kB
""" UMG Tools for Unreal MCP. This module provides tools for creating and manipulating UMG Widget Blueprints in Unreal Engine. """ import logging from typing import Dict, List, Any from mcp.server.fastmcp import FastMCP, Context # Get logger logger = logging.getLogger("UnrealMCP") def register_umg_tools(mcp: FastMCP): """Register UMG tools with the MCP server.""" @mcp.tool() def create_umg_widget_blueprint( ctx: Context, widget_name: str, parent_class: str = "UserWidget", path: str = "/Game/UI" ) -> Dict[str, Any]: """ Create a new UMG Widget Blueprint. Args: widget_name: Name of the widget blueprint to create parent_class: Parent class for the widget (default: UserWidget) path: Content browser path where the widget should be created Returns: Dict containing success status and widget path """ from unreal_mcp_server import get_unreal_connection try: unreal = get_unreal_connection() if not unreal: logger.error("Failed to connect to Unreal Engine") return {"success": False, "message": "Failed to connect to Unreal Engine"} params = { "widget_name": widget_name, "parent_class": parent_class, "path": path } logger.info(f"Creating UMG Widget Blueprint with params: {params}") response = unreal.send_command("create_umg_widget_blueprint", params) if not response: logger.error("No response from Unreal Engine") return {"success": False, "message": "No response from Unreal Engine"} logger.info(f"Create UMG Widget Blueprint response: {response}") return response except Exception as e: error_msg = f"Error creating UMG Widget Blueprint: {e}" logger.error(error_msg) return {"success": False, "message": error_msg} @mcp.tool() def add_text_block_to_widget( ctx: Context, widget_name: str, text_block_name: str, text: str = "", position: List[float] = [0.0, 0.0], size: List[float] = [200.0, 50.0], font_size: int = 12, color: List[float] = [1.0, 1.0, 1.0, 1.0] ) -> Dict[str, Any]: """ Add a Text Block widget to a UMG Widget Blueprint. Args: widget_name: Name of the target Widget Blueprint text_block_name: Name to give the new Text Block text: Initial text content position: [X, Y] position in the canvas panel size: [Width, Height] of the text block font_size: Font size in points color: [R, G, B, A] color values (0.0 to 1.0) Returns: Dict containing success status and text block properties """ from unreal_mcp_server import get_unreal_connection try: unreal = get_unreal_connection() if not unreal: logger.error("Failed to connect to Unreal Engine") return {"success": False, "message": "Failed to connect to Unreal Engine"} params = { "widget_name": widget_name, "text_block_name": text_block_name, "text": text, "position": position, "size": size, "font_size": font_size, "color": color } logger.info(f"Adding Text Block to widget with params: {params}") response = unreal.send_command("add_text_block_to_widget", params) if not response: logger.error("No response from Unreal Engine") return {"success": False, "message": "No response from Unreal Engine"} logger.info(f"Add Text Block response: {response}") return response except Exception as e: error_msg = f"Error adding Text Block to widget: {e}" logger.error(error_msg) return {"success": False, "message": error_msg} @mcp.tool() def add_button_to_widget( ctx: Context, widget_name: str, button_name: str, text: str = "", position: List[float] = [0.0, 0.0], size: List[float] = [200.0, 50.0], font_size: int = 12, color: List[float] = [1.0, 1.0, 1.0, 1.0], background_color: List[float] = [0.1, 0.1, 0.1, 1.0] ) -> Dict[str, Any]: """ Add a Button widget to a UMG Widget Blueprint. Args: widget_name: Name of the target Widget Blueprint button_name: Name to give the new Button text: Text to display on the button position: [X, Y] position in the canvas panel size: [Width, Height] of the button font_size: Font size for button text color: [R, G, B, A] text color values (0.0 to 1.0) background_color: [R, G, B, A] button background color values (0.0 to 1.0) Returns: Dict containing success status and button properties """ from unreal_mcp_server import get_unreal_connection try: unreal = get_unreal_connection() if not unreal: logger.error("Failed to connect to Unreal Engine") return {"success": False, "message": "Failed to connect to Unreal Engine"} params = { "widget_name": widget_name, "button_name": button_name, "text": text, "position": position, "size": size, "font_size": font_size, "color": color, "background_color": background_color } logger.info(f"Adding Button to widget with params: {params}") response = unreal.send_command("add_button_to_widget", params) if not response: logger.error("No response from Unreal Engine") return {"success": False, "message": "No response from Unreal Engine"} logger.info(f"Add Button response: {response}") return response except Exception as e: error_msg = f"Error adding Button to widget: {e}" logger.error(error_msg) return {"success": False, "message": error_msg} @mcp.tool() def bind_widget_event( ctx: Context, widget_name: str, widget_component_name: str, event_name: str, function_name: str = "" ) -> Dict[str, Any]: """ Bind an event on a widget component to a function. Args: widget_name: Name of the target Widget Blueprint widget_component_name: Name of the widget component (button, etc.) event_name: Name of the event to bind (OnClicked, etc.) function_name: Name of the function to create/bind to (defaults to f"{widget_component_name}_{event_name}") Returns: Dict containing success status and binding information """ from unreal_mcp_server import get_unreal_connection try: unreal = get_unreal_connection() if not unreal: logger.error("Failed to connect to Unreal Engine") return {"success": False, "message": "Failed to connect to Unreal Engine"} # If no function name provided, create one from component and event names if not function_name: function_name = f"{widget_component_name}_{event_name}" params = { "widget_name": widget_name, "widget_component_name": widget_component_name, "event_name": event_name, "function_name": function_name } logger.info(f"Binding widget event with params: {params}") response = unreal.send_command("bind_widget_event", params) if not response: logger.error("No response from Unreal Engine") return {"success": False, "message": "No response from Unreal Engine"} logger.info(f"Bind widget event response: {response}") return response except Exception as e: error_msg = f"Error binding widget event: {e}" logger.error(error_msg) return {"success": False, "message": error_msg} @mcp.tool() def add_widget_to_viewport( ctx: Context, widget_name: str, z_order: int = 0 ) -> Dict[str, Any]: """ Add a Widget Blueprint instance to the viewport. Args: widget_name: Name of the Widget Blueprint to add z_order: Z-order for the widget (higher numbers appear on top) Returns: Dict containing success status and widget instance information """ from unreal_mcp_server import get_unreal_connection try: unreal = get_unreal_connection() if not unreal: logger.error("Failed to connect to Unreal Engine") return {"success": False, "message": "Failed to connect to Unreal Engine"} params = { "widget_name": widget_name, "z_order": z_order } logger.info(f"Adding widget to viewport with params: {params}") response = unreal.send_command("add_widget_to_viewport", params) if not response: logger.error("No response from Unreal Engine") return {"success": False, "message": "No response from Unreal Engine"} logger.info(f"Add widget to viewport response: {response}") return response except Exception as e: error_msg = f"Error adding widget to viewport: {e}" logger.error(error_msg) return {"success": False, "message": error_msg} @mcp.tool() def set_text_block_binding( ctx: Context, widget_name: str, text_block_name: str, binding_property: str, binding_type: str = "Text" ) -> Dict[str, Any]: """ Set up a property binding for a Text Block widget. Args: widget_name: Name of the target Widget Blueprint text_block_name: Name of the Text Block to bind binding_property: Name of the property to bind to binding_type: Type of binding (Text, Visibility, etc.) Returns: Dict containing success status and binding information """ from unreal_mcp_server import get_unreal_connection try: unreal = get_unreal_connection() if not unreal: logger.error("Failed to connect to Unreal Engine") return {"success": False, "message": "Failed to connect to Unreal Engine"} params = { "widget_name": widget_name, "text_block_name": text_block_name, "binding_property": binding_property, "binding_type": binding_type } logger.info(f"Setting text block binding with params: {params}") response = unreal.send_command("set_text_block_binding", params) if not response: logger.error("No response from Unreal Engine") return {"success": False, "message": "No response from Unreal Engine"} logger.info(f"Set text block binding response: {response}") return response except Exception as e: error_msg = f"Error setting text block binding: {e}" logger.error(error_msg) return {"success": False, "message": error_msg} logger.info("UMG tools registered successfully")

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/gingerol/UnrealEngine-ai-mcp'

If you have feedback or need assistance with the MCP directory API, please join our Discord server