Skip to main content

Documentation Index

Fetch the complete documentation index at: https://mintlify.com/davidbuenov/dbv-mcp-server/llms.txt

Use this file to discover all available pages before exploring further.

All notable changes to the Unreal MCP Web Client are documented on this page. The format follows Keep a Changelog and this project adheres to Semantic Versioning.

Added

  • Short Custom Instructions for Claude Desktop — a new “ready to paste” block in Step 8 of docs/UNREAL_MCP_INTEGRATION_GUIDE.md, optimized to fit within Claude Desktop’s character limits without losing any critical rules: pre-call documentation lookup, toolset priority, DBV organization conventions, Outliner grouping, and PIE/viewport movement operational notes.
  • Persistent Unreal + MCP operating rules in CLAUDE.md — a dedicated section for Claude Code in this repository with an explicit decision order: documentation first, dedicated tool priority, bounded use of RunPython, confirmation before destructive operations, and a minimum technical response format.

Changed

  • Step 8 of the integration guide reinforced — the Claude Desktop and Claude Code instruction blocks were rewritten with more precise rules covering documentation validation, the choice between toolset and Python, mandatory organization under /Game/DBV/, Outliner management, and manual PIE validation when no viewport focus is available.

Added

  • Direct CLI for the dbv-unreal-python-api skillsearch_engine.py now exposes subcommands (search, search-guides, status, guides-status) invokable from the command line, allowing Claude Code to use the skill via Bash/code execution without depending on the MCP server.
  • Claude Code skill autodiscovery — new .claude/skills/dbv-unreal-python-api/SKILL.md (pointer to the canonical SKILL.md inside skills/dbv-unreal-python-api/) so Claude Code loads the skill automatically when opening the repository, with no manual configuration.
  • Copyable C++ template files for the example toolsetdocs/templates/MyCustomSceneToolset.h and .cpp contain the same code as Step 3 of UNREAL_MCP_INTEGRATION_GUIDE.md, so developers can copy them directly into Source/<ProjectName>/ instead of manually transcribing the code listing.
  • Step 8 — Persistent behavior rules for Claude — new section in UNREAL_MCP_INTEGRATION_GUIDE.md with the exact Custom Instructions text (Claude Desktop) and a CLAUDE.md rule (Claude Code) covering two conventions: (1) always consult dbv-unreal-python-api before generating or executing Python scripts via unreal-engine-mcp; (2) all AI-generated assets go under /Game/DBV/<Type> in the Content Browser (never loose in the Content/ root), and related actors are grouped into World Outliner folders. A verified Python recipe (make_directory, set_folder_path) is included in SKILL.md under “Common Patterns” and linked from “Critical Rules”.
  • Step 4 — Register the Toolset in the Primary Module (mandatory) — new critical section in UNREAL_MCP_INTEGRATION_GUIDE.md with complete code for <ProjectName>.cpp, explaining that ToolsetRegistrySubsystem::Initialize() (engine) only auto-registers AgentSkillToolset — any custom UToolsetDefinition requires an explicit call to UToolsetRegistry::RegisterToolsetClass(...) in OnPostEngineInit, or it will never appear in list_toolsets despite compiling and loading correctly. Subsequent guide steps were renumbered (old 4→5, 5→6, 6→7, 7→8).

Changed

  • Integration documentation restructuredSKILL.md and the “Python API Skill” section of README.md now explicitly document both viable usage paths — Claude Code Skill (recommended; reads the knowledge base directly from disk) and MCP server (for Claude Desktop, claude.ai, or other MCP clients) — with instructions for each. Previously only the MCP path was documented, leaving the Skill mechanism without real usage instructions.
  • Manual skill upload to Claude Desktop/claude.ai discontinued — the Skills UI requires a .zip under 30 MB uncompressed; the skills/dbv-unreal-python-api/ bundle weighs ~118 MB due to its 17,000 knowledge-base files, and an uploaded Skill runs in a sandbox without local disk access, making it non-functional even if it fit. Documented as a known limitation; clients outside Claude Code must use the MCP server.

