A Warcraft III map editor designed to be driven by Claude Code as much as by hand.
wc3-forge is a native Warcraft III map editor (Go + TypeScript, single Wails binary) with an embedded MCP server. The GUI and Claude Code talk to the same editor session — every edit you make by hand can also be made by an agent, and vice versa, and they share one undo stack.
Status: pre-alpha. Read-only viewer is solid; editing surfaces (position / rotation / scale, map info, selection, view, camera, history) are wired through both the GUI and MCP. Object Editor is read-only.
Three steps. Tested on Windows; should work on macOS/Linux once you replace the paths.
1. Install wc3-forge. Grab a release, or build from source:
git clone https://github.com/StephenSHorton/wc3-forge
cd wc3-forge
wails build
The binary lands at build/bin/wc3-forge.exe.
2. Build + register the MCP server. It lives in this repo at mcp/:
cd mcp
npm install
npm run build
claude mcp add wc3-forge --scope user -- node "$PWD\dist\index.js"
(--scope must come before -- or it gets forwarded to node.) Verify with claude mcp list — wc3-forge should show ✓ Connected.
3. Launch wc3-forge and talk to it. Open the editor (build/bin/wc3-forge.exe), load a map (File → Open Map…), then in Claude Code:
What's the current map?
> map_status → "Fountain of Manipulation", 184 units, 2031 doodads
Move the gold mine at position 0,0 to where the player 1 start location is.
> units_list → finds creation_number 17 (typeid 'ngol' at -512, 384, 0)
> camera_set_view → pans to confirm
> units_move → applied
Save it.
> map_save → ok
The Agent Console (Ctrl+` in the editor) streams every bridge call live — bridge_ping, units_move, map_save, durations, params, results. Use it to watch what an agent is doing in real time.
| Surface | Tools |
|---|---|
| Map lifecycle | map_open, map_close, map_status, map_save |
| Map info | map_info_get, map_info_set (name, author, description, suggested players, lua flag) |
| Placed units | units_list, units_get, units_move, units_rotate, units_scale |
| Placed doodads | doodads_list, doodads_get, doodads_move, doodads_rotate, doodads_scale |
| Selection | selection_get, selection_set, selection_clear |
| View + camera | view_set_mode, view_set_doodad_category_visible, camera_set_view |
| Window | window_set_title (label your instance so parallel agents are distinguishable) |
| History | history_undo, history_redo, history_list, history_begin_group, history_end_group |
| Unit definitions | objects_units_list, objects_units_get, objects_units_fields_meta (read-only) |
| Multi-instance | sessions_list, session_select (point Claude at one of several running wc3-forges) |
All entity tools speak game coordinates (origin at map center, units = WC3 world units). All mutations flow through the same history stack the GUI uses, so Ctrl+Z in the editor undoes Claude's edits and vice versa.
You can run several wc3-forges at once — the bridge picks an unused port and each writes its own per-pid lockfile at ~/.wc3-forge/mcp/<pid>.lock. sessions_list enumerates them; session_select pins subsequent tool calls to one. Use window_set_title to label them so parallel agents can tell instances apart at a glance.
wails build
build/bin/wc3-forge.exe is the output. The postBuildHooks entry in wails.json copies the vendored CASC DLLs next to the binary so it's self-contained.
go:embed.forge.Session and emit the same change events. Adding a feature usually means adding it on both surfaces at once.WC3FORGE_WC3_PATH to point at a non-default install.session_select to pin, the OS window title carries the PID + a free-form agent label.JSON-RPC 2.0 over TCP, NDJSON-framed on 127.0.0.1. Per-pid lockfile at ~/.wc3-forge/mcp/<pid>.lock (override with WC3FORGE_MCP_LOCK_DIR). Every request carries params._token matching the lockfile token.
wc3-forge is an independent Go reimplementation that draws heavily on HiveWE (Stijn Herfst, GPL-3.0) for WC3 file-format details, terrain/cliff/water rendering logic, and the MCP bridge wire contract. Source files note specific ports inline; see CREDITS.md for the full attribution.
GPL-3.0-or-later. See LICENSE.