You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
The MCP Server window's Tool Exposure row now includes a settings button that opens the full Tool Exposure window with the active core or full profile pre-selected.
get_test_job now reports possiblyStuck, the stalled phase, inactivity duration, and current test when Test Runner callbacks stop. Runner startup uses a 30-second threshold while a known running test gets 120 seconds to avoid premature warnings for normal long tests.
execute_code gained a skip_refresh option that bypasses the pre-compile AssetDatabase.Refresh + wait-for-ready. Use it for read-only inspection snippets or during a live Play Mode session you must not disturb: the default refresh can trigger an import/domain reload (from your own or another actor's pending changes in a shared editor) that wipes Play Mode runtime state. When skipped, external file edits since the last compile are not picked up.
Screenshot captures now auto-fall back to a file when the payload would exceed a safe transport size, instead of emitting an oversized base64 payload that reliably drops the client socket. The threshold is measured on the raw PNG (512 KB) so the ~1.33x base64 expansion still lands under the drop point; capture_multiview's default (inline) path is covered too -- it spills all frames to files when their combined size is too large. The response carries the same { path, bytes, fell_back_to_file: true } shape as an explicit save_to_file. Small captures are still returned inline; save_to_file remains an explicit override.
Added dedicated capability tools for asset import settings, dependency/broken-reference inspection, mesh and material inspection, 2D/3D physics queries, particle preview control, project settings, Undo/Redo, component batch operations, lighting, and reflection-based PlayableDirector evaluation. Reverse dependency scans are bounded and yield between batches; mutating setters validate the whole request before writing.
Changed
Project Skills now manage only a delimited Funplay block inside shared AGENTS.md and CLAUDE.md files, preserving all hand-authored content outside it. Exact legacy generated files migrate automatically; edited legacy single-marker files are left unchanged with an explicit migration error instead of being overwritten.
Fixed
Built-in tools that accept a GameObject target now consistently resolve names, hierarchy paths, and instance IDs through ObjectsHelper, including inactive objects and additively loaded scenes. get_console_logs also supports an opt-in include_stack_trace argument with independently capped, normalized stack output.
MCPBrokerTransportTests (8 of the package's 61 EditMode tests) hardcoded the broker source path as Assets/unity-mcp/Editor/MCP/Server/Broker/keepalive-broker.cs.txt, which only exists when this repo's own source is checked out directly under Assets/ -- it always failed in any project that installs the package properly (embedded, git, or registry), since there the source lives under Packages/<name> or Library/PackageCache/<name>@version. Both the filesystem lookup (ResolveBrokerSourcePath, used by 7 tests via CreateBrokerPaths) and the AssetDatabase lookup (BrokerSource_IsVisibleToAssetDatabaseForUnityPackageExport) now resolve through PackageInfo.FindForAssembly first and only fall back to the old Assets/unity-mcp path when the assembly isn't part of a package (preserving this repo's own dev-checkout layout).
Tool argument parsing no longer silently coerces a malformed value to default(T) / Vector3.zero and runs with it. A missing required value now returns MISSING_PARAM; a value that cannot be parsed into its parameter type (a non-numeric int, a two-component 'x,y' passed where an 'x,y,z' vector is expected, an out-of-range enum, etc.) returns INVALID_PARAM with the parameter name, provided value, and expected format. This applies to reflected and manually registered tools, and set_transform / create_primitive validate vectors before modifying the scene.
Several Profiler/memory tools returned error/precondition conditions (get_object_memory with an empty target, memory_list_snapshots with no snapshots, get_frame_timing with no timing available, frame_debugger_get_events with no events) as bare human-readable strings on the success channel, so callers -- and the plugin's own IsError() check -- treated the failure as success. They now return structured { success: false, code } errors.
Every tool response is now uniformly parseable as { success, ... }. Legacy tools that returned a bare human-readable string on success (while only errors were structured JSON) are wrapped in { success: true, message } by the result serializer. Image data URIs and strings that are already a { success: ... } envelope pass through untouched, so screenshots still render as images and error envelopes are never double-wrapped.