Skip to content

Releases

v2.36.0 — Unity 6.6 modernization and maintenance audit

Choose a tag to compare

@francoios francoios released this 06 Oct 05:42
9c84ff9

Companion to plugin v2.41.0. Released plugins keep working: features are negotiated through capabilities, and published tool schemas keep their required arguments.

🧭 Unity 6.6 modernization

  • Unity 6.6 workflows, multi-project agent routing, multiplayer orchestration (MPPM, ParrelSync) and observable editor queues.
  • Paginated test results, build workflows, request cancellation and response budgets.
  • Stricter editor discovery: a port is adopted only when its ping proves a Unity bridge (#39).

🔒 Security

  • unity_advanced_tool no longer runs core tools that change the editor (execute code, menu items, scripts, packages, builds, Undo...): call them directly so your client's per-tool approval applies. Read-only core tools are still proxied.
  • Malformed proxied tool names are rejected instead of reaching arbitrary local paths.

🛠 Fixes

  • Plugin-only tools no longer vanish from unity_list_advanced_tools after the first call, and undispatchable names are no longer advertised.
  • When another registered editor is busy, you are asked to choose instead of being routed to the only responsive one.
  • unity_testing_run_tests keeps the started job ID and honours its filter alias.
  • Terrain, animation, profiler, prefab and UMA arguments are translated to the keys the plugin reads (several were silently ignored); overwrite and limit options added.

⚡ Performance

  • Faster lookups in the advanced catalog, lighter test-job polling, queue status polls capped at 500 ms.
  • The npm package shrinks from 13.5 MB to about 107 kB.

📦 Install

npx anklebreaker-unity-mcp@latest

Verification

293/293 tests, CI green on Node 18, 20, 22 and 24 on Windows and Linux.

Full changelog: CHANGELOG.md

v2.35.6 — object-reference animation curves (2D sprite animation)

Choose a tag to compare

@francoios francoios released this 27 Jul 12:22
826af5c

Companion to plugin v2.39.5.

🎬 2D sprite animation now works through the MCP (thanks @VM233, #30)

Animating SpriteRenderer.m_Sprite requires an object-reference curve. unity_animation_set_clip_curve goes through AnimationCurve, which can only express float values — so sprite-frame animation had no route through the MCP at all, and had to be hand-written as .anim YAML. That's fragile across Unity versions and produced curve type is invalid import errors.

New unity_animation_set_object_reference_curve:

{
  "clipPath": "Assets/Anim/GreenLizardIdle.anim",
  "type": "SpriteRenderer",
  "propertyName": "m_Sprite",
  "keyframes": [
    { "time": 0,     "assetPath": "Assets/Art/lizard.png", "name": "lizard_0" },
    { "time": 0.083, "assetPath": "Assets/Art/lizard.png", "name": "lizard_1" }
  ]
}
  • Unity writes the binding itself (AnimationUtility.SetObjectReferenceCurve) — no hand-built YAML.
  • name picks a single Sprite sub-asset out of a sliced sprite sheet; type and propertyName default to SpriteRenderer / m_Sprite, so the common case is just clipPath + keyframes.
  • Fails closed: if any keyframe can't be resolved the whole call is rejected and lists which ones — a clip that silently animates to the wrong sprites is worse than an error.

unity_animation_clip_info now reports object-reference curves (objectReferenceCurves with binding path, property, type, and each keyframe's time + resolved asset path). A correct sprite clip previously reported curveCount: 0 and looked empty, so there was no way to verify a generated clip.

🧹 Changed

  • Advanced tier 268 → 269 tools (347 total), synced across the pinned tier test and manifest.json.

📦 Install

npx anklebreaker-unity-mcp@latest

Verification

60/60 tests, all four CI matrix jobs green. A real 3-frame sprite clip was built through the actual MCP tool, read back via clip_info, and force-reimported in Unity: 0 console errors, all sprite references resolved.

Full changelog: CHANGELOG.md

v2.35.5 — Unity error messages restored + fail-closed routing

Choose a tag to compare

@francoios francoios released this 24 Jul 23:07
cdbf899

Patch release from a 43-run audit of both repos (33 dimensions + 10 blind-spot dimensions, 168 agents, every CRITICAL/HIGH finding adversarially verified before it was acted on). Companion plugin: v2.39.4.

Recommended for all users.

🔍 Every Unity error message was being thrown away

The queue ticket carries the Unity-side exception in errorMessage, but the poller read statusData.error — a field that never exists on that shape. So every failure across all 337 routes collapsed to a generic "Queue processing failed". Agents got no diagnostic and typically retried the identical failing call — which, for a non-idempotent write, means doing it twice.

It was worse than it looked. Two other features detect older plugins by reading "Unknown API endpoint" out of that same error text:

  • advanced-tool did-you-mean suggestions
  • component_batch_wire graceful degrade

Both had been silently broken in production. All three are repaired by reading the right field.

Why the test suite never caught it: the mock bridge emitted the wrong field name too, so 59 passing tests were validating a fiction. The mock now mirrors the plugin's real wire shape exactly, and the assertion that accepted success:false as an acceptable substitute (letting the real message vanish unnoticed) now demands the verbatim text — and is proven to fail without the fix.

⚙️ Also fixed

  • A vanished project no longer redirects your writes to a different one. When an agent's selected Unity instance disappeared, the code cleared the selection and switched off the "you must select an instance" gate — so the same call fell through to the default port, which in any multi-project session is a different live Unity, reporting success the whole way. It now fails closed and asks you to re-select.
  • A transient hiccup no longer downgrades the whole session. Any lingering submit error (Unity not up yet, a domain reload longer than the retry window) permanently latched the connection into legacy mode — losing agent attribution, per-action undo grouping and read batching, with nothing to ever reset it. Only a definitive HTTP 404 now proves a plugin lacks queue mode.

➕ Added

Schema opt-ins for the plugin's new data-loss guards: unity_asset_delete → recursive / permanent; unity_scene_open and unity_scene_new → saveFirst / discardUnsavedChanges; unity_scene_save → path (required for a never-saved scene, and doubles as Save-As). Several of these previously dropped every parameter but path.

🧹 Changed

  • License declared correctly — package.json declared none and manifest.json said MIT, while the shipped LICENSE is the AnkleBreaker Open License v1.0.
  • manifest.json version was stale at 2.35.2 and is now synced.
  • A test that compared network arrival order for calls the code fires concurrently was replaced with one that checks the guarantee actually made (results[i] aligns with references[i]) — strictly stronger than what it replaced.

📦 Install

npx anklebreaker-unity-mcp@latest

Verification

60/60 tests, all four CI matrix jobs (ubuntu + windows × node 20 + 22) green, route registry 337 in sync, companion plugin compiles clean against a live Unity 6000.3.9f1 editor.

Full changelog: CHANGELOG.md

v2.35.4 — ProBuilder tools, per-action undo, lazy discovery & reliability

Choose a tag to compare

@francoios francoios released this 24 Jul 14:37
14d801c

Grouped release of all server work since v2.30.0 (the whole Development-Fable-Improvements line, now merged to main). Additive + hardening — every existing capability is preserved. Companion plugin: v2.39.3.

✨ New capabilities

  • ProBuilder tool suite — 14 unity_probuilder_* tools (create_shape, extrude/bevel/subdivide/delete/translate/flip faces, set_face_material, boolean CSG, combine, probuilderize, center_pivot, export_mesh) for building editable geometry straight from the agent.
  • Per-action / per-agent undo — unity_undo_last reverts the most recent MCP action as one step, or a specific agent's last action.
  • Three-level lazy tool discovery — unity_list_advanced_tools goes summary → category → single schema, so finding one tool costs ~1KB instead of a ~30KB dump; new search= and tool= lookups.
  • Compact-registry mode — UNITY_MCP_COMPACT_TOOLS=1 keeps all tools while fitting constrained clients (fixes the Codex-Desktop-on-Windows spawn ENAMETOOLONG / oversized-registry case).

⚡ Efficiency & correctness

  • Compact JSON by default — ~44% fewer tokens on large payloads (deep hierarchies, asset lists). UNITY_MCP_PRETTY_JSON=1 restores indentation.
  • isError flag on logical failures so clients stop reading errors as success; did-you-mean suggestions on unknown tool names.
  • Locale-safe numeric params — decimal-comma locales no longer silently drop float values.

🛡️ Reliability

  • Capability handshake — the server negotiates features on the plugin's protocolVersion and degrades gracefully across version drift (works with older plugins).
  • Queue duplicate-execution guard (transient poll errors during domain reload), play_mode false-negative recovery, component_batch_wire graceful degrade.
  • Protocol test harness + CI (mock bridge + MCP stdio client; 59 mock tests + a live suite) across ubuntu + windows / node 20 & 22.

📦 Install

npx anklebreaker-unity-mcp@latest

(or pin anklebreaker-unity-mcp@2.35.4)

🙏 Thanks

Community contributions forward-ported with credit: @D3vCrow (capability handshake, compact-JSON / isError / did-you-mean), @rcasaleiro (context-route fix). Bug reporters: @JESVN (constrained-client tool registry) and the battle-test / ProBuilder reporters whose reports drove the reliability + data-safety work.

Full changelog: CHANGELOG.md.

v2.30.0

Choose a tag to compare

@TakeruGrima TakeruGrima released this 04 Jun 14:56

Added

  • unity_screenshot_editor_window tool — capture any Editor window (Inspector, Project, Console, custom windows) to a PNG file. Unlike unity_screenshot_game / unity_screenshot_scene (which render a camera), it grabs the actual editor UI via the Win32 PrintWindow API, so it works even when the window is hidden behind others, without raising it or stealing focus. Windows editor only — returns a clear unsupported-platform error on macOS/Linux. Defaults to Assets/Screenshots/, accepts any user-chosen .png path; args window (required), path, maxDimension. Companion to the unity-mcp-plugin 2.32.0 change.

Publishing this release triggers the npm-publish workflow → npm publish --access public.

v2.29.0 — MPPM tools & Unity 6.5 instanceId

Choose a tag to compare

@jcornill jcornill released this 21 May 18:23
fa692fe

Grouped release of work since v2.28.2.

Added

  • MPPM virtual player & scenario tools — unity_mppm_list_players, unity_mppm_activate_player, unity_mppm_deactivate_player and unity_mppm_create_scenario. Companion to unity-mcp-plugin 2.31.0.

Changed

  • instanceId tool parameters declared as string — Unity 6.5 entity ids are 64-bit values that exceed JavaScript's safe-integer range; sent as JSON numbers they were rounded, breaking object-by-instanceId resolution. All 26 instanceId input schemas in editor-tools.js are now strings. Companion to unity-mcp-plugin 2.28.0. (#24)

See CHANGELOG.md for full detail.

v2.28.2 — Codex CLI compatibility (stdout hygiene)

Choose a tag to compare

@jcornill jcornill released this 22 Apr 15:06
66ff10c

Fixed

  • MCP JSON-RPC framing corrupted by debug logs on stdout — Two console.debug(...) call sites in src/unity-editor-bridge.js (queue submit log) and src/tool-tiers.js (lazy-load log) wrote diagnostic lines to stdout, which the MCP stdio transport reserves exclusively for JSON-RPC messages. Strict clients (Codex CLI) closed the transport on the first non-JSON chunk; lenient clients (Claude Desktop, Claude Code) tolerated it, which is why the bug escaped earlier detection. Both call sites now use console.error(...) so logs go to stderr.

Closes

  • #11 (Windows Codex transport closes after successful Unity MCP connect on read-only tool calls)

Full Changelog: v2.28.1...v2.28.2

v2.28.1 — fix npm publish workflow

Choose a tag to compare

@jcornill jcornill released this 02 Apr 18:02
e217700

Fixed

  • npm publish workflow — Added --allow-same-version to npm version command to prevent CI failure when package.json already matches the release tag

Full Changelog: https://github.com/AnkleBreaker-Studio/unity-mcp-server/blob/main/CHANGELOG.md

v2.26.0 — Test Runner & Compilation Errors

Choose a tag to compare

@jcornill jcornill released this 25 Mar 15:10
27ccdb7

What's New

Added

  • Unity Test Runner tools — unity_run_tests, unity_get_test_job, unity_list_tests for running and monitoring Unity tests via MCP — by @vatanaksoytezer
  • Compilation errors tool — unity_get_compilation_errors added to CORE_TOOLS tier — by @XuX26
  • Bridge functions — new bridge endpoints for testing and compilation error routes

Full Changelog: v2.25.0...v2.26.0

v2.25.0 — Parallel-Safe Instance Routing

Choose a tag to compare

@jcornill jcornill released this 12 Mar 11:47

Parallel-Safe Instance Routing for Multi-Agent Workflows

When multiple AI agents (e.g. Claude Cowork tasks) share the same MCP stdio process, unity_select_instance calls could overwrite each other's routing state, causing one agent's commands to be sent to the wrong Unity Editor.

What's new

  • Per-request port override — Each unity_* tool call can now include an optional port parameter that bypasses shared state entirely. The port is extracted by middleware before the tool handler runs, used for routing, then cleaned from the args. Safe because MCP stdio transport processes requests sequentially.

  • Dynamic schema injection — The port parameter is automatically injected into every unity_* tool schema (except unity_list_instances, unity_select_instance, and unity_hub_*) in the ListTools handler, so AI assistants see it as a legitimate parameter and pass it consistently.

  • Enhanced unity_select_instance response — Now returns explicit routing instructions telling the AI to include port in all subsequent calls for parallel safety.

Files changed

  • src/index.js — CallTool middleware (port extraction, override, cleanup) + ListTools schema injection
  • src/instance-discovery.js — setPortOverride() / clearPortOverride() / updated getActiveBridgeUrl()
  • src/tools/instance-tools.js — Enhanced select_instance description and response

No plugin update required

This is a server-side change only. The Unity Editor plugin does not need to be updated.