Skip to content

chore: bump version to 9.4.6#754

Merged
github-actions[bot] merged 69 commits intomainfrom
release/v9.4.6
Feb 15, 2026
Merged

chore: bump version to 9.4.6#754
github-actions[bot] merged 69 commits intomainfrom
release/v9.4.6

Conversation

@github-actions
Copy link
Contributor

Automated version bump to 9.4.6.

dsarno and others added 30 commits February 5, 2026 11:57
…on Windows

On Windows machines where localhost resolves to ::1 (IPv6), the server
and Unity plugin could end up on different address families, causing
WinError 64 disconnects. Hardcode 127.0.0.1 in all default bind/connect
paths to eliminate the ambiguity. Users can still explicitly set localhost
if desired.

Addresses #672

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Address review feedback:
- Split bind-only fallback so 0.0.0.0 maps to 127.0.0.1 and :: maps
  to ::1, preserving address family for IPv6-only setups
- Add tests for HTTP host/URL defaults and env var overrides in main.py
- Fix remaining localhost reference in epilog help text

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
On Windows, domain reload orphans the OS socket (managed C# reference is
lost) but ExclusiveAddressUse=false + ReuseAddress=true allowed new
listeners to bind alongside the orphaned one. Incoming connections then
round-robin between live and dead listeners, causing WELCOME hangs.

Changes:
- Register AssemblyReloadEvents.beforeAssemblyReload to call Stop()
  before managed state is destroyed (root cause fix)
- Remove ExclusiveAddressUse=false on Windows
- Restrict ReuseAddress=true to macOS only (where it is needed)
- Add listener.Server.Dispose() in Stop() for immediate socket release
- Increase listener task wait from 100ms to 2000ms
- Widen retry window (10 attempts, 200ms) for post-reload rebind

Addresses #692

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
…89609549

chore: sync main (v9.4.4) into beta
Fixes #709

- Remove logic in ToolDiscoveryService.EnsurePreferenceInitialized
  that forced built-in tools to be re-enabled on every Unity launch
- Add ReregisterToolsAsync() to IMcpTransportClient for dynamic tool
  list updates when toggles change in the UI
- Implement tool reregistration in WebSocketTransportClient
- Add ReregisterToolsAsync() to McpToolsSection to trigger updates
  when tool toggles are flipped
- Add unit tests for ToolDiscoveryService preference persistence

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- Pass user_id to execute_tool for user-scoped tool lookups
- Update get_tool_definition to support user-scoped queries

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
)

Comprehensive fix for Issue #709:
- Unity tools stay disabled across restarts (EditorPrefs persistence)
- Client tool lists filter out disabled Unity tools (HTTP mode only)
- Script helper tools follow their target tool's enabled state
- Added graceful error fallback when tool lookup fails

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
* Update for UI-based batch execution

* Add template notice
* Update for UI-based batch execution

* [fix and mod] Bug fix and batch request customization

1. Fix the bug where for certain MacOS user (like me), the GitURLoverride is set to the unity-mcp folder rather than the unity-mcp/Server
2. Customize batch for it to take 0-100 requests. Tested on MacOS.
…8523068

chore: update Unity package to beta version 9.4.5-beta.2
* Fix execute_custom_tool bypassed when unity_instance is specified

Move execute_custom_tool handling outside the if/else block so it's
executed regardless of whether unity_instance is provided.

Previously, when unity_instance was specified, the code would take the
if branch (match by hash/name) and return 404 if not found,
but the execute_custom_tool block was only in the else branch,
causing custom tools to fall through to PluginHub.send_command.

Fixes #649

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

* Handle empty sessions gracefully when selecting default session

When no active sessions exist, next(iter(sessions.sessions.keys()))
raises StopIteration. Catch this exception and set session_id
and session_details to None, allowing execute_custom_tool guard to work
as intended.

Suggested by Sourcery review.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

* Move default session selection into execute_custom_tool block

Per Sourcery review: moving the default session selection
inside execute_custom_tool ensures the empty sessions guard works
correctly. If sessions becomes empty between the initial check
and this code, the StopIteration will now properly trigger the
session validation guard and return a 503 error.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

* chore: remove unintended uv.lock changes from PR

* 优化 execute_custom_tool 逻辑以优先使用可用会话

---------

Co-authored-by: whatevertogo <whatevertogo@users.noreply.github.com>
Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
…8647435

chore: update Unity package to beta version 9.4.5-beta.3
* Animation First PR

* Update ClipPresets to take account of local offset

* Update MCPForUnity/Editor/Tools/Animation/ClipCreate.cs

Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>

* Update for AI fix

* Update ClipPresets.cs

---------

Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
…8674346

