dsh-unity-mcp-bridge 0.6.0 → 0.9.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +5 -2
- package/README.zh.md +5 -2
- package/docs/DETAILS.md +24 -11
- package/lib/index.js +39 -11
- package/package.json +2 -2
- package/skills/unity-mcp-check/SKILL.md +131 -130
- package/skills/unity-mcp-delete/SKILL.md +146 -0
- package/skills/unity-mcp-install/SKILL.md +31 -17
- package/skills/{SKILL.md → unity-mcp-tools/SKILL.md} +59 -54
- package/skills/unity-mcp-tools/reference/extensions.md +118 -0
- package/skills/{reference → unity-mcp-tools/reference}/package-manager.md +1 -1
- package/skills/unity-mcp-tools/reference/rql.md +131 -0
- package/skills/{reference → unity-mcp-tools/reference}/screenshot.md +1 -1
- package/skills/{reference → unity-mcp-tools/reference}/script.md +3 -3
- package/skills/{reference → unity-mcp-tools/reference}/tests.md +9 -9
- package/skills/unity-mcp-tools/reference/tool.md +15 -0
- package/skills/unity-mcp-update/SKILL.md +212 -0
- package/skills/unity-mcp-update-tools/SKILL.md +115 -0
- package/tools/generate-unity-mcp-catalog.ps1 +84 -20
- package/tools/normalize-toolset.ps1 +107 -0
- package/vendor/README.md +12 -8
- package/vendor/SHA256SUMS-9.3.0 +7 -0
- package/vendor/com.ivanmurzak.unity.mcp-1.6.0.tgz +0 -0
- package/vendor/manifest.json +17 -17
- package/skills/reference/rql.md +0 -86
- package/skills/reference/tool.md +0 -12
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: unity-mcp-check
|
|
3
|
-
description: 检查 DSH 的 unity-mcp-bridge 与 Unity
|
|
4
|
-
whenToUse: 用户要求「检查 / 排查 Unity-MCP
|
|
3
|
+
description: 检查 DSH 的 unity-mcp-bridge 与 Unity 项目这条链路是否就绪:Unity 插件是否安装成功、两端端口统一到 20000(项目侧不是 20000 就用 bootstrap-local 改过来)、DSH 侧依赖与 bundle 是否加载插件行、Unity 工具集是否初始化成只留 tool-set-enabled-state、/unity-mcp-tools 的命令目录是否按当前插件版本生成,最后用 unity_mcp_activate 实测能否连上 DSH。不做版本检查与升级(用 /unity-mcp-update),也不配 AI agent。
|
|
4
|
+
whenToUse: 用户要求「检查 / 排查 Unity-MCP 连接」、unity_mcp_activate 连不上、/unity-mcp-tools 激活失败、刚跑完 /unity-mcp-install 时;问「有没有新版本 / 要不要升级」请用 /unity-mcp-update。
|
|
5
5
|
---
|
|
6
6
|
|
|
7
7
|
# 检查 DSH ↔ Unity-MCP 连接
|
|
@@ -12,131 +12,156 @@ whenToUse: 用户要求「检查 / 排查 Unity-MCP 连接」或「AI Game Devel
|
|
|
12
12
|
|---|---|---|
|
|
13
13
|
| DSH | 桥接插件 `dsh-unity-mcp-bridge` | `%DSH_HOME%\profiles\%DSH_PROFILE%\`:`package.json` 的依赖 **和 `dsh.profile.bundles` 里的包名**(决定 bundle 是否加载);`unity-mcp` 行由插件自带的 `node_modules\dsh-unity-mcp-bridge\cordis.patch.yml` 插入(`url` 默认 `http://localhost:20000/mcp`),profile 自己的 `cordis.patch.yml` 只在需要覆盖端点时出现 |
|
|
14
14
|
| Unity | 包 `com.ivanmurzak.unity.mcp` 起的 MCP 服务器 | 项目 `UserSettings\AI-Game-Developer-Config.json` 的 `host`(必须是 `http://localhost:20000`) |
|
|
15
|
-
| AI agent | 客户端侧的 MCP 配置(本技能默认 **Kilo Code**) | 项目 `.kilocode\mcp.json` 的 `mcpServers.*.url`(端口必须是 20000)+ 同文件所在项目的 `skillsPath`(`.kilocode\skills`) |
|
|
16
15
|
|
|
17
|
-
|
|
16
|
+
检查项:① 插件是否装上 ② 端口是否 20000(不是就改)③ DSH 依赖与 bundle 是否加载插件行 ④ 工具集是否最小 ⑤ 命令目录是否跟得上插件版本 ⑥ 能否连上 DSH。
|
|
18
17
|
|
|
19
|
-
|
|
18
|
+
版本新旧、是否升级 → `/unity-mcp-update`;装插件 → `/unity-mcp-install`;配 AI agent 不在本技能范围内。
|
|
19
|
+
|
|
20
|
+
## 0. 定位 Unity 项目
|
|
21
|
+
|
|
22
|
+
找 `ProjectSettings\ProjectVersion.txt`(排除 `Library` / `Temp` / `obj` / `node_modules` / `.git`),取唯一那个;0 个或多个就停下来问用户。
|
|
20
23
|
|
|
21
24
|
```powershell
|
|
22
|
-
$
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
Select-
|
|
27
|
-
|
|
28
|
-
# profile 层若有覆盖行,以它为准
|
|
29
|
-
Select-String -Path (Join-Path $prof 'cordis.patch.yml') -Pattern 'unity-mcp' -Context 0,12
|
|
25
|
+
$ws = (Get-Location).Path
|
|
26
|
+
$projects = Get-ChildItem $ws -Directory -Recurse -Depth 4 -ErrorAction SilentlyContinue |
|
|
27
|
+
Where-Object { Test-Path (Join-Path $_.FullName 'ProjectSettings\ProjectVersion.txt') } |
|
|
28
|
+
Where-Object { $_.FullName -notmatch '\\(Library|Temp|obj|node_modules|\.git)\\' } |
|
|
29
|
+
Select-Object -ExpandProperty FullName -Unique
|
|
30
|
+
$projects
|
|
30
31
|
```
|
|
31
32
|
|
|
32
|
-
|
|
33
|
+
## 1. 插件是否安装成功
|
|
33
34
|
|
|
34
|
-
|
|
35
|
+
```powershell
|
|
36
|
+
$manifest = Join-Path $proj 'Packages\manifest.json'
|
|
37
|
+
Select-String -Path $manifest -Pattern 'com\.ivanmurzak\.unity\.mcp'
|
|
38
|
+
Get-ChildItem (Join-Path $proj 'Library\PackageCache') -Directory -Filter 'com.ivanmurzak.unity.mcp@*' -ErrorAction SilentlyContinue
|
|
39
|
+
```
|
|
40
|
+
|
|
41
|
+
- manifest 依赖 **和** `Library\PackageCache` 里都有 → 已装(依赖可能是 `file:` 本地包,属正常)。
|
|
42
|
+
- 只有 manifest、没有 `PackageCache` → Unity 还没解析包:让 Unity 打开/重新加载项目一次再看。
|
|
43
|
+
- 两处都没有 → **未装**:报告后交给 `/unity-mcp-install`,不要在这里装。
|
|
35
44
|
|
|
36
|
-
## 2.
|
|
45
|
+
## 2. 端口是不是 20000、模式是不是 Custom(不对就改)
|
|
37
46
|
|
|
38
|
-
|
|
47
|
+
**20000 是唯一标准端口;并且必须是 `connectionMode: Custom`** —— Cloud 模式不会启动本地服务器,DSH 永远连不上。
|
|
39
48
|
|
|
40
|
-
|
|
49
|
+
### 2.1 读现状
|
|
41
50
|
|
|
42
51
|
```powershell
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
Select-String '"host"|"token"|"connectionMode"'
|
|
52
|
+
$cfgPath = Join-Path $proj 'UserSettings\AI-Game-Developer-Config.json'
|
|
53
|
+
$cfg = Get-Content $cfgPath -Raw | ConvertFrom-Json
|
|
54
|
+
$cfg.host; $cfg.connectionMode; $cfg.keepServerRunning
|
|
47
55
|
|
|
48
56
|
# Unity 侧实际监听的端口(编辑器在跑时才有意义,取最后一条)
|
|
49
57
|
Select-String -Path (Join-Path $proj 'Library\mcp-server\win-x64\logs\server-log.txt') `
|
|
50
58
|
-Pattern 'Start listening on port' | Select-Object -Last 1
|
|
51
59
|
|
|
52
|
-
# DSH 侧:生效的 url(bundle
|
|
60
|
+
# DSH 侧:生效的 url(bundle 默认 20000/mcp;profile 层覆盖行优先)
|
|
61
|
+
$prof = $env:DSH_PROFILE_DIR
|
|
53
62
|
Select-String -Path (Join-Path $prof 'node_modules\dsh-unity-mcp-bridge\cordis.patch.yml') -Pattern 'url:'
|
|
54
|
-
Select-String -Path (Join-Path $prof 'cordis.patch.yml') -Pattern '
|
|
63
|
+
Select-String -Path (Join-Path $prof 'cordis.patch.yml') -Pattern 'unity-mcp' -Context 0,12
|
|
55
64
|
```
|
|
56
65
|
|
|
57
66
|
`unity-mcp-cli status $proj` 会同时列出 **Config Server**(项目配置里的地址,就是 Unity 插件对外服务的地址)和它自己的 **Local MCP Server** 地址 —— **以 Config Server 为准**,不要被另一个端口带跑。
|
|
58
67
|
|
|
59
|
-
|
|
68
|
+
### 2.2 Unity 侧不是 20000 / 仍是 Cloud → 改配置(重启统一在 4.5)
|
|
60
69
|
|
|
61
|
-
|
|
70
|
+
判定:`host` 不是 `http://localhost:20000` **或** `connectionMode` 不是 `Custom`,就执行下面整段。改写的是项目自己的配置,不是 DSH。需要 `unity-mcp-cli`;缺了就按 `/unity-mcp-install` 第 2 步装(`npm install -g unity-mcp-cli`)。
|
|
62
71
|
|
|
63
72
|
```powershell
|
|
64
|
-
|
|
65
|
-
|
|
73
|
+
$cfgPath = Join-Path $proj 'UserSettings\AI-Game-Developer-Config.json'
|
|
74
|
+
$cfg = Get-Content $cfgPath -Raw | ConvertFrom-Json
|
|
75
|
+
$token = $cfg.token
|
|
76
|
+
|
|
77
|
+
# 0) 执行前提醒用户保存未保存的场景/改动(close 会优雅退出,30s 不退则强杀)
|
|
78
|
+
# 先看会改什么,不落盘
|
|
79
|
+
unity-mcp-cli bootstrap-local $proj --url 'http://localhost:20000/' --token $token --dry-run
|
|
66
80
|
|
|
67
|
-
#
|
|
68
|
-
Copy-Item (
|
|
69
|
-
|
|
70
|
-
unity-mcp-cli bootstrap-local $proj --url 'http://localhost:20000/' --token '<项目现有 token>'
|
|
81
|
+
# 备份后落盘(Cloud → Custom,host → 20000)
|
|
82
|
+
Copy-Item $cfgPath "$cfgPath.bak-$(Get-Date -Format yyyyMMdd-HHmmss)"
|
|
83
|
+
unity-mcp-cli bootstrap-local $proj --url 'http://localhost:20000/' --token $token
|
|
71
84
|
```
|
|
72
85
|
|
|
73
|
-
-
|
|
86
|
+
- **这里先不重启**:第 4 步还要写工具集配置;所有文件改完后在 **4.5 统一重启一次编辑器**(直接 `close`/`open`,不再给别的选项)。
|
|
87
|
+
- **为什么必须重启编辑器**:`McpServerManager` 是 `[InitializeOnLoad]`,静态构造函数只在**域重载**时读一次 `connectionMode`;Cloud 模式下 `StartServerIfNeeded()` 打印 `Cloud mode active, skipping local server auto-start` 后直接返回,并且该方法第一行就 `EditorApplication.update -= StartServerIfNeeded`(**只跑一次**)。所以只改 JSON 不会启动服务器。
|
|
88
|
+
- `keepServerRunning` 必须是 `true`:false 时 `StartServerIfNeeded()` 同样会跳过(日志 `KeepServerRunning is false, skipping auto-start`)。
|
|
74
89
|
- token 用**项目里已有的那个**,不要凭空生成;`--dry-run` 的 diff 要念给用户看。
|
|
75
|
-
-
|
|
76
|
-
- ⚠️ 顺手检查还有谁 pin 了旧端口(项目里的 `.kilocode\mcp.json`、其它 MCP 客户端配置),一并改成 20000,否则那些客户端会连不上。Kilo Code 那份**不要手改**,走第 5 步的 `configure --agent` 重配(它会连 pin 一起重写)。**改动了哪些文件必须报给用户。**
|
|
77
|
-
- 如果用户明确要求保留项目原端口(例如别的客户端已经固定用它),**停下来问**,不要强行统一 —— 本技能的默认策略是统一到 20000。
|
|
90
|
+
- 用户明确要求保留项目原端口时**停下来问**,不要强行统一。
|
|
78
91
|
|
|
79
|
-
|
|
92
|
+
### 2.3 DSH 侧不是 20000 → 改回 20000
|
|
80
93
|
|
|
81
|
-
|
|
94
|
+
bundle 默认就是 `http://localhost:20000/mcp`。出现别的端口说明 profile 层有**覆盖行**:备份 `%DSH_PROFILE_DIR%\cordis.patch.yml`,把它的 `url:` 改成 `http://localhost:20000/mcp`,或整块删掉、回落到 bundle 默认;profile 有 `patchReload: live` 则存盘即热重载,否则重启 DSH。只改这一处。
|
|
82
95
|
|
|
83
|
-
|
|
96
|
+
> ⚠️ 桌面端会把 profile 层的 `cordis.patch.yml` 当成自己设置的导出文件重写。能删覆盖行就删,靠 bundle 提供。
|
|
84
97
|
|
|
85
|
-
|
|
98
|
+
## 3. DSH 侧:依赖与 bundle 自查
|
|
86
99
|
|
|
87
100
|
```powershell
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
unity-mcp-cli configure $proj --agent kilo-code --url 'http://localhost:20000'
|
|
97
|
-
Get-Content (Join-Path $proj '.kilocode\mcp.json') -Raw
|
|
101
|
+
$prof = $env:DSH_PROFILE_DIR # 例如 C:\Users\<you>\.dsh\profiles\desktop
|
|
102
|
+
# 依赖 + bundle 列表:两者都在,bundle 才会被加载
|
|
103
|
+
Get-Content (Join-Path $prof 'package.json') -Raw | Select-String 'dsh-unity-mcp-bridge'
|
|
104
|
+
# 生效的 unity-mcp 行:默认由插件自带的 bundle patch 插入
|
|
105
|
+
Select-String -Path (Join-Path $prof 'node_modules\dsh-unity-mcp-bridge\cordis.patch.yml') `
|
|
106
|
+
-Pattern 'id: unity-mcp' -Context 0,12
|
|
107
|
+
# profile 层若有覆盖行,以它为准
|
|
108
|
+
Select-String -Path (Join-Path $prof 'cordis.patch.yml') -Pattern 'unity-mcp' -Context 0,12
|
|
98
109
|
```
|
|
99
110
|
|
|
100
|
-
-
|
|
101
|
-
`{"mcpServers":{"ai-game-developer":{"disabled":false,"type":"streamable-http","url":"http://localhost:20000/p/<pin>"}}}`。
|
|
102
|
-
端口跟着 `--url` 走;路径是**项目 pin**(`/p/<pin>`)而不是 `/mcp`。实测 `http://localhost:20000/mcp` 与 `/p/<pin>` 都返回 200,DSH 侧仍固定用 `/mcp`,两边不冲突。
|
|
103
|
-
- ⚠️ **别用 `setup-mcp`**:CLI 0.91.0、1.2.0 与 **1.5.0** 的 `setup-mcp --list` 都只有 14 个 agent(1.5.0 实测:`antigravity`…`vscode-copilot`,**仍不含 `kilo-code`**),直接 `ERROR: Unknown agent: "kilo-code"`。要用 `configure --agent` —— 它代理到托管 Server 的 configurator,那边实测有 16 个 agent(含 `kilo-code`、`zoo-code`、`other-custom`),用 `<server exe> configure --help` 列全。
|
|
104
|
-
- `configure --agent` 依赖托管二进制 `~\.ai-game-dev\server\<rid>\`;缺了会报 `No managed GameDev-MCP-Server binary found … Run 'unity-mcp-cli install-plugin --with-server' first`。项目里已有 `Library\mcp-server\<rid>\gamedev-mcp-server.exe` 时可直接顶替(实测与 CLI 代理等价):
|
|
111
|
+
确认四件事:依赖在不在、`dsh.profile.bundles` 里有没有 `dsh-unity-mcp-bridge`、生效的 `url:` 是不是 `http://localhost:20000/mcp`(读法见 2.1,改法见 2.3)、`serverName`(默认 `unity`)。同时确认**没有**第二份指向同一 `serverName` 的 stock `@deepseek-ai/dsh-mcp-client` 配置。
|
|
105
112
|
|
|
106
|
-
|
|
107
|
-
Push-Location $proj
|
|
108
|
-
& (Join-Path $proj 'Library\mcp-server\win-x64\gamedev-mcp-server.exe') configure --agent kilo-code --url http://localhost:20000
|
|
109
|
-
Pop-Location
|
|
110
|
-
```
|
|
113
|
+
> 依赖和 bundles 都在、插件页却显示「已安装,未生效」→ 看 bundle patch 是不是空的。0.4.0 及以前它故意是 `[]`,要求使用者把行手写进 profile 层;桌面端会把 profile 层的 `cordis.patch.yml` 当成自己设置的导出文件重写,手写行下次重启就没了。0.5.0 起这一行随 bundle 提供,不再依赖 profile 层。
|
|
111
114
|
|
|
112
|
-
|
|
113
|
-
- 换别的 agent:`configure --agent <id>` 同理(`cursor` / `claude-code` / `vscode-copilot` …)。改动的文件(`.kilocode\mcp.json` 及其备份)要报给用户。
|
|
115
|
+
## 4. 初始化工具集(参考 `reference/tool.md`)与命令目录版本自检
|
|
114
116
|
|
|
115
|
-
|
|
117
|
+
Unity 侧**只留一个**可见工具 `tool-set-enabled-state`(1.6.0 正式名 `tool-set-visibility`,旧名等价):它既是唯一的"开关",也是桥接 `unity_tools_restore` 的保留集,等于最小常驻状态。
|
|
116
118
|
|
|
117
|
-
|
|
119
|
+
> **1.6.0 起是「可见性」而不是禁用**:默认只有 7 个核心工具可见,且管理开关本身默认隐藏。隐藏的工具仍可按名调用,但**不会出现在 `tools/list`**(不进入模型上下文,桥接激活后也注册不到),所以这一步必须把开关显式设为 visible。
|
|
120
|
+
|
|
121
|
+
**新工程不能先跑 `--disable-all-tools`**:CLI 1.6.0 的 `updateFeatures` 只修改配置里**已存在**的条目,`tools: []` 时 `--disable-all-tools` / `--enable-all-tools` 都是空操作;随后 `--enable-tools` 只 push 一条,结果仍是「默认 7 + 开关 = 8 个可见」。必须用**显式名单**把条目物化。
|
|
122
|
+
|
|
123
|
+
先看现状:如果 `--list` 里已经只有开关一条 `[visible]`,且第 2 步判定无需改端口/模式,就不必重写配置,直接去 4.5(20000 已监听则连 4.5 也跳过):
|
|
118
124
|
|
|
119
125
|
```powershell
|
|
120
|
-
unity-mcp-cli configure $proj --list | Select-String '\[enabled\]'
|
|
126
|
+
unity-mcp-cli configure $proj --list | Select-String '\[(visible|enabled)\]'
|
|
127
|
+
```
|
|
121
128
|
|
|
122
|
-
|
|
123
|
-
|
|
129
|
+
```powershell
|
|
130
|
+
$prof = $env:DSH_PROFILE_DIR
|
|
131
|
+
$bridge = Join-Path $prof 'node_modules\dsh-unity-mcp-bridge'
|
|
132
|
+
$refDir = Join-Path $bridge 'skills\unity-mcp-tools\reference'
|
|
133
|
+
$names = Get-ChildItem $refDir -Filter *.md |
|
|
134
|
+
Where-Object Name -ne 'extensions.md' |
|
|
135
|
+
ForEach-Object { Select-String -Path $_.FullName -Pattern '^- `([a-z0-9-]+)`' -AllMatches } |
|
|
136
|
+
ForEach-Object { $_.Matches } | ForEach-Object { $_.Groups[1].Value } |
|
|
137
|
+
Sort-Object -Unique
|
|
138
|
+
|
|
139
|
+
# 1) 显式关掉全部基础工具(缺失条目会被 push 进配置)
|
|
140
|
+
unity-mcp-cli configure $proj --disable-tools ($names -join ',')
|
|
141
|
+
# 2) 只显示开关
|
|
124
142
|
unity-mcp-cli configure $proj --enable-tools tool-set-enabled-state
|
|
125
|
-
|
|
126
|
-
unity-mcp-cli configure $proj --list
|
|
143
|
+
# 3) 复验:Tools 条目数 = 命令数(1.6.0 为 19),[visible] 恰好 1 条
|
|
144
|
+
unity-mcp-cli configure $proj --list
|
|
127
145
|
```
|
|
128
146
|
|
|
129
|
-
-
|
|
130
|
-
|
|
131
|
-
|
|
147
|
+
- 等价脚本(插件目录 `tools\normalize-toolset.ps1`,存在时优先用):它完成上面三步,并断言「条目数 = 目录命令数、只有开关可见」,失败返回非 0:
|
|
148
|
+
|
|
149
|
+
```powershell
|
|
150
|
+
powershell -NoProfile -ExecutionPolicy Bypass -File "<bridge>\tools\normalize-toolset.ps1" -ProjectPath $proj
|
|
151
|
+
```
|
|
152
|
+
|
|
153
|
+
- 以上规避的是 **CLI 1.6.0 的已知行为**:`updateFeatures` 只改已有条目,空配置时 `--disable-all-tools` / `--enable-all-tools` 是空操作。上游修了之后这段仍安全(幂等)。
|
|
154
|
+
- 扩展包的工具不在基础目录里:装完扩展后,激活连接再跑一次 `unity_tools_restore`,把剩余可见的扩展工具一并隐藏(开关保留)。
|
|
155
|
+
- 万一被全部隐藏:单独跑 `unity-mcp-cli configure $proj --enable-tools tool-set-enabled-state` 即可救回。
|
|
156
|
+
- 复验结果应当**只有** `tool-set-enabled-state` 是 `[visible]`(旧版 CLI 显示 `[enabled]`),其余全是 `[hidden]` / `[disabled]`。注册总数随插件版本变:**1.6.0 = 19 个(默认 7 可见)**,1.2.0 = 18 个(默认 7),0.9x = 73。
|
|
132
157
|
- 这一步直接读写项目配置,**不需要 Unity 在运行**。
|
|
133
|
-
- prompts / resources
|
|
134
|
-
- 需要别的命令时,交给 `/unity-mcp-tools`
|
|
158
|
+
- prompts / resources 默认全隐藏,保持关闭即可;除非用户明确要求,不要打开。
|
|
159
|
+
- 需要别的命令时,交给 `/unity-mcp-tools` 的按需流程(显示 → 用 → `unity_tools_restore` 收回),不要在这里预先全开:每个可见命令的 schema 都会进入之后每一次模型请求。
|
|
135
160
|
- **命令目录版本自检(必做)**:`/unity-mcp-tools` 的索引和 `reference/*.md` 是按某个插件版本从源码生成的,**命令名随版本变**。比对两边,不一致就提示重生成,不要照着旧目录去开工具:
|
|
136
161
|
|
|
137
162
|
```powershell
|
|
138
163
|
# 桥接自带的目录是按哪个版本生成的(SKILL.md 标题行)
|
|
139
|
-
Select-String -Path (Join-Path $prof 'node_modules\dsh-unity-mcp-bridge\skills\SKILL.md') `
|
|
164
|
+
Select-String -Path (Join-Path $prof 'node_modules\dsh-unity-mcp-bridge\skills\unity-mcp-tools\SKILL.md') `
|
|
140
165
|
-Pattern 'com\.ivanmurzak\.unity\.mcp@'
|
|
141
166
|
# 项目里实际装的版本
|
|
142
167
|
(Get-ChildItem (Join-Path $proj 'Library\PackageCache') -Directory -Filter 'com.ivanmurzak.unity.mcp@*').Name
|
|
@@ -146,41 +171,28 @@ unity-mcp-cli configure $proj --list | Select-String '\[enabled\]' # 复验:
|
|
|
146
171
|
|
|
147
172
|
实测代价:目录停在 0.91.0 而项目已是 1.2.0 时,18 个分类文件里有 13 个写的是**已删除**的命令(`gameobject-*`、`assets-*`、`scene-*`、`profiler-*`、`console-*`、`editor-application-*`、`editor-selection-*`、`object-*`、`reflection-method-*`、`type-get-json-schema`),1.2.0 由 `rql-query` / `rql-mutate` / `rql-schema` 承担 —— 照旧目录调用必然 `tool not found`。
|
|
148
173
|
|
|
149
|
-
|
|
174
|
+
### 4.5 重启编辑器让配置生效(直接重启,只一次)
|
|
150
175
|
|
|
151
|
-
|
|
176
|
+
**只要第 2 步改过 host/connectionMode,或第 4 步写过工具集配置**,就在这里统一重启一次编辑器(不要在 2.2 里先重启一遍):
|
|
152
177
|
|
|
153
178
|
```powershell
|
|
154
|
-
#
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
if ($px) { $env:HTTPS_PROXY = "http://$px"; $env:NODE_USE_ENV_PROXY = '1' }
|
|
159
|
-
node "<bridge>\tools\offline-package.mjs" check --project $proj --cli-version (unity-mcp-cli --version)
|
|
160
|
-
```
|
|
161
|
-
|
|
162
|
-
- 脚本无第三方依赖(Node 24)。`--json` 给出机器可读结果;`--no-proxy` 强制直连。
|
|
163
|
-
- **`NODE_USE_ENV_PROXY=1` 不能省**:Node 24 的全局 `fetch` 否则无视 `HTTPS_PROXY`(实测设了等于没设)。脚本自己会补,外层也设上更稳;也可以直接 `--proxy http://127.0.0.1:<port>`。
|
|
164
|
-
- 网络策略是「代理 ↔ 直连互为兜底」:查询类(OpenUPM / npm / GitHub API)先直连,**下载类(Server zip、`SHA256SUMS`)先代理**,失败再直连。
|
|
165
|
-
- **lockstep 判据不是「谁新用谁」**:插件 tarball 里 `Editor/Scripts/McpServerManager.cs` 的 `ServerVersion` 常量才是目标 —— 插件 `1.5.0` 钉 Server **`9.2.17`**;CLI 与插件同号(`1.5.0`)。脚本直接从 tarball 读这个常量,写进 `vendor/manifest.json` 的 `plugin.pinnedServerVersion`。
|
|
166
|
-
- 项目侧读两处:`Packages\manifest.json` 的依赖(可能是 `file:…` 本地包依赖)与 `Library\PackageCache\com.ivanmurzak.unity.mcp@*`。
|
|
179
|
+
# 执行前必须让用户保存未保存的场景/改动;30s 内没优雅退出会强杀
|
|
180
|
+
unity-mcp-cli close $proj --timeout 30 --force
|
|
181
|
+
unity-mcp-cli open $proj
|
|
182
|
+
unity-mcp-cli wait-for-ready $proj --timeout 300000
|
|
167
183
|
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
node "<bridge>\tools\offline-package.mjs" install --project $proj --dry-run # 先看会改什么
|
|
173
|
-
node "<bridge>\tools\offline-package.mjs" install --project $proj
|
|
174
|
-
unity-mcp-cli install-plugin $proj --with-server --server-version <pinned> `
|
|
175
|
-
--server-source "<bridge>\vendor\gamedev-mcp-server-<rid>-<ver>.zip"
|
|
184
|
+
# 复验
|
|
185
|
+
unity-mcp-cli configure $proj --list | Select-String 'Host'
|
|
186
|
+
Select-String -Path (Join-Path $proj 'Library\mcp-server\win-x64\logs\server-log.txt') `
|
|
187
|
+
-Pattern 'Start listening on port' | Select-Object -Last 1
|
|
176
188
|
```
|
|
177
189
|
|
|
178
|
-
-
|
|
179
|
-
-
|
|
180
|
-
-
|
|
181
|
-
-
|
|
190
|
+
- 为什么必须重启:`McpServerManager` 是 `[InitializeOnLoad]`,只在域重载时读 `connectionMode` 与工具集配置;Cloud 下 `StartServerIfNeeded()` 打印 `Cloud mode active, skipping local server auto-start` 后返回,且只跑一次。
|
|
191
|
+
- Unity 本来没开时 `close` 无操作,`open` 会直接启动;首次解析包 + 起服务器可能超过 2 分钟,`wait-for-ready` 给 300s。
|
|
192
|
+
- 什么都没改(第 2 步无需改 host/模式、`--list` 本就只有开关一条可见)且 20000 已在监听 → 跳过本节,直接去第 5 步。
|
|
193
|
+
- 如果 `Host` 不是 20000 或日志没有 20000 监听 → 回第 2 步核对配置与模式,不要继续第 5 步。
|
|
182
194
|
|
|
183
|
-
##
|
|
195
|
+
## 5. 是否连接到 DSH(实测)
|
|
184
196
|
|
|
185
197
|
```powershell
|
|
186
198
|
Test-NetConnection -ComputerName localhost -Port 20000 -InformationLevel Quiet
|
|
@@ -189,26 +201,22 @@ unity-mcp-cli status $proj # 需要时用 --url / --token / --ti
|
|
|
189
201
|
unity-mcp-cli wait-for-ready $proj # 最长 120s
|
|
190
202
|
```
|
|
191
203
|
|
|
192
|
-
|
|
204
|
+
真正的实测只有一条:**调用 `unity_mcp_activate`**。
|
|
193
205
|
|
|
194
206
|
- 成功 → 桥接连上并注册 `mcp__unity__*` 工具,检查完成;若本次任务不需要 Unity,立刻 `unity_tools_restore` 回到休眠(它同时把工具集还原成只留 `tool-set-enabled-state`)。
|
|
195
|
-
- 失败 →
|
|
207
|
+
- 失败 → 保留错误原文,按下面判断,再回第 2 步核对端口:`ECONNREFUSED` = 20000 没人听;404/405 = 端点路径不对;401/403 = token 不对。
|
|
208
|
+
- 工具 `unity_mcp_activate` 本身不存在 → 桥接插件没加载,属于 DSH 侧安装问题(用 `dsh plugin` 检查是否安装、重启应用)。
|
|
196
209
|
|
|
197
|
-
##
|
|
210
|
+
## 6. 报告格式
|
|
198
211
|
|
|
199
212
|
| 检查项 | 结果 |
|
|
200
213
|
|---|---|
|
|
201
|
-
| `unity
|
|
202
|
-
| Unity
|
|
203
|
-
|
|
|
204
|
-
|
|
|
205
|
-
|
|
|
206
|
-
|
|
|
207
|
-
| Unity 侧端口 | 原 24009 → 已统一 20000(附备份路径)/ 本来就是 20000 |
|
|
208
|
-
| DSH 侧 url | `http://localhost:20000/mcp`(一致 / 已改) |
|
|
209
|
-
| 插件加载 | bundle 已插入 `unity-mcp` 行(0.5.0)/ bundle 为空 → 已升级或补了覆盖行 |
|
|
210
|
-
| AI agent | Kilo Code:`.kilocode\mcp.json` → `http://localhost:20000/p/<pin>`;`skillsPath=.kilocode\skills` |
|
|
211
|
-
| 工具集 | 只有 `tool-set-enabled-state` 为 `[enabled]` |
|
|
214
|
+
| Unity 插件 `com.ivanmurzak.unity.mcp` | 已装(manifest 依赖 = …,PackageCache = …)/ 未装 → 交由 `/unity-mcp-install` |
|
|
215
|
+
| Unity 侧端口 | 本来就是 20000 + Custom / 原 24009 或 Cloud → 已改 20000 + Custom,并已重启编辑器(附备份路径) / 未改(用户要求保留) |
|
|
216
|
+
| DSH 侧 url | `http://localhost:20000/mcp`(一致 / 已改 / 无覆盖行) |
|
|
217
|
+
| 插件加载 | bundle 已插入 `unity-mcp` 行(0.5.0)/ bundle 为空 → 已补覆盖行 / `dsh.profile.bundles` 缺该包 |
|
|
218
|
+
| 命令目录(`/unity-mcp-tools`) | 按 1.6.0 生成,与项目一致 / 按 0.91.0 生成 → 已重生成(需重启 `dsh web`) |
|
|
219
|
+
| 工具集 | 只有 `tool-set-enabled-state` 为 `[visible]`(旧版 CLI 的 `[enabled]`) |
|
|
212
220
|
| `unity_mcp_activate` | 成功 / 失败(原文错误) |
|
|
213
221
|
| 改动的文件 | 列出(含备份路径);无则写"无" |
|
|
214
222
|
|
|
@@ -216,22 +224,15 @@ DSH 侧只有一条真正的实测:**调用 `unity_mcp_activate`**。
|
|
|
216
224
|
|
|
217
225
|
| 现象 | 原因 | 处理 |
|
|
218
226
|
|---|---|---|
|
|
219
|
-
| 20000 没人听 | Unity
|
|
220
|
-
|
|
|
221
|
-
|
|
|
227
|
+
| 20000 没人听 | Unity 没开、服务器没启动、或仍是 Cloud 模式 | 先看 `connectionMode`;Cloud 就 `bootstrap-local` 后**重启编辑器**(`close --force` → `open`) |
|
|
228
|
+
| 日志有 `Cloud mode active, skipping local server auto-start` | 改完配置没触发域重载;`StartServerIfNeeded` 只跑一次 | `bootstrap-local` 后重启编辑器(`unity-mcp-cli close $proj --timeout 30 --force` → `open $proj` → `wait-for-ready`) |
|
|
229
|
+
| 改了 host / 模式但服务器没起 | 插件静态构造只在域重载时读 `connectionMode`,只改 JSON 不生效 | 同上,重启编辑器后再看 `Start listening on port 20000` |
|
|
230
|
+
| 全新工程的可见工具是 8 个(默认 7 + 开关) | `tools: []` 时 `--disable-all-tools` 是空操作(CLI 1.6.0 只改已有条目) | 按第 4 步用 `--disable-tools <显式名单>` 物化条目,再 `--enable-tools tool-set-enabled-state` |
|
|
222
231
|
| manifest 里有包但连不上 | Unity 还没解析包 | 用 Unity 打开项目一次 |
|
|
223
232
|
| 404 / 405 | 端点路径不对(`/mcp` ↔ `/p/<token>`) | 以 `http://localhost:20000/mcp` 为准;需要 token 路径时再补 |
|
|
224
233
|
| 401 / 403 | token 缺失或过期 | 用项目配置里的 token;或 `bootstrap-local --url ... --token ...` 重新固定 |
|
|
225
|
-
|
|
|
234
|
+
| 工具全被隐藏(含 `tool-set-enabled-state`) | 被 `--disable-all-tools` 或历史上写死的配置隐藏 | 单独跑一条 `unity-mcp-cli configure $proj --enable-tools tool-set-enabled-state` 救回 |
|
|
235
|
+
| `mcp__unity__gameobject-find` 之类报 `tool not found` | 命令目录是按旧插件版本生成的(1.2.0 已移除 `gameobject-*` / `assets-*` / `scene-*` / `profiler-*` 等) | 按第 4 步做目录版本自检并重生成 + 重启 `dsh web`;读写 Unity 内容改走 `rql-query` / `rql-mutate` / `rql-schema` |
|
|
226
236
|
| 工具名冲突 / 行为异常 | stock `dsh-mcp-client` 与桥接插件同时跑同一 `serverName` | 只留一个 |
|
|
227
|
-
| `ERROR: Unknown agent: "kilo-code"` | 用了 `setup-mcp`(CLI 0.91.0 / 1.2.0 / 1.5.0 的列表只有 14 个 agent,不含 `kilo-code`) | 改用 `unity-mcp-cli configure $proj --agent kilo-code --url http://localhost:20000`(托管 Server 侧有 16 个) |
|
|
228
|
-
| `No managed GameDev-MCP-Server binary found …` | 没装托管 Server(缺 `--with-server`) | 跑 `/unity-mcp-install` 的 `install-plugin --with-server`;或临时用项目 `Library\mcp-server\<rid>\gamedev-mcp-server.exe` 直接跑 `configure --agent` |
|
|
229
|
-
| 凭空多出个监听 8080 的 `gamedev-mcp-server` | 对 server exe 跑了裸 `--help`(它不是帮助,是直接启动) | 按端口找 PID 杀掉(`Get-NetTCPConnection -LocalPort 8080`);只用 `configure --help` 这类子命令帮助 |
|
|
230
|
-
| DSH 通、Kilo Code 连不上 | `.kilocode\mcp.json` 里 pin 的端口不是 20000(端口改过后没重配 agent) | 重跑 `configure --agent kilo-code --url http://localhost:20000`,再核对 `url` 里的端口 |
|
|
231
|
-
| `mcp__unity__gameobject-find` 之类报 `tool not found` | 命令目录是按旧插件版本生成的(1.2.0 已移除 `gameobject-*` / `assets-*` / `scene-*` / `profiler-*` 等) | 按第 6 步做目录版本自检并重生成 + 重启 `dsh web`;读写 Unity 内容改走 `rql-query` / `rql-mutate` / `rql-schema` |
|
|
232
237
|
| 插件页显示「已安装,未生效」 | bundle 没有插入插件行(0.4.0 及以前 bundle patch 是 `[]`),或 profile 的 `dsh.profile.bundles` 里没有这个包 | 升级到 ≥0.5.0(行随 bundle 提供);确认 `dsh.profile.bundles` 含 `dsh-unity-mcp-bridge`;重启 |
|
|
233
238
|
| 重启后手写进 profile 层的配置不见了 | 桌面端把 profile 的 `cordis.patch.yml` 当自己的设置导出重写,不在它设置模型里的条目会被抹掉 | 插件行交给 bundle,别手写;其它设置走 UI |
|
|
234
|
-
| 桌面端启动即崩,日志是 `webserver: host "0.0.0.0" is an unspecified (wildcard) address` | 从旧备份恢复的 `webserver` 块用了 `0.0.0.0`,当前版本拒绝通配监听 | 删掉该块或改成具体网卡 IPv4;局域网访问走 UI 的 remote-web-ui 开关,别手填 `0.0.0.0` |
|
|
235
|
-
| `check` 某层显示 `?` 或报「…失败」 | 代理与直连都失败(GitHub API 被掐 / npm 超时) | 设 `HTTPS_PROXY` + `NODE_USE_ENV_PROXY=1`(或直接 `--proxy http://127.0.0.1:<port>`)重跑;插件版本可 `--plugin-version` 手工指定 |
|
|
236
|
-
| `fetch` 报 `SHA256 不匹配` | 下载被中间盒改写,或复用了半截文件 | 删掉该 zip 与 `*.part`,重跑 `fetch --force`;仍不匹配就换代理节点 |
|
|
237
|
-
| `fetch` 报 `下载不完整 …(保留 .part,可重跑续传)` | 连接被掐断(实测 GitHub release 资产会) | 直接重跑 `fetch`,从 `.part` 续传,别手删 |
|
|
@@ -0,0 +1,146 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: unity-mcp-delete
|
|
3
|
+
description: 从当前工作区的 Unity 工程里**卸载** Unity-MCP 插件(com.ivanmurzak.unity.mcp)及其扩展包:先备份 Packages/manifest.json 与项目配置,关闭正在运行的编辑器,用 unity-mcp-cli remove-plugin 删掉基础包,再手动移除 com.ivanmurzak.unity.mcp.* 扩展依赖,清理 UserSettings 配置与 Library 下的 mcp-server / PackageCache 残留,最后校验 manifest 已干净。与 /unity-mcp-install 相反;只删 Unity 工程里的插件,不动 DSH 桥接插件、不动 CLI 全托管 Server、不动其他工程。
|
|
4
|
+
whenToUse: 用户要求「卸载 / 删除 Unity 项目里的 Unity-MCP 插件」「把 AI Game Developer 从工程里移除」「删掉后重装」时。只想删某个扩展、或只想停用连接,不要用本技能。
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# 卸载 Unity 工程里的 Unity-MCP 插件
|
|
8
|
+
|
|
9
|
+
本技能只处理**当前工作区**里的一个 Unity 工程;删除范围:
|
|
10
|
+
|
|
11
|
+
| 删除 | 位置 |
|
|
12
|
+
|---|---|
|
|
13
|
+
| 基础包 `com.ivanmurzak.unity.mcp` | `Packages\manifest.json` 的 `dependencies`(`unity-mcp-cli remove-plugin` 负责) |
|
|
14
|
+
| 扩展包 `com.ivanmurzak.unity.mcp.*`(Animation / Cinemachine / InputSystem / Navigation / ParticleSystem / ProBuilder / Splines / Terrain / Tilemap / Timeline) | 同一个 `dependencies`(CLI 不删,本技能手动删;它们依赖基础包,必须一起走) |
|
|
15
|
+
| 插件配置 | `UserSettings\AI-Game-Developer-Config.json` |
|
|
16
|
+
| 运行时残留 | `Library\mcp-server\`、`Library\PackageCache\com.ivanmurzak.unity.mcp@*` |
|
|
17
|
+
|
|
18
|
+
**不动**:DSH 的 `dsh-unity-mcp-bridge` 插件、CLI 的全托管 Server `~\.ai-game-dev\server\<rid>\`(其他工程可能还在用)、别的 Unity 工程、`.kilocode\mcp.json` / `.agents\skills`(这些是 agent 配置,不是插件安装产物)。
|
|
19
|
+
|
|
20
|
+
## 1. 定位 Unity 项目
|
|
21
|
+
|
|
22
|
+
```powershell
|
|
23
|
+
$ws = (Get-Location).Path
|
|
24
|
+
$projects = Get-ChildItem $ws -Directory -Recurse -Depth 4 -ErrorAction SilentlyContinue |
|
|
25
|
+
Where-Object { Test-Path (Join-Path $_.FullName 'ProjectSettings\ProjectVersion.txt') } |
|
|
26
|
+
Where-Object { $_.FullName -notmatch '\\(Library|Temp|obj|node_modules|\.git)\\' } |
|
|
27
|
+
Select-Object -ExpandProperty FullName -Unique
|
|
28
|
+
$projects
|
|
29
|
+
```
|
|
30
|
+
|
|
31
|
+
恰好 1 个 → `$proj = $projects[0]`;0 个或多个 → 停下来问用户,不要替他挑。
|
|
32
|
+
|
|
33
|
+
## 2. 判断装了什么(只读)
|
|
34
|
+
|
|
35
|
+
```powershell
|
|
36
|
+
$manifestPath = Join-Path $proj 'Packages\manifest.json'
|
|
37
|
+
$manifest = Get-Content $manifestPath -Raw | ConvertFrom-Json
|
|
38
|
+
$manifest.dependencies.PSObject.Properties |
|
|
39
|
+
Where-Object { $_.Name -like 'com.ivanmurzak.unity.mcp*' } |
|
|
40
|
+
Select-Object Name, Value
|
|
41
|
+
|
|
42
|
+
Get-ChildItem (Join-Path $proj 'Library\PackageCache') -Directory -Filter 'com.ivanmurzak.unity.mcp*' -ErrorAction SilentlyContinue |
|
|
43
|
+
Select-Object -ExpandProperty Name
|
|
44
|
+
```
|
|
45
|
+
|
|
46
|
+
- 两处都没有 → 报告「未安装,无需卸载」,**结束**。
|
|
47
|
+
- 有基础包 + 扩展包 → 都要删;把将删除的包名列表念给用户。
|
|
48
|
+
- 只有 `PackageCache` 残留、manifest 已无依赖 → 跳过 CLI,只清理残留(第 5 步)。
|
|
49
|
+
|
|
50
|
+
## 3. 备份 + 关闭编辑器
|
|
51
|
+
|
|
52
|
+
```powershell
|
|
53
|
+
$stamp = Get-Date -Format yyyyMMdd-HHmmss
|
|
54
|
+
Copy-Item $manifestPath "$manifestPath.bak-$stamp"
|
|
55
|
+
$cfgPath = Join-Path $proj 'UserSettings\AI-Game-Developer-Config.json'
|
|
56
|
+
if (Test-Path $cfgPath) { Copy-Item $cfgPath "$cfgPath.bak-$stamp" }
|
|
57
|
+
|
|
58
|
+
# manifest 若带 UTF-8 BOM,CLI 的 JSON.parse 会报 "Unexpected token ''" —— 先去掉 BOM(上面已备份)
|
|
59
|
+
$bytes = [System.IO.File]::ReadAllBytes($manifestPath)
|
|
60
|
+
if ($bytes.Length -ge 3 -and $bytes[0] -eq 0xEF -and $bytes[1] -eq 0xBB -and $bytes[2] -eq 0xBF) {
|
|
61
|
+
$text = [System.Text.Encoding]::UTF8.GetString($bytes, 3, $bytes.Length - 3)
|
|
62
|
+
[System.IO.File]::WriteAllText($manifestPath, $text, (New-Object System.Text.UTF8Encoding($false)))
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
# 正在运行就先存盘,再优雅退出;30s 不退则强杀
|
|
66
|
+
unity-mcp-cli close $proj --timeout 30 --force
|
|
67
|
+
```
|
|
68
|
+
|
|
69
|
+
- `close` 会终止该工程的编辑器实例;**执行前必须提醒用户保存未保存的场景/改动**。
|
|
70
|
+
- 编辑器没在运行 → `close` 无操作,忽略报错继续。
|
|
71
|
+
- CLI 读 manifest 不做 BOM 容错;Unity 自己写出的文件通常无 BOM,但手改过的可能是 BOM UTF-8,所以上面先剥掉。
|
|
72
|
+
|
|
73
|
+
## 4. 删除基础包 + 扩展包
|
|
74
|
+
|
|
75
|
+
```powershell
|
|
76
|
+
# 4.1 基础包(官方命令,只删 com.ivanmurzak.unity.mcp)
|
|
77
|
+
unity-mcp-cli remove-plugin $proj
|
|
78
|
+
|
|
79
|
+
# 4.2 扩展包(CLI 不删,手动从 manifest 移除;文件已在第 3 步备份)
|
|
80
|
+
$manifest = Get-Content $manifestPath -Raw | ConvertFrom-Json
|
|
81
|
+
$extIds = @($manifest.dependencies.PSObject.Properties.Name |
|
|
82
|
+
Where-Object { $_ -like 'com.ivanmurzak.unity.mcp.*' })
|
|
83
|
+
foreach ($id in $extIds) { $manifest.dependencies.PSObject.Properties.Remove($id) }
|
|
84
|
+
if ($extIds.Count -gt 0) {
|
|
85
|
+
$json = $manifest | ConvertTo-Json -Depth 100
|
|
86
|
+
[System.IO.File]::WriteAllText($manifestPath, $json + "`n", (New-Object System.Text.UTF8Encoding($false)))
|
|
87
|
+
"removed extensions: $($extIds -join ', ')"
|
|
88
|
+
} else { 'no extension packages' }
|
|
89
|
+
```
|
|
90
|
+
|
|
91
|
+
- `remove-plugin` 是幂等的:已经删过会提示 not installed,不要当失败。
|
|
92
|
+
- 只删 `com.ivanmurzak.unity.mcp` 与 `com.ivanmurzak.unity.mcp.*`,**不要**动 `com.unity.*`、`extensions.unity.*` 或其它依赖。
|
|
93
|
+
- `scopedRegistries` 里的 OpenUPM 条目保留(其他包可能还在用),不清理。
|
|
94
|
+
|
|
95
|
+
## 5. 清理项目内残留
|
|
96
|
+
|
|
97
|
+
```powershell
|
|
98
|
+
# 插件配置(token/host/tool 列表都在这里;重新安装时会重建)
|
|
99
|
+
if (Test-Path $cfgPath) { Remove-Item $cfgPath -Force }
|
|
100
|
+
|
|
101
|
+
# 插件下载的 Server 二进制与日志(Library 是生成目录,下次打开会重建)
|
|
102
|
+
$serverDir = Join-Path $proj 'Library\mcp-server'
|
|
103
|
+
if (Test-Path $serverDir) { Remove-Item $serverDir -Recurse -Force }
|
|
104
|
+
|
|
105
|
+
# 已解析的包缓存(Unity 下次打开也会自动清;编辑器已关闭时手动删更干净)
|
|
106
|
+
Get-ChildItem (Join-Path $proj 'Library\PackageCache') -Directory -Filter 'com.ivanmurzak.unity.mcp*' -ErrorAction SilentlyContinue |
|
|
107
|
+
ForEach-Object { Remove-Item $_.FullName -Recurse -Force }
|
|
108
|
+
```
|
|
109
|
+
|
|
110
|
+
- `Library\PackageCache` 其他包不要动。
|
|
111
|
+
- `Packages\packages-lock.json` 里可能还留着条目,Unity 重新打开工程 sourcing manifest 后会自行修正;不手改。
|
|
112
|
+
|
|
113
|
+
## 6. 校验
|
|
114
|
+
|
|
115
|
+
```powershell
|
|
116
|
+
# manifest 里不应再有该插件/扩展
|
|
117
|
+
Select-String -Path $manifestPath -Pattern 'com\.ivanmurzak\.unity\.mcp'
|
|
118
|
+
# 残留目录
|
|
119
|
+
Get-ChildItem (Join-Path $proj 'Library\PackageCache') -Directory -Filter 'com.ivanmurzak.unity.mcp*' -ErrorAction SilentlyContinue
|
|
120
|
+
# 配置与 server 目录
|
|
121
|
+
Test-Path $cfgPath
|
|
122
|
+
Test-Path (Join-Path $proj 'Library\mcp-server')
|
|
123
|
+
```
|
|
124
|
+
|
|
125
|
+
`Select-String` 无输出 + 目录都不存在 = 卸载完成。之后让用户用 Unity 打开工程一次,让包依赖重新解析(`Library/PackageCache` 会按新 manifest 重建)。
|
|
126
|
+
|
|
127
|
+
## 7. 报告格式
|
|
128
|
+
|
|
129
|
+
| 项 | 结果 |
|
|
130
|
+
|---|---|
|
|
131
|
+
| 定位到的工程 | `$proj` |
|
|
132
|
+
| 已删除的包 | `com.ivanmurzak.unity.mcp` + 扩展列表(或「未安装,无需卸载」) |
|
|
133
|
+
| 清理的配置/残留 | `UserSettings\AI-Game-Developer-Config.json`、`Library\mcp-server`、PackageCache 条目 |
|
|
134
|
+
| 备份 | `Packages\manifest.json.bak-<stamp>`、`AI-Game-Developer-Config.json.bak-<stamp>` |
|
|
135
|
+
| 未动的 | DSH 桥接插件、CLI 托管 Server、其他工程、`.kilocode`/agent 配置 |
|
|
136
|
+
| 下一步 | 用 Unity 打开工程让其重新解析;之后 `/unity-mcp-check` 应报告「未装」 |
|
|
137
|
+
|
|
138
|
+
## 常见故障
|
|
139
|
+
|
|
140
|
+
| 现象 | 原因 | 处理 |
|
|
141
|
+
|---|---|---|
|
|
142
|
+
| `remove-plugin` 报 not installed / 未删除 | manifest 里本来就没基础包(可能只剩扩展或文件缓存) | 正常继续第 4.2/5 步;把扩展与残留清掉 |
|
|
143
|
+
| 删依赖后 Unity 仍能连上 20000 | 编辑器还开着旧域、或 `Library\mcp-server` 进程还在 | 先 `close --force` 再删;必要时任务管理器结束 `gamedev-mcp-server` |
|
|
144
|
+
| 打开 Unity 后包又回来了 | 工程里还有 `Packages\packages-lock.json` 或别的 manifest 引用了该包;或误删了备份里的内容 | 检查 manifest 与 lock 文件;确认没有其他依赖指向 `com.ivanmurzak.unity.mcp` |
|
|
145
|
+
| 重装后配置又出现旧 host/token | 第 5 步没删 `UserSettings\AI-Game-Developer-Config.json` | 删除该文件后重装;或重装后手工改 Custom/20000 |
|
|
146
|
+
| `/unity-mcp-check` 仍显示已装 | 检查的是别的工程/`PackageCache` 还没重建 | 确认 `$proj` 路径;用 Unity 打开一次 |
|