Fixed

  • UnicodeEncodeError in search_engine.py CLI on Windowsstdout is now forced to UTF-8 when invoking the new subcommands, preventing failures when printing results containing non-ASCII characters (e.g. ) to pipes or redirections that are not attached to a real console.
  • Unclosed Markdown code fence in SKILL.md — removed a residual ``` at the end of the maintenance section that had no matching opening fence.
  • Inconsistent claude_desktop_config.json example between README.md and SKILL.mdREADME.md was missing the -u flag, and neither file included the real Windows case (absolute path to python.exe with escaped backslashes) validated during a clean-PC installation. The example was unified across both files and the mcp_server.py docstring (which also had a hardcoded D:/... path from the original development machine).
  • UNREAL_MCP_INTEGRATION_GUIDE.md incomplete — plugins and server startup — Step 1 only listed 4 minimal plugins (ModelContextProtocol, ToolsetRegistry, MCPClientToolset, PythonScriptPlugin), omitting the 3 that expose the 100+ real Editor tools (EditorToolset, AutomationTestToolset, SlateInspectorToolset). With only the 4 minimal plugins, Claude only sees AgentSkillToolset. Also missing was the Editor Preferences → Model Context Protocol → Auto Start Server step (disabled by default): enabling the plugin does not start the server automatically — you must check that box or run ModelContextProtocol.StartServer in the Editor console every session. A new section “1.1 Enable MCP server auto-start” was added with a reference to the official Epic documentation.
  • RunPython / custom toolset never appeared in list_toolsets on a new project despite compiling — root cause diagnosed by comparing a new project (EventoUnrealMCP, broken) against the reference project (DBVMCPFirst, working): same toolset code, same .uproject, same .Build.cs, symbols present in the compiled DLL, yet list_toolsets never included the custom class. Two hypotheses (plugin load timing, filename U prefix) were ruled out before reading the engine source (ToolsetRegistrySubsystem.cpp, shipped with UE 5.8): the subsystem only auto-registers AgentSkillToolset; everything else requires an explicit UToolsetRegistry::RegisterToolsetClass(...) call in OnPostEngineInit, which DBVMCPFirst.cpp had (in a custom module class) and which the guide never documented. The new Step 4 includes the exact code. Verified live after applying the fix and recompiling: RunPython now appears in list_toolsets.

Added

  • Conceptual Development Guides tool (dbv_unreal_dev_guide) — new tool and search engine for official Unreal Engine 5.8 conceptual guides (PCG, Materials, Blueprints, Editor), integrated under the dbv-unreal-python-api skill alongside the existing syntax reference. Includes an ingester (scrape_ue_guides.py), two-layer search in search_engine.py (search_guides / get_guides_status), REST endpoints (/api/guides/search, /api/guides/status), and a visual search panel in the web client sidebar.
  • Full UE 5.8 documentation coveragescrape_ue_guides.py expanded from 4 fixed categories (~229 pages) to the complete official documentation tree (~3,600 pages across ~24 top-level sections, including the 1,098 Unreal Engine Node Reference entries). Discovery is now driven by the full table_of_content.json tree instead of fixed seed URLs.
  • Safe parallel sharding — new --merge command and per-category progress/index files (index_guides__<category>.json) allow running multiple crawls in parallel without race conditions, then combining them into the final index_guides.json.

Fixed

  • Guide ingestion blocked by Cloudflare Bot Managementscrape_ue_guides.py replaced urllib-based download (blocked with 403 due to lack of real browser TLS/JS fingerprint) with a Playwright-based fetch that opens a new browser context per article. Cloudflare degrades session trust after the first internal API call, so reusing a context between pages produced 403 from the second page onward. Content is now extracted directly from the content_html block inside document.json instead of parsing the rendered DOM.
  • Silent page loss on error — pages that failed during crawl were still marked “completed” in the progress file, preventing a subsequent --resume from retrying them. Failed pages are now recorded in .errors_guides__<category>.json and retried automatically.

Added

  • Native Unreal Engine 5.8 toolset integration — enabled the experimental plugins EditorToolset, AutomationTestToolset, and SlateInspectorToolset at project level, expanding available tools from 7 to over 100.
  • Blueprints panel — new tab in the web client to list functions, variables, and graphs of a Blueprint, and compile it directly from the browser.
  • Automation Tests panel — new tab to discover, list, and run the Editor’s automation tests via AutomationTestToolset.
  • Visual Actor Spawner — new tab with a 3D form for instantiating actors by class (StaticMeshActor, PointLight, DirectionalLight, CameraActor) or from a Blueprint at desired X/Y/Z coordinates, and for injecting components into existing actors.
  • In-memory tool cacheserver.py now uses asyncio.gather to flatten all toolsets in parallel and stores the result in _tools_cache, reducing repeated tools/list calls to 0 ms.
  • Automatic namespace translationserver.py and bridge.py include the translate_toolset_name function, which resolves short names (e.g. EditorToolset.SceneTools) to the real Python namespace registered in Unreal (e.g. editor_toolset.toolsets.scene.SceneTools) at runtime.
  • Improved C++ toolsGetActors returns a full JSON dump of all actors in the active scene; RunPython captures and serializes LogOutput traces from FPythonCommandEx as JSON for better debugging.
  • Exact-match search in the API skillsearch_engine.py intercepts the exact:ClassName syntax to bypass semantic scoring when the exact class name is known.

Fixed

  • Gemini API schema compatibilityconvertSchemaToGemini() in app.js now recursively removes unsupported fields (additionalProperties, default, $schema, title), fixing HTTP 400 errors when using the agent chat.
  • UnicodeEncodeError on Windows — replaced the Unicode character with the ASCII string -> in server.py logs to prevent hangs caused by UnicodeEncodeError on Windows terminals with cp1252 encoding.
  • Toolset not found error in Unreal — fixed the proxy translation layer so that direct dot-notation calls (e.g. editor_toolset.toolsets.scene.SceneTools.add_to_scene_from_class) correctly map to a call_tool command with separate toolset_name and tool_name arguments.

Added

  • Async FastAPI serverserver.py rewritten using FastAPI, Uvicorn, and HTTPX. Resolves concurrency blocking when reading SSE streams (text/event-stream) from Unreal, and serves SPA static files concurrently.
  • Resizable terminal — horizontal drag bar and variable --terminal-height CSS property, controllable by mouse and touch events in the frontend.
  • Gemini intelligent agent — new “Intelligent Agent (Chat)” tab for interacting with Unreal Engine in natural language. Includes:
    • Support for latest-generation Gemini models (gemini-3.5-flash, gemini-3.5-pro, gemini-3.1-flash, gemini-3.0-flash).
    • In-UI Gemini API Key field saved to localStorage (never written to source code).
    • Dynamic mapping and JSON Schema translation from MCP toolsets to Gemini-compatible function declarations (including Toolset.ToolToolset_Tool name conversion).
    • Async agent loop that makes local, interactive calls to Unreal in the background and returns the final composed answer.
  • Bridge for Claude Desktop (bridge.py) — stdio-to-HTTP-SSE proxy script that integrates the local Unreal Engine MCP server as a native connector in Claude Desktop.
  • Automatic Claude path mapping — support for both standard Claude Desktop config (AppData\Roaming) and the MSIX sandboxed package path (AppData\Local\Packages\Claude_pzs8sxrjxfjjc).

Fixed

  • Failed to Fetch error — resolved CORS/OPTIONS connection blocking that caused network failures in the browser client when executing tools.
  • JSON validation errors in Claude Desktop — fixed Zod/invalid_union parse failures by forcing all bridge.py responses written to stdout to be compacted onto a single line.
  • JSON-RPC compliance for notifications — modified bridge.py so that client notifications (e.g. notifications/initialized) produce no stdout output, in accordance with the JSON-RPC 2.0 specification.

Added

  • Project initialization — project bootstrapped using the SDD (Spec-Driven Development) framework.
  • Single-page application (SPA):
    • index.html — semantic structure for connection management, tools panel, execution form, and console.
    • index.css — futuristic dark interface with glassmorphism, HSL variables, and glow animations.
    • app.js — complete connection handshake, progressive SSE chunk reader via Fetch API, and dynamic form generation.
  • Quick actions (Unreal Shortcuts):
    • One-click button to count cubes in the scene (DBVMCPFirst.MyCustomSceneToolset.CountActorsWithMesh with MeshName: "SM_Cube").
    • One-click button to list active skills (ToolsetRegistry.AgentSkillToolset.ListSkills).
  • Cross-platform startup scripts:
    • start.cmd / stop.cmd for Windows — starts a local Python HTTP server on port 5000 and opens the browser.
    • start.sh / stop.sh equivalents for Linux/macOS.
  • Integration teststests/test_server.py: automated test script that starts the HTTP server, performs queries, and validates assertions against index.html autonomously.
  • Agent Readiness:
    • robots.txt with AI content signals and sitemap path.
    • llms.txt with semantic navigation map of the SPA.
    • .well-known/agent.json and .well-known/mcp.json for agent identity discovery.

Fixed

  • CSS compatibility — removed the -webkit-backdrop-filter prefix in index.css (lines 58 and 320) that caused compilation/validation failures in strict development environments, keeping only the standard backdrop-filter property for native compatibility in modern browsers.

Build docs developers (and LLMs) love