chore: update Unity package to beta version 9.4.5-beta.4
dsarno and others added 28 commits February 12, 2026 14:32
…hub.com/whatevertogo/unity-mcp into fix/723-rebased

# Conflicts:
#	MCPForUnity/Editor/Services/Transport/TransportManager.cs
fix: preserve tool toggle state and filter tools in client listings (rebased #723)
…6866824

chore: update Unity package to beta version 9.4.5-beta.7
fix: accept JSON strings for list parameters in manage_gameobject and manage_texture
…6889272

chore: update Unity package to beta version 9.4.5-beta.8
Unity renames AnimationClip objects to match the asset filename on
import. The test was setting name="InfoClip" but saving to a path
with a GUID suffix, causing a name mismatch assertion failure.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
fix(test): align clip name with asset filename in ClipGetInfo test
* Add Cline configurator and auto-select server channel by package version

* Clean up Cline configurator branch: remove useBetaServer param and whitespace noise

- Remove deprecated `useBetaServer` parameter from GetBetaServerFromArgs/List thread-safe overloads
- Strip whitespace-only reformatting from MCPForUnityEditorWindow.cs, keeping only real changes
- Remove stale EditorPrefKeys.UseBetaServer references from CodexConfigHelperTests

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

---------

Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
…8876866

chore: update Unity package to beta version 9.4.5-beta.9
batch_execute was bypassing disabled-tool checks by calling
CommandRegistry.InvokeCommandAsync directly. Add the same
IsToolEnabled guard that TransportCommandDispatcher uses.

Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
…71016583

chore: update Unity package to beta version 9.4.5-beta.10
Trim(/) was stripping the trailing slash before the StartsWith check,
so Assets/ became Assets which did not match Assets/. Now handles
the bare Assets case explicitly.

Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
…71379847

chore: update Unity package to beta version 9.4.5-beta.11
…ath (#746)

Path.IsPathRooted throws ArgumentException when the package source is a
remote URL containing characters illegal in file paths. Catch the
exception and return false since remote URLs are not local paths.

Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
…73706794

chore: update Unity package to beta version 9.4.5-beta.12
* fix: extract CSharpLexer and fix delimiter checking for C# string variants

The ManageScript tool had 7 copy-pasted inline lexers that did not handle
verbatim strings (@""), interpolated strings ($""), or raw string literals,
causing false unbalanced braces errors on valid C# code like $"Score: {score}".

Extract a shared CSharpLexer struct that correctly handles all C# string/comment
types, rewrite all callers to use it, and remove redundant CheckScopedBalance
and ValidateBasicStructure methods. Fix IndexOfClassToken to skip matches inside
strings and comments. Fix anchor_insert to use depth-based best-match selection
instead of picking the first regex match (which selected method-level braces
over class-level ones).

On the Python side, add _is_in_string_context and _brace_depth_at_positions
helpers, and rewrite _find_best_closing_brace_match with depth-based scoring
that filters out matches inside strings/comments.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

* refactor: consolidate duplicate Python C# lexer into shared _iter_csharp_tokens generator

_is_in_string_context and _brace_depth_at_positions duplicated ~150 lines
of the same C# string/comment lexer. Extract a shared generator and rewrite
both as thin wrappers (-59 net lines, same behavior).

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

* fix: handle interpolated raw strings and make anchor ops use best-match

1. Add """...""" and $"""...""" (C# 11 interpolated raw string)
   support to both C# CSharpLexer and Python _iter_csharp_tokens.
   Dollar count determines interpolation threshold (N dollars = N
   consecutive braces to open an interpolation hole).

2. Make anchor_delete and anchor_replace use FindBestAnchorMatch
   (same as anchor_insert) instead of rx.Match for consistent
   target selection when multiple anchors match.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

* fix: guard unterminated comment overshoot and filter on brace position

1. Guard _pos += 2 after /* comment scanning in both
   SkipInterpolatedStringBody and SkipInterpolatedRawStringBody —
   only advance past */ when the terminator was actually found,
   preventing overshoot past _end on unterminated comments.

2. Filter _find_best_closing_brace_match on the actual }
   position rather than m.start() (which points at leading
   whitespace for patterns like ^\s*}\s*$).

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

---------

Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
…74612138

chore: update Unity package to beta version 9.4.5-beta.13
* Harden HTTP defaults and improve stop-server fallback

* Tighten toggle update behavior and IPv6 loopback coverage

* Remove external scan reference from README security section

* Improve host parsing and local URL policy reuse
…07780929

chore: update Unity package to beta version 9.4.5-beta.14
@github-actions github-actions bot merged commit f26f389 into main Feb 15, 2026
@github-actions github-actions bot deleted the release/v9.4.6 branch February 15, 2026 16:33
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

5 participants