
Bridges Claude to Unreal Engine 5 through a native C++ plugin that exposes 17 automation tools over a local GraphQL endpoint. You get asset operations (import, duplicate, rename), actor spawning and transforms, PIE session control, Sequencer timeline manipulation, and Niagara particle authoring. The plugin runs inside UE's editor process on port 8091 by default, handling Blueprint graphs, animation state machines, level streaming, and console command execution with safety blocks. Ships as an npm package that talks to the C++ bridge you drop into your project's Plugins folder. Aimed at developers automating repetitive editor tasks or prototyping game logic conversationally instead of clicking through menus. Supports UE 5.0 through 5.7 with graceful degradation when the editor isn't running.
claude mcp add unreal-engine-mcp --env LOG_LEVEL=YOUR_LOG_LEVEL --env MCP_ROUTE_STDOUT_LOGS=YOUR_MCP_ROUTE_STDOUT_LOGS --env UE_PROJECT_PATH=YOUR_UE_PROJECT_PATH --env UE_EDITOR_EXE=YOUR_UE_EDITOR_EXE --env UE_SCREENSHOT_DIR=YOUR_UE_SCREENSHOT_DIR --env MCP_AUTOMATION_PORT=YOUR_MCP_AUTOMATION_PORT --env MCP_AUTOMATION_HOST=YOUR_MCP_AUTOMATION_HOST --env MCP_AUTOMATION_ALLOW_NON_LOOPBACK=YOUR_MCP_AUTOMATION_ALLOW_NON_LOOPBACK --env MCP_AUTOMATION_CLIENT_MODE=YOUR_MCP_AUTOMATION_CLIENT_MODE --env MCP_AUTOMATION_USE_TLS=YOUR_MCP_AUTOMATION_USE_TLS --env MCP_CONNECTION_TIMEOUT_MS=YOUR_MCP_CONNECTION_TIMEOUT_MS --env MCP_REQUEST_TIMEOUT_MS=YOUR_MCP_REQUEST_TIMEOUT_MS --env MCP_AUTOMATION_MAX_MESSAGES_PER_MINUTE=YOUR_MCP_AUTOMATION_MAX_MESSAGES_PER_MINUTE --env MCP_AUTOMATION_MAX_AUTOMATION_REQUESTS_PER_MINUTE=YOUR_MCP_AUTOMATION_MAX_AUTOMATION_REQUESTS_PER_MINUTE -- npx -y unreal-engine-mcp-serverRun in your terminal. Replace YOUR_* placeholders with real values; add --scope user to install for every project.
Review the command, arguments, and environment values before installing — MCP servers run with your local permissions.
Verified live against the running server on Jun 10, 2026.
manage_toolsDynamic MCP tool management. List canonical tools, view category counts, and enable/disable tools or categories at runtime. Required: action. Select one enum value, then provide only parameters relevant to that action. Params by action: tools, category, params.4 paramsDynamic MCP tool management. List canonical tools, view category counts, and enable/disable tools or categories at runtime. Required: action. Select one enum value, then provide only parameters relevant to that action. Params by action: tools, category, params.
action*stringlist_tools · list_categories · enable_tools · disable_tools · enable_category · disable_categorycategorystringparamsobjecttoolsarraymanage_assetCreate/import/manage assets, material graphs, material instances, procedural textures, render targets, and dependency analysis. Required: action. Select one enum value, then provide only parameters relevant to that action. Params by action: assetPath, directory, classNames, pa...123 paramsCreate/import/manage assets, material graphs, material instances, procedural textures, render targets, and dependency analysis. Required: action. Select one enum value, then provide only parameters relevant to that action. Params by action: assetPath, directory, classNames, pa...
action*stringlist · import · duplicate · duplicate_asset · rename · rename_assetadditionalOutputsarrayamountnumberassetPathstringassetPathsarraybaseTexturestringblendModestringblendTexturestringblendTypestringblueTexturestringchannelstringcheckoutFilesbooleanclassNamesarraycodestringcompressionSettingsstringconstAnumberconstBnumbercoordinateIndexnumbercurvePointsarraydefaultValuevalue+103 more parameters. See the server's own documentation for the full schema.
manage_blueprintCreate Blueprints and UMG widgets, add SCS/UI components, set defaults, and manipulate Blueprint graphs, bindings, and widget layouts. Required: action. Select one enum value, then provide only parameters relevant to that action. Params by action: name, blueprintPath, blueprin...147 paramsCreate Blueprints and UMG widgets, add SCS/UI components, set defaults, and manipulate Blueprint graphs, bindings, and widget layouts. Required: action. Select one enum value, then provide only parameters relevant to that action. Params by action: name, blueprintPath, blueprin...
action*stringcreate · create_blueprint · get_blueprint · get · compile · add_componentactionPathstringalignmentobjectalwaysShowScrollbarbooleananchorMaxobjectanchorMinobjectanglenumberanimationNamestringapplyAndSavebooleanattachTostringautoWrapbooleanbindingSourcestringblueprintPathstringblueprintTypestringbrushColorobjectbrushSizeobjectcategorystringclippingstringInherit · ClipToBounds · ClipToBoundsWithoutIntersecting · ClipToBoundsAlways · OnDemandcolorAndOpacityobjectcolumnCountnumber+127 more parameters. See the server's own documentation for the full schema.
control_actorSpawn actors, set transforms, enable physics, add components, manage tags, and attach actors. Required: action. Select one enum value, then provide only parameters relevant to that action. Params by action: actorName, childActor, parentActor, classPath, meshPath, materialPath,...36 paramsSpawn actors, set transforms, enable physics, add components, manage tags, and attach actors. Required: action. Select one enum value, then provide only parameters relevant to that action. Params by action: actorName, childActor, parentActor, classPath, meshPath, materialPath,...
action*stringspawn · spawn_actor · spawn_blueprint · delete · destroy_actor · delete_by_tagactorClassstringactorNamestringactorNamesarrayallComponentsbooleanargumentsvalueblueprintPathstringchildActorstringclassNamestringclassPathstringcollisionEnabledbooleancomponentNamestringcomponentTypestringfilterstringforceobjectfunctionNamestringlimitnumberlocationobjectmaterialIndexintegermaterialPathstring+16 more parameters. See the server's own documentation for the full schema.
control_editorStart/stop PIE, control viewport camera, run console commands, take screenshots, simulate input. Required: action. Select one enum value, then provide only parameters relevant to that action. Params by action: location, rotation, viewMode, enabled, speed, filename, fov, width,...39 paramsStart/stop PIE, control viewport camera, run console commands, take screenshots, simulate input. Required: action. Select one enum value, then provide only parameters relevant to that action. Params by action: location, rotation, viewMode, enabled, speed, filename, fov, width,...
action*stringplay · stop · stop_pie · pause · resume · ejectactorNamestringassetPathstringblendTimenumberbookmarkNamestringbuttonstringcategorystringcommandstringdeltaTimenumberenabledbooleanfilenamestringfovnumberheightnumberidstringincludeMetadatabooleaninputActionstringinputTypestringkeystringlevelPathstringlocationobject+19 more parameters. See the server's own documentation for the full schema.
manage_levelLoad/save levels, configure streaming, and build lighting. Required: action. Select one enum value, then provide only parameters relevant to that action. Params by action: levelPath, assetPath, levelPaths, levelName, path, savePath, destinationPath, overwrite, targetPath, expo...35 paramsLoad/save levels, configure streaming, and build lighting. Required: action. Select one enum value, then provide only parameters relevant to that action. Params by action: levelPath, assetPath, levelPaths, levelName, path, savePath, destinationPath, overwrite, targetPath, expo...
action*stringload · load_level · save · save_level · save_as · save_level_asassetPathstringcolorarraydestinationPathstringexportPathstringintensitynumberlevelNamestringlevelPathstringlevelPathsarraylightTypestringDirectional · Point · Spot · Rect · DirectionalLight · PointLightlocationobjectmetadataobjectnamestringnewNamestringoverwritebooleanpackagePathstringparamsobjectparentLevelstringparentPathstringpathstring+15 more parameters. See the server's own documentation for the full schema.
build_environmentBuild environments: landscapes, foliage, procedural terrain/biomes, lighting setups, spline roads/rivers/fences, and world decoration. Required: action. Select one enum value, then provide only parameters relevant to that action. Params by action: name, landscapeName, heightDa...118 paramsBuild environments: landscapes, foliage, procedural terrain/biomes, lighting setups, spline roads/rivers/fences, and world decoration. Required: action. Select one enum value, then provide only parameters relevant to that action. Params by action: name, landscapeName, heightDa...
action*stringcreate_landscape · sculpt · sculpt_landscape · add_foliage · paint_foliage · create_procedural_terrainactorNamestringactorPathstringalignToNormalbooleanalignToSplinebooleanamplitudenumberarriveTangentobjectassetPathsarrayassetsarrayazimuthnumberbClosedLoopbooleanblueprintPathstringboundsobjectcollisionEnabledbooleancompensationValuenumbercomponentCountobjectcomponentNamestringcountnumbercubemapPathstringcullDistancenumber+98 more parameters. See the server's own documentation for the full schema.
animation_physicsAuthor animation and physics assets: Animation Blueprints, blend spaces, montages, Control Rig/IK, skeletons, sockets, physics assets, cloth, ragdolls, and vehicles. Required: action. Select one enum value, then provide only parameters relevant to that action. Params by action...112 paramsAuthor animation and physics assets: Animation Blueprints, blend spaces, montages, Control Rig/IK, skeletons, sockets, physics assets, cloth, ragdolls, and vehicles. Required: action. Select one enum value, then provide only parameters relevant to that action. Params by action...
action*stringcreate_animation_blueprint · create_animation_bp · create_anim_blueprint · create_blend_space · create_blend_space_1d · create_blend_space_2dactorNamestringadditiveAnimTypestringangularDampingnumberanimationPathstringartifactsarrayassetPathstringassetsarrayassignToMeshbooleanattachBoneNamestringaxisstringaxisNamestringbasePoseFramenumberbasePoseTypestringblendTimenumberblendTypestringblueprintPathstringbodyAstringbodyBstringbodyTypestring+92 more parameters. See the server's own documentation for the full schema.
system_controlControl the project runtime: profiling, benchmarks, scalability/LOD/Nanite settings, CVars, console commands, Python scripts, UBT, tests, logs, and widgets. Required: action. Select one enum value, then provide only parameters relevant to that action. Params by action: profile...59 paramsControl the project runtime: profiling, benchmarks, scalability/LOD/Nanite settings, CVars, console commands, Python scripts, UBT, tests, logs, and widgets. Required: action. Select one enum value, then provide only parameters relevant to that action. Params by action: profile...
action*stringprofile · show_fps · set_quality · screenshot · set_resolution · set_fullscreenactorsarrayargumentsstringassetPathstringboostPlayerLocationbooleancategorystringcategoryNamestringcellSizenumberchannelsstringchildClassstringcodestringcommandstringconfigurationstringdetailedbooleandurationnumberenableBatchingbooleanenableInstancingbooleanenabledbooleanfilestringfilenamestring+39 more parameters. See the server's own documentation for the full schema.
manage_sequenceEdit Level Sequences: add tracks, bind actors, set keyframes, control playback, and record camera. Required: action. Select one enum value, then provide only parameters relevant to that action. Params by action: name, path, actorName, actorNames, frame, value, property, destin...31 paramsEdit Level Sequences: add tracks, bind actors, set keyframes, control playback, and record camera. Required: action. Select one enum value, then provide only parameters relevant to that action. Params by action: name, path, actorName, actorNames, frame, value, property, destin...
action*stringcreate · open · add_camera · add_actor · add_actors · remove_actorsactorNamestringactorNamesarrayclassNamestringdestinationPathstringendnumberendFramenumberframenumberframeRatestringlengthInFramesnumberlockedbooleanloopModestringmetadataobjectmutedbooleannamestringnewNamestringparamsobjectpathstringplaybackEndnumberplaybackStartnumber+11 more parameters. See the server's own documentation for the full schema.
inspectInspect any UObject: read/write properties, list components, export snapshots, and query class info. Actions: inspect_cdo (Blueprint CDO properties + all components without spawning an actor; use blueprintPath, optional detailed/componentName/propertyNames), inspect_class (cla...18 paramsInspect any UObject: read/write properties, list components, export snapshots, and query class info. Actions: inspect_cdo (Blueprint CDO properties + all components without spawning an actor; use blueprintPath, optional detailed/componentName/propertyNames), inspect_class (cla...
action*stringinspect_object · get_actor_details · get_blueprint_details · get_mesh_details · get_texture_details · get_material_detailsactorNamestringblueprintPathstringclassNamestringclassPathstringcomponentNamestringcomponentNamesarraydetailedbooleanfilterstringnamestringobjectPathstringparamsobjectpropertyNamestringpropertyNamesarraypropertyPathstringsnapshotNamestringtagstringvaluevaluemanage_audioPlay/stop sounds, add audio components, configure mixes, attenuation, spatial audio, and author Sound Cues/MetaSounds. Required: action. Select one enum value, then provide only parameters relevant to that action. Params by action: name, soundPath, location, rotation, volume,...69 paramsPlay/stop sounds, add audio components, configure mixes, attenuation, spatial audio, and author Sound Cues/MetaSounds. Required: action. Select one enum value, then provide only parameters relevant to that action. Params by action: name, soundPath, location, rotation, volume,...
action*stringcreate_sound_cue · play_sound_at_location · play_sound_2d · create_audio_component · create_sound_mix · push_sound_mixactorNamestringanalysisTypestringassetPathstringattachPointNamestringattenuationPathstringattenuationShapestringcomponentNamestringconcurrencyPathstringdefaultValuevaluedopplerIntensitynumbereffectTypestringenablebooleanenableReverbSendbooleanenabledbooleanfadeInTimenumberfadeOutTimenumberfadeTimenumberfadeTypestringfalloffDistancenumber+49 more parameters. See the server's own documentation for the full schema.
manage_geometryCreate procedural meshes using Geometry Script: booleans, deformers, UVs, collision, and LOD generation. Required: action. Select one enum value, then provide only parameters relevant to that action. Params by action: outputPath, assetPath, name, path, actorName, width, height...74 paramsCreate procedural meshes using Geometry Script: booleans, deformers, UVs, collision, and LOD generation. Required: action. Select one enum value, then provide only parameters relevant to that action. Params by action: outputPath, assetPath, name, path, actorName, width, height...
action*stringcreate_box · create_sphere · create_cylinder · create_cone · create_capsule · create_torusactorNamestringamountnumberanglenumberassetPathstringaxisstringX · Y · ZcapbooleancenterobjectcollisionTypestringDefault · Simple · Complex · UseComplexAsSimple · UseSimpleAsComplexcomputeWeightedNormalsbooleancountnumberdepthnumberdepthSegmentsnumberdimensionsobjectdistancenumberhardEdgeAnglenumberheightnumberheightScalenumberheightSegmentsnumberhullCountnumber+54 more parameters. See the server's own documentation for the full schema.
manage_pcgCreate, edit, execute, and configure PCG graphs: graph assets, input/sampler/filter/spawner nodes, pin connections, node settings, and partition grid size. Required: action. Select one enum value, then provide only parameters relevant to that action. Params by action: graphPat...39 paramsCreate, edit, execute, and configure PCG graphs: graph assets, input/sampler/filter/spawner nodes, pin connections, node settings, and partition grid size. Required: action. Select one enum value, then provide only parameters relevant to that action. Params by action: graphPat...
action*stringcreate_pcg_graph · create_pcg_subgraph · add_pcg_node · connect_pcg_pins · set_pcg_node_settings · add_landscape_data_nodeactorClassstringactorNamestringassetPathstringclassPathstringcomponentNamestringcomponentPathstringcreateComponentbooleanforcebooleangraphPathstringgridSizenumberinputNamestringmeshPathstringnamestringnodeIdstringnodeNamestringnodeTypestringoutputNamestringoverwritebooleanparamsobject+19 more parameters. See the server's own documentation for the full schema.
manage_effectNiagara particle systems, VFX, debug shapes, and GPU simulations. Create systems, emitters, modules, and control particle effects. Required: action. Select one enum value, then provide only parameters relevant to that action. Params by action: name, path, savePath, assetPath,...77 paramsNiagara particle systems, VFX, debug shapes, and GPU simulations. Create systems, emitters, modules, and control particle effects. Required: action. Select one enum value, then provide only parameters relevant to that action. Params by action: name, path, savePath, assetPath,...
accelerationobjectaction*stringparticle · niagara · debug_shape · spawn_niagara · create_dynamic_light · create_niagara_systemactorNamestringalignmentstringassetPathstringattachToActorstringautoConnectbooleanburstCountnumberburstTimenumbercameraOffsetnumbercollisionModestringcolorvaluecolorModestringdeltaTimenumberdensitynumberdeterministicEnabledbooleandieOnCollisionbooleandurationnumberemitterstringemitterNamestring+57 more parameters. See the server's own documentation for the full schema.
manage_gasCreate Gameplay Abilities, Effects, Attribute Sets, and Gameplay Cues for ability systems. Required: action. Select one enum value, then provide only parameters relevant to that action. Params by action: name, path, assetPath, blueprintPath, replicationMode, attributeSetPath,...59 paramsCreate Gameplay Abilities, Effects, Attribute Sets, and Gameplay Cues for ability systems. Required: action. Select one enum value, then provide only parameters relevant to that action. Params by action: name, path, assetPath, blueprintPath, replicationMode, attributeSetPath,...
abilityPathstringabilityTagsarrayaction*stringadd_ability_system_component · configure_asc · create_attribute_set · add_attribute · set_attribute_base_value · set_attribute_clampingactivationBlockedTagsarrayactivationPolicystringOnInputPressed · WhileInputActive · OnSpawn · OnGivenactivationRequiredTagsarrayaoeRadiusnumberapplicationRequiredTagsarrayassetPathstringattributeNamestringattributeSetPathstringattributeTypestringHealth · MaxHealth · Mana · MaxMana · Stamina · MaxStaminabaseValuenumberblockAbilitiesWithTagarrayblueprintPathstringcalculationClassstringcameraShakePathstringcancelAbilitiesWithTagarrayclampModestringNone · Min · Max · MinMaxcomponentNamestring+39 more parameters. See the server's own documentation for the full schema.
manage_characterCreate Character Blueprints with movement, locomotion, and animation state machines. Required: action. Select one enum value, then provide only parameters relevant to that action. Params by action: name, path, blueprintPath, parentClass, skeletalMeshPath, animBlueprintPath, ca...67 paramsCreate Character Blueprints with movement, locomotion, and animation state machines. Required: action. Select one enum value, then provide only parameters relevant to that action. Params by action: name, path, blueprintPath, parentClass, skeletalMeshPath, animBlueprintPath, ca...
accelerationnumberaction*stringcreate_character_blueprint · configure_capsule_component · configure_mesh_component · configure_camera_component · configure_movement_speeds · configure_jumpairControlnumberanimBlueprintPathstringavoidanceEnabledbooleanblueprintPathstringbrakingDecelerationnumbercameraUsePawnControlRotationbooleancanCrouchbooleancapsuleHalfHeightnumbercapsuleRadiusnumberclimbSpeednumberclimbableTagstringcrouchSpeednumbercrouchedHalfHeightnumbercustomSpeednumberdecelerationnumberfallingLateralFrictionnumberflySpeednumberfootstepEnabledboolean+47 more parameters. See the server's own documentation for the full schema.
manage_combatCreate weapons with hitscan/projectile firing, configure damage types, hitboxes, reload, and melee combat (combos, parry, block). Required: action. Select one enum value, then provide only parameters relevant to that action. Params by action: blueprintPath, name, path, weaponM...96 paramsCreate weapons with hitscan/projectile firing, configure damage types, hitboxes, reload, and melee combat (combos, parry, block). Required: action. Select one enum value, then provide only parameters relevant to that action. Params by action: blueprintPath, name, path, weaponM...
action*stringcreate_weapon_blueprint · configure_weapon_mesh · configure_weapon_sockets · set_weapon_stats · configure_hitscan · configure_projectileadsEnabledbooleanadsFovnumberadsSpeednumberadsSpreadMultipliernumberammoPerShotnumberammoTypestringarmorValuenumberattachmentSlotsarraybaseDamagenumberblockDamageReductionnumberblockStaminaCostnumberblueprintPathstringbounceEnabledbooleanbounceVelocityRationumbercollisionRadiusnumbercomboWindowTimenumbercriticalMultipliernumberdamageAmountnumberdamageImpulsenumber+76 more parameters. See the server's own documentation for the full schema.
manage_aiBuild AI systems: AI controllers, Behavior Trees, Blackboards, EQS, perception, State Trees, Smart Objects, NavMesh settings, nav modifiers, links, and pathfinding. Required: action. Select one enum value, then provide only parameters relevant to that action. Params by action:...94 paramsBuild AI systems: AI controllers, Behavior Trees, Blackboards, EQS, perception, State Trees, Smart Objects, NavMesh settings, nav modifiers, links, and pathfinding. Required: action. Select one enum value, then provide only parameters relevant to that action. Params by action:...
action*stringcreate_ai_controller · assign_behavior_tree · assign_blackboard · create_blackboard_asset · add_blackboard_key · set_key_instance_syncedactorNamestringagentHeightnumberagentMaxSlopenumberagentRadiusnumberagentStepHeightnumberareaClassstringareaCostnumberassetPathstringbCreateBoxObstaclebooleanbaseObjectClassstringbehaviorTreePathstringblackboardPathstringblueprintPathstringbroadcastIntervalnumberbroadcastRadiusnumbercellHeightnumbercellSizenumberchildNodeIdstringcommentstring+74 more parameters. See the server's own documentation for the full schema.
manage_inventoryCreate item data assets, inventory components, world pickups, loot tables, and crafting recipes. Required: action. Select one enum value, then provide only parameters relevant to that action. Params by action: name, path, save, blueprintPath, itemPath, iconPath, maxStackSize,...57 paramsCreate item data assets, inventory components, world pickups, loot tables, and crafting recipes. Required: action. Select one enum value, then provide only parameters relevant to that action. Params by action: name, path, save, blueprintPath, itemPath, iconPath, maxStackSize,...
abilityGrantsbooleanaction*stringcreate_item_data_asset · set_item_properties · create_item_category · assign_item_category · create_inventory_component · configure_inventory_slotsactorPathstringattachToSocketbooleanblueprintPathstringbobbingbooleancategoryPathstringcomponentNamestringcraftTimenumbercraftingSpeedMultipliernumberdefaultSocketstringdropCountnumberdropOnDeathbooleandropRadiusnumberenableWeightbooleanencumberanceSystembooleanencumberanceThresholdnumberentryIndexnumberglowEffectbooleaniconPathstring+37 more parameters. See the server's own documentation for the full schema.
manage_interactionCreate interactive objects: doors, switches, chests, levers. Set up destructible meshes and trigger volumes. Required: action. Select one enum value, then provide only parameters relevant to that action. Params by action: name, folder, blueprintPath, actorName, componentName,...29 paramsCreate interactive objects: doors, switches, chests, levers. Set up destructible meshes and trigger volumes. Required: action. Select one enum value, then provide only parameters relevant to that action. Params by action: name, folder, blueprintPath, actorName, componentName,...
action*stringcreate_interaction_component · configure_interaction_trace · configure_interaction_widget · add_interaction_events · create_interactable_interface · create_door_actoractorNamestringautoClosebooleanautoCloseDelaynumberblueprintPathstringcanTogglebooleanchestPathstringcomponentNamestringdoorPathstringfolderstringlockedbooleanlootTablePathstringnamestringopenAnglenumberopenTimenumberparamsobjectpromptTextFormatstringrequiresKeybooleanresetTimenumbershowOnHoverboolean+9 more parameters. See the server's own documentation for the full schema.
manage_networkingConfigure multiplayer and player flow: replication, RPCs, authority/relevancy, network prediction, sessions, split-screen, LAN/voice chat, game framework classes, match rules, and input mappings. Required: action. Select one enum value, then provide only parameters relevant to...127 paramsConfigure multiplayer and player flow: replication, RPCs, authority/relevancy, network prediction, sessions, split-screen, LAN/voice chat, game framework classes, match rules, and input mappings. Required: action. Select one enum value, then provide only parameters relevant to...
action*stringset_property_replicated · set_replication_condition · configure_net_update_frequency · configure_net_priority · set_net_dormancy · configure_replication_graphactionNamestringactionPathstringactorNamestringallowSpectatingbooleanaltbooleanalwaysRelevantbooleanassetPathstringattenuationFalloffnumberattenuationRadiusnumberautoBalancebooleanaxisNamestringbAllowInvitesbooleanbAllowJoinInProgressbooleanbDelayedStartbooleanbIsLANMatchbooleanbShouldAdvertisebooleanbUseLobbiesIfAvailablebooleanbUsesPresencebooleanblueprintPathstring+107 more parameters. See the server's own documentation for the full schema.
manage_level_structureStructure worlds: levels, sublevels, World Partition, streaming, data layers, HLOD, level instances, trigger/blocking/physics/audio/post-process volumes, and nav bounds. Required: action. Select one enum value, then provide only parameters relevant to that action. Params by ac...79 paramsStructure worlds: levels, sublevels, World Partition, streaming, data layers, HLOD, level instances, trigger/blocking/physics/audio/post-process volumes, and nav bounds. Required: action. Select one enum value, then provide only parameters relevant to that action. Params by ac...
action*stringcreate_level · create_sublevel · configure_level_streaming · set_streaming_distance · configure_level_bounds · enable_world_partitionactorNamestringactorPathstringbAutoCalculateBoundsbooleanbBlockOnSlowStreamingbooleanbCreateWorldPartitionbooleanbDisableDistanceStreamingbooleanbEnableWorldPartitionbooleanbEnabledbooleanbIsInitiallyLoadedbooleanbIsInitiallyVisiblebooleanbIsSpatiallyLoadedbooleanbPackBlueprintsbooleanbPackStaticMeshesbooleanbPainCausingbooleanbShouldBeVisiblebooleanbShouldBlockOnLoadbooleanbUnboundbooleanbUseExternalActorsbooleanbWaterVolumeboolean+59 more parameters. See the server's own documentation for the full schema.
EngineWire connects Claude, Cursor, VS Code or any other MCP client to a running Unreal Editor,
and let it build levels, Blueprints, UI, materials, effects and more, through a native C++ editor plugin.
🧭 One tool, over 400 capabilities · ⚙️ Native C++ editor plugin · 🌐 HTTP or stdio · 🔐 Local and token-protected by default · 🎮 Unreal Engine 5.0 – 5.8
🚀 Quick Start · 📖 Wiki · 📦 Releases · 💬 Discussions
📌 Which version is this? This README describes the 0.6 line: the
devbranch and npmunreal-engine-mcp-server@beta. The previous stable release, 0.5.30 (npmlatest), exposes 23 separate tools instead of one; see Upgrading from 0.5.x.
Contents · What it does · How it works · Quick start · The unreal tool · Configuration · Security · Engine plugins · Docker · Documentation · Development · Community
|
🏗️ Levels and actors |
🧩 Blueprints and UI |
🎨 Materials and worlds |
|
🕹️ Gameplay |
🎬 Cinematics and audio |
🧪 Play and verify |
Nearly 400 capabilities in all, behind a single MCP tool. The assistant finds them by searching in plain words, so nobody has to learn their names. The full list is the generated Action Reference.
A platformer level built with the MCP, in Unreal Editor 5.8. Bottom right: the plugin's status, MCP :3000 (1), meaning the native server is running on port 3000 with one client connected.
The EngineWire plugin runs inside the editor and does all the work, on the editor's game thread. Clients reach it in one of two ways, and both expose the same single tool, unreal:
| 🌐 Route A · Native HTTP | 🧩 Route B · stdio | |
|---|---|---|
| Path | Client → the plugin's Streamable HTTP server at http://127.0.0.1:3000/mcp | Client → unreal-engine-mcp-server (Node.js, stdio) → the plugin's WebSocket on 127.0.0.1:8090 |
| Node.js | Not needed | 20.19 or later |
| Capability token | The client sends it in the X-MCP-Capability-Token header | Read from the project, given UE_PROJECT_PATH |
| Best for | Claude Code, Cursor, VS Code, and several clients sharing one editor | Claude Desktop, and clients that only launch local commands |
Everything listens on 127.0.0.1 and requires the project's capability token unless you change it.
The Quick Start page walks through this with screenshots. You need Unreal Engine 5.0 to 5.8 and a project with C++ code; a Blueprint-only project can use prebuilt binaries.
Download EngineWire-plugin-<version>.zip from the newest v0.6 pre-release on the Releases page, and copy the EngineWire folder it contains into your project:
MyGame/Plugins/EngineWire/
Or use a clone of this repository: copy plugins/EngineWire/, or reference the folder from your .uproject with "AdditionalPluginDirectories": ["C:/Path/To/Unreal_mcp/plugins"].
Open the project and let Unreal rebuild the plugin. When it's loaded, the status bar shows MCP off. If you see "Engine modules cannot be compiled at runtime", build the project once in Visual Studio, Rider or Xcode. More in Installation.
https://github.com/user-attachments/assets/d8b86ebc-4364-48c9-9781-de854bf3ef7d
Build the plugin once on a machine with the engine and a compiler, then hand out the zip. No compiler is needed on the target machine:
node scripts/package-plugin.mjs "C:/Program Files/Epic Games/UE_5.7"
This writes build/EngineWire-v<version>-UE5.7-<Platform>.zip, where <version> is the package.json version (currently 0.6.0-beta-f). Unzip it into YourProject/Plugins/. Binaries only work with the engine minor and platform they were built for: a 5.6 build won't load in 5.5, 5.7 or 5.8.
Route A · Native HTTP (no Node.js)
In Edit › Project Settings › Plugins › EngineWire, tick Enable Native MCP Server (port 3000 by default), then restart the editor. The status bar now reads MCP :3000 (0).
Read the capability token the plugin generated: <YourProject>/Saved/MCP/capability-token. Treat it like a password.
Add the server to your client and send the token in the X-MCP-Capability-Token header. Claude Code:
claude mcp add --transport http unreal-engine http://127.0.0.1:3000/mcp --header "X-MCP-Capability-Token: <token>"
Or in a project .mcp.json (Claude Code), reading the token from an environment variable:
{
"mcpServers": {
"unreal-engine": {
"type": "http",
"url": "http://127.0.0.1:3000/mcp",
"headers": { "X-MCP-Capability-Token": "${UNREAL_MCP_TOKEN}" }
}
}
}
Cursor (.cursor/mcp.json) takes the same url and headers without type. VS Code, Windsurf and others: Connecting Clients.
Check it: when the client connects, the count in the status bar goes up.
A client connected straight to /mcp loses its session whenever the editor closes or crashes, and has to reconnect by hand. The package's proxy command sits in between over stdio: while the editor is down every call answers NOT_CONNECTED, and the first call after it is back reaches it, with no reconnect. It keeps the editor's last tool list, so a session that starts before the editor still gets the real tool.
{
"mcpServers": {
"unreal-engine": {
"command": "npx",
"args": ["-y", "unreal-engine-mcp-server@beta", "proxy"],
"env": { "UE_PROJECT_PATH": "C:/Path/To/YourProject" }
}
}
}
The token is found the same way as on Route B (MCP_AUTOMATION_CAPABILITY_TOKEN, else the project's token file). UNREAL_MCP_URL points it at another endpoint (default http://127.0.0.1:3000/mcp). Route B survives editor restarts the same way on its own.
Route B · stdio (Node.js 20.19+)
Add this to your client's MCP configuration, for example Claude Desktop's claude_desktop_config.json:
{
"mcpServers": {
"unreal-engine": {
"command": "npx",
"args": ["-y", "unreal-engine-mcp-server@beta"],
"env": {
"UE_PROJECT_PATH": "C:/Path/To/YourProject"
}
}
}
}
UE_PROJECT_PATH (the project folder or its .uproject) is how the server finds the capability token and the plugin's port, so nothing else needs setting. Keep the @beta tag: without it, npm installs 0.5.30, which doesn't match a 0.6 plugin.
With the editor open, ask your assistant to "list the actors in the current level", "spawn a point light 300 units above the origin", or "take a screenshot of the viewport". If it doesn't connect, see Troubleshooting.
unreal toolBoth routes expose exactly one MCP tool, unreal, with four operations. Only the contract the model is about to use gets loaded, instead of hundreds of tool schemas:
| Operation | What it does |
|---|---|
search | Finds capabilities from 2-4 plain words, such as spawn actor or save level. Every row carries a ready-to-send nextCall. |
describe | Returns one capability's exact contract: parameters, schemas, an example, and the consent grant when one is needed |
execute | Runs one capability with validated parameters and returns the data plus a receipt of what changed |
configure | Enables or disables groups of internal tools; never touches the editor |
A typical exchange:
{ "operation": "search", "query": "spawn actor" }
{ "operation": "describe", "tool": "control_actor", "action": "spawn" }
{
"operation": "execute",
"tool": "control_actor",
"action": "spawn",
"params": { "classPath": "/Script/Engine.PointLight", "actorName": "KeyLight", "location": [0, 0, 300] }
}
UNDECLARED_PARAMETER and the list of allowed names; every error carries an executable nextCall.consentGrant from describe, passed back as a top-level consent field.tool + action pair; the stdio route also accepts a capability id, such as "capability": "control_actor.spawn".Full reference with real replies: Using the Gateway.
The single unreal tool is permanent on both routes; there is no opt-out and no 23-tool listing to restore. A client that still calls a canonical tool name directly (tools/call with name: "manage_asset", name: "control_actor", …) receives a bounded, copy-paste-executable DIRECT_TOOL_CALL_REMOVED receipt instead of a routed call. Its nextCall drills exactly one level: { "operation": "search" } for an unknown name, { "operation": "describe", "tool": "<tool>" } when no action was given, or { "operation": "execute", "tool": "<tool>", "action": "<action>", "params": { ... } } when the call already named an action. Run that nextCall through unreal to finish the migration. See Upgrading.
Both routes negotiate the MCP protocol version at initialize. The native /mcp transport supports 2025-11-25 (latest), 2025-06-18 and 2025-03-26; the stdio server also accepts the legacy 2024-11-05 and 2024-10-07. An unsupported MCP-Protocol-Version header on the native route gets HTTP 400. Both also answer server/discover without a session, listing those versions, so a client on the newer 2026-07-28 revision falls back to initialize. Details: docs/protocol.md.
unrealThese route requests inside the gateway; clients never list them. More in the Tools Reference.
| Category | Tool | Covers |
|---|---|---|
| Core | manage_asset | Assets and folders, materials and material graphs, textures and render targets, data tables, structs, enums, source control |
| Core | manage_blueprint | Blueprints, components, variables, event graphs, UMG widgets, layout, bindings, widget animations |
| Core | control_actor | Spawning, transforms, attachment, components, materials, tags, placement audits |
| Core | control_editor | Play-In-Editor, synthetic input, screenshots, viewport camera, undo, editor preferences |
| Core | manage_level | Create, load, save, stream, import and export levels; world settings; lighting builds |
| Core | system_control | Console commands, logs, project settings, profiling, builds and packaging, tests, Python |
| Core | inspect | Read and write any UObject's properties, components and class info |
| Core | manage_tools | Which internal tools are enabled (through configure) |
| World | build_environment | Landscapes, foliage, lights and sky, water, weather, splines, procedural terrain |
| World | manage_level_structure | Sublevels, World Partition, streaming, data layers, HLOD, volumes |
| World | manage_geometry | Geometry Script meshes: booleans, deformers, UVs, collision, LODs, polygon cages, subdivision surfaces, material ids, vertex-color masks |
| World | manage_pcg | PCG graphs: create, add and connect nodes, execute |
| Gameplay | animation_physics | Animation Blueprints, blend spaces, montages, skeletons, Control Rig and IK, ragdolls, cloth, vehicles |
| Gameplay | manage_character | Character Blueprints, movement, MetaHuman |
| Gameplay | manage_combat | Weapons, projectiles, hit detection |
| Gameplay | manage_effect | Niagara systems, emitters and modules, debug shapes |
| Gameplay | manage_gas | Gameplay Ability System: abilities, attributes, effects |
| Gameplay | manage_ai | AI controllers, Behavior Trees, EQS, State Trees, Smart Objects, perception, navigation |
| Gameplay | manage_inventory | Items, loot tables, crafting recipes |
| Gameplay | manage_interaction | Doors and other interactables |
| Utility | manage_audio | Sounds, audio components, Sound Cues, MetaSounds, attenuation, mixes |
| Utility | manage_sequence | Level Sequences, Movie Render Queue, media, Take Recorder, replays |
| Utility | manage_networking | Replication, RPCs, sessions, game framework classes, Enhanced Input |
Most setups touch one setting: Enable Native MCP Server for Route A, or UE_PROJECT_PATH for Route B. Everything is listed on the Configuration page.
Plugin settings (Project Settings › Plugins › EngineWire, saved in Config/DefaultGame.ini):
| Setting | Default | |
|---|---|---|
| Enable Native MCP Server | off | Serve MCP over HTTP at /mcp |
| Native MCP Port | 3000 | The MCP_NATIVE_PORT environment variable of the editor process overrides it |
| Listen Ports | 8090,8091 | WebSocket ports for Route B |
| Require Capability Token | on | Both routes refuse clients without the token |
| Allow Non Loopback | off | LAN access for both listeners. See Security. |
Environment variables (Route B only, in the client's env block):
| Variable | Default | |
|---|---|---|
UE_PROJECT_PATH | unset | Project folder or .uproject; used to find the token and the port |
MCP_AUTOMATION_PORT | the project's first Listen Ports entry, else 8090 | Editor WebSocket port |
MCP_AUTOMATION_HOST | 127.0.0.1 | A LAN address also needs MCP_AUTOMATION_ALLOW_NON_LOOPBACK=true |
MCP_AUTOMATION_CAPABILITY_TOKEN | read from the token file | Token to present, when the server can't read the project folder |
MCP_ADDITIONAL_PATH_PREFIXES | empty | Extra content roots such as /MyPluginContent/, comma-separated; most content-path arguments also accept the mounts the connected editor reports, so this is needed only with no editor connected, for a mount the editor does not report or the server ignores, and for arguments the server treats as files (filePath, outputPath and a few others), even where outputPath names an asset |
LOG_LEVEL | info | debug, info, warn or error; logs go to stderr |
127.0.0.1 only. LAN access needs Allow Non Loopback, and the native server refuses to bind off-loopback unless Require Capability Token is on.<Project>/Saved/MCP/capability-token (a value typed into Capability Token overrides it) and compared in constant time. Delete the file and restart the editor to rotate it./Game, /Engine, /Script, /Temp, /Niagara plus configured prefixes, and a content path may also sit under a mount the connected editor reports; arguments the server treats as files (such as filePath, and outputPath even where it names an asset) never use the reported mounts; console commands that chain or quit the editor are blocked; the plugin's own settings are out of reach of automation.Details: Security. Please report vulnerabilities privately through GitHub security advisories.
The bridge declares its engine-plugin dependencies, so Unreal enables them together with it.
| Plugin | Used for |
|---|---|
| Python Editor Script Plugin | Python-backed editor automation, system_control Python execution |
| Editor Scripting Utilities | Asset and actor subsystem operations |
| Niagara | Visual effects |
| Gameplay Abilities | manage_gas |
| Smart Objects | AI smart objects |
| Plugin | Used for |
|---|---|
| Level Sequence Editor, Takes, Movie Render Pipeline, Movie Pipeline Mask Render Pass, Electra Player | manage_sequence: Sequencer, Take Recorder, Movie Render Queue, media playback |
| Control Rig, RigVM, IK Rig, Animation Data | animation_physics: Control Rig and IK |
| Chaos Vehicles, Chaos Cloth | animation_physics: vehicles and cloth |
| Niagara Editor | manage_effect: Niagara authoring |
| Behavior Tree Editor, Environment Query Editor, StateTree, Mass Gameplay | manage_ai |
| Geometry Scripting, Geometry Processing, Mesh Modeling Toolset, Procedural Mesh Component | manage_geometry (Catmull-Clark, Loop and bilinear subdivision need Mesh Modeling Toolset) |
| PCG | manage_pcg, compiled in only when the project itself enables the PCG plugin |
| MetaSound, Synthesis | manage_audio: MetaSound authoring |
| Enhanced Input, Online Subsystem, Online Subsystem Utils | manage_networking: input mappings, sessions |
| Interchange, Interchange OpenUSD, Data Validation, StructUtils | Import/export, validation, struct helpers |
| Fab, Bridge | Fab asset library access (optional EngineWireFab module) |
The plugin targets every Unreal Engine minor from 5.0 to 5.8. If it fails to build on yours, please open an issue with the build log.
The image runs the stdio server. It has to reach the editor's WebSocket on 127.0.0.1, so use host networking (Linux), and pass the token because the container can't read your project folder:
docker build -t unreal-mcp .
docker run -i --rm --network host -e MCP_AUTOMATION_CAPABILITY_TOKEN=<token> unreal-mcp
Use -i without -t: a TTY corrupts the MCP stream on stdout.
| 📖 Wiki | Quick Start, Installation, Connecting Clients, Using the Gateway, Configuration, Security, Troubleshooting, FAQ, Upgrading |
| 📋 Action Reference | Every capability with its effect, scope and consent, generated from the capability records |
| 🔌 Gateway client guide | The gateway contract, with the source file behind each claim |
| 📡 Protocol | Transports, version negotiation, cancellation |
| 🔐 Security and receipts | Scopes, consent, path gating, idempotency, refusal codes |
| 🧪 Testing guide | Test suites and how to add cases |
| 🧩 Extending the plugin | Adding an editor action: record, handler, route and tests, plus the rules for plugin code |
| 🗺️ Roadmap | Development roadmap |
| 📝 Changelog | What changed in each release |
npm install
npm run build # clean + compile TypeScript to dist/
npm run dev # run from source with ts-node
npm run lint # ESLint (CI fails on any warning)
npm run type-check # tsc --noEmit, sources and tests
npm run test:unit # Vitest unit tests (no Unreal required)
npm run test:smoke # offline mock-mode MCP check (needs built dist/)
npm run test:params # strict parameter audit
npm run registry:generate # capability records -> generated contracts, native shards, action reference
npm run registry:check # fail if generated artifacts drift
npm run manifest:check # fail if the gateway manifest drifts
npm run eval:check # search-ranking corpus
npm run version:check # all version sources agree
npm test # integration suite (needs a live Unreal Editor + bridge)
The capability records in src/tools/catalog/capabilities/records/ are the single source of truth; every *.generated.* file, the plugin's MCP/Generated/ shards and the action reference are generated from them. Never hand-edit generated files. How to add a capability: Development.
CI runs, in order: ESLint (npx eslint . --max-warnings=0), type-check, unit tests, registry:check, manifest:check, headers:check, the strict parameter audit (test:params) and eval:check, then a blocking runtime dependency audit (npm audit --omit=dev --audit-level=moderate) and an informational full-tree audit. A Node 20.19 / 26 matrix adds build and test:smoke. Plugin packaging runs only when an Unreal Engine root is configured, because CI runners don't ship an engine. Release archives exclude Binaries/, Intermediate/ and Saved/.
| 💬 Discussions | Questions, ideas, show and tell |
| 🐞 Issues | Bug reports and feature requests |
| 🗺️ Project board | Roadmap progress and priorities |
Contributing: keep pull requests small and focused, with a Conventional Commits title; include reproduction steps for bugs; follow the existing code style. See CONTRIBUTING.md.
MIT. See LICENSE.
LOG_LEVELLogging level: debug, info, warn, error (default: info)
MCP_ROUTE_STDOUT_LOGSRoute standard output to standard error to avoid protocol corruption (default: true)
UE_PROJECT_PATHAbsolute path to your Unreal .uproject file
UE_EDITOR_EXEPath to UnrealEditor-Cmd.exe (optional)
UE_SCREENSHOT_DIRDirectory to save screenshots (optional)
MCP_AUTOMATION_PORTAutomation bridge WebSocket port (default: 8091)
MCP_AUTOMATION_HOSTAutomation bridge WebSocket host (default: 127.0.0.1). Set to 0.0.0.0 for LAN access (requires MCP_AUTOMATION_ALLOW_NON_LOOPBACK=true)
MCP_AUTOMATION_ALLOW_NON_LOOPBACKSECURITY: Allow binding to non-loopback addresses (e.g., 0.0.0.0) for LAN access. Only enable if you understand the security implications. (default: false)
MCP_AUTOMATION_CLIENT_MODERun as client connecting to UE (false) or server listening for UE (true) (default: false)
MCP_AUTOMATION_USE_TLSUse wss:// for the automation bridge client connection (default: false)
MCP_CONNECTION_TIMEOUT_MSConnection timeout in milliseconds (default: 5000)
MCP_REQUEST_TIMEOUT_MSRequest timeout in milliseconds (default: 30000)
MCP_AUTOMATION_MAX_MESSAGES_PER_MINUTEMax inbound automation bridge messages per minute before disconnect (default: 600)
MCP_AUTOMATION_MAX_AUTOMATION_REQUESTS_PER_MINUTEMax inbound automation request messages per minute before disconnect (default: 120)