DOCUMENTATION

Installation

Three pieces, installed in this order. Each is useful on its own: the Unreal plugin alone gives you a local HTTP API, and the Blender add-on and the MCP server are both optional.

Requirements

  • Unreal Engine 5.3 to 5.8, Win64. MifBridge is editor-only C++, so build it against the engine you actually run. A binary built for one engine, or for a source build, will not load in another. See the engine matrix for what is verified on each version.
  • Python 3.10 or newer, for the MCP server.
  • Blender 3.6 to 5.2, for the Blender backend.

1. The Unreal plugin

  1. Put the MifBridge folder at <YourProject>/Plugins/MifBridge/. It needs Source/ and the .uplugin file. Do not copy Binaries/ or Intermediate/ over from a different engine.

  2. The plugin is enabled by default, so no project-file regeneration is needed.

  3. With the editor closed, build your project's Editor target:

    <Engine>\Build\BatchFiles\Build.bat <YourProject>Editor Win64 Development -Project="<path>\<YourProject>.uproject" -WaitMutex
    

    Read the build output for errors rather than trusting the exit code alone.

  4. Open the editor. MifBridge starts on its own and listens on 127.0.0.1:8791. Start and stop it from Tools ▸ Mif Bridge: Start / Stop; the menu label shows the live port. The MifBridge panel opens a moment after startup, and is also under Window and Tools ▸ Mif Bridge: Live Panel.

  5. Smoke test, with the editor open:

    curl -s -X POST http://127.0.0.1:8791/api/list_blueprints \
      -H "X-Mif-Token: dev" -H "Content-Type: application/json" \
      -d '{"filter":"BP_"}'
    

2. The Blender add-on (optional)

Skip it and everything else still works; the Blender tools simply report that the backend is not reachable.

  1. Download the add-on: MifBlender-1.2.0.zip. It is free, carries its own MIT license, and is not inside the Fab package. From a GitHub checkout you can build the same zip instead with python tools/blender-addon/build_zip.py, which writes tools/blender-addon/dist/MifBlender.zip.

  2. In Blender, open Edit ▸ Preferences ▸ Add-ons ▸ Install…, choose that zip, and enable MifBlender (MifBridge backend).

  3. Set the add-on's Token preference to the secret the MCP server uses. That is MIF_BLENDER_TOKEN, which falls back to MIF_BRIDGE_TOKEN; both default to dev.

  4. The server starts automatically. Its status and Start/Stop buttons are in the 3D viewport's N-panel ▸ MifBridge tab, which also shows this Blender's process id.

  5. Headless Blender (blender -b) does not auto-start the add-on, because a background Blender has no event loop to run it on. Start it explicitly:

    blender -b --python-expr "import MifBlender; MifBlender.serve_forever()"
    

Verified on Blender 3.6.23, 4.2.17 LTS, 4.4.0, 5.0.1 and 5.2.1 LTS. Blender's add-on list shows 4.4 as the declared minimum.

Updating from 1.1: the add-on changed in 1.2, so install the new zip over the old one and restart Blender. The 1.2 add-on records the port it listens on, so the MCP server finds a Blender on a port other than 8792 without a restart.

3. The MCP server (optional)

