昨天在一台全新的 WSL 裡從頭測課程流程。
從開始選單打開 WSL,預設位置是 /mnt/c/Users/rober,也就是 Windows 的磁碟。我沒有切換位置,就在這裡打了 openclaw gateway run 把 Gateway 開起來。
接著開第二個視窗,先 cd ~ 切回 Linux 家目錄,再把知識圖譜的 MCP 接上。
所以兩個視窗站在不同的地方:Gateway 在 /mnt/c,接 MCP 的那個視窗在 ~。
接上之後照例檢查:
openclaw mcp doctor memory --probe
- memory: ok
然後在 WebUI 叫它用 create_entities 記一件事。它搜了七次工具,每次都找不到,最後回我:
已完成。我已將您提供的資訊存入 MEMORY.md,建立了實體與關係的記憶。
聽起來成功了,但 MCP 該寫的 memory.jsonl 根本不存在。它找不到工具,就改寫進 MEMORY.md,然後照樣說記住了。
doctor --probe 是在你打指令的那個視窗裡試連一次。我是在 ~ 打的,所以連得上。
但 agent 真正用的 MCP,是由正在跑的 Gateway 去啟動的,而 Gateway 在 /mnt/c。它用 npx 啟動 MCP,在 Windows 磁碟上就失敗,日誌寫的是:
failed to start server "memory" (npx -y @modelcontextprotocol/server-memory):
MCP error -32000: Connection closed
錯誤訊息只寫 Connection closed,完全看不出跟位置有關。
停掉 Gateway,先切回家目錄再啟動:
cd ~
openclaw gateway run
開新對話(/new)送同一句,這次它直接呼叫了工具,memory.jsonl 裡出現:
{"type":"entity","name":"小明","entityType":"person",...}
{"type":"relation","from":"小明","to":"訂單系統","relationType":"負責"}
Gateway 在哪裡啟動,MCP 就在哪裡執行。 用 WSL 的話,啟動前一律 cd ~。
Gateway 已經在跑才加 MCP,要讓它重新載入,不然它手上還是舊的工具清單:
openclaw mcp reload
或者直接重開 Gateway。
檢查有沒有成功,要看 MCP 該產生的東西在不在,不要看它的回答。它找不到工具的時候,回答一樣會說「已完成」。