chore: bump version to 9.4.6#754
Merged
github-actions[bot] merged 69 commits intomainfrom Feb 15, 2026
Merged
Conversation
…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>
… and improve error handling
- 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>
…ol visibility control
* 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
…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
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Automated version bump to 9.4.6.