[Dev] Opencode /mcps 失敗的原因與專案化解法
/ 4 min read
Table of Contents
背景
- opencode CLI
- VSCode Marketplace 的 opencode 擴充套件
基本上安裝 GitHub MCP,PAT 也設定好了,但出現了一些問題
VSCode CLI 內執行 opencode mcp list GitHub MCP 顯示 connected
但是由擴充套件打開的 opencode 指令下的 /mcps ,GitHub MCP 一直是 failed
不是 MCP 本身壞掉,而是 VSCode 擴充套件讀不到在 shell 裡 export 的環境變數
先說結論
其實這問題根本沒什麼,單純只是我想搞清楚而已…
不要用 Marketplace 的擴充套件問題就眼不見為淨 or 直接寫死 PAT 到 ~/.config/opencode/opencode.json
但我只是想釐清問題隨手記錄一下
從頭開始來,安裝與設定(一步一步)
1) 安裝 opencode CLI
用習慣的方式安裝 opencode(官方文件為準) 安裝後先確認 CLI 可以執行:
opencode --version2) 安裝 VSCode 擴充套件
在 VSCode Marketplace 安裝 opencode 擴充套件,重啟 VSCode
3) 準備 GitHub PAT
在 GitHub 產生 PAT(classic 或 fine-grained 皆可),並保留 token
4) 建立 opencode 設定檔
opencode 的設定檔位置是:
~/.config/opencode/opencode.json
如果資料夾或檔案不存在,先建立:
mkdir -p ~/.config/opencode內容範例:
{ "$schema": "https://opencode.ai/config.json", "mcp": { "github": { "type": "remote", "url": "https://api.githubcopilot.com/mcp/", "enabled": true, "oauth": false, "headers": { "Authorization": "Bearer {env:GITHUB_MCP_PAT}" } } }}這代表 opencode 會從環境變數 GITHUB_MCP_PAT 讀取 token
VSCode 擴充套件也會讀同一份設定檔
5) 先用 CLI 確認 github mcp 是否成功
export GITHUB_MCP_PAT="你的 token"opencode mcp list如果顯示結果 github connected
只要這一步成功,CLI 就是 OK 的
6) 在 VSCode 內用 opencode 擴充套件 確認 github mcp 是否成功
開啟 VSCode 後,開啟 opencode 執行 /mcps
如果顯示結果 github connected
只要這一步成功,擴充套件就是 OK 的
問題描述
- CLI 端
opencode mcp list顯示正常 connected, - 擴充套件打開的 opencode
/mcps顯示github failed - 常見錯誤:
SSE error: Non-200 status code (400)
如果重啟 VSCode 後連 CLI 也失敗,通常就是 token 變成空值了
解法
- 解法是「同一個終端啟動 VSCode」
- 長期解法是「專案內用 direnv 自動載入」
為什麼 CLI 正常,擴充套件的卻失敗
opencode mcp list 在 CLI 會吃到當前 shell 的環境變數,
而 VSCode 的 GUI 是另一個程序,如果是從 Dock/Launcher 啟動,
通常不會載入 ~/.zshrc
因此你在 Terminal 執行過:
export GITHUB_MCP_PAT="..."CLI 能用,但 VSCode 內的 /mcps 會看到空值,最後就回 400
最短修法:同一個終端啟動 VSCode
export GITHUB_MCP_PAT="你的 token"code .這樣 VSCode 會繼承你的環境,擴充套件就能讀到 GITHUB_MCP_PAT
長期方案:direnv 專案化配置
「只在某個專案生效」,而且未來要方便換 token,direnv 很適合
1) 安裝 direnv
brew install direnv2) 在 zsh 啟用 hook
把這行加到 ~/.zshrc:
eval "$(direnv hook zsh)"3) 在專案內新增 .envrc
export GITHUB_MCP_PAT="你的 token"建議把 .envrc 放進 .gitignore,避免 token 被提交
4) 允許這個專案
direnv allow5) 從同一個終端啟動 VSCode
code .這樣 token 只在專案內生效,想換就改 .envrc
排查清單
echo "$GITHUB_MCP_PAT"是否有值export GITHUB_MCP_PAT=是否不小心把變數清空- VSCode 是不是從 Dock 啟動
/mcps的錯誤是否為 400
只要把環境變數來源釐清,通常就能一次解掉