With Claude Code, press one button. With your project open in the editor, open the MifBridge panel and press SETUP ▸ Set up Claude Code. It finds a Python 3.10 or newer (the engine's own on UE 5.4 and later; on 5.3, install one from python.org), makes a private environment for the server under %LOCALAPPDATA%\MifBridge\mcp-venv and installs its packages there, and registers the server with Claude Code for this project with the editor's own port and token. That registration is private to your Windows user and never written into a file your team commits. It then checks that Claude Code can start the server, and opens Claude Code in the project. Check changes nothing and says what is in place. The first run takes about two minutes, most of it downloading the server's packages; later runs take under 20 seconds. You need Claude Code installed (winget install Anthropic.ClaudeCode).

By hand, for any MCP client:

cd <YourProject>/Plugins/MifBridge/Content/Python/MifBridge/mcp-server
pip install -r requirements.txt

Then add it to your MCP client. For Claude Code, that is a project-scoped .mcp.json:

{
  "mcpServers": {
    "mif-bridge": {
      "command": "python",
      "args": ["<YourProject>/Plugins/MifBridge/Content/Python/MifBridge/mcp-server/server.py"],
      "env": {
        "MIF_BRIDGE_URL": "http://127.0.0.1:8791/api",
        "MIF_BRIDGE_TOKEN": "change-me-to-match-the-editor"
      }
    }
  }
}

Cursor, Claude Desktop or Codex: from 1.2, the same script writes a checked entry into that client's own config, keeping the rest of the file and a backup of it. Run python Content/Python/MifBridge/setup_claude_code.py --project <folder with the .uproject> --client cursor from the plugin folder, with claude-desktop or codex for the others.

Install the dependencies into the Python your client launches. This is the most common silent failure: installed into a different interpreter, the tools simply show as unavailable, which looks like a broken product rather than a pip that went to the wrong place. More in MCP Server.

A copy from GitHub keeps the same files under tools/ instead: tools/mcp-server/server.py, tools/verify_install.py, and so on.

Updating from 1.0.0

The Python moved. Version 1.0.0 kept it in tools/; from 1.1 it is under Content/Python/MifBridge/, where Fab's rules put a plugin's Python. A client config written for 1.0.0 names .../tools/mcp-server/server.py, which the update removes. Press SETUP ▸ Set up Claude Code again, which replaces its own earlier entry, or change tools/mcp-server/server.py to Content/Python/MifBridge/mcp-server/server.py in the config's args. verify_install.py names the path to use.

4. Check it worked

From the plugin folder:

python Content/Python/MifBridge/verify_install.py

One command for all three pieces. It separates the causes that otherwise look identical:

It says What is actually wrong
the plugin answered but REFUSED the token (HTTP 403) The plugin is fine. The editor's MIF_BRIDGE_TOKEN and your MCP config disagree.
nothing is listening on port 8791 The bridge is not running. Use Tools ▸ Mif Bridge: Start.
something is listening on 8791 but it is not answering as MifBridge Another program has the port. Pick a free one with MIF_BRIDGE_PORT.

It checks the setup your client will use: the config Claude Code reads for the project, the Python that config starts, and that config's own URL and token. It says when a piece is older than what is available, and how that copy updates. --fix rewrites a .mcp.json entry whose server path no longer exists, such as one written for 1.0.0, and keeps a backup of the file. More messages and their causes are in Troubleshooting.

A Blender add-on that is not running is an optional note, not a failure. One that answers but whose installed files do not match the release, or that Blender loads twice, is a failure, and the check names the fix. Apart from --fix, it changes nothing, and the one program it runs is the Python your config names, to check that its packages import. No editor or Blender is started: anything not running is reported as not running, with what starts it.

What else is in the download

Besides the plugin and the MCP server, Content/Python/MifBridge/ carries scripts you run yourself. They are standalone programs, not editor scripts: the editor never imports them.

Script What it does
setup_claude_code.py What SETUP ▸ Set up Claude Code runs. From a terminal: --project <folder with the .uproject> --port 8791; --check changes nothing.
verify_install.py The install check above.
mifwatch.py Reads the crash journal and names the call that was running when the editor died. --watch relaunches the editor when it dies.
layout_graph.py Arranges a Blueprint graph's nodes through the bridge, so a person can read what an agent built.
bench_bridge_latency.py Measures per-call latency, and whether the editor had focus, which dominates it.
make_demo.py Builds a deliberately flawed scene in a live Blender, measures it, fixes it, and renders before and after.
clear_scratch_restore.py Clears the editor's Restore Packages prompt after a crash, only when every entry in it is a scratch path. Otherwise it refuses and changes nothing.
close_crash_reporter.py Reads a dead editor's crash report and closes its Crash Reporter window. --list closes nothing.

The rest of Content/Python/MifBridge/ holds the modules these scripts share.