Skip to content

chore: bump version to 9.4.4#720

Merged
github-actions[bot] merged 39 commits intomainfrom
release/v9.4.4
Feb 11, 2026
Merged

chore: bump version to 9.4.4#720
github-actions[bot] merged 39 commits intomainfrom
release/v9.4.4

Conversation

@github-actions
Copy link
Contributor

Automated version bump to 9.4.4.

dsarno and others added 30 commits February 1, 2026 08:16
Updated the Git URL for the MCPForUnity package to include the branch name.
…rver (#664) (#667)

* Fix Git URL in README for package installation

Updated the Git URL for adding the package to include the branch name.

* fix: Clean up Claude Code config from all scopes to prevent stale config conflicts (#664)

- Add RemoveFromAllScopes helper to remove from local/user/project scopes
- Use explicit --scope local when registering
- Update manual snippets to show multi-scope cleanup
- Handle legacy 'unityMCP' naming in all scopes

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

* fix: Make Claude Code status check thread-safe (#664)

The background thread status check was accessing main-thread-only Unity
APIs (Application.platform, EditorPrefs via HttpEndpointUtility and
AssetPathUtility), causing "GetString can only be called from main thread"
errors.

Now all main-thread-only values are captured before Task.Run() and passed
as parameters to CheckStatusWithProjectDir().

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

* fix: Persist client dropdown selection and remove dead IO code

- Remember last selected client in EditorPrefs so it restores on window
  reopen (prevents hiding config issues by defaulting to first client)
- Remove dead Outbound class, _outbox BlockingCollection, and writer
  thread that was never used (nothing ever enqueued to outbox)
- Keep only failure IO logs, remove verbose success logging

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

* feat: Auto-detect beta package to enable UseBetaServer + workflow updates

- Add IsPreReleaseVersion() helper to detect beta/alpha/rc package versions
- UseBetaServer now defaults to true only for prerelease package versions
- Main branch users get false default, beta branch users get true default
- Update beta-release.yml to set Unity package version with -beta.1 suffix
- Update release.yml to merge beta → main and strip beta suffix
- Fix CodexConfigHelperTests to explicitly set UseBetaServer for determinism
- Use EditorConfigurationCache consistently for UseBetaServer access

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

* fix: Address code review feedback for thread-safety and validation

- Add thread-safe overloads for GetBetaServerFromArgs/List that accept
  pre-captured useBetaServer and gitUrlOverride parameters
- Use EditorConfigurationCache.SetUseBetaServer() in McpAdvancedSection
  for atomic cache + EditorPrefs update
- Add semver validation guard in beta-release.yml before version arithmetic
- Add semver validation guard in release.yml after stripping prerelease suffix

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

* fix: Complete thread-safety for GetBetaServerFromArgs overloads

- Add packageSource parameter to thread-safe overloads to avoid calling
  GetMcpServerPackageSource() (which uses EditorPrefs) from background threads
- Apply quoteFromPath logic to gitUrlOverride and packageSource paths to
  handle local paths with spaces correctly

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

* fix: Patch legacy connection pool in transport tests to prevent real Unity discovery

The auto-select tests were failing because they only patched PluginHub
but not the fallback legacy connection pool discovery. When PluginHub
returns no results, the middleware falls back to discovering instances
via get_unity_connection_pool(), which found the real running Unity.

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

---------

Co-authored-by: Claude Opus 4.5 <noreply@anthropic.com>
- Replace direct push with PR creation to bypass branch protection rules
- Add bot check to both jobs to prevent loops and double-publish
- Remove needs dependency so PyPI publish runs in parallel
- Simplify by not auto-merging the version PR

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Co-authored-by: Claude Opus 4.5 <noreply@anthropic.com>
…4965734

chore: update Unity package to beta version 9.4.0-beta.1
…#671)

* fix: Use beta server args for Claude Code registration

Claude Code registration was still using gitUrl directly instead of
GetBetaServerFromArgs(), meaning the beta server toggle had no effect
on registration. Now uses GetBetaServerFromArgs(quoteFromPath: true)
to properly generate --prerelease args for beta users.

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

* fix: EditorPrefs Manager shows 'Unset' for keys that haven't been set

- Show "Unset. Default: [value]" for EditorPrefs that haven't been explicitly set
- Disable value field and save button for unset items (grayed out at 60% opacity)
- Fix search filter bug where reloading window showed filtered results with empty search field

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

* fix: Claude Code status check now accounts for beta server mode

The version validation was comparing the registered package source
(mcpforunityserver>=0.0.0a0 for beta) against the exact package version
(mcpforunityserver==9.4.0-beta.1), causing false "Incorrect Path" status.

Now both CheckStatus paths (main thread and background thread) use the
same logic that considers:
- Explicit GitUrlOverride
- UseBetaServer setting (with dynamic default for prerelease packages)
- Standard pinned version as fallback

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

---------

Co-authored-by: Claude Opus 4.5 <noreply@anthropic.com>
* Initial Upload for Skills

* Update unity-mcp-skill/SKILL.md

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

* Refine language in Unity-MCP Operator Guide

Updated wording for clarity and consistency in the guide.

---------

Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
* fix: beta workflow no longer auto-bumps minor version

Changes to beta-release.yml:
- Beta now bumps patch instead of minor (9.3.1 → 9.3.2-beta.1)
- Allows patch releases without being forced into minor bumps
- Increment beta number if already a beta version

Changes to release.yml:
- Added "none" bump option to release beta version as-is
- Added version status display showing main/beta versions and
  what the release version will be

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

* chore: remove redundant β character from version badge

The version string now includes "-beta.N" suffix, making the
separate β indicator redundant.

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

* fix: improve version consistency in release workflows

beta-release.yml:
- Changed from already_beta to needs_update flag
- Only skip updates when computed version matches current
- PyPI versioning now detects existing prereleases and keeps
  the same base version instead of always bumping patch

release.yml:
- Preview step outputs stripped_version to GITHUB_OUTPUT
- Compute step uses previewed value for "none" bump option
- Added sanity check warning if versions diverge unexpectedly

This ensures the released version matches what was shown to the
user and prevents unnecessary patch bumps on consecutive beta runs.

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

---------

Co-authored-by: Claude Opus 4.5 <noreply@anthropic.com>
Co-authored-by: GitHub Actions <actions@github.com>
chore: sync main (v9.4.0) into beta
Added --no-delete-branch flag to gh pr merge commands in the
sync_beta job. This prevents GitHub's auto-delete feature from
removing the main branch when the sync PR (main -> beta) merges.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
fix: prevent main branch deletion in sync_beta step
* fix: speed up Claude Code config check by reading JSON directly

Instead of running `claude mcp list` (15+ seconds due to health checks),
read the config directly from ~/.claude.json (instant).

Changes:
- Add ReadClaudeCodeConfig() to parse Claude's JSON config file
- Walk up directory tree to find config at parent directories
- Handle duplicate path entries (forward/backslash variants)
- Add beta/stable version mismatch detection with clear messages
- Add IsBetaPackageSource() to detect PyPI beta versions and prerelease ranges
- Change button label from "Register" to "Configure" for consistency

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

* fix: speed up Claude Code config check by reading JSON directly

Instead of running `claude mcp list` (15+ seconds due to health checks),
read the config directly from ~/.claude.json (instant).

Changes:
- Add ReadClaudeCodeConfig() to parse Claude's JSON config file
- Walk up directory tree to find config at parent directories
- Handle duplicate path entries (forward/backslash variants)
- Add beta/stable version mismatch detection with clear messages
- Add IsBetaPackageSource() to detect PyPI beta versions and prerelease ranges
- Change button label from "Register" to "Configure" for consistency
- Refresh client status when switching to Connect tab or toggling beta mode

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

* feat: add VersionMismatch status for Claude Code config detection

- Add McpStatus.VersionMismatch enum value for version mismatch cases
- Show "Version Mismatch" with yellow warning indicator instead of "Error"
- Use VersionMismatch for beta/stable package source mismatches
- Keep Error status for transport mismatches and general errors

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

* feat: add version mismatch warning banner in Server section

- Add version-mismatch-warning banner to McpConnectionSection.uxml
- Add UpdateVersionMismatchWarning method to show/hide the banner
- Fire OnClientConfigMismatch event when VersionMismatch status detected
- Wire up event in main window to update the warning banner
- Store mismatch details in configStatus for both Error and VersionMismatch

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

* fix: simplify version mismatch messages for non-technical users

Before: "Beta/stable mismatch: registered with beta 'mcpforunityserver>=0.0.0a0' but plugin is stable 'mcpforunityserver==9.4.0'."

After: "Configured for beta server, but 'Use Beta Server' is disabled in Advanced settings."

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

* fix: address PR review feedback

- Treat missing ~/.claude.json as "not configured" instead of error
  (distinguishes "no Claude Code installed" from actual read failures)
- Handle --from=VALUE format in ExtractPackageSourceFromConfig
  (in addition to existing --from VALUE format)

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

* feat: add beta/stable version mismatch detection to all JSON-based clients

- Move GetExpectedPackageSourceForValidation() and IsBetaPackageSource()
  to base class so all configurators can use them
- Update JsonFileMcpConfigurator.CheckStatus() to use beta-aware comparison
- Show VersionMismatch status with clear messaging for Claude Desktop,
  Cursor, Windsurf, VS Code, and other JSON-based clients
- Auto-rewrite still attempts to fix mismatches automatically

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

* fix: add beta-aware validation to CodexMcpConfigurator

CodexMcpConfigurator was still using the non-beta-aware package source
comparison. Now uses GetExpectedPackageSourceForValidation() and shows
VersionMismatch status with clear messaging like other configurators.

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

---------

Co-authored-by: Claude Opus 4.5 <noreply@anthropic.com>
Co-authored-by: GitHub Actions <actions@github.com>
…d arrays (#690)

* fix(run_tests): support snake_case params and handle double-serialized arrays

The MCP tool schema defines filter parameters in snake_case (test_names,
group_names, etc.) but GetFilterOptions() only checked camelCase keys,
causing test filtering to silently fail — all tests would run instead of
the filtered subset.

Additionally, some MCP clients serialize array parameters as a stringified
JSON array inside an outer array (e.g. ["[\"name1\"]"]), which was not
handled by ParseStringArray().

Changes:
- Add snake_case fallback to all ParseStringArray calls in RunTests.cs
- Handle stringified JSON arrays in String token branch
- Handle double-serialized arrays in Array token branch
- Handle nested arrays ([[name1, name2]]) in Array token branch
- Add snake_case fallback for include_details/include_failed_tests in
  both RunTests.cs and GetTestJob.cs

Fixes #689

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

* refactor: extract GetParam and CoerceStringArray into ParamCoercion

Address code review feedback:
- Extract snake_case/camelCase param lookup into ParamCoercion.GetParam()
- Extract string array coercion (with double-serialization handling) into
  ParamCoercion.CoerceStringArray()
- Narrow catch clauses from bare catch to JsonException
- Add explicit comment clarifying nested array unwrapping limitation

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

* refactor: move CoerceStringArray to ToolParams and use GetRaw for snake_case fallback

Remove GetParam from ParamCoercion — ToolParams.GetRaw() already handles
snake_case/camelCase fallback via StringCaseUtility. Move CoerceStringArray
into ToolParams as GetStringArray() to centralize parameter handling.
Update RunTests and GetTestJob to use ToolParams instead.

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

---------

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

* fix: remove vestigial find/component params from manage_gameobject tool

The manage_gameobject tool retained parameters (search_term, find_all,
search_in_children, search_inactive, component_name, page_size, cursor,
max_components, include_properties, includeNonPublicSerialized) from
when it was a monolith tool. These params now belong to the separate
find_gameobjects tool, manage_components tool, and gameobject_components
resource.

Their presence on manage_gameobject caused LLMs to hallucinate
non-existent actions (e.g. action="find", action="get_components"),
leading to ~46 failed tool calls in a single session.

Also tightens search_method Literal to only values relevant for target
resolution (by_id, by_name, by_path) and improves the tool description
to explicitly cross-reference the correct tools and resources.

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

* fix: update search_method Literal and docstring per review

Expand search_method to include by_tag, by_layer, by_component and
clarify that Unity infers the method when omitted.

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

---------

Co-authored-by: HivemindOverlord <80588752+HivemindOverlord@users.noreply.github.com>
Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
Co-authored-by: GitHub Actions <actions@github.com>
* feat: auto-merge version bump PRs in beta release workflow

Add auto-merge step for version bump PRs created during beta releases.
After creating the PR, enable auto-merge and poll for up to 2 minutes
for merge completion. If auto-merge fails, attempt direct merge. Add
cleanup step to delete the version bump branch after workflow completes.

* Simplify version bump PR merge in beta release workflow

* fix: simplify sync PR merge in release workflow

* fix: add --auto flag to PR merge commands in release workflows

* fix: set pr_number output for existing version bump PRs
Co-authored-by: GitHub Actions <actions@github.com>
Co-authored-by: GitHub Actions <actions@github.com>
…6154473

chore: update Unity package to beta version 9.4.1-beta.5
1. Some fixes I made during a very comprehensive scene generation, including VFX generating magenta due to lack of renderer material
2. I put the skills right in the .claude now, so us (developers who actually pull this repo) can directly use it. I still keep the skills under the parent folder in case users wants to download it.
…3152004

chore: update Unity package to beta version 9.4.1-beta.6
…713)

* fix: make release sync to beta deterministic and bump next beta version

* feat: restore client persistence and update notifications

* chore: address reviewer nits in sync workflow and update check
@github-actions github-actions bot merged commit c4393b0 into main Feb 11, 2026
@github-actions github-actions bot deleted the release/v9.4.4 branch February 11, 2026 01:51
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.

6 participants