Skip to main content

ue-bridge

Talk to a running UE4SS game: inspect objects, call functions, run Lua, while it plays. Two parts, released separately:

Part What Where it goes
UEBridge (Lua mod) Polls ue4ss\bridge\request.json, runs the request on the game thread, writes response.json. Game-agnostic. The game: ue4ss\Mods\UEBridge\ (Nexus / GitHub release zip)
ue-bridge (Python) An MCP server and CLI that write those files and read the answers. Finds the running game by itself. Your machine: uvx ue-bridge or pip install ue-bridge
AI agent / script  ->  ue-bridge (MCP stdio or HTTP, or CLI)  ->  request.json
                                                                 UEBridge mod: ExecuteInGameThread
                       ue-bridge  <-  response.json           <-

No sockets in the game, no admin rights, no changes to the game binary. The mod opens no network connection and starts no process. Only software already running on the same machine with write access to the game folder can talk to it.

Install the mod

Extract the release zip into the game's install folder. It carries the path, so the files land in <game>\<Project>\Binaries\Win64\ue4ss\Mods\UEBridge. enabled.txt in that folder starts the mod; no mods.txt edit. UE4SS.log shows [UEBridge] v1.0.0 ready when it loaded.

scripts\settings.lua in the mod folder:

Key Default Effect
enabled true false stops polling entirely
poll_ms 250 request file check interval
allow_eval true false refuses raw Lua (eval_lua); structured tools still work
allow_writes true false is read-only: set_property, call_function, console_command and eval_lua are refused
bridge_dir unset absolute path override for the request/response folder

Install the server and point an agent at it

Any MCP client works. The server finds the running game (an exe in a Binaries\Win64 folder with ue4ss\ beside it), so no path needs configuring; pass --game-dir or set UE_BRIDGE_GAME_DIR to pin one.

stdio (Claude Code, Claude Desktop, Cursor, Windsurf, Codex, Continue, ...):

{ "mcpServers": { "ue-bridge": { "command": "uvx", "args": ["ue-bridge"] } } }
claude mcp add ue-bridge -- uvx ue-bridge

HTTP (one long-running server, several clients): ue-bridge --http serves streamable-HTTP MCP on http://127.0.0.1:8930/mcp, loopback only.

claude mcp add --transport http ue-bridge http://127.0.0.1:8930/mcp

Shell, for scripts and for testing the channel:

ue-bridge status
ue-bridge hello
ue-bridge eval "return UEB.world()"
ue-bridge props first:PlayerController
ue-bridge types ^Narrative

Tools

Tool Does
bridge_status Game found, running, mod answering, mod version and permissions, round-trip time. Call first.
eval_lua(code, timeout) Any Lua chunk on the game thread. Whole UE4SS API plus the UEB helpers in scope; print output captured.
world_info World, player controller, pawn, game instance, game mode.
find_object(path) / find_objects(class, limit) Resolve one reference / list live instances of a class.
list_types(pattern, limit) Loaded reflected types matching a Lua pattern.
inspect_object(ref, include_super, pattern) Every reflected property with its value.
list_functions(ref) Every UFunction on the class chain.
get_property / set_property One property. set returns {previous, current}.
call_function(ref, fn, args) Call a UFunction with positional args.
console_command(cmd) Run a console command.
batch(calls) Several of the above in one round trip.
dump(kind) UE4SS dumpers: usmap, jmap, uht, cxx, actors, objects, static_meshes.

Every tool except eval_lua goes through the structured batch op, so they keep working when a user turns allow_eval off.

Object references: /Script/Pkg.Object (any full path), first:ShortClassName (first live instance), cdo:/Script/Pkg.Class (class default object).

Serialisation: UObjects become {"__object": fullname, "address": n}, FName/FString/FText become strings, TArray becomes a list (first 200), structs are walked through their reflected type including inherited fields. SoftObjectProperty values are skipped by default (reading one has hard-crashed a game inside UE4SS's own property reader).

Wire protocol (1)

request : {"id": str, "op": "hello"|"ping"|"eval"|"batch", "code": str, "calls": [ {op, ...} ]}
response: {"id", "ok": bool, "result", "output": [str], "error": str|null, "ms": int, "protocol": 1}

hello returns the mod's version, protocol and permissions; the server refuses to proceed on a protocol mismatch. Anything that can write a JSON file can be a client.

Failure modes

  • Request never picked up: no game running, or the mod is not installed or is disabled. Check for [UEBridge] ... ready in UE4SS.log.
  • Picked up, no response: the game thread is blocked (loading screen) or the request is long. dump uses a 600 s timeout for that reason. If the process is gone, the error names the in-flight operation from bridge\lastop.log and the newest crash report.
  • One request at a time. A request.json younger than 10 s is another client's; older is a leftover and is reclaimed.

Developing

uv venv --python 3.11 .venv
uv pip install --python .venv\Scripts\python.exe "mcp>=1.8,<2"
.venv\Scripts\python.exe -m ue_bridge status        # from the repo root
python tools/build-release.py                       # dist/UEBridge-<version>.zip

Edit ue4ss/UEBridge/scripts/main.lua, then ue-bridge eval "return UEB.reload()": the mod re-runs its source in place and retires the old poll loop, no relaunch.

MIT.

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

ue_bridge-1.0.0.tar.gz (21.2 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

ue_bridge-1.0.0-py3-none-any.whl (13.3 kB view details)

Uploaded Python 3

File details

Details for the file ue_bridge-1.0.0.tar.gz.

File metadata

  • Download URL: ue_bridge-1.0.0.tar.gz
  • Upload date:
  • Size: 21.2 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: uv/0.11.21 {"installer":{"name":"uv","version":"0.11.21","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":null,"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}

File hashes

Hashes for ue_bridge-1.0.0.tar.gz
Algorithm Hash digest
SHA256 7b975afeb351366f7564818cd33af36aca859d80e212ce4e389d8c2a68b389a5
MD5 1042d39d8d7448eb8ed86be9f52ba48f
BLAKE2b-256 0e00dc31515c36871eee130f8ad61081d69cfcc022e7013286a77d76398ad6aa

See more details on using hashes here.

File details

Details for the file ue_bridge-1.0.0-py3-none-any.whl.

File metadata

  • Download URL: ue_bridge-1.0.0-py3-none-any.whl
  • Upload date:
  • Size: 13.3 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: uv/0.11.21 {"installer":{"name":"uv","version":"0.11.21","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":null,"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}

File hashes

Hashes for ue_bridge-1.0.0-py3-none-any.whl
Algorithm Hash digest
SHA256 b4d66bab4d2b30af41e187d7ef4a58e4f78053afe12b350b662092a1885a7838
MD5 84c51b67645b4be487968aa46ea39c77
BLAKE2b-256 0e9baeee3f5660406fd0c73fd4b0b178942c86749a542ba936f59d5645586723

See more details on using hashes here.

Release history Release notifications | RSS feed

1.1.0

2 files

This release

1.0.0 This release

2 files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page