-
Notifications
You must be signed in to change notification settings - Fork 569
Support GitHub Copilot in VSCode Insiders + robustness improvements and bug fixes #425
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Support GitHub Copilot in VSCode Insiders + robustness improvements and bug fixes #425
Conversation
…ng and boolean coercion
WalkthroughAdds a VS Code Insiders MCP configurator and Unity .meta; centralizes UV executable path reconstruction; improves pyproject.toml discovery by searching ancestor directories; adds hash→project mapping and uses it in project resolution; introduces a shared coerce_bool utility used by several tool handlers; awaits one async script read; and updates configurator documentation. Changes
Estimated code review effort🎯 3 (Moderate) | ⏱️ ~25 minutes
Possibly related issues
Possibly related PRs
Suggested reviewers
Poem
Pre-merge checks and finishing touches❌ Failed checks (1 warning)
✅ Passed checks (2 passed)
✨ Finishing touches
🧪 Generate unit tests (beta)
📜 Recent review detailsConfiguration used: CodeRabbit UI Review profile: CHILL Plan: Pro 📒 Files selected for processing (1)
🚧 Files skipped from review as they are similar to previous changes (1)
Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. Comment |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Actionable comments posted: 1
🧹 Nitpick comments (3)
Server/src/core/telemetry.py (1)
51-61: Ancestor pyproject discovery looks solid; consider simplifying the error path and narrowing thetryscopeThe parent-walk to find
pyproject.tomlis a good robustness improvement and should behave well across layouts. One minor clean-up:FileNotFoundErroris raised at Line 59 only to be immediately caught by the surroundingexcept Exceptionand converted to"unknown". You could instead:
- Return
"unknown"(or log + return) whenpyproject_path is Nonebefore entering thetrythat does file I/O/parsing, and- Restrict the inner
try/excepttoopen()+tomli.load()+ dict access.This avoids using exceptions for local control flow, keeps the search logic outside the broad
except, and should clear the Ruff TRY301/TRY003 hints without changing behavior.Server/src/services/custom_tool_service.py (2)
262-275: Duplicate_safe_responsedefinitions can be collapsed
_safe_responseis defined twice with identical bodies (lines 262-268 and 269-274). The second definition simply overwrites the first, so it’s harmless but adds noise.You can safely drop one of the definitions to keep the class slimmer:
- def _safe_response(self, response): - if isinstance(response, dict): - return response - if response is None: - return None - return {"message": str(response)} - def _safe_response(self, response): if isinstance(response, dict): return response if response is None: return None return {"message": str(response)}
240-260: Unreachable second dict-handling branch in_normalize_responseAfter the early
if isinstance(response, dict): return MCPResponse(...)at lines 231-238, the laterif isinstance(response, dict): ...block at lines 245-255 is never reached. This looks like a leftover from an earlier refactor.Consider simplifying
_normalize_responseto a single dict-handling path to reduce cognitive load and avoid future confusion:def _normalize_response(self, response) -> MCPResponse: if isinstance(response, MCPResponse): return response - if isinstance(response, dict): - return MCPResponse( - success=response.get("success", True), - message=response.get("message"), - error=response.get("error"), - data=response.get( - "data", response) if "data" not in response else response["data"], - ) - - success = True - message = None - error = None - data = None - - if isinstance(response, dict): - success = response.get("success", True) - if "_mcp_status" in response and response["_mcp_status"] == "error": - success = False - message = str(response.get("message")) if response.get( - "message") else None - error = str(response.get("error")) if response.get( - "error") else None - data = response.get("data") - if "success" not in response and "_mcp_status" not in response: - data = response - else: - success = False - message = str(response) - - return MCPResponse(success=success, message=message, error=error, data=data) + if isinstance(response, dict): + success = response.get("success", True) + if response.get("_mcp_status") == "error": + success = False + message = str(response.get("message")) if response.get("message") else None + error = str(response.get("error")) if response.get("error") else None + data = response.get("data") + if "success" not in response and "_mcp_status" not in response: + data = response + return MCPResponse(success=success, message=message, error=error, data=data) + + return MCPResponse(success=False, message=str(response), error=None, data=None)(Adjust exact shape as needed to match your intended semantics.)
📜 Review details
Configuration used: CodeRabbit UI
Review profile: CHILL
Plan: Pro
📒 Files selected for processing (8)
MCPForUnity/Editor/Clients/Configurators/VSCodeInsidersConfigurator.cs(1 hunks)MCPForUnity/Editor/Clients/Configurators/VSCodeInsidersConfigurator.cs.meta(1 hunks)MCPForUnity/Editor/Services/ServerManagementService.cs(3 hunks)Server/src/core/telemetry.py(1 hunks)Server/src/services/custom_tool_service.py(2 hunks)Server/src/services/tools/manage_prefabs.py(1 hunks)Server/src/services/tools/script_apply_edits.py(1 hunks)docs/MCP_CLIENT_CONFIGURATORS.md(3 hunks)
🧰 Additional context used
🧠 Learnings (3)
📓 Common learnings
Learnt from: msanatan
Repo: CoplayDev/unity-mcp PR: 401
File: MCPForUnity/Editor/Clients/Configurators/VSCodeConfigurator.cs:10-18
Timestamp: 2025-11-27T21:09:35.011Z
Learning: VS Code GitHub Copilot MCP configuration supports mcp.json files placed directly in the Code/User directory: %APPDATA%\Code\User\mcp.json on Windows, ~/Library/Application Support/Code/User/mcp.json on macOS, and ~/.config/Code/User/mcp.json on Linux. This is in addition to workspace-scoped .vscode/mcp.json files.
📚 Learning: 2025-11-27T21:09:35.011Z
Learnt from: msanatan
Repo: CoplayDev/unity-mcp PR: 401
File: MCPForUnity/Editor/Clients/Configurators/VSCodeConfigurator.cs:10-18
Timestamp: 2025-11-27T21:09:35.011Z
Learning: VS Code GitHub Copilot MCP configuration supports mcp.json files placed directly in the Code/User directory: %APPDATA%\Code\User\mcp.json on Windows, ~/Library/Application Support/Code/User/mcp.json on macOS, and ~/.config/Code/User/mcp.json on Linux. This is in addition to workspace-scoped .vscode/mcp.json files.
Applied to files:
MCPForUnity/Editor/Clients/Configurators/VSCodeInsidersConfigurator.csdocs/MCP_CLIENT_CONFIGURATORS.md
📚 Learning: 2025-10-24T14:09:08.615Z
Learnt from: msanatan
Repo: CoplayDev/unity-mcp PR: 348
File: MCPForUnity/Editor/Helpers/ConfigJsonBuilder.cs:71-79
Timestamp: 2025-10-24T14:09:08.615Z
Learning: The SystemRoot environment variable on Windows is only required for Codex MCP client configurations due to a Codex bug. Other MCP clients (VSCode, Cursor, Windsurf, Kiro) do not need this environment variable. Codex configurations use TOML format (CodexConfigHelper.cs), while other clients use JSON format (ConfigJsonBuilder.cs).
Applied to files:
docs/MCP_CLIENT_CONFIGURATORS.md
🧬 Code graph analysis (4)
MCPForUnity/Editor/Services/ServerManagementService.cs (1)
MCPForUnity/Editor/Helpers/AssetPathUtility.cs (1)
uvxPath(169-176)
MCPForUnity/Editor/Clients/Configurators/VSCodeInsidersConfigurator.cs (1)
MCPForUnity/Editor/Models/McpClient.cs (1)
McpClient(5-55)
Server/src/services/tools/script_apply_edits.py (1)
Server/src/transport/legacy/unity_connection.py (1)
async_send_command_with_retry(753-785)
Server/src/services/tools/manage_prefabs.py (2)
Server/src/services/tools/manage_editor.py (1)
_coerce_bool(30-41)Server/src/services/tools/manage_gameobject.py (1)
_coerce_bool(75-86)
🪛 Ruff (0.14.7)
Server/src/core/telemetry.py
59-59: Abstract raise to an inner function
(TRY301)
59-59: Avoid specifying long messages outside the exception class
(TRY003)
🔇 Additional comments (13)
Server/src/services/tools/script_apply_edits.py (1)
602-610: Awaitingasync_send_command_with_retrycorrectly fixes the async bugChanging the read call to
await async_send_command_with_retry(...)brings it in line with the rest of the async flow and ensuresread_respis the actual response object rather than a coroutine. The surrounding success/error handling remains consistent and looks correct.Please run the existing tests (or a manual end‑to‑end check of
script_apply_editswith a real Unity instance) to confirm the read path now behaves as expected under asyncio scheduling.MCPForUnity/Editor/Services/ServerManagementService.cs (3)
102-116: Well-structured helper for path transformation.The
BuildUvPathFromUvxmethod cleanly centralizes the logic to derive theuvexecutable path from theuvxpath. The implementation correctly handles:
- Null/whitespace input (returns as-is)
- Preserves the directory and extension
- Handles the case where directory is empty (bare filename)
24-25: LGTM!The call site correctly uses the new helper to build the UV path from the UVX path, improving readability over inline string manipulation.
75-76: LGTM!Consistent usage of the centralized helper method.
MCPForUnity/Editor/Clients/Configurators/VSCodeInsidersConfigurator.cs.meta (1)
1-11: Standard Unity meta file.The meta file follows the expected format for a MonoImporter asset with a valid GUID.
docs/MCP_CLIENT_CONFIGURATORS.md (3)
7-7: LGTM!Documentation correctly lists VSCode Insiders among the supported JSON-file clients.
93-93: LGTM!The description accurately reflects the implementation:
IsVsCodeLayout = truewith Insider-specificCode - Insiders/User/mcp.jsonpaths.
222-222: LGTM!
VSCodeInsidersConfiguratoris properly included in the list of example configurators for reference.MCPForUnity/Editor/Clients/Configurators/VSCodeInsidersConfigurator.cs (2)
8-18: Well-implemented configurator following established patterns.The configurator correctly:
- Extends
JsonFileMcpConfigurator- Sets
IsVsCodeLayout = truefor VS Code-style config structure- Uses the correct Insider-specific paths (
Code - Insidersfolder) that mirror the standard VS Code pathsBased on learnings, VS Code GitHub Copilot MCP configuration supports
mcp.jsonfiles placed directly in theCode/Userdirectory, and this pattern applies to VS Code Insiders withCode - Insiders/User/mcp.json.
20-26: LGTM!The installation steps are clear and consistent with other VS Code-family configurators.
Server/src/services/tools/manage_prefabs.py (1)
53-63: LGTM! Robust boolean parameter handling.The coercion and conditional inclusion pattern correctly normalizes boolean inputs from various sources (bool, string representations, etc.) and only includes them in the params dictionary when explicitly provided. This prevents unintended default values from being sent to Unity.
Server/src/services/custom_tool_service.py (2)
149-152: Hash→project lookup helper is correct and aligned with registration pathThis helper cleanly mirrors how
_hash_to_projectis populated (lowercased keys) and safely handles falsy input, giving you a simple, typed accessor instead of exposing the dict. No issues from my side here.
325-334: Project-hash mapping with graceful fallback looks solidParsing
hash_part, normalizing to lowercase, then preferentially resolving viaCustomToolService.get_project_id_for_hash(while safely swallowing a missing service) and falling back to the lowered hash preserves existing behavior while enabling canonical project IDs when available. This should make HTTP/WS flows more robust without breaking prior callers.
|
Will fix that duplication now. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Actionable comments posted: 3
♻️ Duplicate comments (2)
Server/src/services/tools/manage_gameobject.py (1)
104-109: Good refactoring to centralize boolean coercion.Successfully replaces the local
_coerce_boolhelper with the shared utility, addressing the duplication flagged in past reviews.Server/src/services/tools/manage_prefabs.py (1)
41-51: Excellent refactoring with improved conditional parameter handling.This successfully addresses the past review comment by using the centralized
coerce_boolutility. The pattern of checkingif value is not Nonebefore adding to params is a good practice—it avoids sending explicitFalsevalues when parameters weren't provided.
📜 Review details
Configuration used: CodeRabbit UI
Review profile: CHILL
Plan: Pro
📒 Files selected for processing (4)
Server/src/services/tools/manage_editor.py(2 hunks)Server/src/services/tools/manage_gameobject.py(2 hunks)Server/src/services/tools/manage_prefabs.py(2 hunks)Server/src/services/tools/utils.py(1 hunks)
🧰 Additional context used
🧠 Learnings (3)
📓 Common learnings
Learnt from: msanatan
Repo: CoplayDev/unity-mcp PR: 401
File: MCPForUnity/Editor/Clients/Configurators/VSCodeConfigurator.cs:10-18
Timestamp: 2025-11-27T21:09:35.011Z
Learning: VS Code GitHub Copilot MCP configuration supports mcp.json files placed directly in the Code/User directory: %APPDATA%\Code\User\mcp.json on Windows, ~/Library/Application Support/Code/User/mcp.json on macOS, and ~/.config/Code/User/mcp.json on Linux. This is in addition to workspace-scoped .vscode/mcp.json files.
📚 Learning: 2025-11-05T18:23:12.349Z
Learnt from: msanatan
Repo: CoplayDev/unity-mcp PR: 368
File: MCPForUnity/UnityMcpServer~/src/resources/menu_items.py:15-15
Timestamp: 2025-11-05T18:23:12.349Z
Learning: In Unity MCP, the `name` parameter in the `mcp_for_unity_resource` decorator is the external API name exposed to MCP clients (LLMs, AI agents). The command string passed to `async_send_command_with_retry` or `async_send_with_unity_instance` (e.g., "get_menu_items") is the internal command identifier that must match the C# side. These are decoupled, allowing external API naming to evolve independently of internal command routing.
Applied to files:
Server/src/services/tools/manage_prefabs.pyServer/src/services/tools/manage_gameobject.pyServer/src/services/tools/manage_editor.py
📚 Learning: 2025-10-13T13:41:00.086Z
Learnt from: JohanHoltby
Repo: CoplayDev/unity-mcp PR: 309
File: MCPForUnity/Editor/Helpers/ServerInstaller.cs:478-508
Timestamp: 2025-10-13T13:41:00.086Z
Learning: In the MCPForUnityTools feature (MCPForUnity/Editor/Helpers/ServerInstaller.cs), the design intentionally forces users to have only one .py file per MCPForUnityTools folder to keep file tracking simple. Package-style tools (subdirectories with __init__.py) are not supported.
Applied to files:
Server/src/services/tools/manage_prefabs.pyServer/src/services/tools/manage_gameobject.pyServer/src/services/tools/manage_editor.py
🧬 Code graph analysis (3)
Server/src/services/tools/manage_prefabs.py (1)
Server/src/services/tools/utils.py (1)
coerce_bool(12-24)
Server/src/services/tools/manage_gameobject.py (1)
Server/src/services/tools/utils.py (1)
coerce_bool(12-24)
Server/src/services/tools/manage_editor.py (1)
Server/src/services/tools/utils.py (1)
coerce_bool(12-24)
🔇 Additional comments (2)
Server/src/services/tools/utils.py (1)
12-24: LGTM! Well-structured boolean coercion utility.The implementation correctly handles None, boolean, and string inputs, with sensible fallback to Python's truthiness rules for other types. The use of sets for truthy/falsy string matching is efficient.
Server/src/services/tools/manage_editor.py (1)
30-30: Good refactoring to use centralized boolean coercion.This change successfully addresses the past review comment about duplicated
_coerce_boolhelpers across multiple files.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Actionable comments posted: 0
🧹 Nitpick comments (1)
Server/src/services/tools/manage_editor.py (1)
13-19: Centralized boolean coercion is good; consider aligning docs with behaviorUsing
coerce_bool(wait_for_completion)keepswaitForCompletionhandling consistent with other tools while still yieldingbool | Noneso the laterNone-filtering inparamscontinues to work as before.One small follow‑up:
coerce_boolappears to accept a wider range of truthy/falsy string values than just'true'/'false'. You may want to tweak the parameter description (and/or decorator description) to either:
- Explicitly document the broader accepted forms, or
- Clarify that only
'true'/'false'are officially supported, even if additional forms are currently interpreted.Also applies to: 30-30
📜 Review details
Configuration used: CodeRabbit UI
Review profile: CHILL
Plan: Pro
📒 Files selected for processing (3)
Server/src/services/tools/manage_editor.py(2 hunks)Server/src/services/tools/manage_gameobject.py(2 hunks)Server/src/services/tools/manage_prefabs.py(2 hunks)
🚧 Files skipped from review as they are similar to previous changes (2)
- Server/src/services/tools/manage_prefabs.py
- Server/src/services/tools/manage_gameobject.py
🧰 Additional context used
🧠 Learnings (2)
📓 Common learnings
Learnt from: msanatan
Repo: CoplayDev/unity-mcp PR: 401
File: MCPForUnity/Editor/Clients/Configurators/VSCodeConfigurator.cs:10-18
Timestamp: 2025-11-27T21:09:35.011Z
Learning: VS Code GitHub Copilot MCP configuration supports mcp.json files placed directly in the Code/User directory: %APPDATA%\Code\User\mcp.json on Windows, ~/Library/Application Support/Code/User/mcp.json on macOS, and ~/.config/Code/User/mcp.json on Linux. This is in addition to workspace-scoped .vscode/mcp.json files.
📚 Learning: 2025-11-05T18:23:12.349Z
Learnt from: msanatan
Repo: CoplayDev/unity-mcp PR: 368
File: MCPForUnity/UnityMcpServer~/src/resources/menu_items.py:15-15
Timestamp: 2025-11-05T18:23:12.349Z
Learning: In Unity MCP, the `name` parameter in the `mcp_for_unity_resource` decorator is the external API name exposed to MCP clients (LLMs, AI agents). The command string passed to `async_send_command_with_retry` or `async_send_with_unity_instance` (e.g., "get_menu_items") is the internal command identifier that must match the C# side. These are decoupled, allowing external API naming to evolve independently of internal command routing.
Applied to files:
Server/src/services/tools/manage_editor.py
🧬 Code graph analysis (1)
Server/src/services/tools/manage_editor.py (1)
Server/src/services/tools/utils.py (1)
coerce_bool(12-24)
🔇 Additional comments (1)
Server/src/services/tools/manage_editor.py (1)
9-9: Importingcoerce_boolfrom shared utils looks correctThe import path is consistent with other
services.*imports and correctly reuses the shared boolean coercion helper.
|
@Jordonh18 would you mind fixing the merge conflicts? I think @Scriptwonder beat you to the punch on manage_gameobject.py update. Also a couple little notes while you're at it:
|
|
@Jordonh18 otherwise I tested and reviewed this and looking great, thanks for all the improvements! |
|
Yep will look into all of that now! Thanks for the feedback. Fairly new to contributing in general so feels good to get stuck in! |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Actionable comments posted: 0
🧹 Nitpick comments (2)
Server/src/services/tools/utils.py (1)
12-14: Consider documenting the exact coercion rules in the docstringTo make future usage unambiguous, consider expanding the docstring to briefly spell out the behavior (None → default, known truthy/falsy strings → True/False, unknown strings → default, everything else →
bool(value)). This will help callers choose appropriatedefaultvalues and avoid surprises.Server/src/core/telemetry.py (1)
37-63: Version discovery helper looks solid; consider minor polish on search bounds and messageThe parent-walk + name check is a nice improvement over a fixed path, and handling both
[project]and[tool.poetry]covers common layouts. Two small nits you might consider (optional):
- To avoid mismatches if the distribution name ever changes, you could reuse
PACKAGE_NAMEin the error message instead of hard-coding the string:- raise FileNotFoundError("pyproject.toml not found for MCPForUnityServer") + raise FileNotFoundError(f"pyproject.toml not found for {PACKAGE_NAME}")
- For unusual monorepo layouts where multiple
pyproject.tomlfiles share the same name, walking all the way to filesystem root could still pick up an unexpected parent. In practice this is low-risk, but if it ever bites you, a future refinement could be to stop the search at a known project root (e.g., a detected VCS root orServer/boundary).Overall, the helper is correct and robust as written.
📜 Review details
Configuration used: CodeRabbit UI
Review profile: CHILL
Plan: Pro
📒 Files selected for processing (2)
Server/src/core/telemetry.py(2 hunks)Server/src/services/tools/utils.py(1 hunks)
🧰 Additional context used
🧠 Learnings (1)
📓 Common learnings
Learnt from: msanatan
Repo: CoplayDev/unity-mcp PR: 401
File: MCPForUnity/Editor/Clients/Configurators/VSCodeConfigurator.cs:10-18
Timestamp: 2025-11-27T21:09:35.011Z
Learning: VS Code GitHub Copilot MCP configuration supports mcp.json files placed directly in the Code/User directory: %APPDATA%\Code\User\mcp.json on Windows, ~/Library/Application Support/Code/User/mcp.json on macOS, and ~/.config/Code/User/mcp.json on Linux. This is in addition to workspace-scoped .vscode/mcp.json files.
Learnt from: JohanHoltby
Repo: CoplayDev/unity-mcp PR: 309
File: MCPForUnity/Editor/Helpers/ServerInstaller.cs:478-508
Timestamp: 2025-10-13T13:41:00.086Z
Learning: In the MCPForUnityTools feature (MCPForUnity/Editor/Helpers/ServerInstaller.cs), the design intentionally forces users to have only one .py file per MCPForUnityTools folder to keep file tracking simple. Package-style tools (subdirectories with __init__.py) are not supported.
🪛 Ruff (0.14.7)
Server/src/core/telemetry.py
63-63: Avoid specifying long messages outside the exception class
(TRY003)
75-75: Do not catch blind exception: Exception
(BLE001)
🔇 Additional comments (2)
Server/src/services/tools/utils.py (1)
8-25: coerce_bool semantics are safe for strings; verify non‑string call sitesThe updated logic correctly returns
defaultfor unknown strings instead of usingbool(value), which avoids accidentally treating arbitrary values like"disabled"asTrue. However, the fallback tobool(value)for non-string types should be verified at call sites to ensure this behavior aligns with intended usage patterns.Server/src/core/telemetry.py (1)
66-80: Robust version resolution; just ensure package name alignment is intentionalUsing a single
PACKAGE_NAMEconstant for bothmetadata.version()and the pyproject name check keeps things consistent and makes the fallback behave predictably. The broadexcept Exceptionblocks are justified here sinceMCP_VERSIONis computed at import time and server startup should never break due to telemetry version resolution.Confirm that the distribution name in
pyproject.toml(under[project].nameor[tool.poetry].name) exactly matches thePACKAGE_NAMEconstant value in this file, including any hyphens/underscores. If they differ, the fallback will never match and editable/dev installs will always return"unknown".
|
i believe that's been resolved correctly. |
|
@Jordonh18 Thanks again, good stuff! Let us know if there are any other improvements or features you want to work on. |
|
@Jordonh18 I gave you a shoutout in our unity-mcp / coplay discord. Thanks again! https://discord.com/channels/1330955894296543364/1403548315445891192/1446251610513735914 |
|
thank you! |
This pull request introduces a new configurator for VSCode Insiders GitHub Copilot and improves project ID resolution logic in the server, along with several documentation updates and bug fixes. The main changes are the addition of
VSCodeInsidersConfigurator, enhanced fallback logic for reading the package version, improved project hash mapping for Unity instances, and more robust boolean handling in prefab management.VSCode Insiders configurator and documentation updates:
VSCodeInsidersConfiguratorclass to support configuration of GitHub Copilot in VSCode Insiders, with Insider-specific config file paths and installation instructions. [1] [2]MCP_CLIENT_CONFIGURATORS.mdto include VSCode Insiders in lists, examples, and instructions for adding configurators. [1] [2] [3]Server improvements and bug fixes:
pyproject.tomlinstead of assuming its location.get_project_id_for_hash, improving tool registration and lookup. [1] [2]manage_prefabs.pyby introducing a_coerce_boolfunction to robustly coerce values to booleans before sending to Unity.script_apply_edits.pyby making the call toasync_send_command_with_retryawaitable, ensuring proper async behavior.This pull request introduces support for configuring the VSCode Insiders GitHub Copilot client in MCP for Unity, improves project ID resolution for custom tools, enhances boolean parameter handling in prefab management, and fixes a bug in script edit application. Documentation is also updated to reflect the new configurator and its usage.
VSCode Insiders client support:
VSCodeInsidersConfiguratorclass to support configuration for VSCode Insiders GitHub Copilot, with platform-specific config paths and installation steps. (MCPForUnity/Editor/Clients/Configurators/VSCodeInsidersConfigurator.cs,MCPForUnity/Editor/Clients/Configurators/VSCodeInsidersConfigurator.cs.meta) [1] [2]docs/MCP_CLIENT_CONFIGURATORS.md) [1] [2] [3]Custom tool project ID resolution:
Server/src/services/custom_tool_service.py) [1] [2]Prefab management improvements:
manage_prefabstool by introducing a_coerce_boolhelper for more reliable type conversion. (Server/src/services/tools/manage_prefabs.py)Bug fixes:
async_send_command_with_retrycall for reading scripts. (Server/src/services/tools/script_apply_edits.py)Miscellaneous:
pyproject.tomlin telemetry to search ancestor directories. (Server/src/core/telemetry.py)MCPForUnity/Editor/Services/ServerManagementService.cs) [1] [2] [3]Summary by CodeRabbit
New Features
Documentation
Refactor
Bug Fixes / Reliability
✏️ Tip: You can customize this high-level summary in your review settings.